diff --git a/agents_to_delete.txt b/agents_to_delete.txt deleted file mode 100644 index d94f31d..0000000 --- a/agents_to_delete.txt +++ /dev/null @@ -1,33 +0,0 @@ -bb-verify2-mlnaouad -bb-bridge-fix-mlnaja4j -bb-join-mlna9nbo -bb-invepic-mln9perd -bb-invalid-epic-mln9hraq -bb-m1-mln9perd -bb-leave-mln9perd -bb-member3-mln9hraq -bb-member2-mln9hraq -bb-switch-mln9perd -bb-nolabel-test-mln9hraq -bb-leave-test-mln9hraq -bb-switch-test-mln9hraq -bb-join-test-mln9hraq -bb-idem-test-mln97lyt -bb-switch-test-mln97lyt -bb-join-test-mln97lyt -bb-switch-test-mln8xxn4 -bb-nolabel-test-mln8pdgh -bb-leave-test-mln8pdgh -bb-idem-test-mln8pdgh -bb-switch-test-mln8pdgh -bb-join-test-mln8pdgh -bb-leave-test-mln8hp8j -bb-idem-test-mln8hp8j -bb-switch-test-mln8hp8j -bb-join-test-mln8hp8j -bb-fresh-test-mln8canu -bb-step-test-mln872rm -bb-debug-test-mln83q18 -bb-switch-test-mln7xyls -bb-join-test-mln7xyls -bb-test-agent diff --git a/agents_to_delete2.txt b/agents_to_delete2.txt deleted file mode 100644 index c4f0e00..0000000 --- a/agents_to_delete2.txt +++ /dev/null @@ -1,114 +0,0 @@ -bb-ui2.29 -bb-atf -bb-z6s -bb-54x -bb-nuy -bb-98c -bb-3ha -bb-22l -bb-5am -bb-dwz -bb-3dv -bb-only-ui-agent -bb-graph-agent-1 -bb-ui-agent-2 -bb-ui-agent-1 -bb-verify-mlnavzwu -bb-final-mlnar702 -bb-verify2-mlnaouad -bb-final-mlnalaqz -bb-bridge-fix-mlnaja4j -bb-verify-mlnadaip -bb-switch-mlna9nbo -bb-join-mlna9nbo -bb-invepic-mln9perd -bb-m2-mln9perd -bb-invalid-epic-mln9hraq -bb-m1-mln9perd -bb-leave-mln9perd -bb-member3-mln9hraq -bb-member2-mln9hraq -bb-member1-mln9hraq -bb-switch-mln9perd -bb-nolabel-test-mln9hraq -bb-join-mln9perd -bb-leave-test-mln9hraq -bb-idem-test-mln9hraq -bb-debug-mln9knzs -bb-switch-test-mln9hraq -bb-join-test-mln9hraq -bb-smoke-mln9e525 -bb-idem-test-mln97lyt -bb-switch-test-mln97lyt -bb-join-test-mln97lyt -bb-switch-test-mln8xxn4 -bb-join-test-mln8xxn4 -bb-nolabel-test-mln8pdgh -bb-leave-test-mln8pdgh -bb-idem-test-mln8pdgh -bb-switch-test-mln8pdgh -bb-join-test-mln8pdgh -bb-leave-test-mln8hp8j -bb-idem-test-mln8hp8j -bb-switch-test-mln8hp8j -bb-join-test-mln8hp8j -bb-daemon-test-mln8e4tf -bb-fresh-test-mln8canu -bb-upd-test-mln8981k -bb-step-test-mln872rm -bb-debug-test-mln83q18 -bb-switch-test-mln7xyls -bb-join-test-mln7xyls -bb-linus-swarm -bb-ff6 -bb-agent-graph-1 -bb-1xj -bb-agent-a -bb-agent-b -bb-active-agent -bb-agent-ui-1 -bb-green-falcon -bb-zenchantlive -bb-silver-castle -bb-test-agent -bb-9p8 -bb-u6f.3 -bb-6aj.2 -bb-6aj.1 -beadboard-yad -beadboard-eo8 -beadboard-c08 -bb-ui2.30 -bb-buff -bb-jp2 -bb-79b -bb-1y7 -bb-u6f.6.6 -bb-u6f.6.4 -bb-u6f.6.3 -bb-u6f.6.2 -bb-u6f.6.1 -bb-u6f.6 -bb-kp5 -bb-dcv.8 -bb-dcv.7 -bb-dcv.6 -bb-dcv.5 -bb-dcv.4 -bb-dcv.3 -bb-dcv.2 -bb-dcv.1 -bb-dcv -bb-u6f.1 -bb-u6f -bb-trz.4 -bb-trz.3 -bb-trz.2 -bb-trz.1 -bb-zzr -bb-1d1 -bb-5pw -bb-format-check -bb-buff.4 -bb-u6f.6.5 -bb-u6f.2 diff --git a/all_beads.txt b/all_beads.txt deleted file mode 100644 index 63169b5..0000000 --- a/all_beads.txt +++ /dev/null @@ -1,343 +0,0 @@ -○ beadboard-xte [● P0] [epic] - DAG Views UX Overhaul (Macro/Micro Contexts) -✓ beadboard-03r [P0] [bug] - Fix Real-time SSE Refresh Across All Views -○ beadboard-43c [● P0] [task] - Diff test issue -○ beadboard-dp2 [● P0] [task] - Testing from curl -✓ beadboard-8af [P0] [task] - Testing file system events -○ beadboard-hhy [● P0] [task] - Testing another flow -○ beadboard-1sc [● P0] [task] - Testing SSE Flow -○ beadboard-6lq [● P0] [task] - Testing CURL -○ beadboard-0ui [● P0] [task] - Test Live Updates Cache Busting -✓ beadboard-8rg [P0] [task] - Fix live updates bug in watcher.ts -○ beadboard-yg7 [● P0] [task] - Make Archetypes and Templates Editable in Swarm View -✓ bb-ui2.29 [P0] [task] - bb-ui2.29: Activity View - ActivityPanel with agent roster + timeline (blocked by: bb-ui2) -○ bb-atf [● P0] [task] [gt:agent role:ui swarm:beadboard-2on] - Agent: swarm-view-integrator -○ bb-z6s [● P0] [task] [gt:agent role:ui] - Agent: social-view-integrator -○ bb-54x [● P0] [task] [gt:agent role:graph] - Agent: graph-integrator -○ bb-nuy [● P0] [task] [gt:agent role:ui] - Agent: swarm-card-builder -○ bb-98c [● P0] [task] [gt:agent role:ui] - Agent: social-card-builder -○ bb-3ha [● P0] [task] [gt:agent role:ui] - Agent: sessions-integrator -○ bb-22l [● P0] [task] [gt:agent role:ui] - Agent: mobile-nav-builder -○ bb-5am [● P0] [task] [gt:agent role:ui] - Agent: topbar-builder -○ bb-dwz [● P0] [task] [gt:agent role:ui] - Agent: leftpanel-builder -○ bb-3dv [● P0] [task] [gt:agent role:ui] - Agent: rightpanel-builder -✓ bb-ui2.0 [P0] [task] - BLOCKER: Update all bb-ui2 bead descriptions with proper prompt format (blocks: bb-ui2.14, bb-ui2.7, bb-ui2.2, bb-ui2.20, bb-ui2.3, bb-ui2.19, bb-ui2.11, bb-ui2.1, bb-ui2.4, bb-ui2.15, bb-ui2.6, bb-ui2.8, bb-ui2.12, bb-ui2.10, bb-ui2.5, bb-ui2.17, bb-ui2.16, bb-ui2.9, bb-ui2.13, bb-ui2.18) -○ bb-only-ui-agent [● P0] [task] [gt:agent role:ui] - Agent: only-ui-agent -○ bb-graph-agent-1 [● P0] [task] [gt:agent role:graph] - Agent: graph-agent-1 -○ bb-ui-agent-2 [● P0] [task] [gt:agent role:ui] - Agent: ui-agent-2 -○ bb-ui-agent-1 [● P0] [task] [gt:agent role:ui] - Agent: ui-agent-1 -○ bb-verify-mlnavzwu [● P0] [task] [gt:agent swarm:bb-buff] - Agent: verify-mlnavzwu -○ bb-final-mlnar702 [● P0] [task] [gt:agent swarm:bb-buff swarm:debug] - Agent: final-mlnar702 -○ bb-verify2-mlnaouad [● P0] [task] [gt:agent] - Agent: verify2-mlnaouad -○ bb-final-mlnalaqz [● P0] [task] [gt:agent swarm:bb-buff] - Agent: final-mlnalaqz -○ bb-bridge-fix-mlnaja4j [● P0] [task] [gt:agent] - Agent: bridge-fix-mlnaja4j -○ bb-verify-mlnadaip [● P0] [task] [gt:agent swarm:manual-test swarm:shell-test] - Agent: verify-mlnadaip -○ bb-switch-mlna9nbo [● P0] [task] [gt:agent swarm:bb-buff.2] - Agent: switch-mlna9nbo -○ bb-join-mlna9nbo [● P0] [task] [gt:agent] - Agent: join-mlna9nbo -○ bb-invepic-mln9perd [● P0] [task] [gt:agent] - Agent: invepic-mln9perd -○ bb-m2-mln9perd [● P0] [task] [gt:agent swarm:bb-buff] - Agent: m2-mln9perd -○ bb-invalid-epic-mln9hraq [● P0] [task] [gt:agent] - Agent: invalid-epic-mln9hraq -○ bb-m1-mln9perd [● P0] [task] [gt:agent] - Agent: m1-mln9perd -○ bb-leave-mln9perd [● P0] [task] [gt:agent] - Agent: leave-mln9perd -○ bb-member3-mln9hraq [● P0] [task] [gt:agent] - Agent: member3-mln9hraq -○ bb-member2-mln9hraq [● P0] [task] [gt:agent] - Agent: member2-mln9hraq -○ bb-member1-mln9hraq [● P0] [task] [gt:agent role:tester] - Agent: member1-mln9hraq -○ bb-switch-mln9perd [● P0] [task] [gt:agent] - Agent: switch-mln9perd -○ bb-nolabel-test-mln9hraq [● P0] [task] [gt:agent] - Agent: nolabel-test-mln9hraq -○ bb-join-mln9perd [● P0] [task] [gt:agent swarm:bb-buff] - Agent: join-mln9perd -○ bb-leave-test-mln9hraq [● P0] [task] [gt:agent] - Agent: leave-test-mln9hraq -○ bb-idem-test-mln9hraq [● P0] [task] [gt:agent swarm:bb-buff] - Agent: idem-test-mln9hraq -○ bb-debug-mln9knzs [● P0] [task] [gt:agent swarm:bb-buff] - Agent: debug-mln9knzs -○ bb-switch-test-mln9hraq [● P0] [task] [gt:agent] - Agent: switch-test-mln9hraq -○ bb-join-test-mln9hraq [● P0] [task] [gt:agent] - Agent: join-test-mln9hraq -○ bb-smoke-mln9e525 [● P0] [task] [gt:agent swarm:test] - Agent: smoke-mln9e525 -○ bb-idem-test-mln97lyt [● P0] [task] [gt:agent] - Agent: idem-test-mln97lyt -○ bb-switch-test-mln97lyt [● P0] [task] [gt:agent] - Agent: switch-test-mln97lyt -○ bb-join-test-mln97lyt [● P0] [task] [gt:agent] - Agent: join-test-mln97lyt -○ bb-switch-test-mln8xxn4 [● P0] [task] [gt:agent] - Agent: switch-test-mln8xxn4 -○ bb-join-test-mln8xxn4 [● P0] [task] [gt:agent role:tester] - Agent: join-test-mln8xxn4 -○ bb-nolabel-test-mln8pdgh [● P0] [task] [gt:agent] - Agent: nolabel-test-mln8pdgh -○ bb-leave-test-mln8pdgh [● P0] [task] [gt:agent] - Agent: leave-test-mln8pdgh -○ bb-idem-test-mln8pdgh [● P0] [task] [gt:agent] - Agent: idem-test-mln8pdgh -○ bb-switch-test-mln8pdgh [● P0] [task] [gt:agent] - Agent: switch-test-mln8pdgh -○ bb-join-test-mln8pdgh [● P0] [task] [gt:agent] - Agent: join-test-mln8pdgh -○ bb-leave-test-mln8hp8j [● P0] [task] [gt:agent] - Agent: leave-test-mln8hp8j -○ bb-idem-test-mln8hp8j [● P0] [task] [gt:agent] - Agent: idem-test-mln8hp8j -○ bb-switch-test-mln8hp8j [● P0] [task] [gt:agent] - Agent: switch-test-mln8hp8j -○ bb-join-test-mln8hp8j [● P0] [task] [gt:agent] - Agent: join-test-mln8hp8j -○ bb-daemon-test-mln8e4tf [● P0] [task] [gt:agent role:tester swarm:daemon-test] - Agent: daemon-test-mln8e4tf -○ bb-fresh-test-mln8canu [● P0] [task] [gt:agent] - Agent: fresh-test-mln8canu -✓ bb-upd-test-mln8981k [P0] [task] [gt:agent swarm:manual-test] - Agent: upd-test-mln8981k -✓ bb-step-test-mln872rm [P0] [task] [gt:agent] - Agent: step-test-mln872rm -✓ bb-debug-test-mln83q18 [P0] [task] [gt:agent] - Agent: debug-test-mln83q18 -✓ bb-switch-test-mln7xyls [P0] [task] [gt:agent] - Agent: switch-test-mln7xyls -✓ bb-join-test-mln7xyls [P0] [task] [gt:agent] - Agent: join-test-mln7xyls -✓ bb-linus-swarm [P0] [task] [gt:agent swarm:debug swarm:debug-allow-stale swarm:debug-test swarm:test-flush] - Agent: linus-swarm -✓ bb-ff6 [P0] [bug] - P0: Infinite refresh loop during agent heartbeats -✓ bb-agent-graph-1 [P0] [task] [gt:agent role:graph] - Agent: agent-graph-1 -✓ bb-1xj [P0] [task] [agent gt:agent] - Agent: linus -✓ bb-agent-a [P0] [task] [gt:agent role:ui] - Agent: agent-a -✓ bb-agent-b [P0] [task] [gt:agent role:backend] - Agent: agent-b -✓ bb-active-agent [P0] [task] [gt:agent role:infra] - Agent: active-agent -✓ bb-agent-ui-1 [P0] [task] [gt:agent role:ui] - Agent: UI Agent 1 -✓ bb-green-falcon [P0] [task] [gt:agent role:ui] - Agent: green-falcon -✓ bb-zenchantlive [P0] [task] [gt:agent role:architect] - Agent: zenchantlive -◐ bb-silver-castle [● P0] [task] [gt:agent role:backend] - Agent: silver-castle -✓ bb-test-agent [P0] [task] [gt:agent] - Agent: bb-test-agent -✓ bb-9p8 [P0] [task] - ARCHITECTURAL DECISION: Agent Identity Consolidation -✓ bb-yre [P0] [task] - Protocol Specification: Identity, Heartbeat, and Overlap Contracts -✓ bb-xtu [P0] [bug] @green-falcon [graph p0 polling realtime] - P0: /graph page stale polling/realtime updates -✓ bb-u6f.3 [P0] [task] @green-falcon [agents metrics] - Implement Social-Dense Sessions UI (blocked by: bb-u6f, bb-u6f.2, bb-u6f.4, blocks: bb-u6f.5) -✓ bb-bvn [P0] [epic] [graph react-flow] - Dependency Graph (React Flow) (blocked by: bb-trz, blocks: bb-xhm, bb-29x) -✓ bb-ymg.2 [P0] [task] [api mutation] - Implement mutation API for create/update/close/reopen/comment operations (blocked by: bb-ymg, bb-ymg.1, bb-ymg.1.1, blocks: bb-ymg.3, bb-ymg.4) -✓ bb-ymg.1 [P0] [task] @zenchantlive [bridge execfile] - Implement bd bridge using child_process.execFile with project-scoped cwd (blocked by: bb-ymg, bb-6aj.2, blocks: bb-ymg.2) -✓ bb-tpc.3 [P0] [task] [api sse] - Implement SSE events API endpoint with heartbeat and event IDs (blocked by: bb-tpc, bb-tpc.2, bb-tpc.5, blocks: bb-tpc.4) -✓ bb-tpc.2 [P0] [task] [stability watcher] - Add debounce/coalescing and transient lock handling for file change bursts (blocked by: bb-tpc, bb-tpc.1, bb-tpc.5, blocks: bb-xhm.2, bb-tpc.3) -✓ bb-tpc.1 [P0] [task] [chokidar watcher] - Implement chokidar watch manager for registered projects (blocked by: bb-tpc, bb-6aj.2, bb-tpc.5, blocks: bb-tpc.2) -✓ bb-tpc [P0] [epic] [realtime sse watcher] - Live File Watching and SSE Transport (blocks: bb-ymg, bb-u6f, bb-xhm) -✓ bb-6aj.3 [P0] [task] @zenchantlive [performance scanner] - Build scanner with profile-root default and depth/ignore controls (blocked by: bb-6aj, bb-6aj.1, bb-6aj.5) -✓ bb-6aj.2 [P0] [task] @agent-a [api registry] - Implement registry API for add/remove/list operations (blocked by: bb-6aj, bb-6aj.1, blocks: bb-ymg.1, bb-6aj.4, bb-tpc.1) -✓ bb-6aj.1 [P0] [task] @agent-a [config registry] - Persist project registry in %USERPROFILE%\\.beadboard\\projects.json (blocked by: bb-6aj, blocks: bb-6aj.2, bb-6aj.3) -✓ bb-6aj [P0] [epic] [multi-project scanner] - Project Registry and Multi-Project Scanner (blocked by: bb-92d) -✓ bb-92d.6 [P0] [task] [guardrail safety] - Add guardrail test preventing direct writes to .beads/issues.jsonl (blocked by: bb-92d) -✓ bb-92d.5 [P0] [task] [paths windows] - Implement Windows path normalization utilities (blocked by: bb-92d) -✓ bb-92d.4 [P0] [task] [jsonl parser] - Implement JSONL parser with defaults and malformed-line tolerance (blocked by: bb-92d, bb-92d.3, blocks: bb-trz.1) -✓ bb-92d.3 [P0] [task] [schema types] - Define canonical Beads TypeScript schema types (blocked by: bb-92d, blocks: bb-92d.4) -✓ bb-92d.1 [P0] [task] [foundation nextjs] - Bootstrap Next.js 15 + React 19 + TypeScript strict (blocked by: bb-92d) -✓ bb-92d [P0] [epic] [beadboard foundation windows] - Foundation and Read/Write Boundary (blocks: bb-6aj, bb-bc4, bb-trz) -✓ beadboard-gb0.5 [P1] [task] - Wire assign mode into UnifiedShell (blocked by: beadboard-gb0, beadboard-gb0.1, beadboard-gb0.3, blocks: beadboard-gb0.7) -✓ beadboard-gb0.4 [P1] [task] - Create useGraphAnalysis hook (blocked by: beadboard-gb0, blocks: beadboard-gb0.1) -✓ beadboard-gb0.3 [P1] [task] - Create AssignmentPanel component (blocked by: beadboard-gb0, blocks: beadboard-gb0.5) -✓ beadboard-gb0.2 [P1] [task] - Add assign mode to WorkflowGraph + GraphNodeCard (blocked by: beadboard-gb0) -✓ beadboard-gb0.1 [P1] [task] - Rewrite SmartDag with progressive disclosure (blocked by: beadboard-gb0, beadboard-gb0.4, blocks: beadboard-gb0.5) -○ beadboard-gb0 [● P1] [epic] - Unify Graph + Swarm into Single Enhanced Graph View -✓ beadboard-7jp.7 [P1] [task] @Antigravity (Engineer) - Templates UI edit mode (blocked by: beadboard-7jp, beadboard-7jp.4, blocks: beadboard-7jp.6) -✓ beadboard-7jp.5 [P1] [task] @Antigravity (Engineer) - Archetypes UI edit mode (blocked by: beadboard-7jp, beadboard-7jp.3, blocks: beadboard-7jp.6) -✓ beadboard-7jp.4 [P1] [task] @Antigravity (Engineer) - Templates API routes (blocked by: beadboard-7jp, beadboard-7jp.2, blocks: beadboard-7jp.7) -✓ beadboard-7jp.3 [P1] [task] @Antigravity (Engineer) - Archetypes API routes (blocked by: beadboard-7jp, beadboard-7jp.1, blocks: beadboard-7jp.5) -✓ beadboard-7jp.2 [P1] [task] - Templates server functions (blocked by: beadboard-7jp, blocks: beadboard-7jp.4) -✓ beadboard-7jp.1 [P1] [task] - Archetypes server functions (blocked by: beadboard-7jp, blocks: beadboard-7jp.3) -○ beadboard-7jp [● P1] [epic] - Swarm Archetypes & Templates CRUD -○ beadboard-yad [● P1] [task] [agent:coder] - Implement Frontend UI (blocked by: beadboard-eo8) -◐ beadboard-eo8 [● P1] [task] @sysarchitect-01 [agent:architect] - Design New Component (blocked by: beadboard-c08, blocks: beadboard-yad) -✓ beadboard-c08 [P1] [task] @sysarchitect-01 [agent:architect agent:system-architect status:documenting] - Analyze Legacy System (blocks: beadboard-eo8) -○ beadboard-2ua [● P1] [task] - Implement Frontend UI -○ beadboard-2on [● P1] [molecule] - Swarm: Unified UX - Earthy Dark Shell with Social/Graph/Swarm Views -○ bb-ui2.36 [● P1] [task] - Fix zod dependency conflict for eslint (blocked by: bb-ui2) -○ bb-ui2.35 [● P1] [task] - Graph View Filtering - Handle swarm and task URL params (blocked by: bb-ui2) -○ bb-ui2.34 [● P1] [task] - Swarm Card Deep Links - Wire up jump icons to URL state (blocked by: bb-ui2) -○ bb-ui2.33 [● P1] [task] - Social Card Deep Links - Wire up jump icons to URL state (blocked by: bb-ui2) -○ bb-ui2.32 [● P1] [task] - bb-ui2.32: Mobile 4-Tab Navigation - Add Activity tab (blocked by: bb-ui2) -✓ bb-ui2.31 [P1] [task] - bb-ui2.31: Thread Drawer - Card detail slide-out panel (blocked by: bb-ui2) -○ bb-ui2.30 [● P1] [task] - bb-ui2.30: Activity Deep Linking - Agent filtering from cards (blocked by: bb-ui2) -✓ bb-ui2.28 [P1] [task] @bb-3ha [bb-ui2.9.2] - Sessions Access from Shell (blocked by: bb-ui2) -✓ bb-ui2.27 [P1] [task] @bb-22l [bb-ui2.9.1] - Mobile Navigation: Hamburger + Bottom Tabs (blocked by: bb-ui2) -○ bb-ui2.25 [● P1] [task] - 5.4 Final Gates: Run all verification and close epic (blocked by: bb-ui2, bb-ui2.22, bb-ui2.23, bb-ui2.24) -○ bb-ui2.24 [● P1] [task] - 5.3 Screenshots: Capture all views at all breakpoints (blocked by: bb-ui2, bb-ui2.22, blocks: bb-ui2.25) -○ bb-ui2.23 [● P1] [task] - 5.2 Mobile Polish: Verify mobile experience (blocked by: bb-ui2, bb-ui2.22, blocks: bb-ui2.25) -○ bb-ui2.22 [● P1] [task] - 5.1 Deep Links: Verify URL state restoration (blocked by: bb-ui2, bb-ui2.14, bb-ui2.18, bb-ui2.21, blocks: bb-ui2.25, bb-ui2.23, bb-ui2.24) -✓ bb-ui2.21 [P1] [task] - 4.3 fitView Fix: Fix ReactFlow resize on tab switch (blocked by: bb-ui2, bb-ui2.20, blocks: bb-ui2.22) -✓ bb-ui2.20 [P1] [task] @bb-54x - 4.2 Graph Tab: Integrate graph into unified shell (blocked by: bb-ui2, bb-ui2.5, bb-ui2.19, bb-ui2.0, blocks: bb-ui2.21) -✓ bb-ui2.19 [P1] [task] - 4.1 Graph Extract: Extract existing graph into reusable component (blocked by: bb-ui2, bb-ui2.0, blocks: bb-ui2.20) -✓ bb-ui2.18 [P1] [task] @bb-atf - 3.4 Swarm View: Full integration into shell (blocked by: bb-ui2, bb-ui2.5, bb-ui2.16, bb-ui2.17, bb-ui2.0, blocks: bb-ui2.22) -✓ bb-ui2.17 [P1] [task] - 3.3 Swarm Detail: Swarm detail for right panel (blocked by: bb-ui2, bb-ui2.8, bb-ui2.15, bb-ui2.0, blocks: bb-ui2.18) -✓ bb-ui2.16 [P1] [task] @bb-nuy - 3.2 SwarmCard: Swarm health card component (blocked by: bb-ui2, bb-ui2.3, bb-ui2.15, bb-ui2.0, blocks: bb-ui2.18) -✓ bb-ui2.15 [P1] [task] - 3.1 Swarm Cards: Data builder for SwarmCard type (blocked by: bb-ui2, bb-ui2.0, blocks: bb-ui2.17, bb-ui2.16) -✓ bb-ui2.14 [P1] [task] @bb-z6s - 2.5 Social View: Full integration into shell (blocked by: bb-ui2, bb-ui2.5, bb-ui2.11, bb-ui2.12, bb-ui2.13, bb-ui2.0, blocks: bb-ui2.22) -✓ bb-ui2.13 [P1] [task] - 2.4 Thread View: Conversation thread component (blocked by: bb-ui2, bb-ui2.12, bb-ui2.0, blocks: bb-ui2.14) -✓ bb-ui2.12 [P1] [task] - 2.3 Social Detail: Task detail for right panel (blocked by: bb-ui2, bb-ui2.8, bb-ui2.10, bb-ui2.0, blocks: bb-ui2.14, bb-ui2.13) -✓ bb-ui2.11 [P1] [task] @bb-98c - 2.2 SocialCard: Task card component (blocked by: bb-ui2, bb-ui2.3, bb-ui2.10, bb-ui2.0, blocks: bb-ui2.14) -✓ bb-ui2.10 [P1] [task] - 2.1 Social Cards: Data builder for SocialCard type (blocked by: bb-ui2, bb-ui2.0, blocks: bb-ui2.11, bb-ui2.12) -✓ bb-ui2.9 [P1] [task] - 1.6 Responsive: Integrate and test all breakpoints (blocked by: bb-ui2, bb-ui2.6, bb-ui2.7, bb-ui2.8, bb-ui2.0, bb-ui2.26) -✓ bb-ui2.8 [P1] [task] @bb-3dv - 1.5 RightPanel: Detail strip with responsive behavior (blocked by: bb-ui2, bb-ui2.5, bb-ui2.0, bb-ui2.26, blocks: bb-ui2.12, bb-ui2.17, bb-ui2.9) -✓ bb-ui2.7 [P1] [task] @bb-dwz - 1.4 LeftPanel: Channel tree navigation (blocked by: bb-ui2, bb-ui2.5, bb-ui2.0, bb-ui2.26, blocks: bb-ui2.9) -✓ bb-ui2.6 [P1] [task] @bb-5am - 1.3 TopBar: View tabs and global controls (blocked by: bb-ui2, bb-ui2.5, bb-ui2.0, blocks: bb-ui2.9) -✓ bb-ui2.5 [P1] [task] - 1.2 UnifiedShell: Main page layout with 3-panel grid (blocked by: bb-ui2, bb-ui2.1, bb-ui2.2, bb-ui2.3, bb-ui2.4, bb-ui2.0, blocks: bb-ui2.14, bb-ui2.7, bb-ui2.20, bb-ui2.6, bb-ui2.8, bb-ui2.18) -✓ bb-ui2.4 [P1] [task] - 1.1 URL State Hook: URL as single source of truth (blocked by: bb-ui2, bb-ui2.0, blocks: bb-ui2.5) -✓ bb-ui2.3 [P1] [task] - 0.3 Base Primitives: Shared UI components (blocked by: bb-ui2, bb-ui2.2, bb-ui2.0, blocks: bb-ui2.11, bb-ui2.5, bb-ui2.16) -✓ bb-ui2.2 [P1] [task] - 0.2 shadcn/ui Setup: Initialize and install components (blocked by: bb-ui2, bb-ui2.0, blocks: bb-ui2.3, bb-ui2.5) -✓ bb-ui2.1 [P1] [task] - 0.1 Token System: Earthy-dark CSS variables (blocked by: bb-ui2, bb-ui2.0, blocks: bb-ui2.5) -○ bb-ui2 [● P1] [epic] - Unified UX - Earthy Dark Shell with Social/Graph/Swarm Views -✓ bb-review-cleanup [P1] [task] [code-quality] - Code review cleanup: fix DEBUG logs and type safety -✓ bb-buff.2.3 [P1] [task] [notifications orchestration roles routing] - Role-Based Routing (blocked by: bb-buff.2, bb-buff.2.1, bb-buff.2.2, blocks: bb-buff.4, bb-buff.3) -✓ bb-buff.2.2 [P1] [task] [membership molecules orchestration swarm] - Swarm Molecule Engine (blocked by: bb-buff.2, bb-buff.2.1, blocks: bb-buff.3.1, bb-buff.2.3, bb-buff.3) -✓ bb-buff.2.1 [P1] [task] @silver-castle [bootstrap fingerprint orchestration rig] - Rig/Role Fingerprinting (blocked by: bb-buff.2, bb-buff.1.3, blocks: bb-buff.2.2, bb-buff.2.3) -○ bb-buff.2 [● P1] [epic] [molecules orchestration rigs roles swarms] - Orchestration Layer (Swarms and Environment) (blocked by: bb-buff) -✓ bb-buff.1.3 [P1] [task] @zenchantlive [backend liveness resiliency telemetry] - Backend Liveness Refactor (blocked by: bb-buff.1, bb-buff.1.1, bb-buff.1.2, blocks: bb-buff.3.3, bb-buff.2.1, bb-buff.4, bb-buff.3, bb-buff.3.2) -✓ bb-buff.1.2 [P1] [task] @zenchantlive [health resiliency state-machine zfc] - ZFC State Integration (blocked by: bb-buff.1, bb-buff.1.1, blocks: bb-buff.1.3, bb-buff.3.2) -✓ bb-buff.1.1 [P1] [task] @silver-castle [ephemeral resiliency telemetry wisps] - Wisp-Native Telemetry (blocked by: bb-buff.1, blocks: bb-buff.1.2, bb-buff.1.3) -✓ bb-buff.1 [P1] [epic] [health resiliency telemetry wisps zfc] - Resiliency Layer (Telemetry and Health) (blocked by: bb-buff) -○ bb-buff [● P1] [epic] [agents molecules orchestration resiliency wisps zfc] - Agent System Overhaul: Molecules, Wisps, and ZFC Runtime -○ bb-6bx.1 [● P1] [task] - bb-6bx.2: ZFC State Machine Integration (blocked by: bb-6bx) -✓ bb-jp2.1 [P1] [epic] - Orchestration Layer: Molecules and Role-Based Dispatch (blocked by: bb-jp2) -✓ bb-6bx [P1] [epic] - Resiliency Layer: Wisp Heartbeats and State Machine Wiring -✓ bb-jp2 [P1] [epic] - EPIC: Super-Agent Buff (Native bd Orchestration) -○ bb-u6f.7.5 [● P1] [task] [continuity navigation planning rollout] - Execution Backlog Bootstrap: create implementation beads and rollout map (blocked by: bb-u6f.7, bb-u6f.7.1, bb-u6f.7.2, bb-u6f.7.3, bb-u6f.7.4) -○ bb-u6f.7.4 [● P1] [task] [architecture continuity navigation planning reuse] - Shared Primitives Plan: reuse-first integration architecture (blocked by: bb-u6f.7, bb-u6f.7.1, bb-u6f.7.2, bb-u6f.7.3, blocks: bb-u6f.7.5) -○ bb-u6f.7.3 [● P1] [task] [continuity deeplinks navigation planning] - Deep-Link Contract v1: URL/state continuity across views (blocked by: bb-u6f.7, bb-u6f.7.2, blocks: bb-u6f.7.4, bb-u6f.7.5) -○ bb-u6f.7.2 [● P1] [task] [continuity ia navigation planning] - IA Contract v1: unified navigation semantics and context model (blocked by: bb-u6f.7, bb-u6f.7.1, blocks: bb-u6f.7.4, bb-u6f.7.5, bb-u6f.7.3) -○ bb-u6f.7.1 [● P1] [task] [audit continuity navigation planning] - Continuity Audit: surface map, dead ends, reuse gaps (blocked by: bb-u6f.7, blocks: bb-u6f.7.2, bb-u6f.7.4, bb-u6f.7.5) -✓ bb-u6f.7 [P1] [epic] [architecture continuity navigation planning ux] - Unified Cross-Surface Navigation and Continuity (blocked by: bb-u6f) -✓ bb-79b [P1] [bug] - Fix scope normalization in releaseAgentReservation -✓ bb-1y7 [P1] [task] @zenchantlive [agents refactor] - Consolidate bb agent identity to bd agent beads (blocked by: bb-u6f.6) -✓ bb-u6f.6.6 [P1] [task] @zenchantlive [agents protocol sessions verification] - Protocol Track 6: Integrated Acceptance Sweep (gates, screenshots, diff hygiene) (blocked by: bb-u6f.6, bb-u6f.6.2, bb-u6f.6.3, bb-u6f.6.4, bb-u6f.6.5) -✓ bb-u6f.6.4 [P1] [task] @zenchantlive [agents protocol sessions ui] - Sessions Hub UI: protocol event and incursion visibility (blocked by: bb-u6f.6, bb-u6f.6.1, bb-u6f.6.2, blocks: bb-u6f.6.6, bb-u6f.6.5) -✓ bb-u6f.6.3 [P1] [task] @zenchantlive [agents cli protocol sessions] - CLI Surface: bb-init and agent heartbeat command (blocked by: bb-u6f.6, bb-u6f.6.2, blocks: bb-u6f.6.6, bb-u6f.6.5) -✓ bb-u6f.6.2 [P1] [task] @zenchantlive [agents backend protocol sessions] - Backend Engine: heartbeat, stale takeover, overlap, protocol events (blocked by: bb-u6f.6, bb-u6f.6.1, blocks: bb-u6f.6.4, bb-u6f.6.6, bb-u6f.6.3) -✓ bb-u6f.6.1 [P1] [task] [agents protocol sessions spec] - Protocol Spec Gate: identity, heartbeat, overlap, event schema (blocked by: bb-u6f.6, blocks: bb-u6f.6.4, bb-u6f.6.2) -✓ bb-u6f.6 [P1] [task] [agents protocol sessions] - Protocol Track 6: Operative Protocol End-to-End Implementation (blocked by: bb-u6f, blocks: bb-1y7) -✓ bb-6d5 [P1] [task] - CLI Surface: bb-init (Non-Interactive) and Heartbeat Command -✓ bb-ui0 [P1] [task] - Core Backend: Heartbeat, Takeover, and Overlap Logic -✓ bb-kp5 [P1] [epic] - EPIC: The Operative Protocol (Agent Coordination v2) -○ bb-2mx [● P1] [task] @bb-1xj - Deep validation and edge-case testing of Snapshot Diffing engine (blocked by: bb-xhm, blocks: bb-xhm.2) -✓ bb-u6f.3.7 [P1] [task] @green-falcon - Implement Fluid Session Layout & Refactor Store (blocked by: bb-u6f.3) -✓ bb-u6f.3.6 [P1] [task] - Implement Dual-Mode Context Sidebar (Productivity/Audit) (blocked by: bb-u6f.3) -✓ bb-u6f.3.5 [P1] [task] - Implement Slim Social Activity Cards (Audit Feed) (blocked by: bb-u6f.3) -✓ bb-u6f.3.4 [P1] [task] - Implement Compact Mission Header (Live Monitoring) (blocked by: bb-u6f.3) -✓ bb-u6f.3.3 [P1] [task] @green-falcon - Implement Dual-Mode Context Sidebar (Productivity/Audit) (blocked by: bb-u6f.3) -✓ bb-u6f.3.2 [P1] [task] - Implement Slim Social Activity Cards (Audit Feed) (blocked by: bb-u6f.3) -✓ bb-u6f.3.1 [P1] [task] - Implement Compact Mission Header (Live Monitoring) (blocked by: bb-u6f.3) -✓ bb-lvl [P1] [bug] @zenchantlive [realtime sse status] - Fix stale bead status rendering and refresh propagation in BeadBoard -✓ bb-dcv.8 [P1] [task] [agents docs skill] - Create beadboard-driver skill from implemented bb agent workflows (blocked by: bb-dcv, bb-dcv.5, blocks: bb-dcv.3) -✓ bb-dcv.7 [P1] [task] [agents cli identity] - Implement agent identity registry commands (blocked by: bb-dcv, bb-dcv.2, blocks: bb-dcv.4, bb-dcv.6) -✓ bb-dcv.6 [P1] [task] [agents cli mail] - Implement agent mail commands (send/inbox/read/ack) (blocked by: bb-dcv, bb-dcv.2, bb-dcv.7, blocks: bb-dcv.5) -✓ bb-dcv.5 [P1] [task] [agents cli workflow] - Integrate bb agent UX with bd claim workflow (blocked by: bb-dcv, bb-dcv.6, bb-dcv.4, blocks: bb-dcv.3, bb-dcv.8) -✓ bb-dcv.4 [P1] [task] [agents cli reservations] - Implement reservation commands with TTL (blocked by: bb-dcv, bb-dcv.2, bb-dcv.7, blocks: bb-dcv.5) -✓ bb-dcv.3 [P1] [task] [agents qa verification] - Final verification and readiness sweep for agent CLI (blocked by: bb-dcv, bb-dcv.5, bb-dcv.8) -✓ bb-dcv.2 [P1] [task] @zenchantlive [agents cli design] - Define bb agent CLI contract and storage schema (blocked by: bb-dcv, bb-dcv.1, blocks: bb-dcv.4, bb-dcv.6, bb-dcv.7) -✓ bb-b4j.6.2 [P1] [task] [closeout qa tests] - Verification subtask: typecheck/test regression and closeout notes (blocked by: bb-b4j.6, bb-b4j.6.1) -✓ bb-b4j.6.1 [P1] [task] [playwright qa visual] - Verification subtask: Playwright capture and visual acceptance review (blocked by: bb-b4j.6, bb-b4j.5.1, bb-b4j.5.2, blocks: bb-b4j.6.2) -✓ bb-b4j.6 [P1] [task] [playwright qa verification] - Verification evidence and final UI polish closeout (blocked by: bb-b4j, bb-b4j.5) -✓ bb-b4j.5.2 [P1] [task] [graph responsive tests] - Guard subtask: Graph responsive contract refresh (blocked by: bb-b4j.5, bb-b4j.4.3, blocks: bb-b4j.6.1) -✓ bb-b4j.5.1 [P1] [task] [kanban responsive tests] - Guard subtask: Kanban responsive contract refresh (blocked by: bb-b4j.5, bb-b4j.3.3, blocks: bb-b4j.6.1) -✓ bb-b4j.5 [P1] [task] [guards tests ui] - Guardrail contract updates for responsive/UI structure (blocked by: bb-b4j, bb-b4j.3, bb-b4j.4, blocks: bb-b4j.6) -✓ bb-b4j.4.3 [P1] [task] [graph mobile ux] - Graph subtask: mobile overview/flow density and first-screen value (blocked by: bb-b4j.4, bb-b4j.4.2, blocks: bb-b4j.5.2) -✓ bb-b4j.4.2 [P1] [task] [graph layout responsive] - Graph subtask: containment, overflow, and scroll behavior hardening (blocked by: bb-b4j.4, bb-b4j.4.1, blocks: bb-b4j.4.3) -✓ bb-b4j.4.1 [P1] [task] [graph readability ui] - Graph subtask: edge/label readability and contrast upgrade (blocked by: bb-b4j.4, bb-b4j.2.2, blocks: bb-b4j.4.2) -✓ bb-b4j.4 [P1] [task] [graph ui workflow] - Graph surface migration to Aero Chrome (blocked by: bb-b4j, blocks: bb-b4j.2, bb-b4j.5) -✓ bb-b4j.3.3 [P1] [task] [cards kanban ui] - Kanban subtask: lane/card volumetric hierarchy and status ambience (blocked by: bb-b4j.3, bb-b4j.3.2, blocks: bb-b4j.5.1) -✓ bb-b4j.3.2 [P1] [task] [details kanban ui] - Kanban subtask: detail panel structured readability pass (blocked by: bb-b4j.3, bb-b4j.3.1, blocks: bb-b4j.3.3) -✓ bb-b4j.3.1 [P1] [task] [kanban responsive ui] - Kanban subtask: responsive containment and scroll quality pass (blocked by: bb-b4j.3, bb-b4j.2.2, blocks: bb-b4j.3.2) -✓ bb-b4j.3 [P1] [task] [kanban ui workflow] - Kanban surface migration to Aero Chrome (blocked by: bb-b4j, bb-b4j.2, blocks: bb-b4j.5) -✓ bb-b4j.2.2 [P1] [task] [controls mobile ui] - Shared subtask: scope controls and mobile overlay fog pass (blocked by: bb-b4j.2, blocks: bb-b4j.2.1, bb-b4j.3.1, bb-b4j.4.1) -✓ bb-b4j.2.1 [P1] [task] [components shared ui] - Shared subtask: chip/pill/stat visual hierarchy unification (blocked by: bb-b4j.2, bb-b4j.2.2, bb-b4j.1.3) -✓ bb-b4j.2 [P1] [task] [design-system shared ui] - Shared primitives migration: chips, pills, scope controls, overlays (blocked by: bb-b4j, bb-b4j.4, blocks: bb-b4j.1, bb-b4j.3) -✓ bb-b4j.1.2 [P1] [task] [background tokens ui] - Foundation subtask: matte canvas, anti-banding, elevation tokens (blocked by: bb-b4j.1, bb-b4j.1.1, blocks: bb-b4j.1.3) -✓ bb-b4j.1.1 [P1] [task] [foundation typography ui] - Foundation subtask: app-wide font system and semantic typography (blocked by: bb-b4j.1, blocks: bb-b4j.1.2) -✓ bb-b4j.1 [P1] [task] [design-system foundation ui] - Global visual foundation: tokens, typography, anti-banding (blocked by: bb-b4j, bb-b4j.2) -✓ bb-0h7 [P1] [task] [graph kanban tailwind ui] - Implement aero-chrome UI polish on workflow explorer pages -✓ bb-b4j [P1] [epic] [design-system ui workflow] - Workspace UI polish: Aero Chrome visual system -✓ bb-6aj.10 [P1] [task] [graph kanban multi-project] - Wire project-scoped reads into Kanban and Graph (blocked by: bb-6aj, bb-6aj.7, blocks: bb-6aj.11, bb-6aj.12) -✓ bb-6aj.9 [P1] [task] [multi-project scanner ui] - Scanner UX (discover/import projects from safe roots) (blocked by: bb-6aj, bb-6aj.7, blocks: bb-6aj.12) -✓ bb-6aj.8 [P1] [task] [multi-project registry ui] - Project manager panel (list/add/remove registry roots) (blocked by: bb-6aj, bb-6aj.7, blocks: bb-6aj.12) -✓ bb-6aj.7 [P1] [task] @zenchantlive [multi-project state ui] - Shared project scope store + URL persistence (blocked by: bb-6aj, bb-6aj.6, blocks: bb-6aj.9, bb-6aj.8, bb-6aj.10) -✓ bb-6aj.6 [P1] [task] @zenchantlive [multi-project planning ui] - UI multi-project design gate and execution contract (blocked by: bb-6aj, blocks: bb-6aj.7) -✓ bb-dcv.1 [P1] [task] @zenchantlive - Research & RFC: Agent Skills and Handoff Protocols (blocked by: bb-dcv, blocks: bb-dcv.2) -✓ bb-dcv [P1] [epic] - Agent Communication & Coordination Patterns (blocks: bb-u6f) -✓ bb-q1s.3 [P1] [task] [editing graph ui] - Graph detail integration of shared editor (blocked by: bb-q1s, bb-q1s.1, blocks: bb-q1s.4) -✓ bb-q1s.2 [P1] [task] [editing kanban ui] - Kanban detail integration of shared editor (blocked by: bb-q1s, bb-q1s.1, blocks: bb-q1s.4) -✓ bb-q1s.1 [P1] [task] [editing lib shared] - Shared edit core: schema + update adapter + state machine (blocked by: bb-q1s, blocks: bb-q1s.3, bb-q1s.2) -✓ bb-q1s [P1] [epic] [editing mutation ui] - UI Bead Editing Across Kanban + Graph -○ bb-18e.6 [● P1] [task] [graph interaction ux] - Keep selected node centered during focus navigation (blocked by: bb-18e, bb-18e.2, blocks: bb-18e.9, bb-18e.8) -○ bb-18e.4 [● P1] [task] [controls graph ux] - Add edge-type toggles to reduce graph noise (blocked by: bb-18e, bb-18e.2, blocks: bb-18e.5, bb-18e.10) -○ bb-18e.2 [● P1] [task] [graph readability ux] - Add plain-English edge labels + contrast upgrade (blocked by: bb-18e, blocks: bb-18e.4, bb-18e.6) -✓ bb-1es.4 [P1] [task] [details kanban workflow] - Add execution-readiness checklist to Kanban details (blocked by: bb-1es, bb-1es.1) -✓ bb-1es.3 [P1] [task] [dependencies kanban signal] - Show downstream impact chip (Unblocks N) on Kanban cards (blocked by: bb-1es, bb-1es.1, blocks: bb-1es.2) -✓ bb-1es.1 [P1] [task] [kanban triage workflow] - Add Next Actionable task picker to Kanban (blocked by: bb-1es, blocks: bb-1es.3, bb-1es.4) -✓ bb-1es [P1] [epic] [kanban ux workflow] - Kanban Actionability & Execution Clarity (blocks: bb-18e, bb-18e.1) -✓ bb-n7p [P1] [task] [kanban status swimlane] - Swimlane status model: ready + dependency-derived blocked -❄ bb-29x.5 [● P1] [task] - Epic Design Gate: scope, decisions, and acceptance contract (blocked by: bb-29x, blocks: bb-29x.2, bb-29x.3, bb-29x.1, bb-29x.4) -✓ bb-u6f.4 [P1] [task] - Epic Design Gate: scope, decisions, and acceptance contract (blocked by: bb-u6f, blocks: bb-u6f.3, bb-u6f.2, bb-u6f.1) -✓ bb-bvn.4 [P1] [task] - Epic Design Gate: scope, decisions, and acceptance contract (blocked by: bb-bvn, blocks: bb-bvn.1, bb-bvn.2, bb-bvn.3) -✓ bb-xhm.4 [P1] [task] - Epic Design Gate: scope, decisions, and acceptance contract (blocked by: bb-xhm, blocks: bb-xhm.1, bb-xhm.2, bb-xhm.3) -✓ bb-tpc.5 [P1] [task] - Epic Design Gate: scope, decisions, and acceptance contract (blocked by: bb-tpc, blocks: bb-tpc.1, bb-tpc.2, bb-tpc.3, bb-tpc.4) -✓ bb-6aj.5 [P1] [task] - Epic Design Gate: scope, decisions, and acceptance contract (blocked by: bb-6aj, blocks: bb-6aj.3) -✓ bb-3pr [P1] [task] @zenchantlive [api smoke] - Smoke test mutation lifecycle 2 -✓ bb-bc4.5 [P1] [task] [playwright verification visual] - Playwright multi-breakpoint visual verification (blocked by: bb-bc4, bb-bc4.4, bb-bc4.3) -✓ bb-bc4.4 [P1] [task] [detail-panel mobile ux] - Implement mobile/tablet detail panel interaction model (blocked by: bb-bc4, bb-bc4.2, bb-bc4.3, blocks: bb-bc4.5) -✓ bb-bc4.3 [P1] [task] [design-system theme tokens] - Redesign tokenized theme and visual hierarchy (blocked by: bb-bc4, bb-bc4.1, blocks: bb-bc4.5, bb-bc4.4) -✓ bb-bc4.2 [P1] [task] [cards kanban overflow] - Fix column/card sizing and overflow behavior (blocked by: bb-bc4, bb-bc4.1, blocks: bb-bc4.4) -✓ bb-bc4.1 [P1] [task] [kanban layout responsive] - Rework board responsiveness and horizontal reachability (blocked by: bb-bc4, blocks: bb-bc4.3, bb-bc4.2) -✓ bb-bc4 [P1] [epic] [design-system kanban responsive ui] - Kanban Responsive Design Hardening (blocked by: bb-92d, bb-trz) -○ bb-29x.2 [● P1] [task] [integration tests] - Implement API integration tests for read, mutate, and SSE routes (blocked by: bb-29x, bb-29x.1, bb-29x.5, blocks: bb-29x.3, bb-29x.4) -○ bb-29x.1 [● P1] [task] [tests unit] - Implement unit tests for parser, pathing, scanner, and bd bridge (blocked by: bb-29x, bb-29x.5, blocks: bb-29x.2) -○ bb-29x [● P1] [epic] [perf quality testing] - Quality Gates, Testing, and Performance Validation (blocked by: bb-ymg, bb-xhm, bb-bvn, bb-u6f) -✓ bb-u6f.1 [P1] [task] @green-falcon [agents data] - Implement Session Aggregation Library & Data Model (blocked by: bb-u6f, bb-u6f.4, blocks: bb-u6f.2) -○ bb-u6f [● P1] [epic] [agents sessions] - Agent Session Views and Metrics (blocked by: bb-tpc, bb-xhm, bb-dcv, blocks: bb-29x) -✓ bb-bvn.2 [P1] [task] @zenchantlive [graph ui] - Implement React Flow graph view with pan/zoom/select interactions (blocked by: bb-bvn, bb-bvn.1, bb-bvn.4, blocks: bb-bvn.3) -✓ bb-bvn.1 [P1] [task] @zenchantlive [graph parser] - Parse dependency edges and build adjacency structures (blocked by: bb-bvn, bb-bvn.4, blocks: bb-bvn.2) -✓ bb-xhm.1 [P1] [task] @green-falcon [model timeline] - Define activity event model for created/updated/closed/reopened actions (blocked by: bb-xhm, bb-xhm.4, blocks: bb-xhm.2) -✓ bb-xhm [P1] [epic] [activity timeline] - Timeline and Activity Feed (blocked by: bb-tpc, bb-bvn, blocks: bb-u6f, bb-29x) -✓ bb-ymg.4 [P1] [task] [dnd kanban] - Implement drag-and-drop status transitions mapped to bd commands (blocked by: bb-ymg, bb-ymg.2, bb-trz.1) -✓ bb-ymg.3 [P1] [task] [optimistic state] - Add optimistic updates with rollback and SSE reconciliation (blocked by: bb-ymg, bb-ymg.2) -✓ bb-ymg.1.1 [P1] [task] [bridge setup] - Resolve bd.exe location from PATH and configuration fallback (blocked by: bb-ymg.1, blocks: bb-ymg.2) -✓ bb-ymg [P1] [epic] [bd-cli mutation] - CLI Write-Back via bd.exe (blocked by: bb-trz, bb-tpc, blocks: bb-29x) -✓ bb-trz.4 [P1] [task] @agent-b [filters stats] - Add search/filter/stats controls for status/type/priority/labels (blocked by: bb-trz, bb-trz.2) -✓ bb-trz.3 [P1] [task] @agent-b [details kanban] - Implement detail slide-out panel with full issue metadata (blocked by: bb-trz, bb-trz.2) -✓ bb-trz.2 [P1] [task] @agent-b [cards kanban] - Build bead cards with priority/type/labels/assignee/dependency metadata (blocked by: bb-trz, bb-trz.1, blocks: bb-trz.3, bb-trz.4) -✓ bb-trz.1 [P1] [task] @agent-b [columns kanban] - Implement Kanban column layout for Beads statuses (blocked by: bb-trz, bb-92d.4, blocks: bb-trz.2, bb-ymg.4) -✓ bb-trz [P1] [epic] [kanban ui] - Kanban Experience (Baseline Dashboard) (blocked by: bb-92d, blocks: bb-ymg, bb-bc4, bb-bvn) -✓ bb-tpc.4 [P1] [task] [frontend react-query] - Build frontend SSE client with scoped React Query invalidation (blocked by: bb-tpc, bb-tpc.3, bb-tpc.5) -✓ bb-6aj.4 [P1] [task] @zenchantlive [aggregation data-model] - Implement aggregate project issue context model (blocked by: bb-6aj, bb-6aj.2) -✓ bb-92d.4.1 [P1] [task] [parser tests] - Add parser tests for priority=0, tombstone filtering, and dependency parsing (blocked by: bb-92d.4) -✓ bb-92d.2 [P1] [task] [docs license] - Add MIT license and baseline repository docs (blocked by: bb-92d) -✓ beadboard-gb0.8 [P2] [task] - Remove swarm view from navigation (blocked by: beadboard-gb0, blocks: beadboard-gb0.7) -❄ beadboard-gb0.7 [● P2] [task] - Delete deprecated swarm files (blocked by: beadboard-gb0, beadboard-gb0.5, beadboard-gb0.8, blocks: beadboard-gb0.6) -✓ beadboard-6xd [P2] [task] - Realtime Test -✓ beadboard-uuo [P2] [task] - SSE Test Bead -✓ beadboard-7jp.6 [P2] [task] @Antigravity (Engineer) - Integration tests (blocked by: beadboard-7jp, beadboard-7jp.5, beadboard-7jp.7) -○ beadboard-3xc [● P2] [epic] - Swarm Test: Order Processing System -○ bb-zzr [● P2] [task] [gt:agent swarm:test-swarm-1] - test-swarm-3 -○ bb-1d1 [● P2] [task] [gt:agent swarm:test-swarm-1] - test-swarm-2 -○ bb-5pw [● P2] [task] [gt:agent swarm:test-swarm-1] - test-swarm-1 -○ bb-ui2.26 [● P2] [task] - 1.7 Resizable Panels: Add drag handles for left/right panel width adjustment (blocked by: bb-ui2, blocks: bb-ui2.7, bb-ui2.8, bb-ui2.9) -○ bb-buff.3.6 [● P2] [task] [grouping rig sessions ui undecided] - Rig-Based Grouping (Undecided) (blocked by: bb-buff.3) -✓ bb-buff.3.5 [P2] [task] [health sessions swarms ui] - Swarm Health Aggregate (blocked by: bb-buff.3) -✓ bb-buff.3.4 [P2] [task] [color role sessions ui] - Role-Based Color Coding (blocked by: bb-buff.3) -○ bb-format-check [● P2] [task] [gt:agent rig:test-rig-xyz] - Format Check -○ bb-buff.4.5 [● P2] [task] [docs handoff migration skills] - Migration Handoff: v3 to v4 adoption guide (blocked by: bb-buff.4, bb-buff.4.4) -○ bb-buff.4.4 [● P2] [task] [contracts quality skills tests] - Test Matrix Expansion: skill-local and repo-level v4 coverage (blocked by: bb-buff.4, bb-buff.4.3, blocks: bb-buff.4.5) -○ bb-buff.4.3 [● P2] [task] [automation diagnostics scripts skills] - Script Alignment: preflight/readiness/driver-lib v4 (blocked by: bb-buff.4, bb-buff.4.2, blocks: bb-buff.4.4) -○ bb-buff.4.2 [● P2] [task] [docs references skills] - Reference Pack Rewrite: command matrix, lifecycle, failure modes (blocked by: bb-buff.4, bb-buff.4.1, blocks: bb-buff.4.3) -○ bb-buff.4.1 [● P2] [task] [docs protocol skills] - Core Skill Rewrite: beadboard-driver SKILL.md v4 (blocked by: bb-buff.4, blocks: bb-buff.4.2) -○ bb-buff.4 [● P2] [epic] [agents docs orchestration resiliency runbook skills] - Skill and Runbook Alignment (Beadboard Driver v4) (blocked by: bb-buff, bb-buff.1.3, bb-buff.2.3, bb-buff.3.3) -✓ bb-buff.3.3 [P2] [task] [mission-linking pathing sessions ui] - Active Mission Pathing (blocked by: bb-buff.3, bb-buff.3.1, bb-buff.3.2, bb-buff.1.3, blocks: bb-buff.4) -✓ bb-buff.3.2 [P2] [task] [health-signals sessions states ui] - Critical Visual Signals (blocked by: bb-buff.3, bb-buff.1.2, bb-buff.1.3, blocks: bb-buff.3.3) -✓ bb-buff.3.1 [P2] [task] [grouping sessions swarms ui] - Swarm-Grouped Header (blocked by: bb-buff.3, bb-buff.2.2, blocks: bb-buff.3.3) -○ bb-buff.3 [● P2] [epic] [sessions swarms ui visualization war-room] - War Room UI Track (Visual Hub) (blocked by: bb-buff, bb-buff.1.3, bb-buff.2.2, bb-buff.2.3) -✓ bb-jp2.3 [P2] [task] - Skill Update: The Resilient Operative Handbook v3 (blocked by: bb-jp2) -✓ bb-jp2.2 [P2] [epic] - Command Center UI: Swarm Visualization and Live Links (blocked by: bb-jp2) -✓ bb-u6f.6.5 [P2] [task] [agents docs protocol sessions skills] - Protocol Track 6: Skill Closeout (beadboard-driver v2 runbook) (blocked by: bb-u6f.6.3, bb-u6f.6.4, blocks: bb-u6f.6.6) -✓ bb-ubr [P2] [task] - Skill Closeout: Refactor beadboard-driver for Operative Protocol -✓ bb-vyf [P2] [task] - Frontend: Social-Dense Hub Overlays and Audit Rendering -○ bb-u6f.5 [● P2] [task] - Legacy Track: Session Metrics Overlays (blocked by: bb-u6f, bb-u6f.3) -✓ bb-3wy [P2] [task] [postmortem realtime sse status] - Postmortem: stale bead status refresh regression and SSE recovery -✓ bb-3vi [P2] [bug] - Fix misleading 'Blocking' label in task cards - should be 'Unlocks' -✓ bb-b4j.1.3 [P2] [task] [controls ui usability] - Foundation subtask: dark controls and scrollbar polish baseline (blocked by: bb-b4j.1, bb-b4j.1.2, blocks: bb-b4j.2.1) -✓ bb-6aj.12 [P2] [task] [multi-project qa verification] - Verification pass: multi-project UX, guards, and screenshots (blocked by: bb-6aj, bb-6aj.8, bb-6aj.9, bb-6aj.10, bb-6aj.11) -✓ bb-6aj.11 [P2] [task] [aggregate multi-project ux] - Aggregate mode (cross-project view) with clear project badges (blocked by: bb-6aj, bb-6aj.10, blocks: bb-6aj.12) -✓ bb-q1s.4 [P2] [task] [editing ux verification] - Cross-surface verification + UX polish for edit flows (blocked by: bb-q1s, bb-q1s.2, bb-q1s.3) -○ bb-18e.10 [● P2] [task] [graph signal ux] - Add downstream-impact risk tinting (blocked by: bb-18e, bb-18e.4) -○ bb-18e.9 [● P2] [task] [graph routing ux] - Persist graph state in URL params (blocked by: bb-18e, bb-18e.6, blocks: bb-18e.11) -○ bb-18e.7 [● P2] [task] [details graph ux] - Progressive disclosure in graph task details panel (blocked by: bb-18e, bb-18e.3, blocks: bb-18e.8) -○ bb-18e.5 [● P2] [task] [dependencies filters graph] - Add external-blockers-only filter (blocked by: bb-18e, bb-18e.4) -✓ bb-18e.3 [P2] [task] [graph orientation ux] - Add directional context hints for dependency reading (blocked by: bb-18e, blocks: bb-18e.7) -○ bb-18e.1 [● P2] [task] [anomaly graph ux] - Add cycle warning card with focus actions in graph view (blocked by: bb-18e, bb-1es, blocks: bb-18e.11) -○ bb-18e [● P2] [epic] [backlog graph ux] - Graph Clarity Follow-up (Post-Kanban) (blocked by: bb-1es) -✓ bb-1es.2 [P2] [task] [kanban triage ux] - Add recency signal (last updated) to Kanban cards (blocked by: bb-1es, bb-1es.3) -○ bb-sse-smoke [● P2] [task] - SSE smoke 1770870992420 -○ bb-29x.4 [● P2] [task] [docs runbook] - Document operational runbook and boundary rationale (blocked by: bb-29x, bb-29x.2, bb-29x.5) -○ bb-29x.3 [● P2] [task] [benchmark perf] - Record parser and realtime performance baseline against PRD targets (blocked by: bb-29x, bb-29x.2, bb-29x.5) -✓ bb-u6f.2 [P2] [task] @green-falcon [agents ui] - Implement Session API & Endpoints (blocked by: bb-u6f, bb-u6f.1, bb-u6f.4, blocks: bb-u6f.3) -✓ bb-bvn.3 [P2] [task] [analysis graph] - Add blocked-chain highlighting and cycle anomaly signaling (blocked by: bb-bvn, bb-bvn.2, bb-bvn.4) -✓ bb-xhm.2 [P2] [task] @green-falcon [diff timeline] - Implement snapshot diffing for derived timeline events (blocked by: bb-xhm, bb-xhm.1, bb-tpc.2, bb-xhm.4, bb-2mx, blocks: bb-xhm.3) -✓ bb-6aj.3.1 [P2] [task] @zenchantlive [optional scanner] - Add explicit full-drive scan mode for C:/D: by user action (blocked by: bb-6aj.3) -○ beadboard-58u [● P3] [task] - TODO: Add DependencyFlowStrip to SmartDag Dependencies tab -○ beadboard-gb0.6 [● P3] [task] - Update standalone /graph page (blocked by: beadboard-gb0, beadboard-gb0.7) -◐ beadboard-o6s [● P3] [task] - Test Bead 2 - SSE Check -✓ beadboard-m4f [P3] [task] - Test Bead - SSE Refresh Verification -✓ bb-18e.11 [P3] [task] [ai backlog graph] - AI dependency explanation scaffold (deferred) (blocked by: bb-18e, bb-18e.9, bb-18e.1) -○ bb-18e.8 [● P3] [task] [accessibility graph productivity] - Add graph keyboard navigation shortcuts (blocked by: bb-18e, bb-18e.6, bb-18e.7) -✓ bb-atl [P3] [task] [smoke writeback] - Writeback phase smoke -○ bb-bq6 [● P3] [task] [api smoke] - Smoke test mutation lifecycle -✓ bb-xhm.3 [P3] [task] @green-falcon [timeline ui] - Build timeline UI with date grouping and project/assignee/event filters (blocked by: bb-xhm, bb-xhm.2, bb-xhm.4) -✓ bb-ag8 [P4] [task] - TEMP_DELETE_ME diff --git a/bb.ps1 b/bb.ps1 deleted file mode 100644 index dc914a8..0000000 --- a/bb.ps1 +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env pwsh - -$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path -$bbEntry = Join-Path $scriptDir "tools/bb.ts" - -npx tsx $bbEntry @args diff --git a/bd-help.txt b/bd-help.txt deleted file mode 100644 index b6fcfc5..0000000 --- a/bd-help.txt +++ /dev/null @@ -1,136 +0,0 @@ -Issues chained together like beads. A lightweight issue tracker with first-class dependency support. - -Usage: - bd [flags] - bd [command] - -Maintenance: - rename-prefix Rename the issue prefix for all issues in the database - repair Repair corrupted database by cleaning orphaned references - resolve-conflicts Resolve git merge conflicts in JSONL files - -Integrations & Advanced: -Working With Issues: - children List child beads of a parent - close Close one or more issues - comments View or manage comments on an issue - create Create a new issue (or multiple issues from markdown file) - create-form Create a new issue using an interactive form - delete Delete one or more issues and clean up references - edit Edit an issue field in $EDITOR - gate Manage async coordination gates - label Manage issue labels - list List issues - merge-slot Manage merge-slot gates for serialized conflict resolution - move Move an issue to a different rig with dependency remapping - promote Promote a wisp to a permanent bead - q Quick capture: create issue and output only ID - query Query issues using a simple query language - refile Move an issue to a different rig - reopen Reopen one or more closed issues - search Search issues by text query - set-state Set operational state (creates event + updates label) - show Show issue details - state Query the current value of a state dimension - todo Manage TODO items (convenience wrapper for task issues) - update Update one or more issues - -Views & Reports: - activity Show real-time molecule state feed - count Count issues matching filters - diff Show changes between two commits or branches (requires Dolt backend) - find-duplicates Find semantically similar issues using text analysis or AI - history Show version history for an issue (requires Dolt backend) - lint Check issues for missing template sections - stale Show stale issues (not updated recently) - status Show issue database overview and statistics - types List valid issue types - -Dependencies & Structure: - dep Manage dependencies - duplicate Mark an issue as a duplicate of another - duplicates Find and optionally merge duplicate issues - epic Epic management commands - graph Display issue dependency graph - supersede Mark an issue as superseded by a newer one - swarm Swarm management for structured epics - -Sync & Data: - branch List or create branches (requires Dolt backend) - daemon Manage background sync daemon - export Export issues to JSONL or Obsidian format - federation Manage peer-to-peer federation (requires CGO) - import Import issues from JSONL format - merge Git merge driver for beads JSONL files - restore Restore full history of a compacted issue from git - sync Export database to JSONL (sync with git) - vc Version control operations (requires Dolt backend) - -Setup & Configuration: - backend Manage storage backend configuration - config Manage configuration settings - hooks Manage git hooks for bd auto-sync - human Show essential commands for human users - info Show database and daemon information - init Initialize bd in the current directory - kv Key-value store commands - onboard Display minimal snippet for AGENTS.md - prime Output AI-optimized workflow context - quickstart Quick start guide for bd - setup Setup integration with AI editors - where Show active beads location - -Maintenance: - doctor Check and fix beads installation health (start here) - migrate Database migration commands - preflight Show PR readiness checklist - upgrade Check and manage bd version upgrades - worktree Manage git worktrees for parallel development - -Integrations & Advanced: - admin Administrative commands for database maintenance - jira Jira integration commands - linear Linear integration commands - repo Manage multiple repository configuration - -Additional Commands: - agent Manage agent bead state - audit Record and label agent interactions (append-only JSONL) - blocked Show blocked issues - completion Generate the autocompletion script for the specified shell - cook Compile a formula into a proto (ephemeral by default) - defer Defer one or more issues for later - formula Manage workflow formulas - gitlab GitLab integration commands - help Help about any command - hook Execute a git hook (called by hook scripts) - mail Delegate to mail provider (e.g., gt mail) - mol Molecule commands (work templates) - orphans Identify orphaned issues (referenced in commits but still open) - ready Show ready work (open, no blockers) - rename Rename an issue ID - ship Publish a capability for cross-project dependencies - slot Manage agent bead slots - undefer Undefer one or more issues (restore to open) - version Print version information - -Flags: - --actor string Actor name for audit trail (default: $BD_ACTOR, git user.name, $USER) - --allow-stale Allow operations on potentially stale data (skip staleness check) - --db string Database path (default: auto-discover .beads/*.db) - --dolt-auto-commit string Dolt backend: auto-commit after write commands (off|on). Default from config key dolt.auto-commit - -h, --help help for bd - --json Output in JSON format - --lock-timeout duration SQLite busy timeout (0 = fail immediately if locked) (default 30s) - --no-auto-flush Disable automatic JSONL sync after CRUD operations - --no-auto-import Disable automatic JSONL import when newer than DB - --no-daemon Force direct storage mode, bypass daemon if running - --no-db Use no-db mode: load from JSONL, no SQLite - --profile Generate CPU profile for performance analysis - -q, --quiet Suppress non-essential output (errors only) - --readonly Read-only mode: block write operations (for worker sandboxes) - --sandbox Sandbox mode: disables daemon and auto-sync - -v, --verbose Enable verbose/debug output - -V, --version Print version information - -Use "bd [command] --help" for more information about a command. diff --git a/sse-output.txt b/sse-output.txt deleted file mode 100644 index ca2ce2b..0000000 --- a/sse-output.txt +++ /dev/null @@ -1,287 +0,0 @@ -: connected - -id: 1 -event: telemetry -data: {"id":1,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:30:26.392Z"} - -id: 1 -event: telemetry -data: {"id":1,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:30:26.392Z"} - -id: 2 -event: telemetry -data: {"id":2,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"telemetry","at":"2026-02-21T20:30:26.483Z"} - -id: 1 -event: activity -data: {"id":"5c308faf-4bfe-4bbc-809f-038b4c133969","kind":"created","beadId":"beadboard-dp2","beadTitle":"Testing from curl","projectId":"c:\\users\\zenchant\\codex\\beadboard","projectName":"beadboard","timestamp":"2026-02-21T20:30:27.123Z","actor":"jordanlive121@gmail.com","payload":{}} - -id: 3 -event: issues -data: {"id":3,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"changed","at":"2026-02-21T20:30:27.126Z"} - -id: 4 -event: telemetry -data: {"id":4,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"telemetry","at":"2026-02-21T20:30:27.239Z"} - -id: 5 -event: telemetry -data: {"id":5,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"telemetry","at":"2026-02-21T20:30:29.514Z"} - -: heartbeat - -: heartbeat - -id: 6 -event: telemetry -data: {"id":6,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"telemetry","at":"2026-02-21T20:31:03.792Z"} - -: heartbeat - -id: 7 -event: telemetry -data: {"id":7,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.402Z"} - -id: 7 -event: telemetry -data: {"id":7,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.402Z"} - -id: 2 -event: activity -data: {"id":"b5a6e461-1cff-44ff-9f05-4d80a66d7011","kind":"created","beadId":"beadboard-43c","beadTitle":"Diff test issue","projectId":"c:\\users\\zenchant\\codex\\beadboard","projectName":"beadboard","timestamp":"2026-02-21T20:31:04.443Z","actor":"jordanlive121@gmail.com","payload":{}} - -id: 8 -event: issues -data: {"id":8,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"changed","at":"2026-02-21T20:31:04.445Z"} - -id: 9 -event: issues -data: {"id":9,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\issues.jsonl","kind":"changed","at":"2026-02-21T20:31:04.557Z"} - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -id: 10 -event: telemetry -data: {"id":10,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"telemetry","at":"2026-02-21T20:36:44.443Z"} - -: heartbeat - -,"kind":"telemetry","at":"2026-02-21T20:30:20.252Z"} - -: heartbeat - -id: 212 -event: telemetry -data: {"id":212,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:30:26.479Z"} - -id: 213 -event: telemetry -data: {"id":213,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:30:26.731Z"} - -id: 214 -event: telemetry -data: {"id":214,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:30:27.040Z"} - -id: 48 -event: activity -data: {"id":"25053a3b-24c8-4065-b96b-0b140ea3da5b","kind":"created","beadId":"beadboard-dp2","beadTitle":"Testing from curl","projectId":"c:\\users\\zenchant\\codex\\beadboard","projectName":"beadboard","timestamp":"2026-02-21T20:30:27.084Z","actor":"jordanlive121@gmail.com","payload":{}} - -id: 215 -event: telemetry -data: {"id":215,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:30:27.216Z"} - -id: 215 -event: telemetry -data: {"id":215,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:30:27.216Z"} - -id: 216 -event: telemetry -data: {"id":216,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"telemetry","at":"2026-02-21T20:30:27.236Z"} - -id: 217 -event: telemetry -data: {"id":217,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"telemetry","at":"2026-02-21T20:30:29.516Z"} - -: heartbeat - -: heartbeat - -id: 218 -event: telemetry -data: {"id":218,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:03.745Z"} - -id: 219 -event: telemetry -data: {"id":219,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\beads.db-wal","kind":"telemetry","at":"2026-02-21T20:31:03.792Z"} - -id: 220 -event: telemetry -data: {"id":220,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.049Z"} - -id: 221 -event: telemetry -data: {"id":221,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.296Z"} - -id: 221 -event: telemetry -data: {"id":221,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.296Z"} - -id: 49 -event: activity -data: {"id":"7a118bbc-21e6-4e0e-a3c6-2f270161b384","kind":"created","beadId":"beadboard-43c","beadTitle":"Diff test issue","projectId":"c:\\users\\zenchant\\codex\\beadboard","projectName":"beadboard","timestamp":"2026-02-21T20:31:04.445Z","actor":"jordanlive121@gmail.com","payload":{}} - -id: 222 -event: telemetry -data: {"id":222,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.576Z"} - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -vent: telemetry -data: {"id":220,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.049Z"} - -id: 220 -event: telemetry -data: {"id":220,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.049Z"} - -id: 221 -event: telemetry -data: {"id":221,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.296Z"} - -id: 49 -event: activity -data: {"id":"7a118bbc-21e6-4e0e-a3c6-2f270161b384","kind":"created","beadId":"beadboard-43c","beadTitle":"Diff test issue","projectId":"c:\\users\\zenchant\\codex\\beadboard","projectName":"beadboard","timestamp":"2026-02-21T20:31:04.445Z","actor":"jordanlive121@gmail.com","payload":{}} - -id: 222 -event: telemetry -data: {"id":222,"projectRoot":"C:\\Users\\Zenchant\\codex\\beadboard","changedPath":"C:\\Users\\Zenchant\\codex\\beadboard\\.beads\\last-touched","kind":"telemetry","at":"2026-02-21T20:31:04.576Z"} - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - -: heartbeat - diff --git a/task1.txt b/task1.txt deleted file mode 100644 index 5f401bf..0000000 --- a/task1.txt +++ /dev/null @@ -1,4 +0,0 @@ -✓ Created issue: beadboard-egx - Title: Analyze Legacy System - Priority: P1 - Status: open diff --git a/task2.txt b/task2.txt deleted file mode 100644 index 2bf4f23..0000000 --- a/task2.txt +++ /dev/null @@ -1,4 +0,0 @@ -✓ Created issue: beadboard-o5j - Title: Design New Component - Priority: P1 - Status: open diff --git a/task3.txt b/task3.txt deleted file mode 100644 index aae08f5..0000000 --- a/task3.txt +++ /dev/null @@ -1,4 +0,0 @@ -✓ Created issue: beadboard-2ua - Title: Implement Frontend UI - Priority: P1 - Status: open diff --git a/test-output.txt b/test-output.txt deleted file mode 100644 index d43df83..0000000 --- a/test-output.txt +++ /dev/null @@ -1,6 +0,0 @@ -bun test v1.3.6 (d530ed99) -[Watcher] Processing event for C:\Users\Zenchant\AppData\Local\Temp\beadboard-watch-activity-aNhYFE: renamed (C:\Users\Zenchant\AppData\Local\Temp\beadboard-watch-activity-aNhYFE\.beads\beads.db-wal) -[IssuesBus] Emitting event: telemetry for C:\Users\Zenchant\AppData\Local\Temp\beadboard-watch-activity-aNhYFE (C:\Users\Zenchant\AppData\Local\Temp\beadboard-watch-activity-aNhYFE\.beads\beads.db-wal) -[Watcher] Issues changed. Syncing activity for C:\Users\Zenchant\AppData\Local\Temp\beadboard-watch-activity-aNhYFE... -[Watcher] Structural changes found in telemetry pulse. Upgrading to issues event. -[IssuesBus] Emitting event: renamed for C:\Users\Zenchant\AppData\Local\Temp\beadboard-watch-activity-aNhYFE (C:\Users\Zenchant\AppData\Local\Temp\beadboard-watch-activity-aNhYFE\.beads\beads.db-wal) diff --git a/test-output2.txt b/test-output2.txt deleted file mode 100644 index 6201aeb..0000000 --- a/test-output2.txt +++ /dev/null @@ -1,26 +0,0 @@ -bun test v1.3.6 (d530ed99) - -tests\lib\watcher.test.ts: -(pass) IssuesWatchManager startWatch is idempotent per project [32.00ms] -40 | await new Promise((resolve) => setTimeout(resolve, 220)); -41 | -42 | stop(); -43 | await manager.stopAll(); -44 | -45 | assert.equal(events.length >= 1, true); - ^ -AssertionError: Expected values to be strictly equal: - -false !== true - - generatedMessage: true, - actual: false, - expected: true, - operator: "strictEqual", - code: "ERR_ASSERTION" - - at C:\Users\Zenchant\codex\beadboard\tests\lib\watcher.test.ts:45:10 - at processTicksAndRejections (native:7:39) -(fail) IssuesWatchManager emits event after file change in watched .beads path [609.00ms] -Ran 2 tests across 1 file. [746.00ms] -Bailed out after 1 failure diff --git a/test2.txt b/test2.txt deleted file mode 100644 index aaf3df5..0000000 --- a/test2.txt +++ /dev/null @@ -1,28 +0,0 @@ -bun test v1.3.6 (d530ed99) - -tests\lib\watcher.test.ts: -82 | stop(); -83 | await manager.stopAll(); -84 | -85 | // REGRESSION: beads.db should emit 'telemetry', not 'issues' -86 | // This prevents the "typing interrupt" refresh loop during agent heartbeats -87 | assert.equal(events.length >= 1, true, 'Expected at least one event'); - ^ -AssertionError: Expected at least one event - -false !== true - - generatedMessage: false, - actual: false, - expected: true, - operator: "strictEqual", - code: "ERR_ASSERTION" - - at C:\Users\Zenchant\codex\beadboard\tests\lib\watcher.test.ts:87:10 - at processTicksAndRejections (native:7:39) -(fail) IssuesWatchManager emits telemetry event after beads.db change (not issues) [563.00ms] - - 0 pass - 4 filtered out - 1 fail -Ran 1 test across 1 file. [678.00ms] diff --git a/tmp_diff.txt b/tmp_diff.txt deleted file mode 100644 index 6b0a629..0000000 --- a/tmp_diff.txt +++ /dev/null @@ -1,3384 +0,0 @@ -diff --git a/.beads/.gitignore b/.beads/.gitignore -index 0acd8c6..dba6914 100644 ---- a/.beads/.gitignore -+++ b/.beads/.gitignore -@@ -1,37 +1,20 @@ --# SQLite databases --*.db --*.db?* --*.db-journal --*.db-wal --*.db-shm -+# Dolt database (managed by Dolt, not git) -+dolt/ -+dolt-access.lock - --# Daemon runtime files --daemon.lock --daemon.log --daemon.pid -+# Runtime files - bd.sock -+bd.sock.startlock - sync-state.json - last-touched - - # Local version tracking (prevents upgrade notification spam after git ops) - .local_version - --# Legacy database files --db.sqlite --bd.db -- - # Worktree redirect file (contains relative path to main repo's .beads/) - # Must not be committed as paths would be wrong in other clones - redirect - --# Merge artifacts (temporary files from 3-way merge) --beads.base.jsonl --beads.base.meta.json --beads.left.jsonl --beads.left.meta.json --beads.right.jsonl --beads.right.meta.json -- - # Sync state (local-only, per-machine) - # These files are machine-specific and should not be shared across clones - .sync.lock -@@ -39,6 +22,31 @@ beads.right.meta.json - sync_base.jsonl - export-state/ - -+# Ephemeral store (SQLite - wisps/molecules, intentionally not versioned) -+ephemeral.sqlite3 -+ephemeral.sqlite3-journal -+ephemeral.sqlite3-wal -+ephemeral.sqlite3-shm -+ -+# Legacy files (from pre-Dolt versions) -+*.db -+*.db?* -+*.db-journal -+*.db-wal -+*.db-shm -+db.sqlite -+bd.db -+daemon.lock -+daemon.log -+daemon-*.log.gz -+daemon.pid -+beads.base.jsonl -+beads.base.meta.json -+beads.left.jsonl -+beads.left.meta.json -+beads.right.jsonl -+beads.right.meta.json -+ - # NOTE: Do NOT add negation patterns (e.g., !issues.jsonl) here. - # They would override fork protection in .git/info/exclude, allowing - # contributors to accidentally commit upstream issue databases. -diff --git a/.beads/config.yaml b/.beads/config.yaml -index ff8bc92..68ce17a 100644 ---- a/.beads/config.yaml -+++ b/.beads/config.yaml -@@ -1,67 +1,2 @@ --# Beads Configuration File --# This file configures default behavior for all bd commands in this repository --# All settings can also be set via environment variables (BD_* prefix) --# or overridden with command-line flags -- --# Issue prefix for this repository (used by bd init) --# If not set, bd init will auto-detect from directory name --# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc. --# issue-prefix: "" -- --# Use no-db mode: load from JSONL, no SQLite, write back after each command --# When true, bd will use .beads/issues.jsonl as the source of truth --# instead of SQLite database --# no-db: false -- --# Disable daemon for RPC communication (forces direct database access) --# no-daemon: false -- --# Disable auto-flush of database to JSONL after mutations --# no-auto-flush: false -- --# Disable auto-import from JSONL when it's newer than database --# no-auto-import: false -- --# Enable JSON output by default --# json: false -- --# Default actor for audit trails (overridden by BD_ACTOR or --actor) --# actor: "" -- --# Path to database (overridden by BEADS_DB or --db) --# db: "" -- --# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON) --# auto-start-daemon: true -- --# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE) --# flush-debounce: "5s" -- --# Export events (audit trail) to .beads/events.jsonl on each flush/sync --# When enabled, new events are appended incrementally using a high-water mark. --# Use 'bd export --events' to trigger manually regardless of this setting. --# events-export: false -- --# Git branch for beads commits (bd sync will commit to this branch) --# IMPORTANT: Set this for team projects so all clones use the same sync branch. --# This setting persists across clones (unlike database config which is gitignored). --# Can also use BEADS_SYNC_BRANCH env var for local override. --# If not set, bd sync will require you to run 'bd config set sync.branch '. --# sync-branch: "beads-sync" -- --# Multi-repo configuration (experimental - bd-307) --# Allows hydrating from multiple repositories and routing writes to the correct JSONL --# repos: --# primary: "." # Primary repo (where this database lives) --# additional: # Additional repos to hydrate from (read-only) --# - ~/beads-planning # Personal planning repo --# - ~/work-planning # Work planning repo -- --# Integration settings (access with 'bd config get/set') --# These are stored in the database, not in this file: --# - jira.url --# - jira.project --# - linear.url --# - linear.api-key --# - github.org --# - github.repo -+sync: -+ mode: dolt-native -diff --git a/.beads/metadata.json b/.beads/metadata.json -index c787975..9de33ec 100644 ---- a/.beads/metadata.json -+++ b/.beads/metadata.json -@@ -1,4 +1,8 @@ - { -- "database": "beads.db", -- "jsonl_export": "issues.jsonl" -+ "database": "dolt", -+ "jsonl_export": "issues.jsonl", -+ "backend": "dolt", -+ "dolt_mode": "server", -+ "dolt_server_port": 3307, -+ "dolt_database": "beadboard" - } -\ No newline at end of file -diff --git a/AGENTS.md b/AGENTS.md -index 87860bf..8e21900 100644 ---- a/AGENTS.md -+++ b/AGENTS.md -@@ -10,6 +10,8 @@ This repo is execution-first, evidence-first, and beads-driven. - 4. Evidence before assertions: do not claim fixed/passing/done without fresh command output. - 5. Keep language simple in user-facing labels and UI copy. - 6. Reuse shared code paths/components; avoid one-off logic drift across pages. -+7. Treat BeadBoard as a multi-agent coordination + communication system first; optimize feature decisions for swarm execution clarity before cosmetic/layout preferences. -+8. Runtime UI route surface is query-driven from `/` (`view=social|graph|activity`); do not reintroduce direct App Router page sprawl without explicit approval. - - ## Quick Beads Workflow - -@@ -63,15 +65,21 @@ npm run test - - If UI changed, refresh screenshots and record artifact paths. - -+## Runtime Surface Guardrails -+ -+1. Keep the active runtime page surface minimal under `src/app`. -+2. Preserve deprecated/legacy page implementations in `reference/routes/**` when useful for reuse. -+3. Maintain backward-compatible redirects in `next.config.ts` when route contracts change. -+ - ## Realtime / Refresh Bug Triage Pattern - - When status updates are stale or require refresh: - - 1. Verify source-of-truth parity (`bd show` vs app output). - 2. Confirm read path prefers live BD data when needed. --3. Confirm watcher inputs include DB + WAL + touch markers. --4. Confirm SSE fallback compares mtime/timestamps, not only static file content. --5. Add regression tests for watcher/events behavior. -+3. Confirm watcher coverage for active project scope roots and relevant agent/message files. -+4. Confirm SSE event flow and client subscription behavior across all active views. -+5. Add regression tests for watcher/events behavior and scope switching. - - ## Parallel Agent Pattern - -@@ -106,6 +114,8 @@ Use parallel agents for independent beads. - - Confirm DB + WAL + touch markers are watched and SSE fallback uses mtime/timestamps. - 7. Missing test registration: - - New test files must be included in `npm run test` script if the suite is explicitly enumerated. -+8. Documentation drift: -+ - Do not claim features in `README.md` that are not currently shipped, unless clearly labeled as roadmap. - - ## Session Completion (Landing the Plane) - -@@ -136,3 +146,90 @@ Never claim: - - "closed" - - unless you have run the proving command(s) in the current session and can cite results. -+ -+ -+## Issue Tracking with bd (beads) -+ -+**IMPORTANT**: This project uses **bd (beads)** for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other tracking methods. -+ -+### Why bd? -+ -+- Dependency-aware: Track blockers and relationships between issues -+- Git-friendly: Auto-syncs to JSONL for version control -+- Agent-optimized: JSON output, ready work detection, discovered-from links -+- Prevents duplicate tracking systems and confusion -+ -+### Quick Start -+ -+**Check for ready work:** -+ -+```bash -+bd ready --json -+``` -+ -+**Create new issues:** -+ -+```bash -+bd create "Issue title" --description="Detailed context" -t bug|feature|task -p 0-4 --json -+bd create "Issue title" --description="What this issue is about" -p 1 --deps discovered-from:bd-123 --json -+``` -+ -+**Claim and update:** -+ -+```bash -+bd update bd-42 --status in_progress --json -+bd update bd-42 --priority 1 --json -+``` -+ -+**Complete work:** -+ -+```bash -+bd close bd-42 --reason "Completed" --json -+``` -+ -+### Issue Types -+ -+- `bug` - Something broken -+- `feature` - New functionality -+- `task` - Work item (tests, docs, refactoring) -+- `epic` - Large feature with subtasks -+- `chore` - Maintenance (dependencies, tooling) -+ -+### Priorities -+ -+- `0` - Critical (security, data loss, broken builds) -+- `1` - High (major features, important bugs) -+- `2` - Medium (default, nice-to-have) -+- `3` - Low (polish, optimization) -+- `4` - Backlog (future ideas) -+ -+### Workflow for AI Agents -+ -+1. **Check ready work**: `bd ready` shows unblocked issues -+2. **Claim your task**: `bd update --status in_progress` -+3. **Work on it**: Implement, test, document -+4. **Discover new work?** Create linked issue: -+ - `bd create "Found bug" --description="Details about what was found" -p 1 --deps discovered-from:` -+5. **Complete**: `bd close --reason "Done"` -+ -+### Auto-Sync -+ -+bd automatically syncs with git: -+ -+- Exports to `.beads/issues.jsonl` after changes (5s debounce) -+- Imports from JSONL when newer (e.g., after `git pull`) -+- No manual export/import needed! -+ -+### Important Rules -+ -+- ✅ Use bd for ALL task tracking -+- ✅ Always use `--json` flag for programmatic use -+- ✅ Link discovered work with `discovered-from` dependencies -+- ✅ Check `bd ready` before asking "what should I work on?" -+- ❌ Do NOT create markdown TODO lists -+- ❌ Do NOT use external issue trackers -+- ❌ Do NOT duplicate tracking systems -+ -+For more details, see README.md and docs/QUICKSTART.md. -+ -+ -diff --git a/README.md b/README.md -index afe7406..76805ea 100644 ---- a/README.md -+++ b/README.md -@@ -1,67 +1,205 @@ - # BeadBoard -+**Work in Progress, please contribute!** -+**BeadBoard is a multi-agent swarm coordination system built on [Beads](https://github.com/steveyegge/beads) inspired by [Gastown](https://github.com/steveyegge/gastown).** Thanks [Steve Yegge](https://github.com/steveyegge)! - --**The Windows-native Control Center for [Beads](https://github.com/steveyegge/beads).** -- --BeadBoard is a high-performance local dashboard for managing your software development tasks. Built on the Beads protocol, it provides a unified, visualization-rich interface over your distributed project landscape. --![alt text](image.png) --## 🚀 Why BeadBoard? --Most task managers are siloes. BeadBoard is a lens over your source code. --- **Source of Truth**: Reads directly from `.beads/issues.jsonl` in your repo. No database sync skew. --- **Windows Optimized**: Built from the ground up to handle Windows paths, drive letters, and filesystem performance. --- **Zero Latency**: Optimistic UI updates make interactions feel instant. -- --## ✨ Core Features -- --### 1. Multi-Project Registry & Scanner --Stop context switching between repos. --- **Project Registry**: Persist your favorite project roots for one-click access. --- **Auto-Discovery**: Built-in filesystem scanner finds Bead-enabled projects across your drives. --- **Aggregate Mode**: View tasks from *all* registered projects in a single unified board. -- --### 2. Interactive Kanban Dashboard (`/`) --Manage your flow state. --![Kanban Dashboard](assets/kanban-hero.png) --- **Live Updates**: Boards refresh automatically when the underlying JSONL files change (e.g., via CLI). --- **Progressive Disclosure**: Task details, metadata, and relations are tucked away until you need them. --- **Smart Filtering**: Filter by priority, assignee, status, or full-text search across thousands of beads. -- --### 3. Dependency Graph Explorer (`/graph`) --Understand the "Why" and "What's Next". --![alt text](image-1.png) --- **Epic-Centric Layout**: Automatically groups tasks by Epic for logical clustering. --- **True DAG Visualization**: Uses Dagre layout engine to enforce a strict Left-to-Right dependency flow. -- - *Left*: Incoming Blockers -- - *Center*: Focus Task -- - *Right*: Unlocks / Downstream --- **Focus Mode**: Minimizable dependency strip and deep-linking support for sharing exact views. --- **Smart Metadata**: See bead counts, priorities, and status health at a glance. -- --### 4. Agent Sessions Hub (`/sessions`) --Coordinate multi-agent workflows with social-dense visibility. --- **Epic-Grouped Task Feed**: Tasks organized by parent Epic with session state indicators (active, reviewing, needs_input, stale). --- **Cross-Agent Communication**: Built-in messaging with HANDOFF, BLOCKED, and INFO categories. --- **Agent Productivity Metrics**: Real-time stats showing active tasks, completions, and recent wins. --- **Derived Activity Engine**: O(N) snapshot diffing computes project history on-demand without separate event storage. --- **`bb agent` CLI Integration**: Visualizes data from agent registry, reservations, and mailboxes. -- --### 5. Chronological Timeline (`/timeline`) --Real-time activity feed for all project events. --- **Live Updates**: Server-Sent Events stream changes instantly. --- **Date Grouping**: Events organized by day (Today, Yesterday, etc.). --- **Polymorphic Cards**: Distinct visual styles for Status, Lifecycle, and Diff events. --- **History Buffer**: Recent events preserved across server restarts. -- --## 🛠️ Stack --- **Framework**: Next.js 15 (App Router) --- **UI Engine**: React 19 + Framer Motion --- **Styling**: Tailwind CSS + Custom Design System --- **Type Safety**: Strict TypeScript -- --## ⚡ Quick Start --1. **Install**: `npm install` --2. **Run**: `npm run dev` --3. **Explore**: Open `http://localhost:3000` -- --## 🤝 Contribution --- **Typecheck**: `npm run typecheck` --- **Test**: `npm run test` -+BB is a visual operations layer for running agent teams against real dependency-constrained work. -+ -+--- -+ -+## What This App Is -+BeadBoard is not just a task board. It is an execution system for coordinating agents around shared Beads workflows: -+ -+- Agent-to-agent communication with explicit categories (`HANDOFF`, `BLOCKED`, `DECISION`, `INFO`) -+- Conversation threads merged from activity events, agent messages, and local interactions -+- Graph/topology context for deciding what should move next -+- Global project scope switching across single and aggregate workspaces -+- Swarm orchestration with archetypes/templates and assignment controls -+ -+--- -+ -+![alt text](image-9.png) -+ -+--- -+ -+## Core Features -+ -+### 1. Agent Communication System -+- Structured message lifecycle: `send`, `inbox`, `read`, `ack` -+- Message states: `unread`, `read`, `acked` -+- Per-task conversation threads combining: -+ - activity events -+ - agent mail -+ - local bd interactions -+- Required acknowledgment semantics for high-signal categories (`HANDOFF`, `BLOCKED`) -+ -+### 2. Swarm Coordination Surface -+- Agent Pool Monitor with: -+ - Archetypes -+ - Templates -+ - Needs Agent queue -+ - Pre-assigned queue -+ - Squad roster -+- Assignment workflow through the graph workspace and right panel -+![alt text](image-7.png) -+ -+### 3. Graph + Dependency Topology -+- DAG-oriented graph workspace for execution decisions -+- Task/dependency tab modes for different planning lenses -+- Blocker/unblock context surfaced directly in task cards -+- Graph analysis support (cycle and blocked-chain context) -+![alt text](image-8.png) -+ -+### 4. Global Project Scope + Scanner -+- Project registry and scanner-backed discovery -+- Single-project and aggregate modes -+- Runtime scope switching without leaving the primary workspace -+ -+### 5. Realtime Operations Layer -+- Live updates via watchers + SSE -+- Activity stream integration with session/task context -+- Mutation/writeback feedback integrated into the same operational surface -+ -+--- -+ -+## Runtime Surface -+ -+### Active Route -+- `/` -+ -+### View Modes -+- `/?view=social` -+- `/?view=graph` -+- `/?view=activity` -+ -+### Compatibility Redirects -+- `/graph` -> `/?view=graph` -+- `/sessions` -> `/?view=social` -+- `/timeline` -> `/?view=activity` -+- `/mockup` -> `/` -+ -+### Archived Route Vault -+Legacy route implementations are preserved in `reference/routes/**` and excluded from active runtime validation scope. -+ -+--- -+ -+## Install -+ -+### Prerequisites -+- Node.js `18.18+` (Node `20 LTS` recommended) -+- npm -+ -+### Clone + Install -+```bash -+git clone https://github.com/zenchantlive/beadboard.git -+cd beadboard -+npm install -+``` -+ -+--- -+ -+## Quick Start -+ -+```bash -+npm run dev -+``` -+ -+Open: -+ -+```text -+http://localhost:3000 -+``` -+ -+--- -+ -+## Configuration -+No external service is required for core local usage. -+ -+Runtime behavior is driven by: -+- Local Beads project data -+- Registered/scanned project roots -+- URL query state (`view`, `task`, `swarm`, `agent`, `epic`, `graphTab`, panel state) -+ -+--- -+ -+## Operating Flow -+ -+### 1. Coordinate through Graph + Pool -+Open `/?view=graph`, inspect dependency topology, and drive assignment from the pool panel. -+ -+### 2. Communicate in Context -+Open a task thread to read merged conversation context and process message acknowledgments. -+ -+### 3. Switch Scope as Work Expands -+Use registry/scanner controls to move between local and aggregate project scope. -+ -+### 4. Track Live Signal -+Use social/activity views to monitor execution movement and operational events. -+ -+--- -+ -+## Roadmap Notes -+- Cross-view assign controls in all major views. -+- Social naming/UX evolution (including possible shift toward “swim” terminology). -+- Continued expansion of global project config/scanner workflows. -+ -+--- -+ -+## Scripts -+ -+```bash -+npm run dev -+npm run build -+npm run start -+npm run typecheck -+npm run lint -+npm run test -+npm run video -+npm run video:render -+npm run video:thumbnail -+``` -+ -+--- -+ -+## Architecture -+- **Frontend**: Next.js App Router + React 19 + Tailwind + Framer Motion + Radix -+- **Graph stack**: XYFlow + Dagre -+- **Core domain**: Beads issue model, graph/kanban/session/social builders -+- **Coordination layer**: agent mail + session communication + swarm orchestration state -+- **Realtime**: watchers + SSE + snapshot differ + activity persistence -+- **Validation/typing**: strict TypeScript + Zod contracts where applicable -+ -+--- -+ -+## Project Structure -+ -+```text -+src/ -+ app/ -+ page.tsx # active runtime route -+ api/ # runtime API routes -+ components/ -+ shared/ graph/ social/ activity/ sessions/ swarm/ kanban/ -+ hooks/ -+ lib/ -+reference/ -+ routes/ # archived route implementations -+``` -+ -+--- -+ -+## Contributing -+1. Keep active runtime pages in `src/app` minimal. -+2. Promote reusable logic into `src/lib`, `src/components`, `src/hooks`. -+3. Archive non-runtime route experiments in `reference/routes`. -+4. Run quality gates before merge: -+ -+```bash -+npm run typecheck -+npm run lint -+npm run test -+``` -+ -+--- -+ -+## License -+MIT -diff --git a/docs/protocols/operative-protocol-v1.md b/docs/protocols/operative-protocol-v1.md -index 73b0c23..a8522e9 100644 ---- a/docs/protocols/operative-protocol-v1.md -+++ b/docs/protocols/operative-protocol-v1.md -@@ -1,7 +1,7 @@ - # Operative Protocol v1 (Session Constitution) - - Date: 2026-02-14 --Status: Approved for implementation -+Status: Approved for implementation (superseded for migration planning by `docs/protocols/2026-02-28-bd-audit-coordination-schema.md`) - Scope: `bb-u6f.6.1` - Applies to: `bb-u6f.6.2`, `bb-u6f.6.3`, `bb-u6f.6.4`, `bb-u6f.6.5` - -@@ -15,6 +15,10 @@ Boundaries: - 3. No direct writes to `.beads/issues.jsonl`. - 4. User-facing labels must stay plain language. - -+Migration note: -+1. New work should target the `coord.v1` `bd audit` event model documented in `docs/protocols/2026-02-28-bd-audit-coordination-schema.md`. -+2. `bb` coordination semantics are legacy compatibility behavior pending removal after migration sign-off. -+ - ## 2. Normative Language - - 1. MUST: required behavior. -diff --git a/eslint.config.mjs b/eslint.config.mjs -index 29a92b5..5ae70d1 100644 ---- a/eslint.config.mjs -+++ b/eslint.config.mjs -@@ -14,6 +14,7 @@ const eslintConfig = [ - '.next/**', - '.agents/**', - 'skills/**', -+ 'reference/**', - 'next-env.d.ts', - ], - }, -diff --git a/next.config.ts b/next.config.ts -index 0076578..05d1bdb 100644 ---- a/next.config.ts -+++ b/next.config.ts -@@ -4,6 +4,30 @@ import path from 'node:path'; - const nextConfig: NextConfig = { - reactStrictMode: true, - outputFileTracingRoot: path.join(process.cwd()), -+ async redirects() { -+ return [ -+ { -+ source: '/graph', -+ destination: '/?view=graph', -+ permanent: false, -+ }, -+ { -+ source: '/sessions', -+ destination: '/?view=social', -+ permanent: false, -+ }, -+ { -+ source: '/timeline', -+ destination: '/?view=activity', -+ permanent: false, -+ }, -+ { -+ source: '/mockup', -+ destination: '/', -+ permanent: false, -+ }, -+ ]; -+ }, - webpack(config, { dev }) { - if (dev) { - // Avoid intermittent Windows ENOENT errors from webpack filesystem pack cache. -diff --git a/package.json b/package.json -index 972b5e6..3f49a2c 100644 ---- a/package.json -+++ b/package.json -@@ -9,7 +9,7 @@ - "start": "next start", - "lint": "eslint .", - "typecheck": "tsc --noEmit", -- "test": "node --test tests/bootstrap.test.mjs && node --import tsx --test tests/components/shared/base-card.test.tsx && node --import tsx --test tests/components/shared/agent-avatar.test.tsx && node --import tsx --test tests/components/sessions/sessions-header.test.ts && node --import tsx --test tests/components/sessions/agent-station-logic.test.ts && node --import tsx --test tests/lib/parser.test.ts && node --import tsx --test tests/lib/pathing.test.ts && node --import tsx --test tests/components/shared/left-panel.test.tsx && node --import tsx --test tests/components/shared/top-bar.test.tsx && node --import tsx --test tests/components/shared/mobile-nav.test.tsx && node --import tsx --test tests/components/swarm/swarm-card.test.tsx && node --import tsx --test tests/hooks/url-state-integration.test.ts && node --import tsx --test tests/hooks/use-graph-analysis.test.ts && node --import tsx --test tests/components/graph/smart-dag.test.tsx && node --import tsx --test tests/components/unified-shell.test.tsx && node --import tsx --test tests/components/graph/graph-node-labels.test.tsx && node --import tsx --test tests/components/graph/graph-node-assign.test.tsx", -+ "test": "node --test tests/bootstrap.test.mjs && node --import tsx --test tests/components/shared/base-card.test.tsx && node --import tsx --test tests/components/shared/agent-avatar.test.tsx && node --import tsx --test tests/components/sessions/sessions-header.test.ts && node --import tsx --test tests/components/sessions/agent-station-logic.test.ts && node --import tsx --test tests/lib/parser.test.ts && node --import tsx --test tests/lib/pathing.test.ts && node --import tsx --test tests/components/shared/left-panel.test.tsx && node --import tsx --test tests/components/shared/top-bar.test.tsx && node --import tsx --test tests/components/shared/mobile-nav.test.tsx && node --import tsx --test tests/components/swarm/swarm-card.test.tsx && node --import tsx --test tests/hooks/url-state-integration.test.ts && node --import tsx --test tests/hooks/use-graph-analysis.test.ts && node --import tsx --test tests/components/graph/smart-dag.test.tsx && node --import tsx --test tests/components/unified-shell.test.tsx && node --import tsx --test tests/components/graph/graph-node-labels.test.tsx && node --import tsx --test tests/components/graph/graph-node-assign.test.tsx && node --import tsx --test tests/lib/coord-schema.test.ts && node --import tsx --test tests/lib/coord-events.test.ts && node --import tsx --test tests/api/coord-events-route.test.ts && node --import tsx --test tests/lib/coord-projections-inbox.test.ts && node --import tsx --test tests/lib/coord-projections-reservations.test.ts && node --import tsx --test tests/components/sessions/conversation-drawer-coord.test.tsx", - "video": "remotion preview src/video/index.ts", - "video:render": "remotion render src/video/index.ts Main out/video.mp4", - "video:thumbnail": "remotion still src/video/index.ts Main out/thumbnail.png --frame=60" -diff --git a/src/app/api/beads/_shared.ts b/src/app/api/beads/_shared.ts -index e5f5c50..b1399fa 100644 ---- a/src/app/api/beads/_shared.ts -+++ b/src/app/api/beads/_shared.ts -@@ -29,7 +29,7 @@ export async function handleMutationRequest(request: Request, operation: Mutatio - const payload = validateMutationPayload(operation, body); - const result = await executeMutation(operation, payload); - -- const status = result.ok ? 200 : result.error?.classification === 'not_found' ? 404 : 400; -+ const status = result.ok ? 200 : result.error?.classification === 'not_found' ? 503 : 400; - return NextResponse.json(result, { status }); - } catch (error) { - if (error instanceof MutationValidationError) { -diff --git a/src/app/api/sessions/[beadId]/conversation/route.ts b/src/app/api/sessions/[beadId]/conversation/route.ts -index bac7b34..6548b47 100644 ---- a/src/app/api/sessions/[beadId]/conversation/route.ts -+++ b/src/app/api/sessions/[beadId]/conversation/route.ts -@@ -22,7 +22,7 @@ export async function GET( - const activity = history.filter((e: ActivityEvent) => e.beadId === beadId); - - // 2. Get communication for this bead -- const summary = await getCommunicationSummary(); -+ const summary = await getCommunicationSummary(projectRoot); - const messages = summary.messages.filter((m: AgentMessage) => m.bead_id === beadId); - - // 3. Get local bd interactions via CLI -@@ -55,4 +55,4 @@ export async function GET( - console.error('[API/Sessions/Conversation] Failed:', error); - return NextResponse.json({ ok: false, error: String(error) }, { status: 500 }); - } --} -\ No newline at end of file -+} -diff --git a/src/app/api/sessions/route.ts b/src/app/api/sessions/route.ts -index e9a3395..b018d92 100644 ---- a/src/app/api/sessions/route.ts -+++ b/src/app/api/sessions/route.ts -@@ -41,9 +41,9 @@ export async function GET(request: Request): Promise { - try { - const issues = await readIssuesFromDisk({ projectRoot, preferBd: true }); - const activity = activityEventBus.getHistory(projectRoot); -- const communication = await getCommunicationSummary(); -+ const communication = await getCommunicationSummary(projectRoot); - const livenessMap = await getAgentLivenessMap(projectRoot, activity); -- const incursions = await calculateIncursions(); -+ const incursions = await calculateIncursions(projectRoot, livenessMap); - const agentsResult = await listAgents({}, { projectRoot }); - - const feed = buildSessionTaskFeed(issues, activity, communication, livenessMap); -diff --git a/src/app/api/swarm/list/route.ts b/src/app/api/swarm/list/route.ts -index 37aec33..a26ab08 100644 ---- a/src/app/api/swarm/list/route.ts -+++ b/src/app/api/swarm/list/route.ts -@@ -21,9 +21,10 @@ export async function GET(request: Request): Promise { - }); - - if (!result.success) { -+ const status = result.classification === 'not_found' ? 503 : 400; - return NextResponse.json( - { ok: false, error: { classification: result.classification ?? 'unknown', message: result.error ?? result.stderr } }, -- { status: 400 }, -+ { status }, - ); - } - -diff --git a/src/app/api/swarm/status/route.ts b/src/app/api/swarm/status/route.ts -index 4d7e3b8..6e9a138 100644 ---- a/src/app/api/swarm/status/route.ts -+++ b/src/app/api/swarm/status/route.ts -@@ -29,9 +29,10 @@ export async function GET(request: Request): Promise { - }); - - if (!result.success) { -+ const status = result.classification === 'not_found' ? 503 : 400; - return NextResponse.json( - { ok: false, error: { classification: result.classification ?? 'unknown', message: result.error ?? result.stderr } }, -- { status: 400 }, -+ { status }, - ); - } - -diff --git a/src/app/globals.css b/src/app/globals.css -index a84e8b4..c4d448f 100644 ---- a/src/app/globals.css -+++ b/src/app/globals.css -@@ -6,27 +6,27 @@ - - :root { - /* ========== VISUAL-TRUTH UI TOKEN CONTRACT (bb-vt.1.1) ========== */ -- /* Warm charcoal aurora palette - DISTINCT LAYERS */ -- --ui-bg-app: #181716; /* Darkest - page background */ -- --ui-bg-header: #131211; /* Header - darker than sidebar */ -- --ui-bg-shell: #1f1e1d; /* Sidebar - distinct from main */ -- --ui-bg-panel: #282725; /* Panels/cards within sidebar */ -- --ui-bg-main: #242322; /* Main content area - distinct */ -- --ui-bg-card: #302e2c; /* Cards - lightest layer */ -- --ui-bg-elevated: #3a3836; /* Elevated/selected elements */ -- -- --ui-border-soft: rgba(180, 175, 165, 0.2); -- --ui-border-strong: rgba(180, 175, 165, 0.35); -- -- --ui-text-primary: #f0eeea; -- --ui-text-muted: #a8a49a; -- -- --ui-accent-ready: #35d98f; -- --ui-accent-blocked: #ff4c72; -- --ui-accent-warning: #ffb24a; -- --ui-accent-info: #35c9ff; -- --ui-accent-action-green: #35d98f; -- --ui-accent-action-red: #ff4c72; -+ /* Map legacy --ui-* tokens to theme tokens so all themes work consistently */ -+ --ui-bg-app: var(--surface-backdrop); -+ --ui-bg-header: var(--surface-primary); -+ --ui-bg-shell: var(--surface-primary); -+ --ui-bg-panel: var(--surface-secondary); -+ --ui-bg-main: var(--surface-secondary); -+ --ui-bg-card: var(--surface-elevated); -+ --ui-bg-elevated: var(--surface-elevated); -+ -+ --ui-border-soft: var(--border-subtle); -+ --ui-border-strong: var(--border-default); -+ -+ --ui-text-primary: var(--text-primary); -+ --ui-text-muted: var(--text-tertiary); -+ -+ --ui-accent-ready: var(--accent-success); -+ --ui-accent-blocked: var(--accent-danger); -+ --ui-accent-warning: var(--accent-warning); -+ --ui-accent-info: var(--accent-info); -+ --ui-accent-action-green: var(--accent-success); -+ --ui-accent-action-red: var(--accent-danger); - - --ui-font-sans: 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif; - --ui-font-mono: 'JetBrains Mono', 'Cascadia Code', 'Fira Code', monospace; -@@ -43,30 +43,25 @@ - --color-accent-teal: var(--ui-accent-info); - - --color-text-primary: var(--ui-text-primary); -- --color-text-secondary: #c4cfdb; -+ --color-text-secondary: var(--text-secondary); - --color-text-muted: var(--ui-text-muted); -- --color-text-on-primary: #10161d; -+ --color-text-on-primary: var(--text-inverse); - - --color-border-default: var(--ui-border-strong); - --color-border-subtle: var(--ui-border-soft); - - /* Status colors */ -- --status-open: var(--ui-accent-info); -- --status-ready: var(--ui-accent-ready); -- --status-in-progress: var(--ui-accent-warning); -- --status-progress: var(--ui-accent-warning); -- --status-blocked: var(--ui-accent-blocked); -- --status-blocked-earthy: var(--ui-accent-blocked); -- --status-closed: #7f8b98; -- --status-closed-earthy: #7f8b98; -- --status-deferred: #7f8b98; -+ --status-open: var(--accent-info); -+ --status-progress: var(--status-in-progress); -+ --status-blocked-earthy: var(--status-blocked); -+ --status-closed-earthy: var(--status-closed); - - /* Liveness colors */ - --liveness-active: var(--ui-accent-ready); - --liveness-stale: var(--ui-accent-warning); - --liveness-stuck: var(--ui-accent-action-red); - --liveness-dead: var(--ui-accent-action-red); -- --liveness-idle: #7f8b98; -+ --liveness-idle: var(--text-tertiary); - - /* Agent Role Colors */ - --agent-role-ui: #6B9BD2; -@@ -83,10 +78,10 @@ - --priority-p4: #64748b; - - /* Blocks/Unlocks Section Colors */ -- --color-blocks-bg: rgba(212, 165, 116, 0.1); -- --color-unlocks-bg: rgba(229, 115, 115, 0.1); -- --color-blocks-border: rgba(212, 165, 116, 0.2); -- --color-unlocks-border: rgba(229, 115, 115, 0.2); -+ --color-blocks-bg: var(--status-in-progress); -+ --color-unlocks-bg: var(--status-blocked); -+ --color-blocks-border: color-mix(in srgb, var(--accent-warning) 35%, transparent); -+ --color-unlocks-border: color-mix(in srgb, var(--accent-danger) 35%, transparent); - - /* ========== RADI ========== */ - --radius-sm: 0.375rem; -@@ -98,10 +93,8 @@ - --radius-pill: 9999px; - - /* ========== SHADOWS ========== */ -- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.1); -- --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.15); -- --shadow-soft-lg: 0 10px 30px -10px rgba(0, 0, 0, 0.3); -- --shadow-soft-xl: 0 20px 40px -10px rgba(0, 0, 0, 0.4); -+ --shadow-soft-lg: var(--shadow-md); -+ --shadow-soft-xl: var(--shadow-lg); - - /* ========== TYPOGRAPHY ========== */ - --font-ui-stack: var(--ui-font-sans); -@@ -139,13 +132,12 @@ - --sidebar-right-width: 17.5rem; - --topbar-height: 3.75rem; - -- --glass-base: linear-gradient(180deg, -- color-mix(in srgb, var(--ui-bg-card) 72%, black), -- color-mix(in srgb, var(--ui-bg-panel) 78%, black)); -- --edge-top: color-mix(in srgb, var(--ui-border-strong) 80%, white 20%); -- --edge-bottom: color-mix(in srgb, var(--ui-border-soft) 75%, black 25%); -- --elevation-ambient: 0 20px 40px -16px rgba(0, 0, 0, 0.78); -- --elevation-tight: 0 10px 24px -12px rgba(0, 0, 0, 0.7); -+ --glass-base: linear-gradient(180deg, var(--surface-elevated), var(--surface-secondary)); -+ --edge-side: var(--ui-border-soft); -+ --edge-top: color-mix(in srgb, var(--ui-border-strong) 88%, white 12%); -+ --edge-bottom: color-mix(in srgb, var(--ui-border-soft) 88%, black 12%); -+ --elevation-ambient: var(--shadow-lg); -+ --elevation-tight: var(--shadow-md); - - /* ========== LEGACY COMPATIBILITY TOKENS ========== */ - /* For existing components that reference these */ -@@ -181,7 +173,7 @@ body { - - * { - scrollbar-width: thin; -- scrollbar-color: rgba(148, 163, 184, 0.35) rgba(255, 255, 255, 0.02); -+ scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); - } - - *::-webkit-scrollbar { -@@ -190,18 +182,18 @@ body { - } - - *::-webkit-scrollbar-track { -- background: rgba(255, 255, 255, 0.02); -+ background: var(--scrollbar-track); - border-radius: 9999px; - } - - *::-webkit-scrollbar-thumb { -- background: linear-gradient(180deg, rgba(156, 163, 175, 0.55), rgba(107, 114, 128, 0.45)); -- border: 1px solid rgba(255, 255, 255, 0.1); -+ background: var(--scrollbar-thumb); -+ border: 1px solid color-mix(in srgb, var(--scrollbar-thumb) 70%, transparent); - border-radius: 9999px; - } - - *::-webkit-scrollbar-thumb:hover { -- background: linear-gradient(180deg, rgba(186, 194, 209, 0.72), rgba(124, 136, 156, 0.62)); -+ background: var(--scrollbar-thumb-hover); - } - - .custom-scrollbar::-webkit-scrollbar { -@@ -210,12 +202,12 @@ body { - } - - .custom-scrollbar::-webkit-scrollbar-thumb { -- background: rgba(148, 163, 184, 0.15); -+ background: var(--scrollbar-thumb); - border-radius: 20px; - } - - .custom-scrollbar::-webkit-scrollbar-thumb:hover { -- background: rgba(148, 163, 184, 0.3); -+ background: var(--scrollbar-thumb-hover); - } - - .no-scrollbar::-webkit-scrollbar { -@@ -229,14 +221,14 @@ body { - - - .workflow-card { -- border: 1px solid rgba(255, 255, 255, 0.08); -- border-top-color: rgba(255, 255, 255, 0.24); -- border-bottom-color: rgba(0, 0, 0, 0.9); -- background: linear-gradient(180deg, rgba(42, 44, 52, 0.6) 0%, rgba(22, 23, 28, 0.6) 100%); -+ border: 1px solid var(--border-default); -+ border-top-color: color-mix(in srgb, var(--border-strong) 88%, white 12%); -+ border-bottom-color: color-mix(in srgb, var(--border-subtle) 88%, black 12%); -+ background: linear-gradient(180deg, var(--surface-quaternary) 0%, var(--surface-secondary) 100%); - box-shadow: - var(--elevation-ambient), - var(--elevation-tight), -- inset 0 1px 1px rgba(255, 255, 255, 0.15); -+ inset 0 1px 1px color-mix(in srgb, var(--alpha-white-high) 40%, transparent); - backdrop-filter: blur(24px) saturate(120%); - -webkit-backdrop-filter: blur(24px) saturate(120%); - transform: translateZ(0); -@@ -244,14 +236,14 @@ body { - } - - .workflow-card-selected { -- border-color: rgba(96, 165, 250, 0.42); -- border-top-color: rgba(96, 165, 250, 0.58); -- background: linear-gradient(180deg, rgba(60, 68, 88, 0.7) 0%, rgba(35, 40, 52, 0.7) 100%); -+ border-color: color-mix(in srgb, var(--accent-info) 42%, var(--border-default)); -+ border-top-color: color-mix(in srgb, var(--accent-info) 58%, var(--border-strong)); -+ background: linear-gradient(180deg, color-mix(in srgb, var(--surface-active) 55%, var(--surface-elevated)), var(--surface-secondary)); - box-shadow: -- 0 20px 48px -8px rgba(0, 0, 0, 0.9), -- 0 0 0 1px rgba(96, 165, 250, 0.25), -- 0 0 40px rgba(96, 165, 250, 0.15), -- inset 0 1px 1px rgba(255, 255, 255, 0.3); -+ var(--shadow-lg), -+ 0 0 0 1px color-mix(in srgb, var(--accent-info) 25%, transparent), -+ var(--glow-info), -+ inset 0 1px 1px color-mix(in srgb, var(--alpha-white-high) 50%, transparent); - } - - .glass-panel { -@@ -265,19 +257,19 @@ body { - } - - .bg-earthy-gradient { -- background: linear-gradient(to bottom right, #2D2D2D, #363636); -+ background: linear-gradient(to bottom right, var(--surface-secondary), var(--surface-tertiary)); - } - --/* Shared dark form controls to avoid white-on-white browser defaults */ -+/* Shared themed form controls */ - .ui-field { -- border: 1px solid rgba(255, 255, 255, 0.1); -+ border: 1px solid var(--border-default); - border-top-color: var(--edge-top); - border-bottom-color: var(--edge-bottom); -- background: linear-gradient(180deg, rgba(32, 34, 42, 0.72), rgba(17, 19, 26, 0.72)); -+ background: linear-gradient(180deg, var(--surface-input), var(--surface-secondary)); - color: var(--color-text-strong); - box-shadow: -- 0 8px 20px -12px rgba(0, 0, 0, 0.85), -- inset 0 1px 0 rgba(255, 255, 255, 0.06); -+ var(--shadow-sm), -+ inset 0 1px 0 color-mix(in srgb, var(--alpha-white-high) 22%, transparent); - backdrop-filter: blur(12px); - -webkit-backdrop-filter: blur(12px); - } -@@ -288,10 +280,10 @@ body { - - .ui-field:focus-visible { - outline: none; -- border-color: rgba(96, 165, 250, 0.48); -+ border-color: color-mix(in srgb, var(--accent-info) 48%, var(--border-default)); - box-shadow: -- 0 0 0 2px rgba(96, 165, 250, 0.2), -- inset 0 1px 0 rgba(255, 255, 255, 0.06); -+ 0 0 0 2px color-mix(in srgb, var(--accent-info) 20%, transparent), -+ inset 0 1px 0 color-mix(in srgb, var(--alpha-white-high) 22%, transparent); - } - - .ui-select { -@@ -326,19 +318,19 @@ body { - } - - .ui-shell-topbar { -- background: linear-gradient(180deg, color-mix(in srgb, var(--ui-bg-panel) 92%, black), var(--ui-bg-shell)); -+ background: linear-gradient(180deg, var(--ui-bg-panel), var(--ui-bg-shell)); - border-bottom: 1px solid color-mix(in srgb, var(--ui-accent-info) 22%, var(--ui-border-soft)); -- box-shadow: 0 10px 24px -20px rgba(0, 0, 0, 0.9); -+ box-shadow: var(--shadow-sm); - } - - .ui-shell-middle { -- background: linear-gradient(180deg, color-mix(in srgb, var(--ui-bg-app) 74%, black), color-mix(in srgb, var(--ui-bg-app) 90%, black)); -+ background: linear-gradient(180deg, var(--ui-bg-app), var(--ui-bg-main)); - border-left: 1px solid color-mix(in srgb, var(--ui-accent-info) 20%, var(--ui-border-soft)); - border-right: 1px solid color-mix(in srgb, var(--ui-accent-info) 20%, var(--ui-border-soft)); - } - - .ui-shell-panel { -- background: linear-gradient(180deg, color-mix(in srgb, var(--ui-bg-shell) 86%, black), color-mix(in srgb, var(--ui-bg-panel) 84%, black)); -+ background: linear-gradient(180deg, var(--ui-bg-shell), var(--ui-bg-panel)); - border-left: 1px solid color-mix(in srgb, var(--ui-accent-info) 30%, var(--ui-border-soft)); - } - -@@ -349,8 +341,8 @@ body { - - .workflow-graph-legend { - backdrop-filter: blur(12px); -- background: rgba(20, 23, 31, 0.72); -- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05), 0 8px 32px rgba(0, 0, 0, 0.3); -+ background: color-mix(in srgb, var(--surface-overlay) 78%, transparent); -+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--alpha-white-high) 22%, transparent), var(--shadow-md); - } - - .workflow-graph-flow .react-flow__viewport { -diff --git a/src/app/graph/page.tsx b/src/app/graph/page.tsx -deleted file mode 100644 -index dbc23ce..0000000 ---- a/src/app/graph/page.tsx -+++ /dev/null -@@ -1,39 +0,0 @@ --import { DependencyGraphPage } from '../../components/graph/dependency-graph-page'; -- --export const dynamic = 'force-dynamic'; --import { readIssuesForScope } from '../../lib/aggregate-read'; --import { resolveProjectScope } from '../../lib/project-scope'; --import { listProjects } from '../../lib/registry'; -- --interface GraphPageProps { -- searchParams?: Promise>; --} -- --export default async function GraphPage({ searchParams }: GraphPageProps) { -- const params = (await searchParams) ?? {}; -- const requestedProjectKey = typeof params.project === 'string' ? params.project : null; -- const requestedMode = typeof params.mode === 'string' ? params.mode : null; -- const registryProjects = await listProjects(); -- const scope = resolveProjectScope({ -- currentProjectRoot: process.cwd(), -- registryProjects, -- requestedProjectKey, -- requestedMode, -- }); -- -- const issues = await readIssuesForScope({ -- mode: scope.mode, -- selected: scope.selected, -- scopeOptions: scope.options, -- preferBd: true, -- }); -- return ( -- -- ); --} -diff --git a/src/app/mockup/page.tsx b/src/app/mockup/page.tsx -deleted file mode 100644 -index b1ff3a7..0000000 ---- a/src/app/mockup/page.tsx -+++ /dev/null -@@ -1,556 +0,0 @@ --"use client" -- --import { useCallback, useEffect, useMemo, useState } from "react" --import { useRouter, useSearchParams } from "next/navigation" --import { ArrowLeft, ArrowUpRight, Clock3, Link2, MessageCircle, TriangleAlert, X } from "lucide-react" -- --import { Badge } from "@/components/ui/badge" --import { Button } from "@/components/ui/button" --import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" --import { Input } from "@/components/ui/input" --import { ScrollArea } from "@/components/ui/scroll-area" --import { Separator } from "@/components/ui/separator" -- --type TaskStatus = "open" | "in_progress" | "blocked" | "deferred" | "closed" -- --type Task = { -- id: string -- title: string -- description: string -- status: TaskStatus -- priority: 0 | 1 | 2 | 3 | 4 -- issueType: string -- assignee: string -- owner: string -- labels: string[] -- blockedReason: string -- updatedAgo: string -- dependencyCount: number -- blockedByCount: number -- commentCount: number -- unread: boolean --} -- --type Epic = { -- id: string -- name: string -- progress: number -- openCount: number -- tasks: Task[] --} -- --const palette = { -- primary: "#F2A62F", -- secondary: "#00D1A8", -- accent: "#0FC5AE", -- eggplant: "#4A2F63", -- bg: "#2D2E3C", -- surface: "#333341", -- border: "#4A4D5C", -- text: "#EDEBE5", -- textSecondary: "#B8B7B1", -- mutedBg: "#2F2F3E", -- success: "#0FC5AE", -- warning: "#D28A2C", -- error: "#D64545", -- info: "#00D1A8", -- atmosphereWarm: "#5A4632", -- atmosphereCool: "#23484D", --} -- --const initialEpics: Epic[] = [ -- { -- id: "bb-ui2", -- name: "Unified UX - Earthy Dark Shell", -- progress: 69, -- openCount: 11, -- tasks: [ -- { id: "bb-atf", title: "Agent swarm-view-integrator", description: "Integrate swarm view into social workroom shell.", status: "open", priority: 1, issueType: "task", assignee: "sarah.lee", owner: "swarm-team", labels: ["social", "swarm"], blockedReason: "", updatedAgo: "8m", dependencyCount: 1, blockedByCount: 0, commentCount: 3, unread: true }, -- { id: "bb-z6s", title: "Agent social-view-integrator", description: "Wire social stream cards and panel routing.", status: "in_progress", priority: 0, issueType: "feature", assignee: "alex.chen", owner: "social-team", labels: ["social", "ui"], blockedReason: "", updatedAgo: "14m", dependencyCount: 2, blockedByCount: 0, commentCount: 7, unread: true }, -- { id: "bb-nuy", title: "Agent swarm-card-builder", description: "Build consistent swarm card visuals and metadata.", status: "blocked", priority: 0, issueType: "bug", assignee: "alex.chen", owner: "swarm-team", labels: ["swarm", "cards"], blockedReason: "Waiting on dependency bb-ui2.0", updatedAgo: "35m", dependencyCount: 3, blockedByCount: 1, commentCount: 5, unread: true }, -- { id: "bb-3ha", title: "Agent sessions-integrator", description: "Session metrics panel integrated and verified.", status: "closed", priority: 2, issueType: "chore", assignee: "alex.chen", owner: "sessions-team", labels: ["sessions"], blockedReason: "", updatedAgo: "2h", dependencyCount: 0, blockedByCount: 0, commentCount: 4, unread: false }, -- ], -- }, -- { -- id: "bb-xhm", -- name: "Timeline and Activity Feed", -- progress: 80, -- openCount: 5, -- tasks: [ -- { id: "bb-3dv", title: "Agent rightpanel-builder", description: "Implement right rail card stack and compact activity.", status: "open", priority: 2, issueType: "task", assignee: "alex.chen", owner: "layout-team", labels: ["layout", "right-panel"], blockedReason: "", updatedAgo: "11m", dependencyCount: 1, blockedByCount: 0, commentCount: 1, unread: true }, -- { id: "bb-dwz", title: "Agent leftpanel-builder", description: "Epic->task navigation with search and metadata icons.", status: "in_progress", priority: 1, issueType: "feature", assignee: "sarah.lee", owner: "layout-team", labels: ["layout", "left-panel"], blockedReason: "", updatedAgo: "19m", dependencyCount: 0, blockedByCount: 0, commentCount: 6, unread: true }, -- { id: "bb-5am", title: "Agent topbar-builder", description: "Topbar controls and filter sync.", status: "blocked", priority: 1, issueType: "bug", assignee: "agent-007", owner: "layout-team", labels: ["topbar"], blockedReason: "Navigation contract mismatch", updatedAgo: "41m", dependencyCount: 2, blockedByCount: 1, commentCount: 2, unread: false }, -- { id: "bb-z2l", title: "Agent mobile-nav-builder", description: "Mobile drawer flow for three-pane shell.", status: "deferred", priority: 1, issueType: "task", assignee: "sarah.lee", owner: "mobile-team", labels: ["mobile", "navigation"], blockedReason: "", updatedAgo: "52m", dependencyCount: 0, blockedByCount: 0, commentCount: 2, unread: false }, -- ], -- }, --] -- --function statusClasses(status: TaskStatus) { -- if (status === "in_progress") return "border-l-[3px] border-l-[#0FC5AE] bg-[linear-gradient(145deg,#333341,#2F2F3E)]" -- if (status === "blocked") return "border-l-[3px] border-l-[#D64545] bg-[linear-gradient(145deg,#333341,#302B31)]" -- if (status === "deferred") return "border-l-[3px] border-l-[#D28A2C] bg-[linear-gradient(145deg,#333341,#342F29)]" -- if (status === "closed") return "border-l-[3px] border-l-[#6D6F7B] bg-[linear-gradient(145deg,#333341,#2F3039)]" -- return "border-l-[3px] border-l-[#00D1A8] bg-[linear-gradient(145deg,#333341,#2D313D)]" --} -- --function statusBadge(status: TaskStatus) { -- if (status === "in_progress") return "bg-[#0FC5AE] text-[#0E2220]" -- if (status === "blocked") return "bg-[#D64545] text-white" -- if (status === "deferred") return "bg-[#D28A2C] text-[#24190C]" -- if (status === "closed") return "bg-[#5A5D6A] text-[#D4D6DE]" -- return "bg-[#00D1A8] text-[#07221C]" --} -- --const panelClass = "rounded-2xl border shadow-[0_16px_40px_rgba(0,0,0,0.28)] backdrop-blur-[2px]" --const subPanelClass = "rounded-xl border" -- --function updateQuery(searchParams: URLSearchParams, updates: Record) { -- const next = new URLSearchParams(searchParams.toString()) -- for (const [key, value] of Object.entries(updates)) { -- if (!value) next.delete(key) -- else next.set(key, value) -- } -- const qs = next.toString() -- return qs ? `?${qs}` : "?" --} -- --export default function MockupPage() { -- const searchParams = useSearchParams() -- const router = useRouter() -- -- const [epics, setEpics] = useState(initialEpics) -- const [query, setQuery] = useState("") -- const [leftMode, setLeftMode] = useState<"epics" | "tasks">("epics") -- -- const urlEpic = searchParams.get("epic") -- const urlTask = searchParams.get("task") -- const urlThread = searchParams.get("thread") === "open" -- -- const initialEpic = epics.find((epic) => epic.id === urlEpic) ?? epics[0] -- const [selectedEpicId, setSelectedEpicId] = useState(initialEpic.id) -- const [selectedTaskId, setSelectedTaskId] = useState(urlTask ?? initialEpic.tasks[0].id) -- const [threadOpen, setThreadOpen] = useState(urlThread) -- const [threadEditMode, setThreadEditMode] = useState(false) -- -- const [draftTitle, setDraftTitle] = useState("") -- const [draftDescription, setDraftDescription] = useState("") -- const [draftStatus, setDraftStatus] = useState("open") -- const [draftPriority, setDraftPriority] = useState<0 | 1 | 2 | 3 | 4>(2) -- const [draftIssueType, setDraftIssueType] = useState("") -- const [draftAssignee, setDraftAssignee] = useState("") -- const [draftOwner, setDraftOwner] = useState("") -- const [draftLabels, setDraftLabels] = useState("") -- const [draftBlockedReason, setDraftBlockedReason] = useState("") -- const [savePulse, setSavePulse] = useState(false) -- -- const closeThread = useCallback(() => { -- setThreadOpen(false) -- setThreadEditMode(false) -- }, []) -- -- useEffect(() => { -- const next = updateQuery(searchParams, { -- epic: selectedEpicId, -- task: selectedTaskId, -- thread: threadOpen ? "open" : null, -- }) -- router.replace(next, { scroll: false }) -- }, [router, searchParams, selectedEpicId, selectedTaskId, threadOpen]) -- -- useEffect(() => { -- if (!threadOpen) { -- return -- } -- const onKeyDown = (event: KeyboardEvent) => { -- if (event.key === "Escape") { -- closeThread() -- } -- } -- window.addEventListener("keydown", onKeyDown) -- return () => window.removeEventListener("keydown", onKeyDown) -- }, [threadOpen, closeThread]) -- -- const selectedEpic = epics.find((epic) => epic.id === selectedEpicId) ?? epics[0] -- const filteredTasks = useMemo(() => { -- const q = query.trim().toLowerCase() -- return selectedEpic.tasks.filter((task) => `${task.id} ${task.title}`.toLowerCase().includes(q)) -- }, [query, selectedEpic.tasks]) -- const selectedTask = filteredTasks.find((task) => task.id === selectedTaskId) ?? filteredTasks[0] -- -- useEffect(() => { -- if (!selectedTask) return -- setDraftTitle(selectedTask.title) -- setDraftDescription(selectedTask.description) -- setDraftStatus(selectedTask.status) -- setDraftPriority(selectedTask.priority) -- setDraftIssueType(selectedTask.issueType) -- setDraftAssignee(selectedTask.assignee) -- setDraftOwner(selectedTask.owner) -- setDraftLabels(selectedTask.labels.join(", ")) -- setDraftBlockedReason(selectedTask.blockedReason) -- setThreadEditMode(false) -- }, [selectedTask, selectedTask?.id]) -- -- const saveTaskChanges = () => { -- if (!selectedTask) return -- const nextLabels = draftLabels -- .split(",") -- .map((part) => part.trim()) -- .filter(Boolean) -- setEpics((current) => -- current.map((epic) => -- epic.id !== selectedEpicId -- ? epic -- : { -- ...epic, -- tasks: epic.tasks.map((task) => -- task.id !== selectedTask.id -- ? task -- : { -- ...task, -- title: draftTitle, -- description: draftDescription, -- status: draftStatus, -- priority: draftPriority, -- issueType: draftIssueType, -- assignee: draftAssignee, -- owner: draftOwner, -- labels: nextLabels, -- blockedReason: draftBlockedReason, -- updatedAgo: "now", -- blockedByCount: draftStatus === "blocked" ? Math.max(task.blockedByCount, 1) : 0, -- } -- ), -- } -- ) -- ) -- setSavePulse(true) -- setTimeout(() => setSavePulse(false), 900) -- } -- -- return ( --
--
--
--
--
--

Social Workroom

--

Task-first center. Epic drill-in. Live awareness rail.

--
-- mockup route --
-- --
-- -- --
-- {leftMode === "tasks" ? ( -- -- ) : ( -- Epics -- )} -- {selectedEpic.openCount} open --
-- Select an epic, then choose a task. --
-- -- setQuery(event.target.value)} -- placeholder={leftMode === "epics" ? "Search epics" : "Search tasks"} -- className="mb-3" -- style={{ backgroundColor: palette.mutedBg, borderColor: palette.border }} -- /> -- --
-- {leftMode === "epics" -- ? epics -- .filter((epic) => epic.name.toLowerCase().includes(query.toLowerCase())) -- .map((epic) => ( -- -- )) -- : filteredTasks.map((task) => ( -- -- ))} --
--
--
--
-- -- -- --
--
-- {selectedEpic.name} -- Task cards + thread context --
-- --
--
-- -- --
-- {filteredTasks.map((task) => ( -- -- ))} --
--
-- --
--
--

