The two existing tests assign tasks by manual claim-task — they prove
board lifecycle + contention + session isolation, not capability
routing. One comment claimed 'intake tasks requiring freebsd' while the
code used plain create-task with no required capabilities; corrected,
and added doc comments scoping each test honestly.
Add scheduler_routes_intake_tasks_by_capability: the actual Phase 1b
proof. Two agents with disjoint capabilities, two intake-task submissions
with matching required caps, and the scheduler's pick_agent assigns each
task to the capable agent — no manual claim. Note capabilities must be
registered in array form (['freebsd']); pick_agent deserializes Vec<String>,
so the object form scores zero.
All 3 board tests pass; full colibri-daemon suite green (91 unit +
integration), clippy --tests clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Phase 1b: two agents claim distinct tasks on the board.
Registers sysadmin (freebsd) and db-admin (postgres), creates
two tasks, each agent claims one, both transition queued→claimed
→started→done. Proves different agents get different tasks.
Phase 1c: one agent handles two tasks with isolated sessions.
Registers one worker (freebsd), submits two freebsd tasks,
same agent claims both, both transition to done independently.
Documents current behavior (no guard against multi-claim) and
proves session isolation.
All workspace tests green (0 failures).
Proves the coordination board handles two agents concurrently:
- Register agents with distinct capability sets
- Create tasks visible to both agents
- Each agent claims only their assigned task
- Tasks flow through the full lifecycle: queued→claimed→started→done
- Final state: both done, zero queued
Uses isolated daemon with temp paths — zero production impact.