diff --git a/.beads/backup/backup_state.json b/.beads/backup/backup_state.json index 491a511..a0ad213 100644 --- a/.beads/backup/backup_state.json +++ b/.beads/backup/backup_state.json @@ -1,10 +1,10 @@ { - "last_dolt_commit": "ja7u8bmu3vi06d8u60afn8fkeqgqe872", + "last_dolt_commit": "67cmftgk44glannsfe5800o22t5bl1pf", "last_event_id": 0, - "timestamp": "2026-03-02T03:12:49.026048287Z", + "timestamp": "2026-03-02T03:27:49.684184Z", "counts": { "issues": 451, - "events": 248, + "events": 249, "comments": 2, "dependencies": 603, "labels": 680, diff --git a/.beads/backup/events.jsonl b/.beads/backup/events.jsonl index 8276f63..f8ec864 100644 --- a/.beads/backup/events.jsonl +++ b/.beads/backup/events.jsonl @@ -246,3 +246,4 @@ {"actor":"ZenchantLive","comment":"Added label: dolt","created_at":"2026-03-01T18:31:50Z","event_type":"label_added","id":246,"issue_id":"beadboard-4vr","new_value":null,"old_value":null} {"actor":"ZenchantLive","comment":"Added label: roadmap","created_at":"2026-03-01T18:31:50Z","event_type":"label_added","id":247,"issue_id":"beadboard-4vr","new_value":null,"old_value":null} {"actor":"ZenchantLive","comment":"Added label: planning","created_at":"2026-03-01T18:31:50Z","event_type":"label_added","id":248,"issue_id":"beadboard-4vr","new_value":null,"old_value":null} +{"actor":"ZenchantLive","comment":null,"created_at":"2026-03-01T19:24:41Z","event_type":"status_changed","id":249,"issue_id":"beadboard-x3l.1","new_value":"{\"notes\":\"Starting TDD: lift useSessionFeed/livenessMap to UnifiedShell\",\"status\":\"in_progress\"}","old_value":"{\"id\":\"beadboard-x3l.1\",\"title\":\"Move useSessionFeed/livenessMap up to UnifiedShell\",\"description\":\"TASK CONTEXT\\n- Bead ID: beadboard-x3l.1\\n- Title: Move useSessionFeed/livenessMap up to UnifiedShell\\n- Parent/Epic: beadboard-x3l\\n- Dependencies (must be done first): none (first in phase)\\n\\nTASK CONTRACT\\n- Goal: useSessionFeed is currently only called in sessions-page.tsx (deprecated route). Call it in UnifiedShell and make livenessMap available as a prop to SocialCard and SmartDag.\\n- Success Criteria:\\n - useSessionFeed(projectRoot) called in UnifiedShell\\n - livenessMap: Record\\u003cstring, string\\u003e available in UnifiedShell scope\\n - livenessMap passed down to SocialPage and SmartDag as a prop (even if they don't use it yet — that is beadboard-x3l.2 and beadboard-x3l.3)\\n - No duplicate SSE connections opened (verify useSessionFeed does not re-subscribe on re-render)\\n - npm run typecheck passes\\n- Scope:\\n - src/components/shared/unified-shell.tsx — add useSessionFeed call\\n - src/hooks/use-session-feed.ts — read to understand return shape before using\\n - src/components/social/social-page.tsx — add livenessMap prop (pass through to cards later)\\n - src/components/graph/smart-dag.tsx — add livenessMap prop (use in x3l.3)\\n- Out of Scope:\\n - Rendering agent avatars yet (beadboard-x3l.2, x3l.3)\\n - Removing useSessionFeed from sessions-page.tsx (leave it, legacy route)\\n\\nIMPLEMENTATION CONSTRAINTS\\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\\n- Reuse shared components and logic; avoid one-off forks.\\n- Keep changes targeted and minimal for this bead.\\n\\nVERIFICATION REQUIREMENTS\\n- Required commands:\\n - npm run typecheck\\n - npm run lint\\n - npm run test\\n- Report any remaining risks and follow-up beads explicitly.\",\"status\":\"open\",\"priority\":1,\"issue_type\":\"task\",\"owner\":\"jordanlive121@gmail.com\",\"created_at\":\"2026-02-28T22:34:43Z\",\"created_by\":\"ZenchantLive\",\"updated_at\":\"2026-02-28T22:34:43Z\"}"} diff --git a/.beads/backup/issues.jsonl b/.beads/backup/issues.jsonl index ee8881a..6bab1b9 100644 --- a/.beads/backup/issues.jsonl +++ b/.beads/backup/issues.jsonl @@ -435,7 +435,7 @@ {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"","closed_at":null,"closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"3763e0c47b3c3d6a4bd7e3ac46608778454e56437df140bdd9d09185198cd7d0","created_at":"2026-02-24T01:36:39Z","created_by":"zenchantlive","crystallizes":0,"defer_until":null,"description":"","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"beadboard-uui","is_template":0,"issue_type":"epic","last_activity":null,"metadata":"{}","mol_type":"","notes":"## Goal\nMerge the duplicate graph implementations (?view=graph, ?view=swarm, and /graph page) into one enhanced graph view with two modes:\n- Analysis mode (default): Full dependency DAG with progressive disclosure\n- Assign mode (toggled): DAG highlights ready nodes, right panel shows assignment controls\n\n## Problem\nBeadBoard has two views (`?view=graph` and `?view=swarm`) that both render the same `WorkflowGraph` DAG component, creating duplication. The standalone `/graph` page (`DependencyGraphPage`) has rich dependency analysis features (hop depth, focus workspace, cycle detection, flow strip) that are stranded -- the shell's `?view=graph` is a bare 49-line wrapper (`SmartDag`) with none of them.\n\n## Success Criteria\n- ?view=graph shows enhanced DAG with all dependency analysis features\n- 'Assign' toggle enables task assignment workflow\n- ?view=swarm deprecated (falls back to default view)\n- Archetypes/Templates accessible from assign mode right panel\n- All implementation steps completed\n- npm run typecheck, lint, test all pass\n\n## Scope\n- SmartDag rewrite with progressive disclosure + tabs + assign mode\n- AssignmentPanel component for assign mode\n- useGraphAnalysis hook extraction\n- Swarm view removal from navigation\n- Delete deprecated swarm files\n\n## Out of Scope\n- Backend API changes (use existing /api/swarm/prep)\n- New archetypes/templates features\n- Mobile-specific layouts\n\n## Reference\nPRD: docs/prd/unified-graph-view.md","original_size":null,"owner":"jordanlive121@gmail.com","payload":"","pinned":0,"priority":1,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":".","source_system":"","spec_id":null,"status":"tombstone","target":"","timeout_ns":0,"title":"Unify Graph + Swarm into Single Enhanced Graph View","updated_at":"2026-02-24T01:40:52Z","waiters":"","wisp_type":"","work_type":"mutex"} {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"Cleaning up test bead","closed_at":"2026-02-21T21:16:00Z","closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"f09f1a0a8263bb776250a97189934101bb7629cc7ef72bab18cf0b8ce5bfbeef","created_at":"2026-02-21T20:59:15Z","created_by":"zenchantlive","crystallizes":0,"defer_until":null,"description":"","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"beadboard-uuo","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"jordanlive121@gmail.com","payload":"","pinned":0,"priority":2,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":".","source_system":"","spec_id":null,"status":"closed","target":"","timeout_ns":0,"title":"SSE Test Bead","updated_at":"2026-02-21T21:16:00Z","waiters":"","wisp_type":"","work_type":"mutex"} {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"","closed_at":null,"closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"ed3b011f4a9bc3317203143aef02596ffb9c244366af3425122340b0fab4a7f0","created_at":"2026-02-28T22:29:51Z","created_by":"ZenchantLive","crystallizes":0,"defer_until":null,"description":"TASK CONTEXT\n- Bead ID: (auto)\n- Title: Phase 4: Agent Presence\n- Parent/Epic: none (phase epic)\n- Dependencies (must be done first): beadboard-0fi (Phase 2 — actor identity in shell)\n\nTASK CONTRACT\n- Goal: Move livenessMap from the deprecated SessionsHeader up to UnifiedShell and surface live agent state on both Social cards and Graph nodes, so an operator can see which agents are active and what they are working on within 5 seconds of opening the app.\n- Success Criteria:\n - useSessionFeed called in UnifiedShell, livenessMap available at shell level\n - SocialCard shows agent avatar and liveness dot for the assigned agent\n - Graph nodes show agent avatar with pulse animation for stuck agents\n - LeftPanel footer replaced with live workspace stats (N agents active, M tasks in motion)\n - npm run typecheck \u0026\u0026 npm run lint \u0026\u0026 npm run test all pass\n- Scope:\n - UnifiedShell livenessMap lift (src/hooks/use-session-feed.ts already exists)\n - SocialCard agent presence UI\n - SmartDag/graph node agent presence UI\n - LeftPanel footer stats\n- Out of Scope:\n - Creating new API endpoints (liveness data already flows via SSE)\n - Agent detail right panel (covered in Phase 1)\n\nIMPLEMENTATION CONSTRAINTS\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\n- Reuse shared components and logic; avoid one-off forks.\n- Keep changes targeted and minimal for this bead.\n\nVERIFICATION REQUIREMENTS\n- Required commands:\n - npm run typecheck\n - npm run lint\n - npm run test\n- Report any remaining risks and follow-up beads explicitly.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"beadboard-x3l","is_template":0,"issue_type":"epic","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"jordanlive121@gmail.com","payload":"","pinned":0,"priority":1,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"open","target":"","timeout_ns":0,"title":"Phase 4: Agent Presence","updated_at":"2026-02-28T22:29:51Z","waiters":"","wisp_type":"","work_type":""} -{"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"","closed_at":null,"closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"283080de34f820239e92ca035c82d095dd40b22268d06b688e027340a23c73db","created_at":"2026-02-28T22:34:43Z","created_by":"ZenchantLive","crystallizes":0,"defer_until":null,"description":"TASK CONTEXT\n- Bead ID: beadboard-x3l.1\n- Title: Move useSessionFeed/livenessMap up to UnifiedShell\n- Parent/Epic: beadboard-x3l\n- Dependencies (must be done first): none (first in phase)\n\nTASK CONTRACT\n- Goal: useSessionFeed is currently only called in sessions-page.tsx (deprecated route). Call it in UnifiedShell and make livenessMap available as a prop to SocialCard and SmartDag.\n- Success Criteria:\n - useSessionFeed(projectRoot) called in UnifiedShell\n - livenessMap: Record\u003cstring, string\u003e available in UnifiedShell scope\n - livenessMap passed down to SocialPage and SmartDag as a prop (even if they don't use it yet — that is beadboard-x3l.2 and beadboard-x3l.3)\n - No duplicate SSE connections opened (verify useSessionFeed does not re-subscribe on re-render)\n - npm run typecheck passes\n- Scope:\n - src/components/shared/unified-shell.tsx — add useSessionFeed call\n - src/hooks/use-session-feed.ts — read to understand return shape before using\n - src/components/social/social-page.tsx — add livenessMap prop (pass through to cards later)\n - src/components/graph/smart-dag.tsx — add livenessMap prop (use in x3l.3)\n- Out of Scope:\n - Rendering agent avatars yet (beadboard-x3l.2, x3l.3)\n - Removing useSessionFeed from sessions-page.tsx (leave it, legacy route)\n\nIMPLEMENTATION CONSTRAINTS\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\n- Reuse shared components and logic; avoid one-off forks.\n- Keep changes targeted and minimal for this bead.\n\nVERIFICATION REQUIREMENTS\n- Required commands:\n - npm run typecheck\n - npm run lint\n - npm run test\n- Report any remaining risks and follow-up beads explicitly.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"beadboard-x3l.1","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"jordanlive121@gmail.com","payload":"","pinned":0,"priority":1,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"open","target":"","timeout_ns":0,"title":"Move useSessionFeed/livenessMap up to UnifiedShell","updated_at":"2026-02-28T22:34:43Z","waiters":"","wisp_type":"","work_type":""} +{"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"","closed_at":null,"closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"283080de34f820239e92ca035c82d095dd40b22268d06b688e027340a23c73db","created_at":"2026-02-28T22:34:43Z","created_by":"ZenchantLive","crystallizes":0,"defer_until":null,"description":"TASK CONTEXT\n- Bead ID: beadboard-x3l.1\n- Title: Move useSessionFeed/livenessMap up to UnifiedShell\n- Parent/Epic: beadboard-x3l\n- Dependencies (must be done first): none (first in phase)\n\nTASK CONTRACT\n- Goal: useSessionFeed is currently only called in sessions-page.tsx (deprecated route). Call it in UnifiedShell and make livenessMap available as a prop to SocialCard and SmartDag.\n- Success Criteria:\n - useSessionFeed(projectRoot) called in UnifiedShell\n - livenessMap: Record\u003cstring, string\u003e available in UnifiedShell scope\n - livenessMap passed down to SocialPage and SmartDag as a prop (even if they don't use it yet — that is beadboard-x3l.2 and beadboard-x3l.3)\n - No duplicate SSE connections opened (verify useSessionFeed does not re-subscribe on re-render)\n - npm run typecheck passes\n- Scope:\n - src/components/shared/unified-shell.tsx — add useSessionFeed call\n - src/hooks/use-session-feed.ts — read to understand return shape before using\n - src/components/social/social-page.tsx — add livenessMap prop (pass through to cards later)\n - src/components/graph/smart-dag.tsx — add livenessMap prop (use in x3l.3)\n- Out of Scope:\n - Rendering agent avatars yet (beadboard-x3l.2, x3l.3)\n - Removing useSessionFeed from sessions-page.tsx (leave it, legacy route)\n\nIMPLEMENTATION CONSTRAINTS\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\n- Reuse shared components and logic; avoid one-off forks.\n- Keep changes targeted and minimal for this bead.\n\nVERIFICATION REQUIREMENTS\n- Required commands:\n - npm run typecheck\n - npm run lint\n - npm run test\n- Report any remaining risks and follow-up beads explicitly.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"beadboard-x3l.1","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"Starting TDD: lift useSessionFeed/livenessMap to UnifiedShell","original_size":null,"owner":"jordanlive121@gmail.com","payload":"","pinned":0,"priority":1,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"in_progress","target":"","timeout_ns":0,"title":"Move useSessionFeed/livenessMap up to UnifiedShell","updated_at":"2026-03-02T03:24:40Z","waiters":"","wisp_type":"","work_type":""} {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"","closed_at":null,"closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"dbc5f5a54d52d9ca58c73cadc7587919775f3e00320de80bc19ef50c37e7f02c","created_at":"2026-02-28T22:34:43Z","created_by":"ZenchantLive","crystallizes":0,"defer_until":null,"description":"TASK CONTEXT\n- Bead ID: beadboard-x3l.2\n- Title: Render agent avatar and liveness dot on SocialCard\n- Parent/Epic: beadboard-x3l\n- Dependencies (must be done first): beadboard-x3l.1\n\nTASK CONTRACT\n- Goal: Each SocialCard for an assigned task should show the assigned agent's avatar and a liveness dot (active/stale/stuck) using livenessMap from the shell.\n- Success Criteria:\n - SocialCard receives livenessMap: Record\u003cstring, string\u003e prop\n - If issue.assignee exists and is in livenessMap, renders AgentAvatar component with liveness indicator\n - Liveness states: 'active' (green dot), 'stale' (amber dot), 'stuck' (red pulse)\n - Cards without an assignee show no avatar — no empty avatar placeholder\n - npm run typecheck passes\n- Scope:\n - src/components/social/social-card.tsx — add livenessMap prop and avatar render\n - src/components/social/social-page.tsx — thread livenessMap through to each SocialCard\n - Check if AgentAvatar component exists (grep src/ for AgentAvatar) and use it; if not, render a simple initials circle\n- Out of Scope:\n - Graph node agent presence (beadboard-x3l.3)\n - Inline assign affordance (Phase 3, beadboard-8ij.2)\n\nIMPLEMENTATION CONSTRAINTS\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\n- Reuse shared components and logic; avoid one-off forks.\n- Keep changes targeted and minimal for this bead.\n\nVERIFICATION REQUIREMENTS\n- Required commands:\n - npm run typecheck\n - npm run lint\n - npm run test\n- Report any remaining risks and follow-up beads explicitly.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"beadboard-x3l.2","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"jordanlive121@gmail.com","payload":"","pinned":0,"priority":1,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"open","target":"","timeout_ns":0,"title":"Render agent avatar and liveness dot on SocialCard","updated_at":"2026-02-28T22:34:43Z","waiters":"","wisp_type":"","work_type":""} {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"","closed_at":null,"closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"fac32fa6621d7e7c923dc4d894046adade762c4dd1924e7b697dea7dcbc410cb","created_at":"2026-02-28T22:34:43Z","created_by":"ZenchantLive","crystallizes":0,"defer_until":null,"description":"TASK CONTEXT\n- Bead ID: beadboard-x3l.3\n- Title: Render agent avatar on graph nodes with stuck-agent pulse\n- Parent/Epic: beadboard-x3l\n- Dependencies (must be done first): beadboard-x3l.1\n\nTASK CONTRACT\n- Goal: Active graph nodes should show the assigned agent's avatar. Nodes whose agent is in a 'stuck' liveness state should display a pulsing warning treatment so the operator can spot problems at a glance in the DAG view.\n- Success Criteria:\n - Graph node card renders a small agent avatar when issue.assignee is present in livenessMap\n - Stuck agents (livenessMap value === 'stuck') show a CSS pulse/ring animation on the node border\n - Non-assigned nodes are visually unchanged\n - npm run typecheck passes\n- Scope:\n - src/components/graph/smart-dag.tsx or the node card component it renders — add livenessMap prop and avatar/pulse render\n - Read SmartDag to find where individual node UI is rendered before editing\n- Out of Scope:\n - SocialCard presence (beadboard-x3l.2)\n - Graph layout or DAG structure changes\n\nIMPLEMENTATION CONSTRAINTS\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\n- Reuse shared components and logic; avoid one-off forks.\n- Keep changes targeted and minimal for this bead.\n\nVERIFICATION REQUIREMENTS\n- Required commands:\n - npm run typecheck\n - npm run lint\n - npm run test\n- Report any remaining risks and follow-up beads explicitly.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"beadboard-x3l.3","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"jordanlive121@gmail.com","payload":"","pinned":0,"priority":1,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"open","target":"","timeout_ns":0,"title":"Render agent avatar on graph nodes with stuck-agent pulse","updated_at":"2026-02-28T22:34:43Z","waiters":"","wisp_type":"","work_type":""} {"acceptance_criteria":"","actor":"","agent_state":"","assignee":null,"await_id":"","await_type":"","close_reason":"","closed_at":null,"closed_by_session":"","compacted_at":null,"compacted_at_commit":null,"compaction_level":0,"content_hash":"24edd6f97db15701b4c156021112e907eda6bb9b8370a7c0b24efb571f351a50","created_at":"2026-02-28T22:34:43Z","created_by":"ZenchantLive","crystallizes":0,"defer_until":null,"description":"TASK CONTEXT\n- Bead ID: beadboard-x3l.4\n- Title: Replace LeftPanel footer with live workspace stats\n- Parent/Epic: beadboard-x3l\n- Dependencies (must be done first): beadboard-x3l.1\n\nTASK CONTRACT\n- Goal: The LeftPanel footer currently shows a hardcoded identity string. Replace it with live stats: number of active agents and number of tasks currently in motion, derived from livenessMap and the live issues array.\n- Success Criteria:\n - Footer shows 'N agents active, M tasks in motion' with real counts\n - Counts update reactively when SSE pushes changes\n - No hardcoded identity text remains in LeftPanel footer\n - npm run typecheck passes\n- Scope:\n - src/components/shared/left-panel.tsx — update footer section\n - LeftPanel already receives issues prop — use it for task count\n - livenessMap passed from UnifiedShell (add to LeftPanelProps if not present)\n- Out of Scope:\n - TopBar identity input (beadboard-0fi.1)\n - Changing LeftPanel navigation or epic tree\n\nIMPLEMENTATION CONSTRAINTS\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\n- Reuse shared components and logic; avoid one-off forks.\n- Keep changes targeted and minimal for this bead.\n\nVERIFICATION REQUIREMENTS\n- Required commands:\n - npm run typecheck\n - npm run lint\n - npm run test\n- Report any remaining risks and follow-up beads explicitly.","design":"","due_at":null,"ephemeral":0,"estimated_minutes":null,"event_kind":"","external_ref":null,"hook_bead":"","id":"beadboard-x3l.4","is_template":0,"issue_type":"task","last_activity":null,"metadata":"{}","mol_type":"","notes":"","original_size":null,"owner":"jordanlive121@gmail.com","payload":"","pinned":0,"priority":2,"quality_score":null,"rig":"","role_bead":"","role_type":"","sender":"","source_repo":"","source_system":"","spec_id":"","status":"open","target":"","timeout_ns":0,"title":"Replace LeftPanel footer with live workspace stats","updated_at":"2026-02-28T22:34:43Z","waiters":"","wisp_type":"","work_type":""}