Conversation: {selectedTask?.id}

-- --
--
--
-- alex.chen -- 2m -- Need confirmation that detail strip stays sticky while card grid scrolls. --
--
-- sarah.lee -- 1m -- Approved if right rail remains visible at 1280px breakpoint. --
--
--
--
--
-- -- -- -- Live Context -- Persistent awareness while working tasks. -- -- --
--

Live Agents

--
--

swarm-view-integratoronline

--

social-view-integratoraway

--

graph-integratorbusy

--
--
--
--

Recent Activity

--
--

5m · bb-z6s moved to in progress

--

11m · bb-atf received 2 comments

--

18m · bb-3ha marked closed

--

33m · bb-nuy dependency changed

--
--
--
--

Attention

--

2 blocked tasks in selected epic

--
--
--
--
--
--
-- -- {threadOpen ? ( --
--
event.stopPropagation()} -- > --
--
--

Thread · {selectedTask?.id}

--

Bead summary and inline edit mode

--
-- --
--
--
--

{threadEditMode ? "Edit task" : "Task summary"}

-- -- {savePulse ? "saved" : "ready"} -- --
-- {!threadEditMode ? ( --
--
--

{selectedTask?.id}

--

{selectedTask?.title}

--

{selectedTask?.description}

--
--
--
Status: {selectedTask?.status}
--
Priority: P{selectedTask?.priority}
--
Assignee: {selectedTask?.assignee || "-"}
--
Owner: {selectedTask?.owner || "-"}
--
-- Labels: {selectedTask?.labels.join(", ") || "-"} --
--
-- Blocked reason: {selectedTask?.blockedReason || "None"} --
--
--
-- --
--
-- ) : ( -- <> --
--
--

Title

-- setDraftTitle(event.target.value)} style={{ backgroundColor: "#323342", borderColor: "#585B6D", color: palette.text }} /> --
--
--

Assignee

-- setDraftAssignee(event.target.value)} style={{ backgroundColor: "#323342", borderColor: "#585B6D", color: palette.text }} /> --
--
--

Description

-- setDraftDescription(event.target.value)} style={{ backgroundColor: "#323342", borderColor: "#585B6D", color: palette.text }} /> --
--
--

