Epic: #76 · Phase 2 of 6
Goal
Make Matrix Coder delegations auditable and live-visible on the Switch UI by mirroring them as Hermes Kanban tasks. Observability layer — not control flow.
Depends on
Phase 1 (roles dispatch the work being mirrored).
Scope / Deliverables
kanban_audit wiring (in hermes_bridge.py or a dedicated module) using hermes_cli.kanban_db directly — never raw SQL.
- Mapping: 1 invocation = parent card; each specialist dispatch = child card. Single-specialist invocation collapses to one card.
- Audit-mirror discipline: create cards
status=running (never ready) with no dispatcher-actionable assignee, so the Kanban dispatcher cannot claim and re-execute the work.
complete_task(summary, metadata, created_cards) carries findings; block_task on failure; add_comment for interim results.
- Spike: confirm
complete_task/block_task behave on a card with no dispatcher-opened run.
- Verify live update on Switch UI (WebSocket events, ~300ms).
Ships when
A matrix invocation appears as a parent card with child cards transitioning running→done/blocked, visible live on Switch UI, with findings in the drawer — and the dispatcher never double-executes.
References
#76 Kanban Integration comment; body Non-Goals clarification.
Revisions (post advisory review)
- Remove the spike — already supported by code.
complete_task/block_task accept never-claimed cards via expected_run_id=None (hermes_cli/kanban_db.py:3144-3161, 3570-3596). Just call with the default.
- Add test: an MC
running card with no run/claim is never claimed by claim_task (CAS WHERE status=ready, :2544) nor promoted to ready by the stale-claim reaper (reaper only touches cards with claim_expires/worker_pid, which MC cards lack).
Epic: #76 · Phase 2 of 6
Goal
Make Matrix Coder delegations auditable and live-visible on the Switch UI by mirroring them as Hermes Kanban tasks. Observability layer — not control flow.
Depends on
Phase 1 (roles dispatch the work being mirrored).
Scope / Deliverables
kanban_auditwiring (inhermes_bridge.pyor a dedicated module) usinghermes_cli.kanban_dbdirectly — never raw SQL.status=running(neverready) with no dispatcher-actionableassignee, so the Kanban dispatcher cannot claim and re-execute the work.complete_task(summary, metadata, created_cards)carries findings;block_taskon failure;add_commentfor interim results.complete_task/block_taskbehave on a card with no dispatcher-opened run.Ships when
A matrix invocation appears as a parent card with child cards transitioning running→done/blocked, visible live on Switch UI, with findings in the drawer — and the dispatcher never double-executes.
References
#76 Kanban Integration comment; body Non-Goals clarification.
Revisions (post advisory review)
complete_task/block_taskaccept never-claimed cards viaexpected_run_id=None(hermes_cli/kanban_db.py:3144-3161, 3570-3596). Just call with the default.runningcard with no run/claim is never claimed byclaim_task(CASWHERE status=ready,:2544) nor promoted toreadyby the stale-claim reaper (reaper only touches cards withclaim_expires/worker_pid, which MC cards lack).