Coordination board (Needs-you cockpit) — ideation - #494
Conversation
Replace the Plan tab with a live board projection (issue #493): lens tabs (Needs you / In flight / Resolved / All), rich rows with owner + presence + work-links + GitHub back-refs, one-gesture triage, capture bar. Data comes from projectBoard() over the compiled plan, agent roster, and episodes, topped up with sample archetypes. Verbs are optimistic local stubs; GitHub/herdr wiring is display-only.
Backend: a /rooms/{room}/board projection (app/services/board.py +
routes/board.py) over three sources — the stateful action/concern
event ledger (#392), the compiled plan checklist, and the live
episode — with the shared triage verbs (claim/block/resolve/promote/
dismiss) and NL capture. Richer board state + display fields (owner,
work-links, GitHub back-ref, choices) ride in the event payload so the
#392 primitive is untouched. Verbs are the same vocabulary agents drive
over the ledger, so human and agent triage share one surface. 10 tests.
Frontend: RoomBoard now fetches the real endpoint and drives real verbs
(optimistic + reload), board_updated SSE nudges a refresh, and dev:mock
gains a board fixture. board.ts is now a thin lens helper over the API
types.
A Rich terminal client over the board endpoints: `mycelium board` (default 'needs you' lens, --all, --watch) plus the shared verbs (claim/resolve/block/promote/dismiss) and `capture`. Short-id prefixes resolve to the full item so callers don't type UUIDs. Verified live against a real room end-to-end (capture → claim → block → resolve). Also: claiming an item now clears needs_you, so claimed work moves from the 'Needs you' lens to 'In flight' where it belongs.
Address the 'looks like chat' feel: rows now read as objects, not messages — a leading chevron + state anchor, a kind pill, a dominant title, and quiet right-aligned meta (owner/presence · CI · PR · age). No avatars, no timestamp column. Clicking a row (or the chevron) expands it in place to reveal detail-on-demand: id, source, provenance, opened- at, dependencies (waiting-on/blocks), work links, GitHub back-ref, and reply/open-PR affordances. Accordion as progressive disclosure, not navigation; one-gesture triage stays on the collapsed row.
Framing / vision (tracked here, deliberately not in the issue)This branch started as "replace the plan surface with a board" and drifted into a longer conversation about what this thing actually is. Capturing that here so it doesn't evaporate. This is the north star; the code above is only partway to it. The axisIt's a coordination layer for teams with more agents in flight than any one person can track. GitHub stays the source of truth for what needs doing — we don't replace or mirror it. What we add is the layer where agents pick up that work and coordinate with each other to get it done, over a shared message bus (the SLIM Day to day it's a live board of work in progress, except the cooks are agents. You watch them claim tickets, hand off, hit blockers against real GitHub issues. When one does something that needs a human — changes an authz model it isn't sure about, hits a call above its pay grade — it raises that through the fabric and the exception lands in front of the right person. You're not digging through diffs or sitting in a review queue guessing; the coordination routes the judgment calls to you. What it is deliberately not
The anti-rot rules (structural, not aspirational)
Prior art: this is "Delta, for coordination"Zed's Delta / DeltaDB does exactly this for code: Git stays authoritative, DeltaDB captures what happens between commits (edits + conversation) anchored so it can't rot, and you steer by asking the agent instead of reconstructing intent from a diff. We're one altitude up: capture what happens between issues, across teams and agents, over a shared fabric instead of one worktree. Same discipline, coordination granularity. (https://zed.dev/blog/introducing-delta) The three organs (keep them separate)
The drift we're trying to closeWhat's built is closer to a human-driven triage board (Trello-ish). The vision wants:
The commits after this comment are a first pass at pulling the board toward that axis. |
…-rot TTL First pass pulling the board from human-triage toward the target model (PR #494 framing): agents coordinate the doing and *escalate* what needs human judgment; the human steers exceptions. - Escalations are a first-class board input: POST /board/escalate (any awake agent can call it), an 'escalation' kind that always needs-you and floats to the top of the lens. Names the agent and its ask (sign-off / decision / review / unblock). - Anti-rot made structural, not aspirational: bespoke captures/escalations carry a default TTL and self-expire; only a GitHub-backed item is durable. Rows expose ephemeral + expires_in so a decaying pointer never reads as a durable record. - Wired through all three surfaces: backend projection + route (+3 tests), 'mycelium board escalate' CLI, GUI escalation rows + transience hints, dev:mock fixture.
Summary
Adds a coordination board — a live projection over the room's event ledger — across the backend, CLI, and GUI. It replaces the flat
plan/tasks.mdsurface (the Plan tab) with a lens-based board of concern/action rows (issue #493).This is an exploratory / ideation branch (draft). It is wired end-to-end and verified live, but the design is still moving — see the pinned framing comment below for where this is headed.
What's here
Backend (
fastapi-backend)app/services/board.py+app/routes/board.py:GET /rooms/{room}/boardprojects three sources into one row list — the statefulaction/concernevent ledger (feat: first-class typedeventmessage primitive (source_event, action, concern) #392), the compiled plan checklist, and the live episode — with live presence, plus the triage verbs (claim/block/resolve/promote/dismiss) and NLcapture. Richer board state + display fields ride in the eventpayload, so the shared feat: first-class typedeventmessage primitive (source_event, action, concern) #392 primitive is untouched.CLI (
mycelium-cli)mycelium board— default "Needs you" lens,--all,--watch; the five verbs +capture; short-id prefixes resolve to the full item. 7 tests.Frontend (
mycelium-frontend)RoomBoardreplaces the Plan tab: three lenses (Needs you / In flight / Resolved), rows rendered as stateful objects with expand-on-demand detail, one-gesture triage, ⌘K capture.board_updatedSSE nudges a live refresh;dev:mockhas a board fixture.Status / honesty
promotestamps a GitHub back-link and resolves the row, but does not file the issue yet (needsgh).Not for merge
Draft. The point of this branch is to think, not to ship. Framing/vision is tracked in a comment below rather than in the issue.
Related: #493, #446, #450, #301, #476