bd daemon sync: 2026-01-11 18:16:14

This commit is contained in:
beads/refinery
2026-01-11 18:16:14 -08:00
committed by Steve Yegge
parent 2caf5eeba0
commit 63f66c1223

View File

@@ -112,6 +112,7 @@
{"id":"bd-1f64","title":"Add comprehensive tests for config.yaml issue-prefix migration","description":"The GH #209 config.yaml migration lacks test coverage:\n\nMissing tests:\n- config.SetIssuePrefix() edge cases (empty file, comments, malformed YAML)\n- config.GetIssuePrefix() with various config states\n- MigrateConfigToYAML() automatic migration logic\n- bd init writing to config.yaml instead of DB\n- bd migrate DB→config.yaml migration path\n\nTest scenarios needed:\n1. SetIssuePrefix with empty config.yaml\n2. SetIssuePrefix with existing config.yaml (preserves other settings)\n3. SetIssuePrefix with commented issue-prefix line\n4. SetIssuePrefix atomic write (temp file cleanup)\n5. GetIssuePrefix fallback behavior\n6. MigrateConfigToYAML when config.yaml missing prefix but DB has it\n7. MigrateConfigToYAML when both missing (detect from issues)\n8. MigrateConfigToYAML when config.yaml already has prefix (no-op)\n9. Integration test: fresh bd init writes to config.yaml only\n10. Integration test: upgrade from v0.21 DB migrates to config.yaml\n\nPriority 1 because this is a user-facing migration affecting all users upgrading to v0.22.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-03T22:33:43.08753-08:00","updated_at":"2025-11-03T22:46:16.306565-08:00","closed_at":"2025-11-03T22:46:16.306565-08:00"}
{"id":"bd-1fkr","title":"bd-hv01: Storage backend extensibility broken by type assertion","description":"Problem: deletion_tracking.go:69-82 uses type assertion for DeleteIssue which breaks if someone adds a new storage backend.\n\nFix: Check capability before starting merge or add DeleteIssue to Storage interface.\n\nFiles: cmd/bd/deletion_tracking.go:69-82, internal/storage/storage.go","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-06T18:16:20.770662-08:00","updated_at":"2025-11-06T18:55:08.666253-08:00","closed_at":"2025-11-06T18:55:08.666253-08:00","dependencies":[{"issue_id":"bd-1fkr","depends_on_id":"bd-rbxi","type":"parent-child","created_at":"2025-11-06T18:19:14.925961-08:00","created_by":"daemon"}]}
{"id":"bd-1h8","title":"Fix compact --analyze/--apply error messages to clarify direct mode requirement","description":"**Problem:**\nWhen users run `bd compact --analyze` with daemon running, they get:\n```\nError: compact requires SQLite storage\n```\n\nThis is misleading because they ARE using SQLite (via daemon), but the command needs DIRECT SQLite access.\n\n**Current behavior:**\n- Error message suggests they don't have SQLite\n- No hint about using --no-daemon flag\n- Related to issue #349 item #1\n\n**Proposed fix:**\n1. Update error messages in cmd/bd/compact.go lines 106-114 (analyze) and 121-137 (apply)\n2. Add explicit hint: \"Use --no-daemon flag to bypass daemon\"\n3. Change SQLite check error from \"requires SQLite storage\" to \"failed to open database in direct mode\"\n\n**Files to modify:**\n- cmd/bd/compact.go (lines ~106-137)\n\n**Testing:**\n- Run with daemon: `bd compact --analyze` should show clear error + hint\n- Run with --no-daemon: `bd compact --analyze --no-daemon` should work\n- Verify error message is actionable","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-11-20T20:47:45.606924-05:00","updated_at":"2025-11-20T20:59:13.406952-05:00","closed_at":"2025-11-20T20:59:13.406952-05:00"}
{"id":"bd-1hc40","title":"Blocking issue","status":"open","priority":1,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:13.008593-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:13.008593-08:00"}
{"id":"bd-1hu59","title":"Test failures: schema mismatch after owner field addition","description":"Pre-existing test failures detected during refinery patrol:\n\n1. cmd/bd: TestResolveProtoIDOrTitle - sql: expected 31 destination arguments in Scan, not 32\n2. internal/storage/sqlite: TestGetIssuesByLabel - same scan mismatch\n3. internal/storage/sqlite: TestMigrateContentHashColumn - no such column: owner\n\nRoot cause: The 'owner' field was added (ceb5769c) but tests/fixtures are not updated to match the new schema.\n\nFiles affected:\n- cmd/bd template tests\n- internal/storage/sqlite/labels_test.go\n- internal/storage/sqlite/migrations_test.go","status":"open","priority":1,"issue_type":"bug","created_at":"2026-01-10T22:00:41.275253-08:00","created_by":"beads/refinery","updated_at":"2026-01-10T22:00:41.275253-08:00"}
{"id":"bd-1juu","title":"Merge: obsidian-mjxeci6l","description":"branch: polecat/obsidian-mjxeci6l\ntarget: main\nsource_issue: obsidian-mjxeci6l\nrig: beads\nagent_bead: bd-beads-polecat-obsidian","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2026-01-02T13:44:06.098083-08:00","created_by":"beads/polecats/obsidian","updated_at":"2026-01-02T17:14:50.490086-08:00","closed_at":"2026-01-02T17:14:50.490086-08:00","close_reason":"Orphaned MR - obsidian stopped (merged no-op), branch never pushed"}
{"id":"bd-1jylp","title":"Session ended: gt-beads-refinery","status":"closed","priority":2,"issue_type":"event","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T00:42:19.49972-08:00","created_by":"beads/refinery","updated_at":"2026-01-11T00:42:19.562255-08:00","closed_at":"2026-01-11T00:42:19.562255-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}
@@ -463,6 +464,7 @@
{"id":"bd-6dnt","title":"Code smell: Duplicated IssueDetails struct in show.go (4 definitions)","description":"The IssueDetails struct is defined 4 times within show.go at lines 109, 159, 190, and 372 with identical structure but slightly different JSON tag configurations.\n\n**Problem:**\n- Violates DRY principle\n- Makes maintenance harder - changes must be applied to multiple locations\n- Increases risk of inconsistency between definitions\n- Takes up ~50 lines of duplicated code\n\n**Acceptance Criteria:**\n- [ ] Extract IssueDetails to a single package-level type\n- [ ] Update all 4 locations to use the shared type\n- [ ] Ensure JSON output remains consistent\n- [ ] Tests pass","status":"closed","priority":2,"issue_type":"chore","created_at":"2025-12-28T18:58:58.42739-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-29T14:04:04.398691-08:00","closed_at":"2025-12-29T14:04:04.398691-08:00","close_reason":"Extracted IssueDetails to types.IssueDetails - removed 5 duplicate definitions","dependencies":[{"issue_id":"bd-6dnt","depends_on_id":"bd-ox1o","type":"blocks","created_at":"2025-12-28T19:00:23.554676-08:00","created_by":"daemon"}]}
{"id":"bd-6ed8","title":"Fixture Generator for Realistic Test Data","description":"Create internal/testutil/fixtures/fixtures.go with functions to generate realistic test data at scale.\n\nFunctions:\n- LargeSQLite(storage) - 10K issues, native SQLite\n- XLargeSQLite(storage) - 20K issues, native SQLite \n- LargeFromJSONL(storage) - 10K issues imported from JSONL\n- XLargeFromJSONL(storage) - 20K issues imported from JSONL\n\nData characteristics:\n- Epic hierarchies (depth 4): Epic → Feature → Task → Subtask\n- Cross-linked dependencies (tasks blocking across epics)\n- Realistic status/priority/label distribution\n- Representative assignees and temporal data\n\nImplementation:\n- Single file: internal/testutil/fixtures/fixtures.go\n- No config structs, simple direct functions\n- Seeded RNG for reproducibility\n- Reusable by both benchmarks and tests","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-11-13T22:22:28.233977-08:00","updated_at":"2025-11-13T22:40:19.485552-08:00","closed_at":"2025-11-13T22:40:19.485552-08:00","dependencies":[{"issue_id":"bd-6ed8","depends_on_id":"bd-3tfh","type":"blocks","created_at":"2025-11-13T22:23:58.120794-08:00","created_by":"daemon"},{"issue_id":"bd-6ed8","depends_on_id":"bd-m62x","type":"blocks","created_at":"2025-11-13T22:24:02.598071-08:00","created_by":"daemon"}]}
{"id":"bd-6fe4622f","title":"Remove unreachable utility functions","description":"Several small utility functions are unreachable:\n\nFiles to clean:\n1. `internal/storage/sqlite/hash.go` - `computeIssueContentHash` (line 17)\n - Check if entire file can be deleted if only contains this function\n\n2. `internal/config/config.go` - `FileUsed` (line 151)\n - Delete unused config helper\n\n3. `cmd/bd/git_sync_test.go` - `verifyIssueOpen` (line 300)\n - Delete dead test helper\n\n4. `internal/compact/haiku.go` - `HaikuClient.SummarizeTier2` (line 81)\n - Tier 2 summarization not implemented\n - Options: implement feature OR delete method\n\nImpact: Removes 50-100 LOC depending on decisions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-10-28T16:20:02.434573-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":"task"}
{"id":"bd-6ffj7","title":"Issue 2 to reopen","status":"open","priority":1,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:11.878829-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:12.098585-08:00"}
{"id":"bd-6gclq","title":"Session ended: gt-beads-crew-emma","status":"open","priority":2,"issue_type":"event","created_at":"2026-01-10T12:04:11.793827-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-10T12:04:11.793827-08:00","ephemeral":true}
{"id":"bd-6gd","title":"Remove legacy MCP Agent Mail integration","description":"## Summary\n\nRemove the legacy MCP Agent Mail system that requires an external HTTP server. Keep the native `bd mail` system which stores messages as git-synced issues.\n\n## Background\n\nTwo mail systems exist in the codebase:\n1. **Legacy Agent Mail** (`bd message`) - External server dependency, complex setup\n2. **Native bd mail** (`bd mail`) - Built-in, git-synced, no dependencies\n\nThe legacy system causes confusion and is no longer needed. Gas Town's Town Mail will use the native `bd mail` system.\n\n## Files to Delete\n\n### CLI Command\n- [ ] `cmd/bd/message.go` - The `bd message` command implementation\n\n### MCP Integration\n- [ ] `integrations/beads-mcp/src/beads_mcp/mail.py` - HTTP wrapper for Agent Mail server\n- [ ] `integrations/beads-mcp/src/beads_mcp/mail_tools.py` - MCP tool definitions\n- [ ] `integrations/beads-mcp/tests/test_mail.py` - Tests for legacy mail\n\n### Documentation\n- [ ] `docs/AGENT_MAIL.md`\n- [ ] `docs/AGENT_MAIL_QUICKSTART.md`\n- [ ] `docs/AGENT_MAIL_DEPLOYMENT.md`\n- [ ] `docs/AGENT_MAIL_MULTI_WORKSPACE_SETUP.md`\n- [ ] `docs/adr/002-agent-mail-integration.md`\n\n## Code to Update\n\n- [ ] Remove `message` command registration from `cmd/bd/main.go`\n- [ ] Remove mail tool imports/registration from MCP server `__init__.py` or `server.py`\n- [ ] Check for any other references to Agent Mail in the codebase\n\n## Verification\n\n- [ ] `bd message` command no longer exists\n- [ ] `bd mail` command still works\n- [ ] MCP server starts without errors\n- [ ] Tests pass\n","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T23:04:04.099935-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":"task"}
{"id":"bd-6hji","title":"Test exclusive file reservations with two agents","description":"Simulate two agents racing to claim the same issue and verify that exclusive reservations prevent collision.\n\nAcceptance Criteria:\n- Agent A reserves bd-123 → succeeds\n- Agent B tries to reserve bd-123 → fails with clear error message\n- Agent B can see who has the reservation\n- Reservation expires after TTL\n- Agent B can claim after expiration","notes":"Successfully tested file reservations:\n- Agent BrownBear reserved bd-123 → granted\n- Agent ChartreuseHill tried same → conflicts returned\n- System correctly prevents collision","status":"closed","priority":0,"issue_type":"task","created_at":"2025-11-07T22:41:59.963468-08:00","updated_at":"2025-11-08T00:03:18.004972-08:00","closed_at":"2025-11-08T00:03:18.004972-08:00","dependencies":[{"issue_id":"bd-6hji","depends_on_id":"bd-muls","type":"blocks","created_at":"2025-11-07T23:03:52.897843-08:00","created_by":"daemon"},{"issue_id":"bd-6hji","depends_on_id":"bd-27xm","type":"blocks","created_at":"2025-11-07T23:20:21.911222-08:00","created_by":"daemon"},{"issue_id":"bd-6hji","depends_on_id":"bd-spmx","type":"parent-child","created_at":"2025-11-08T00:02:47.904652-08:00","created_by":"daemon"}]}
@@ -540,6 +542,7 @@
{"id":"bd-7c831c51","title":"Run final validation and cleanup checks","description":"Final validation pass to ensure all cleanup objectives met and no regressions introduced.\n\nValidation checklist:\n1. Dead code verification: `go run golang.org/x/tools/cmd/deadcode@latest -test ./...`\n2. Test coverage: `go test -cover ./...`\n3. Build verification: `go build ./cmd/bd/`\n4. Linting: `golangci-lint run`\n5. Integration tests\n6. Metrics verification\n7. Git clean check\n\nFinal metrics to report:\n- LOC removed: ~____\n- Files deleted: ____\n- Files created: ____\n- Test coverage: ____%\n- Build time: ____ (before/after)\n- Test run time: ____ (before/after)\n\nImpact: Confirms all cleanup objectives achieved successfully","notes":"## Validation Results\n\n**Dead Code:** ✅ Found and removed 1 unreachable function (`DroppedEventsCount`) \n**Tests:** ✅ All pass \n**Coverage:** \n- Main: 39.6%\n- cmd/bd: 20.2%\n- Created follow-up issues (bd-85487065 through bd-bc2c6191) to improve coverage\n \n**Build:** ✅ Clean \n**Linting:** 73 issues (up from 34 baseline) \n- Increase due to unused functions from refactoring\n- Need cleanup in separate issue\n \n**Integration Tests:** ✅ All pass \n**Metrics:** 56,464 LOC across 193 Go files \n**Git:** 2 files modified (deadcode fix + auto-synced JSONL)\n\n## Follow-up Issues Created\n- bd-85487065: Add tests for internal/autoimport (0% coverage)\n- bd-0dcea000: Add tests for internal/importer (0% coverage)\n- bd-4d7fca8a: Add tests for internal/utils (0% coverage)\n- bd-6221bdcd: Improve cmd/bd coverage (20.2% -\u003e target higher)\n- bd-bc2c6191: Improve internal/daemon coverage (22.5% -\u003e target higher)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-29T20:02:47.956276-07:00","updated_at":"2025-10-30T17:12:58.193468-07:00","closed_at":"2025-10-29T14:19:35.095553-07:00"}
{"id":"bd-7cgmm","title":"Digest: mol-refinery-patrol","description":"Patrol: empty queue, 0 branches merged, no issues","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-11T05:00:23.463317-08:00","updated_at":"2026-01-11T05:00:23.463317-08:00","closed_at":"2026-01-11T05:00:23.463261-08:00","close_reason":"Squashed from 11 wisps"}
{"id":"bd-7da9437e","title":"Latency test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-10-29T15:28:52.729923-07:00","updated_at":"2025-10-31T12:00:43.184758-07:00","closed_at":"2025-10-31T12:00:43.184758-07:00"}
{"id":"bd-7dggh","title":"Issue to reopen with reason","status":"open","priority":1,"issue_type":"bug","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:12.262802-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:12.396225-08:00","comments":[{"id":14,"issue_id":"bd-7dggh","author":"beads/crew/wolf","text":"BG found a regression in production","created_at":"2026-01-12T02:16:12Z"}]}
{"id":"bd-7di","title":"worktree: any bd command is slow","description":"in a git worktree any bd command is slow, with a 2-3s pause before any results are shown. The identical command with `--no-daemon` is near instant.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-05T15:33:42.924618693-07:00","updated_at":"2025-12-25T22:04:11.200532-08:00","closed_at":"2025-12-25T22:04:11.200532-08:00"}
{"id":"bd-7e0d6660","title":"Handle unchecked errors (errcheck - 683 issues)","description":"683 unchecked error returns, mostly in tests (Close, Rollback, RemoveAll). Many already excluded in config but still showing up.","notes":"Fixed all errcheck warnings in production code:\n- Enabled errcheck linter (was disabled)\n- Set tests: false in .golangci.yml to focus on production code\n- Fixed 27 total errors in production code using Oracle guidance:\n * Database patterns: defer func() { _ = rows.Close() }() and defer func() { _ = tx.Rollback() }()\n * Best-effort closers: _ = store.Close(), _ = client.Close()\n * Proper error handling for file writes, fmt.Scanln(), os.Remove()\n- All tests pass\n- Only 2 \"unused\" linter warnings remain (not errcheck)","status":"closed","priority":3,"issue_type":"task","created_at":"2025-10-27T23:20:10.392336-07:00","updated_at":"2025-10-30T17:12:58.215288-07:00","closed_at":"2025-10-27T23:05:31.945328-07:00"}
{"id":"bd-7e7ddffa","title":"Repair Commands \u0026 AI-Assisted Tooling","description":"Add specialized repair tools to reduce agent repair burden:\n1. Git merge conflicts in JSONL\n2. Duplicate issues from parallel work\n3. Semantic inconsistencies\n4. Orphaned references\n\nSee ~/src/fred/beads/repair_commands.md for full design doc.\n\nReduces agent repair time from 5-10 minutes to \u003c30 seconds per repair.","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-10-28T19:30:17.465812-07:00","updated_at":"2025-11-02T17:08:52.043115-08:00","closed_at":"2025-11-02T17:08:52.043117-08:00"}
@@ -629,6 +632,7 @@
{"id":"bd-8ph6","title":"Support Ubuntu 20.04 LTS (glibc compatibility issue)","description":"Starting at v0.22, precompiled binaries require GLIBC 2.32+ which is not available on Ubuntu 20.04 LTS (Focal Fossa). Ubuntu 20.04 has GLIBC 2.31.\n\nError:\n```\nbd: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by bd)\nbd: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by bd)\n```\n\nCurrent workarounds:\n1. Upgrade to Ubuntu 22.04+\n2. Build from source: `go build -o bd ./cmd/bd/`\n\nRoot cause: Go 1.24+ runtime requires newer glibc. CGO is already disabled in .goreleaser.yml.\n\nPossible solutions:\n- Pin Go version to 1.21 or 1.22 for releases\n- Use Docker/cross-compile with older build environment\n- Provide separate build for older distros\n- Document minimum requirements clearly","notes":"Decision: Document minimum requirements in README instead of pinning Go version.\n\nRationale:\n- Ubuntu 20.04 LTS standard support ended April 2025 (already EOL)\n- Pinning Go prevents security fixes, performance improvements, and new features\n- Users on EOL distros can upgrade OS or build from source\n- Added Requirements section to README with clear glibc 2.32+ requirement","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-11-07T14:25:47.055357-08:00","updated_at":"2025-11-07T14:30:15.755733-08:00","closed_at":"2025-11-07T14:30:15.755733-08:00"}
{"id":"bd-8pyn","title":"Version Bump: 0.30.7","description":"Release checklist for version 0.30.7. This molecule ensures all release steps are completed properly.","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-19T22:56:48.648694-08:00","updated_at":"2025-12-20T00:49:51.927518-08:00","closed_at":"2025-12-20T00:25:59.529183-08:00"}
{"id":"bd-8ql","title":"Remove misleading placeholder 'bd merge' command from duplicates output","description":"**Problem:**\nThe `bd duplicates` command suggests running a command that doesn't exist:\n```\nbd merge \u003csource-ids\u003e --into \u003ctarget-id\u003e\n```\n\nThis is confusing because:\n1. `bd merge` is actually a git 3-way JSONL merge driver (takes 4 file paths)\n2. The suggested syntax for merging duplicate issues is not implemented\n3. Line 75 in duplicates.go even has: `// TODO: performMerge implementation pending`\n\n**Current behavior:**\n- Users see suggested command that doesn't work\n- No indication that feature is unimplemented\n- Related to issue #349 item #2\n\n**Proposed fix:**\nReplace line 77 in cmd/bd/duplicates.go with either:\n\nOption A (conservative):\n```go\ncmd := fmt.Sprintf(\"# TODO: Merge %s into %s (merge command not yet implemented)\", \n strings.Join(sources, \" \"), target.ID)\n```\n\nOption B (actionable):\n```go\ncmd := fmt.Sprintf(\"# Duplicate found: %s\\n# Manual merge: Close duplicates with 'bd close %s' and link to %s as 'related'\", \n strings.Join(sources, \" \"), strings.Join(sources, \" \"), target.ID)\n```\n\n**Files to modify:**\n- cmd/bd/duplicates.go (line ~77)","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-11-20T20:48:01.707967-05:00","updated_at":"2025-11-20T20:59:13.416865-05:00","closed_at":"2025-11-20T20:59:13.416865-05:00"}
{"id":"bd-8r9k9","title":"Test issue 0","status":"open","priority":0,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:10.663136-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:10.663136-08:00"}
{"id":"bd-8rd","title":"Migration and onboarding for multi-repo","description":"Create migration tools, wizards, and documentation to help users adopt multi-repo workflow, with special focus on OSS contributor onboarding and team adoption scenarios.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-11-04T11:22:13.491033-08:00","updated_at":"2025-11-07T16:08:24.951261-08:00","closed_at":"2025-11-07T16:03:09.75064-08:00","dependencies":[{"issue_id":"bd-8rd","depends_on_id":"bd-4ms","type":"parent-child","created_at":"2025-11-04T11:22:21.858002-08:00","created_by":"daemon"}]}
{"id":"bd-8rssb","title":"Session ended: gt-beads-crew-fang","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-07T21:33:52.477938-08:00","created_by":"beads/crew/fang","updated_at":"2026-01-09T21:15:40.694317-08:00","closed_at":"2026-01-09T21:15:40.694317-08:00","close_reason":"Stale session ended events"}
{"id":"bd-8uwdi","title":"Session ended: gt-beads-crew-dave","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-10T19:29:09.223322-08:00","created_by":"beads/crew/dave","updated_at":"2026-01-10T19:29:09.26506-08:00","closed_at":"2026-01-10T19:29:09.26506-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}
@@ -723,6 +727,7 @@
{"id":"bd-aec5439f","title":"Update LINTING.md with current baseline","description":"After cleanup, document the remaining acceptable baseline in LINTING.md so we can track regression.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-10-27T18:53:10.38679-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":"task"}
{"id":"bd-aewm","title":"bd-hv01: Missing cleanup of .merged temp file on failure","description":"Problem: deletion_tracking.go:49 creates tmpMerged file but does not clean up on failure, causing disk space leak and potential interference with subsequent syncs.\n\nFix: Add defer os.Remove(tmpMerged) after creating temp file path.\n\nFiles: cmd/bd/deletion_tracking.go:38-89","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-11-06T18:16:24.326719-08:00","updated_at":"2025-11-06T18:46:55.924379-08:00","closed_at":"2025-11-06T18:46:55.924379-08:00","dependencies":[{"issue_id":"bd-aewm","depends_on_id":"bd-rbxi","type":"parent-child","created_at":"2025-11-06T18:19:15.061462-08:00","created_by":"daemon"}]}
{"id":"bd-ag35","title":"Add daemon RPC endpoints for config and stale check","description":"Two TODOs request daemon RPC endpoints:\n\n1. cmd/bd/create.go:208 - Add RPC method to get config in daemon mode\n2. cmd/bd/mol_stale.go:67 - Add RPC endpoint for stale check\n\nThese would allow the CLI to query the daemon for configuration and staleness checks instead of reading directly.\n\nFiles:\n- cmd/bd/create.go:208\n- cmd/bd/mol_stale.go:67","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-28T16:32:38.113203-08:00","created_by":"stevey","updated_at":"2025-12-30T15:44:43.354686-08:00","closed_at":"2025-12-30T07:00:00.209327-08:00","close_reason":"Implemented GetConfig and MolStale RPC endpoints. CLI commands now work in daemon mode."}
{"id":"bd-ag4hc","title":"Issue 1 to reopen","status":"open","priority":1,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:11.807498-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:12.094895-08:00"}
{"id":"bd-agye","title":"Merge: quartz-1767083470444","description":"branch: polecat/quartz-1767083470444\ntarget: main\nsource_issue: quartz-1767083470444\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T00:36:39.737365-08:00","created_by":"beads/polecats/quartz","updated_at":"2025-12-30T00:54:59.2694-08:00","closed_at":"2025-12-30T00:54:59.2694-08:00","close_reason":"Branch polecat/quartz-1767083470444 no longer exists on remote"}
{"id":"bd-ahot","title":"HANDOFF: Molecule bonding - spawn done, bond next","description":"## Context\n\nContinuing work on bd-o5xe (Molecule bonding epic).\n\n## Completed This Session\n\n- bd-mh4w: Renamed bond to spawn in mol.go\n- bd-rnnr: Added BondRef data model to types.go\n\n## Now Unblocked\n\n1. bd-o91r: Polymorphic bond command [P1]\n2. bd-iw4z: Compound visualization [P2] \n3. bd-iq19: Distill command [P2]\n\n## Key Files\n\n- cmd/bd/mol.go\n- internal/types/types.go\n\n## Next Step\n\nStart with bd-o91r. Run bd show bd-o5xe for context.","status":"closed","priority":1,"issue_type":"message","created_at":"2025-12-21T01:32:13.940757-08:00","updated_at":"2025-12-21T11:24:30.171048-08:00","closed_at":"2025-12-21T11:24:30.171048-08:00"}
{"id":"bd-aim2r","title":"Digest: mol-refinery-patrol","description":"Patrol: queue empty, no branches to merge","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-11T00:20:40.702333-08:00","updated_at":"2026-01-11T00:20:40.702333-08:00","closed_at":"2026-01-11T00:20:40.702288-08:00","close_reason":"Squashed from 11 wisps","dependencies":[{"issue_id":"bd-aim2r","depends_on_id":"bd-wisp-1k6","type":"parent-child","created_at":"2026-01-11T00:20:40.703245-08:00","created_by":"beads/refinery"}]}
@@ -865,6 +870,7 @@
{"id":"bd-bxqv","title":"Update documentation for CLI consolidation","description":"## Task\nUpdate all documentation to reflect CLI consolidation changes.\n\n## Files requiring updates\n\n### Primary docs\n- docs/CLI_REFERENCE.md - Major updates\n - Add admin section (cleanup, compact, reset)\n - Update migrate section (subcommands)\n - Update formula section (add cook)\n - Remove/update standalone command references\n\n### Secondary docs \n- docs/DELETIONS.md - migrate-tombstones → migrate tombstones, compact → admin compact\n- docs/FAQ.md - compact → admin compact\n- docs/QUICKSTART.md - compact, cleanup → admin compact, admin cleanup\n- docs/TROUBLESHOOTING.md - compact → admin compact\n- docs/CONFIG.md - compact → admin compact\n- docs/INSTALLING.md - quickstart reference\n- docs/EXTENDING.md - quickstart reference\n\n### Skills docs\n- skills/beads/SKILL.md - compact, quickstart references\n- skills/beads/references/CLI_REFERENCE.md - mirror main CLI_REFERENCE.md\n\n### Other docs\n- commands/quickstart.md - update or remove\n- commands/compact.md - update to admin compact\n- examples/compaction/README.md - update examples\n- README.md - quickstart reference\n- CHANGELOG.md - add consolidation changes section\n\n## Implementation notes\n- Keep backwards compatibility notices where aliases exist\n- Update command examples to use new paths\n- Consider adding deprecation warnings section\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T15:11:33.307408-08:00","created_by":"mayor","updated_at":"2025-12-27T16:19:36.155138-08:00","closed_at":"2025-12-27T16:19:36.155138-08:00","dependencies":[{"issue_id":"bd-bxqv","depends_on_id":"bd-w3z7","type":"blocks","created_at":"2025-12-27T15:11:52.445529-08:00","created_by":"daemon"},{"issue_id":"bd-bxqv","depends_on_id":"bd-do8e","type":"blocks","created_at":"2025-12-27T15:11:52.475688-08:00","created_by":"daemon"},{"issue_id":"bd-bxqv","depends_on_id":"bd-3u8m","type":"blocks","created_at":"2025-12-27T15:11:52.504528-08:00","created_by":"daemon"},{"issue_id":"bd-bxqv","depends_on_id":"bd-kff0","type":"blocks","created_at":"2025-12-27T15:11:52.533506-08:00","created_by":"daemon"}]}
{"id":"bd-by0d","title":"Work on beads-ldv: Fix bd graph crashes with nil pointer ...","description":"Work on beads-ldv: Fix bd graph crashes with nil pointer dereference (GH#657). Fix nil pointer in computeDependencyCounts at graph.go:428. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T22:55:27.829359-08:00","updated_at":"2025-12-19T23:28:32.428314-08:00","closed_at":"2025-12-19T23:20:49.038441-08:00"}
{"id":"bd-by3x","title":"Windows binaries lack SQLite support (GH #253)","description":"Windows users installing via install.ps1 get \"sql: unknown driver sqlite\" error. Root cause: GoReleaser was building with CGO_ENABLED=0, which excludes SQLite driver.\n\nFixed by:\n1. Enabling CGO in .goreleaser.yml\n2. Installing MinGW cross-compiler in release workflow\n3. Splitting builds per platform to set correct CC for Windows\n\nNeeds new release to fix for users.","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-11-07T15:54:13.134815-08:00","updated_at":"2025-11-07T15:55:07.024156-08:00","closed_at":"2025-11-07T15:55:07.024156-08:00"}
{"id":"bd-bz1ac","title":"Issue to close","status":"closed","priority":1,"issue_type":"bug","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:11.26094-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:11.339129-08:00","closed_at":"2026-01-11T18:16:11.339129-08:00","close_reason":"Testing complete"}
{"id":"bd-bz1g7","title":"Merge: onyx-mk9abhg7","description":"branch: polecat/onyx-mk9abhg7\ntarget: main\nsource_issue: onyx-mk9abhg7\nrig: beads\nagent_bead: bd-beads-polecat-onyx\nretry_count: 0\nlast_conflict_sha: null\nconflict_task_id: null","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T21:30:34.094253-08:00","created_by":"stevey","updated_at":"2026-01-10T21:53:12.353742-08:00","closed_at":"2026-01-10T21:53:12.353742-08:00","close_reason":"Branch no longer exists on remote","labels":["gt:merge-request"]}
{"id":"bd-bz3gz","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-09T00:58:49.390425-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-09T00:58:49.4254-08:00","closed_at":"2026-01-09T00:58:49.4254-08:00","close_reason":"auto-closed session event"}
{"id":"bd-bzfy","title":"Integrate beads-merge tool by @neongreen","description":"**Context**: @neongreen built a production-ready 3-way merge tool for JSONL files that works with both Git and Jujutsu. This is superior to our planned bd resolve-conflicts because it prevents conflicts proactively instead of resolving them after the fact.\n\n**Tool**: https://github.com/neongreen/mono/tree/main/beads-merge\n\n**What it does**:\n- 3-way merge of JSONL files (base, left, right)\n- Field-level merging (titles, status, priority, etc.)\n- Smart dependency merging (union + dedup)\n- Conflict markers for unresolvable conflicts\n- Exit code 1 for conflicts (standard)\n\n**Integration options**:\n\n1. **Recommend (minimal effort)** - Document in AGENTS.md + TROUBLESHOOTING.md\n2. **Bundle binary** - Include in releases (cross-platform builds)\n3. **Port to Go** - Reimplement in bd codebase\n4. **Auto-install hook** - During bd init, offer to install merge driver\n\n**Recommendation**: Start with option 1 (document), then option 2 (bundle) once proven.\n\n**Related**: bd-5f483051 (bd resolve-conflicts - can close as superseded)","notes":"Created GitHub issue to discuss integration approach with @neongreen: https://github.com/neongreen/mono/issues/240\n\nAwaiting their preference on:\n1. Vendor with attribution (fastest)\n2. Extract as importable module (best long-term)\n3. Keep as separate tool (current state)\n\nNext: Wait for response before proceeding with integration.\n\nUPDATE 2025-11-06: @neongreen gave permission to vendor! Quote: \"I switched from beads to my own thing (tk) so I'm very happy to give beads-merge away — feel free to move it into the beads repo and I will point mono's readme to beads\"\n\nNext: Vendor beads-merge with full attribution","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-11-05T11:31:44.906652-08:00","updated_at":"2025-11-06T18:19:16.233387-08:00","closed_at":"2025-11-06T15:38:37.052274-08:00"}
@@ -1132,6 +1138,7 @@
{"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-fherg","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-09T00:29:38.494746-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-09T00:29:38.531019-08:00","closed_at":"2026-01-09T00:29:38.531019-08:00","close_reason":"auto-closed session event"}
{"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":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-13T07:14:33.831346-08:00","updated_at":"2025-12-25T01:21:01.952723-08:00","deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
{"id":"bd-firao","title":"BG's issue to reopen","status":"open","priority":1,"issue_type":"bug","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:11.502623-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:11.641379-08:00"}
{"id":"bd-fjth5","title":"Refactor: Use types.MaxHierarchyDepth constant for fallback default","description":"The GH#995 fix added fallback defaults in two places:\n\n- internal/storage/sqlite/hash_ids.go:58: `maxDepth = 3 // fallback default`\n- internal/storage/memory/memory.go:1606: `maxDepth = 3 // fallback default`\n\nThese duplicate the value from types.MaxHierarchyDepth (internal/types/id_generator.go:92).\n\nShould reference the constant instead of hardcoding 3 to maintain single source of truth.\n\nLow priority - cosmetic improvement.","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-10T13:36:08.122138-08:00","created_by":"beads/crew/fang","updated_at":"2026-01-10T13:36:08.122138-08:00","labels":["refactor"]}
{"id":"bd-fjuf","title":"Work on gt-8tmz.10: Rename Engineer in Box to Shiny. Rena...","description":"Work on gt-8tmz.10: Rename Engineer in Box to Shiny. Rename mol-engineer-in-box references to mol-shiny or just 'shiny'. Update docs and code in internal/formula/ and .beads/formulas/. When done: 1) bd close gt-8tmz.10, 2) bd sync, 3) git push, 4) gt mq submit","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:26:18.426959-08:00","updated_at":"2025-12-25T19:30:19.947382-08:00","closed_at":"2025-12-25T19:30:19.947382-08:00"}
{"id":"bd-fkdw","title":"Update bash-agent example with Agent Mail integration","description":"Add Agent Mail integration to examples/bash-agent/agent.sh using curl for HTTP calls.\n\nAcceptance Criteria:\n- Health check function using curl\n- Reserve issue before claiming\n- Send notifications on status change\n- Release on completion\n- Graceful degradation if curl fails\n- No bash errors when Agent Mail unavailable\n\nFile: examples/bash-agent/agent.sh","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-11-07T22:42:28.722048-08:00","updated_at":"2025-11-08T01:09:25.900138-08:00","closed_at":"2025-11-08T01:09:25.900138-08:00","dependencies":[{"issue_id":"bd-fkdw","depends_on_id":"bd-m9th","type":"blocks","created_at":"2025-11-07T23:04:01.398259-08:00","created_by":"daemon"}]}
@@ -1261,6 +1268,7 @@
{"id":"bd-i3ed","title":"Refactor bd setup to recipe-based architecture (GH#898)","description":"## Summary\n\nReplace tool-specific setup commands (cursor, claude, etc.) with a generic recipe-based system. New tools become config entries, not code changes.\n\n## Motivation\n\nGH#898 requests Kilo Code integration. Current approach requires new Go code for each tool:\n- `cmd/bd/setup/cursor.go`\n- `cmd/bd/setup/kilocode.go` (proposed)\n- `cmd/bd/setup/windsurf.go` (future?)\n- ...\n\nThis does not scale. All these integrations do the same thing:\n1. Generate markdown content (beads workflow instructions)\n2. Write to tool-specific path\n\nThe **content** is identical. Only the **destination path** varies.\n\n## Design\n\n### Core Insight\n\nBeads does not need to know anything about Kilo Code, Cursor, or Claude Code beyond where they read their rules files. That is a path mapping—data, not code.\n\n### Recipe Format\n\n```toml\n# .beads/recipes.toml (user additions/overrides)\n[cursor]\npath = \".cursor/rules/bd.md\"\n\n[claude]\npath = \"CLAUDE.md\"\n\n[kilocode]\npath = \".kilocode/rules/bd.md\"\n\n[my-custom-editor]\npath = \".myeditor/config/bd.md\"\n```\n\n### Built-in Defaults\n\nShip sensible defaults compiled into binary:\n- cursor → `.cursor/rules/bd.md`\n- claude → `CLAUDE.md`\n- windsurf → `.windsurf/rules/bd.md`\n- cody → `.cody/rules/bd.md` (verify path)\n\nUser file overrides/extends built-in defaults.\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `bd setup \u003crecipe\u003e` | Write template to recipe path |\n| `bd setup --list` | Show available recipes (built-in + user) |\n| `bd setup --print` | Dump template to stdout |\n| `bd setup -o \u003cpath\u003e` | Write to arbitrary path (escape hatch) |\n| `bd setup \u003crecipe\u003e --check` | Verify if installed |\n| `bd setup \u003crecipe\u003e --remove` | Delete the file |\n| `bd setup --add \u003cname\u003e \u003cpath\u003e` | Save custom recipe |\n\n### Template\n\nSingle markdown template embedded in binary. Contains:\n- What beads is\n- Key commands (`bd ready`, `bd create`, `bd close`, etc.)\n- Workflow guidance\n- JSON flags for programmatic use\n\n### Implementation Plan\n\n1. Add `--print` and `-o` flags to existing setup command\n2. Create `internal/recipes/` package\n - Built-in recipes (Go map or embed)\n - Load/merge user `.beads/recipes.toml`\n3. Refactor `cmd/bd/setup/setup.go` to use recipes\n4. Remove tool-specific files (`cursor.go`, etc.)\n5. Add `--add` command to save custom recipes\n6. Update documentation\n\n### Migration\n\nExisting `bd setup cursor` continues to work—just backed by recipe lookup instead of dedicated code.\n\n## Out of Scope (for now)\n\n- `--global` flag (user-level config paths) — use `-o` escape hatch\n- `mode: append` (add to existing file) — wait until requested\n- GitHub recipe registry — overkill for path mappings\n- TOML migration for config.yaml — separate initiative\n\n## Response to GH#898\n\nOnce implemented, respond to PR:\n\n\u003e Thanks for the contribution! We are refactoring `bd setup` to a recipe-based approach where new tools are config entries, not code changes.\n\u003e\n\u003e Instead of new Go files, please submit a PR adding Kilo Code to the built-in recipes in `internal/recipes/builtin.go` (or equivalent). Happy to help if you have questions!\n\n## References\n\n- GH#898: Kilo Code integration request\n- Current setup code: `cmd/bd/setup/`\n","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-01-04T20:05:44.32166-08:00","created_by":"beads/crew/fang","updated_at":"2026-01-04T21:57:21.225792-08:00","closed_at":"2026-01-04T21:57:21.225792-08:00","close_reason":"Implemented recipe-based architecture for bd setup"}
{"id":"bd-i54l","title":"Extract Gas Town-specific issue types from beads core","description":"dispatched_by: beads/crew/dave\n\n## Problem\n\nBeads has accumulated issue types that are specific to Gas Town's orchestration model:\n\n```go\nTypeAgent IssueType = \"agent\" // Agent identity bead\nTypeRole IssueType = \"role\" // Agent role definition \nTypeRig IssueType = \"rig\" // Rig identity bead (project container)\nTypeConvoy IssueType = \"convoy\" // Cross-project tracking\nTypeSlot IssueType = \"slot\" // Exclusive access slot (merge-slot gate)\n```\n\nThis violates separation of concerns. Beads is supposed to be a **generic AI-friendly issue tracker** that Gas Town happens to use - not \"Gas Town's issue tracker.\"\n\n## Impact\n\n- **Credibility**: Beads can't be presented as a standalone tool when it has hardcoded knowledge of a specific orchestration system\n- **Coupling**: Changes to Gas Town's identity model require beads releases\n- **Confusion**: Users outside Gas Town see types that don't apply to them\n\n## Solution\n\n### Option A: Labels instead of types\nGas Town uses labels like `gt:agent`, `gt:role`, `gt:rig` instead of dedicated types. Beads stays generic.\n\n### Option B: Type extension mechanism\nBeads supports custom type registration via config. Gas Town registers its types at init time.\n\n### Option C: Separate identity store\nGas Town maintains agent/role/rig identity outside beads entirely. Beads only tracks work items.\n\n## Types to evaluate\n\n| Type | Keep in beads? | Rationale |\n|------|----------------|-----------|\n| `gate` | Yes | Generic workflow concept (async waits) |\n| `molecule` | Yes | Generic workflow templates |\n| `agent` | **No** | Gas Town identity |\n| `role` | **No** | Gas Town identity |\n| `rig` | **No** | Gas Town identity |\n| `convoy` | **No** | Gas Town cross-rig tracking |\n| `slot` | Maybe | Could be generic \"mutex\" concept |\n\n## Files affected\n\n- `internal/types/types.go` - Type definitions\n- `cmd/bd/create.go` - Type validation\n- `cmd/bd/update.go` - Type validation \n- `internal/storage/sqlite/migrations/030_agent_fields.go` - Schema fields\n- Possibly others with type switch statements","status":"closed","priority":1,"issue_type":"epic","assignee":"beads/crew/dave","created_at":"2026-01-06T20:26:52.332746-08:00","created_by":"beads/crew/dave","updated_at":"2026-01-06T22:19:33.376638-08:00","closed_at":"2026-01-06T22:19:33.376638-08:00","close_reason":"Core type extraction complete. All Gas Town types (agent, role, rig, convoy, slot) removed from beads core and replaced with label-based identification. Remaining task bd-jybi is a data migration for existing beads, which is a deployment concern.","labels":["architecture","separation-of-concerns"]}
{"id":"bd-i5l","title":"Witness Patrol","description":"Per-rig worker monitor patrol loop with progressive nudging.","status":"tombstone","priority":2,"issue_type":"molecule","created_at":"2025-12-26T21:20:47.650732-08:00","created_by":"deacon","updated_at":"2025-12-27T00:10:54.176287-08:00","deleted_at":"2025-12-27T00:10:54.176287-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"molecule"}
{"id":"bd-i5zq3","title":"Assigned issue","status":"open","priority":1,"issue_type":"task","assignee":"testuser","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:13.648845-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:13.648845-08:00"}
{"id":"bd-i6fx4","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-10T12:44:57.191053-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-10T12:44:57.245416-08:00","closed_at":"2026-01-10T12:44:57.245416-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}
{"id":"bd-i7a6","title":"Test actor flag","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-26T20:47:28.470006-08:00","updated_at":"2025-12-28T09:26:06.084894-08:00","closed_at":"2025-12-28T09:26:06.084894-08:00"}
{"id":"bd-i8zab","title":"Batch wisp deletion in deleteSessionCostWisps","description":"## Problem\n\n`deleteSessionCostWisps()` (internal/cmd/costs.go:1188) burns wisps one at a time in a loop. This creates O(n) subprocess calls for deletion.\n\n## Location\n\ninternal/cmd/costs.go:1143-1191\n\n## Solution\n\nCheck if `bd mol burn` supports multiple IDs. If so, collect IDs and burn in one call.\nIf not, consider adding batch support to bd.","status":"closed","priority":3,"issue_type":"task","assignee":"beads/polecats/quartz","created_at":"2026-01-08T22:55:15.514066-08:00","created_by":"mayor","updated_at":"2026-01-09T00:25:53.94924-08:00","closed_at":"2026-01-09T00:25:53.94924-08:00","close_reason":"Implemented batch wisp deletion in bd mol burn and updated deleteSessionCostWisps to use it"}
@@ -1270,6 +1278,7 @@
{"id":"bd-ic1m","title":"Benchmark git traffic reduction","description":"Automated benchmark comparing git operations with/without Agent Mail.\n\nAcceptance Criteria:\n- Script that processes 50 issues\n- Counts git operations (pull, commit, push)\n- Generates comparison report\n- Verifies ≥70% reduction\n- Fails if regression detected\n\nFile: tests/benchmarks/git_traffic.py\n\nOutput: Without Agent Mail: 450 git operations, With Agent Mail: 135 git operations, Reduction: 70%","notes":"Implemented automated benchmark script with following features:\n- Processes configurable number of issues (default 50)\n- Compares git operations in two modes: git-only vs Agent Mail\n- Generates detailed comparison report with statistics\n- Exit code reflects pass/fail based on 70% reduction target\n- Results: 98.5% reduction (200 ops → 3 ops) for 50 issues\n\nFiles created:\n- tests/benchmarks/git_traffic.py (main benchmark script)\n- tests/benchmarks/README.md (documentation)\n- tests/benchmarks/git_traffic_50_issues.md (sample results)\n\nThe benchmark vastly exceeds the 70% target, showing 98.5% reduction.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-07T22:43:21.486095-08:00","updated_at":"2025-11-08T02:08:19.648473-08:00","closed_at":"2025-11-08T02:08:19.648473-08:00","dependencies":[{"issue_id":"bd-ic1m","depends_on_id":"bd-fzbg","type":"blocks","created_at":"2025-11-07T22:43:21.486966-08:00","created_by":"daemon"},{"issue_id":"bd-ic1m","depends_on_id":"bd-nemp","type":"blocks","created_at":"2025-11-07T22:43:21.487388-08:00","created_by":"daemon"}]}
{"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"}
{"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","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-id0vs","title":"Test issue 2","status":"open","priority":2,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:10.790204-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:10.790204-08:00"}
{"id":"bd-ie7j","title":"bd repair: Add --json output flag","description":"bd repair lacks --json output for machine-readable results, unlike most other bd commands.\n\nAdd --json flag that outputs structured JSON with:\n- orphan counts by type\n- list of orphaned references\n- repair status (success/failure)\n- backup path","status":"closed","priority":4,"issue_type":"feature","created_at":"2025-12-29T12:48:12.62521-08:00","created_by":"stevey","updated_at":"2025-12-29T12:57:43.747348-08:00","closed_at":"2025-12-29T12:57:43.747348-08:00","close_reason":"Implemented in repair.go: added orphan detection for comments/events tables and --json output flag"}
{"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"}
{"id":"bd-ifa0","title":"Merge: amber-1767146829144","description":"branch: polecat/amber-1767146829144\ntarget: main\nsource_issue: amber-1767146829144\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T18:11:33.875918-08:00","created_by":"beads/polecats/amber","updated_at":"2025-12-30T19:35:50.452577-08:00","closed_at":"2025-12-30T18:16:13.605293-08:00"}
@@ -1337,6 +1346,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-jvkt5","title":"Digest: mol-refinery-patrol","description":"Patrol cycle: queue empty, 0 branches merged, no issues","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T20:14:38.287395-08:00","updated_at":"2026-01-10T20:14:38.287395-08:00","closed_at":"2026-01-10T20:14:38.287363-08:00","close_reason":"Squashed from 11 wisps","dependencies":[{"issue_id":"bd-jvkt5","depends_on_id":"bd-wisp-d7b","type":"parent-child","created_at":"2026-01-10T20:14:38.288235-08:00","created_by":"beads/refinery"}]}
{"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-jvwjr","title":"Bug P0","status":"open","priority":0,"issue_type":"bug","assignee":"alice","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:13.828787-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:13.828787-08:00"}
{"id":"bd-jx90","title":"Add simple cleanup command to delete closed issues","description":"Users want a simple command to delete all closed issues without requiring Anthropic API key (unlike compact). Requested in GH #243.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-11-07T00:26:30.372137-08:00","updated_at":"2025-11-07T22:07:17.347122-08:00","closed_at":"2025-11-07T22:05:16.325863-08:00"}
{"id":"bd-jxp6","title":"Merge: jasper-1767142011373","description":"branch: polecat/jasper-1767142011373\ntarget: main\nsource_issue: jasper-1767142011373\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T16:57:20.349497-08:00","created_by":"beads/polecats/jasper","updated_at":"2025-12-30T18:12:30.965618-08:00","closed_at":"2025-12-30T18:11:07.859316-08:00"}
{"id":"bd-jy5f6","title":"Fix: Global install leaves invalid hooks (GH#955)","description":"dispatched_by: beads/crew/dave\n\nGitHub issue #955. Global installation leaves invalid hooks in settings.json causing Claude Code to fail.","status":"closed","priority":2,"issue_type":"bug","assignee":"beads/crew/grip","created_at":"2026-01-09T22:20:07.1156-08:00","created_by":"beads/crew/dave","updated_at":"2026-01-09T23:04:14.557469-08:00","closed_at":"2026-01-09T23:04:14.557469-08:00","close_reason":"Fixed: removeHookCommand now deletes hook keys when empty instead of leaving null values. Also added cleanup during install to fix existing broken settings."}
@@ -1593,6 +1603,7 @@
{"id":"bd-mypl","title":"Default bd list to non-closed issues","description":"Change bd list default from showing all issues to showing only actionable issues (open, in_progress, blocked, deferred). This addresses GH#788 where agents get context blown out by closed issues.\n\nCurrent: bd list shows everything including closed\nProposed: bd list shows non-closed by default\n\nThis is the core fix - other enhancements depend on this change.","notes":"## Implementation Plan\n\n### Code Changes (cmd/bd/list.go)\n\n1. **Add new filter logic in Run function** (~line 393-399):\n```go\n// Default to non-closed if no status filter specified\nif status == \"\" \u0026\u0026 \\!cmd.Flags().Changed(\"all\") {\n // Show actionable issues by default (GH#788)\n filter.ExcludeStatus = []types.Status{\"closed\"}\n}\n```\n\n2. **Need to add ExcludeStatus to IssueFilter** (internal/types/types.go):\n```go\ntype IssueFilter struct {\n // ... existing fields ...\n ExcludeStatus []Status // Exclude these statuses\n}\n```\n\n3. **Update SearchIssues query** (internal/storage/sqlite/issues.go):\n```go\nif len(filter.ExcludeStatus) \u003e 0 {\n placeholders := make([]string, len(filter.ExcludeStatus))\n for i, s := range filter.ExcludeStatus {\n placeholders[i] = \"?\"\n args = append(args, string(s))\n }\n conditions = append(conditions, \n fmt.Sprintf(\"status NOT IN (%s)\", strings.Join(placeholders, \",\")))\n}\n```\n\n### Testing\n- Verify `bd list` shows open, in_progress, blocked, deferred (not closed)\n- Verify `bd list --status=closed` still works\n- Verify `bd list --all` shows everything (requires bd-34q1)\n\n### Backwards Compatibility\n- Scripts using `bd list | grep` may get fewer results\n- Document in changelog: \"bd list now defaults to non-closed issues\"","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-29T15:25:06.38667-08:00","created_by":"stevey","updated_at":"2025-12-29T17:53:30.217188-08:00","closed_at":"2025-12-29T17:53:30.217188-08:00","close_reason":"Implemented in single commit","labels":["gh:788"]}
{"id":"bd-n0l8j","title":"Session ended: gt-beads-crew-fang","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-07T21:42:10.708451-08:00","created_by":"beads/crew/fang","updated_at":"2026-01-07T21:42:15.897669-08:00","closed_at":"2026-01-07T21:42:15.897669-08:00","close_reason":"auto-closed session event"}
{"id":"bd-n0md6","title":"Review and merge PR #975: fix sync --import-only store nil","description":"dispatched_by: beads/crew/emma\n\n## Task\nReview and merge PR #975 from juanre.\n\n**PR**: https://github.com/steveyegge/beads/pull/975\n\n## What it does\n- Adds ensureStoreActive() call after daemon disconnect in sync.go\n- Fixes 'no database store available for inline import' error\n- Includes comprehensive test documenting the bug and fix\n\n## Easy-win criteria met\n- Bug fix with clear reproduction and solution\n- Has comprehensive test\n- Small diff (143 additions, 0 deletions)\n- Low risk\n\n## Instructions\n1. Clone/fetch the PR: gh pr checkout 975 --repo steveyegge/beads\n2. Run tests: go test ./cmd/bd/...\n3. Review the diff: gh pr diff 975 --repo steveyegge/beads\n4. If tests pass and code looks good, approve and merge\n5. Close this bead when done","status":"closed","priority":2,"issue_type":"task","assignee":"beads/crew/fang","created_at":"2026-01-09T10:59:58.832796-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-09T13:44:59.1482-08:00","closed_at":"2026-01-09T13:44:59.1482-08:00","close_reason":"PR #975 reviewed, approved, and merged. Fix adds ensureStoreActive() call after daemon disconnect in sync.go to fix 'no database store available for inline import' error."}
{"id":"bd-n14te","title":"Test integration issue","description":"This is a real integration test","status":"open","priority":1,"issue_type":"bug","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:10.443519-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:10.443519-08:00"}
{"id":"bd-n25","title":"Speed up main_test.go - tests hang indefinitely due to nil rootCtx","description":"## Problem\n\nmain_test.go tests are hanging indefinitely, making them unusable and blocking development.\n\n## Root Cause\n\nTests that call flushToJSONL() or autoImportIfNewer() hang forever because:\n- rootCtx is nil in test environment (defined in cmd/bd/main.go:67)\n- flushToJSONL() uses rootCtx for DB operations (autoflush.go:503)\n- When rootCtx is nil, DB calls timeout/hang indefinitely\n\n## Affected Tests (10+)\n\n- TestAutoFlushOnExit\n- TestAutoFlushJSONLContent \n- TestAutoFlushErrorHandling\n- TestAutoImportIfNewer\n- TestAutoImportDisabled\n- TestAutoImportWithUpdate\n- TestAutoImportNoUpdate\n- TestAutoImportMergeConflict\n- TestAutoImportConflictMarkerFalsePositive\n- TestAutoImportClosedAtInvariant\n\n## Proof\n\n```bash\n# Before fix: TestAutoFlushJSONLContent HANGS (killed after 2+ min)\n# After adding rootCtx init: Completes in 0.04s\n# Speedup: ∞ → 0.04s\n```\n\n## Solution\n\nSee MAIN_TEST_OPTIMIZATION_PLAN.md for complete fix plan.\n\n**Quick Fix (5 min)**: Add to each hanging test:\n```go\nctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)\ndefer cancel()\noldRootCtx := rootCtx\nrootCtx = ctx\ndefer func() { rootCtx = oldRootCtx }()\n```\n\n**Full Optimization (40 min total)**:\n1. Fix rootCtx (5 min) - unblocks tests\n2. Reduce sleep durations 10x (2 min) - saves ~280ms\n3. Use in-memory DBs (10 min) - saves ~1s\n4. Share test fixtures (15 min) - saves ~1.2s\n5. Fix skipped debounce test (5 min)\n\n## Expected Results\n\n- Tests go from hanging → \u003c5s total runtime\n- Keep critical integration test coverage\n- Tests caught real bugs: bd-270, bd-206, bd-160\n\n## Files\n\n- Analysis: MAIN_TEST_REFACTOR_NOTES.md\n- Solution: MAIN_TEST_OPTIMIZATION_PLAN.md\n- Tests: cmd/bd/main_test.go (18 tests, 1322 LOC)\n\n## Priority\n\nP1 - Blocking development, tests unusable in current state","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-11-21T18:27:48.942814-05:00","updated_at":"2025-11-21T18:44:21.944901-05:00","closed_at":"2025-11-21T18:44:21.944901-05:00"}
{"id":"bd-n2xsj","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-10T16:13:41.779573-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-10T16:13:41.820512-08:00","closed_at":"2026-01-10T16:13:41.820512-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}
{"id":"bd-n386","title":"Improve test coverage for internal/daemon (27.3% → 60%)","description":"The daemon package has only 27.3% test coverage. The daemon is critical for background operations and reliability.\n\nKey areas needing tests:\n- Daemon autostart logic\n- Socket handling\n- PID file management\n- Health checks\n\nCurrent coverage: 27.3%\nTarget coverage: 60%","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-13T20:43:00.895238-08:00","updated_at":"2025-12-23T22:36:08.583672-08:00","closed_at":"2025-12-23T22:36:08.583672-08:00"}
@@ -1609,6 +1620,7 @@
{"id":"bd-ndye","title":"mergeDependencies uses union instead of 3-way merge","description":"## Critical Bug\n\nThe `mergeDependencies` function in internal/merge/merge.go performs a UNION of left and right dependencies instead of a proper 3-way merge. This causes removed dependencies to be resurrected.\n\n### Root Cause\n\n```go\n// Current code (lines 795-816):\nfunc mergeDependencies(left, right []Dependency) []Dependency {\n // Just unions left + right\n // NEVER REMOVES anything\n // Doesn't even look at base!\n}\n```\n\nAnd `mergeIssue` (line 579) doesn't pass `base`:\n```go\nresult.Dependencies = mergeDependencies(left.Dependencies, right.Dependencies)\n```\n\n### Impact\n\nIf:\n- Base has dependency D\n- Left removes D (intentional)\n- Right still has D (stale)\n\nCurrent: D is in result (resurrection!)\nCorrect: Left removed it, D should NOT be in result\n\nThis breaks Gas Town's workflow and data integrity. Closed means closed.\n\n### Fix\n\nChange `mergeDependencies` to take `base` and do proper 3-way merge:\n- If dep was in base and removed by left → exclude (left wins)\n- If dep was in base and removed by right → exclude (right wins)\n- If dep wasn't in base and added by either → include\n- If dep was in base and both still have it → include\n\nKey principle: **REMOVALS ARE AUTHORITATIVE**\n\n### Files to Change\n\n1. internal/merge/merge.go:\n - `mergeDependencies(left, right)` → `mergeDependencies(base, left, right)`\n - `mergeIssue` line 579: pass `base.Dependencies`\n\n### Related\n\nThis also explains why `ProtectLocalExportIDs` in importer is defined but never used - the protection was never actually implemented.","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-18T23:15:54.475872-08:00","updated_at":"2025-12-18T23:21:10.709571-08:00","closed_at":"2025-12-18T23:21:10.709571-08:00"}
{"id":"bd-ndyz","title":"GH#243: Recurring stale daemon.lock causes 5s delays","description":"User reports daemon.lock keeps becoming stale after running Claude with beads.\n\nSymptom:\n- bd ready takes 5 seconds (exact)\n- daemon.lock exists but socket is missing\n- bd daemons killall temporarily fixes it\n- Problem recurs after using beads with AI agents\n\nUser on v0.22.0, Macbook M2, 132 issues (89 closed)\n\nHypothesis: Daemon is crashing or exiting uncleanly during agent sessions, leaving stale lock file.\n\nNeed to:\n1. Add crash logging to daemon to understand why it's exiting\n2. Improve cleanup on daemon exit (ensure lock is always removed)\n3. Add automatic stale lock detection/cleanup\n4. Consider making daemon more resilient to crashes","notes":"Oracle analysis complete. Converting to epic with 5 focused sub-issues:\n1. RPC fast-fail with socket stat + short timeouts (P0)\n2. Standardize daemon detection with lock probe (P1) \n3. Crash recovery improvements (P2)\n4. Self-heal stale artifacts (P2)\n5. Diagnostics and debugging (P3)","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-11-07T16:32:23.576171-08:00","updated_at":"2025-11-07T22:07:17.347419-08:00","closed_at":"2025-11-07T21:29:56.009737-08:00"}
{"id":"bd-ne0h","title":"GHI #891: close_reason field dropped during merge/sync","description":"GitHub Issue #891: close_reason field dropped during merge/sync\n\nhttps://github.com/steveyegge/beads/issues/891","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-04T11:22:12.270387-08:00","created_by":"mayor","updated_at":"2026-01-04T15:22:07.769236-08:00","closed_at":"2026-01-04T11:28:48.394697-08:00","close_reason":"Fixed: Added CloseReason and ClosedBySession fields to merge.Issue struct with proper merge logic"}
{"id":"bd-necgc","title":"Test issue 1","status":"open","priority":1,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:10.724757-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:10.724757-08:00"}
{"id":"bd-nemp","title":"Measure git operation reduction","description":"Quantify the reduction in git operations (pulls, commits, pushes) when using Agent Mail for coordination.\n\nAcceptance Criteria:\n- Baseline: count git ops for 10 issues without Agent Mail\n- With Agent Mail: count git ops for 10 issues\n- Document reduction percentage\n- Verify 70-80% reduction claim\n- Measure impact on .git directory size growth\n\nSuccess Metric: ≥70% reduction in git operations","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-07T22:42:00.157334-08:00","updated_at":"2025-11-08T00:20:30.691721-08:00","closed_at":"2025-11-08T00:20:30.691721-08:00","dependencies":[{"issue_id":"bd-nemp","depends_on_id":"bd-6hji","type":"blocks","created_at":"2025-11-07T23:03:53.131532-08:00","created_by":"daemon"},{"issue_id":"bd-nemp","depends_on_id":"bd-htfk","type":"blocks","created_at":"2025-11-07T23:03:53.200321-08:00","created_by":"daemon"}]}
{"id":"bd-nevy3","title":"Digest: mol-refinery-patrol","description":"Patrol complete: MQ empty, no branches to process, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-11T02:33:59.887141-08:00","updated_at":"2026-01-11T02:33:59.887141-08:00","closed_at":"2026-01-11T02:33:59.88709-08:00","close_reason":"Squashed from 11 wisps"}
{"id":"bd-ng56","title":"bd-hv01: Three full JSONL reads on every sync (performance)","description":"Problem: computeAcceptedDeletions reads three JSONL files completely into memory (base, left, merged). For 1000 issues at 1KB each, this is 3MB read and 3000 JSON parse operations.\n\nImpact: Acceptable now (~20-35ms overhead) but will be slow for large repos (10k+ issues).\n\nPossible optimizations: single-pass streaming, memory-mapped files, binary format, incremental snapshots.\n\nFiles: cmd/bd/deletion_tracking.go:101-208","status":"closed","priority":3,"issue_type":"task","created_at":"2025-11-06T18:16:25.653076-08:00","updated_at":"2025-11-06T20:06:49.220818-08:00","closed_at":"2025-11-06T19:41:04.67733-08:00","dependencies":[{"issue_id":"bd-ng56","depends_on_id":"bd-rbxi","type":"parent-child","created_at":"2025-11-06T18:19:15.148149-08:00","created_by":"daemon"}]}
@@ -1720,6 +1732,7 @@
{"id":"bd-pbh.7","title":"Update beads_mcp/__init__.py to 0.30.4","description":"Update __version__ in integrations/beads-mcp/src/beads_mcp/__init__.py:\n```python\n__version__ = \"0.30.4\"\n```\n\n\n```verify\ngrep -q '__version__ = \"0.30.4\"' integrations/beads-mcp/src/beads_mcp/__init__.py\n```","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.005334-08:00","updated_at":"2025-12-25T01:21:01.952723-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.7","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.005699-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"bd-pbh.8","title":"Update npm-package/package.json to 0.30.4","description":"Update version field in npm-package/package.json:\n```json\n\"version\": \"0.30.4\"\n```\n\n\n```verify\njq -e '.version == \"0.30.4\"' npm-package/package.json\n```","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.014905-08:00","updated_at":"2025-12-25T01:21:01.952723-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.8","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.01529-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"bd-pbh.9","title":"Update hook templates to 0.30.4","description":"Update bd-hooks-version comment in all 4 hook templates:\n- cmd/bd/templates/hooks/pre-commit\n- cmd/bd/templates/hooks/post-merge\n- cmd/bd/templates/hooks/pre-push\n- cmd/bd/templates/hooks/post-checkout\n\nEach should have:\n```bash\n# bd-hooks-version: 0.30.4\n```\n\n\n```verify\ngrep -l 'bd-hooks-version: 0.30.4' cmd/bd/templates/hooks/* | wc -l | grep -q '4'\n```","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.0248-08:00","updated_at":"2025-12-25T01:21:01.952723-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.9","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.025124-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"bd-pd75r","title":"Feature P1","status":"open","priority":1,"issue_type":"feature","assignee":"bob","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:13.907182-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:13.907182-08:00"}
{"id":"bd-pdjb","title":"Testing \u0026 Validation","description":"Ensure reliability through comprehensive testing.","notes":"Completed comprehensive Agent Mail test coverage analysis and implementation.\n\n**Test Coverage Summary:**\n- 66 total tests across 5 files\n- 51 unit tests for HTTP adapter (0.02s)\n- 15 integration tests for multi-agent scenarios (~55s total)\n\n**New Tests Added:**\nCreated `test_multi_agent_coordination.py` (4 tests, 11s) covering:\n1. Fairness: 10 agents competing for 5 issues → exactly 1 claim per issue\n2. Notifications: End-to-end message delivery between agents\n3. Handoff: Clean reservation transfer from agent1 to agent2\n4. Idempotency: Double reserve/release by same agent\n\n**Coverage Quality:**\n✅ Collision prevention (race conditions)\n✅ Graceful degradation (7 failure modes)\n✅ TTL/expiration behavior\n✅ Multi-agent coordination\n✅ JSONL consistency\n✅ HTTP error handling\n✅ Authorization and configuration\n\n**Intentionally Skipped:**\n- Path traversal (validated elsewhere)\n- Retry policies (nice-to-have)\n- HTTPS/TLS (out of scope)\n- Slow tests (50+ agents, soak tests)\n\nSee `tests/integration/AGENT_MAIL_TEST_COVERAGE.md` for details.\n\nAll tests pass. Agent Mail integration is well-tested and reliable for multi-agent scenarios.","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-11-07T22:43:00.457985-08:00","updated_at":"2025-11-08T03:09:48.253758-08:00","closed_at":"2025-11-08T02:47:34.153586-08:00","dependencies":[{"issue_id":"bd-pdjb","depends_on_id":"bd-wfmw","type":"blocks","created_at":"2025-11-07T22:43:00.459403-08:00","created_by":"daemon"}]}
{"id":"bd-pdr2","title":"Consider backwards compatibility for ready() and list() return type change","description":"PR #481 changed the return types of `ready()` and `list()` from `list[Issue]` to `list[IssueMinimal] | CompactedResult`. This is a breaking change for MCP clients.\n\n## Impact Assessment\nBreaking change affects:\n- Any MCP client expecting `list[Issue]` from ready()\n- Any MCP client expecting `list[Issue]` from list()\n- Client code that accesses full Issue fields (description, design, acceptance_criteria, timestamps, dependencies, dependents)\n\n## Current Behavior\n- ready() returns `list[IssueMinimal] | CompactedResult`\n- list() returns `list[IssueMinimal] | CompactedResult`\n- show() still returns full `Issue` (good)\n\n## Considerations\n**Pros of current approach:**\n- Forces clients to use show() for full details (good for context efficiency)\n- Simple mental model (always use show for full data)\n- Documentation warns about this\n\n**Cons:**\n- Clients expecting list[Issue] will break\n- No graceful degradation option\n- No migration period\n\n## Potential Solutions\n1. Add optional parameter `full_details=false` to ready/list (would increase payload)\n2. Create separate tools: ready_minimal/list_minimal + ready_full/list_full\n3. Accept breaking change and document upgrade path (current approach)\n4. Version the MCP server and document migration guide\n\n## Recommendation\nCurrent approach (solution 3) is reasonable if:\n- Changelog clearly documents the breaking change\n- Migration guide provided to clients\n- Error handling is graceful for clients expecting specific fields","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-14T14:24:56.460465-08:00","updated_at":"2025-12-30T15:44:43.357467-08:00","closed_at":"2025-12-30T00:38:54.425634-08:00","close_reason":"Merged via refinery","dependencies":[{"issue_id":"bd-pdr2","depends_on_id":"bd-otf4","type":"discovered-from","created_at":"2025-12-14T14:24:56.461959-08:00","created_by":"stevey"}]}
{"id":"bd-pdwz","title":"Add t.Parallel() to slow hash multiclone tests","description":"Add t.Parallel() to TestHashIDs_MultiCloneConverge and TestHashIDs_IdenticalContentDedup so they run concurrently.\n\nExpected savings: ~10 seconds (from 20s to ~11s)\n\nImplementation:\n- Add t.Parallel() call at start of each test function\n- Verify tests don't share resources that would cause conflicts\n- Run tests to confirm they work in parallel\n\nFile: beads_hash_multiclone_test.go:34, :101","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-04T01:24:15.705228-08:00","updated_at":"2025-11-04T09:52:31.945545-08:00","closed_at":"2025-11-04T09:52:31.945545-08:00","dependencies":[{"issue_id":"bd-pdwz","depends_on_id":"bd-l5gq","type":"blocks","created_at":"2025-11-04T01:24:15.706149-08:00","created_by":"daemon"}]}
@@ -1742,10 +1755,10 @@
{"id":"bd-posw","title":"hq- prefix routing fails: '.' resolves relative to cwd, not town root","description":"## Problem\nThe hq- prefix in routes.jsonl maps to '.' which is interpreted relative to the current working directory, not the town root.\n\n## Reproduction\n```bash\ncd ~/gt \u0026\u0026 bd show hq-2cchm # Works\ncd ~/gt/beads/crew/emma \u0026\u0026 bd show hq-2cchm # Fails: 'no issue found'\n```\n\n## Root Cause\nroutes.jsonl has: {\"prefix\": \"hq-\", \"path\": \".\"}\n\nThe '.' is resolved relative to cwd, so from crew/emma it looks for ~/gt/beads/crew/emma/.beads/ instead of ~/gt/.beads/\n\n## Fix\nThe routing logic should resolve '.' as the town root, or the route should use an absolute path or a sentinel like 'TOWN_ROOT'.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-29T12:31:37.258235-08:00","created_by":"stevey","updated_at":"2025-12-29T13:45:37.471123-08:00","closed_at":"2025-12-29T13:45:37.471123-08:00","close_reason":"Fixed by adding town-aware route resolution"}
{"id":"bd-psg","title":"Add tests for dependency management","description":"Key dependency functions like mergeBidirectionalTrees, GetDependencyTree, and DetectCycles have low or no coverage. These are essential for maintaining data integrity in the dependency graph.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T07:00:43.458548462-07:00","updated_at":"2025-12-19T09:54:57.018745301-07:00","closed_at":"2025-12-18T10:24:56.271508339-07:00","dependencies":[{"issue_id":"bd-psg","depends_on_id":"bd-6ss","type":"discovered-from","created_at":"2025-12-18T07:00:43.463910911-07:00","created_by":"matt"}]}
{"id":"bd-pspk","title":"Fix: Empty coordinator shows blank in bd swarm create output","description":"Line 992 prints 'Coordinator: ' even when coordinator is empty string.\n\nShould either:\n- Print 'Coordinator: (none)' \n- Skip the line entirely when empty\n\nMinor polish issue.","status":"closed","priority":3,"issue_type":"bug","created_at":"2025-12-28T21:38:28.651591-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-28T22:00:57.569797-08:00","closed_at":"2025-12-28T22:00:57.569797-08:00","dependencies":[{"issue_id":"bd-pspk","depends_on_id":"bd-2ubv","type":"parent-child","created_at":"2025-12-28T21:38:44.844669-08:00","created_by":"daemon"}]}
{"id":"bd-pu5do","title":"Issue with labels","status":"open","priority":1,"issue_type":"feature","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:13.486564-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:13.486564-08:00","labels":["backend","urgent"]}
{"id":"bd-pvu0","title":"Merge: bd-4opy","description":"branch: polecat/angharad\ntarget: main\nsource_issue: bd-4opy\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T00:24:44.057267-08:00","updated_at":"2025-12-23T01:33:25.730271-08:00","closed_at":"2025-12-23T01:33:25.730271-08:00"}
{"id":"bd-pwjkr","title":"Review \u0026 merge PR #1013: fix(validation) hyphenated prefixes","description":"dispatched_by: beads/crew/emma\n\nReview and merge PR #1013: https://github.com/steveyegge/beads/pull/1013\n\n## Summary\nFixes ValidateIDFormat to support hyphenated prefixes like 'bead-me-up-3e9'. Uses utils.ExtractIssuePrefix instead of naive first-hyphen splitting.\n\n## Changes\n- internal/validation/bead.go - Use ExtractIssuePrefix \n- internal/validation/bead_test.go - Add comprehensive test cases\n\n## Review Checklist\n- [ ] Pull the branch locally\n- [ ] Run tests: go test ./internal/validation/...\n- [ ] Verify hyphenated prefix tests pass\n- [ ] Merge with gh pr merge 1013 --repo steveyegge/beads --squash","status":"hooked","priority":2,"issue_type":"task","assignee":"beads/crew/grip","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:14:25.726482-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-11T18:14:50.983183-08:00"}
{"id":"bd-pzw7","title":"gt handoff deadlock at handoff.go:125","notes":"When running 'gt handoff -m \"message\"' after successful MR submit, go panics with 'fatal error: all goroutines are asleep - deadlock\\!' at handoff.go:125. The shutdown request still appears to be sent successfully but the command crashes. Stack trace shows issue is in runHandoff select statement.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-19T23:22:12.46315-08:00","updated_at":"2025-12-21T17:51:25.817355-08:00","closed_at":"2025-12-21T17:51:25.817355-08:00"}
{"id":"bd-q0fdk","title":"Issue 2","status":"open","priority":1,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:01.220051-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:01.220051-08:00"}
{"id":"bd-q13h","title":"Makefile Integration for Benchmarks","description":"Add a single 'bench' target to the Makefile for running performance benchmarks.\n\nTarget:\n.PHONY: bench\n\nbench:\n\tgo test -bench=. -benchtime=3s -tags=bench \\\n\t\t-cpuprofile=cpu.prof -memprofile=mem.prof \\\n\t\t./internal/storage/sqlite/\n\t@echo \"\"\n\t@echo \"Profiles generated. View flamegraph:\"\n\t@echo \" go tool pprof -http=:8080 cpu.prof\"\n\nFeatures:\n- Single simple target, no complexity\n- Always generates CPU and memory profiles\n- Clear output on how to view results\n- 3 second benchmark time for reliable results\n- Uses bench build tag for heavy benchmarks\n\nUsage:\n make bench # Run all benchmarks\n go test -bench=BenchmarkGetReadyWork... # Run specific benchmark","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-13T22:23:25.922916-08:00","updated_at":"2025-11-14T08:55:17.620824-08:00","closed_at":"2025-11-14T08:55:17.620824-08:00","dependencies":[{"issue_id":"bd-q13h","depends_on_id":"bd-zj8e","type":"blocks","created_at":"2025-11-13T22:24:06.371947-08:00","created_by":"daemon"}]}
{"id":"bd-q2b8","title":"Review PR #916: fix(doctor) metadata table query","description":"dispatched_by: beads/crew/emma\n\nReview and merge PR #916 from aaron-sangster.\n\nPR: https://github.com/anthropics/beads/pull/916\nChanges: +48/-7, 2 files (cmd/bd/doctor/sync_divergence.go, test)\n\nFix: query metadata table instead of config for last_import_time\n\nReview checklist:\n- [ ] Code quality and style\n- [ ] Tests pass\n- [ ] Logic is correct\n- [ ] Approve or request changes","status":"closed","priority":2,"issue_type":"task","assignee":"beads/crew/dave","created_at":"2026-01-05T19:09:16.832569-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-05T19:11:44.812241-08:00","closed_at":"2026-01-05T19:11:44.812241-08:00","close_reason":"Reviewed and merged PR #916"}
{"id":"bd-q2ri","title":"bd-hv01: Add comprehensive edge case tests for deletion tracking","description":"Need to add tests for: corrupted snapshot file, stale snapshot (\u003e 1 hour), concurrent sync operations (daemon + manual), partial deletion failure, empty remote JSONL, multi-repo mode with deletions, git worktree scenario.\n\nAlso refine TestDeletionWithLocalModification to check for specific conflict error instead of accepting any error.\n\nFiles: cmd/bd/deletion_tracking_test.go","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-06T18:16:26.849881-08:00","updated_at":"2025-11-06T20:06:49.221043-08:00","closed_at":"2025-11-06T19:55:39.700695-08:00","dependencies":[{"issue_id":"bd-q2ri","depends_on_id":"bd-rbxi","type":"parent-child","created_at":"2025-11-06T18:19:15.104113-08:00","created_by":"daemon"}]}
@@ -1827,6 +1840,7 @@
{"id":"bd-rinx","title":"Witness should auto-nuke idle polecats, not escalate","description":"When witness detects an idle polecat with no work, it escalates to Mayor asking what to do.\n\nExpected: Witness should nuke idle polecats automatically if:\n1. No work hooked\n2. No uncommitted/unpushed changes (cleanup_status=clean)\n3. Idle for \u003ethreshold (e.g., 5 minutes)\n\nOnly escalate if polecat has unsaved work that needs recovery.\n\nCurrent behavior creates unnecessary mail noise for the Mayor.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-30T21:21:57.918823-08:00","created_by":"mayor","updated_at":"2025-12-31T00:21:22.701781-08:00","closed_at":"2025-12-31T00:21:22.701781-08:00","close_reason":"Added Step 3a to witness patrol formula for auto-nuke of idle polecats with clean git state"}
{"id":"bd-rivt3","title":"Review PR #964: FK error regression tests","description":"dispatched_by: beads/crew/emma\n\nReview and verify PR #964 (steveyegge/beads)\n\nPR: https://github.com/steveyegge/beads/pull/964\nAuthor: peterkc\n\nAdds regression tests for dependency command FK error handling.\n- gh pr view 964 --repo steveyegge/beads\n- gh pr diff 964 --repo steveyegge/beads\n- If good: gh pr merge 964 --repo steveyegge/beads --squash","status":"closed","priority":2,"issue_type":"task","assignee":"beads/crew/dave","created_at":"2026-01-08T14:30:21.366079-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-08T14:32:39.106378-08:00","closed_at":"2026-01-08T14:32:39.106378-08:00","close_reason":"Reviewed and merged PR #964. All FK error regression tests pass locally. Well-documented with tracer bullet findings."}
{"id":"bd-rjuu6","title":"gt mail mark-read: desire path for marking messages read without archiving","description":"dispatched_by: beads/crew/emma\n\n## Context\n\nAgents naturally try `gt mail mark-read \u003cid\u003e` after reading a message. Currently this fails:\n\n```\nError: unknown command \"mark-read\" for \"gt mail\"\n```\n\n## Desire Paths Pattern\n\nWhen agents consistently try a command that doesn't exist, that's a signal the API should support it. This is the 'desire paths' approach to agent UX - let natural agent behavior inform the interface.\n\n## Use Case\n\n- Agent reads a message with `gt mail read \u003cid\u003e`\n- Message content is acknowledged but agent wants to keep it in inbox (not archive)\n- Agent tries `gt mail mark-read \u003cid\u003e` - fails\n- Currently no way to mark as read without archiving\n\n## Proposed Solution\n\nAdd `gt mail mark-read \u003cid\u003e` that:\n1. Marks message as read (removes unread indicator)\n2. Keeps message in inbox (doesn't archive)\n\nAlternative: `gt mail read \u003cid\u003e` could auto-mark as read (may already do this but the inbox display doesn't reflect it).","status":"closed","priority":2,"issue_type":"feature","assignee":"beads/crew/fang","created_at":"2026-01-10T23:56:27.146061-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-11T00:03:49.725388-08:00","closed_at":"2026-01-11T00:03:49.725388-08:00","close_reason":"Implemented gt mail mark-read and mark-unread commands. Uses labels to track read status without archiving."}
{"id":"bd-rk26c","title":"Issue 2","status":"open","priority":1,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:12.640358-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:12.640358-08:00"}
{"id":"bd-rk5ok","title":"Session ended: gt-beads-crew-fang","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-07T17:42:17.028324-08:00","created_by":"beads/crew/fang","updated_at":"2026-01-07T17:42:17.066797-08:00","closed_at":"2026-01-07T17:42:17.066797-08:00","close_reason":"auto-closed session event"}
{"id":"bd-rl5t","title":"Integration test: agent waits for CI via gate","description":"End-to-end test of the gate workflow.\n\n## Test Scenario\n1. Agent creates gate: bd gate create --await gh:run:123 --timeout 5m --notify beads/dave\n2. Agent writes handoff and exits\n3. Deacon patrol checks gate condition\n4. (Mock) GitHub run completes\n5. Deacon notifies waiter and closes gate\n6. New agent session reads mail and resumes\n\n## Test Requirements\n- Mock GitHub API responses\n- Test timeout path\n- Test multiple waiters\n- Verify mail notifications sent","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T11:44:41.725752-08:00","updated_at":"2025-12-23T12:24:08.346347-08:00","closed_at":"2025-12-23T12:24:08.346347-08:00","dependencies":[{"issue_id":"bd-rl5t","depends_on_id":"bd-udsi","type":"parent-child","created_at":"2025-12-23T11:44:53.157037-08:00","created_by":"daemon"},{"issue_id":"bd-rl5t","depends_on_id":"bd-2l03","type":"blocks","created_at":"2025-12-23T11:44:56.674866-08:00","created_by":"daemon"},{"issue_id":"bd-rl5t","depends_on_id":"bd-ykqu","type":"blocks","created_at":"2025-12-23T11:44:56.753264-08:00","created_by":"daemon"}]}
{"id":"bd-rli1y","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-10T12:48:06.966469-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-10T12:48:07.026979-08:00","closed_at":"2026-01-10T12:48:07.026979-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}
@@ -1955,12 +1969,14 @@
{"id":"bd-u9a3n","title":"Witness Patrol","description":"Per-rig worker monitor patrol loop with progressive nudging.","status":"closed","priority":2,"issue_type":"molecule","created_at":"2026-01-07T21:42:14.261027-08:00","created_by":"gastown/crew/george","updated_at":"2026-01-09T21:15:43.007118-08:00","closed_at":"2026-01-09T21:15:43.007118-08:00","close_reason":"Orphaned patrol molecules"}
{"id":"bd-ua1jv","title":"Witness Patrol","description":"Per-rig worker monitor patrol loop with progressive nudging.","status":"open","priority":2,"issue_type":"molecule","created_at":"2026-01-07T23:28:41.036097-08:00","created_by":"deacon","updated_at":"2026-01-07T23:28:41.036097-08:00"}
{"id":"bd-uadj2","title":"Session ended: gt-beads-refinery","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-10T15:47:42.706519-08:00","created_by":"beads/refinery","updated_at":"2026-01-10T15:47:42.742489-08:00","closed_at":"2026-01-10T15:47:42.742489-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}
{"id":"bd-uao3f","title":"Updated title","status":"in_progress","priority":0,"issue_type":"feature","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:11.046615-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:11.106698-08:00"}
{"id":"bd-ucgz","title":"Migration invariants should exclude external dependencies from orphan check","description":"## Summary\n\nThe `checkForeignKeys` function in `migration_invariants.go` flags external dependencies as orphaned because they dont exist in the local issues table.\n\n## Location\n\n`internal/storage/sqlite/migration_invariants.go` around line 150-162\n\n## Current Code (buggy)\n\n```go\n// Check for orphaned dependencies\nvar orphanCount int\nerr = db.QueryRowContext(ctx, \\`\n SELECT COUNT(*)\n FROM dependencies d\n WHERE NOT EXISTS (SELECT 1 FROM issues WHERE id = d.depends_on_id)\n\\`).Scan(\u0026orphanCount)\n```\n\n## Fix\n\nExclude external references (format: `external:\u003cproject\u003e:\u003ccapability\u003e`):\n\n```go\n// Check for orphaned dependencies (excluding external refs)\nvar orphanCount int\nerr = db.QueryRowContext(ctx, \\`\n SELECT COUNT(*)\n FROM dependencies d\n WHERE NOT EXISTS (SELECT 1 FROM issues WHERE id = d.depends_on_id)\n AND d.depends_on_id NOT LIKE 'external:%'\n\\`).Scan(\u0026orphanCount)\n```\n\n## Reproduction\n\n```bash\n# Add external dependency\nbd dep add bd-xxx external:other-project:some-capability\n\n# Try to sync - fails\nbd sync\n# Error: found 1 orphaned dependencies\n```\n\n## Files to Modify\n\n1. **internal/storage/sqlite/migration_invariants.go** - Add WHERE clause\n\n## Testing\n\n```bash\n# Create issue with external dep\nbd create \"Test external deps\" -t task\nbd dep add bd-xxx external:beads:release-workflow\n\n# Sync should succeed\nbd sync\n\n# Verify dep exists\nbd show bd-xxx --json | jq .dependencies\n```\n\n## Success Criteria\n- External dependencies dont trigger orphan check\n- `bd sync` succeeds with external deps\n- Regular orphan detection still works for internal deps","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-23T12:37:08.99387-08:00","updated_at":"2025-12-23T12:42:03.722691-08:00","closed_at":"2025-12-23T12:42:03.722691-08:00"}
{"id":"bd-ucj8","title":"Rename wisp prefix from 'eph' to 'wisp'","description":"The wisp system uses 'eph' as the ID prefix segment (e.g., gt-eph-xxx) but should use 'wisp' (e.g., gt-wisp-xxx) for consistency with terminology.\n\n**Location:** cmd/bd/wisp.go:260-261\n```go\n// Use \"eph\" prefix for distinct visual recognition\nresult, err := spawnMolecule(ctx, store, subgraph, vars, \"\", actor, true, \"eph\")\n```\n\n**Fix:** Change \"eph\" to \"wisp\"\n\n**Also update:**\n- main_errors.go:100,107 - detection patterns for ephemeral IDs\n- Any tests expecting '-eph-' pattern\n- Documentation if it references the prefix\n\n**Migration:** Existing gt-eph-* wisps in databases will continue to work (they have ephemeral=true flag). New wisps will use gt-wisp-* prefix.","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-01T20:10:54.323196-08:00","created_by":"gastown/crew/gus","updated_at":"2026-01-01T23:55:44.286924-08:00","closed_at":"2026-01-01T23:55:44.286924-08:00","close_reason":"Renamed wisp prefix from 'eph' to 'wisp'. Legacy eph-* pattern still supported for backwards compatibility."}
{"id":"bd-udsi","title":"Async Gates for Agent Coordination","description":"Agents need an async primitive for waiting on external events (CI completion, API responses, human approval). Gates are wisp issues that block until external conditions are met, managed by the Deacon.\n\n## Core Concepts\n\n**Gate** = wisp issue that blocks until external condition is met\n- Type: gate\n- Phase: wisp (never synced, ephemeral)\n- Assignee: deacon/ (Deacon monitors it)\n- Fields: await_type, await_id, timeout, waiters[]\n\n**Await Types:**\n- gh:run:\u003cid\u003e - GitHub Actions run completion\n- gh:pr:\u003cid\u003e - PR merged/closed\n- timer:\u003cduration\u003e - Simple delay\n- human:\u003cprompt\u003e - Human approval required\n- mail:\u003cpattern\u003e - Wait for mail matching pattern\n\n## Open Questions\n- Should gates live in wisp storage or main storage with wisp flag?\n- Do we need a gate catalog (like molecule catalog)?\n- Should waits-for dep type work with gates?","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-23T11:44:02.711062-08:00","updated_at":"2025-12-23T12:24:43.537615-08:00","closed_at":"2025-12-23T12:24:43.537615-08:00"}
{"id":"bd-udx5m","title":"Digest: mol-refinery-patrol","description":"Patrol: MQ empty, no branches processed, inbox clear","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-11T04:26:53.607355-08:00","updated_at":"2026-01-11T04:26:53.607355-08:00","closed_at":"2026-01-11T04:26:53.607306-08:00","close_reason":"Squashed from 11 wisps"}
{"id":"bd-ueagi","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-08T20:54:47.974119-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-08T20:54:48.008318-08:00","closed_at":"2026-01-08T20:54:48.008318-08:00","close_reason":"auto-closed session event"}
{"id":"bd-uf75j","title":"Issue to close","status":"closed","priority":1,"issue_type":"bug","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:15:59.879241-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:15:59.946989-08:00","closed_at":"2026-01-11T18:15:59.946989-08:00","close_reason":"Testing complete"}
{"id":"bd-uhg5q","title":"Ready issue","status":"open","priority":1,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:12.939192-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:12.939192-08:00"}
{"id":"bd-uiae","title":"Update documentation for beads-merge integration","description":"Document the integrated merge functionality.\n\n**Updates needed**:\n- AGENTS.md: Replace \"use external beads-merge\" with \"bd merge\"\n- README.md: Add git merge driver section\n- TROUBLESHOOTING.md: Update merge conflict resolution\n- ADVANCED.md: Document 3-way merge algorithm\n- Create CREDITS.md or ATTRIBUTION.md for @neongreen\n\n**Highlight**: Deletion sync fix (bd-hv01)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-05T18:42:20.488998-08:00","updated_at":"2025-11-06T18:19:16.234758-08:00","closed_at":"2025-11-06T15:40:27.830475-08:00","dependencies":[{"issue_id":"bd-uiae","depends_on_id":"bd-qqvw","type":"parent-child","created_at":"2025-11-05T18:42:28.752447-08:00","created_by":"daemon"}]}
{"id":"bd-ujz5","title":"Explore wiki-style documentation structure","description":"Our docs are growing into a book. Evaluate options for wiki-like structure:\n\n**Options to evaluate:**\n- GitHub Wiki (built-in, limited features)\n- mdBook (Rust, CLI-friendly, produces HTML/PDF/ePub)\n- MkDocs / Material for MkDocs (Python, beautiful themes)\n- Docusaurus (React, powerful but complex)\n- Plain markdown with good structure (current approach)\n\n**Requirements:**\n- Git-backed (version control)\n- Markdown-native (agents can edit)\n- Table of contents / navigation\n- Cross-linking between pages\n- Searchable\n- Can be hosted on GitHub Pages\n\n**Deliverables:**\n- Recommendation with pros/cons\n- If switching: migration plan\n- If staying with markdown: structure guidelines for wiki-like organization\n\nReferences:\n- https://squidfunk.github.io/mkdocs-material/alternatives/\n- https://www.archbee.com/blog/gitbook-alternatives","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-24T18:23:23.665509-08:00","updated_at":"2025-12-25T22:55:41.578876-08:00","closed_at":"2025-12-25T22:55:41.578876-08:00"}
{"id":"bd-ul59","title":"Update molecular chemistry docs with discoveries","description":"Document recent discoveries about molecule/epic relationship and lifecycle:\n\n**Layer Cake (corrected order):**\n```\nFormulas (YAML compile-time macros)\n ↓\nProtos (template label, read-only)\n ↓\nMolecules (pour, bond, squash, burn)\n ↓\nEpics (parent-child, dependencies) ← DATA PLANE\n ↓\nIssues (JSONL, git-backed) ← STORAGE\n```\n\n**Key insight:** Molecules work without protos - you can create ad-hoc molecules.\nProtos are templates FOR molecules, not the other way around.\n\n**New concepts to document:**\n1. Orphan vs Stale matrix (blocking × assigned dimensions)\n2. Graph pressure as staleness indicator (not time)\n3. Parallelism via absence of depends_on (default parallel, opt-in sequential)\n4. progress.Completed/Total are computed, not stored\n5. WaitsFor: all-children for dynamic fanout gates\n\n**Common pitfalls for agents:**\n- Thinking phases/steps imply sequence (NO - deps do)\n- Confusing protos with molecules\n- Temporal language inverting dependencies\n- Forgetting to squash/burn wisps\n\n**Consider splitting docs:**\n- molecules.md → conceptual overview\n- formulas.md → YAML syntax reference\n- lifecycle.md → pour/squash/burn/bond operations\n- patterns.md → Christmas Ornament, factory assembly, etc.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T18:23:23.968937-08:00","updated_at":"2025-12-24T19:30:49.011831-08:00","closed_at":"2025-12-24T19:30:49.011831-08:00"}
@@ -2028,6 +2044,7 @@
{"id":"bd-w03ka","title":"Session ended: gt-beads-crew-giles","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-07T17:42:03.142759-08:00","created_by":"beads/crew/giles","updated_at":"2026-01-07T17:42:03.183031-08:00","closed_at":"2026-01-07T17:42:03.183031-08:00","close_reason":"auto-closed session event"}
{"id":"bd-w05sg","title":"Review PR #16755: Fix PROMPT_PARTS with set -u","description":"dispatched_by: beads/crew/emma\n\nReview and verify PR #16755 (anthropics/claude-code)\n\nPR: https://github.com/anthropics/claude-code/pull/16755\nAuthor: KCW89\n\nFixes bash strict mode compatibility in ralph-wiggum.\n- gh pr view 16755 --repo anthropics/claude-code\n- gh pr diff 16755 --repo anthropics/claude-code\n- If good: gh pr merge 16755 --repo anthropics/claude-code --squash","status":"closed","priority":2,"issue_type":"task","assignee":"beads/crew/wolf","created_at":"2026-01-08T14:20:07.7025-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-08T14:29:35.600655-08:00","closed_at":"2026-01-08T14:29:35.600655-08:00","close_reason":"Wrong repo - these were for anthropics/claude-code, not steveyegge/beads"}
{"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"}
{"id":"bd-w1szw","title":"Issue 1","status":"open","priority":1,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:12.568805-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:12.568805-08:00","dependencies":[{"issue_id":"bd-w1szw","depends_on_id":"bd-rk26c","type":"blocks","created_at":"2026-01-11T18:16:12.707567-08:00","created_by":"beads/crew/wolf"}]}
{"id":"bd-w3rh","title":"Phase 4: Cross-Rig Bead Gates","description":"Implement cross-rig bead dependency gates.\n\n## Behavior\n- Gate waits on a bead in another rig\n- Leverage existing external dep resolution via bd sync\n- `bd ready` / `bd sync` resolves naturally\n\n## Implementation\n1. `bd cook` creates gate with external dep on target bead\n2. Gate has `await_type=bead` and `await_id=\u003crig\u003e:\u003cbead-id\u003e`\n3. During bd sync, cross-rig deps are resolved\n4. When target bead closes, gate can close\n\n## Design Question\nShould this piggyback on existing dependency resolution, or have explicit gate check?\n\nOption A: Use existing blocking deps (simpler)\nOption B: Explicit `bd gate check --type=bead` (more control)\n\n## Acceptance Criteria\n- [ ] Gates can reference beads in other rigs\n- [ ] Gate resolves when target bead closes\n- [ ] Works with bd sync for cross-rig resolution","status":"closed","priority":3,"issue_type":"task","assignee":"beads/polecats/onyx","created_at":"2026-01-02T01:55:43.840566-08:00","created_by":"mayor","updated_at":"2026-01-02T13:05:51.785747-08:00","closed_at":"2026-01-02T13:05:51.785747-08:00","close_reason":"Implemented cross-rig bead gates: added await_type=bead with await_id=\u003crig\u003e:\u003cbead-id\u003e format, added bd gate check command with --type=bead support","dependencies":[{"issue_id":"bd-w3rh","depends_on_id":"bd-mcva","type":"parent-child","created_at":"2026-01-02T01:55:53.966328-08:00","created_by":"mayor"}]}
{"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","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"}
{"id":"bd-w43xt","title":"Review PR #16228: Node 20 to 24 in devcontainer","description":"dispatched_by: beads/crew/emma\n\nReview and verify PR #16228 (anthropics/claude-code)\n\nPR: https://github.com/anthropics/claude-code/pull/16228\nAuthor: tomoki10\n\nUpdates Node.js from v20 (maintenance phase) to v24.\n- gh pr view 16228 --repo anthropics/claude-code\n- gh pr diff 16228 --repo anthropics/claude-code\n- If good: gh pr merge 16228 --repo anthropics/claude-code --squash","status":"closed","priority":2,"issue_type":"task","assignee":"beads/crew/giles","created_at":"2026-01-08T14:20:28.195989-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-08T14:29:35.604879-08:00","closed_at":"2026-01-08T14:29:35.604879-08:00","close_reason":"Wrong repo - these were for anthropics/claude-code, not steveyegge/beads"}
@@ -2136,6 +2153,7 @@
{"id":"bd-x5wg","title":"Create and push git tag v0.33.2","description":"Create the release tag and push it:\n\n```bash\ngit tag v0.33.2\ngit push origin v0.33.2\n```\n\nThis triggers the GoReleaser GitHub Action to build release binaries.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T16:10:13.76223-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":"task"}
{"id":"bd-x6kv","title":"Merge: jade-mjtlsejo","description":"branch: polecat/jade-mjtlsejo\ntarget: main\nsource_issue: jade-mjtlsejo\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T22:06:59.327455-08:00","created_by":"beads/polecats/jade","updated_at":"2026-01-01T10:43:18.62673-08:00","closed_at":"2026-01-01T10:43:18.62673-08:00","close_reason":"Stale MR - branch no longer exists on remote"}
{"id":"bd-x7i7c","title":"Pre-existing: SQLite scan column count mismatch (31 vs 32)","description":"Multiple tests failing on main with: 'sql: expected 31 destination arguments in Scan, not 32'\n\nAffected tests:\n- TestGetIssuesByLabel (internal/storage/sqlite)\n- TestMigrateContentHashColumn (internal/storage/sqlite)\n- TestResolveProtoIDOrTitle (cmd/bd)\n\nRoot cause appears to be a column added to the issues table without updating all Scan calls.\n\nDiscovered during refinery patrol while processing polecat/quartz-lmqhe.","status":"open","priority":1,"issue_type":"bug","created_at":"2026-01-10T22:11:22.005398-08:00","created_by":"beads/refinery","updated_at":"2026-01-10T22:11:22.005398-08:00"}
{"id":"bd-x9zf9","title":"Blocked issue","status":"open","priority":1,"issue_type":"task","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T18:16:13.074821-08:00","created_by":"beads/crew/wolf","updated_at":"2026-01-11T18:16:13.074821-08:00","dependencies":[{"issue_id":"bd-x9zf9","depends_on_id":"bd-1hc40","type":"blocks","created_at":"2026-01-11T18:16:13.144613-08:00","created_by":"beads/crew/wolf"}]}
{"id":"bd-xabtq","title":"Session ended: gt-beads-crew-dave","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-08T14:23:46.099872-08:00","created_by":"beads/crew/dave","updated_at":"2026-01-08T14:23:46.132871-08:00","closed_at":"2026-01-08T14:23:46.132871-08:00","close_reason":"auto-closed session event"}
{"id":"bd-xai7h","title":"Review and merge PR #999: bsv terminal viewer","description":"Review and merge PR #999 from bglenden that adds bsv (Rust TUI viewer) to COMMUNITY_TOOLS.md.\n\nEasy-win criteria:\n- Documentation-only change (2 lines added)\n- Adds link to external community tool\n- No code changes, just adding to community tools list\n\nSteps:\n1. gh pr checkout 999 --repo steveyegge/beads\n2. Verify the addition follows existing format in COMMUNITY_TOOLS.md\n3. Check the linked repo exists and is legitimate\n4. gh pr merge 999 --repo steveyegge/beads --squash\n\nPR: https://github.com/steveyegge/beads/pull/999","status":"closed","priority":2,"issue_type":"task","assignee":"beads/crew/fang","created_at":"2026-01-10T11:58:12.421204-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-10T12:06:20.483258-08:00","closed_at":"2026-01-10T12:06:20.483258-08:00","close_reason":"Reviewed and merged PR #999: bsv terminal viewer added to COMMUNITY_TOOLS.md"}
{"id":"bd-xbe2e","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-10T12:59:16.12296-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-10T12:59:16.180965-08:00","closed_at":"2026-01-10T12:59:16.180965-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}