From e53ef575b383921fe87baefec21eeacf4463f1fc Mon Sep 17 00:00:00 2001 From: gastown/crew/joe Date: Wed, 31 Dec 2025 12:57:57 -0800 Subject: [PATCH] bd sync: 2025-12-31 12:57:57 --- .beads/issues.jsonl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 3ab35256..eac68fc4 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -430,7 +430,7 @@ {"id":"bd-hobo","title":"Distinct prefixes for protos, molecules, wisps","description":"Template/workflow entities should have visually distinct prefixes from regular issues.\n\n**Problem:**\n- Protos (bd-7bs4) look like regular issues - invites squashing\n- Molecules (poured instances) also use bd- prefix\n- Wisps are in separate DB but still use bd- when referenced\n\n**Proposed Prefixes:**\n- `proto-` for templates (e.g., proto-release, proto-review)\n- `mol-` for active molecules (poured from protos)\n- `wisp-` for ephemeral wisps (vapor phase)\n\n**Benefits:**\n- Instant visual recognition of entity type\n- Prevents accidental modification of templates\n- Clear lifecycle: proto → mol → wisp → digest\n\n**Implementation options:**\n1. Separate databases with different prefixes\n2. Issue type determines prefix generation\n3. Naming convention enforced by bd pour/wisp commands","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-24T16:45:24.940809-08:00","updated_at":"2025-12-25T02:04:52.459233-08:00","closed_at":"2025-12-25T02:04:52.459233-08:00","labels":["workflow"]} {"id":"bd-hp8g","title":"gt sling should look up formulas from .beads/formulas/ registry","description":"## Problem\n\ngt sling \u003cformula-name\u003e doesn't find formulas from the registry that bd formula list shows.\n\n## What I tried\n\n1. gt sling beads/crew/emma --formula beads-release --var version=0.42.0\n - Problem: --formula flag doesn't exist\n\n2. gt sling beads-release beads/crew/emma --var version=0.42.0\n - Error: open .../beads-release: no such file or directory\n - Problem: Looks for file in cwd, not formula registry\n\n## What worked\n\nbd mol wisp beads-release --var version=0.42.0 - correctly finds formula from .beads/formulas/\n\n## Expected\n\ngt sling should use the same formula lookup as bd mol wisp - checking .beads/formulas/*.formula.json\n\n## Documentation gap\n\nThe help shows examples like 'gt sling mol-release mayor/' suggesting formula slinging works, but it doesn't find registry formulas.","status":"closed","priority":2,"issue_type":"bug","assignee":"beads/polecats/jade","created_at":"2025-12-30T21:18:17.251292-08:00","created_by":"beads/crew/emma","updated_at":"2025-12-30T22:06:27.153176-08:00","closed_at":"2025-12-30T22:06:27.153176-08:00","close_reason":"Fixed in both repos: bd cook now looks up formulas from registry, and gt sling uses bd mol wisp"} {"id":"bd-hr39","title":"bd cook: needs field not converted to step dependencies","description":"When cooking a formula with `needs` fields on steps, the dependencies are not created between sibling steps.\n\n## Expected\n\nFormula:\n```yaml\nsteps:\n - id: inbox-check\n title: Check inbox\n - id: trigger-spawns\n title: Nudge polecats\n needs: [inbox-check]\n```\n\nShould create:\n- mol-foo.inbox-check (no deps)\n- mol-foo.trigger-spawns → depends on → mol-foo.inbox-check\n\n## Actual\n\nBoth steps only depend on the parent proto:\n- mol-foo.inbox-check → depends on → mol-foo\n- mol-foo.trigger-spawns → depends on → mol-foo\n\nThe `needs` field is ignored.\n\n## Impact\n\nThis breaks the step execution order. Steps that should wait for predecessors will run in parallel or out of order.\n\n## Reproduction\n\n```bash\nbd cook mol-deacon-patrol.formula.yaml\nbd show mol-deacon-patrol.trigger-pending-spawns\n# Shows: Depends on mol-deacon-patrol (parent only)\n# Should show: Depends on mol-deacon-patrol.inbox-check\n```","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-24T13:49:59.023514-08:00","updated_at":"2025-12-24T13:59:09.929298-08:00","closed_at":"2025-12-24T13:59:09.929298-08:00"} -{"id":"bd-htwx","title":"Stale daemon.lock files cause 5+ second delays","description":"## Problem\nWhen a bd daemon crashes or is killed without cleanup, it leaves a stale daemon.lock file. Subsequent bd commands try to connect to the dead daemon, causing 5+ second timeouts before falling back to direct mode.\n\nFound during gt status optimization (gt-zdtpw) - one stale wyvern daemon was causing 10+ second delays.\n\n## Evidence\n```\n# Lock files with stale PIDs:\n$ find ~/gt -name \"daemon.lock\" -exec cat {} \\;\n{\"pid\": 11045, ...} # Not running (from Dec 27)\n{\"pid\": 15986, ...} # Not running (from Dec 27)\n{\"pid\": 98055, ...} # Just restarted\n\n# But running daemons have different PIDs:\n$ ps aux | grep \"bd.*daemon\"\n11847, 11683, 11624 # None match the lock files!\n```\n\n## Proposed fixes\n\n### 1. Validate lock on startup (quick fix)\nBefore trusting daemon.lock, check if the PID is still running:\n```python\ndef is_daemon_alive(lock_path):\n lock = json.load(open(lock_path))\n try:\n os.kill(lock[\"pid\"], 0) # Signal 0 = check if alive\n return True\n except OSError:\n return False\n```\n\n### 2. Heartbeat mechanism (robust fix)\nDaemon writes periodic heartbeat to lock file or separate file.\nClients check heartbeat age before attempting IPC.\n\n### 3. Lock cleanup in daemon startup\nWhen starting a new daemon, always check for and clean stale locks.\n\n### 4. Graceful shutdown handling\nRegister signal handlers (SIGTERM, SIGINT) to clean up lock on exit.\n\n## Workaround\nFor now, gastown uses `--no-daemon` for all read operations to avoid this issue.","status":"open","priority":1,"issue_type":"bug","created_at":"2025-12-31T12:19:37.758373-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-31T12:19:37.758373-08:00"} +{"id":"bd-htwx","title":"Stale daemon.lock files cause 5+ second delays","description":"## Problem\nWhen a bd daemon crashes or is killed without cleanup, it leaves a stale daemon.lock file. Subsequent bd commands try to connect to the dead daemon, causing 5+ second timeouts before falling back to direct mode.\n\nFound during gt status optimization (gt-zdtpw) - one stale wyvern daemon was causing 10+ second delays.\n\n## Evidence\n```\n# Lock files with stale PIDs:\n$ find ~/gt -name \"daemon.lock\" -exec cat {} \\;\n{\"pid\": 11045, ...} # Not running (from Dec 27)\n{\"pid\": 15986, ...} # Not running (from Dec 27)\n{\"pid\": 98055, ...} # Just restarted\n\n# But running daemons have different PIDs:\n$ ps aux | grep \"bd.*daemon\"\n11847, 11683, 11624 # None match the lock files!\n```\n\n## Proposed fixes\n\n### 1. Validate lock on startup (quick fix)\nBefore trusting daemon.lock, check if the PID is still running:\n```python\ndef is_daemon_alive(lock_path):\n lock = json.load(open(lock_path))\n try:\n os.kill(lock[\"pid\"], 0) # Signal 0 = check if alive\n return True\n except OSError:\n return False\n```\n\n### 2. Heartbeat mechanism (robust fix)\nDaemon writes periodic heartbeat to lock file or separate file.\nClients check heartbeat age before attempting IPC.\n\n### 3. Lock cleanup in daemon startup\nWhen starting a new daemon, always check for and clean stale locks.\n\n### 4. Graceful shutdown handling\nRegister signal handlers (SIGTERM, SIGINT) to clean up lock on exit.\n\n## Workaround\nFor now, gastown uses `--no-daemon` for all read operations to avoid this issue.","status":"in_progress","priority":1,"issue_type":"bug","created_at":"2025-12-31T12:19:37.758373-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-31T12:56:42.067067-08:00"} {"id":"bd-hulf","title":"Molecule execution state management","description":"Implement molecule execution state tracking.\n\n## State Location\n\n```\n.beads/molecules/\u003cmol-id\u003e.state.yaml\n```\n\n## State Schema\n\n```yaml\nid: mol-deacon-patrol\nformula: mol-deacon-patrol # Source formula\nbonded_at: ISO timestamp\nbonded_by: entity who created it\n\n# Execution state\nstatus: running | paused | completed | failed\ncurrent_step: step-id\nstarted_at: ISO timestamp\ncompleted_at: ISO timestamp (if done)\n\n# Loop tracking\nreset_count: 0\nlast_reset_at: null\n\n# Per-step state\nsteps:\n inbox-check:\n status: completed | in_progress | pending\n started_at: ...\n completed_at: ...\n spawn-work:\n status: pending\n self-inspect:\n status: pending\n\n# Variables (from formula instantiation)\nvariables:\n rig: gastown\n issue_id: gt-xxx\n```\n\n## Operations\n\n- CreateState(molID, formula, variables) - Initialize state\n- LoadState(molID) - Read current state \n- SaveState(molID, state) - Write state\n- AdvanceStep(molID) - Mark current complete, find next\n- ResetState(molID) - Reset all steps to pending\n\n## Files\n\n- internal/mol/state.go\n- internal/mol/types.go","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:53:43.381634-08:00","updated_at":"2025-12-24T16:53:11.807645-08:00","closed_at":"2025-12-24T16:53:11.807645-08:00"} {"id":"bd-hvng","title":"Merge: bd-w193","description":"branch: polecat/nux\ntarget: main\nsource_issue: bd-w193\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T23:23:47.496139-08:00","updated_at":"2025-12-20T23:17:26.996479-08:00","closed_at":"2025-12-20T23:17:26.996479-08:00"} {"id":"bd-hw3w","title":"Update info.go versionChanges","description":"Add entry to versionChanges in cmd/bd/info.go with agent-actionable changes for {{version}}","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T22:56:01.016558-08:00","updated_at":"2025-12-20T17:59:26.262511-08:00","closed_at":"2025-12-20T01:23:50.3879-08:00","dependencies":[{"issue_id":"bd-hw3w","depends_on_id":"bd-6s61","type":"parent-child","created_at":"2025-12-19T22:56:14.941855-08:00","created_by":"daemon"},{"issue_id":"bd-hw3w","depends_on_id":"bd-czss","type":"blocks","created_at":"2025-12-19T22:56:23.219257-08:00","created_by":"daemon"}]} @@ -783,7 +783,7 @@ {"id":"bd-thgk","title":"Improve test coverage for internal/compact (18.2% → 70%)","description":"Improve test coverage for internal/compact package from 17% to 70%.\n\n## Current State\n- Coverage: 17.3%\n- Files: compactor.go, git.go, haiku.go\n- Tests: compactor_test.go (minimal tests)\n\n## Functions Needing Tests\n\n### compactor.go (core compaction)\n- [ ] New - needs config validation tests\n- [ ] CompactTier1 - needs single issue compaction tests\n- [ ] CompactTier1Batch - needs batch processing tests\n- [ ] compactSingleWithResult - internal, test via public API\n\n### git.go\n- [ ] GetCurrentCommitHash - needs git repo fixture tests\n\n### haiku.go (AI summarization) - MOCK REQUIRED\n- [ ] NewHaikuClient - needs API key validation tests\n- [ ] SummarizeTier1 - needs mock API response tests\n- [ ] callWithRetry - needs retry logic tests\n- [ ] isRetryable - needs error classification tests\n- [ ] renderTier1Prompt - needs template rendering tests\n\n## Implementation Guide\n\n1. **Mock the Anthropic API:**\n ```go\n // Create mock HTTP server\n server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n json.NewEncoder(w).Encode(map[string]interface{}{\n \"content\": []map[string]string{{\"text\": \"Summarized content\"}},\n })\n }))\n defer server.Close()\n \n // Point client at mock\n client.baseURL = server.URL\n ```\n\n2. **Test scenarios:**\n - Successful compaction with AI summary\n - API failure with retry\n - Rate limit handling\n - Empty issue handling\n - Large issue truncation\n\n3. **Use test database:**\n ```go\n store, cleanup := testutil.NewTestStore(t)\n defer cleanup()\n ```\n\n## Success Criteria\n- Coverage ≥ 70%\n- AI calls properly mocked (no real API calls in tests)\n- Retry logic verified\n- Error paths covered\n\n## Run Tests\n```bash\ngo test -v -cover ./internal/compact\ngo test -race ./internal/compact\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-13T20:42:58.455767-08:00","updated_at":"2025-12-23T13:41:10.80832-08:00","closed_at":"2025-12-23T13:41:10.80832-08:00","dependencies":[{"issue_id":"bd-thgk","depends_on_id":"bd-iz5t","type":"parent-child","created_at":"2025-12-23T12:44:07.287377-08:00","created_by":"daemon"}]} {"id":"bd-ti1m","title":"Test hooked styling","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T22:33:47.135871-08:00","created_by":"beads/crew/emma","updated_at":"2025-12-28T22:34:26.00871-08:00","closed_at":"2025-12-28T22:34:26.00871-08:00"} {"id":"bd-tj00","title":"Update local installation","description":"go build -o ~/.local/bin/bd ./cmd/bd \u0026\u0026 codesign -s - ~/.local/bin/bd","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T21:53:20.616907-08:00","updated_at":"2025-12-20T21:55:42.756171-08:00","closed_at":"2025-12-20T21:55:42.756171-08:00","dependencies":[{"issue_id":"bd-tj00","depends_on_id":"bd-an4s","type":"parent-child","created_at":"2025-12-20T21:53:20.619834-08:00","created_by":"daemon"},{"issue_id":"bd-tj00","depends_on_id":"bd-9l0h","type":"blocks","created_at":"2025-12-20T21:53:29.817989-08:00","created_by":"daemon"}]} -{"id":"bd-tksk","title":"Support session_id field on issue close/update mutations","description":"## Context\n\nPer Gas Town decision 009-session-events-architecture.md, work attribution for\nentity CV building requires capturing which Claude Code session performed work.\n\n## Implementation\n\nAdd session_id support to issue mutations:\n\n### Schema\nAdd optional field to issue close:\n- closed_by_session: string (Claude Code session UUID)\n\n### CLI\n```bash\nbd close gt-abc --session \"abc123-session-id\"\n# Or via env var:\nCLAUDE_SESSION_ID=abc123 bd close gt-abc\n```\n\n### Storage\nStore in issues.jsonl:\n```json\n{\"id\": \"gt-abc\", \"status\": \"closed\", \"closed_by_session\": \"abc123\", ...}\n```\n\n## Acceptance Criteria\n\n- [ ] bd close accepts --session flag or reads CLAUDE_SESSION_ID env\n- [ ] session_id stored in issue close record\n- [ ] bd show displays closed_by_session if present\n- [ ] Works for bd update --status=closed as well\n\n## Future\n\n- Query by session: bd list --closed-by-session=X\n- Entity chain: aggregate session activity for CV\n\n## Related\n\n- Gas Town docs/hop/decisions/009-session-events-architecture.md\n- gt-nvz8b: gt done captures session_id","status":"hooked","priority":2,"issue_type":"feature","assignee":".","created_at":"2025-12-31T12:49:58.379182-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-31T12:50:38.716204-08:00"} +{"id":"bd-tksk","title":"Support session_id field on issue close/update mutations","description":"## Context\n\nPer Gas Town decision 009-session-events-architecture.md, work attribution for\nentity CV building requires capturing which Claude Code session performed work.\n\n## Implementation\n\nAdd session_id support to issue mutations:\n\n### Schema\nAdd optional field to issue close:\n- closed_by_session: string (Claude Code session UUID)\n\n### CLI\n```bash\nbd close gt-abc --session \"abc123-session-id\"\n# Or via env var:\nCLAUDE_SESSION_ID=abc123 bd close gt-abc\n```\n\n### Storage\nStore in issues.jsonl:\n```json\n{\"id\": \"gt-abc\", \"status\": \"closed\", \"closed_by_session\": \"abc123\", ...}\n```\n\n## Acceptance Criteria\n\n- [ ] bd close accepts --session flag or reads CLAUDE_SESSION_ID env\n- [ ] session_id stored in issue close record\n- [ ] bd show displays closed_by_session if present\n- [ ] Works for bd update --status=closed as well\n\n## Future\n\n- Query by session: bd list --closed-by-session=X\n- Entity chain: aggregate session activity for CV\n\n## Related\n\n- Gas Town docs/hop/decisions/009-session-events-architecture.md\n- gt-nvz8b: gt done captures session_id","status":"hooked","priority":2,"issue_type":"feature","assignee":"beads/crew/dave","created_at":"2025-12-31T12:49:58.379182-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-31T12:57:50.30363-08:00"} {"id":"bd-tm2p","title":"Polecats get stuck on interactive shell prompts (cp/mv/rm -i)","description":"During swarm operations, polecats frequently get stuck waiting for interactive prompts from shell commands like:\n- cp prompting 'overwrite file? (y/n)'\n- mv prompting 'overwrite file? (y/n)' \n- rm prompting 'remove file?'\n\nThis happens because macOS aliases or shell configs may have -i flags set by default.\n\nRoot cause: Claude Code runs commands that trigger interactive confirmation prompts, but cannot respond to them, causing the agent to hang indefinitely.\n\nObserved in: Multiple polecats during GH issues swarm (Dec 2024)\n- Derrick, Roustabout, Prospector, Warboy all got stuck on y/n prompts\n\nSuggested fixes:\n1. AGENTS.md should instruct agents to always use -f flag with cp/mv/rm\n2. Polecat startup could set shell aliases to use non-interactive versions\n3. bd prime hook could include guidance about non-interactive commands\n4. Consider detecting stuck prompts and auto-recovering","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-14T16:51:24.572271-08:00","updated_at":"2025-12-25T01:21:01.952723-08:00","deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"} {"id":"bd-to1u","title":"Run bump-version.sh test-squash","description":"Run ./scripts/bump-version.sh test-squash to update version in all files","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T13:52:33.06696-08:00","updated_at":"2025-12-21T13:53:41.841677-08:00","deleted_at":"2025-12-21T13:53:41.841677-08:00","deleted_by":"stevey","delete_reason":"manual delete","original_type":"task"} {"id":"bd-toy3","title":"Test hook","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T18:33:39.717036-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} @@ -822,7 +822,7 @@ {"id":"bd-vgi5","title":"Push version bump to GitHub","description":"git push origin main - triggers CI but no release yet.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T22:43:05.363604-08:00","updated_at":"2025-12-24T16:25:30.019895-08:00","dependencies":[{"issue_id":"bd-vgi5","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T22:43:16.87736-08:00","created_by":"daemon"},{"issue_id":"bd-vgi5","depends_on_id":"bd-3ggb","type":"blocks","created_at":"2025-12-18T22:43:21.078208-08:00","created_by":"daemon"}],"deleted_at":"2025-12-24T16:25:30.019895-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"bd-vjas","title":"Add --pretty flag to bd ready","description":"bd list has --pretty but bd ready doesn't. Should support same tree format with status/priority symbols for consistency.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-31T11:54:59.911409-08:00","created_by":"mayor","updated_at":"2025-12-31T11:54:59.911409-08:00"} {"id":"bd-vks2","title":"bd dep tree doesn't display external dependencies","description":"GetDependencyTree (dependencies.go:464-624) uses a recursive CTE that JOINs with the issues table, which means external refs (external:project:capability) are invisible in the tree output.\n\nWhen an issue has an external blocking dependency, running 'bd dep tree \u003cid\u003e' won't show it.\n\nOptions:\n1. Query dependencies table separately for external refs and display them as leaf nodes\n2. Add a synthetic 'external' node type that shows the ref and resolution status\n3. Document that external deps aren't shown in tree view (use bd show for full deps)\n\nLower priority since bd show \u003cid\u003e displays all dependencies including external refs.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-21T23:45:27.121934-08:00","updated_at":"2025-12-22T22:30:19.083652-08:00","closed_at":"2025-12-22T22:30:19.083652-08:00","dependencies":[{"issue_id":"bd-vks2","depends_on_id":"bd-zmmy","type":"discovered-from","created_at":"2025-12-21T23:45:27.122511-08:00","created_by":"daemon"}]} -{"id":"bd-vln0","title":"Add display guards for large molecules in bd mol current","description":"When molecule has \u003e100 steps, show summary instead of list.\n\nChanges:\n1. Count children first\n2. If count \u003e 100: show summary + pointer to bd mol progress\n3. Add --range flag for viewing specific step ranges\n4. Add --limit flag for capping output","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-31T00:52:52.823925-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-31T00:52:52.823925-08:00","dependencies":[{"issue_id":"bd-vln0","depends_on_id":"bd-5nu1","type":"parent-child","created_at":"2025-12-31T00:54:00.833563-08:00","created_by":"gastown/crew/max"}]} +{"id":"bd-vln0","title":"Add display guards for large molecules in bd mol current","description":"When molecule has \u003e100 steps, show summary instead of list.\n\nChanges:\n1. Count children first\n2. If count \u003e 100: show summary + pointer to bd mol progress\n3. Add --range flag for viewing specific step ranges\n4. Add --limit flag for capping output","status":"in_progress","priority":2,"issue_type":"task","created_at":"2025-12-31T00:52:52.823925-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-31T12:57:43.401885-08:00","dependencies":[{"issue_id":"bd-vln0","depends_on_id":"bd-5nu1","type":"parent-child","created_at":"2025-12-31T00:54:00.833563-08:00","created_by":"gastown/crew/max"}]} {"id":"bd-vpan","title":"Re: Thread Test 2","description":"Got your message. Testing reply feature.","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-16T18:21:29.144352-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","dependencies":[{"issue_id":"bd-vpan","depends_on_id":"bd-x36g","type":"replies-to","created_at":"2025-12-18T13:45:31.137191-08:00","created_by":"migration"}],"deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"} {"id":"bd-vqh9","title":"Code smell: init.go is 1928 lines - needs splitting","description":"cmd/bd/init.go is 1928 lines covering multiple init modes, contributor/team setup, hooks setup, and stealth mode.\n\n**Problem:**\n- File is too large to understand and maintain\n- Multiple responsibilities within single file\n- Harder to test individual components\n\n**Acceptance Criteria:**\n- [ ] Split into logical files (init_setup.go, init_hooks.go, init_stealth.go, etc.)\n- [ ] Each file under 500 lines\n- [ ] No functionality changes\n- [ ] Tests pass","status":"closed","priority":2,"issue_type":"chore","created_at":"2025-12-28T18:58:59.37092-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-28T19:01:18.403417-08:00","closed_at":"2025-12-28T19:01:18.403417-08:00","dependencies":[{"issue_id":"bd-vqh9","depends_on_id":"bd-ox1o","type":"blocks","created_at":"2025-12-28T19:00:23.586968-08:00","created_by":"daemon"}]} {"id":"bd-vqm0","title":"Swarm: Code Review: Swarm commands consolidation","description":"Swarm molecule orchestrating epic bd-2ubv.\n\nEpic: bd-2ubv\nCoordinator: ","status":"closed","priority":2,"issue_type":"molecule","created_at":"2025-12-28T22:06:58.82489-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-29T13:40:29.709541-08:00","closed_at":"2025-12-29T13:40:29.709541-08:00","close_reason":"Stale/spurious - test artifacts, merged PRs, or auto-close candidates","dependencies":[{"issue_id":"bd-vqm0","depends_on_id":"bd-2ubv","type":"relates-to","created_at":"2025-12-28T22:06:58.825608-08:00","created_by":"beads/crew/dave"}]}