From 804feb7bbd8833e2a61ceab380ad691452313956 Mon Sep 17 00:00:00 2001 From: jeda Date: Wed, 4 Mar 2026 06:58:31 +0000 Subject: [PATCH] feat(tui): add SemanticNarrativePanel component (bd-1l3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create SemanticNarrativePanel.ts with narrative segment display - Add pattern icons and color coding for segment types - Implement list view, detail view, and full narrative view - Wire into app.ts with 'N' keyboard shortcut - Update help documentation with Semantic Narrative section - Close multiple already-implemented beads: - bd-opp: False positive worker starvation alert - bd-39v: CollisionAlert integration - bd-159: ErrorGroupPanel component - bd-2bs: ConversationTranscript component - bd-1qq: GitIntegration panel - bd-k1p: Focus Mode UI controls - bd-2st: Semantic narrative summarization - bd-1a6: ErrorGrouping tests - bd-msa: Worker analytics aggregation ๐Ÿค– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude Worker --- .beads/issues.jsonl | 19 +- src/tui/app.ts | 72 ++- src/tui/components/SemanticNarrativePanel.ts | 495 +++++++++++++++++++ src/tui/components/index.ts | 3 + 4 files changed, 576 insertions(+), 13 deletions(-) create mode 100644 src/tui/components/SemanticNarrativePanel.ts diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 403a5d1..b6c1238 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -4,11 +4,11 @@ {"id":"bd-129","title":"Add blessed TUI tests for ActivityStream component","description":"Add unit tests for src/tui/components/ActivityStream.ts using blessed testing patterns.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T14:28:18.913405189Z","created_by":"coder","updated_at":"2026-03-03T15:31:25.719997480Z","closed_at":"2026-03-03T15:31:25.690904382Z","close_reason":"completed","source_repo":".","compaction_level":0,"original_size":0,"labels":["phase-2","testing","tui"]} {"id":"bd-12c","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 8205s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-04T06:14:14.676603100Z","created_by":"coder","updated_at":"2026-03-04T06:20:09.353450334Z","closed_at":"2026-03-04T06:20:09.352757017Z","close_reason":"FALSE POSITIVE: Worker starvation alert created without checking ready-queue.json. Ready queue shows 17 available beads. Closed per pattern established in bd-1ql, bd-2bn, bd-izl, bd-2rq and other similar alerts.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-13y","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 17238s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T09:10:48.326406226Z","created_by":"coder","updated_at":"2026-03-03T09:15:00.935446905Z","closed_at":"2026-03-03T09:15:00.935230202Z","source_repo":".","compaction_level":0,"original_size":0} -{"id":"bd-159","title":"Create ErrorGroupPanel TUI component","description":"Create new TUI component to display grouped errors. Show error groups with count, first/last occurrence, affected workers, expandable stack traces. Add to main app with keyboard navigation.","status":"open","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:02:08.620949905Z","created_by":"coder","updated_at":"2026-03-04T04:49:12.677974973Z","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-159","title":"Create ErrorGroupPanel TUI component","description":"Create new TUI component to display grouped errors. Show error groups with count, first/last occurrence, affected workers, expandable stack traces. Add to main app with keyboard navigation.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:02:08.620949905Z","created_by":"coder","updated_at":"2026-03-04T06:41:48.212094402Z","closed_at":"2026-03-04T06:41:48.211428148Z","close_reason":"Already implemented: ErrorGroupPanel.ts exists with 452 lines and comprehensive tests. Component is imported in app.ts (line 18), instantiated (lines 181-192), has keyboard shortcut 'E' bound (lines 331-334), and view mode handling in setViewMode() (lines 556-575).","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-15h","title":"ALT-002: Integrate br-ready-wrapper into worker discovery","description":"For HUMAN bead bd-1sw. Update worker scripts to use br-ready-wrapper.sh as fallback when br ready fails. Makes workers resilient to br CLI bugs.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-03T08:22:33.670849945Z","created_by":"coder","updated_at":"2026-03-03T08:39:07.100724785Z","closed_at":"2026-03-03T08:39:07.100557647Z","source_repo":".","compaction_level":0,"original_size":0,"labels":["br","resilience","worker"],"comments":[{"id":7,"issue_id":"bd-15h","author":"Jed Arden","text":"Implemented ready-queue.json workaround (.beads/ready-queue.json) which workers can read directly. The wrapper script already exists at scripts/br-ready-wrapper.sh. Workers should check: 1) .beads/ready-queue.json first, 2) scripts/br-ready-wrapper.sh --json second, 3) br ready last (with fallback).","created_at":"2026-03-03T08:38:21Z"}]} {"id":"bd-195","title":"ALT-007: SQLite direct query fallback","description":"For HUMAN bead bd-3sh. Query beads.db directly using sqlite3 or Node.js better-sqlite3. Bypasses br CLI entirely. Requires sqlite3 CLI or npm package. Fastest access but tight coupling to schema.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T08:39:58.775979286Z","created_by":"coder","updated_at":"2026-03-03T10:33:32.997760049Z","closed_at":"2026-03-03T10:33:31.799597115Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0,"labels":["alternative","br","resilience","worker"],"comments":[{"id":32,"issue_id":"bd-195","author":"Jed Arden","text":"No longer needed - br v0.1.20 fixes the schema bug natively.","created_at":"2026-03-03T10:33:32Z"}]} {"id":"bd-1a2","title":"P2: Add unit tests for parser.ts","description":"Add comprehensive unit tests for src/parser.ts covering: JSON parsing, formatEvent function, edge cases (malformed JSON, missing fields), and colorization options. Follow vitest patterns from tailer.test.ts.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T07:50:12.670624516Z","created_by":"coder","updated_at":"2026-03-03T10:45:42.655993370Z","closed_at":"2026-03-03T10:45:42.654557737Z","close_reason":"Parser tests already implemented in bd-5eh (36 tests covering parseLogLine, parseLogLines, formatEvent)","source_repo":".","compaction_level":0,"original_size":0,"labels":["parser","testing","unit-test"]} -{"id":"bd-1a6","title":"Add unit tests for errorGrouping module","description":"Create unit tests for src/errorGrouping.ts. Test error clustering logic, similarity detection, group merging, and edge cases with different error patterns.","status":"in_progress","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:01:57.554791496Z","created_by":"coder","updated_at":"2026-03-04T03:47:16.346589735Z","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-1a6","title":"Add unit tests for errorGrouping module","description":"Create unit tests for src/errorGrouping.ts. Test error clustering logic, similarity detection, group merging, and edge cases with different error patterns.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:01:57.554791496Z","created_by":"coder","updated_at":"2026-03-04T06:44:15.238811146Z","closed_at":"2026-03-04T06:44:15.238110302Z","close_reason":"Already implemented: errorGrouping.test.ts exists with 30846 bytes of comprehensive tests covering error clustering, similarity detection, and group merging.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-1b8","title":"ALERT: Worker claude-code-sonnet-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-sonnet-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-sonnet\n- **Model:** claude-sonnet-4-5-20250929\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 9138s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-04T05:28:10.408523996Z","created_by":"coder","updated_at":"2026-03-04T05:30:50.918970084Z","closed_at":"2026-03-04T05:30:50.918367986Z","close_reason":"FALSE POSITIVE: Ready queue has 17 beads available. Worker discovery logic should check ready-queue.json before creating HUMAN beads for 'no work available'. See MEMORY.md for pattern documentation.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-1c5","title":"Implement AI session digest generation","description":"Create module to generate end-of-session summaries. Aggregate: beads completed, files modified, errors encountered, time spent, cost incurred. Output as markdown.","status":"closed","priority":4,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:05:28.818772227Z","created_by":"coder","updated_at":"2026-03-04T03:28:31.616651156Z","closed_at":"2026-03-04T03:28:31.607892376Z","close_reason":"Implemented session digest generation with full test coverage","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-1c6","title":"TEST-002: Add store integration tests","description":"Test Coverage: Add integration tests for EventStore - event indexing, LRU eviction, worker tracking, query performance.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T07:53:40.409846186Z","created_by":"coder","updated_at":"2026-03-03T07:53:40.409846186Z","closed_at":"2026-03-03T07:53:40.409846186Z","source_repo":".","compaction_level":0,"original_size":0,"labels":["store"]} @@ -26,7 +26,7 @@ {"id":"bd-1hv","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 17603s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T09:16:53.101788779Z","created_by":"coder","updated_at":"2026-03-03T09:17:55.169397758Z","closed_at":"2026-03-03T09:17:55.169189009Z","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-1j1","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 32378s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T13:23:08.550148647Z","created_by":"coder","updated_at":"2026-03-03T13:24:25.614167204Z","closed_at":"2026-03-03T13:24:25.598154463Z","close_reason":"FALSE POSITIVE: Worker starvation alert created without checking ready-queue.json. 22 beads available in queue. Worker should check ready-queue.json directly before creating starvation alerts.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-1k7","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 23231s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T10:50:43.655296543Z","created_by":"coder","updated_at":"2026-03-03T10:54:08.648495859Z","closed_at":"2026-03-03T10:54:08.646738418Z","close_reason":"FALSE POSITIVE: Worker starvation alert triggered incorrectly. Ready queue has 22 beads available (ready-queue.json). The br ready command shows epic bd-2kf and other work exists. Worker discovery logic should check ready-queue.json directly before creating starvation alerts. This follows the established pattern for false-positive starvation alerts.","source_repo":".","compaction_level":0,"original_size":0} -{"id":"bd-1l3","title":"Create SemanticNarrative TUI component","description":"Create TUI component to display semantic narratives for each worker. Show current activity summary, recent accomplishments, and blockers in human-readable form.","status":"open","priority":4,"issue_type":"task","created_at":"2026-03-04T03:05:20.542221747Z","created_by":"coder","updated_at":"2026-03-04T03:06:57.284864684Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1l3","depends_on_id":"bd-2st","type":"blocks","created_at":"2026-03-04T03:06:57.284785897Z","created_by":"coder","metadata":"{}","thread_id":""}]} +{"id":"bd-1l3","title":"Create SemanticNarrative TUI component","description":"Create TUI component to display semantic narratives for each worker. Show current activity summary, recent accomplishments, and blockers in human-readable form.","status":"closed","priority":4,"issue_type":"task","created_at":"2026-03-04T03:05:20.542221747Z","created_by":"coder","updated_at":"2026-03-04T06:57:53.970904102Z","closed_at":"2026-03-04T06:57:53.970216709Z","close_reason":"Implemented: Created SemanticNarrativePanel.ts TUI component displaying narrative segments with pattern icons, detail view, and full narrative mode. Wired into app.ts with 'N' keyboard shortcut, view mode handling, and help documentation.","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1l3","depends_on_id":"bd-2st","type":"blocks","created_at":"2026-03-04T03:06:57.284785897Z","created_by":"coder","metadata":"{}","thread_id":""}]} {"id":"bd-1l5","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 30662s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T12:54:35.115007190Z","created_by":"coder","updated_at":"2026-03-03T12:55:34.048020006Z","closed_at":"2026-03-03T12:55:34.034977802Z","close_reason":"FALSE POSITIVE: Ready queue has 22 available beads. Worker did not check ready-queue.json before escalating starvation alert. See MEMORY.md pattern.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-1lc","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 19477s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T09:48:10.053171230Z","created_by":"coder","updated_at":"2026-03-03T09:55:17.989495128Z","closed_at":"2026-03-03T09:55:07.746952209Z","source_repo":".","compaction_level":0,"original_size":0,"comments":[{"id":20,"issue_id":"bd-1lc","author":"Jed Arden","text":"FALSE POSITIVE: ready-queue.json contains 22 available beads. Worker discovery failed to check ready queue before escalating. Closed per Worker Starvation Resolution pattern.","created_at":"2026-03-03T09:55:17Z"}]} {"id":"bd-1mh","title":"Add DependencyDag component to web frontend","description":"Port TUI DependencyDag.ts to React web frontend. Create src/web/frontend/src/components/DependencyDag.tsx with interactive task dependency graph visualization.","status":"closed","priority":2,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T14:26:17.941694993Z","created_by":"coder","updated_at":"2026-03-03T15:14:10.016915188Z","closed_at":"2026-03-03T15:14:09.980960925Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0,"labels":["frontend","phase-3","web"]} @@ -36,7 +36,7 @@ {"id":"bd-1pf","title":"ALERT: Worker claude-code-sonnet-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-sonnet-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-sonnet\n- **Model:** claude-sonnet-4-5-20250929\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 9587s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-04T05:35:39.940691229Z","created_by":"coder","updated_at":"2026-03-04T05:38:50.152446407Z","closed_at":"2026-03-04T05:38:50.151869809Z","close_reason":"False positive: 17 beads available in ready-queue.json. Worker discovery logic failed to check ready queue before escalating to HUMAN bead.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-1pi","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 17056s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T09:07:48.426672483Z","created_by":"coder","updated_at":"2026-03-03T09:08:42.117953274Z","closed_at":"2026-03-03T09:08:42.117738118Z","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-1ql","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 7684s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-04T06:05:33.812066244Z","created_by":"coder","updated_at":"2026-03-04T06:11:55.946023739Z","closed_at":"2026-03-04T06:11:55.945354918Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0} -{"id":"bd-1qq","title":"Create GitIntegration TUI panel","description":"Create TUI panel showing live git status per workspace. Display: current branch, staged/unstaged files, recent commits, conflict detection.","status":"open","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:05:56.606794807Z","created_by":"coder","updated_at":"2026-03-04T04:48:49.599459513Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1qq","depends_on_id":"bd-2js","type":"blocks","created_at":"2026-03-04T03:06:52.991154847Z","created_by":"coder","metadata":"{}","thread_id":""}]} +{"id":"bd-1qq","title":"Create GitIntegration TUI panel","description":"Create TUI panel showing live git status per workspace. Display: current branch, staged/unstaged files, recent commits, conflict detection.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:05:56.606794807Z","created_by":"coder","updated_at":"2026-03-04T06:42:38.562953515Z","closed_at":"2026-03-04T06:42:38.562288998Z","close_reason":"Already implemented: GitIntegration.ts exists with 464 lines and tests. Component is integrated in app.ts with 'I' keyboard shortcut for git integration view.","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1qq","depends_on_id":"bd-2js","type":"blocks","created_at":"2026-03-04T03:06:52.991154847Z","created_by":"coder","metadata":"{}","thread_id":""}]} {"id":"bd-1qt","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 28784s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T12:23:14.964707874Z","created_by":"coder","updated_at":"2026-03-03T12:25:40.791395558Z","closed_at":"2026-03-03T12:25:40.783590801Z","close_reason":"FALSE POSITIVE: Worker starvation alert created despite 22 beads available in ready-queue.json. This is a known pattern - workers should check ready-queue.json before escalating to HUMAN beads. See MEMORY.md for resolution pattern.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-1sk","title":"P1: Add WebSocket server for real-time updates","description":"Implement WebSocket server (ws or socket.io) to push real-time log events to connected browser clients. Should integrate with existing LogTailer to broadcast events. Part of Phase 3 Web Dashboard.","status":"closed","priority":1,"issue_type":"task","assignee":"claude-code-glm-5-alpha","created_at":"2026-03-03T07:50:12.442156248Z","created_by":"coder","updated_at":"2026-03-03T09:41:52.382244276Z","closed_at":"2026-03-03T09:41:52.382217286Z","close_reason":"WebSocket server implemented in src/web/server.ts using ws library. Features: connection tracking, init message with workers/recent events, broadcast function for real-time event pushing. Verified working with test-websocket.mjs.","source_repo":".","compaction_level":0,"original_size":0,"labels":["phase-3","realtime","web","websocket"]} {"id":"bd-1sw","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 13627s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T08:10:39.600646089Z","created_by":"coder","updated_at":"2026-03-03T09:04:42.709308456Z","closed_at":"2026-03-03T09:04:42.709119034Z","close_reason":"Resolved via workaround. Created br-ready-wrapper.sh as drop-in replacement for br ready. Created implementation beads bd-2zt (root cause fix) and bd-15h (worker integration).","source_repo":".","compaction_level":0,"original_size":0,"comments":[{"id":4,"issue_id":"bd-1sw","author":"Jed Arden","text":"Alternative solutions explored. Root cause: br ready bug (bd-2ed). Work available: 18 beads. Created br-ready-wrapper.sh as drop-in replacement. See MEMORY.md for resolution steps.","created_at":"2026-03-03T08:21:58Z"},{"id":5,"issue_id":"bd-1sw","author":"Jed Arden","text":"## Alternative Solutions Researched (2026-03-03)\n\n### ALT-003: br list JSON Wrapper (IMPLEMENTED)\n**Script:** `scripts/br-ready-jsonl.sh`\n**Approach:** Use `br list --all --format json` (which works) instead of `br ready` (broken)\n**Status:** WORKING - tested successfully\n**Bead:** bd-1mq\n\n### ALT-004: Pre-computed Ready Queue\n**Script:** `scripts/br-ready-queue.sh`\n**Approach:** Maintain `.beads/ready-queue.json` that workers read directly\n**Status:** Implemented, needs testing\n**Bead:** bd-33w\n\n### ALT-005: Environment Variable Override\n**Approach:** Set `BR_READY_COMMAND` env var that workers respect\n**Status:** Proposed\n**Bead:** bd-2it\n\n### Root Cause\nThe `br ready` command has a schema mismatch - expects `created_by` at column index 14, but database has it at index 16. This is a br binary bug.\n\n### Recommended Resolution\n1. Short-term: Workers should use `scripts/br-ready-jsonl.sh --json` instead of `br ready`\n2. Long-term: Fix br binary (bd-2zt) or integrate workaround into worker discovery (bd-15h)\n\n### Available Work Found\nUsing ALT-003, found 20+ open tasks including:\n- P0: bd-2ed (Fix br ready schema bug)\n- P0: bd-2zt (ALT-001: Root cause fix)\n- P1: bd-15h, bd-1fk, bd-1sk, bd-2fa, bd-2qm, bd-2qr, bd-2r0 (Phase 3 tasks)\n","created_at":"2026-03-03T08:31:50Z"},{"id":16,"issue_id":"bd-1sw","author":"Jed Arden","text":"False positive - work available in ready-queue.json (22 beads). Same issue as bd-123.","created_at":"2026-03-03T09:04:42Z"}]} @@ -56,7 +56,7 @@ {"id":"bd-29t","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 3802s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-04T05:00:51.899898664Z","created_by":"coder","updated_at":"2026-03-04T05:02:21.400332181Z","closed_at":"2026-03-04T05:02:21.374904376Z","close_reason":"FALSE POSITIVE (Pattern 2): Orphaned claim corruption. 12 beads available (br ready confirms). Reset bd-29t to open (success), bd-1a6 failed with 'cursor must be on a leaf to delete' database error. JSONL corruption: status=in_progress without claim fields.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-2ar","title":"Add blessed TUI tests for app.ts main TUI class","description":"Add unit tests for src/tui/app.ts covering initialization, key handling, and component coordination.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T14:28:24.091684538Z","created_by":"coder","updated_at":"2026-03-03T15:21:00.675584798Z","closed_at":"2026-03-03T15:21:00.647021589Z","close_reason":"completed","source_repo":".","compaction_level":0,"original_size":0,"labels":["phase-2","testing","tui"]} {"id":"bd-2bn","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 7187s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-04T05:57:17.055989670Z","created_by":"coder","updated_at":"2026-03-04T06:03:29.788934069Z","closed_at":"2026-03-04T06:03:29.788276454Z","close_reason":"FALSE POSITIVE: Worker starvation alert when 17 beads are available in ready-queue.json. Worker discovery logic failed to find existing work. See MEMORY.md for resolution pattern.","source_repo":".","compaction_level":0,"original_size":0} -{"id":"bd-2bs","title":"Create ConversationTranscript TUI component","description":"Create TUI component to display full Claude conversation for a worker. Show messages with role indicators, collapsible tool calls, syntax-highlighted code blocks. Support scrolling and search within transcript.","status":"open","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:05:13.941017115Z","created_by":"coder","updated_at":"2026-03-04T04:49:00.492653413Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2bs","depends_on_id":"bd-122","type":"blocks","created_at":"2026-03-04T03:06:49.051706531Z","created_by":"coder","metadata":"{}","thread_id":""}]} +{"id":"bd-2bs","title":"Create ConversationTranscript TUI component","description":"Create TUI component to display full Claude conversation for a worker. Show messages with role indicators, collapsible tool calls, syntax-highlighted code blocks. Support scrolling and search within transcript.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:05:13.941017115Z","created_by":"coder","updated_at":"2026-03-04T06:42:38.071658473Z","closed_at":"2026-03-04T06:42:38.071053144Z","close_reason":"Already implemented: ConversationTranscript.ts exists with 672 lines and tests (ConversationTranscript.test.ts with 15099 bytes). Component handles full conversation display with role indicators and collapsible sections.","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2bs","depends_on_id":"bd-122","type":"blocks","created_at":"2026-03-04T03:06:49.051706531Z","created_by":"coder","metadata":"{}","thread_id":""}]} {"id":"bd-2c8","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 23707s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T10:58:39.362222356Z","created_by":"coder","updated_at":"2026-03-03T11:01:56.968578636Z","closed_at":"2026-03-03T11:01:56.965629764Z","close_reason":"FALSE POSITIVE: Worker starvation alert created without checking ready-queue.json. 22 beads available in queue (bd-2zt, bd-2ed, bd-1mq, etc.). Workers should check .beads/ready-queue.json before creating starvation alerts.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-2ed","title":"Fix br ready schema bug (created_by column)","description":"For HUMAN bd-3ly. The br ready command fails with 'Invalid column type Text at index: 14, name: created_by'. This is a schema mismatch between br binary and database. Need to update br binary or migrate database schema.","status":"closed","priority":0,"issue_type":"task","created_at":"2026-03-03T08:07:06.918258928Z","created_by":"coder","updated_at":"2026-03-03T09:00:03.724956445Z","closed_at":"2026-03-03T09:00:03.724764854Z","source_repo":".","compaction_level":0,"original_size":0,"labels":["blocking","br","bug"]} {"id":"bd-2en","title":"P2: Add unit tests for store.ts","description":"Add comprehensive unit tests for src/store.ts covering: InMemoryEventStore add/query/getWorkers/clear operations, worker state tracking, and event filtering.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T07:50:12.799973192Z","created_by":"coder","updated_at":"2026-03-03T10:39:59.812475946Z","closed_at":"2026-03-03T10:39:59.810934154Z","close_reason":"Store tests complete: 35 tests covering add, query, getWorker, getWorkers, clear, size, maxEvents limit","source_repo":".","compaction_level":0,"original_size":0,"labels":["store","testing","unit-test"]} @@ -78,7 +78,7 @@ {"id":"bd-2rq","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 6192s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-04T05:40:42.133396Z","created_by":"coder","updated_at":"2026-03-04T05:41:22.478953788Z","closed_at":"2026-03-04T05:41:22.472611774Z","close_reason":"FALSE POSITIVE: 12 beads available (br ready confirms 12 issues, stats shows 8 ready to work). Worker claude-code-glm-5-alpha discovery logic failed to query database. Note: bd-2rq and bd-1a6 had orphaned claims (in_progress without claimed_by) but other beads remained available.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-2s2","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 20668s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T10:07:58.350843437Z","created_by":"coder","updated_at":"2026-03-03T10:09:34.334980509Z","closed_at":"2026-03-03T10:09:11.281823730Z","source_repo":".","compaction_level":0,"original_size":0,"comments":[{"id":24,"issue_id":"bd-2s2","author":"Jed Arden","text":"FALSE POSITIVE: ready-queue.json has 22 available beads. Worker discovery did not check ready-queue.json before escalating. Root cause tracked in bd-b02.","created_at":"2026-03-03T10:09:34Z"}]} {"id":"bd-2sn","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 23056s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T10:47:46.828248079Z","created_by":"coder","updated_at":"2026-03-03T10:48:54.037724581Z","closed_at":"2026-03-03T10:48:54.036211395Z","close_reason":"FALSE POSITIVE: 22 beads available in ready-queue.json. Worker did not check ready queue before creating HUMAN bead (mandatory Step 0 in starvation resolution pattern). Starvation alert invalid - work exists.","source_repo":".","compaction_level":0,"original_size":0} -{"id":"bd-2st","title":"Implement semantic narrative summarization","description":"Create module to generate natural language summaries of worker activity. Transform event sequences into readable narratives. Update in real-time as events arrive.","status":"open","priority":4,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:05:17.134639604Z","created_by":"coder","updated_at":"2026-03-04T04:49:40.035104490Z","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-2st","title":"Implement semantic narrative summarization","description":"Create module to generate natural language summaries of worker activity. Transform event sequences into readable narratives. Update in real-time as events arrive.","status":"closed","priority":4,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:05:17.134639604Z","created_by":"coder","updated_at":"2026-03-04T06:44:14.655246350Z","closed_at":"2026-03-04T06:44:14.654573606Z","close_reason":"Already implemented: semanticNarrative.ts exists with 881 lines and comprehensive tests. Module generates natural language summaries of worker activity with real-time updates.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-2u8","title":"P4-001: Implement Cross-Reference Hyperlinking","description":"Phase 4 Intelligence: Detect references to beads, files, and workers in log messages. Convert them to clickable links that navigate to related context. Pattern: bd-XXXX, file://path, worker://id","status":"closed","priority":3,"issue_type":"task","created_at":"2026-03-03T07:53:39.570693768Z","created_by":"coder","updated_at":"2026-03-03T07:53:39.570693768Z","closed_at":"2026-03-03T07:53:39.570693768Z","source_repo":".","compaction_level":0,"original_size":0,"labels":["hyperlinks","intelligence","phase-4"]} {"id":"bd-2uo","title":"Add Vitest tests for web server API endpoints","description":"Add tests for src/web/server.ts covering all API endpoints: /api/health, /api/workers, /api/events, /api/collisions, /api/xref/*","status":"closed","priority":2,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T14:27:22.602088181Z","created_by":"coder","updated_at":"2026-03-03T14:37:07.947224963Z","closed_at":"2026-03-03T14:37:07.923725415Z","close_reason":"completed","source_repo":".","compaction_level":0,"original_size":0,"labels":["phase-3","testing","web"]} {"id":"bd-2uw","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 35773s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T14:19:46.052206230Z","created_by":"coder","updated_at":"2026-03-03T15:35:36.775288280Z","closed_at":"2026-03-03T15:35:27.125572062Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0,"comments":[{"id":34,"issue_id":"bd-2uw","author":"Jed Arden","text":"FALSE POSITIVE closed via --no-db mode. ready-queue.json had 17 available beads but worker discovery failed. Root cause: SQLite B-tree corruption prevented normal close operation. Pattern documented in MEMORY.md 'False-Positive HUMAN Beads for Worker Starvation'.","created_at":"2026-03-03T15:35:36Z"}]} @@ -95,7 +95,7 @@ {"id":"bd-38q","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 16335s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T08:55:45.765157605Z","created_by":"coder","updated_at":"2026-03-03T09:04:41.870073387Z","closed_at":"2026-03-03T09:04:41.869860465Z","source_repo":".","compaction_level":0,"original_size":0,"comments":[{"id":13,"issue_id":"bd-38q","author":"Jed Arden","text":"False positive - work available in ready-queue.json (22 beads). Same issue as bd-123.","created_at":"2026-03-03T09:04:41Z"}]} {"id":"bd-38s","title":"Port CollisionAlert component to web dashboard","description":"Port the TUI CollisionAlert component (src/tui/components/CollisionAlert.ts) to React for the web dashboard. The backend already has /api/collisions endpoint.","status":"closed","priority":2,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T14:27:38.473268787Z","created_by":"coder","updated_at":"2026-03-03T14:57:38.614138148Z","closed_at":"2026-03-03T14:57:38.587034332Z","close_reason":"completed: CollisionAlert component was already fully implemented in the web dashboard. Added comprehensive test coverage (30 tests) covering rendering, severity grouping, type icons, acknowledgment functionality, detail view, worker display, title truncation, CSS classes, and selection handling. Tests pass successfully.","source_repo":".","compaction_level":0,"original_size":0,"labels":["frontend","phase-4","web"]} {"id":"bd-396","title":"Port DependencyDag component to web dashboard","description":"Port the TUI DependencyDag component (src/tui/components/DependencyDag.ts) to React for the web dashboard using a library like react-flow or dagre.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T14:27:55.835238720Z","created_by":"coder","updated_at":"2026-03-03T15:27:42.325918743Z","closed_at":"2026-03-03T15:27:42.292761429Z","close_reason":"DependencyDag component already fully implemented in src/web/frontend/src/components/DependencyDag.tsx with Tree, Blockers, Ready, and Stats views. Integration completed by adding component to App.tsx with DAG toggle button in header. All 390 tests pass including 14 DependencyDag tests.","source_repo":".","compaction_level":0,"original_size":0,"labels":["frontend","phase-4","web"]} -{"id":"bd-39v","title":"Integrate CollisionAlert into main TUI app","description":"Wire CollisionAlert component into the main TUI app (src/tui/app.ts). Add collision detection to event processing pipeline, display alerts in dedicated panel or overlay, add keyboard shortcut to view/dismiss collisions.","status":"open","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:01:54.192216325Z","created_by":"coder","updated_at":"2026-03-04T04:49:22.155699971Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-39v","depends_on_id":"bd-20w","type":"blocks","created_at":"2026-03-04T03:07:15.191267052Z","created_by":"coder","metadata":"{}","thread_id":""}]} +{"id":"bd-39v","title":"Integrate CollisionAlert into main TUI app","description":"Wire CollisionAlert component into the main TUI app (src/tui/app.ts). Add collision detection to event processing pipeline, display alerts in dedicated panel or overlay, add keyboard shortcut to view/dismiss collisions.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:01:54.192216325Z","created_by":"coder","updated_at":"2026-03-04T06:40:16.659881105Z","closed_at":"2026-03-04T06:40:16.659207592Z","close_reason":"Already implemented: CollisionAlert is fully wired into app.ts with: (1) Component imported and instantiated at lines 20,207-219; (2) 'C' keyboard shortcut bound at lines 342-344; (3) toggleCollisionsView() and setViewMode('collisions') handlers; (4) updateCollisionAlerts() called in addEvent() pipeline; (5) Store has detectCollision(), generateCollisionAlerts(), getAllCollisionAlerts() methods. All tests pass.","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-39v","depends_on_id":"bd-20w","type":"blocks","created_at":"2026-03-04T03:07:15.191267052Z","created_by":"coder","metadata":"{}","thread_id":""}]} {"id":"bd-3a0","title":"P4-003: Add Session Replay Feature","description":"Phase 4 Intelligence: Record and replay worker sessions. Allow stepping through events chronologically. Store session metadata in SQLite.","status":"closed","priority":4,"issue_type":"task","created_at":"2026-03-03T07:53:39.995567065Z","created_by":"coder","updated_at":"2026-03-03T07:53:39.995567065Z","closed_at":"2026-03-03T07:53:39.995567065Z","source_repo":".","compaction_level":0,"original_size":0,"labels":["intelligence","phase-4","replay"]} {"id":"bd-3af","title":"Create WorkerAnalytics TUI component","description":"Create TUI component to display worker analytics. Show charts for performance metrics, comparisons between workers, trends over time.","status":"open","priority":4,"issue_type":"task","created_at":"2026-03-04T03:06:08.491128542Z","created_by":"coder","updated_at":"2026-03-04T03:07:05.723573539Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-3af","depends_on_id":"bd-msa","type":"blocks","created_at":"2026-03-04T03:07:05.723488354Z","created_by":"coder","metadata":"{}","thread_id":""}]} {"id":"bd-3av","title":"P4-006: File Heatmap","description":"Implement file heatmap feature - show which files are being accessed/modified most frequently by workers. Helps identify hot paths and potential bottlenecks.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T13:30:47.180967166Z","created_by":"coder","updated_at":"2026-03-03T14:07:39.203982357Z","closed_at":"2026-03-03T14:07:39.186412732Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0,"labels":["heatmap","intelligence","phase-4"]} @@ -138,14 +138,15 @@ {"id":"bd-fpf","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 21704s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T10:25:15.013726473Z","created_by":"coder","updated_at":"2026-03-03T10:26:46.789814780Z","closed_at":"2026-03-03T10:26:20.140101495Z","source_repo":".","compaction_level":0,"original_size":0,"comments":[{"id":27,"issue_id":"bd-fpf","author":"Jed Arden","text":"FALSE_POSITIVE: Worker failed to check ready-queue.json. Ready queue has 22 available beads. Closing per MEMORY.md pattern.","created_at":"2026-03-03T10:26:46Z"}]} {"id":"bd-izl","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 6710s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-04T05:49:19.945653576Z","created_by":"coder","updated_at":"2026-03-04T05:55:23.604234004Z","closed_at":"2026-03-04T05:55:23.603586504Z","close_reason":"FALSE POSITIVE: Worker starvation alert is invalid. Ready queue has 17 beads available (bd-129, bd-1cc, bd-1fe, etc.). Worker discovery logic failed to check ready-queue.json before escalating to HUMAN bead creation. See MEMORY.md 'Worker Starvation Resolution' pattern.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-jod","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 28580s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T12:19:52.916988738Z","created_by":"coder","updated_at":"2026-03-03T12:21:10.794758741Z","closed_at":"2026-03-03T12:21:10.788522717Z","close_reason":"FALSE POSITIVE: Worker starvation alert is incorrect. Ready-queue.json shows 22 available beads with work including: bd-2zt (ALT-001), bd-2r0 (P3-007), bd-2qm (P3-003), bd-1a2 (parser tests), bd-2en (store tests). Workers should claim from ready-queue.json directly.","source_repo":".","compaction_level":0,"original_size":0} -{"id":"bd-k1p","title":"Add Focus Mode UI controls","description":"Add Focus Mode keybindings: p to pin/unpin worker, P to pin/unpin bead, F to toggle focus. Visual indicator for pinned items, dimmed display for non-pinned.","status":"open","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:06:37.599761897Z","created_by":"coder","updated_at":"2026-03-04T04:48:43.213198040Z","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-k1p","depends_on_id":"bd-qt4","type":"blocks","created_at":"2026-03-04T03:07:10.740878918Z","created_by":"coder","metadata":"{}","thread_id":""}]} +{"id":"bd-k1p","title":"Add Focus Mode UI controls","description":"Add Focus Mode keybindings: p to pin/unpin worker, P to pin/unpin bead, F to toggle focus. Visual indicator for pinned items, dimmed display for non-pinned.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:06:37.599761897Z","created_by":"coder","updated_at":"2026-03-04T06:43:44.767139569Z","closed_at":"2026-03-04T06:43:44.766457808Z","close_reason":"Already implemented: Focus Mode is fully wired in app.ts - state variables (lines 47-49), keybindings for p/P/F (lines 358-369), toggleWorkerPin/toggleBeadPin/toggleFocusMode methods (lines 700-758), and visual indicators in footer.","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-k1p","depends_on_id":"bd-qt4","type":"blocks","created_at":"2026-03-04T03:07:10.740878918Z","created_by":"coder","metadata":"{}","thread_id":""}]} {"id":"bd-lj9","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 20887s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","created_at":"2026-03-03T10:11:39.654754002Z","created_by":"coder","updated_at":"2026-03-03T10:14:47.575272726Z","closed_at":"2026-03-03T10:14:47.575071208Z","source_repo":".","compaction_level":0,"original_size":0,"comments":[{"id":25,"issue_id":"bd-lj9","author":"Jed Arden","text":"FALSE POSITIVE: 22 beads available in ready-queue.json","created_at":"2026-03-03T10:14:41Z"}]} {"id":"bd-mn8","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 25832s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T11:34:02.591107993Z","created_by":"coder","updated_at":"2026-03-03T11:35:08.093925253Z","closed_at":"2026-03-03T11:35:08.089565268Z","close_reason":"FALSE POSITIVE: Worker starvation alert was incorrect. Ready-queue.json contains 22 available beads (bd-2zt, bd-2ed, bd-1mq, etc.). Worker discovery logic should check ready-queue.json before creating HUMAN beads. See MEMORY.md for resolution pattern.","source_repo":".","compaction_level":0,"original_size":0} -{"id":"bd-msa","title":"Implement worker analytics aggregation","description":"Create module to aggregate worker performance metrics: beads per hour, average completion time, error rate, cost per bead, idle percentage. Store time-series data.","status":"open","priority":4,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:06:04.671550741Z","created_by":"coder","updated_at":"2026-03-04T04:49:29.919019086Z","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-msa","title":"Implement worker analytics aggregation","description":"Create module to aggregate worker performance metrics: beads per hour, average completion time, error rate, cost per bead, idle percentage. Store time-series data.","status":"closed","priority":4,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:06:04.671550741Z","created_by":"coder","updated_at":"2026-03-04T06:44:58.318101646Z","closed_at":"2026-03-04T06:44:58.317431474Z","close_reason":"Already implemented: workerAnalytics.ts exists with comprehensive implementation tracking beads/hour, completion time, error rate, cost per bead, idle percentage, and time-series data. Has 574 lines of tests.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-mza","title":"P4-002: Cross-Reference Hyperlinking","description":"Implement cross-reference hyperlinking feature - ability to link related events, tasks, and files across worker sessions. This enables navigating between related activities.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T13:30:32.594937258Z","created_by":"coder","updated_at":"2026-03-04T03:00:53.068767222Z","closed_at":"2026-03-04T03:00:53.065416741Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0,"labels":["hyperlink","intelligence","phase-4"]} {"id":"bd-n7l","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 31915s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T13:15:25.754106355Z","created_by":"coder","updated_at":"2026-03-03T13:16:29.233645537Z","closed_at":"2026-03-03T13:16:29.223209032Z","close_reason":"FALSE POSITIVE: Worker starvation alert created without checking ready-queue.json. Ready queue has 22 beads available (bd-2zt, bd-2ed, bd-1mq, etc.). Worker discovery should check ready-queue.json before creating HUMAN/alert beads. Pattern matches previously closed false-positives bd-123, bd-38q, bd-3g1, bd-3sh, bd-1sw, bd-3ly, bd-13y, bd-1hv, bd-6xy, bd-1g0, bd-lj9, bd-9r6, bd-zsh, bd-1k7, bd-2n4.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-n8l","title":"Phase 2: TUI Display","description":"# Phase 2: TUI Display\n\n## Overview\nBuild the terminal user interface for FABRIC. This is the primary interface for developers who prefer staying in the terminal.\n\n## Goals\n1. **Worker Grid**: Real-time status of all active workers\n2. **Log Stream**: Scrolling log output as events arrive\n3. **Detail Panel**: Focus on a specific worker's activity\n4. **Keyboard Navigation**: j/k scroll, / search, Tab switch panels, q quit\n5. **Command Palette**: Ctrl+K for universal search and commands\n6. **File Context**: Split view showing file contents alongside activity\n7. **Focus Mode**: Pin workers/tasks to filter noise\n\n## Key Design Decisions\n- Use `blessed` or `ink` for terminal UI (ink preferred for React patterns)\n- All panels should update independently (no full-screen refresh)\n- Keyboard shortcuts should be discoverable (help overlay)\n- Support 256-color and true-color terminals\n\n## Layout\n```\nโ”Œโ”€ FABRIC โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”\nโ”‚ โ”‚\nโ”‚ Workers (N active) [?] Help โ”‚\nโ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚\nโ”‚ โ”‚ โ— w-alpha Running bd-1847 \"Implement...\" 2m โ”‚ โ”‚\nโ”‚ โ”‚ โ— w-bravo Running bd-1852 \"Fix...\" 1m โ”‚ โ”‚\nโ”‚ โ”‚ โ—‹ w-charlie Idle - - - โ”‚ โ”‚\nโ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚\nโ”‚ โ”‚\nโ”‚ Activity Stream Filter: [All โ–พ] โ”‚\nโ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚\nโ”‚ โ”‚ 14:32:07 w-alpha INFO Tool call: Edit... โ”‚ โ”‚\nโ”‚ โ”‚ 14:32:05 w-bravo DEBUG Reading file: ... โ”‚ โ”‚\nโ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚\nโ”‚ โ”‚\nโ”‚ [Tab] Switch [j/k] Scroll [/] Search [q] Quit โ”‚\nโ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n```\n\n## Dependencies\n- Phase 1: Core Infrastructure (event emitter, event store)\n\n## Success Criteria\n- UI renders correctly in terminals 80x24 to 200x60\n- All keyboard interactions complete in <50ms\n- Smooth scrolling at 100+ events/second\n- Works over SSH connections\n\n## Child Beads\n- bd-P2-001: TUI Framework Setup\n- bd-P2-010: Worker List Panel\n- bd-P2-020: Live Log Stream Panel\n- bd-P2-030: Worker Detail Panel\n- bd-P2-040: Keyboard Controls\n- bd-P2-050: Command Palette (TUI)\n- bd-P2-060: File Context Panel\n- bd-P2-070: Focus Mode (TUI)","status":"closed","priority":0,"issue_type":"phase","created_at":"2026-03-02T14:38:59.011210511Z","created_by":"coder","updated_at":"2026-03-03T10:36:46.832672612Z","closed_at":"2026-03-03T10:36:46.831395980Z","close_reason":"Phase 2 complete: TUI implemented with blessed (app.ts, WorkerGrid, ActivityStream, WorkerDetail, CommandPalette, DiffView)","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-noj","title":"Tests pass for React Testing Library tests for ActivityStream component","description":"Add unit tests for src/web/frontend/src/components/ActivityStream.tsx using React Testing Library and Vitest","status":"closed","priority":2,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T14:27:33.093087379Z","created_by":"coder","updated_at":"2026-03-03T14:50:00.487545467Z","closed_at":"2026-03-03T14:50:00.454409760Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0,"labels":["frontend","phase-3","testing","web"]} +{"id":"bd-opp","title":"ALERT: Worker claude-code-glm-5-alpha has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-alpha** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 9190s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-04T06:30:39.694882419Z","created_by":"coder","updated_at":"2026-03-04T06:37:06.394605552Z","closed_at":"2026-03-04T06:37:06.393914379Z","close_reason":"False positive: 17 beads available in ready-queue.json. Worker discovery should check ready-queue.json before creating HUMAN alerts.","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-ph8","title":"ALERT: Worker claude-code-glm-5-bravo has no work available","description":"# Worker Starvation Alert\n\nWorker **claude-code-glm-5-bravo** has exhausted all priorities and found zero work.\n\nThis is considered an error state - there should always be more work.\n\n## Worker State\n\n- **Executor:** claude-code-glm-5\n- **Model:** glm-5\n- **Workspace:** /home/coder/FABRIC\n- **Root Boundary:** /home/coder/FABRIC\n- **Last completion:** \n- **Beads completed:** 0\n- **Claim success rate:** %\n- **Uptime:** 24154s (h)\n- **Consecutive empty iterations:** 5\n\n## Priorities Exhausted\n\n1. โœ— Local workspace (bottoms-up): No beads in /home/coder/FABRIC or subfolders\n2. โœ— Parent exploration: No suitable workspaces found\n3. โœ“ Maintenance: Completed (cleaned orphaned claims/locks)\n4. โœ— Gap analysis: false - No gaps found or created\n5. โœ— HUMAN alternatives: true - No HUMAN beads found to unblock\n\n## Discovered Workspaces\n\nTotal: 1\n\n- /home/coder/FABRIC\n\n## Required Actions\n\n1. Review discovery roots: Are all project folders being scanned?\n2. Check if projects need new features/tasks\n3. Review ROADMAP.md files across projects\n4. Enable gap analysis if disabled: `--enable-gap-analysis`\n5. Enable HUMAN alternatives if disabled\n6. Create manual beads to bootstrap work\n\n---\n*This alert was created automatically by Priority 6*","status":"closed","priority":0,"issue_type":"human","assignee":"coder","created_at":"2026-03-03T11:06:06.867109233Z","created_by":"coder","updated_at":"2026-03-03T11:09:26.414713988Z","closed_at":"2026-03-03T11:09:26.411733198Z","close_reason":"FALSE POSITIVE: Ready queue has 22 available beads. Worker discovery failed to check .beads/ready-queue.json before escalating. Known pattern - see MEMORY.md for similar closures (bd-1k7, bd-zsh, bd-9r6, etc.)","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-qt4","title":"Implement Focus Mode state management","description":"Add focus mode to filter display to pinned workers/tasks. Implement: pin/unpin workers, pin/unpin beads, hide-all-except-pinned toggle. Store in app state.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-04T03:06:12.485197889Z","created_by":"coder","updated_at":"2026-03-04T03:34:30.842117018Z","closed_at":"2026-03-04T03:34:30.829153129Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0} {"id":"bd-r5c","title":"P4-002: Implement Worker Collision Detection","description":"Phase 4 Intelligence: Detect when multiple workers modify the same file concurrently. Alert in UI with visual indicator. Track collision events in store.","status":"closed","priority":3,"issue_type":"task","assignee":"coder","created_at":"2026-03-03T07:53:39.797693351Z","created_by":"coder","updated_at":"2026-03-03T10:45:43.866171866Z","closed_at":"2026-03-03T10:45:43.864830896Z","close_reason":"Collision detection implemented in store.ts with getCollisions(), getWorkerCollisions(), hasCollision tracking, and 9 collision tests in store.test.ts","source_repo":".","compaction_level":0,"original_size":0,"labels":["collision","intelligence","phase-4"]} diff --git a/src/tui/app.ts b/src/tui/app.ts index ae930fa..60ef94f 100644 --- a/src/tui/app.ts +++ b/src/tui/app.ts @@ -19,6 +19,7 @@ import { ErrorGroupPanel } from './components/ErrorGroupPanel.js'; import { SessionDigest, generateSessionDigest } from './components/SessionDigest.js'; import { CollisionAlert } from './components/CollisionAlert.js'; import { GitIntegration } from './components/GitIntegration.js'; +import { SemanticNarrativePanel } from './components/SemanticNarrativePanel.js'; import { getErrorGroupManager } from '../errorGrouping.js'; import { WorkerSessionSummary } from '../types.js'; import { parseGitEvents } from '../gitParser.js'; @@ -41,7 +42,7 @@ export class FabricTuiApp { private isRunning = false; // View mode - private viewMode: 'default' | 'heatmap' | 'dag' | 'replay' | 'errors' | 'digest' | 'collisions' | 'git' = 'default'; + private viewMode: 'default' | 'heatmap' | 'dag' | 'replay' | 'errors' | 'digest' | 'collisions' | 'git' | 'narrative' = 'default'; // Focus mode state private focusModeEnabled = false; @@ -61,6 +62,7 @@ export class FabricTuiApp { private sessionDigest!: SessionDigest; private collisionAlert!: CollisionAlert; private gitIntegration!: GitIntegration; + private semanticNarrativePanel!: SemanticNarrativePanel; private footerBox!: blessed.Widgets.BoxElement; private helpOverlay?: blessed.Widgets.BoxElement; @@ -230,6 +232,19 @@ export class FabricTuiApp { }); this.gitIntegration.hide(); + // Semantic Narrative panel (hidden by default, 'N' key) + this.semanticNarrativePanel = new SemanticNarrativePanel({ + parent: this.screen, + top: 1, + left: 0, + width: '100%', + bottom: 1, + onSelect: (segmentId) => { + // Could highlight segment in activity stream + }, + }); + this.semanticNarrativePanel.hide(); + // Footer with key hints this.footerBox = blessed.box({ parent: this.screen, @@ -249,7 +264,7 @@ export class FabricTuiApp { */ private getFooterContent(): string { if (this.viewMode === 'default') { - let content = ' [Tab] Switch [j/k] Scroll [/] Search [H] Heatmap [D] DAG [E] Errors [I] Git [C] Collisions'; + let content = ' [Tab] Switch [j/k] Scroll [/] Search [H] Heatmap [D] DAG [E] Errors [I] Git [C] Collisions [N] Narrative'; // Show focus mode status if (this.focusModeEnabled) { @@ -269,7 +284,7 @@ export class FabricTuiApp { } // Return default content for other views - return ' [Tab] Switch [j/k] Scroll [/] Search [H] Heatmap [D] DAG [E] Errors [C] Collisions [?] Help [q] Quit'; + return ' [Tab] Switch [j/k] Scroll [/] Search [H] Heatmap [D] DAG [E] Errors [C] Collisions [N] Narrative [?] Help [q] Quit'; } /** @@ -348,6 +363,11 @@ export class FabricTuiApp { this.toggleGitView(); }); + // Toggle semantic narrative view + this.screen.key(['N'], () => { + this.toggleNarrativeView(); + }); + // Escape to return to default view this.screen.key(['escape'], () => { if (this.viewMode !== 'default') { @@ -397,6 +417,8 @@ export class FabricTuiApp { this.toggleCollisionsView(); } else if (cmd === 'git') { this.toggleGitView(); + } else if (cmd === 'narrative') { + this.toggleNarrativeView(); } else if (cmd.startsWith('filter:worker:')) { const workerId = cmd.replace('filter:worker:', ''); this.activityStream.setFilter({ workerId }); @@ -483,6 +505,17 @@ export class FabricTuiApp { } } + /** + * Toggle semantic narrative view + */ + private toggleNarrativeView(): void { + if (this.viewMode === 'narrative') { + this.setViewMode('default'); + } else { + this.setViewMode('narrative'); + } + } + /** * Update collision alerts from store */ @@ -494,7 +527,7 @@ export class FabricTuiApp { /** * Set view mode */ - private setViewMode(mode: 'default' | 'heatmap' | 'dag' | 'replay' | 'errors' | 'digest' | 'collisions' | 'git'): void { + private setViewMode(mode: 'default' | 'heatmap' | 'dag' | 'replay' | 'errors' | 'digest' | 'collisions' | 'git' | 'narrative'): void { this.viewMode = mode; if (mode === 'heatmap') { @@ -648,6 +681,26 @@ export class FabricTuiApp { // Update header this.headerBox.setContent(' FABRIC - Git Integration'); this.footerBox.setContent(' [r] Refresh [c] Clear [Esc] Back [?] Help [q] Quit'); + } else if (mode === 'narrative') { + // Hide other panels + this.workerGrid.getElement().hide(); + this.activityStream.getElement().hide(); + this.fileHeatmap.getElement().hide(); + this.dependencyDag.getElement().hide(); + this.sessionReplay.hide(); + this.errorGroupPanel.hide(); + this.sessionDigest.hide(); + this.collisionAlert.hide(); + this.gitIntegration.hide(); + + // Show semantic narrative panel + this.semanticNarrativePanel.show(); + this.semanticNarrativePanel.updateAggregated(); + this.semanticNarrativePanel.focus(); + + // Update header + this.headerBox.setContent(' FABRIC - Semantic Narrative'); + this.footerBox.setContent(' [โ†‘/โ†“] or [j/k] Navigate [Enter] Detail [f] Full View [r] Refresh [Esc] Back [?] Help [q] Quit'); } else { // Hide special views this.fileHeatmap.getElement().hide(); @@ -657,6 +710,7 @@ export class FabricTuiApp { this.sessionDigest.hide(); this.collisionAlert.hide(); this.gitIntegration.hide(); + this.semanticNarrativePanel.hide(); // Show default panels this.workerGrid.getElement().show(); @@ -792,6 +846,8 @@ Actions: E - Toggle error groups C - Toggle collision alerts G - Toggle session digest + I - Toggle git integration + N - Toggle semantic narrative Focus Mode: F - Toggle focus mode @@ -835,6 +891,14 @@ Collision Alerts: a - Acknowledge all alerts Esc - Return to default view +Semantic Narrative: + N - Toggle semantic narrative view + โ†‘/โ†“ or j/k - Navigate segments + Enter - Toggle detail view + f - Toggle full narrative + r - Refresh narrative + Esc - Return to default view + General: ? - Toggle this help q - Quit diff --git a/src/tui/components/SemanticNarrativePanel.ts b/src/tui/components/SemanticNarrativePanel.ts new file mode 100644 index 0000000..a4c1609 --- /dev/null +++ b/src/tui/components/SemanticNarrativePanel.ts @@ -0,0 +1,495 @@ +/** + * SemanticNarrativePanel Component + * + * TUI component to display semantic narrative summaries of worker activity. + * Shows natural language descriptions of what workers are doing. + */ + +import * as blessed from 'blessed'; +import { SemanticNarrative, NarrativeSegment, EventPattern } from '../../types.js'; +import { colors } from '../utils/colors.js'; +import { getSemanticNarrativeManager } from '../../semanticNarrative.js'; + +export interface SemanticNarrativePanelOptions { + /** Parent screen */ + parent: blessed.Widgets.Screen; + + /** Position from top */ + top: number | string; + + /** Position from left */ + left: number | string; + + /** Width of the panel */ + width: number | string; + + /** Height of the panel */ + height: number | string; + + /** Callback when a segment is selected */ + onSelect?: (segmentId: string) => void; +} + +/** + * Get pattern icon + */ +function getPatternIcon(pattern: EventPattern): string { + switch (pattern) { + case 'file_editing': + return 'E'; + case 'tool_usage': + return 'T'; + case 'error_handling': + return '!'; + case 'task_completion': + return 'C'; + case 'exploration': + return '?'; + case 'planning': + return 'P'; + case 'debugging': + return 'D'; + case 'research': + return 'R'; + default: + return 'ยท'; + } +} + +/** + * Get pattern color + */ +function getPatternColor(pattern: EventPattern): string { + switch (pattern) { + case 'file_editing': + return 'green'; + case 'tool_usage': + return 'cyan'; + case 'error_handling': + return 'red'; + case 'task_completion': + return 'blue'; + case 'exploration': + return 'magenta'; + case 'planning': + return 'yellow'; + case 'debugging': + return 'red'; + case 'research': + return 'blue'; + default: + return 'white'; + } +} + +/** + * Format duration in human-readable form + */ +function formatDuration(ms: number): string { + if (ms < 1000) return `${ms}ms`; + if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; + if (ms < 3600000) return `${(ms / 60000).toFixed(1)}m`; + return `${(ms / 3600000).toFixed(1)}h`; +} + +/** + * Format timestamp + */ +function formatTime(ts: number): string { + const date = new Date(ts); + return date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', second: '2-digit' }); +} + +/** + * SemanticNarrativePanel displays narrative summaries + */ +export class SemanticNarrativePanel { + private box: blessed.Widgets.BoxElement; + private list: blessed.Widgets.ListElement; + private detailBox: blessed.Widgets.BoxElement; + private narrative: SemanticNarrative | null = null; + private segments: NarrativeSegment[] = []; + private selectedIndex = 0; + private viewMode: 'list' | 'detail' | 'full' = 'list'; + private onSelect?: (segmentId: string) => void; + private narrativeManager = getSemanticNarrativeManager(); + + constructor(options: SemanticNarrativePanelOptions) { + this.onSelect = options.onSelect; + + // Main container + this.box = blessed.box({ + parent: options.parent, + top: options.top, + left: options.left, + width: options.width, + height: options.height, + label: ' Semantic Narrative ', + border: { type: 'line' }, + style: { + border: { fg: colors.border }, + label: { fg: colors.header }, + }, + scrollable: true, + alwaysScroll: true, + keys: true, + vi: true, + mouse: true, + }); + + // List for segments + this.list = blessed.list({ + parent: this.box, + top: 0, + left: 0, + width: '100%-2', + height: '40%', + keys: true, + vi: true, + mouse: true, + style: { + selected: { fg: colors.focus, bold: true }, + item: { fg: colors.text }, + }, + }); + + // Detail box for selected segment + this.detailBox = blessed.box({ + parent: this.box, + bottom: 0, + left: 0, + width: '100%-2', + height: '60%-1', + scrollable: true, + alwaysScroll: true, + keys: true, + vi: true, + mouse: true, + style: { + fg: colors.text, + }, + }); + + this.bindKeys(); + } + + /** + * Bind component-specific keys + */ + private bindKeys(): void { + this.list.key(['up', 'k'], () => { + this.selectPrevious(); + }); + + this.list.key(['down', 'j'], () => { + this.selectNext(); + }); + + this.list.key(['enter', 'space'], () => { + this.toggleDetail(); + }); + + this.list.key(['f'], () => { + this.toggleFullView(); + }); + + this.list.key(['r'], () => { + this.refresh(); + }); + + this.list.key(['escape'], () => { + if (this.viewMode !== 'list') { + this.viewMode = 'list'; + this.render(); + } + }); + } + + /** + * Set narrative data + */ + setNarrative(narrative: SemanticNarrative | null): void { + this.narrative = narrative; + this.segments = narrative?.segments || []; + this.selectedIndex = 0; + this.render(); + } + + /** + * Update with worker events + */ + updateFromWorker(workerId: string): void { + const narrative = this.narrativeManager.generateNarrative(workerId); + this.setNarrative(narrative); + } + + /** + * Update with aggregated narrative + */ + updateAggregated(): void { + const narrative = this.narrativeManager.generateAggregatedNarrative(); + this.setNarrative(narrative); + } + + /** + * Select next segment + */ + selectNext(): void { + if (this.segments.length === 0) return; + this.selectedIndex = (this.selectedIndex + 1) % this.segments.length; + this.render(); + } + + /** + * Select previous segment + */ + selectPrevious(): void { + if (this.segments.length === 0) return; + this.selectedIndex = this.selectedIndex === 0 + ? this.segments.length - 1 + : this.selectedIndex - 1; + this.render(); + } + + /** + * Toggle detail view for selected segment + */ + toggleDetail(): void { + if (this.segments.length === 0) return; + if (this.viewMode === 'detail') { + this.viewMode = 'list'; + } else { + this.viewMode = 'detail'; + this.onSelect?.(this.segments[this.selectedIndex].id); + } + this.render(); + } + + /** + * Toggle full narrative view + */ + toggleFullView(): void { + if (this.viewMode === 'full') { + this.viewMode = 'list'; + } else { + this.viewMode = 'full'; + } + this.render(); + } + + /** + * Refresh narrative data + */ + refresh(): void { + if (this.narrative) { + const updated = this.narrativeManager.getNarrative(this.narrative.id); + if (updated) { + this.setNarrative(updated); + } + } + } + + /** + * Get selected segment + */ + getSelected(): NarrativeSegment | undefined { + return this.segments[this.selectedIndex]; + } + + /** + * Show the panel + */ + show(): void { + this.box.show(); + this.list.focus(); + this.render(); + } + + /** + * Hide the panel + */ + hide(): void { + this.box.hide(); + this.box.screen.render(); + } + + /** + * Check if visible + */ + isVisible(): boolean { + return this.box.visible; + } + + /** + * Render list items + */ + private renderList(): void { + const items: string[] = []; + + if (this.segments.length === 0) { + items.push('{gray-fg}No narrative segments available{/}'); + } else { + for (let i = 0; i < this.segments.length; i++) { + const segment = this.segments[i]; + const icon = getPatternIcon(segment.pattern); + const color = getPatternColor(segment.pattern); + const activeMarker = segment.isActive ? '{green-fg}โ—{/} ' : '{gray-fg}โ—‹{/} '; + const duration = formatDuration(segment.durationMs); + const confidence = Math.round(segment.confidence * 100); + + const title = segment.summary.slice(0, 60); + items.push(`${activeMarker}{${color}-fg}[${icon}]{/} ${title} {gray-fg}(${duration}, ${confidence}%){/}`); + } + } + + this.list.setItems(items); + this.list.select(this.selectedIndex); + } + + /** + * Render detail view + */ + private renderDetail(): void { + if (this.segments.length === 0) { + this.detailBox.setContent('{gray-fg}Select a segment to view details{/}'); + return; + } + + const segment = this.segments[this.selectedIndex]; + const lines: string[] = []; + + lines.push(`{bold}Pattern:{/} {${getPatternColor(segment.pattern)}-fg}${segment.pattern}{/}`); + lines.push(`{bold}Duration:{/} ${formatDuration(segment.durationMs)}`); + lines.push(`{bold}Time:{/} ${formatTime(segment.startTime)} - ${formatTime(segment.endTime)}`); + lines.push(`{bold}Confidence:{/} ${Math.round(segment.confidence * 100)}%`); + lines.push(`{bold}Status:{/} ${segment.isActive ? '{green-fg}Active{/}' : '{gray-fg}Completed{/}'}`); + + if (segment.beadId) { + lines.push(`{bold}Bead:{/} {cyan-fg}${segment.beadId}{/}`); + } + + lines.push(''); + lines.push(`{bold}Summary:{/}`); + lines.push(` ${segment.summary}`); + + if (segment.details) { + lines.push(''); + lines.push(`{bold}Details:{/}`); + lines.push(` ${segment.details}`); + } + + // Entities + if (segment.entities.files?.length) { + lines.push(''); + lines.push(`{bold}Files:{/} ${segment.entities.files.length}`); + for (const file of segment.entities.files.slice(0, 5)) { + lines.push(` {blue-fg}${file}{/}`); + } + if (segment.entities.files.length > 5) { + lines.push(` {gray-fg}... and ${segment.entities.files.length - 5} more{/}`); + } + } + + if (segment.entities.tools?.length) { + lines.push(''); + lines.push(`{bold}Tools:{/} ${segment.entities.tools.join(', ')}`); + } + + if (segment.entities.errors?.length) { + lines.push(''); + lines.push(`{bold}Errors:{/} {red-fg}${segment.entities.errors.length}{/}`); + } + + lines.push(''); + lines.push('{gray-fg}[Enter] Toggle [f] Full View [r] Refresh [Esc] Back{/}'); + + this.detailBox.setContent(lines.join('\n')); + } + + /** + * Render full narrative view + */ + private renderFull(): void { + if (!this.narrative) { + this.detailBox.setContent('{gray-fg}No narrative available{/}'); + return; + } + + const lines: string[] = []; + + lines.push(`{bold}${this.narrative.title}{/}`); + lines.push(''); + lines.push(this.narrative.summary); + lines.push(''); + + if (this.narrative.timeline.length > 0) { + lines.push('{bold}Timeline:{/}'); + for (const event of this.narrative.timeline.slice(0, 10)) { + lines.push(` โ€ข ${event}`); + } + if (this.narrative.timeline.length > 10) { + lines.push(` {gray-fg}... and ${this.narrative.timeline.length - 10} more events{/}`); + } + lines.push(''); + } + + lines.push('{bold}Full Narrative:{/}'); + lines.push(this.narrative.fullNarrative); + + lines.push(''); + lines.push('{gray-fg}[Esc] Back to List{/}'); + + // Hide list in full view, show detail box full height + this.list.hide(); + this.detailBox.top = 0; + this.detailBox.height = '100%-2'; + + this.detailBox.setContent(lines.join('\n')); + } + + /** + * Render the component + */ + render(): void { + // Update box label with narrative info + if (this.narrative) { + const segmentCount = this.segments.length; + const activeCount = this.segments.filter(s => s.isActive).length; + this.box.setLabel(` Semantic Narrative (${segmentCount} segments, ${activeCount} active) `); + } else { + this.box.setLabel(' Semantic Narrative '); + } + + if (this.viewMode === 'full') { + this.renderFull(); + } else { + // Show list and detail side by side + this.list.show(); + this.list.top = 0; + this.list.height = '40%'; + this.detailBox.top = '40%'; + this.detailBox.height = '60%-1'; + + this.renderList(); + this.renderDetail(); + } + + this.box.screen.render(); + } + + /** + * Focus this component + */ + focus(): void { + this.list.focus(); + } + + /** + * Get the underlying box element + */ + getElement(): blessed.Widgets.BoxElement { + return this.box; + } +} + +export default SemanticNarrativePanel; diff --git a/src/tui/components/index.ts b/src/tui/components/index.ts index 766492a..90d99d1 100644 --- a/src/tui/components/index.ts +++ b/src/tui/components/index.ts @@ -45,3 +45,6 @@ export type { GitIntegrationOptions } from './GitIntegration.js'; export { ConversationTranscript, createConversationTranscript } from './ConversationTranscript.js'; export type { ConversationTranscriptOptions } from './ConversationTranscript.js'; + +export { SemanticNarrativePanel } from './SemanticNarrativePanel.js'; +export type { SemanticNarrativePanelOptions } from './SemanticNarrativePanel.js';