From c16c7d8ef12e268f3ebbf1c81f6c12a14e337928 Mon Sep 17 00:00:00 2001 From: beads/refinery Date: Sun, 11 Jan 2026 22:34:55 -0800 Subject: [PATCH] bd daemon sync: 2026-01-11 22:34:55 --- .beads/issues.jsonl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index cd088f02..19eaf484 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -2,6 +2,7 @@ {"id":"bd-00pel","title":"Session ended: gt-beads-refinery","status":"closed","priority":2,"issue_type":"event","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T10:33:47.827185-08:00","created_by":"beads/refinery","updated_at":"2026-01-11T10:33:47.889461-08:00","closed_at":"2026-01-11T10:33:47.889461-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true} {"id":"bd-00u3","title":"Deprecate bd mol run after gt absorbs its semantics","description":"bd mol run is a convenience combo (pour + update + pin) that feels like orchestration but lives in the data layer. This blurs the bd/gt architectural boundary.\n\n## Current State\n- bd mol run = bd pour + bd update --status=in_progress + bd pin --for me\n- gt spawn depends on bd mol run (shells out to it)\n\n## Proposed Change\nOnce gt spawn inlines the pour+assign+pin logic:\n1. Deprecate bd mol run with a warning pointing to gt spawn\n2. Eventually remove bd mol run entirely\n\n## Why\n- bd should be pure data operations (pour, update, pin, close)\n- gt should own orchestration (spawn, sling, hook, handoff)\n- Standalone bd users can run the three commands separately or script them\n\n## Blocked By\ngastown issue gt-r7jj2 (Move mol run semantics from bd into gt spawn)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:59:03.667211-08:00","updated_at":"2025-12-25T01:04:51.755145-08:00","closed_at":"2025-12-25T01:04:51.755145-08:00"} {"id":"bd-0134cc5a","title":"Fix auto-import creating duplicates instead of updating issues","description":"ROOT CAUSE: server_export_import_auto.go line 221 uses ResolveCollisions: true for ALL auto-imports. This is wrong.\n\nProblem:\n- ResolveCollisions is for branch merges (different issues with same ID)\n- Auto-import should UPDATE existing issues, not create duplicates\n- Every git pull creates NEW duplicate issues with different IDs\n- Two agents ping-pong creating endless duplicates\n\nEvidence:\n- 31 duplicate groups found (bd duplicates)\n- bd-236-246 are duplicates of bd-224-235\n- Both agents keep pulling and creating more duplicates\n- JSONL file grows endlessly with duplicates\n\nThe Fix:\nChange checkAndAutoImportIfStale in server_export_import_auto.go:\n- Remove ResolveCollisions: true (line 221)\n- Use normal import logic that updates existing issues by ID\n- Only use ResolveCollisions for explicit bd import --resolve-collisions\n\nImpact: Critical - makes beads unusable for multi-agent workflows","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-10-27T21:48:57.733846-07:00","updated_at":"2025-10-30T17:12:58.21084-07:00","closed_at":"2025-10-27T22:26:40.627239-07:00"} +{"id":"bd-027eo","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T22:34:55.204672-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-11T22:34:55.269461-08:00","closed_at":"2026-01-11T22:34:55.269461-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true} {"id":"bd-02a4","title":"Modify CreateIssue to support parent resurrection","description":"Update internal/storage/sqlite/sqlite.go:182-196 to call TryResurrectParent before failing on missing parent. Coordinate with EnsureIDs changes for consistent behavior. Handle edge case where parent never existed in JSONL (fail gracefully).","status":"closed","priority":0,"issue_type":"task","created_at":"2025-11-04T12:31:59.701571-08:00","updated_at":"2025-11-05T00:08:42.811436-08:00","closed_at":"2025-11-05T00:08:42.81144-08:00"} {"id":"bd-02gts","title":"Digest: mol-refinery-patrol","description":"Patrol complete: MQ empty, 0 branches processed, no issues","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T18:25:13.410273-08:00","updated_at":"2026-01-10T18:25:13.410273-08:00","closed_at":"2026-01-10T18:25:13.410234-08:00","close_reason":"Squashed from 11 wisps","dependencies":[{"issue_id":"bd-02gts","depends_on_id":"bd-wisp-xwx","type":"parent-child","created_at":"2026-01-10T18:25:13.41112-08:00","created_by":"beads/refinery"}]} {"id":"bd-02st0","title":"Session ended: gt-beads-refinery","status":"closed","priority":2,"issue_type":"event","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T20:17:11.51817-08:00","created_by":"beads/refinery","updated_at":"2026-01-11T20:17:11.592093-08:00","closed_at":"2026-01-11T20:17:11.592093-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true} @@ -1524,7 +1525,7 @@ {"id":"bd-m0tl","title":"bd create -f crashes with nil pointer dereference","description":"GitHub issue #674. The markdown import feature crashes at markdown.go:338 because global variables (store, ctx, actor) aren't initialized when createIssuesFromMarkdown is called. The function uses globals set by cobra command framework but is being called before they're ready. Need to either initialize globals at start of function or pass them as parameters.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-21T14:35:14.813012-08:00","updated_at":"2025-12-21T15:41:14.600953-08:00","closed_at":"2025-12-21T15:41:14.600953-08:00"} {"id":"bd-m0w","title":"Add test coverage for internal/validation package","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-20T21:21:24.129559-05:00","updated_at":"2025-12-09T18:38:37.697625272-05:00","closed_at":"2025-11-28T21:52:34.198974-08:00","dependencies":[{"issue_id":"bd-m0w","depends_on_id":"bd-ge7","type":"blocks","created_at":"2025-11-20T21:21:31.350477-05:00","created_by":"daemon"}]} {"id":"bd-m164","title":"Add 0.33.2 to versionChanges in info.go","description":"Add new entry at the TOP of versionChanges array in cmd/bd/info.go:\n\n```go\n{\n Version: \"0.33.2\",\n Date: \"2025-12-21\",\n Changes: []string{\n // Add notable changes here\n },\n},\n```\n\nCopy changes from CHANGELOG.md [Unreleased] section.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T16:10:13.761218-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-m1yju","title":"Digest: mol-refinery-patrol","description":"Patrol: Queue empty, 0 branches merged","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-11T22:32:34.529179-08:00","updated_at":"2026-01-11T22:32:34.529179-08:00","closed_at":"2026-01-11T22:32:34.529137-08:00","close_reason":"Squashed from 11 wisps","dependencies":[{"issue_id":"bd-m1yju","depends_on_id":"bd-wisp-cn2","type":"parent-child","created_at":"2026-01-11T22:32:34.530129-08:00","created_by":"beads/refinery"}]} +{"id":"bd-m1yju","title":"Digest: mol-refinery-patrol","description":"Patrol: Queue empty, 0 branches merged","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-11T22:32:34.529179-08:00","updated_at":"2026-01-11T22:32:34.529179-08:00","closed_at":"2026-01-11T22:32:34.529137-08:00","close_reason":"Squashed from 11 wisps"} {"id":"bd-m3c5p","title":"Session ended: gt-beads-refinery","status":"closed","priority":2,"issue_type":"event","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T04:32:28.040454-08:00","created_by":"beads/refinery","updated_at":"2026-01-11T04:32:28.102535-08:00","closed_at":"2026-01-11T04:32:28.102535-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true} {"id":"bd-m62x","title":"Benchmark Suite for Critical Operations","description":"Extend existing benchmark suite with comprehensive benchmarks for critical operations at 10K-20K scale.\n\nExisting benchmarks (keep these):\n- cycle_bench_test.go - Cycle detection up to 5K issues (linear, tree, dense graphs)\n- compact_bench_test.go - Compaction candidate queries (100 issues)\n- internal/rpc/bench_test.go - Daemon vs direct mode comparison\n\nNew benchmarks to add in sqlite_bench_test.go (~10-12 total):\n1. GetReadyWork - Simple, deep hierarchies, cross-linked (CRITICAL - not currently benchmarked)\n2. SearchIssues - No filters, complex filters (CRITICAL - not currently benchmarked)\n3. CreateIssue - Single issue creation\n4. UpdateIssue - Status/priority/assignee changes\n5. AddDependency - Extend to 10K/20K scale (currently only up to 5K)\n6. JSONL Export - Full export performance\n7. JSONL Import - Import performance\n\nScale levels:\n- Large: 10K issues (5K open, 5K closed)\n- XLarge: 20K issues (10K open, 10K closed)\n\nImplementation:\n- NEW FILE: internal/storage/sqlite/sqlite_bench_test.go\n- Keep existing cycle_bench_test.go and compact_bench_test.go unchanged\n- Build tag: //go:build bench\n- Standard testing.B benchmarks\n- b.ReportAllocs() for memory tracking\n- Test both SQLite and JSONL-imported databases\n\nAlways generates CPU and memory profiles for analysis.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-11-13T22:22:43.770787-08:00","updated_at":"2025-11-13T23:15:33.781023-08:00","closed_at":"2025-11-13T23:15:33.781023-08:00","dependencies":[{"issue_id":"bd-m62x","depends_on_id":"bd-q13h","type":"blocks","created_at":"2025-11-13T22:24:02.668091-08:00","created_by":"daemon"},{"issue_id":"bd-m62x","depends_on_id":"bd-zj8e","type":"blocks","created_at":"2025-11-13T22:24:06.30131-08:00","created_by":"daemon"}]} {"id":"bd-m6r3","title":"Refactor: Extract shared getEpicChildren helper for swarm commands","description":"## Context\n`getSwarmStatus` and `analyzeEpicForSwarm` in cmd/bd/swarm.go have nearly identical code for:\n- Getting epic dependents via GetDependents\n- Filtering to parent-child relationships\n- Building childIDSet map\n- Building dependency maps\n\n## Implementation\n1. Extract `getEpicChildren(ctx, store, epicID)` that returns:\n - `[]*types.Issue` - child issues\n - `map[string]bool` - child ID set\n - `map[string][]string` - dependency map (within children)\n - `error`\n\n2. Refactor both `analyzeEpicForSwarm` and `getSwarmStatus` to use it\n\n3. Consider defining a named interface for the store methods:\n ```go\n type SwarmStore interface {\n GetIssue(context.Context, string) (*types.Issue, error)\n GetDependents(context.Context, string) ([]*types.Issue, error)\n GetDependencyRecords(context.Context, string) ([]*types.Dependency, error)\n }\n ```\n\n## Files\n- cmd/bd/swarm.go (lines 150-248, 616-682)\n\n## Acceptance\n- No duplicated code for fetching epic children\n- Both commands produce identical results as before","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T21:30:55.55377-08:00","created_by":"beads/crew/emma","updated_at":"2025-12-28T21:43:50.759453-08:00","closed_at":"2025-12-28T21:43:50.759453-08:00"} @@ -2175,7 +2176,6 @@ {"id":"bd-wisp-bye","title":"Run bump-version.sh","description":"Update all component versions atomically.\n\n```bash\n./scripts/bump-version.sh 0.45.0\n```\n\nThis updates:\n- cmd/bd/version.go\n- .claude-plugin/*.json\n- integrations/beads-mcp/pyproject.toml\n- integrations/beads-mcp/src/beads_mcp/__init__.py\n- npm-package/package.json\n- Hook templates\n- README.md\n- CHANGELOG.md (adds date)\n","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T20:07:32.257161-08:00","updated_at":"2026-01-06T20:11:24.896526-08:00","closed_at":"2026-01-06T20:11:24.896526-08:00","close_reason":"Version bumped and verified: 0.45.0","dependencies":[{"issue_id":"bd-wisp-bye","depends_on_id":"bd-wisp-9kb","type":"blocks","created_at":"2026-01-06T20:07:32.275432-08:00","created_by":"beads/crew/dave"}]} {"id":"bd-wisp-c3g","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches, merging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself: \"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Merge Flow\n\nThe Refinery receives MERGE_READY mail from Witnesses when polecats complete work:\n\n```\nWitness Refinery Git\n │ │ │\n │ MERGE_READY │ │\n │─────────────────────────\u003e│ │\n │ │ │\n │ (verify branch) │\n │ │ fetch \u0026 rebase │\n │ │──────────────────────────\u003e│\n │ │ │\n │ (run tests) │\n │ │ │\n │ (if pass) │\n │ │ merge \u0026 push │\n │ │──────────────────────────\u003e│\n │ │ │\n │ MERGED │ │\n │\u003c─────────────────────────│ │\n │ │ │\n```\n\nAfter successful merge, Refinery sends MERGED mail back to Witness so it can\ncomplete cleanup (nuke the polecat worktree).","status":"open","priority":2,"issue_type":"epic","created_at":"2026-01-10T22:51:49.272262-08:00","updated_at":"2026-01-10T22:51:49.272262-08:00","ephemeral":true} {"id":"bd-wisp-cf3","title":"Create release tag","description":"Create annotated git tag.\n\n```bash\ngit tag -a v0.45.0 -m \"Release v0.45.0\"\n```\n\nVerify: `git tag -l | tail -5`\n","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T20:07:32.257743-08:00","updated_at":"2026-01-06T20:12:04.079541-08:00","closed_at":"2026-01-06T20:12:04.079541-08:00","close_reason":"Tag v0.45.0 created","dependencies":[{"issue_id":"bd-wisp-cf3","depends_on_id":"bd-wisp-9ka","type":"blocks","created_at":"2026-01-06T20:07:32.278265-08:00","created_by":"beads/crew/dave"}]} -{"id":"bd-wisp-cn2","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches, merging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself: \"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Merge Flow\n\nThe Refinery receives MERGE_READY mail from Witnesses when polecats complete work:\n\n```\nWitness Refinery Git\n │ │ │\n │ MERGE_READY │ │\n │─────────────────────────\u003e│ │\n │ │ │\n │ (verify branch) │\n │ │ fetch \u0026 rebase │\n │ │──────────────────────────\u003e│\n │ │ │\n │ (run tests) │\n │ │ │\n │ (if pass) │\n │ │ merge \u0026 push │\n │ │──────────────────────────\u003e│\n │ │ │\n │ MERGED │ │\n │\u003c─────────────────────────│ │\n │ │ │\n```\n\nAfter successful merge, Refinery sends MERGED mail back to Witness so it can\ncomplete cleanup (nuke the polecat worktree).","status":"open","priority":2,"issue_type":"epic","created_at":"2026-01-11T22:31:38.847129-08:00","updated_at":"2026-01-11T22:31:38.847129-08:00","ephemeral":true} {"id":"bd-wisp-d7b","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches, merging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself: \"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Merge Flow\n\nThe Refinery receives MERGE_READY mail from Witnesses when polecats complete work:\n\n```\nWitness Refinery Git\n │ │ │\n │ MERGE_READY │ │\n │─────────────────────────\u003e│ │\n │ │ │\n │ (verify branch) │\n │ │ fetch \u0026 rebase │\n │ │──────────────────────────\u003e│\n │ │ │\n │ (run tests) │\n │ │ │\n │ (if pass) │\n │ │ merge \u0026 push │\n │ │──────────────────────────\u003e│\n │ │ │\n │ MERGED │ │\n │\u003c─────────────────────────│ │\n │ │ │\n```\n\nAfter successful merge, Refinery sends MERGED mail back to Witness so it can\ncomplete cleanup (nuke the polecat worktree).","status":"closed","priority":2,"issue_type":"epic","assignee":"beads/refinery","created_at":"2026-01-10T20:13:17.442141-08:00","updated_at":"2026-01-10T20:24:29.145383-08:00","closed_at":"2026-01-10T20:24:29.145383-08:00","close_reason":"Patrol: queue empty, no branches to merge","ephemeral":true} {"id":"bd-wisp-da9","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches, merging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself: \"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Merge Flow\n\nThe Refinery receives MERGE_READY mail from Witnesses when polecats complete work:\n\n```\nWitness Refinery Git\n │ │ │\n │ MERGE_READY │ │\n │─────────────────────────\u003e│ │\n │ │ │\n │ (verify branch) │\n │ │ fetch \u0026 rebase │\n │ │──────────────────────────\u003e│\n │ │ │\n │ (run tests) │\n │ │ │\n │ (if pass) │\n │ │ merge \u0026 push │\n │ │──────────────────────────\u003e│\n │ │ │\n │ MERGED │ │\n │\u003c─────────────────────────│ │\n │ │ │\n```\n\nAfter successful merge, Refinery sends MERGED mail back to Witness so it can\ncomplete cleanup (nuke the polecat worktree).","status":"open","priority":2,"issue_type":"epic","assignee":"beads/refinery","created_at":"2026-01-10T23:02:52.077365-08:00","updated_at":"2026-01-10T23:04:32.545374-08:00","ephemeral":true} {"id":"bd-wisp-ddw","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches, merging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself: \"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Merge Flow\n\nThe Refinery receives MERGE_READY mail from Witnesses when polecats complete work:\n\n```\nWitness Refinery Git\n │ │ │\n │ MERGE_READY │ │\n │─────────────────────────\u003e│ │\n │ │ │\n │ (verify branch) │\n │ │ fetch \u0026 rebase │\n │ │──────────────────────────\u003e│\n │ │ │\n │ (run tests) │\n │ │ │\n │ (if pass) │\n │ │ merge \u0026 push │\n │ │──────────────────────────\u003e│\n │ │ │\n │ MERGED │ │\n │\u003c─────────────────────────│ │\n │ │ │\n```\n\nAfter successful merge, Refinery sends MERGED mail back to Witness so it can\ncomplete cleanup (nuke the polecat worktree).","status":"open","priority":2,"issue_type":"epic","created_at":"2026-01-10T20:02:17.906528-08:00","updated_at":"2026-01-10T20:02:17.906528-08:00","ephemeral":true}