refactor: remove unused bd pin/unpin/hook commands (bd-x0zl)

Analysis found these commands are dead code:
- gt never calls `bd pin` - uses `bd update --status=pinned` instead
- Beads.Pin() wrapper exists but is never called
- bd hook functionality duplicated by gt mol status
- Code comment says "pinned field is cosmetic for bd hook visibility"

Removed:
- cmd/bd/pin.go
- cmd/bd/unpin.go
- cmd/bd/hook.go

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-27 16:02:15 -08:00
parent c8b912cbe6
commit 1611f16751
178 changed files with 10291 additions and 1682 deletions

View File

View File

@@ -63,7 +63,7 @@
{"id":"bd-3ggb","title":"Rebuild local binary","description":"Build and verify: go build -o bd ./cmd/bd \u0026\u0026 ./bd version","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T22:43:03.101428-08:00","updated_at":"2025-12-24T16:25:30.089869-08:00","dependencies":[{"issue_id":"bd-3ggb","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T22:43:16.748289-08:00","created_by":"daemon"},{"issue_id":"bd-3ggb","depends_on_id":"bd-4y4g","type":"blocks","created_at":"2025-12-18T22:43:20.950376-08:00","created_by":"daemon"}],"deleted_at":"2025-12-24T16:25:30.089869-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"bd-3jcw","title":"activity.go: Missing test coverage","description":"The new activity.go command (from bd-xo1o.3) has no test coverage. At minimum, tests should cover:\n- parseDurationString() for various formats (5m, 1h, 2d, invalid)\n- filterEvents() for --mol and --type filtering\n- formatEvent() and getEventDisplay() for all mutation types\n\nDiscovered during code review of bd-xo1o implementation.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T04:06:15.563579-08:00","updated_at":"2025-12-23T04:14:56.150151-08:00","closed_at":"2025-12-23T04:14:56.150151-08:00","close_reason":"Added activity_test.go with tests for parseDurationString, filterEvents, getEventDisplay, and formatEvent covering all mutation types"}
{"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":"closed","priority":2,"issue_type":"feature","assignee":"beads/morsov","created_at":"2025-11-21T23:16:10.762808-08:00","updated_at":"2025-12-23T23:48:18.11858-08:00","closed_at":"2025-12-23T23:48:18.11858-08:00","close_reason":"Feature already implemented: CheckMergeDriver() detects %L/%R placeholders, fix.MergeDriver() repairs to 'bd merge %A %O %A %B'. Tests pass, manual verification confirms bd doctor --fix works correctly.","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-3u8m","title":"Create bd admin parent command and nest cleanup/compact/reset","description":"## Task\nCreate new `bd admin` parent command and move:\n- `bd cleanup` → `bd admin cleanup`\n- `bd compact` → `bd admin compact`\n- `bd reset` → `bd admin reset`\n\n## Implementation\n\n### 1. Create admin.go\nNew file with parent command:\n```go\nvar adminCmd = \u0026cobra.Command{\n Use: \"admin\",\n Short: \"Administrative commands for database maintenance\",\n Long: `Administrative commands for beads database maintenance.\n\nThese commands are for advanced users and should be used carefully:\n cleanup Delete closed issues and prune expired tombstones\n compact Compact old closed issues to save space\n reset Remove all beads data and configuration\n\nFor routine operations, prefer 'bd doctor --fix'.`,\n}\n\nfunc init() {\n rootCmd.AddCommand(adminCmd)\n adminCmd.AddCommand(cleanupCmd)\n adminCmd.AddCommand(compactCmd)\n adminCmd.AddCommand(resetCmd)\n}\n```\n\n### 2. Update cleanup.go, compact.go, reset.go\n- Remove `rootCmd.AddCommand()` from each init()\n- Keep all existing functionality\n\n### 3. Create hidden aliases for backwards compatibility\nTop-level hidden commands that forward to admin subcommands.\n\n### 4. Update docs (major updates)\n- docs/CLI_REFERENCE.md - cleanup, compact references\n- docs/QUICKSTART.md - compact, cleanup references\n- docs/FAQ.md - compact references\n- docs/TROUBLESHOOTING.md - compact references\n- docs/DELETIONS.md - compact reference\n- docs/CONFIG.md - compact reference\n- skills/beads/SKILL.md - compact reference\n- commands/compact.md - update all examples\n- examples/compaction/README.md - update examples\n\n## Files to create\n- cmd/bd/admin.go\n\n## Files to modify\n- cmd/bd/cleanup.go\n- cmd/bd/compact.go\n- cmd/bd/reset.go\n- cmd/bd/main.go (aliases)\n- Multiple docs (see list above)\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-27T15:10:41.836341-08:00","created_by":"mayor","updated_at":"2025-12-27T15:10:41.836341-08:00"}
{"id":"bd-3u8m","title":"Create bd admin parent command and nest cleanup/compact/reset","description":"## Task\nCreate new `bd admin` parent command and move:\n- `bd cleanup` → `bd admin cleanup`\n- `bd compact` → `bd admin compact`\n- `bd reset` → `bd admin reset`\n\n## Implementation\n\n### 1. Create admin.go\nNew file with parent command:\n```go\nvar adminCmd = \u0026cobra.Command{\n Use: \"admin\",\n Short: \"Administrative commands for database maintenance\",\n Long: `Administrative commands for beads database maintenance.\n\nThese commands are for advanced users and should be used carefully:\n cleanup Delete closed issues and prune expired tombstones\n compact Compact old closed issues to save space\n reset Remove all beads data and configuration\n\nFor routine operations, prefer 'bd doctor --fix'.`,\n}\n\nfunc init() {\n rootCmd.AddCommand(adminCmd)\n adminCmd.AddCommand(cleanupCmd)\n adminCmd.AddCommand(compactCmd)\n adminCmd.AddCommand(resetCmd)\n}\n```\n\n### 2. Update cleanup.go, compact.go, reset.go\n- Remove `rootCmd.AddCommand()` from each init()\n- Keep all existing functionality\n\n### 3. Create hidden aliases for backwards compatibility\nTop-level hidden commands that forward to admin subcommands.\n\n### 4. Update docs (major updates)\n- docs/CLI_REFERENCE.md - cleanup, compact references\n- docs/QUICKSTART.md - compact, cleanup references\n- docs/FAQ.md - compact references\n- docs/TROUBLESHOOTING.md - compact references\n- docs/DELETIONS.md - compact reference\n- docs/CONFIG.md - compact reference\n- skills/beads/SKILL.md - compact reference\n- commands/compact.md - update all examples\n- examples/compaction/README.md - update examples\n\n## Files to create\n- cmd/bd/admin.go\n\n## Files to modify\n- cmd/bd/cleanup.go\n- cmd/bd/compact.go\n- cmd/bd/reset.go\n- cmd/bd/main.go (aliases)\n- Multiple docs (see list above)\n","status":"in_progress","priority":2,"issue_type":"task","assignee":"jasper","created_at":"2025-12-27T15:10:41.836341-08:00","created_by":"mayor","updated_at":"2025-12-27T15:57:27.501626-08:00","pinned":true}
{"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-3zm7","title":"bd mol advance: Step through molecule execution","description":"Implement bd mol advance for stepping through molecules.\n\n## Command\n\n```bash\nbd mol advance \u003cmol-id\u003e\n```\n\n## Behavior\n\n1. Load molecule state from .beads/molecules/\u003cmol-id\u003e.state.yaml\n2. Find current step\n3. Mark current step completed\n4. Find next available step (respecting needs/deps)\n5. Update state file\n6. Output next step info (or COMPLETE if done)\n\n## Step State Machine\n\n```\npending → in_progress → completed\n```\n\nWhen advancing:\n- Current step: in_progress → completed\n- Next step: pending → in_progress\n\n## Output\n\n```bash\n$ bd mol advance mol-deacon-patrol\n✓ Step inbox-check completed\n→ Next step: spawn-work\n\nTitle: Spawn polecat for ready work\nDescription: ...\n```\n\nOr if complete:\n```bash\n$ bd mol advance mol-deacon-patrol\n✓ Step self-inspect completed\n✓ Molecule COMPLETE\n\nRun bd mol reset to loop, or gt handoff to cycle.\n```\n\n## Files\n\n- cmd/bd/mol_advance.go\n- internal/mol/state.go","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:53:31.832867-08:00","updated_at":"2025-12-24T16:53:13.244739-08:00","closed_at":"2025-12-24T16:53:13.244739-08:00","close_reason":"REJECTED: Blocked by bd-hulf which was rejected. The concept of 'advance' is valid but must work by closing the current child bead and traversing the DAG to find the next open step - no external state file.","dependencies":[{"issue_id":"bd-3zm7","depends_on_id":"bd-hulf","type":"blocks","created_at":"2025-12-24T15:53:49.233523-08:00","created_by":"daemon"}]}
@@ -94,7 +94,7 @@
{"id":"bd-581b80b3","title":"bd find-duplicates - AI-powered duplicate detection","description":"Find semantically duplicate issues.\n\nApproaches:\n1. Mechanical: Exact title/description matching\n2. Embeddings: Cosine similarity (cheap, scalable)\n3. AI: LLM-based semantic comparison (expensive, accurate)\n\nUses embeddings by default for \u003e100 issues.\n\nFiles: cmd/bd/find_duplicates.go (new)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-29T20:49:49.126801-07:00","updated_at":"2025-12-25T01:21:01.952723-08:00","close_reason":"Closed","deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"bd-589x","title":"HANDOFF: Version 0.30.7 release in progress","description":"## Context\nDoing a 0.30.7 patch release with bug fixes.\n\n## What's done\n- Fixed #657: bd graph nil pointer crash (graph.go:102)\n- Fixed #652: Windows npm installer file lock (postinstall.js)\n- Updated CHANGELOG.md and info.go\n- Pushed to main, CI running (run 20390861825)\n- Created version-bump molecule template (bd-6s61) and instantiated for 0.30.7 (bd-8pyn)\n\n## In progress\nMolecule bd-8pyn has 3 remaining tasks:\n - bd-dxo7: Wait for CI to pass\n - bd-7l70: Verify release artifacts \n - bd-5c91: Update local installation\n\n## Check CI\n gh run list --repo steveyegge/beads --limit 1\n gh run view 20390861825 --repo steveyegge/beads\n\n## New feature filed\nbd-n777: Timer beads for scheduled agent callbacks\nDesign for Deacon-managed timers that can interrupt agents via tmux\n\n## Resume commands\n bd --no-daemon show bd-8pyn\n gh run list --repo steveyegge/beads --limit 1","status":"closed","priority":2,"issue_type":"message","assignee":"beads/dave","created_at":"2025-12-19T23:06:14.902334-08:00","updated_at":"2025-12-20T00:49:51.927111-08:00","closed_at":"2025-12-20T00:25:59.596546-08:00"}
{"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-5e9q","title":"Add backwards-compatible aliases and deprecation warnings","description":"## Task\nEnsure backwards compatibility by adding hidden aliases for all moved commands.\n\n## Implementation\n\n### Create aliases.go\nNew file to centralize alias management:\n```go\npackage main\n\nimport (\n \"fmt\"\n \"os\"\n \n \"github.com/spf13/cobra\"\n)\n\n// Deprecated command aliases for backwards compatibility\n// These will be removed in v0.XX.0\n\nfunc init() {\n // migrate-* → migrate *\n addDeprecatedAlias(\"migrate-hash-ids\", \"migrate hash-ids\")\n addDeprecatedAlias(\"migrate-issues\", \"migrate issues\")\n addDeprecatedAlias(\"migrate-sync\", \"migrate sync\")\n addDeprecatedAlias(\"migrate-tombstones\", \"migrate tombstones\")\n \n // top-level → admin *\n addDeprecatedAlias(\"cleanup\", \"admin cleanup\")\n addDeprecatedAlias(\"compact\", \"admin compact\")\n addDeprecatedAlias(\"reset\", \"admin reset\")\n \n // top-level → formula *\n addDeprecatedAlias(\"cook\", \"formula cook\")\n}\n\nfunc addDeprecatedAlias(old, new string) {\n cmd := \u0026cobra.Command{\n Use: old,\n Hidden: true,\n Run: func(cmd *cobra.Command, args []string) {\n fmt.Fprintf(os.Stderr, \"⚠️ '%s' is deprecated, use '%s' instead\\n\", old, new)\n // Forward execution to new command\n },\n }\n rootCmd.AddCommand(cmd)\n}\n```\n\n### Deprecation behavior\n1. First release: Show warning, execute command\n2. One release later: Show warning, still execute\n3. Third release: Remove aliases entirely\n\n## Files to create\n- cmd/bd/aliases.go\n\n## Files to modify \n- cmd/bd/main.go (ensure aliases loaded)\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-27T15:11:33.54574-08:00","created_by":"mayor","updated_at":"2025-12-27T15:11:33.54574-08:00"}
{"id":"bd-5e9q","title":"Add backwards-compatible aliases and deprecation warnings","description":"## Task\nEnsure backwards compatibility by adding hidden aliases for all moved commands.\n\n## Implementation\n\n### Create aliases.go\nNew file to centralize alias management:\n```go\npackage main\n\nimport (\n \"fmt\"\n \"os\"\n \n \"github.com/spf13/cobra\"\n)\n\n// Deprecated command aliases for backwards compatibility\n// These will be removed in v0.XX.0\n\nfunc init() {\n // migrate-* → migrate *\n addDeprecatedAlias(\"migrate-hash-ids\", \"migrate hash-ids\")\n addDeprecatedAlias(\"migrate-issues\", \"migrate issues\")\n addDeprecatedAlias(\"migrate-sync\", \"migrate sync\")\n addDeprecatedAlias(\"migrate-tombstones\", \"migrate tombstones\")\n \n // top-level → admin *\n addDeprecatedAlias(\"cleanup\", \"admin cleanup\")\n addDeprecatedAlias(\"compact\", \"admin compact\")\n addDeprecatedAlias(\"reset\", \"admin reset\")\n \n // top-level → formula *\n addDeprecatedAlias(\"cook\", \"formula cook\")\n}\n\nfunc addDeprecatedAlias(old, new string) {\n cmd := \u0026cobra.Command{\n Use: old,\n Hidden: true,\n Run: func(cmd *cobra.Command, args []string) {\n fmt.Fprintf(os.Stderr, \"⚠️ '%s' is deprecated, use '%s' instead\\n\", old, new)\n // Forward execution to new command\n },\n }\n rootCmd.AddCommand(cmd)\n}\n```\n\n### Deprecation behavior\n1. First release: Show warning, execute command\n2. One release later: Show warning, still execute\n3. Third release: Remove aliases entirely\n\n## Files to create\n- cmd/bd/aliases.go\n\n## Files to modify \n- cmd/bd/main.go (ensure aliases loaded)\n","status":"in_progress","priority":2,"issue_type":"task","assignee":"opal","created_at":"2025-12-27T15:11:33.54574-08:00","created_by":"mayor","updated_at":"2025-12-27T15:57:30.190321-08:00","pinned":true}
{"id":"bd-5exm","title":"Merge: bd-49kw","description":"branch: polecat/nux\ntarget: main\nsource_issue: bd-49kw\nrig: beads","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T20:43:23.156375-08:00","updated_at":"2025-12-23T21:21:57.693169-08:00","closed_at":"2025-12-23T21:21:57.693169-08:00","close_reason":"stale - no code pushed"}
{"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":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-11-14T09:02:46.507526-08:00","updated_at":"2025-12-25T01:21:01.952723-08:00","deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
@@ -258,7 +258,7 @@
{"id":"bd-d9mu","title":"Cross-rig external dependency support","description":"Support dependencies on issues in other rigs/repos.\n\n## Use Case\n\nGas Town issues often depend on Beads issues (and vice versa). Currently we use labels like `external:beads/bd-xxx` as documentation, but:\n- `bd blocked` doesn't recognize external deps\n- `bd ready` doesn't filter them out\n- No way to query cross-rig status\n\n## Proposed UX\n\n### Adding external deps\n```bash\n# New syntax for bd dep add\nbd dep add gt-a07f external:beads:bd-kwjh\n\n# Or maybe cleaner\nbd dep add gt-a07f --external beads:bd-kwjh\n```\n\n### Showing blocked status\n```bash\nbd blocked\n# → gt-a07f blocked by external:beads:bd-kwjh (unverified)\n\n# With optional cross-rig query\nbd blocked --resolve-external\n# → gt-a07f blocked by external:beads:bd-kwjh (closed) ← unblocked!\n```\n\n### Storage\nCould use:\n- Special dependency type: `type: external`\n- Label convention: `external:rig:id`\n- New field: `external_deps: [\"beads:bd-kwjh\"]`\n\n## Implementation Notes\n\nCross-rig queries would need:\n- Known rig locations (config or discovery)\n- Read-only beads access to external rigs\n- Caching to avoid repeated queries\n\nFor MVP, just recognizing external deps and marking them as 'unverified' blockers would be valuable.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-22T02:27:23.892706-08:00","updated_at":"2025-12-22T22:32:49.261551-08:00","closed_at":"2025-12-22T22:32:49.261551-08:00","close_reason":"Superseded: Cross-rig external dependency support was fully implemented through child issues: bd-om4a (external: prefix syntax), bd-zmmy (bd ready resolution), bd-396j (bd blocked filtering), bd-66w1 (external_projects config), bd-vks2 (dep tree display), bd-mv6h (test coverage). External deps are auto-resolved when external_projects config is set. The --resolve-external flag is not needed."}
{"id":"bd-de6","title":"Fix FindBeadsDir to prioritize main repo .beads for worktrees","description":"The FindBeadsDir function should prioritize finding .beads in the main repository root when accessed from a worktree, rather than finding worktree-local .beads directories. This ensures proper sharing of the database across all worktrees.","status":"closed","priority":2,"issue_type":"bug","assignee":"beads/golf","created_at":"2025-12-07T16:48:36.883117467-07:00","updated_at":"2025-12-23T22:33:23.795459-08:00","closed_at":"2025-12-23T22:33:23.795459-08:00","close_reason":"Already implemented - FindBeadsDir prioritizes main repo .beads via IsWorktree() and GetMainRepoRoot(). All tests pass."}
{"id":"bd-dhza","title":"Reduce global state in cmd/bd/main.go (25+ variables)","description":"Code health review found main.go has 25+ global variables (lines 57-112):\n\n- dbPath, actor, store, jsonOutput, daemonClient, noDaemon\n- rootCtx, rootCancel, autoFlushEnabled\n- isDirty (marked 'USED BY LEGACY CODE')\n- needsFullExport (marked 'USED BY LEGACY CODE')\n- flushTimer (marked 'DEPRECATED')\n- flushMutex, storeMutex, storeActive\n- flushFailureCount, lastFlushError, flushManager\n- skipFinalFlush, autoImportEnabled\n- versionUpgradeDetected, previousVersion, upgradeAcknowledged\n\nImpact:\n- Hard to test individual commands\n- Race conditions possible\n- State leakage between commands\n\nFix: Move toward dependency injection. Remove deprecated variables. Consider cmd/bd/internal package.","notes":"COMPLETED: Migration of legacy flush state to FlushManager. The main work (isDirty, needsFullExport, flushTimer) moved to local vars in FlushManager.run() lines 170-173. This fixes the race conditions. Remaining globals are: Cobra flag bindings (standard), runtime state (store, daemonClient - structural), store coordination (storeActive/storeMutex). Future: move error tracking to FlushManager, create cmd/bd/internal for encapsulation.","status":"closed","priority":3,"issue_type":"task","assignee":"beads/kilo","created_at":"2025-12-16T18:17:29.643293-08:00","updated_at":"2025-12-23T22:36:09.600594-08:00","closed_at":"2025-12-23T22:36:09.600594-08:00","close_reason":"Legacy flush globals (isDirty, needsFullExport, flushTimer) already migrated to FlushManager local vars. Race conditions fixed. Remaining globals are Cobra flags (standard) or structural (store, daemonClient). Future work filed separately if needed."}
{"id":"bd-do8e","title":"Consolidate migrate-* commands under bd migrate","description":"## Task\nMove standalone migrate commands under `bd migrate` parent:\n- `bd migrate-hash-ids` → `bd migrate hash-ids`\n- `bd migrate-issues` → `bd migrate issues`\n- `bd migrate-sync` → `bd migrate sync`\n- `bd migrate-tombstones` → `bd migrate tombstones`\n\n## Implementation\n\n### 1. Update migrate.go\nAdd subcommands to migrateCmd:\n```go\nfunc init() {\n migrateCmd.AddCommand(migrateHashIDsCmd)\n migrateCmd.AddCommand(migrateIssuesCmd)\n migrateCmd.AddCommand(migrateSyncCmd)\n migrateCmd.AddCommand(migrateTombstonesCmd)\n}\n```\n\n### 2. Update each migrate_*.go file\n- Change `Use:` from `migrate-foo` to `foo`\n- Remove `rootCmd.AddCommand()` from init()\n\n### 3. Create hidden aliases for backwards compatibility\nIn main.go, add hidden top-level commands that forward to subcommands.\n\n### 4. Update docs\n- docs/DELETIONS.md - references `bd migrate-tombstones`\n- docs/CLI_REFERENCE.md - migration section\n\n## Files to modify\n- cmd/bd/migrate.go\n- cmd/bd/migrate_hash_ids.go \n- cmd/bd/migrate_issues.go\n- cmd/bd/migrate_sync.go\n- cmd/bd/migrate_tombstones.go\n- cmd/bd/main.go (aliases)\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-27T15:10:41.618026-08:00","created_by":"mayor","updated_at":"2025-12-27T15:10:41.618026-08:00"}
{"id":"bd-do8e","title":"Consolidate migrate-* commands under bd migrate","description":"## Task\nMove standalone migrate commands under `bd migrate` parent:\n- `bd migrate-hash-ids` → `bd migrate hash-ids`\n- `bd migrate-issues` → `bd migrate issues`\n- `bd migrate-sync` → `bd migrate sync`\n- `bd migrate-tombstones` → `bd migrate tombstones`\n\n## Implementation\n\n### 1. Update migrate.go\nAdd subcommands to migrateCmd:\n```go\nfunc init() {\n migrateCmd.AddCommand(migrateHashIDsCmd)\n migrateCmd.AddCommand(migrateIssuesCmd)\n migrateCmd.AddCommand(migrateSyncCmd)\n migrateCmd.AddCommand(migrateTombstonesCmd)\n}\n```\n\n### 2. Update each migrate_*.go file\n- Change `Use:` from `migrate-foo` to `foo`\n- Remove `rootCmd.AddCommand()` from init()\n\n### 3. Create hidden aliases for backwards compatibility\nIn main.go, add hidden top-level commands that forward to subcommands.\n\n### 4. Update docs\n- docs/DELETIONS.md - references `bd migrate-tombstones`\n- docs/CLI_REFERENCE.md - migration section\n\n## Files to modify\n- cmd/bd/migrate.go\n- cmd/bd/migrate_hash_ids.go \n- cmd/bd/migrate_issues.go\n- cmd/bd/migrate_sync.go\n- cmd/bd/migrate_tombstones.go\n- cmd/bd/main.go (aliases)\n","status":"closed","priority":2,"issue_type":"task","assignee":"quartz","created_at":"2025-12-27T15:10:41.618026-08:00","created_by":"mayor","updated_at":"2025-12-27T16:01:32.021299-08:00","closed_at":"2025-12-27T16:01:32.021299-08:00","close_reason":"Consolidated migrate-* commands under bd migrate parent with backwards-compat aliases","pinned":true}
{"id":"bd-dp4w","title":"Test message","description":"This is a test message body","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-16T18:11:58.467876-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-dqu8","title":"Restart running daemons","description":"Kill and restart any running bd daemons to pick up new version: pkill -f 'bd daemon' \u0026\u0026 bd daemon --start","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T00:32:26.559311-08:00","updated_at":"2025-12-20T00:32:59.123766-08:00","closed_at":"2025-12-20T00:32:59.123766-08:00","close_reason":"Daemons restarted - now running 0.30.7","dependencies":[{"issue_id":"bd-dqu8","depends_on_id":"bd-6s61","type":"parent-child","created_at":"2025-12-20T00:32:39.36213-08:00","created_by":"daemon"},{"issue_id":"bd-dqu8","depends_on_id":"bd-fgw3","type":"blocks","created_at":"2025-12-20T00:32:39.427846-08:00","created_by":"daemon"}]}
{"id":"bd-drcx","title":"bd mol run: Support proto lookup by title","description":"`bd mol run` only accepts proto ID (e.g., gt-lwuu), not proto title (e.g., mol-polecat-work).\n\n## Current Behavior\n```bash\nbd mol run mol-polecat-work --var issue=gt-xxx\n# Error: no issue found matching \"mol-polecat-work\"\n\nbd mol run gt-lwuu --var issue=gt-xxx \n# Works\n```\n\n## Desired Behavior\nBoth should work - lookup by ID or by title.\n\n## Why This Matters\n- Proto titles are human-readable and memorable\n- Proto IDs are opaque (gt-lwuu vs mol-polecat-work)\n- Hardcoding IDs in code is fragile (IDs change across databases)\n- `bd mol catalog` shows both: `gt-lwuu: mol-polecat-work`\n\n## Workaround\nCurrently using hardcoded proto ID in gt spawn, which is brittle.","status":"closed","priority":2,"issue_type":"feature","assignee":"beads/dave","created_at":"2025-12-24T23:12:49.151242-08:00","updated_at":"2025-12-24T23:32:20.615624-08:00","closed_at":"2025-12-24T23:32:20.615624-08:00","close_reason":"Fixed"}
@@ -348,7 +348,7 @@
{"id":"bd-jke6","title":"Add covering index (label, issue_id) for label queries","description":"GetIssuesByLabel joins labels table but requires table lookup after using idx_labels_label.\n\n**Query (labels.go:165):**\n```sql\nSELECT ... FROM issues i\nJOIN labels l ON i.id = l.issue_id\nWHERE l.label = ?\n```\n\n**Problem:** Current idx_labels_label index doesn't cover issue_id, requiring row lookup.\n\n**Solution:** Add migration:\n```sql\nCREATE INDEX IF NOT EXISTS idx_labels_label_issue ON labels(label, issue_id);\n```\n\nThis is a covering index - query can be satisfied entirely from the index without touching the labels table rows.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-22T22:58:51.485354-08:00","updated_at":"2025-12-22T23:15:13.839904-08:00","closed_at":"2025-12-22T23:15:13.839904-08:00","close_reason":"Implemented in migration 026_additional_indexes.go","dependencies":[{"issue_id":"bd-jke6","depends_on_id":"bd-h0we","type":"discovered-from","created_at":"2025-12-22T22:58:51.485984-08:00","created_by":"daemon"}]}
{"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":"tombstone","priority":3,"issue_type":"feature","created_at":"2025-12-17T22:24:07.274485-08:00","updated_at":"2025-12-25T01:21:01.952723-08:00","deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"feature"}
{"id":"bd-kff0","title":"Integrate detect-pollution into bd doctor","description":"## Task\nMove `bd detect-pollution` → `bd doctor --check=pollution`\n\n## Current state\n- detect-pollution already shows deprecation hint pointing to doctor\n- Doctor command exists with multiple checks\n\n## Implementation\n\n### 1. Update doctor.go\n- Add pollution check to the doctor checks\n- Add `--check=pollution` flag option\n- Integrate detect-pollution logic\n\n### 2. Update detect_pollution.go\n- Mark as hidden (deprecated)\n- Forward to doctor --check=pollution\n- Keep for one release cycle\n\n### 3. Update docs\n- Remove detect-pollution from any command lists\n- Update doctor docs to include pollution check\n\n## Files to modify\n- cmd/bd/doctor.go\n- cmd/bd/detect_pollution.go\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-27T15:11:10.46326-08:00","created_by":"mayor","updated_at":"2025-12-27T15:11:10.46326-08:00"}
{"id":"bd-kff0","title":"Integrate detect-pollution into bd doctor","description":"## Task\nMove `bd detect-pollution` → `bd doctor --check=pollution`\n\n## Current state\n- detect-pollution already shows deprecation hint pointing to doctor\n- Doctor command exists with multiple checks\n\n## Implementation\n\n### 1. Update doctor.go\n- Add pollution check to the doctor checks\n- Add `--check=pollution` flag option\n- Integrate detect-pollution logic\n\n### 2. Update detect_pollution.go\n- Mark as hidden (deprecated)\n- Forward to doctor --check=pollution\n- Keep for one release cycle\n\n### 3. Update docs\n- Remove detect-pollution from any command lists\n- Update doctor docs to include pollution check\n\n## Files to modify\n- cmd/bd/doctor.go\n- cmd/bd/detect_pollution.go\n","status":"in_progress","priority":2,"issue_type":"task","assignee":"onyx","created_at":"2025-12-27T15:11:10.46326-08:00","created_by":"mayor","updated_at":"2025-12-27T15:57:28.526311-08:00","pinned":true}
{"id":"bd-knta","title":"Deacon Patrol","description":"Mayor's daemon patrol loop for handling callbacks, health checks, and cleanup.","status":"tombstone","priority":2,"issue_type":"molecule","created_at":"2025-12-26T13:08:21.233771-08:00","updated_at":"2025-12-27T00:10:54.179341-08:00","deleted_at":"2025-12-27T00:10:54.179341-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"molecule"}
{"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":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-17T23:29:33.049272-08:00","updated_at":"2025-12-24T22:41:09.184574-08:00","closed_at":"2025-12-24T22:41:09.184574-08:00","close_reason":"Fixed by replacing git rebase with content-level merge in divergence recovery"}
@@ -571,7 +571,7 @@
{"id":"bd-vpan","title":"Re: Thread Test 2","description":"Got your message. Testing reply feature.","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-16T18:21:29.144352-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","dependencies":[{"issue_id":"bd-vpan","depends_on_id":"bd-x36g","type":"replies-to","created_at":"2025-12-18T13:45:31.137191-08:00","created_by":"migration"}],"deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"}
{"id":"bd-vs9","title":"Fix unparam unused parameter in cmd/bd/doctor.go:541","description":"Linting issue: checkHooksQuick - path is unused (unparam) at cmd/bd/doctor.go:541:22. Error: func checkHooksQuick(path string) string {","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-07T15:35:17.02177046-07:00","updated_at":"2025-12-25T01:21:01.952723-08:00","deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
{"id":"bd-w193","title":"Work on beads-399: Add omitempty to JSONL fields for smal...","description":"Work on beads-399: Add omitempty to JSONL fields for smaller notifications. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T22:55:37.440894-08:00","updated_at":"2025-12-19T23:28:32.42751-08:00","closed_at":"2025-12-19T23:23:09.542288-08:00","close_reason":"Added omitempty to Description and Dependency.CreatedBy fields in types.go"}
{"id":"bd-w3z7","title":"Move cook to formula subcommand","description":"## Task\nMove `bd cook` → `bd formula cook`\n\n## Implementation\n\n### 1. Update formula.go\n- Add `cookCmd` as subcommand of `formulaCmd`\n- Import necessary packages from cook.go if not already present\n\n### 2. Update cook.go\n- Remove `rootCmd.AddCommand(cookCmd)` from init()\n- Keep the command implementation as-is\n\n### 3. Create hidden alias for backwards compatibility\n- In main.go or aliases file, add:\n ```go\n aliasCmd := \u0026cobra.Command{\n Use: \"cook\",\n Hidden: true,\n Run: func(cmd *cobra.Command, args []string) {\n // Forward to formula cook\n },\n }\n ```\n\n### 4. Update docs\n- docs/MOLECULES.md - if `bd cook` mentioned\n- CHANGELOG.md - add deprecation notice\n\n## Files to modify\n- cmd/bd/formula.go (add subcommand)\n- cmd/bd/cook.go (change registration)\n- cmd/bd/main.go (add hidden alias)\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-27T15:10:21.169344-08:00","created_by":"mayor","updated_at":"2025-12-27T15:10:21.169344-08:00"}
{"id":"bd-w3z7","title":"Move cook to formula subcommand","description":"## Task\nMove `bd cook` → `bd formula cook`\n\n## Implementation\n\n### 1. Update formula.go\n- Add `cookCmd` as subcommand of `formulaCmd`\n- Import necessary packages from cook.go if not already present\n\n### 2. Update cook.go\n- Remove `rootCmd.AddCommand(cookCmd)` from init()\n- Keep the command implementation as-is\n\n### 3. Create hidden alias for backwards compatibility\n- In main.go or aliases file, add:\n ```go\n aliasCmd := \u0026cobra.Command{\n Use: \"cook\",\n Hidden: true,\n Run: func(cmd *cobra.Command, args []string) {\n // Forward to formula cook\n },\n }\n ```\n\n### 4. Update docs\n- docs/MOLECULES.md - if `bd cook` mentioned\n- CHANGELOG.md - add deprecation notice\n\n## Files to modify\n- cmd/bd/formula.go (add subcommand)\n- cmd/bd/cook.go (change registration)\n- cmd/bd/main.go (add hidden alias)\n","status":"closed","priority":2,"issue_type":"task","assignee":"obsidian","created_at":"2025-12-27T15:10:21.169344-08:00","created_by":"mayor","updated_at":"2025-12-27T16:00:56.582141-08:00","closed_at":"2025-12-27T16:00:56.582141-08:00","close_reason":"Moved bd cook to bd formula cook with hidden alias for backwards compatibility","pinned":true}
{"id":"bd-w8g0","title":"test pin issue","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-20T22:44:27.963361-08:00","updated_at":"2025-12-20T22:44:57.977229-08:00","deleted_at":"2025-12-20T22:44:57.977229-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"bd-wa2l","title":"bd cook: Compile formula to proto","description":"Implement the 'bd cook' command that transforms formulas into protos:\n\nUsage: bd cook \u003cformula-file\u003e [options]\n bd cook .beads/formulas/*.formula.yaml\n\nProcess:\n1. Parse formula YAML (uses formula parser)\n2. Resolve extends (formula inheritance)\n3. Expand macros (expansion rules)\n4. Apply aspects (cross-cutting concerns)\n5. Generate flat proto bead\n\nOutput:\n- Creates proto bead in .beads/ with mol-prefix\n- Proto has all steps pre-expanded\n- Proto is ready for pour/wisp instantiation\n\nExample:\n bd cook .beads/formulas/mol-deacon-patrol.formula.yaml\n → Creates mol-deacon-patrol proto bead\n\nGas Town tracking: gt-8tmz.13","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T13:19:53.66483-08:00","updated_at":"2025-12-24T13:44:20.020124-08:00","closed_at":"2025-12-24T13:44:20.020124-08:00","close_reason":"Implemented by Dave","dependencies":[{"issue_id":"bd-wa2l","depends_on_id":"bd-weu8","type":"blocks","created_at":"2025-12-24T13:20:00.070003-08:00","created_by":"daemon"}]}
{"id":"bd-wb9g","title":"Relocate thanks command to bd info --thanks","description":"## Task\nMove `bd thanks` → `bd info --thanks`\n\n## Implementation\n\n### 1. Update info.go\n- Add `--thanks` flag\n- Import thanks.go display logic\n- When --thanks flag set, call thanks display function\n\n### 2. Update thanks.go\n- Export the display function (rename to public)\n- Remove rootCmd.AddCommand()\n- Optionally keep as hidden alias\n\n### 3. Update docs\n- README.md if mentioned\n- CHANGELOG.md - deprecation notice\n\n## Files to modify\n- cmd/bd/info.go\n- cmd/bd/thanks.go\n","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-27T15:11:10.019562-08:00","created_by":"mayor","updated_at":"2025-12-27T15:11:10.019562-08:00"}
@@ -579,7 +579,7 @@
{"id":"bd-weu8","title":"Formula parser: YAML schema for .formula.yaml files","description":"Implement formula parsing from YAML:\n- Define YAML schema for .formula.yaml files\n- Parse steps, compose rules, vars\n- Support extends for formula inheritance\n- Validate formula structure\n\nSchema should support:\n- formula: name\n- description: text\n- version: number\n- type: workflow|expansion|aspect\n- vars: variable definitions\n- steps: step definitions\n- compose: composition rules\n\nGas Town tracking: gt-8tmz.12","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T13:19:41.30319-08:00","updated_at":"2025-12-24T13:44:20.018577-08:00","closed_at":"2025-12-24T13:44:20.018577-08:00","close_reason":"Implemented by Dave"}
{"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-wp5j","title":"Merge: bd-indn","description":"branch: polecat/rictus\ntarget: main\nsource_issue: bd-indn\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T20:45:51.286598-08:00","updated_at":"2025-12-23T21:21:57.697826-08:00","closed_at":"2025-12-23T21:21:57.697826-08:00","close_reason":"stale - no code pushed"}
{"id":"bd-x0zl","title":"Remove/relocate pin command (covered by mol commands)","description":"## Task\nReview and potentially remove `bd pin` as it overlaps with mol commands.\n\n## Analysis needed\n- `bd pin` sets the pinned flag on issues for agent work assignment\n- `bd hook` shows what's pinned to an agent\n- `bd unpin` removes the pinned flag\n- `bd mol` commands deal with molecules/templates\n\n## Options\n1. **Keep as-is**: pin/unpin are about work assignment, mol is about templates\n2. **Move under mol**: `bd mol pin`, `bd mol unpin` \n3. **Deprecate**: If mol commands fully cover the use case\n\n## Decision criteria\n- Are pin/unpin used independently of mol workflows?\n- Does Gas Town (gt) use these commands?\n\n## Recommendation\nCheck gt codebase for usage patterns before deciding. If pin/unpin are primarily used with mol workflows, consolidate under mol. If used independently, keep as-is.\n\n## Files potentially affected\n- cmd/bd/pin.go\n- cmd/bd/unpin.go\n- cmd/bd/hook.go\n- cmd/bd/mol.go (if moving)\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-27T15:11:09.799471-08:00","created_by":"mayor","updated_at":"2025-12-27T15:11:09.799471-08:00"}
{"id":"bd-x0zl","title":"Remove/relocate pin command (covered by mol commands)","description":"## Task\nReview and potentially remove `bd pin` as it overlaps with mol commands.\n\n## Analysis needed\n- `bd pin` sets the pinned flag on issues for agent work assignment\n- `bd hook` shows what's pinned to an agent\n- `bd unpin` removes the pinned flag\n- `bd mol` commands deal with molecules/templates\n\n## Options\n1. **Keep as-is**: pin/unpin are about work assignment, mol is about templates\n2. **Move under mol**: `bd mol pin`, `bd mol unpin` \n3. **Deprecate**: If mol commands fully cover the use case\n\n## Decision criteria\n- Are pin/unpin used independently of mol workflows?\n- Does Gas Town (gt) use these commands?\n\n## Recommendation\nCheck gt codebase for usage patterns before deciding. If pin/unpin are primarily used with mol workflows, consolidate under mol. If used independently, keep as-is.\n\n## Files potentially affected\n- cmd/bd/pin.go\n- cmd/bd/unpin.go\n- cmd/bd/hook.go\n- cmd/bd/mol.go (if moving)\n","status":"closed","priority":2,"issue_type":"task","assignee":"topaz","created_at":"2025-12-27T15:11:09.799471-08:00","created_by":"mayor","updated_at":"2025-12-27T16:01:53.437698-08:00","closed_at":"2025-12-27T16:01:53.437698-08:00","close_reason":"Removed dead code: bd pin, unpin, hook commands (never used by gt)","comments":[{"id":4,"issue_id":"bd-x0zl","author":"stevey","text":"## Analysis Complete\n\n**Findings:**\n- bd pin, bd unpin, bd hook are **never used** by gt\n- gt uses bd update --status=pinned --assignee=agent instead (10 usages)\n- Code comment says 'pinned field is cosmetic for bd hook visibility'\n- gt mol status provides equivalent hook inspection\n\n**Recommendation:** Remove all three commands as dead code.","created_at":"2025-12-28T00:00:14Z"}],"pinned":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":"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"}