Issue type

-- setDraftIssueType(event.target.value)} style={{ backgroundColor: "#323342", borderColor: "#585B6D", color: palette.text }} /> --
--
--

Owner

-- --
--
--

Labels (comma separated)

-- setDraftLabels(event.target.value)} style={{ backgroundColor: "#323342", borderColor: "#585B6D", color: palette.text }} /> --
--
--
--

Status

--
-- {(["open", "in_progress", "blocked", "deferred", "closed"] as TaskStatus[]).map((status) => ( -- -- ))} --
--
--
--

Priority

--
-- {([0, 1, 2, 3, 4] as const).map((priority) => ( -- -- ))} --
--
--
--

Blocked reason

-- setDraftBlockedReason(event.target.value)} style={{ backgroundColor: "#323342", borderColor: "#585B6D", color: palette.text }} /> --
--
-- -- --
-- -- )} --
--
--
-- ) : null} --
-- ) --} -diff --git a/src/app/page-old.tsx b/src/app/page-old.tsx -deleted file mode 100644 -index dbbce2a..0000000 ---- a/src/app/page-old.tsx -+++ /dev/null -@@ -1,37 +0,0 @@ --import { KanbanPage } from '../components/kanban/kanban-page'; --import { readIssuesForScope } from '../lib/aggregate-read'; --import { resolveProjectScope } from '../lib/project-scope'; --import { listProjects } from '../lib/registry'; -- --interface PageProps { -- searchParams?: Promise>; --} -- --export default async function Page({ searchParams }: PageProps) { -- const params = (await searchParams) ?? {}; -- const requestedProjectKey = typeof params.project === 'string' ? params.project : null; -- const requestedMode = typeof params.mode === 'string' ? params.mode : null; -- const registryProjects = await listProjects(); -- const scope = resolveProjectScope({ -- currentProjectRoot: process.cwd(), -- registryProjects, -- requestedProjectKey, -- requestedMode, -- }); -- -- const issues = await readIssuesForScope({ -- mode: scope.mode, -- selected: scope.selected, -- scopeOptions: scope.options, -- preferBd: true, -- }); -- return ( -- -- ); --} -diff --git a/src/app/sessions/page.tsx b/src/app/sessions/page.tsx -deleted file mode 100644 -index 83a3837..0000000 ---- a/src/app/sessions/page.tsx -+++ /dev/null -@@ -1,5 +0,0 @@ --import { redirect } from 'next/navigation'; -- --export default function SessionsRedirectPage() { -- redirect('/?view=social'); --} -diff --git a/src/app/timeline/page.tsx b/src/app/timeline/page.tsx -deleted file mode 100644 -index da94814..0000000 ---- a/src/app/timeline/page.tsx -+++ /dev/null -@@ -1,60 +0,0 @@ --'use client'; -- --import { useEffect } from 'react'; --import { TimelineFeed } from '../../components/timeline/timeline-feed'; --import { useTimelineStore } from '../../components/timeline/timeline-store'; -- --export default function TimelinePage() { -- return ( --
--
--

Activity Timeline

--

Real-time stream of project mutations.

--
-- -- -- -- --
-- ); --} -- --function TimelineControls() { -- return ( --
-- {/* Placeholder for future filters */} --
Showing all activity
--
-- ); --} -- --function TimelineSubscription() { -- const { addEvent, setHistory } = useTimelineStore(); -- -- useEffect(() => { -- // 1. Fetch history -- fetch('/api/activity') -- .then(res => { -- if (!res.ok) throw new Error('History fetch failed'); -- return res.json(); -- }) -- .then(data => setHistory(data)) -- .catch(err => console.error('Failed to load history', err)); -- -- // 2. Subscribe to SSE -- const es = new EventSource('/api/events'); -- -- es.addEventListener('activity', (e) => { -- try { -- const event = JSON.parse(e.data); -- addEvent(event); -- } catch (err) { -- console.error('Failed to parse activity event', err); -- } -- }); -- -- return () => es.close(); -- }, [setHistory, addEvent]); -- -- return null; --} -\ No newline at end of file -diff --git a/src/components/activity/activity-panel.tsx b/src/components/activity/activity-panel.tsx -index 8df8023..89744b9 100644 ---- a/src/components/activity/activity-panel.tsx -+++ b/src/components/activity/activity-panel.tsx -@@ -111,25 +111,25 @@ export function formatRelativeTime(timestamp: string): string { - function getAgentTone(status: AgentStatus): AgentTone { - const tones: Record = { - active: { -- cardClass: 'bg-[#173126]', -+ cardClass: 'bg-[var(--status-ready)]', - labelClass: 'text-[#7CB97A]', - ringClass: 'ring-[#7CB97A]/45', - glowClass: 'bg-[#7CB97A]/30', - }, - stale: { -- cardClass: 'bg-[#322817]', -+ cardClass: 'bg-[var(--status-in-progress)]', - labelClass: 'text-[#D4A574]', - ringClass: 'ring-[#D4A574]/45', - glowClass: 'bg-[#D4A574]/30', - }, - stuck: { -- cardClass: 'bg-[#341a1f]', -+ cardClass: 'bg-[var(--status-blocked)]', - labelClass: 'text-[#C97A7A]', - ringClass: 'ring-[#C97A7A]/45', - glowClass: 'bg-[#C97A7A]/30', - }, - dead: { -- cardClass: 'bg-[#2b232b]', -+ cardClass: 'bg-[var(--surface-primary)]', - labelClass: 'text-[#A78A94]', - ringClass: 'ring-[#A78A94]/40', - glowClass: 'bg-[#A78A94]/25', -@@ -147,84 +147,84 @@ export function getEventTone(kind: string): EventTone { - label: 'Created', - labelClass: 'text-[#7CB97A]', - dotClass: 'bg-[#7CB97A]', -- cardClass: 'bg-[#182f25]', -+ cardClass: 'bg-[var(--status-ready)]', - idClass: 'text-[#9ACB98]', - }, - opened: { - label: 'Opened', - labelClass: 'text-[#7CB97A]', - dotClass: 'bg-[#7CB97A]', -- cardClass: 'bg-[#182f25]', -+ cardClass: 'bg-[var(--status-ready)]', - idClass: 'text-[#9ACB98]', - }, - closed: { - label: 'Closed', - labelClass: 'text-[#D4A574]', - dotClass: 'bg-[#D4A574]', -- cardClass: 'bg-[#332716]', -+ cardClass: 'bg-[var(--status-in-progress)]', - idClass: 'text-[#DAB891]', - }, - reopened: { - label: 'Reopened', - labelClass: 'text-[#5B95E8]', - dotClass: 'bg-[#5B95E8]', -- cardClass: 'bg-[#1b2b43]', -+ cardClass: 'bg-[var(--surface-primary)]', - idClass: 'text-[#8DB4EF]', - }, - status_changed: { - label: 'Status changed', - labelClass: 'text-[#D4A574]', - dotClass: 'bg-[#D4A574]', -- cardClass: 'bg-[#2f2518]', -+ cardClass: 'bg-[var(--status-in-progress)]', - idClass: 'text-[#DAB891]', - }, - priority_changed: { - label: 'Priority changed', - labelClass: 'text-[#D4A574]', - dotClass: 'bg-[#D4A574]', -- cardClass: 'bg-[#2f2518]', -+ cardClass: 'bg-[var(--status-in-progress)]', - idClass: 'text-[#DAB891]', - }, - assignee_changed: { - label: 'Assigned', - labelClass: 'text-[#D4A574]', - dotClass: 'bg-[#D4A574]', -- cardClass: 'bg-[#2f2518]', -+ cardClass: 'bg-[var(--status-in-progress)]', - idClass: 'text-[#DAB891]', - }, - dependency_added: { - label: 'Dependency added', - labelClass: 'text-[#D4A574]', - dotClass: 'bg-[#D4A574]', -- cardClass: 'bg-[#2f2518]', -+ cardClass: 'bg-[var(--status-in-progress)]', - idClass: 'text-[#DAB891]', - }, - dependency_removed: { - label: 'Dependency removed', - labelClass: 'text-[#C97A7A]', - dotClass: 'bg-[#C97A7A]', -- cardClass: 'bg-[#321b21]', -+ cardClass: 'bg-[var(--status-blocked)]', - idClass: 'text-[#D9A9A9]', - }, - heartbeat: { - label: 'Heartbeat', - labelClass: 'text-[#5BA8A0]', - dotClass: 'bg-[#5BA8A0]', -- cardClass: 'bg-[#173034]', -+ cardClass: 'bg-[var(--surface-primary)]', - idClass: 'text-[#8BC9C1]', - }, - commented: { - label: 'Commented', - labelClass: 'text-[#5BA8A0]', - dotClass: 'bg-[#5BA8A0]', -- cardClass: 'bg-[#173034]', -+ cardClass: 'bg-[var(--surface-primary)]', - idClass: 'text-[#8BC9C1]', - }, - comment_added: { - label: 'Commented', - labelClass: 'text-[#5BA8A0]', - dotClass: 'bg-[#5BA8A0]', -- cardClass: 'bg-[#173034]', -+ cardClass: 'bg-[var(--surface-primary)]', - idClass: 'text-[#8BC9C1]', - }, - }; -@@ -234,7 +234,7 @@ export function getEventTone(kind: string): EventTone { - label: normalized.replace(/_/g, ' '), - labelClass: 'text-[#5BA8A0]', - dotClass: 'bg-[#5BA8A0]', -- cardClass: 'bg-[#173034]', -+ cardClass: 'bg-[var(--surface-primary)]', - idClass: 'text-[#8BC9C1]', - } - ); -@@ -299,7 +299,7 @@ export function ActivityPanel({ issues, collapsed = false, projectRoot }: Activi - const activeAgents = agentRoster.filter(a => a.status === 'active').length; - if (collapsed) { - return ( --
-+
- {/* Collapsed Agent Icons with ZFC Rings */} -
- {agentRoster.slice(0, 6).map(agent => ( -@@ -316,7 +316,7 @@ export function ActivityPanel({ issues, collapsed = false, projectRoot }: Activi - agent.status === 'stale' ? 'ring-[#D4A574]/45' : - agent.status === 'stuck' ? 'ring-[#C97A7A]/45' : 'ring-[#A78A94]/40' - )}> -- -+ - {getInitials(agent.name)} - - -@@ -340,9 +340,9 @@ export function ActivityPanel({ issues, collapsed = false, projectRoot }: Activi - } - - return ( --
-+
- {/* AGENT ROSTER SECTION */} --
-+
-
-
-
-@@ -368,7 +368,7 @@ export function ActivityPanel({ issues, collapsed = false, projectRoot }: Activi - getAgentTone(agent.status).glowClass - )} /> - -- -+ - {getInitials(agent.name)} - - -diff --git a/src/components/activity/swarm-command-feed.tsx b/src/components/activity/swarm-command-feed.tsx -index 5976f14..b54aedc 100644 ---- a/src/components/activity/swarm-command-feed.tsx -+++ b/src/components/activity/swarm-command-feed.tsx -@@ -76,9 +76,9 @@ export function SwarmCommandFeed({ epicId, issues, projectRoot }: SwarmCommandFe - }, [projectRoot, contextBeadIds]); - - return ( --
-+
- {/* SQUAD ROSTER SECTION */} --
-+
-
-
-
-@@ -96,7 +96,7 @@ export function SwarmCommandFeed({ epicId, issues, projectRoot }: SwarmCommandFe - ) : ( -
- {rosterEntries.map((agent, i) => ( --
-+
-
-
- -diff --git a/src/components/graph/assignment-panel.tsx b/src/components/graph/assignment-panel.tsx -index 055aa2b..c481d68 100644 ---- a/src/components/graph/assignment-panel.tsx -+++ b/src/components/graph/assignment-panel.tsx -@@ -18,6 +18,7 @@ export interface AssignmentPanelProps { - projectRoot: string; - issues: BeadIssue[]; - epicId?: string; -+ onIssueUpdated?: () => void; - } - - function hasAgentLabel(labels: string[]): boolean { -@@ -38,13 +39,17 @@ function truncateTitle(title: string, maxLength: number = 30): string { - } - - function getTemplateId(issue: BeadIssue): string | null { -+ const templateLabel = issue.labels?.find(l => l.startsWith('template:')); -+ if (templateLabel) { -+ return templateLabel.replace('template:', ''); -+ } - if (issue.metadata?.templateId && typeof issue.metadata.templateId === 'string') { - return issue.metadata.templateId; - } - return issue.templateId; - } - --export function AssignmentPanel({ selectedIssue, projectRoot, issues, epicId }: AssignmentPanelProps) { -+export function AssignmentPanel({ selectedIssue, projectRoot, issues, epicId, onIssueUpdated }: AssignmentPanelProps) { - const [inspectingArchetypeId, setInspectingArchetypeId] = useState(null); - const [inspectingTemplateId, setInspectingTemplateId] = useState(null); - const [showArchetypeList, setShowArchetypeList] = useState(false); -@@ -127,21 +132,28 @@ export function AssignmentPanel({ selectedIssue, projectRoot, issues, epicId }: - - const handleApplyTemplateToEpic = async (templateId: string, targetEpicId: string) => { - try { -+ const epic = issues.find(issue => issue.id === targetEpicId); -+ const currentLabels = epic?.labels || []; -+ const newLabels = [...currentLabels.filter(l => !l.startsWith('template:')), `template:${templateId}`]; -+ - const res = await fetch('/api/beads/update', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - projectRoot, - id: targetEpicId, -- metadata: { templateId } -+ labels: newLabels - }) - }); - - if (!res.ok) { -- throw new Error('Failed to apply template'); -+ const errorData = await res.json(); -+ console.error('Template API error:', errorData); -+ throw new Error(errorData?.error?.message || 'Failed to apply template'); - } - - console.log('Template applied successfully:', { templateId, epicId: targetEpicId }); -+ onIssueUpdated?.(); - } catch (error) { - console.error('Failed to apply template:', error); - } -@@ -149,21 +161,28 @@ export function AssignmentPanel({ selectedIssue, projectRoot, issues, epicId }: - - const handleRemoveTemplateFromEpic = async (targetEpicId: string) => { - try { -+ const epic = issues.find(issue => issue.id === targetEpicId); -+ const currentLabels = epic?.labels || []; -+ const newLabels = currentLabels.filter(l => !l.startsWith('template:')); -+ - const res = await fetch('/api/beads/update', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - projectRoot, - id: targetEpicId, -- metadata: { templateId: null } -+ labels: newLabels - }) - }); - - if (!res.ok) { -- throw new Error('Failed to remove template'); -+ const errorData = await res.json(); -+ console.error('Template API error:', errorData); -+ throw new Error(errorData?.error?.message || 'Failed to remove template'); - } - - console.log('Template removed successfully'); -+ onIssueUpdated?.(); - } catch (error) { - console.error('Failed to remove template:', error); - } -diff --git a/src/components/kanban/kanban-page.tsx b/src/components/kanban/kanban-page.tsx -index 8923ace..7e3540d 100644 ---- a/src/components/kanban/kanban-page.tsx -+++ b/src/components/kanban/kanban-page.tsx -@@ -107,6 +107,7 @@ export function KanbanPage({ - ); - const graphHref = useMemo(() => { - const params = new URLSearchParams(); -+ params.set('view', 'graph'); - if (projectScopeMode !== 'single') { - params.set('mode', projectScopeMode); - } -@@ -114,7 +115,7 @@ export function KanbanPage({ - params.set('project', projectScopeKey); - } - const query = params.toString(); -- return query ? `/graph?${query}` : '/graph'; -+ return query ? `/?${query}` : '/?view=graph'; - }, [projectScopeKey, projectScopeMode]); - const allowMutations = projectScopeMode === 'single'; - const blockedTree = useMemo( -diff --git a/src/components/sessions/conversation-drawer.tsx b/src/components/sessions/conversation-drawer.tsx -index ca002fd..ef013fe 100644 ---- a/src/components/sessions/conversation-drawer.tsx -+++ b/src/components/sessions/conversation-drawer.tsx -@@ -14,6 +14,47 @@ interface ThreadItem { - data: any; - } - -+export type CoordMessageAction = 'read' | 'ack'; -+ -+export function buildCoordMessageActionEvent(params: { -+ action: CoordMessageAction; -+ message: AgentMessage; -+ beadId: string; -+ projectRoot: string; -+ nowIso?: string; -+}): Record { -+ const now = params.nowIso ?? new Date().toISOString(); -+ const eventType = params.action === 'read' ? 'READ' : 'ACK'; -+ const compactNow = now.replace(/[-:.TZ]/g, ''); -+ return { -+ version: 'coord.v1', -+ kind: 'coord_event', -+ issue_id: params.beadId, -+ actor: params.message.to_agent, -+ timestamp: now, -+ data: { -+ event_type: eventType, -+ event_id: `evt_${eventType.toLowerCase()}_${compactNow}_${params.message.message_id}`, -+ event_ref: params.message.message_id, -+ project_root: params.projectRoot, -+ payload: {}, -+ }, -+ }; -+} -+ -+export function buildCommentMutationBody(params: { -+ projectRoot: string; -+ text: string; -+ actor?: string; -+}): Record { -+ const actor = params.actor?.trim(); -+ return { -+ projectRoot: params.projectRoot, -+ text: params.text, -+ ...(actor ? { actor } : {}), -+ }; -+} -+ - interface ConversationDrawerProps { - beadId: string | null; - bead: BeadIssue | null; -@@ -44,6 +85,7 @@ export function ConversationDrawer({ - const [thread, setThread] = useState([]); - const [loading, setLoading] = useState(false); - const [commentText, setCommentText] = useState(''); -+ const [commentActor, setCommentActor] = useState(''); - const [submitting, setSubmitting] = useState(false); - const [metrics, setMetrics] = useState(null); - const [showSummary, setShowSummary] = useState(false); -@@ -77,6 +119,16 @@ export function ConversationDrawer({ - } - }, [agentId, projectRoot]); - -+ useEffect(() => { -+ if (typeof window === 'undefined') return; -+ try { -+ const stored = window.localStorage.getItem('bb.humanActor'); -+ if (stored) setCommentActor(stored); -+ } catch { -+ // ignore storage failures -+ } -+ }, []); -+ - useEffect(() => { - if (open) { - if (beadId) fetchConversation({ silent: refreshTrigger > 0 }); -@@ -107,9 +159,16 @@ export function ConversationDrawer({ - const res = await fetch(`/api/sessions/${beadId}/comment`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, -- body: JSON.stringify({ projectRoot, text: commentText }) -+ body: JSON.stringify(buildCommentMutationBody({ projectRoot, text: commentText, actor: commentActor })), - }); - if (res.ok) { -+ try { -+ if (commentActor.trim()) { -+ window.localStorage.setItem('bb.humanActor', commentActor.trim()); -+ } -+ } catch { -+ // ignore storage failures -+ } - setCommentText(''); - await fetchConversation(); - onActivity?.(); -@@ -127,8 +186,16 @@ export function ConversationDrawer({ - if (!message) return; - - try { -- const res = await fetch(`/api/sessions/${beadId}/messages/${messageId}/${action}?agent=${encodeURIComponent(message.to_agent)}`, { -- method: 'POST' -+ const event = buildCoordMessageActionEvent({ -+ action, -+ message, -+ beadId, -+ projectRoot, -+ }); -+ const res = await fetch('/api/coord/events', { -+ method: 'POST', -+ headers: { 'Content-Type': 'application/json' }, -+ body: JSON.stringify({ projectRoot, event }), - }); - if (res.ok) { - await fetchConversation(); -@@ -259,6 +326,12 @@ export function ConversationDrawer({ - {beadId && !showSummary && ( -