bd sync: 2025-12-23 19:12:19

This commit is contained in:
Steve Yegge
2025-12-23 19:12:19 -08:00
parent f777093386
commit c4473ea757

View File

@@ -5,7 +5,7 @@
{"id":"bd-0d5p","title":"Fix TestRunSync_Timeout failing on macOS","description":"The hooks timeout test fails because exec.CommandContext doesn't properly terminate child processes of shell scripts on macOS. The test creates a hook that runs 'sleep 60' with a 500ms timeout, but it waits the full 60 seconds.\n\nOptions to fix:\n- Use SysProcAttr{Setpgid: true} to create process group and kill the group\n- Skip test on darwin with build tag\n- Use a different approach for timeout testing\n\nLocation: internal/hooks/hooks_test.go:220-253","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-16T20:52:51.771217-08:00","updated_at":"2025-12-17T23:13:40.532688-08:00","closed_at":"2025-12-17T17:23:55.678799-08:00"}
{"id":"bd-0fvq","title":"bd doctor should recommend bd prime migration for existing repos","description":"bd doctor should detect old beads integration patterns and recommend migrating to bd prime approach.\n\n## Current behavior\n- bd doctor checks if Claude hooks are installed globally\n- Doesn't check project-level integration (AGENTS.md, CLAUDE.md)\n- Doesn't recommend migration for repos using old patterns\n\n## Desired behavior\nbd doctor should detect and suggest:\n\n1. **Old slash command pattern detected**\n - Check for /beads:* references in AGENTS.md, CLAUDE.md\n - Suggest: These slash commands are deprecated, use bd prime hooks instead\n \n2. **No agent documentation**\n - Check if AGENTS.md or CLAUDE.md exists\n - Suggest: Run 'bd onboard' or 'bd setup claude' to document workflow\n \n3. **Old MCP-only pattern**\n - Check for instructions to use MCP tools but no bd prime hooks\n - Suggest: Add bd prime hooks for better token efficiency\n\n4. **Migration path**\n - Show: 'Run bd setup claude to add SessionStart/PreCompact hooks'\n - Show: 'Update AGENTS.md to reference bd prime instead of slash commands'\n\n## Example output\n\n⚠ Warning: Old beads integration detected in CLAUDE.md\n Found: /beads:* slash command references (deprecated)\n Recommend: Migrate to bd prime hooks for better token efficiency\n Fix: Run 'bd setup claude' and update CLAUDE.md\n\n💡 Tip: bd prime + hooks reduces token usage by 80-99% vs slash commands\n MCP mode: ~50 tokens vs ~10.5k for full MCP scan\n CLI mode: ~1-2k tokens with automatic context recovery\n\n## Benefits\n- Helps existing repos adopt new best practices\n- Clear migration path for users\n- Better token efficiency messaging","status":"open","priority":2,"issue_type":"feature","created_at":"2025-11-12T03:20:25.567748-08:00","updated_at":"2025-11-12T03:20:25.567748-08:00"}
{"id":"bd-0kai","title":"Work on beads-ocs: Thin shim hooks to eliminate version d...","description":"Work on beads-ocs: Thin shim hooks to eliminate version drift (GH#615). Replace full hook scripts with thin shims that call bd hooks run. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T22:57:22.91347-08:00","updated_at":"2025-12-20T00:49:51.926425-08:00","closed_at":"2025-12-19T23:24:08.828172-08:00","close_reason":"Implemented thin shim hooks to eliminate version drift (beads-ocs)"}
{"id":"bd-0oqz","title":"Add GetMoleculeProgress RPC endpoint","description":"New RPC endpoint to get detailed progress for a specific molecule. Returns: moleculeID, title, assignee, and list of steps with their status (done/current/ready/blocked), start/close times. Used when user expands a worker in the activity feed TUI.","status":"in_progress","priority":2,"issue_type":"feature","assignee":"beads/furiosa","created_at":"2025-12-23T16:26:38.137866-08:00","updated_at":"2025-12-23T18:16:31.60608-08:00"}
{"id":"bd-0oqz","title":"Add GetMoleculeProgress RPC endpoint","description":"New RPC endpoint to get detailed progress for a specific molecule. Returns: moleculeID, title, assignee, and list of steps with their status (done/current/ready/blocked), start/close times. Used when user expands a worker in the activity feed TUI.","status":"closed","priority":2,"issue_type":"feature","assignee":"beads/furiosa","created_at":"2025-12-23T16:26:38.137866-08:00","updated_at":"2025-12-23T18:27:49.033335-08:00","closed_at":"2025-12-23T18:27:49.033335-08:00","close_reason":"Implemented GetMoleculeProgress RPC endpoint"}
{"id":"bd-0vg","title":"Pinned issues: persistent context markers","description":"Add ability to pin issues so they remain visible and are excluded from work-finding commands. Pinned issues serve as persistent context markers (handoffs, architectural notes, recovery instructions) that should not be claimed as work items.\n\nUse Cases:\n1. Handoff messages - Pin session handoffs so new agents always see them\n2. Architecture decisions - Pin ADRs or design notes for reference \n3. Recovery context - Pin amnesia-cure notes that help agents orient\n\nCore commands: bd pin, bd unpin, bd list --pinned/--no-pinned","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-18T23:33:10.911092-08:00","updated_at":"2025-12-21T11:30:28.989696-08:00","closed_at":"2025-12-21T11:30:28.989696-08:00","close_reason":"All children complete - pinned issues feature fully implemented"}
{"id":"bd-0w5","title":"Fix update-hooks verification in version-bump.yaml","description":"The update-hooks task verification command at version-bump.yaml:358 always succeeds due to '|| echo ...' fallback. Remove the fallback so verification actually fails when hooks aren't installed.","status":"closed","priority":3,"issue_type":"bug","created_at":"2025-12-17T22:23:06.55467-08:00","updated_at":"2025-12-17T22:34:07.290409-08:00","closed_at":"2025-12-17T22:34:07.290409-08:00"}
{"id":"bd-0zp7","title":"Add missing hook calls in mail reply and ack","description":"The mail commands are missing hook calls:\n\n1. runMailReply (mail.go:525-672) creates a message but doesn't call hookRunner.Run(hooks.EventMessage, ...) after creating the reply in direct mode (around line 640)\n\n2. runMailAck (mail.go:432-523) closes messages but doesn't call hookRunner.Run(hooks.EventClose, ...) after closing each message (around line 487 for daemon mode, 493 for direct mode)\n\nThis means GGT hooks won't fire for replies or message acknowledgments.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-16T20:52:53.069412-08:00","updated_at":"2025-12-17T23:13:40.532054-08:00","closed_at":"2025-12-17T17:22:59.368024-08:00"}
@@ -44,7 +44,7 @@
{"id":"bd-3sz0","title":"Auto-repair stale merge driver configs with invalid placeholders","description":"Old bd versions (\u003c0.24.0) installed merge driver with invalid placeholders %L %R instead of %A %B. Add detection to bd doctor --fix: check if git config merge.beads.driver contains %L or %R, auto-repair to 'bd merge %A %O %A %B'. One-time migration for users who initialized with old versions.","status":"open","priority":2,"issue_type":"feature","created_at":"2025-11-21T23:16:10.762808-08:00","updated_at":"2025-11-21T23:16:28.892655-08:00","dependencies":[{"issue_id":"bd-3sz0","depends_on_id":"bd-tbz3","type":"parent-child","created_at":"2025-11-21T23:16:10.763612-08:00","created_by":"daemon","metadata":"{}"}]}
{"id":"bd-3uje","title":"Test issue for pin --for","description":"Testing the pin --for flag","status":"tombstone","priority":3,"issue_type":"task","assignee":"test-agent","created_at":"2025-12-22T02:53:43.075522-08:00","updated_at":"2025-12-22T02:54:07.973855-08:00","deleted_at":"2025-12-22T02:54:07.973855-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"bd-3x9o","title":"Merge: bd-by0d","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: bd-by0d\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T23:21:26.817906-08:00","updated_at":"2025-12-20T23:17:26.998785-08:00","closed_at":"2025-12-20T23:17:26.998785-08:00","close_reason":"Branches nuked, MRs obsolete"}
{"id":"bd-3zzh","title":"Merge: bd-tvu3","description":"branch: polecat/Beader\ntarget: main\nsource_issue: bd-tvu3\nrig: beads","status":"open","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:36:55.016496-08:00","updated_at":"2025-12-23T13:36:55.016496-08:00"}
{"id":"bd-3zzh","title":"Merge: bd-tvu3","description":"branch: polecat/Beader\ntarget: main\nsource_issue: bd-tvu3\nrig: beads","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:36:55.016496-08:00","updated_at":"2025-12-23T19:12:08.347363-08:00","closed_at":"2025-12-23T19:12:08.347363-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-401h","title":"Work on beads-7jl: Fix Windows installer file locking iss...","description":"Work on beads-7jl: Fix Windows installer file locking issue (GH#652). Close file handle before extraction in postinstall.js. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","assignee":"beads/rictus","created_at":"2025-12-19T22:55:57.873767-08:00","updated_at":"2025-12-19T23:20:05.747664-08:00","closed_at":"2025-12-19T23:20:05.747664-08:00","close_reason":"Fixed file handle closure race condition in postinstall.js"}
{"id":"bd-411u","title":"Document BEADS_DIR pattern for multi-agent workspaces (Gas Town)","description":"Gas Town and similar multi-agent systems need to configure separate beads databases per workspace/rig, distinct from any project-level beads.\n\n## Use Case\n\nIn Gas Town:\n- Each 'rig' (managed project) has multiple agents (polecats, refinery, witness)\n- All agents in a rig should share a single beads database at the rig level\n- This should be separate from any .beads/ the project itself uses\n- The BEADS_DIR env var enables this\n\n## Documentation Needed\n\n1. Add a section to docs explaining BEADS_DIR for multi-agent setups\n2. Example: setting BEADS_DIR in agent startup scripts/hooks\n3. Clarify interaction with project-level .beads/ (BEADS_DIR takes precedence)\n\n## Current Support\n\nAlready implemented in internal/beads/beads.go:FindDatabasePath():\n- BEADS_DIR env var is checked first (preferred)\n- BEADS_DB env var still supported (deprecated)\n- Falls back to .beads/ search in tree\n\nJust needs documentation for the multi-agent workspace pattern.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-15T22:08:22.158027-08:00","updated_at":"2025-12-15T22:08:22.158027-08:00"}
{"id":"bd-47tn","title":"Add bd daemon --stop-all command to kill all daemon processes","description":"Currently there's no easy way to stop all running bd daemon processes. Users must resort to pkill -f 'bd daemon' or similar shell commands.\n\nAdd a --stop-all flag to bd daemon that:\n1. Finds all running bd daemon processes (not just the current repo's daemon)\n2. Gracefully stops them all\n3. Reports how many were stopped\n\nThis is useful when:\n- Multiple daemons are running and causing race conditions\n- User wants a clean slate before running bd sync\n- Debugging daemon-related issues","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-13T06:34:45.080633-08:00","updated_at":"2025-12-16T01:14:49.501989-08:00","closed_at":"2025-12-14T17:33:03.057089-08:00"}
@@ -70,7 +70,7 @@
{"id":"bd-5b6e","title":"Add tests for helper functions (GetDirtyIssueHash, GetAllDependencyRecords, export hashes)","description":"Several utility functions have 0% coverage:\n- GetDirtyIssueHash (dirty.go)\n- GetAllDependencyRecords (dependencies.go)\n- GetExportHash, SetExportHash, ClearAllExportHashes (hash.go)\n\nThese are lower priority but should have basic coverage.","status":"open","priority":4,"issue_type":"task","created_at":"2025-11-01T22:40:58.989976-07:00","updated_at":"2025-11-01T22:40:58.989976-07:00"}
{"id":"bd-5hrq","title":"bd doctor: detect issues referenced in commits but still open","description":"Add a doctor check that finds 'orphaned' issues - ones referenced in git commit messages (e.g., 'fix bug (bd-xxx)') but still marked as open in beads.\n\n**Detection logic:**\n1. Get all open issue IDs from beads\n2. Parse git log for issue ID references matching pattern \\(prefix-[a-z0-9.]+\\)\n3. Report issues that appear in commits but are still open\n\n**Output:**\n⚠ Warning: N issues referenced in commits but still open\n bd-xxx: 'Issue title' (commit abc123)\n bd-yyy: 'Issue title' (commit def456)\n \n These may be implemented but not closed. Run 'bd show \u003cid\u003e' to check.\n\n**Implementation:**\n- Add check to doctor/checks.go\n- Use git log parsing (already have git utilities)\n- Match against configured issue_prefix","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-21T21:48:08.473165-08:00","updated_at":"2025-12-21T21:55:37.795109-08:00","closed_at":"2025-12-21T21:55:37.795109-08:00","close_reason":"Implemented CheckOrphanedIssues in git.go with 8 test cases. Detects issues referenced in commits (e.g., 'fix bug (bd-xxx)') that are still open. Shows warning with issue IDs and commit hashes."}
{"id":"bd-5qim","title":"Optimize GetReadyWork performance - 752ms on 10K database (target: \u003c50ms)","notes":"# Performance Analysis (10K Issue Database)\n\nAnalyzed using CPU profiles from benchmark suite on Apple M2 Pro.\n\n## Operation Performance\n\n| Operation | Time | Allocations | Memory |\n|----------------------------------|---------|-------------|--------|\n| bd ready (GetReadyWork) | ~752ms | 167,466 | 16MB |\n| bd list (SearchIssues no filter) | ~11.6ms | 89,214 | 5.8MB |\n| bd list (SearchIssues filtered) | ~9.2ms | 62,365 | 3.5MB |\n| bd create (CreateIssue) | ~2.6ms | 146 | 8.6KB |\n| bd update (UpdateIssue) | ~0.32ms | 364 | 15KB |\n| bd close (UpdateIssue) | ~0.32ms | 364 | 15KB |\n\n**Target: \u003c50ms for all operations on 10K database**\n\n**Current issue: GetReadyWork is 15x over target (752ms vs 50ms)**\n\n## Root Cause\n\nGetReadyWork (internal/storage/sqlite/ready.go:90-128) uses recursive CTE to propagate blocking:\n- 65x slower than SearchIssues\n- Recalculates entire blocked issue tree on every call\n- Algorithm:\n 1. Find directly blocked issues via 'blocks' dependencies\n 2. Recursively propagate blockage to descendants (max depth: 50)\n 3. Exclude all blocked issues from results\n\n## CPU Profile Analysis\n\n- Database syscalls (pthread_cond_signal, syscall6): ~75%\n- SQLite engine overhead: inherent to recursive CTE\n- Application code (query construction): \u003c1%\n\n**Bottleneck is the recursive CTE query execution, not application code.**\n\n## Optimization Recommendations\n\n### High Impact (Likely to achieve \u003c50ms target)\n\n1. **Cache blocked issue calculation**\n - Add `blocked_issues` table updated on dependency changes\n - Trade write complexity for read speed (ready called \u003e\u003e dependency changes)\n - Eliminates recursive CTE on every read\n\n2. **Add/verify database indexes**\n ```sql\n CREATE INDEX IF NOT EXISTS idx_dependencies_blocked \n ON dependencies(issue_id, type, depends_on_id);\n CREATE INDEX IF NOT EXISTS idx_issues_status \n ON issues(status);\n ```\n\n### Medium Impact\n\n3. **Reduce allocations** (167K allocations for GetReadyWork)\n - Profile `scanIssues()` for object pooling opportunities\n - Reuse slice capacity for repeated calls\n\n### Low Impact (Not recommended)\n- Query optimization for CRUD operations (already \u003c3ms)\n- Connection pooling tuning (not showing in profiles)\n\n## Verification\n\nRun benchmarks to validate optimization:\n```bash\nmake bench-quick\ngo tool pprof -http=:8080 internal/storage/sqlite/bench-cpu-*.prof\n```\n\nProfile files automatically generated in `internal/storage/sqlite/`.","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-11-14T09:02:46.507526-08:00","updated_at":"2025-12-17T23:13:40.534258-08:00","closed_at":"2025-12-17T16:21:37.918868-08:00"}
{"id":"bd-5rj1","title":"Merge: bd-gqxd","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: bd-gqxd\nrig: beads","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T16:40:21.707706-08:00","updated_at":"2025-12-23T16:40:21.707706-08:00"}
{"id":"bd-5rj1","title":"Merge: bd-gqxd","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: bd-gqxd\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T16:40:21.707706-08:00","updated_at":"2025-12-23T19:12:08.349245-08:00","closed_at":"2025-12-23T19:12:08.349245-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-66l4","title":"Runtime bonding: bd mol attach","description":"Attach a molecule to an already-running workflow.\n\nCOMMAND: bd mol attach \u003cepic-id\u003e \u003cproto\u003e [--after \u003cissue-id\u003e]\n\nBEHAVIOR:\n- Resolve running epic and proto\n- Spawn proto as new subtree\n- Wire to specified attachment point (or epic root)\n- Handle in-progress issues: new work doesn't block completed work\n\nUSE CASES:\n- Discovered need for docs while implementing feature\n- Hotfix needs attaching to release workflow\n- Additional testing scope identified mid-flight\n\nFLAGS:\n- --after ISSUE: Specific attachment point within epic\n- --type: sequential (default) or parallel\n- --var: Variables for the attached proto\n\nCONSIDERATIONS:\n- What if epic is already closed? Error or reopen?\n- What if attachment point issue is closed? Attach as ready-to-work?","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-21T00:59:16.920483-08:00","updated_at":"2025-12-21T01:08:43.530597-08:00","closed_at":"2025-12-21T01:08:43.530597-08:00","close_reason":"Merged into bd-o91r: bond command handles all bonding cases polymorphically","dependencies":[{"issue_id":"bd-66l4","depends_on_id":"bd-o5xe","type":"parent-child","created_at":"2025-12-21T00:59:51.435542-08:00","created_by":"daemon"},{"issue_id":"bd-66l4","depends_on_id":"bd-o91r","type":"blocks","created_at":"2025-12-21T00:59:51.813782-08:00","created_by":"daemon"}]}
{"id":"bd-66w1","title":"Add external_projects to config schema","description":"Add external_projects mapping to .beads/config.yaml:\n\n```yaml\nexternal_projects:\n beads: ../beads\n gastown: ../gastown\n other: /absolute/path/to/project\n```\n\nUsed by bd ready and other commands to resolve external: references.\n\nPart of cross-project dependency system.\nSee: gastown/docs/cross-project-deps.md","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T22:37:39.245017-08:00","updated_at":"2025-12-21T23:03:19.81448-08:00","closed_at":"2025-12-21T23:03:19.81448-08:00","close_reason":"Added external_projects to config schema with GetExternalProjects() and ResolveExternalProjectPath() functions, tests, and documentation"}
{"id":"bd-687g","title":"Code review: mol squash deletion bypasses tombstone system","description":"The deleteEphemeralChildren function in mol_squash.go uses DeleteIssue directly instead of the proper deletion flow. This bypasses tombstone creation, deletion tracking (deletions.jsonl), and dependency cleanup. Could cause issues with deletion propagation across clones.\n\nCurrent code uses d.DeleteIssue(ctx, id) but should probably use d.DeleteIssues(ctx, ids, false, true, false) for proper tombstone handling.\n\nAlternative: Document that ephemeral issues intentionally use hard delete since they are transient and should never propagate to other clones anyway.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-21T13:57:20.223345-08:00","updated_at":"2025-12-21T14:17:38.073899-08:00","closed_at":"2025-12-21T14:17:38.073899-08:00","close_reason":"Implemented ephemeral issue filtering from JSONL export and fixed comments leak in DeleteIssue"}
@@ -88,7 +88,7 @@
{"id":"bd-70an","title":"test pin","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-21T11:19:16.760214-08:00","updated_at":"2025-12-21T11:19:46.500688-08:00","closed_at":"2025-12-21T11:19:46.500688-08:00","close_reason":"test issue for pin fix"}
{"id":"bd-746","title":"Fix resolvePartialID stub in workflow.go","description":"The resolvePartialID function at workflow.go:921-925 is a stub that just returns the ID unchanged. Should use utils.ResolvePartialID for proper partial ID resolution in direct mode (non-daemon).","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-17T22:22:57.586917-08:00","updated_at":"2025-12-17T22:34:07.270168-08:00","closed_at":"2025-12-17T22:34:07.270168-08:00"}
{"id":"bd-74w1","title":"Consolidate duplicate path-finding utilities (findJSONLPath, findBeadsDir, findGitRoot)","description":"Code health review found these functions defined in multiple places:\n\n- findJSONLPath() in autoflush.go:45-73 and doctor/fix/migrate.go\n- findBeadsDir() in autoimport.go:197-239 (with git worktree handling)\n- findGitRoot() in autoimport.go:242-269 (Windows path conversion)\n\nThe beads package has public FindBeadsDir() and FindJSONLPath() APIs that should be used consistently.\n\nImpact: Bug fixes need to be applied in multiple places. Git worktree handling may not be replicated everywhere.\n\nFix: Consolidate all implementations to use the beads package APIs. Remove duplicates.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T18:17:16.694293-08:00","updated_at":"2025-12-22T21:13:46.83103-08:00","closed_at":"2025-12-22T21:13:46.83103-08:00","close_reason":"Consolidated duplicate path-finding utilities: findGitRoot() now delegates to git.GetRepoRoot(), findBeadsDir() replaced with beads.FindBeadsDir() across 8 files"}
{"id":"bd-754r","title":"Merge: bd-thgk","description":"branch: polecat/Compactor\ntarget: main\nsource_issue: bd-thgk\nrig: beads","status":"open","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:41:43.965771-08:00","updated_at":"2025-12-23T13:41:43.965771-08:00"}
{"id":"bd-754r","title":"Merge: bd-thgk","description":"branch: polecat/Compactor\ntarget: main\nsource_issue: bd-thgk\nrig: beads","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:41:43.965771-08:00","updated_at":"2025-12-23T19:12:08.345449-08:00","closed_at":"2025-12-23T19:12:08.345449-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-77gm","title":"Import reports misleading '0 created, 0 updated' when actually importing all issues","description":"When running 'bd import' on a fresh database (no existing issues), the command reports 'Import complete: 0 created, 0 updated' even though it successfully imported all issues from the JSONL file.\n\n**Steps to reproduce:**\n1. Delete .beads/beads.db\n2. Run: bd import .beads/issues.jsonl\n3. Observe output: 'Import complete: 0 created, 0 updated'\n4. Run: bd list\n5. Confirm: All issues are actually present in the database\n\n**Expected behavior:**\nReport the actual number of issues imported, e.g., 'Import complete: 523 created, 0 updated'\n\n**Actual behavior:**\n'Import complete: 0 created, 0 updated' (misleading - makes user think import failed)\n\n**Impact:**\n- Users think import failed when it succeeded\n- Confusing during database sync operations (e.g., after git pull)\n- Makes debugging harder (can't tell if import actually worked)\n\n**Context:**\nDiscovered during VC session when syncing database after git pull. The misleading message caused confusion about whether the database was properly synced with the canonical JSONL file.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-11-09T16:20:13.191156-08:00","updated_at":"2025-12-21T21:13:27.057292-08:00","closed_at":"2025-12-21T21:13:27.057292-08:00","close_reason":"Already fixed in commit 196ce3a6 - added validation for positional arguments"}
{"id":"bd-7b7h","title":"bd sync --merge fails due to chicken-and-egg: .beads/ always dirty","description":"## Problem\n\nWhen sync.branch is configured (e.g., beads-sync), the bd sync workflow creates a chicken-and-egg problem:\n\n1. `bd sync` commits changes to beads-sync via worktree\n2. `bd sync` copies JSONL to main working dir via `copyJSONLToMainRepo()` (sync.go line 364, worktree.go line 678-685)\n3. The copy is NOT committed to main - it just updates the working tree\n4. `bd sync --merge` checks for clean working dir (sync.go line 1547-1548)\n5. `bd sync --merge` FAILS because .beads/issues.jsonl is uncommitted!\n\n## Impact\n\n- sync.branch workflow is fundamentally broken\n- Users cannot periodically merge beads-sync → main\n- Main branch always shows as dirty\n- Creates confusion about git state\n\n## Root Cause\n\nsync.go:1547-1548:\n```go\nif len(strings.TrimSpace(string(statusOutput))) \u003e 0 {\n return fmt.Errorf(\"main branch has uncommitted changes, please commit or stash them first\")\n}\n```\n\nThis check blocks merge when ANY uncommitted changes exist, including the .beads/ changes that `bd sync` itself created.\n\n## Proposed Fix\n\nOption A: Exclude .beads/ from the clean check in `mergeSyncBranch`:\n```go\n// Check if there are non-beads uncommitted changes\nstatusCmd := exec.CommandContext(ctx, \"git\", \"status\", \"--porcelain\", \"--\", \":!.beads/\")\n```\n\nOption B: Auto-stash .beads/ changes before merge, restore after\n\nOption C: Change the workflow - do not copy JSONL to main working dir, instead always read from worktree\n\n## Files to Modify\n\n- cmd/bd/sync.go:1540-1549 (mergeSyncBranch function)\n- Possibly internal/syncbranch/worktree.go (copyJSONLToMainRepo)","notes":"## Fix Implemented\n\nModified cmd/bd/sync.go mergeSyncBranch function:\n\n1. **Exclude .beads/ from dirty check** (line 1543):\n Changed `git status --porcelain` to `git status --porcelain -- :!.beads/`\n This allows merge to proceed when only .beads/ has uncommitted changes.\n\n2. **Restore .beads/ to HEAD before merge** (lines 1553-1561):\n Added `git checkout HEAD -- .beads/` before merge to prevent\n \"Your local changes would be overwritten by merge\" errors.\n The .beads/ changes are redundant since they came FROM beads-sync.\n\n## Testing\n\n- All cmd/bd sync/merge tests pass\n- All internal/syncbranch tests pass\n- Manual verification needed for full workflow","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-16T23:06:06.97703-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":"bug"}
{"id":"bd-7bbc4e6a","title":"Add MCP server functions for repair commands","description":"**Summary:** Added MCP server repair functions for agent dependency management, system validation, and pollution detection. Implemented across BdClientBase, BdCliClient, and daemon clients to enhance system diagnostics and self-healing capabilities.\n\n**Key Decisions:** \n- Expose repair_deps(), detect_pollution(), validate() via MCP server\n- Create abstract method stubs with fallback to CLI execution\n- Use @mcp.tool decorators for function registration\n\n**Resolution:** Successfully implemented comprehensive repair command infrastructure, enabling more robust system health monitoring and automated remediation with full CLI and daemon support.","notes":"Implemented all three MCP server functions:\n\n1. **repair_deps(fix=False)** - Find/fix orphaned dependencies\n2. **detect_pollution(clean=False)** - Detect/clean test issues \n3. **validate(checks=None, fix_all=False)** - Run comprehensive health checks\n\nChanges:\n- Added abstract methods to BdClientBase\n- Implemented in BdCliClient (CLI execution)\n- Added NotImplementedError stubs in BdDaemonClient (falls back to CLI)\n- Created wrapper functions in tools.py\n- Registered @mcp.tool decorators in server.py\n\nAll commands tested and working with --no-daemon flag.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-10-28T19:37:55.72639-07:00","updated_at":"2025-12-16T01:08:11.983953-08:00","closed_at":"2025-11-07T19:38:12.152437-08:00"}
@@ -133,7 +133,7 @@
{"id":"bd-aks","title":"Add tests for import/export functionality","description":"Import/export functions like ImportIssues, exportToJSONLWithStore, and AutoImportIfNewer have low coverage. These are critical for data integrity and multi-repo synchronization.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T07:00:53.067006711-07:00","updated_at":"2025-12-19T09:54:57.011374404-07:00","closed_at":"2025-12-18T10:13:11.821944156-07:00","dependencies":[{"issue_id":"bd-aks","depends_on_id":"bd-6ss","type":"discovered-from","created_at":"2025-12-18T07:00:53.07185201-07:00","created_by":"matt"}]}
{"id":"bd-an4s","title":"Version Bump: 0.32.1","description":"Release checklist for version 0.32.1. Patch release with MCP output control params and pin field fix.","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-20T21:53:01.315592-08:00","updated_at":"2025-12-20T21:57:13.909864-08:00","closed_at":"2025-12-20T21:57:13.909864-08:00","close_reason":"Version 0.32.1 released"}
{"id":"bd-ao0s","title":"bd graph crashes with --no-daemon on closed issues","description":"The `bd graph` command panics with nil pointer dereference when using `--no-daemon` flag on an issue with closed children.\n\n**Reproduction:**\n```bash\nbd graph bd-qqc --no-daemon\n# panic: runtime error: invalid memory address or nil pointer dereference\n# in main.computeDependencyCounts\n```\n\n**Stack trace:**\n```\npanic: runtime error: invalid memory address or nil pointer dereference\n[signal SIGSEGV: segmentation violation code=0x2 addr=0x20 pc=0x1010bdfb0]\n\ngoroutine 1 [running]:\nmain.computeDependencyCounts(...)\n /Users/stevey/gt/beads/crew/emma/cmd/bd/graph.go:428\nmain.renderGraph(0x1400033bb80, 0x0)\n /Users/stevey/gt/beads/crew/emma/cmd/bd/graph.go:307 +0x300\n```\n\n**Location:** cmd/bd/graph.go:428 - computeDependencyCounts() not handling nil case","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-18T22:57:36.972585-08:00","updated_at":"2025-12-20T01:13:29.206821-08:00","closed_at":"2025-12-20T01:13:29.206821-08:00","close_reason":"Fixed: pass subgraph instead of nil to renderGraph"}
{"id":"bd-aq3s","title":"Merge: bd-u2sc.3","description":"branch: polecat/Modular\ntarget: main\nsource_issue: bd-u2sc.3\nrig: beads","status":"open","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T13:47:14.281479-08:00","updated_at":"2025-12-23T13:47:14.281479-08:00"}
{"id":"bd-aq3s","title":"Merge: bd-u2sc.3","description":"branch: polecat/Modular\ntarget: main\nsource_issue: bd-u2sc.3\nrig: beads","status":"closed","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T13:47:14.281479-08:00","updated_at":"2025-12-23T19:12:08.354548-08:00","closed_at":"2025-12-23T19:12:08.354548-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-au0","title":"Command Set Standardization \u0026 Flag Consistency","description":"Comprehensive improvements to bd command set based on 2025 audit findings.\n\n## Background\nSee docs/command-audit-2025.md for detailed analysis.\n\n## Goals\n1. Standardize flag naming and behavior across all commands\n2. Add missing flags for feature parity\n3. Fix naming confusion\n4. Improve consistency in JSON output\n\n## Success Criteria\n- All mutating commands support --dry-run (no --preview variants)\n- bd update supports label operations\n- bd search has filter parity with bd list\n- Priority flags accept both int and P0-P4 format everywhere\n- JSON output is consistent across all commands","status":"open","priority":2,"issue_type":"epic","created_at":"2025-11-21T21:05:55.672749-05:00","updated_at":"2025-11-21T21:05:55.672749-05:00"}
{"id":"bd-au0.10","title":"Add global verbosity flags (--verbose, --quiet)","description":"Add consistent verbosity controls across all commands.\n\n**Current state:**\n- bd init has --quiet flag\n- No other commands have verbosity controls\n- Debug output controlled by BD_VERBOSE env var\n\n**Proposal:**\nAdd persistent flags:\n- --verbose / -v: Enable debug output\n- --quiet / -q: Suppress non-essential output\n\n**Implementation:**\n- Add to rootCmd.PersistentFlags()\n- Replace BD_VERBOSE checks with flag checks\n- Standardize output levels:\n * Quiet: Errors only\n * Normal: Errors + success messages\n * Verbose: Errors + success + debug info\n\n**Files to modify:**\n- cmd/bd/main.go (add flags)\n- internal/debug/debug.go (respect flags)\n- Update all commands to respect quiet mode\n\n**Testing:**\n- Verify --verbose shows debug output\n- Verify --quiet suppresses normal output\n- Ensure errors always show regardless of mode","status":"open","priority":3,"issue_type":"task","created_at":"2025-11-21T21:08:21.600209-05:00","updated_at":"2025-11-21T21:08:21.600209-05:00","dependencies":[{"issue_id":"bd-au0.10","depends_on_id":"bd-au0","type":"parent-child","created_at":"2025-11-21T21:08:21.602557-05:00","created_by":"daemon","metadata":"{}"}]}
{"id":"bd-au0.5","title":"Add date and priority filters to bd search","description":"Add date and priority filters to bd search for parity with bd list.\n\n## Current State\nbd search supports: --status, --type, --assignee, --label, --limit\nbd list supports: all of the above PLUS date ranges and priority filters\n\n## Filters to Add\n\n### Priority Filters\n```bash\nbd search \"query\" --priority 1 # Exact priority\nbd search \"query\" --priority-min 0 # P0 and above (higher priority)\nbd search \"query\" --priority-max 2 # P2 and below (lower priority)\n```\n\n### Date Filters\n```bash\nbd search \"query\" --created-after 2025-01-01\nbd search \"query\" --created-before 2025-12-31\nbd search \"query\" --updated-after 2025-01-01\nbd search \"query\" --closed-after 2025-01-01\n```\n\n### Content Filters\n```bash\nbd search \"query\" --desc-contains \"bug\"\nbd search \"query\" --notes-contains \"todo\"\nbd search \"query\" --empty-description # Issues with no description\nbd search \"query\" --no-assignee # Unassigned issues\nbd search \"query\" --no-labels # Issues without labels\n```\n\n## Files to Modify\n\n### 1. cmd/bd/search.go\nAdd flag definitions in init():\n```go\nsearchCmd.Flags().IntP(\"priority\", \"p\", -1, \"Filter by exact priority (0-4)\")\nsearchCmd.Flags().Int(\"priority-min\", -1, \"Filter by minimum priority\")\nsearchCmd.Flags().Int(\"priority-max\", -1, \"Filter by maximum priority\")\nsearchCmd.Flags().String(\"created-after\", \"\", \"Filter by creation date (YYYY-MM-DD)\")\nsearchCmd.Flags().String(\"created-before\", \"\", \"Filter by creation date\")\nsearchCmd.Flags().String(\"updated-after\", \"\", \"Filter by update date\")\nsearchCmd.Flags().String(\"updated-before\", \"\", \"Filter by update date\")\nsearchCmd.Flags().String(\"closed-after\", \"\", \"Filter by close date\")\nsearchCmd.Flags().String(\"closed-before\", \"\", \"Filter by close date\")\nsearchCmd.Flags().String(\"desc-contains\", \"\", \"Filter by description content\")\nsearchCmd.Flags().String(\"notes-contains\", \"\", \"Filter by notes content\")\nsearchCmd.Flags().Bool(\"empty-description\", false, \"Filter issues with empty description\")\nsearchCmd.Flags().Bool(\"no-assignee\", false, \"Filter unassigned issues\")\nsearchCmd.Flags().Bool(\"no-labels\", false, \"Filter issues without labels\")\n```\n\n### 2. internal/rpc/protocol.go\nUpdate SearchArgs struct:\n```go\ntype SearchArgs struct {\n Query string\n Filter types.IssueFilter\n // Already has most fields via IssueFilter\n}\n```\n\nNote: types.IssueFilter already has these fields - just need to wire them up!\n\n### 3. cmd/bd/search.go Run function\nParse flags and populate filter:\n```go\nif priority, _ := cmd.Flags().GetInt(\"priority\"); priority \u003e= 0 {\n filter.Priority = \u0026priority\n}\nif createdAfter, _ := cmd.Flags().GetString(\"created-after\"); createdAfter != \"\" {\n t, err := time.Parse(\"2006-01-02\", createdAfter)\n if err != nil {\n FatalError(\"invalid date format for --created-after: %v\", err)\n }\n filter.CreatedAfter = \u0026t\n}\n// ... similar for other flags\n```\n\n## Implementation Steps\n\n1. **Check types.IssueFilter** - verify all needed fields exist\n2. **Add flags to search.go** init()\n3. **Parse flags** in Run function\n4. **Pass to SearchIssues** via filter\n5. **Test all combinations**\n\n## Testing\n```bash\n# Create test issues\nbd create \"Test P1\" -p 1\nbd create \"Test P2\" -p 2 --description \"Has description\"\n\n# Test filters\nbd search \"\" --priority 1\nbd search \"\" --priority-min 0 --priority-max 1\nbd search \"\" --empty-description\nbd search \"\" --desc-contains \"description\"\n```\n\n## Success Criteria\n- All filters work in both direct and daemon mode\n- Date parsing handles YYYY-MM-DD format\n- --json output includes filtered results\n- Help text documents all new flags","status":"closed","priority":1,"issue_type":"task","assignee":"beads/Searcher","created_at":"2025-11-21T21:07:05.496726-05:00","updated_at":"2025-12-23T13:38:28.475606-08:00","closed_at":"2025-12-23T13:38:28.475606-08:00","close_reason":"Implemented all date, priority, and content filters for bd search","dependencies":[{"issue_id":"bd-au0.5","depends_on_id":"bd-au0","type":"parent-child","created_at":"2025-11-21T21:07:05.497762-05:00","created_by":"daemon","metadata":"{}"},{"issue_id":"bd-au0.5","depends_on_id":"bd-iz5t","type":"parent-child","created_at":"2025-12-23T12:44:07.657303-08:00","created_by":"daemon"}]}
@@ -157,8 +157,8 @@
{"id":"bd-bgm","title":"Fix unparam unused parameter in cmd/bd/doctor.go:1879","description":"Linting issue: checkGitHooks - path is unused (unparam) at cmd/bd/doctor.go:1879:20. Error: func checkGitHooks(path string) doctorCheck {","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-07T15:35:25.270293252-07:00","updated_at":"2025-12-17T23:13:40.532991-08:00","closed_at":"2025-12-17T16:46:11.026693-08:00"}
{"id":"bd-bgr","title":"Test stdin 2","description":"Description from stdin test\n","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-17T17:28:05.41434-08:00","updated_at":"2025-12-17T17:28:33.833288-08:00","closed_at":"2025-12-17T17:28:33.833288-08:00"}
{"id":"bd-bha9","title":"Add missing updated_at index on issues table","description":"GetStaleIssues queries filter by updated_at but there's no index on this column.\n\n**Current query (ready.go:253-254):**\n```sql\nWHERE status != 'closed'\n AND datetime(updated_at) \u003c datetime('now', '-' || ? || ' days')\n```\n\n**Problem:** Full table scan when filtering stale issues.\n\n**Solution:** Add migration to create:\n```sql\nCREATE INDEX IF NOT EXISTS idx_issues_updated_at ON issues(updated_at);\n```\n\n**Note:** The datetime() function wrapper may prevent index usage. Consider also storing updated_at as INTEGER (unix timestamp) for better index efficiency, or test if SQLite can use the index despite the function.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-22T22:58:49.166051-08:00","updated_at":"2025-12-22T23:15:13.837078-08:00","closed_at":"2025-12-22T23:15:13.837078-08:00","close_reason":"Implemented in migration 026_additional_indexes.go","dependencies":[{"issue_id":"bd-bha9","depends_on_id":"bd-h0we","type":"discovered-from","created_at":"2025-12-22T22:58:49.166949-08:00","created_by":"daemon"}]}
{"id":"bd-bhg7","title":"Merge: bd-io8c","description":"branch: polecat/Syncer\ntarget: main\nsource_issue: bd-io8c\nrig: beads","status":"open","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:46:46.954667-08:00","updated_at":"2025-12-23T13:46:46.954667-08:00"}
{"id":"bd-bijf","title":"Merge: bd-l13p","description":"branch: polecat/nux\ntarget: main\nsource_issue: bd-l13p\nrig: beads","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T16:41:32.467246-08:00","updated_at":"2025-12-23T16:41:32.467246-08:00"}
{"id":"bd-bhg7","title":"Merge: bd-io8c","description":"branch: polecat/Syncer\ntarget: main\nsource_issue: bd-io8c\nrig: beads","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:46:46.954667-08:00","updated_at":"2025-12-23T19:12:08.34433-08:00","closed_at":"2025-12-23T19:12:08.34433-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-bijf","title":"Merge: bd-l13p","description":"branch: polecat/nux\ntarget: main\nsource_issue: bd-l13p\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T16:41:32.467246-08:00","updated_at":"2025-12-23T19:12:08.348252-08:00","closed_at":"2025-12-23T19:12:08.348252-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-bqcc","title":"Consolidate maintenance commands into bd doctor --fix","description":"Per rsnodgrass in GH#692:\n\u003e \"The biggest improvement to beads from an ergonomics perspective would be to prune down commands. We have a lot of 'maintenance' commands that probably should just be folded into 'bd doctor --fix' automatically.\"\n\nCurrent maintenance commands that could be consolidated:\n- clean - Clean up temporary git merge artifacts\n- cleanup - Delete closed issues and prune expired tombstones\n- compact - Compact old closed issues\n- detect-pollution - Detect and clean test issues\n- migrate-* (5 commands) - Various migration utilities\n- repair-deps - Fix orphaned dependency references\n- validate - Database health checks\n\nProposal:\n1. Make `bd doctor` the single entry point for health checks\n2. Add `bd doctor --fix` to auto-fix common issues\n3. Deprecate (but keep working) individual commands\n4. Add `bd doctor --all` for comprehensive maintenance\n\nThis would reduce cognitive load for users - they just need to remember 'bd doctor'.\n\nNote: This is higher impact but also higher risk - needs careful design to avoid breaking existing workflows.","status":"closed","priority":2,"issue_type":"feature","assignee":"beads/capable","created_at":"2025-12-22T14:27:31.466556-08:00","updated_at":"2025-12-23T01:33:25.732363-08:00","closed_at":"2025-12-23T01:33:25.732363-08:00","close_reason":"Merged to main"}
{"id":"bd-bs5j","title":"Release v0.33.2","description":"Version bump workflow for beads release 0.33.2.\n\n## Variables\n- `0.33.2` - The new version number (e.g., 0.31.0)\n- `2025-12-21` - Release date (YYYY-MM-DD format)\n\n## Workflow Steps\n1. Kill running daemons\n2. Run tests and linting\n3. Bump version in all files (10 files total)\n4. Update cmd/bd/info.go with release notes\n5. Commit and push version bump\n6. Create and push git tag\n7. Update Homebrew formula\n8. Upgrade local Homebrew installation\n9. Verify installation\n\n## Files Updated by bump-version.sh\n- cmd/bd/version.go\n- .claude-plugin/plugin.json\n- .claude-plugin/marketplace.json\n- integrations/beads-mcp/pyproject.toml\n- integrations/beads-mcp/src/beads_mcp/__init__.py\n- README.md\n- npm-package/package.json\n- cmd/bd/templates/hooks/* (4 files)\n- CHANGELOG.md\n\n## Manual Step Required\n- cmd/bd/info.go - Add versionChanges entry with release notes","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-21T16:10:13.759062-08:00","updated_at":"2025-12-21T17:29:31.791368-08:00","deleted_at":"2025-12-21T17:29:31.791368-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic","wisp":true}
{"id":"bd-bw6","title":"Fix G104 errors unhandled in internal/storage/sqlite/queries.go:1181","description":"Linting issue: G104: Errors unhandled (gosec) at internal/storage/sqlite/queries.go:1181:4. Error: rows.Close()","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-07T15:35:09.008444133-07:00","updated_at":"2025-12-17T23:13:40.536627-08:00","closed_at":"2025-12-17T16:46:11.029355-08:00"}
@@ -220,7 +220,7 @@
{"id":"bd-f616","title":"Digest: Version Bump: test-squash","description":"## Molecule Execution Summary\n\n**Molecule**: Version Bump: test-squash\n**Steps**: 8\n\n**Completed**: 0/8\n\n---\n\n### Steps\n\n1. **[open]** Verify release artifacts\n Check GitHub releases page - binaries for darwin/linux/windows should be available\n\n2. **[open]** Commit and push release\n git add -A \u0026\u0026 git commit \u0026\u0026 git push to trigger CI\n\n3. **[open]** Update CHANGELOG.md with release notes\n Add meaningful release notes to CHANGELOG.md describing what changed in test-squash\n\n4. **[open]** Wait for CI to pass\n Monitor GitHub Actions - all checks must pass before release artifacts are built\n\n5. **[open]** Restart running daemons\n Kill and restart any running bd daemons to pick up new version: pkill -f 'bd daemon' \u0026\u0026 bd daemon --start\n\n6. **[open]** Update local installation\n Run install script or brew upgrade to get new version locally: curl -fsSL .../install.sh | bash\n\n7. **[open]** Run bump-version.sh test-squash\n Run ./scripts/bump-version.sh test-squash to update version in all files\n\n8. **[open]** Update info.go versionChanges\n Add entry to versionChanges in cmd/bd/info.go with agent-actionable changes for test-squash\n\n","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T13:53:18.471919-08:00","updated_at":"2025-12-21T13:53:35.256043-08:00","close_reason":"Squashed from 8 ephemeral steps","deleted_at":"2025-12-21T13:53:35.256043-08:00","deleted_by":"stevey","delete_reason":"manual delete","original_type":"task"}
{"id":"bd-f7p1","title":"Add tests for mol spawn --attach","description":"Code review (bd-obep) found no tests for the spawn --attach functionality.\n\n**Test cases needed:**\n1. Basic attach - spawn proto with one --attach\n2. Multiple attachments - spawn with --attach A --attach B\n3. Attach types - verify sequential vs parallel bonding\n4. Error case: attaching non-proto (missing template label)\n5. Variable aggregation - vars from primary + attachments combined\n6. Dry-run output includes attachment info\n\n**Implementation notes:**\n- Tests should use in-memory storage\n- Create test protos, spawn with attachments, verify dependency structure\n- Check that sequential uses 'blocks' type, parallel uses 'parent-child'","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-21T10:58:16.766461-08:00","updated_at":"2025-12-21T21:33:12.136215-08:00","closed_at":"2025-12-21T21:33:12.136215-08:00","close_reason":"Added 6 tests for mol spawn --attach: basic attach, multiple attachments, sequential/parallel bond types, non-proto validation, variable aggregation, and dry-run output","dependencies":[{"issue_id":"bd-f7p1","depends_on_id":"bd-obep","type":"discovered-from","created_at":"2025-12-21T10:58:16.767616-08:00","created_by":"daemon"}]}
{"id":"bd-fa2h","title":"🤝 HANDOFF: v0.31.0 released, molecules discussion","description":"Session completed 0.31.0 release and had important molecules discussion.\n\n## Completed\n- v0.31.0 released (deferred status, audit trail, directory labels, etc.)\n- Fixed lint issues, hook version markers, codesigning\n- All CI green, artifacts verified\n\n## Filed Issues\n- bd-usro: Rename template instantiate → bd mol bond\n- bd-y8bj: Auto-detect identity for bd mail (P1 bug)\n- gt-975: Molecule execution support for polecats/crew\n- gt-976: Crew lifecycle support in Deacon\n\n## Key Insight\nMolecules are the future - TodoWrite is ephemeral, molecules are persistent institutional memory on the world chain. I tried to use TodoWrite for version bump and missed steps (codesigning, MCP verification). Molecules would have caught this.\n\n## Next Steps\n- bd mol bond implementation is priority\n- Max has gt-976 for crew lifecycle (enables automated refresh mid-molecule)\n\nCheck bd ready and gt-975/976 status.","status":"closed","priority":2,"issue_type":"message","assignee":"beads/crew/dave","created_at":"2025-12-20T17:23:09.889562-08:00","updated_at":"2025-12-21T17:52:18.467069-08:00","closed_at":"2025-12-21T17:52:18.467069-08:00","close_reason":"Stale handoff message - work completed","sender":"Steve Yegge","wisp":true}
{"id":"bd-fcl1","title":"Merge: bd-au0.5","description":"branch: polecat/Searcher\ntarget: main\nsource_issue: bd-au0.5\nrig: beads","status":"open","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:39:11.946667-08:00","updated_at":"2025-12-23T13:39:11.946667-08:00"}
{"id":"bd-fcl1","title":"Merge: bd-au0.5","description":"branch: polecat/Searcher\ntarget: main\nsource_issue: bd-au0.5\nrig: beads","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:39:11.946667-08:00","updated_at":"2025-12-23T19:12:08.346454-08:00","closed_at":"2025-12-23T19:12:08.346454-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-ffjt","title":"Unify template.go and mol.go under bd mol","description":"Consolidate the two DAG-template systems into one under the mol command. mol.go (on rictus branch) has the right UX (catalog/show/bond), template.go has the mechanics. Merge them, deprecate bd template commands.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T23:52:13.208972-08:00","updated_at":"2025-12-21T00:01:59.283765-08:00","closed_at":"2025-12-21T00:01:59.283765-08:00","close_reason":"Implemented mol commands with deprecation for template commands"}
{"id":"bd-fgw3","title":"Update local installation","description":"Run install script or brew upgrade to get new version locally: curl -fsSL .../install.sh | bash","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T22:56:05.052016-08:00","updated_at":"2025-12-20T00:49:51.928221-08:00","closed_at":"2025-12-20T00:25:52.805029-08:00","dependencies":[{"issue_id":"bd-fgw3","depends_on_id":"bd-6s61","type":"parent-child","created_at":"2025-12-19T22:56:15.248427-08:00","created_by":"daemon"},{"issue_id":"bd-fgw3","depends_on_id":"bd-si4g","type":"blocks","created_at":"2025-12-19T22:56:23.497325-08:00","created_by":"daemon"}]}
{"id":"bd-fi05","title":"bd sync fails with orphaned issues and duplicate ID conflict","description":"After fixing the deleted_at TEXT column scanning bug (commit 18b1eb2), bd sync still fails with two issues:\n\n1. Orphan Detection Warning: 12 orphaned child issues whose parents no longer exist (bd-cb64c226.* and bd-cbed9619.*)\n\n2. Import Failure: UNIQUE constraint failed for bd-360 - this tombstone exists in both DB and JSONL\n\nError: \"Import failed: error creating depth-0 issues: bulk insert issues: failed to insert issue bd-360: sqlite3: constraint failed: UNIQUE constraint failed: issues.id\"\n\nFix options:\n- Delete orphaned child issues with bd delete\n- Resolve bd-360 duplicate (in deletions.jsonl vs tombstone in DB)\n- Reset sync branch: git branch -f beads-sync main \u0026\u0026 git push --force-with-lease origin beads-sync","notes":"Fixed tombstone constraint violation bug. When deleting closed issues, the CHECK constraint (status = 'closed') = (closed_at IS NOT NULL) was violated because CreateTombstone didn't clear closed_at. Fix: set closed_at = NULL in tombstone creation SQL.\n\nThe sync data corruption (orphaned issues in beads-sync branch) requires manual cleanup: reset sync branch with 'git branch -f beads-sync main \u0026\u0026 git push --force-with-lease origin beads-sync'","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-13T07:14:33.831346-08:00","updated_at":"2025-12-13T10:50:48.545465-08:00","closed_at":"2025-12-13T07:30:33.843986-08:00"}
@@ -231,13 +231,13 @@
{"id":"bd-fy4q","title":"Phase 1.2 follow-up: Clarify format storage","description":"Phase 1.2 created the bdt executable structure but issues.toon is currently stored in JSONL format, not TOON format.\n\nThis is intentional for now:\n- Phase 1.2 (bd-jv4w): Just infrastructure - separate binary, separate directory\n- Phase 1.3 (bd-j0tr): Implement actual TOON encoding/writing\n\nFor now, keep as-is: filename '.toon' signals intent, content is JSONL (interim format). Phase 1.3 will switch to actual TOON.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-19T14:03:19.491040345-07:00","updated_at":"2025-12-19T14:03:19.491040345-07:00","dependencies":[{"issue_id":"bd-fy4q","depends_on_id":"bd-jv4w","type":"discovered-from","created_at":"2025-12-19T14:03:19.498933555-07:00","created_by":"daemon"}]}
{"id":"bd-g4b4","title":"bd close hooks: context check and notifications","description":"Add hook system to bd close for notifications and custom actions.\n\n## Scope (MVP)\n\nImplement **command hooks only** for bd close. Deferred: notify, webhook types.\n\n## Implementation\n\n### 1. Config Schema\n\nAdd to internal/configfile/config.go:\n\n```go\ntype HooksConfig struct {\n OnClose []HookEntry `yaml:\"on_close,omitempty\"`\n}\n\ntype HookEntry struct {\n Command string `yaml:\"command\"` // Shell command to run\n Name string `yaml:\"name,omitempty\"` // Optional display name\n}\n```\n\nAdd `Hooks HooksConfig` field to Config struct.\n\n### 2. Hook Execution\n\nCreate internal/hooks/close_hooks.go:\n\n```go\nfunc RunCloseHooks(ctx context.Context, cfg *configfile.Config, issue *types.Issue) error {\n for _, hook := range cfg.Hooks.OnClose {\n cmd := exec.CommandContext(ctx, \"sh\", \"-c\", hook.Command)\n cmd.Env = append(os.Environ(),\n \"BEAD_ID=\"+issue.ID,\n \"BEAD_TITLE=\"+issue.Title,\n \"BEAD_TYPE=\"+string(issue.IssueType),\n \"BEAD_PRIORITY=\"+strconv.Itoa(issue.Priority),\n \"BEAD_CLOSE_REASON=\"+issue.CloseReason,\n )\n cmd.Stdout = os.Stdout\n cmd.Stderr = os.Stderr\n if err := cmd.Run(); err \\!= nil {\n // Log warning but dont fail the close\n fmt.Fprintf(os.Stderr, \"Warning: close hook %q failed: %v\\n\", hook.Name, err)\n }\n }\n return nil\n}\n```\n\n### 3. Integration Point\n\nIn cmd/bd/close.go, after successful close:\n\n```go\n// Run close hooks\nif cfg := configfile.Load(); cfg \\!= nil {\n hooks.RunCloseHooks(ctx, cfg, closedIssue)\n}\n```\n\n### 4. Example Config\n\n```yaml\n# .beads/config.yaml\nhooks:\n on_close:\n - name: show-next\n command: bd ready --limit 1\n - name: context-check \n command: echo \"Issue $BEAD_ID closed. Check context if nearing limit.\"\n```\n\n## Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| BEAD_ID | Issue ID (e.g., bd-abc1) |\n| BEAD_TITLE | Issue title |\n| BEAD_TYPE | Issue type (task, bug, feature, etc.) |\n| BEAD_PRIORITY | Priority (0-4) |\n| BEAD_CLOSE_REASON | Close reason if provided |\n\n## Testing\n\nAdd test in internal/hooks/close_hooks_test.go:\n- Test hook execution with mock config\n- Test env vars are set correctly\n- Test hook failure doesnt block close\n\n## Files to Create/Modify\n\n1. **Create:** internal/hooks/close_hooks.go\n2. **Create:** internal/hooks/close_hooks_test.go \n3. **Modify:** internal/configfile/config.go (add HooksConfig)\n4. **Modify:** cmd/bd/close.go (call RunCloseHooks)\n5. **Modify:** docs/CONFIG.md (document hooks config)\n\n## Out of Scope (Future)\n\n- notify hook type (gt mail integration)\n- webhook type (HTTP POST)\n- on_create, on_update hooks\n- Hook timeout configuration\n- Parallel hook execution","status":"closed","priority":3,"issue_type":"feature","assignee":"beads/Hooker","created_at":"2025-12-22T17:03:56.183461-08:00","updated_at":"2025-12-23T13:38:15.898746-08:00","closed_at":"2025-12-23T13:38:15.898746-08:00","close_reason":"Implemented config-based close hooks","dependencies":[{"issue_id":"bd-g4b4","depends_on_id":"bd-iz5t","type":"parent-child","created_at":"2025-12-23T12:44:07.811793-08:00","created_by":"daemon"}]}
{"id":"bd-g9eu","title":"Investigate TestRoutingIntegration failure","description":"TestRoutingIntegration/maintainer_with_SSH_remote failed during pre-commit check with \"expected role maintainer, got contributor\".\nThis occurred while running `go test -short ./...` on darwin/arm64.\nThe failure appears unrelated to storage/sqlite changes.\nNeed to investigate if this is a flaky test or environmental issue.","status":"open","priority":2,"issue_type":"task","created_at":"2025-11-20T15:55:19.337094-08:00","updated_at":"2025-11-20T15:55:19.337094-08:00"}
{"id":"bd-gfo3","title":"Merge: bd-ykd9","description":"branch: polecat/Doctor\ntarget: main\nsource_issue: bd-ykd9\nrig: beads","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T13:34:43.778808-08:00","updated_at":"2025-12-23T13:34:43.778808-08:00"}
{"id":"bd-gfo3","title":"Merge: bd-ykd9","description":"branch: polecat/Doctor\ntarget: main\nsource_issue: bd-ykd9\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T13:34:43.778808-08:00","updated_at":"2025-12-23T19:12:08.353427-08:00","closed_at":"2025-12-23T19:12:08.353427-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-gjla","title":"Test Thread","description":"Initial message for threading test","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-16T18:19:51.704324-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","dependencies":[{"issue_id":"bd-gjla","depends_on_id":"bd-f5cc","type":"duplicates","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-gocx","title":"Run bump-version.sh 0.32.1","description":"Execute ./scripts/bump-version.sh 0.32.1 to update all version references","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T21:53:18.470174-08:00","updated_at":"2025-12-20T21:54:54.500836-08:00","closed_at":"2025-12-20T21:54:54.500836-08:00","close_reason":"Version bumped to 0.32.1","dependencies":[{"issue_id":"bd-gocx","depends_on_id":"bd-an4s","type":"parent-child","created_at":"2025-12-20T21:53:18.471793-08:00","created_by":"daemon"},{"issue_id":"bd-gocx","depends_on_id":"bd-x3j8","type":"blocks","created_at":"2025-12-20T21:53:29.688436-08:00","created_by":"daemon"}]}
{"id":"bd-gqxd","title":"Enrich MutationEvent with title and assignee","description":"Current MutationEvent only has IssueID, no context. Add Title and Assignee fields so activity feeds can display meaningful info without extra lookups. Emit these fields when creating mutation events in server_core.go.","status":"closed","priority":2,"issue_type":"feature","assignee":"beads/furiosa","created_at":"2025-12-23T16:26:34.907259-08:00","updated_at":"2025-12-23T16:39:39.229462-08:00","closed_at":"2025-12-23T16:39:39.229462-08:00","close_reason":"Added Title and Assignee fields to MutationEvent, updated all callers"}
{"id":"bd-gxq","title":"Simplify bd onboard to minimal AGENTS.md snippet pointing to bd prime","description":"## Context\nGH#604 raised concerns about bd onboard bloating AGENTS.md with ~100+ lines of static instructions that:\n- Load every session whether beads is being used or not\n- Get stale when bd upgrades\n- Waste tokens\n\n## Solution\nSimplify `bd onboard` to output a minimal snippet (~2 lines) that points to `bd prime`:\n\n```markdown\n## Issue Tracking\nThis project uses beads (`bd`) for issue tracking.\nRun `bd prime` for workflow context, or hooks auto-inject it.\n```\n\n## Rationale\n- `bd prime` is dynamic, concise (~80 lines), and always matches installed bd version\n- Hooks already auto-inject `bd prime` at session start when .beads/ detected\n- AGENTS.md only needs to mention beads exists, not contain full instructions\n\n## Implementation\n1. Update `cmd/bd/onboard.go` to output minimal snippet\n2. Keep `--output` flag for BD_GUIDE.md generation (may still be useful)\n3. Update help text to explain the new approach","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T11:42:38.604891-08:00","updated_at":"2025-12-18T11:47:28.020419-08:00","closed_at":"2025-12-18T11:47:28.020419-08:00","close_reason":"Implemented: bd onboard now outputs minimal snippet pointing to bd prime"}
{"id":"bd-h0we","title":"Review SQLite indexes and scaling bottlenecks","description":"Audit the beads SQLite schema for:\n\n## Index Review\n- Are all frequently-queried columns indexed?\n- Are compound indexes needed for common query patterns?\n- Any missing indexes on foreign keys or filter columns?\n\n## Scaling Bottlenecks\n- How does performance degrade with 10k, 100k, 1M issues?\n- Full table scans in hot paths?\n- JSONL export/import performance at scale\n- Transaction contention in multi-agent scenarios\n\n## Common Query Patterns to Optimize\n- bd ready (status + blocked_by resolution)\n- bd list with filters (status, type, priority, labels)\n- bd show with dependency graph traversal\n- bd sync import/export\n\n## Deliverables\n- Document current indexes\n- Identify missing indexes\n- Benchmark key operations at scale\n- Recommend schema improvements","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-21T23:41:06.481881-08:00","updated_at":"2025-12-22T22:59:25.178175-08:00","closed_at":"2025-12-22T22:59:25.178175-08:00","close_reason":"Completed comprehensive review. Created 7 follow-up issues:\n- bd-bha9: updated_at index (P2)\n- bd-a9y3: (status, priority) composite (P3) \n- bd-jke6: labels covering index (P3)\n- bd-8x3w: dependencies (issue_id, type) (P3)\n- bd-lk39: events composite (P4)\n- bd-zw72: cache scaling investigation (P3)\n- bd-m964: FTS5 consideration (P4)\n\nKey findings:\n1. Current schema has good coverage for hot paths\n2. blocked_issues_cache provides 25x speedup for GetReadyWork\n3. Main gaps are composite indexes for common filter combinations\n4. Scaling concerns start at 100K+ issues, primarily around text search and cache rebuild"}
{"id":"bd-h27p","title":"Merge: bd-g4b4","description":"branch: polecat/Hooker\ntarget: main\nsource_issue: bd-g4b4\nrig: beads","status":"open","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T13:38:50.707153-08:00","updated_at":"2025-12-23T13:38:50.707153-08:00"}
{"id":"bd-h27p","title":"Merge: bd-g4b4","description":"branch: polecat/Hooker\ntarget: main\nsource_issue: bd-g4b4\nrig: beads","status":"closed","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T13:38:50.707153-08:00","updated_at":"2025-12-23T19:12:08.357806-08:00","closed_at":"2025-12-23T19:12:08.357806-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-h807","title":"Cross-project dependency support","description":"Enable tracking dependencies across project boundaries.\n\n## Mechanism\n- Producer: `bd ship \u003ccapability\u003e` adds `provides:\u003ccapability\u003e` label\n- Consumer: `blocked_by: external:\u003cproject\u003e:\u003ccapability\u003e`\n- Resolution: `bd ready` checks external deps via config\n\n## Design Doc\nSee: gastown/docs/cross-project-deps.md\n\n## Children\n- bd-eijl: bd ship command\n- bd-om4a: external: prefix in blocked_by\n- bd-66w1: external_projects config\n- bd-zmmy: bd ready resolution","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-21T22:38:01.116241-08:00","updated_at":"2025-12-22T00:02:09.271076-08:00","closed_at":"2025-12-22T00:02:09.271076-08:00","close_reason":"All children completed: bd ship, external: prefix, config, and bd ready resolution"}
{"id":"bd-h8q","title":"Add tests for validation functions","description":"Validation functions like ParseIssueType have 0% coverage. These are critical for ensuring data quality and preventing invalid data from entering the system.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T07:01:02.843488344-07:00","updated_at":"2025-12-18T07:03:53.561016965-07:00","closed_at":"2025-12-18T07:03:53.561016965-07:00","dependencies":[{"issue_id":"bd-h8q","depends_on_id":"bd-6ss","type":"discovered-from","created_at":"2025-12-18T07:01:02.846419747-07:00","created_by":"matt"}]}
{"id":"bd-h8ym","title":"Wait for CI to pass","description":"Monitor GitHub Actions - all checks must pass before release artifacts are built","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T13:52:33.066792-08:00","updated_at":"2025-12-21T13:53:49.454536-08:00","deleted_at":"2025-12-21T13:53:49.454536-08:00","deleted_by":"stevey","delete_reason":"manual delete","original_type":"task","wisp":true}
@@ -256,7 +256,7 @@
{"id":"bd-hzvz","title":"Update info.go versionChanges","description":"Add entry to versionChanges in cmd/bd/info.go with agent-actionable changes for 0.30.7","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T22:56:48.649359-08:00","updated_at":"2025-12-19T22:57:31.604229-08:00","closed_at":"2025-12-19T22:57:31.604229-08:00","dependencies":[{"issue_id":"bd-hzvz","depends_on_id":"bd-8pyn","type":"parent-child","created_at":"2025-12-19T22:56:48.652068-08:00","created_by":"stevey"},{"issue_id":"bd-hzvz","depends_on_id":"bd-2ep8","type":"blocks","created_at":"2025-12-19T22:56:48.652376-08:00","created_by":"stevey"}]}
{"id":"bd-i0rx","title":"Merge: bd-ao0s","description":"branch: polecat/rictus\ntarget: main\nsource_issue: bd-ao0s\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-20T01:13:42.716658-08:00","updated_at":"2025-12-20T23:17:26.993744-08:00","closed_at":"2025-12-20T23:17:26.993744-08:00","close_reason":"Branches nuked, MRs obsolete"}
{"id":"bd-ia3g","title":"BondRef.ProtoID field name is misleading for mol+mol bonds","description":"In bondMolMol, the BondRef.ProtoID field is used to store molecule IDs:\n\n```go\nBondedFrom: append(molA.BondedFrom, types.BondRef{\n ProtoID: molB.ID, // This is a molecule, not a proto\n ...\n})\n```\n\nThis is semantically confusing since ProtoID suggests it should only hold proto references.\n\n**Options:**\n1. Rename ProtoID to SourceID (breaking change, needs migration)\n2. Add documentation clarifying ProtoID can hold molecule IDs in bond context\n3. Leave as-is, accept the naming is imprecise\n\nLow priority since it's just naming, not functionality.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-21T10:23:00.755067-08:00","updated_at":"2025-12-21T10:23:00.755067-08:00"}
{"id":"bd-ibl9","title":"Merge: bd-4qfb","description":"branch: polecat/Polish\ntarget: main\nsource_issue: bd-4qfb\nrig: beads","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T13:37:57.255125-08:00","updated_at":"2025-12-23T13:37:57.255125-08:00"}
{"id":"bd-ibl9","title":"Merge: bd-4qfb","description":"branch: polecat/Polish\ntarget: main\nsource_issue: bd-4qfb\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T13:37:57.255125-08:00","updated_at":"2025-12-23T19:12:08.352249-08:00","closed_at":"2025-12-23T19:12:08.352249-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-icfe","title":"gt spawn/crew setup should create .beads/redirect for worktrees","description":"Crew clones and polecats need a .beads/redirect file pointing to the shared beads database (../../mayor/rig/.beads). Currently:\n\n- redirect files can get deleted by git clean\n- not auto-created during gt spawn or worktree setup\n- missing redirects cause 'no beads database found' errors\n\nFound missing in: gastown/joe, beads/zoey (after git clean)\n\nFix options:\n1. gt spawn creates redirect during worktree setup\n2. gt prime regenerates missing redirects\n3. bd commands auto-detect worktree and find shared beads\n\nThis should be standard Gas Town rig configuration.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-21T01:30:26.115872-08:00","updated_at":"2025-12-21T17:51:25.740811-08:00","closed_at":"2025-12-21T17:51:25.740811-08:00","close_reason":"Moved to gastown: gt-b6qm"}
{"id":"bd-icnf","title":"Add bd mol run command (bond + assign + pin)","description":"bd mol run = bond + assign root to caller + pin to startup mail. This is the Gas Town integration point. When agent restarts, check startup mail, find pinned molecule root, query bd ready for next step. Makes molecules immortal.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T23:52:17.462882-08:00","updated_at":"2025-12-21T00:07:25.803058-08:00","closed_at":"2025-12-21T00:07:25.803058-08:00","close_reason":"Implemented bd mol run command","dependencies":[{"issue_id":"bd-icnf","depends_on_id":"bd-ffjt","type":"blocks","created_at":"2025-12-20T23:52:25.871742-08:00","created_by":"daemon"}]}
{"id":"bd-ieyy","title":"bd close --continue: auto-advance to next molecule step","description":"Add --continue flag to bd close for seamless molecule step transitions.\n\n## Usage\n\nbd close \u003cstep-id\u003e --continue [--no-auto]\n\n## Behavior\n\n1. Closes the specified step\n2. Finds next ready step in same molecule (sibling/child)\n3. By default, marks it in_progress (--no-auto to skip)\n4. Outputs the transition\n\n## Output\n\n[done] Closed gt-abc.3: Implement feature\n\nNext ready in molecule:\n gt-abc.4: Write tests\n\n[arrow] Marked in_progress (use --no-auto to skip)\n\n## If no next step\n\n[done] Closed gt-abc.6: Exit decision\n\nMolecule gt-abc complete! All steps closed.\nConsider: bd mol squash gt-abc --summary '...'\n\n## Key behaviors\n- Detects parent molecule from closed step\n- Finds next unblocked sibling\n- Auto-claims by default (propulsion principle)\n- Graceful handling when molecule is complete\n\n## Gas Town integration\n- gt-lz13: Update templates with nav workflow\n- gt-um6q: Update docs with nav workflow","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-22T17:03:44.238243-08:00","updated_at":"2025-12-22T17:36:31.937727-08:00","closed_at":"2025-12-22T17:36:31.937727-08:00","close_reason":"Implemented mol current and close --continue"}
@@ -280,7 +280,7 @@
{"id":"bd-jv4w","title":"Phase 1.2: Separate bdt executable - Initial structure","description":"Create minimal bdt command structure completely separate from bd. Must not share code, config, or database.\n\n## Subtasks\n1. Create cmd/bdt/ directory with main.go\n2. Implement bdt version, help, and status commands\n3. Configure separate database location: $HOME/.bdt/ (not $HOME/.beads/)\n4. Create separate issues file: issues.toon (not issues.jsonl)\n5. Update build system:\n - Makefile: Add bdt target\n - .goreleaser.yml: Add bdt binary config\n\n## Files to Create\n- cmd/bdt/main.go - Entry point\n- cmd/bdt/version.go - Version handling\n- cmd/bdt/help.go - Help text (separate from bd)\n\n## Success Criteria\n- `make build` produces both `bd` and `bdt` executables\n- `bdt version` shows distinct version output from bd\n- `bdt --help` shows distinct help text\n- bdt uses $HOME/.bdt/ directory (verify with `bdt info`)\n- bd and bdt completely isolated (no shared imports beyond stdlib)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T11:48:34.866877282-07:00","updated_at":"2025-12-19T12:59:11.389296015-07:00","closed_at":"2025-12-19T12:59:11.389296015-07:00"}
{"id":"bd-jvu","title":"Add bd update --parent flag to change issue parent","description":"Allow changing an issue's parent with bd update --parent \u003cnew-parent-id\u003e. Useful for reorganizing tasks under different epics or moving issues between hierarchies. Should update the parent-child dependency relationship.","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-17T22:24:07.274485-08:00","updated_at":"2025-12-17T22:34:07.318938-08:00","closed_at":"2025-12-17T22:34:07.318938-08:00"}
{"id":"bd-k88w","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-21T16:10:13.762574-08:00","updated_at":"2025-12-21T17:29:31.791368-08:00","close_reason":"Version bump already pushed","deleted_at":"2025-12-21T17:29:31.791368-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task","wisp":true}
{"id":"bd-kptp","title":"Merge: bd-qioh","description":"branch: polecat/Errata\ntarget: main\nsource_issue: bd-qioh\nrig: beads","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T13:46:08.832073-08:00","updated_at":"2025-12-23T13:46:08.832073-08:00"}
{"id":"bd-kptp","title":"Merge: bd-qioh","description":"branch: polecat/Errata\ntarget: main\nsource_issue: bd-qioh\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T13:46:08.832073-08:00","updated_at":"2025-12-23T19:12:08.350136-08:00","closed_at":"2025-12-23T19:12:08.350136-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-kpy","title":"Sync race: rebase-based divergence recovery resurrects tombstones","description":"## Problem\nWhen two repos sync simultaneously, tombstones can be resurrected:\n\n1. Repo A deletes issue (creates tombstone), pushes to sync branch\n2. Repo B (with 'closed' status) exports and tries to push\n3. Push fails (non-fast-forward)\n4. fetchAndRebaseInWorktree does git rebase\n5. Git rebase applies B's 'closed' patch on top of A's 'tombstone'\n6. TEXT-level rebase doesn't invoke beads merge driver\n7. 'closed' overwrites 'tombstone' = resurrection\n\n## Root Cause\nCommitToSyncBranch uses git rebase for divergence recovery, but rebase is text-level, not content-level. The proper content-level merge in PullFromSyncBranch handles tombstones correctly, but it runs AFTER the problematic push.\n\n## Proposed Fix\nOption 1: Don't push in CommitToSyncBranch - let PullFromSyncBranch handle merge+push\nOption 2: Replace git rebase with content-level merge in fetchAndRebaseInWorktree\nOption 3: Reorder sync steps: Export → Pull/Merge → Commit → Push\n\n## Workaround Applied\nExcluded tombstones from orphan detection warnings (commit 1e97d9cc).\n\nSee also: bd-3852 (Add orphan detection migration)","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-17T23:29:33.049272-08:00","updated_at":"2025-12-17T23:29:33.049272-08:00"}
{"id":"bd-kqo1","title":"Show pin indicator in bd list output","description":"Add a visual indicator (e.g., pin emoji or [P] marker) for pinned issues in bd list output so users can easily identify them.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T23:33:47.402549-08:00","updated_at":"2025-12-21T11:30:27.272768-08:00","closed_at":"2025-12-21T11:30:27.272768-08:00","close_reason":"Already implemented - 📌 emoji shown for pinned issues in bd list output","dependencies":[{"issue_id":"bd-kqo1","depends_on_id":"bd-0vg","type":"blocks","created_at":"2025-12-18T23:33:56.771791-08:00","created_by":"daemon"},{"issue_id":"bd-kqo1","depends_on_id":"bd-7h5","type":"blocks","created_at":"2025-12-18T23:34:07.985271-08:00","created_by":"daemon"}]}
{"id":"bd-kqw0","title":"Update local installation","description":"Run install script or brew upgrade to get new version locally: curl -fsSL .../install.sh | bash","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T13:52:33.066452-08:00","updated_at":"2025-12-21T13:53:49.656073-08:00","deleted_at":"2025-12-21T13:53:49.656073-08:00","deleted_by":"stevey","delete_reason":"manual delete","original_type":"task","wisp":true}
@@ -407,7 +407,7 @@
{"id":"bd-qqc.7","title":"Push release v{{version}} to remote","description":"Push the commit and tag:\n\n```bash\ngit push \u0026\u0026 git push --tags\n```\n\nVerify on GitHub that the tag appears in releases.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T13:00:26.933082-08:00","updated_at":"2025-12-18T23:34:18.630538-08:00","closed_at":"2025-12-18T22:41:41.882956-08:00","dependencies":[{"issue_id":"bd-qqc.7","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T13:00:26.933687-08:00","created_by":"stevey"},{"issue_id":"bd-qqc.7","depends_on_id":"bd-qqc.6","type":"blocks","created_at":"2025-12-18T13:01:12.711161-08:00","created_by":"stevey"}]}
{"id":"bd-qqc.8","title":"Create and push git tag v{{version}}","description":"Create the release tag and push it:\n\n```bash\ngit tag v{{version}}\ngit push origin v{{version}}\n```\n\nThis triggers the GoReleaser GitHub Action to build release binaries.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T22:42:34.659927-08:00","updated_at":"2025-12-18T22:47:14.054232-08:00","closed_at":"2025-12-18T22:47:14.054232-08:00","dependencies":[{"issue_id":"bd-qqc.8","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T22:42:34.660248-08:00","created_by":"daemon"},{"issue_id":"bd-qqc.8","depends_on_id":"bd-vgi5","type":"blocks","created_at":"2025-12-18T22:43:21.209529-08:00","created_by":"daemon"}]}
{"id":"bd-qqc.9","title":"Update Homebrew formula","description":"Update the Homebrew tap with new version:\n\n```bash\n./scripts/update-homebrew.sh {{version}}\n```\n\nThis script waits for GitHub Actions to complete (~5 min), then updates the formula with new SHA256 hashes.\n\nAfter running, verify the formula with:\n\n```bash\nbrew info steveyegge/beads/bd\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T22:42:35.815096-08:00","updated_at":"2025-12-22T13:13:42.442952-08:00","closed_at":"2025-12-18T22:51:07.863862-08:00","dependencies":[{"issue_id":"bd-qqc.9","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T22:42:35.816752-08:00","created_by":"daemon"},{"issue_id":"bd-qqc.9","depends_on_id":"bd-qqc.8","type":"blocks","created_at":"2025-12-18T22:43:21.332955-08:00","created_by":"daemon"}]}
{"id":"bd-r06v","title":"Merge: bd-phtv","description":"branch: polecat/Pinner\ntarget: main\nsource_issue: bd-phtv\nrig: beads","status":"open","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:48:16.853715-08:00","updated_at":"2025-12-23T13:48:16.853715-08:00"}
{"id":"bd-r06v","title":"Merge: bd-phtv","description":"branch: polecat/Pinner\ntarget: main\nsource_issue: bd-phtv\nrig: beads","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T13:48:16.853715-08:00","updated_at":"2025-12-23T19:12:08.342414-08:00","closed_at":"2025-12-23T19:12:08.342414-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-r2n1","title":"Add integration tests for RPC server and event loops","description":"After adding basic unit tests for daemon utilities, the complex daemon functions still need integration tests:\n\nCore daemon lifecycle:\n- startRPCServer: Initializes and starts RPC server with proper error handling\n- runEventLoop: Polling-based sync loop with parent monitoring and signal handling\n- runDaemonLoop: Main daemon initialization and setup\n\nHealth checking:\n- isDaemonHealthy: Checks daemon responsiveness and health metrics\n- checkDaemonHealth: Periodic health verification\n\nThese require more complex test infrastructure (mock RPC, test contexts, signal handling) and should be tackled after the unit test foundation is in place.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T12:28:56.022996362-07:00","updated_at":"2025-12-18T12:44:32.167862713-07:00","closed_at":"2025-12-18T12:44:32.167862713-07:00","dependencies":[{"issue_id":"bd-r2n1","depends_on_id":"bd-4or","type":"discovered-from","created_at":"2025-12-18T12:28:56.045893852-07:00","created_by":"mhwilkie"}]}
{"id":"bd-r36u","title":"gt mq list shows empty when MRs exist","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-20T01:13:07.561256-08:00","updated_at":"2025-12-21T17:51:25.891037-08:00","closed_at":"2025-12-21T17:51:25.891037-08:00","close_reason":"Moved to gastown: gt-uhc3"}
{"id":"bd-r46","title":"Support --reason flag in daemon mode for reopen command","description":"The reopen.go command has a TODO at line 61 to add reason as a comment once RPC supports AddComment. Currently --reason flag is ignored in daemon mode with a warning.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-11-21T18:55:10.773626-05:00","updated_at":"2025-12-21T21:47:15.43375-08:00","closed_at":"2025-12-21T21:47:15.43375-08:00","close_reason":"Already implemented in commit 78847147: reopen command now adds reason as comment in daemon mode via RPC AddComment"}
@@ -418,7 +418,7 @@
{"id":"bd-r6a.3","title":"Create version-bump template as native Beads","description":"Migrate the version-bump workflow from YAML to a native Beads template:\n\n1. Create epic with template label: Release {{version}}\n2. Create child tasks for each step (update version files, changelog, commit, push, publish)\n3. Set up dependencies between tasks\n4. Add verification commands in task descriptions\n\nThis serves as both migration and validation of the new system.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T22:43:40.694931-08:00","updated_at":"2025-12-18T17:42:26.001149-08:00","closed_at":"2025-12-18T13:02:09.039457-08:00","dependencies":[{"issue_id":"bd-r6a.3","depends_on_id":"bd-r6a","type":"parent-child","created_at":"2025-12-17T22:43:40.695392-08:00","created_by":"daemon","metadata":"{}"},{"issue_id":"bd-r6a.3","depends_on_id":"bd-r6a.2","type":"blocks","created_at":"2025-12-17T22:44:03.311902-08:00","created_by":"daemon","metadata":"{}"}]}
{"id":"bd-r6a.4","title":"Add bd template list command","description":"Add a convenience command to list available templates:\n\nbd template list\n\nThis is equivalent to 'bd list --label=template' but more discoverable.\nCould also show variable placeholders found in each template.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T22:43:47.525316-08:00","updated_at":"2025-12-17T23:02:45.700582-08:00","closed_at":"2025-12-17T23:02:45.700582-08:00","dependencies":[{"issue_id":"bd-r6a.4","depends_on_id":"bd-r6a","type":"parent-child","created_at":"2025-12-17T22:43:47.525743-08:00","created_by":"daemon","metadata":"{}"},{"issue_id":"bd-r6a.4","depends_on_id":"bd-r6a.2","type":"blocks","created_at":"2025-12-17T22:44:03.474353-08:00","created_by":"daemon","metadata":"{}"}]}
{"id":"bd-r6a.5","title":"Update documentation for template system","description":"Update AGENTS.md and help text to document the new template system:\n\n- How to create a template (epic + template label + child issues)\n- How to define variables (just use {{name}} placeholders)\n- How to instantiate (bd template instantiate)\n- Migration from YAML workflows (if any users had custom ones)","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-17T22:43:55.461345-08:00","updated_at":"2025-12-18T17:42:26.001474-08:00","closed_at":"2025-12-18T13:46:53.446262-08:00","dependencies":[{"issue_id":"bd-r6a.5","depends_on_id":"bd-r6a","type":"parent-child","created_at":"2025-12-17T22:43:55.461763-08:00","created_by":"daemon","metadata":"{}"},{"issue_id":"bd-r6a.5","depends_on_id":"bd-r6a.3","type":"blocks","created_at":"2025-12-17T22:44:03.632404-08:00","created_by":"daemon","metadata":"{}"},{"issue_id":"bd-r6a.5","depends_on_id":"bd-r6a.4","type":"blocks","created_at":"2025-12-17T22:44:03.788517-08:00","created_by":"daemon","metadata":"{}"}]}
{"id":"bd-rdzk","title":"Merge: bd-rgyd","description":"branch: polecat/Splitter\ntarget: main\nsource_issue: bd-rgyd\nrig: beads","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T13:41:15.051877-08:00","updated_at":"2025-12-23T13:41:15.051877-08:00"}
{"id":"bd-rdzk","title":"Merge: bd-rgyd","description":"branch: polecat/Splitter\ntarget: main\nsource_issue: bd-rgyd\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T13:41:15.051877-08:00","updated_at":"2025-12-23T19:12:08.351145-08:00","closed_at":"2025-12-23T19:12:08.351145-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-rece","title":"Phase 1.1: TOON Library Integration - Add gotoon dependency","description":"Add gotoon (github.com/alpkeskin/gotoon) to go.mod and create internal/toon wrapper package for TOON encoding/decoding. This enables bdtoon to encode Issue structs to TOON format and decode TOON back to issues.\n\n## Subtasks\n1. Add gotoon dependency: go get github.com/alpkeskin/gotoon\n2. Create internal/toon package with wrapper functions\n3. Write encode tests for Issue struct round-trip conversion\n4. Write decode tests for TOON to Issue conversion\n5. Add gotoon API options to wrapper (indent, delimiter, length markers)\n\n## Success Criteria\n- go.mod includes gotoon dependency\n- internal/toon/encode.go exports EncodeTOON(issues) ([]byte, error)\n- internal/toon/decode.go exports DecodeTOON(data []byte) ([]Issue, error)\n- Round-trip tests verify Issue → TOON → Issue produces identical data\n- Tests pass with: go test ./internal/toon -v","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T11:48:30.018161133-07:00","updated_at":"2025-12-19T12:53:56.808833405-07:00","closed_at":"2025-12-19T12:53:56.808833405-07:00"}
{"id":"bd-rgd7","title":"Update CHANGELOG.md with release notes","description":"Add release notes for 0.32.1: MCP output control params (#667), pin field fix","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T21:53:16.031879-08:00","updated_at":"2025-12-20T21:54:07.982164-08:00","closed_at":"2025-12-20T21:54:07.982164-08:00","close_reason":"Added 0.32.1 release notes","dependencies":[{"issue_id":"bd-rgd7","depends_on_id":"bd-an4s","type":"parent-child","created_at":"2025-12-20T21:53:16.034926-08:00","created_by":"daemon"}]}
{"id":"bd-rgyd","title":"Split internal/storage/sqlite/queries.go (1586 lines)","description":"Split internal/storage/sqlite/queries.go (1704 lines) into logical modules.\n\n## Current State\nqueries.go is 1704 lines with mixed responsibilities:\n- Issue CRUD operations\n- Search/filter operations\n- Delete operations (complex cascade logic)\n- Helper functions (parsing, formatting)\n\n## Proposed Split\n\n### 1. queries.go (keep ~400 lines) - Core CRUD\n```go\n// Core issue operations\nfunc (s *SQLiteStorage) CreateIssue(...)\nfunc (s *SQLiteStorage) GetIssue(...)\nfunc (s *SQLiteStorage) UpdateIssue(...)\nfunc (s *SQLiteStorage) CloseIssue(...)\n```\n\n### 2. queries_search.go (~300 lines) - Search/Filter\n```go\n// Search and filtering\nfunc (s *SQLiteStorage) SearchIssues(...)\nfunc (s *SQLiteStorage) GetIssueByExternalRef(...)\nfunc (s *SQLiteStorage) GetCloseReason(...)\nfunc (s *SQLiteStorage) GetCloseReasonsForIssues(...)\n```\n\n### 3. queries_delete.go (~400 lines) - Delete Operations\n```go\n// Delete operations with cascade logic\nfunc (s *SQLiteStorage) CreateTombstone(...)\nfunc (s *SQLiteStorage) DeleteIssue(...)\nfunc (s *SQLiteStorage) DeleteIssues(...)\nfunc (s *SQLiteStorage) resolveDeleteSet(...)\nfunc (s *SQLiteStorage) expandWithDependents(...)\nfunc (s *SQLiteStorage) validateNoDependents(...)\nfunc (s *SQLiteStorage) checkSingleIssueValidation(...)\nfunc (s *SQLiteStorage) trackOrphanedIssues(...)\nfunc (s *SQLiteStorage) collectOrphansForID(...)\nfunc (s *SQLiteStorage) populateDeleteStats(...)\nfunc (s *SQLiteStorage) executeDelete(...)\nfunc (s *SQLiteStorage) findAllDependentsRecursive(...)\n```\n\n### 4. queries_helpers.go (~100 lines) - Utilities\n```go\n// Helper functions (already at top of file)\nfunc parseNullableTimeString(...)\nfunc parseJSONStringArray(...)\nfunc formatJSONStringArray(...)\n```\n\n### 5. queries_rename.go (~100 lines) - ID/Prefix Operations\n```go\n// ID and prefix management\nfunc (s *SQLiteStorage) UpdateIssueID(...)\nfunc (s *SQLiteStorage) RenameDependencyPrefix(...)\nfunc (s *SQLiteStorage) RenameCounterPrefix(...)\nfunc (s *SQLiteStorage) ResetCounter(...)\n```\n\n## Implementation Steps\n\n1. **Create new files** with package declaration:\n ```go\n // queries_delete.go\n package sqlite\n \n import (...)\n ```\n\n2. **Move functions** - cut/paste, maintaining order within each file\n\n3. **Update imports** - each file needs its own imports\n\n4. **Run tests** after each file split:\n ```bash\n go test ./internal/storage/sqlite/...\n ```\n\n5. **Run linter** to catch any issues:\n ```bash\n golangci-lint run ./internal/storage/sqlite/...\n ```\n\n## File Organization\n```\ninternal/storage/sqlite/\n├── queries.go # Core CRUD (~400 lines)\n├── queries_search.go # Search/filter (~300 lines)\n├── queries_delete.go # Delete cascade (~400 lines)\n├── queries_helpers.go # Utilities (~100 lines)\n└── queries_rename.go # ID operations (~100 lines)\n```\n\n## Success Criteria\n- No file \u003e 500 lines\n- All tests pass\n- No functionality changes\n- Clear separation of concerns","status":"closed","priority":2,"issue_type":"task","assignee":"beads/Splitter","created_at":"2025-12-16T18:17:23.85869-08:00","updated_at":"2025-12-23T13:40:51.62551-08:00","closed_at":"2025-12-23T13:40:51.62551-08:00","close_reason":"Split queries.go into 5 focused modules - all tests pass","dependencies":[{"issue_id":"bd-rgyd","depends_on_id":"bd-iz5t","type":"parent-child","created_at":"2025-12-23T12:44:07.50733-08:00","created_by":"daemon"}]}
@@ -428,7 +428,7 @@
{"id":"bd-rupw","title":"Run bump-version.sh 0.30.7","description":"Run ./scripts/bump-version.sh 0.30.7 to update version in all files","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T22:56:48.649647-08:00","updated_at":"2025-12-19T22:57:31.512956-08:00","closed_at":"2025-12-19T22:57:31.512956-08:00","dependencies":[{"issue_id":"bd-rupw","depends_on_id":"bd-8pyn","type":"parent-child","created_at":"2025-12-19T22:56:48.653475-08:00","created_by":"stevey"}]}
{"id":"bd-rze6","title":"Digest: Release v0.34.0 @ 2025-12-22 12:16","description":"Released v0.34.0: wisp commands, chemistry UX, cross-project deps","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-22T12:16:53.033119-08:00","updated_at":"2025-12-22T12:16:53.033119-08:00","closed_at":"2025-12-22T12:16:53.033025-08:00","close_reason":"Squashed from wisp bd-25c (20 issues)"}
{"id":"bd-s0qf","title":"GH#405: Fix prefix parsing with hyphens - multi-hyphen prefixes parsed incorrectly","description":"Fixed: ExtractIssuePrefix was falling back to first-hyphen for word-like suffixes, breaking multi-hyphen prefixes like 'hacker-news' and 'me-py-toolkit'.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-16T01:13:56.951359-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":"bug"}
{"id":"bd-s1pz","title":"Merge: bd-u2sc.4","description":"branch: polecat/Logger\ntarget: main\nsource_issue: bd-u2sc.4\nrig: beads","status":"open","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T13:45:52.412757-08:00","updated_at":"2025-12-23T13:45:52.412757-08:00"}
{"id":"bd-s1pz","title":"Merge: bd-u2sc.4","description":"branch: polecat/Logger\ntarget: main\nsource_issue: bd-u2sc.4\nrig: beads","status":"closed","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T13:45:52.412757-08:00","updated_at":"2025-12-23T19:12:08.356689-08:00","closed_at":"2025-12-23T19:12:08.356689-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-s2t","title":"wish: a 'continue' or similar cmd/flag which means alter last issue","description":"so many time I create an issue and then have another thought: 'oh, before I did X and it crashed there was ZZZ happening' or 'actually that is P4 not P2'. It would be nice if when `bd {cmd}` is used without a {title} or {id} it just adds or updates the most recently touched issue.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-08T06:46:37.529160416-07:00","updated_at":"2025-12-08T06:46:37.529160416-07:00"}
{"id":"bd-sal9","title":"bd mol current: soft cursor showing current/next step","description":"Add bd mol current command for molecule navigation orientation.\n\n## Usage\n\nbd mol current [mol-id]\n\nIf mol-id given, show status for that molecule.\nIf not given, infer from in_progress issues assigned to current agent.\n\n## Output\n\nYou're working on molecule gt-abc (Feature X)\n\n [done] gt-abc.1: Design\n [done] gt-abc.2: Scaffold \n [done] gt-abc.3: Implement\n [current] gt-abc.4: Write tests [in_progress] \u003c- YOU ARE HERE\n [pending] gt-abc.5: Documentation\n [pending] gt-abc.6: Exit decision\n\nProgress: 3/6 steps complete\n\n## Key behaviors\n- Shows full molecule structure with status indicators\n- Highlights current in_progress step\n- If no in_progress, highlights first ready step\n- Works without explicit cursor tracking (inferred from state)\n\n## Implementation notes\n- Query children of mol-id\n- Sort by dependency order\n- Find first in_progress or first ready\n- Format with status indicators\n\n## Gas Town integration\n- gt-lz13: Update templates with nav workflow\n- gt-um6q: Update docs with nav workflow","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-22T17:03:30.245964-08:00","updated_at":"2025-12-22T17:36:31.936007-08:00","closed_at":"2025-12-22T17:36:31.936007-08:00","close_reason":"Implemented mol current and close --continue"}
{"id":"bd-sh4c","title":"Improve test coverage for cmd/bd/setup (28.4% → 50%)","description":"The setup package has only 28.4% test coverage. Setup commands are critical for first-time user experience.\n\nCurrent coverage: 28.4%\nTarget coverage: 50%","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-13T20:43:04.409346-08:00","updated_at":"2025-12-13T21:01:18.98833-08:00"}
@@ -476,7 +476,7 @@
{"id":"bd-whgv","title":"Merge: bd-401h","description":"branch: polecat/rictus\ntarget: main\nsource_issue: bd-401h\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T23:20:37.854953-08:00","updated_at":"2025-12-20T23:17:26.999477-08:00","closed_at":"2025-12-20T23:17:26.999477-08:00","close_reason":"Branches nuked, MRs obsolete"}
{"id":"bd-wu62","title":"Gate: timer:1m","status":"open","priority":1,"issue_type":"gate","assignee":"deacon/","created_at":"2025-12-23T13:42:57.169229-08:00","updated_at":"2025-12-23T13:42:57.169229-08:00","wisp":true}
{"id":"bd-x1xs","title":"Work on beads-1ra: Add molecules.jsonl as separate catalo...","description":"Work on beads-1ra: Add molecules.jsonl as separate catalog file for template molecules","status":"closed","priority":2,"issue_type":"task","assignee":"beads/polecat-01","created_at":"2025-12-19T20:17:44.840032-08:00","updated_at":"2025-12-21T15:28:17.633716-08:00","closed_at":"2025-12-21T15:28:17.633716-08:00","close_reason":"Implemented: molecules.jsonl loading, is_template column, template filtering in bd list (excluded by default), --include-templates flag, bd mol list catalog view"}
{"id":"bd-x2bd","title":"Merge: bd-likt","description":"branch: polecat/Gater\ntarget: main\nsource_issue: bd-likt\nrig: beads","status":"open","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T13:46:27.091846-08:00","updated_at":"2025-12-23T13:46:27.091846-08:00"}
{"id":"bd-x2bd","title":"Merge: bd-likt","description":"branch: polecat/Gater\ntarget: main\nsource_issue: bd-likt\nrig: beads","status":"closed","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T13:46:27.091846-08:00","updated_at":"2025-12-23T19:12:08.355637-08:00","closed_at":"2025-12-23T19:12:08.355637-08:00","close_reason":"Stale merge-requests from orphaned polecat branches - refinery not processing"}
{"id":"bd-x36g","title":"Thread Test 2","description":"Testing direct mode","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-16T18:21:16.470631-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":"message"}
{"id":"bd-x3hi","title":"Support redirect files in .beads/ directory","description":"Gas Town creates polecat worktrees with .beads/redirect files that point to a shared beads database. The bd CLI should:\n\n1. When finding a .beads/ directory, check if it contains a 'redirect' file\n2. If redirect exists, read the relative path and use that as the beads directory\n3. This allows multiple git worktrees to share a single beads database\n\nExample:\n- polecats/alpha/.beads/redirect contains '../../mayor/rig/.beads'\n- bd commands from alpha should use mayor/rig/.beads\n\nCurrently bd ignores redirect files and either uses the local .beads/ or walks up to find a parent .beads/.\n\nRelated: gt-nriy (test message that can't be retrieved due to missing redirect support)","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T21:46:23.415172-08:00","updated_at":"2025-12-20T21:59:25.759664-08:00","closed_at":"2025-12-20T21:59:25.759664-08:00","close_reason":"Not applicable - filed against stale bd v0.30.6"}
{"id":"bd-x3j8","title":"Update info.go versionChanges","description":"Add 0.32.1 entry to versionChanges map in cmd/bd/info.go","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T21:53:17.344841-08:00","updated_at":"2025-12-20T21:54:31.906761-08:00","closed_at":"2025-12-20T21:54:31.906761-08:00","close_reason":"Added 0.32.1 to versionChanges","dependencies":[{"issue_id":"bd-x3j8","depends_on_id":"bd-an4s","type":"parent-child","created_at":"2025-12-20T21:53:17.346736-08:00","created_by":"daemon"},{"issue_id":"bd-x3j8","depends_on_id":"bd-rgd7","type":"blocks","created_at":"2025-12-20T21:53:29.62309-08:00","created_by":"daemon"}]}