- Merge conflict detection with merge:conflicted event
- Conflict appears in queue state as conflicted
- handleConflict creates conflict-resolution task
- Successful merge after separate task without conflict
- Add 19 comprehensive test cases for TestHarness
- Test createTestHarness() returns all components
- Test seedFixture() creates hierarchies with correct IDs
- Test task dependencies resolved correctly
- Test event capture via getEventsByType/clearEvents
- Test dispatch flow with MockAgentManager
- Test agent completion triggers expected events
- Test full dispatch -> complete flow end-to-end
- Test MockWorktreeManager create/merge/setMergeResult
- Add TestHarness interface with all system components and helpers
- Add createTestHarness() factory wiring full system with mocks
- Add MockWorktreeManager (in-memory worktree simulation)
- Add CapturingEventBus (event capture for verification)
- Wire real DispatchManager and CoordinationManager with mocks
- Export all components via src/test/index.ts
- Add cw merge queue <taskId> to queue tasks for merge
- Add cw merge status to show merge queue status
- Add cw merge next to show next task ready to merge
- Add cw coordinate [--target <branch>] to process all ready merges
- Add coordinationManager to TRPCContext and CreateContextOptions
- Add requireCoordinationManager helper function
- Add queueMerge mutation for queuing tasks for merge
- Add processMerges mutation for processing merges in dependency order
- Add getMergeQueueStatus query for queue state inspection
- Add getNextMergeable query for next mergeable task
Adds MessageRepository to DefaultCoordinationManager for conflict notification:
- Creates info message to agent when merge conflict occurs
- Message includes conflicting file list and resolution instructions
- System-generated messages use senderType='user' with null senderId
- Refactors conflict description into cleaner array.join format
- MergeQueueItem type for merge queue entries
- MergeStatus type: queued | in_progress | merged | conflict
- MergeResult type with task context
- CoordinationManager interface with methods:
- queueMerge: queue completed task for merge
- getNextMergeable: get next task with resolved dependencies
- processMerges: process all ready merges
- handleConflict: bounce-back for conflict resolution
- getQueueState: query queue by status
- Add 14 comprehensive tests for DefaultDispatchManager
- Test queue(), getNextDispatchable(), completeTask(), blockTask()
- Test dispatchNext() with agent dispatch flow
- Test getQueueState() for queue visibility
- Test priority ordering and dependency scenario
- Export DefaultDispatchManager from dispatch module
- Add DefaultDispatchManager class implementing DispatchManager interface
- Implement queue() with task fetching and event emission
- Implement getNextDispatchable() with priority-based ordering
- Implement completeTask() and blockTask() with status updates
- Implement dispatchNext() for agent assignment
- Implement getQueueState() for queue visibility
- Use in-memory Map for queue management
- Create MessageRepository port interface with CRUD and query methods
- Implement DrizzleMessageRepository adapter with nanoid generation
- Add findBySender/findByRecipient for participant-based queries
- Add findPendingForUser for unread user notifications
- Add findRequiringResponse for messages awaiting reply
- Add findReplies for message threading support
- Add 23 tests covering all operations and edge cases
- Update test-helpers with messages table schema
- Re-export from index files following AgentRepository pattern
- TaskQueuedEvent for task queue operations
- TaskDispatchedEvent when task assigned to agent
- TaskCompletedEvent for task completion with success/failure
- TaskBlockedEvent for blocked tasks with reason
- Add TaskRepository to TRPCContext (optional, same pattern as AgentManager)
- Add requireTaskRepository helper function
- Add listTasks procedure (query tasks by planId, ordered by order field)
- Add getTask procedure (get single task by ID, throws NOT_FOUND)
- Add updateTaskStatus procedure (update task status to pending/in_progress/completed/blocked)
- QueuedTask type with priority and dependencies
- DispatchResult type for dispatch operation outcomes
- DispatchManager interface with queue/dispatch/complete/block methods
- Follows hexagonal architecture pattern (same as EventBus, AgentManager)
- Add messages table with sender/recipient pattern for agent-user communication
- Support message types: question, info, error, response
- Add requiresResponse flag and status tracking (pending, read, responded)
- Include parentMessageId for threading responses to original questions
- Add relations for sender/recipient agents and message threading
- Replace placeholder agent command with proper subcommands
- Add agent spawn command with --name, --task, --cwd options
- Add agent stop command to stop running agents
- Add agent list command to show all agents
- Add agent get command for detailed agent info
- Add agent resume command for waiting agents
- Add agent result command to get execution results
- All commands use tRPC client for type-safe communication