Files
paseo/REPORT-daemon-e2e-audit.md
T
Mohamed BoudraandClaude Opus 4.5 3459354e45 Add daemon E2E test coverage audit report
Created REPORT-daemon-e2e-audit.md with comprehensive analysis:
- Current test coverage: 5 passing tests (Codex provider)
- DaemonClient API coverage: 11/16 methods tested
- Message protocol coverage: 6/15 inbound, 5/17 outbound
- Prioritized recommendations for additional tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 17:33:23 +07:00

7.4 KiB

Daemon E2E Test Coverage Audit

Date: 2025-12-25 Test File: packages/server/src/server/daemon.e2e.test.ts

Test Run Summary

5 passed, 2 skipped in 40.8s

All active tests pass. The 2 skipped tests are Claude permission flow tests (documented issue with Claude SDK behavior in daemon context).


Current Test Coverage

Test: creates agent and receives response

  • Provider: Codex
  • Coverage:
    • createAgent() → creates agent, returns AgentSnapshotPayload
    • sendMessage() → sends text message to agent
    • waitForAgentIdle() → waits for agent to complete
    • Verifies agent_state message with status: "idle"
    • Verifies agent_stream events: turn_started, turn_completed, timeline (assistant_message)

Test: permission flow: Codex > approves permission and executes command

  • Provider: Codex
  • Coverage:
    • waitForPermission() → receives permission_requested event
    • respondToPermission() → sends allow response
    • Verifies permission_resolved event with behavior: "allow"
    • Verifies timeline has tool_call with status: "granted"
    • Verifies file system side-effect (file created)

Test: permission flow: Codex > denies permission and prevents execution

  • Provider: Codex
  • Coverage:
    • waitForPermission() → receives permission_requested event
    • respondToPermission() → sends deny response with message
    • Verifies permission_resolved event with behavior: "deny"
    • Verifies timeline has tool_call with status: "denied"
    • Verifies file system side-effect (file NOT created)

Test: persistence flow > persists and resumes Codex agent

  • Provider: Codex
  • Coverage:
    • Agent creation and messaging
    • deleteAgent() → deletes active agent
    • Verifies agent_deleted event
    • resumeAgent(handle) → resumes from persistence handle
    • Verifies resumed agent can receive messages
    • Verifies conversation context preserved

Test: multi-agent orchestration > parent agent creates child via agent-control MCP

  • Provider: Codex (parent and child)
  • Coverage:
    • Parent agent uses agent-control MCP to call create_agent
    • Verifies tool call in timeline: tool: "create_agent", server: "agent-control"
    • Verifies both parent and child visible in agent_state messages
    • Verifies child agent ID extracted from tool output

Skipped: permission flow: Claude > approves/denies permission

  • Reason: Claude SDK doesn't request permissions in daemon context
  • Note: Direct claude-agent.test.ts permission tests pass; issue is daemon-specific

DaemonClient API Coverage

Method Tested Notes
connect() ✅ Used in beforeEach via createDaemonTestContext()
close() ✅ Used in afterEach via cleanup()
createAgent() ✅ All tests
deleteAgent() ✅ Persistence test
listAgents() ❌ Not explicitly tested
listPersistedAgents() ❌ Not tested (Codex doesn't implement it)
resumeAgent() ✅ Persistence test
sendMessage() ✅ All tests
cancelAgent() ❌ Not tested
setAgentMode() ❌ Not tested
respondToPermission() ✅ Permission tests
waitForAgentIdle() ✅ All tests
waitForPermission() ✅ Permission tests
on() (event subscription) ❌ Not tested directly
getMessageQueue() ✅ Used for assertions
clearMessageQueue() ✅ Used to isolate test phases

Message Protocol Coverage

Inbound Messages (Client → Daemon)

Message Type Tested
create_agent_request ✅
delete_agent_request ✅
send_agent_message ✅
agent_permission_response ✅
resume_agent_request ✅
cancel_agent_request ❌
set_agent_mode ❌
list_persisted_agents_request ❌
refresh_agent_request ❌
initialize_agent_request ❌
git_diff_request ❌
file_explorer_request ❌
git_repo_info_request ❌
clear_agent_attention ❌
list_provider_models_request ❌

Outbound Messages (Daemon → Client)

Message Type Tested
agent_state ✅
agent_stream ✅ (partial - timeline, turn events, permissions)
session_state ❌ (received but not explicitly verified)
agent_deleted ✅
agent_permission_request ✅
agent_permission_resolved ✅
list_persisted_agents_response ❌
status ❌
activity_log ❌
assistant_chunk ❌
audio_output ❌ (realtime mode)
transcription_result ❌ (realtime mode)
artifact ❌
conversation_loaded ❌
git_diff_response ❌
file_explorer_response ❌
git_repo_info_response ❌
list_provider_models_response ❌

Agent Provider Coverage

Provider Basic Flow Permissions Persistence Multi-agent
Codex ✅ ✅ ✅ ✅
Claude ❌ ⏸️ (skipped) ❌ ❌

Coverage Gaps & Recommendations

Priority 1: High Value / Low Effort

  1. cancelAgent() test

    • Cancel an agent mid-execution
    • Verify agent stops and reaches idle/error state
    • Currently untested DaemonClient method
  2. setAgentMode() test

    • Create agent in one mode, switch to another
    • Verify mode change reflected in agent state
    • Currently untested DaemonClient method
  3. listAgents() test

    • Connect client, call listAgents()
    • Verify session_state returns current agents
    • Currently the method exists but is never called in tests

Priority 2: Provider Parity

  1. Claude basic flow test

    • Currently no passing Claude tests
    • Add simple "creates agent and receives response" for Claude
    • Investigate why Claude permissions behave differently in daemon
  2. Claude persistence test

    • Resume Claude agent from persistence handle
    • Verify conversation context preserved

Priority 3: Edge Cases

  1. Error handling test

    • Agent encounters error during execution
    • Verify error state, lastError field populated
    • Verify recovery (can send new message after error)
  2. Connection handling test

    • Reconnect after disconnect
    • Multiple simultaneous clients
    • Rate limiting/timeout behavior
  3. Message ordering test

    • Send multiple messages rapidly
    • Verify ordering preserved
    • Verify no race conditions

Priority 4: Feature Coverage (Lower Priority)

  1. Image attachment test

    • sendMessage() with images option
    • Requires multimodal agent support
  2. Git integration tests

    • git_diff_request/response
    • git_repo_info_request/response
    • Requires git repository setup
  3. File explorer tests

    • file_explorer_request/response
    • Navigate filesystem via daemon

Summary

Current coverage: Core happy-path scenarios for Codex agents (create, message, permission, persistence, multi-agent).

Gaps:

  • No Claude provider tests pass (permissions issue)
  • Several DaemonClient methods untested (cancelAgent, setAgentMode, listAgents)
  • No error/edge case testing
  • No tests for auxiliary features (git, file explorer, models)

Recommendation: Focus on Priority 1 & 2 items before expanding to edge cases. The Claude permission investigation should be a separate task as it involves SDK behavior analysis.