From 94ff639c2d1ce60028de76e29cb5265810d596a9 Mon Sep 17 00:00:00 2001 From: Steve Yegge Date: Tue, 30 Dec 2025 17:06:41 -0800 Subject: [PATCH] bd sync: 2025-12-30 17:06:41 --- .beads/issues.jsonl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index fb9c8ef7..557b253f 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -80,6 +80,7 @@ {"id":"bd-3bsz","title":"gt mail send: support reading message body from stdin","description":"Currently gt mail send -m requires the message as a command-line argument, which causes shell escaping issues with backticks, quotes, and special characters.\n\nAdd support for reading message body from stdin:\n- gt mail send addr -s 'Subject' --stdin # Read body from stdin\n- echo 'body' | gt mail send addr -s 'Subject' -m - # Convention: -m - means stdin\n\nThis would allow:\ncat \u003c\u003c'EOF' | gt mail send addr -s 'Subject' --stdin\nMessage with `backticks` and 'quotes' safely\nEOF\n\nWithout this, agents struggle to send handoff messages containing code snippets.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-23T03:21:39.496208-08:00","updated_at":"2025-12-23T12:19:44.443554-08:00","closed_at":"2025-12-23T12:19:44.443554-08:00"} {"id":"bd-3ggb","title":"Rebuild local binary","description":"Build and verify: go build -o bd ./cmd/bd \u0026\u0026 ./bd version","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T22:43:03.101428-08:00","updated_at":"2025-12-24T16:25:30.089869-08:00","dependencies":[{"issue_id":"bd-3ggb","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T22:43:16.748289-08:00","created_by":"daemon"},{"issue_id":"bd-3ggb","depends_on_id":"bd-4y4g","type":"blocks","created_at":"2025-12-18T22:43:20.950376-08:00","created_by":"daemon"}],"deleted_at":"2025-12-24T16:25:30.089869-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"bd-3jcw","title":"activity.go: Missing test coverage","description":"The new activity.go command (from bd-xo1o.3) has no test coverage. At minimum, tests should cover:\n- parseDurationString() for various formats (5m, 1h, 2d, invalid)\n- filterEvents() for --mol and --type filtering\n- formatEvent() and getEventDisplay() for all mutation types\n\nDiscovered during code review of bd-xo1o implementation.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T04:06:15.563579-08:00","updated_at":"2025-12-23T04:14:56.150151-08:00","closed_at":"2025-12-23T04:14:56.150151-08:00"} +{"id":"bd-3rko","title":"Merge: topaz-1767142022153","description":"branch: polecat/topaz-1767142022153\ntarget: main\nsource_issue: topaz-1767142022153\nrig: beads","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T17:06:22.77742-08:00","created_by":"beads/polecats/topaz","updated_at":"2025-12-30T17:06:22.77742-08:00"} {"id":"bd-3roq","title":"Add 'tracks' relation type for convoy tracking","description":"Add a new relation type 'tracks' for convoy → issue relationships.\n\nUnlike 'depends_on':\n- Non-blocking (tracked issue doesn't block convoy)\n- Cross-prefix capable (convoy in hq-* tracks issues in gt-*, bd-*)\n- Supports reverse lookup ('what convoys track this issue?')\n\nUsed by convoys to track issues across project chains without creating dependencies.\n\nRelated: hq-7h8jx (Convoy System epic in town beads)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-29T18:47:00.581639-08:00","created_by":"mayor","updated_at":"2025-12-29T21:04:52.609662-08:00","closed_at":"2025-12-29T21:04:52.609662-08:00","close_reason":"Closed"} {"id":"bd-3sz0","title":"Auto-repair stale merge driver configs with invalid placeholders","description":"Old bd versions (\u003c0.24.0) installed merge driver with invalid placeholders %L %R instead of %A %B. Add detection to bd doctor --fix: check if git config merge.beads.driver contains %L or %R, auto-repair to 'bd merge %A %O %A %B'. One-time migration for users who initialized with old versions.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-11-21T23:16:10.762808-08:00","updated_at":"2025-12-23T23:48:18.11858-08:00","closed_at":"2025-12-23T23:48:18.11858-08:00","dependencies":[{"issue_id":"bd-3sz0","depends_on_id":"bd-tbz3","type":"parent-child","created_at":"2025-11-21T23:16:10.763612-08:00","created_by":"daemon"}]} {"id":"bd-3u8m","title":"Create bd admin parent command and nest cleanup/compact/reset","description":"## Task\nCreate new `bd admin` parent command and move:\n- `bd cleanup` → `bd admin cleanup`\n- `bd compact` → `bd admin compact`\n- `bd reset` → `bd admin reset`\n\n## Implementation\n\n### 1. Create admin.go\nNew file with parent command:\n```go\nvar adminCmd = \u0026cobra.Command{\n Use: \"admin\",\n Short: \"Administrative commands for database maintenance\",\n Long: `Administrative commands for beads database maintenance.\n\nThese commands are for advanced users and should be used carefully:\n cleanup Delete closed issues and prune expired tombstones\n compact Compact old closed issues to save space\n reset Remove all beads data and configuration\n\nFor routine operations, prefer 'bd doctor --fix'.`,\n}\n\nfunc init() {\n rootCmd.AddCommand(adminCmd)\n adminCmd.AddCommand(cleanupCmd)\n adminCmd.AddCommand(compactCmd)\n adminCmd.AddCommand(resetCmd)\n}\n```\n\n### 2. Update cleanup.go, compact.go, reset.go\n- Remove `rootCmd.AddCommand()` from each init()\n- Keep all existing functionality\n\n### 3. Create hidden aliases for backwards compatibility\nTop-level hidden commands that forward to admin subcommands.\n\n### 4. Update docs (major updates)\n- docs/CLI_REFERENCE.md - cleanup, compact references\n- docs/QUICKSTART.md - compact, cleanup references\n- docs/FAQ.md - compact references\n- docs/TROUBLESHOOTING.md - compact references\n- docs/DELETIONS.md - compact reference\n- docs/CONFIG.md - compact reference\n- skills/beads/SKILL.md - compact reference\n- commands/compact.md - update all examples\n- examples/compaction/README.md - update examples\n\n## Files to create\n- cmd/bd/admin.go\n\n## Files to modify\n- cmd/bd/cleanup.go\n- cmd/bd/compact.go\n- cmd/bd/reset.go\n- cmd/bd/main.go (aliases)\n- Multiple docs (see list above)\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T15:10:41.836341-08:00","created_by":"mayor","updated_at":"2025-12-27T16:07:30.707323-08:00","closed_at":"2025-12-27T16:07:30.707323-08:00"} @@ -401,9 +402,9 @@ {"id":"bd-hhv3","title":"Test and document molecular chemistry commands","description":"## Context\n\nImplemented the molecular chemistry UX commands per the design docs:\n- gastown/mayor/rig/docs/molecular-chemistry.md\n- gastown/mayor/rig/docs/chemistry-design-changes.md\n\nCommit: cadf798b\n\n## New Commands to Test\n\n| Command | Purpose |\n|---------|---------|\n| `bd pour \u003cproto\u003e` | Instantiate proto as persistent mol |\n| `bd wisp create \u003cproto\u003e` | Instantiate proto as ephemeral wisp |\n| `bd hook [--agent]` | Inspect what's on an agent's hook |\n\n## Enhanced Commands to Test\n\n| Command | Changes |\n|---------|---------|\n| `bd mol spawn --pour` | New flag, `--persistent` deprecated |\n| `bd mol bond --pour` | Force liquid phase on wisp target |\n| `bd pin --for \u003cagent\u003e --start` | Chemistry workflow support |\n\n## Test Scenarios\n\n1. **bd pour**: Create persistent mol from a proto\n - Verify creates in .beads/ (not .beads-wisp/)\n - Verify variable substitution works\n - Verify --dry-run works\n\n2. **bd wisp create**: Create ephemeral wisp from proto\n - Verify creates in .beads-wisp/\n - Verify bd wisp list shows it\n - Verify bd mol squash works\n - Verify bd mol burn works\n\n3. **bd hook**: Inspect pinned work\n - Pin something, verify bd hook shows it\n - Test --agent flag\n - Test --json output\n\n4. **bd pin --for**: Assign work to agent\n - Verify sets pinned=true\n - Verify sets assignee\n - Verify --start sets status=in_progress\n\n5. **bd mol bond --pour**: Force liquid on wisp target\n - Bond a proto to a wisp with --pour\n - Verify spawned issues are in .beads/\n\n## Documentation\n\n- Update CLAUDE.md with new commands\n- Add examples to --help output (already done)\n- Consider adding to docs/CLI_REFERENCE.md\n\n## Code Review\n\n- Check for edge cases\n- Verify error messages are helpful\n- Ensure --json output is consistent","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-22T02:22:10.906646-08:00","updated_at":"2025-12-22T02:55:37.983703-08:00","closed_at":"2025-12-22T02:55:37.983703-08:00"} {"id":"bd-hj0s","title":"Add 'convoy' issue type with reactive completion","description":"Add convoy as a new issue type with reactive completion semantics.\n\nBehavior:\n- Convoy has list of tracked issues (via 'tracks' relation)\n- When all tracked issues close (including wontfix), convoy auto-closes\n- Supports cross-prefix tracking (convoy in hq-* tracks gt-*, bd-*)\n\nImplementation:\n- New type: convoy\n- Reactive completion trigger on tracked issue closure\n- Query support: 'bd list --type=convoy'\n\nRelated: hq-7h8jx (Convoy System epic in town beads)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-29T18:47:02.011011-08:00","created_by":"mayor","updated_at":"2025-12-30T15:44:43.361813-08:00","closed_at":"2025-12-30T00:05:13.515078-08:00","close_reason":"Implemented convoy type with reactive completion","dependencies":[{"issue_id":"bd-hj0s","depends_on_id":"bd-3roq","type":"blocks","created_at":"2025-12-29T18:47:10.59211-08:00","created_by":"daemon"}]} {"id":"bd-hkr6","title":"GH#518: Document bd setup command","description":"bd setup is undiscoverable. Add to README/docs. Currently only findable by grepping source. See GitHub issue #518.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T01:03:54.664668-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} -{"id":"bd-hlsw","title":"Add sync resilience guardrails for forced pushes and prefix mismatches","description":"Beads can get into unrecoverable sync states when remote forces pushes occur (e.g., rebases) combined with prefix mismatches from multi-worker scenarios. Add detection, prevention, and auto-recovery features to handle this gracefully.","status":"hooked","priority":2,"issue_type":"epic","assignee":"beads/polecats/topaz","created_at":"2025-12-14T10:40:14.872875259-07:00","updated_at":"2025-12-30T16:47:03.621154-08:00"} +{"id":"bd-hlsw","title":"Add sync resilience guardrails for forced pushes and prefix mismatches","description":"Beads can get into unrecoverable sync states when remote forces pushes occur (e.g., rebases) combined with prefix mismatches from multi-worker scenarios. Add detection, prevention, and auto-recovery features to handle this gracefully.","status":"closed","priority":2,"issue_type":"epic","assignee":"beads/polecats/topaz","created_at":"2025-12-14T10:40:14.872875259-07:00","updated_at":"2025-12-30T17:05:34.559059-08:00","closed_at":"2025-12-30T17:05:34.559059-08:00","close_reason":"Epic complete: All sync resilience guardrails implemented - auto-recovery mode (bd-hlsw.3) and sync branch integrity guards (bd-hlsw.4)"} {"id":"bd-hlsw.3","title":"Auto-recovery mode (bd sync --auto-recover)","description":"Add bd sync --auto-recover flag that: detects problematic sync state, backs up .beads/issues.db with timestamp, rebuilds DB from JSONL atomically, verifies consistency, reports what was fixed. Provides safety valve when sync integrity fails.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-14T10:40:20.599836875-07:00","updated_at":"2025-12-30T15:44:43.352476-08:00","closed_at":"2025-12-30T07:02:42.636957-08:00","close_reason":"Implemented --auto-recover flag with detection, backup, rebuild, verify, and reporting. Added tests.","dependencies":[{"issue_id":"bd-hlsw.3","depends_on_id":"bd-hlsw","type":"parent-child","created_at":"2025-12-14T10:40:20.600435888-07:00","created_by":"daemon"}]} -{"id":"bd-hlsw.4","title":"Sync branch integrity guards","description":"Track sync branch parent commit. If sync branch was force-pushed, warn user and require confirmation before proceeding. Add option to reset to remote if user accepts rebase. Prevents silent corruption from forced pushes.","status":"in_progress","priority":3,"issue_type":"task","created_at":"2025-12-14T10:40:20.645402352-07:00","updated_at":"2025-12-30T16:59:24.690822-08:00","dependencies":[{"issue_id":"bd-hlsw.4","depends_on_id":"bd-hlsw","type":"parent-child","created_at":"2025-12-14T10:40:20.646425761-07:00","created_by":"daemon"}]} +{"id":"bd-hlsw.4","title":"Sync branch integrity guards","description":"Track sync branch parent commit. If sync branch was force-pushed, warn user and require confirmation before proceeding. Add option to reset to remote if user accepts rebase. Prevents silent corruption from forced pushes.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-14T10:40:20.645402352-07:00","updated_at":"2025-12-30T17:05:23.464495-08:00","closed_at":"2025-12-30T17:05:23.464495-08:00","close_reason":"Implemented sync branch integrity guards: (1) Added force-push detection via stored remote SHA tracking, (2) Added user warning and confirmation prompt when force-push detected, (3) Added --accept-rebase flag for non-interactive reset to remote, (4) Added tests for new functionality","dependencies":[{"issue_id":"bd-hlsw.4","depends_on_id":"bd-hlsw","type":"parent-child","created_at":"2025-12-14T10:40:20.646425761-07:00","created_by":"daemon"}]} {"id":"bd-hlyr","title":"Merge: bd-m8ro","description":"branch: polecat/max\ntarget: main\nsource_issue: bd-m8ro\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T20:45:40.218445-08:00","updated_at":"2025-12-23T21:21:57.69886-08:00","closed_at":"2025-12-23T21:21:57.69886-08:00"} {"id":"bd-hnkg","title":"GH#540: Add silent quick-capture mode (bd q)","description":"Add bd q alias for quick capture that outputs only issue ID. Useful for piping/scripting. See GitHub issue #540.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-16T01:03:38.260135-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"feature"} {"id":"bd-hobo","title":"Distinct prefixes for protos, molecules, wisps","description":"Template/workflow entities should have visually distinct prefixes from regular issues.\n\n**Problem:**\n- Protos (bd-7bs4) look like regular issues - invites squashing\n- Molecules (poured instances) also use bd- prefix\n- Wisps are in separate DB but still use bd- when referenced\n\n**Proposed Prefixes:**\n- `proto-` for templates (e.g., proto-release, proto-review)\n- `mol-` for active molecules (poured from protos)\n- `wisp-` for ephemeral wisps (vapor phase)\n\n**Benefits:**\n- Instant visual recognition of entity type\n- Prevents accidental modification of templates\n- Clear lifecycle: proto → mol → wisp → digest\n\n**Implementation options:**\n1. Separate databases with different prefixes\n2. Issue type determines prefix generation\n3. Naming convention enforced by bd pour/wisp commands","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-24T16:45:24.940809-08:00","updated_at":"2025-12-25T02:04:52.459233-08:00","closed_at":"2025-12-25T02:04:52.459233-08:00","labels":["workflow"]} @@ -744,6 +745,7 @@ {"id":"bd-tbz3","title":"bd init UX Improvements","description":"bd init leaves users with incomplete setup, requiring manual bd doctor --fix. Issues found: (1) git hooks not installed if user declines prompt, (2) no auto-migration when CLI is upgraded, (3) stale merge driver configs from old versions. Fix by making bd init more robust with better defaults and auto-migration.","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-11-21T23:16:00.333543-08:00","updated_at":"2025-12-23T04:20:51.88847-08:00","closed_at":"2025-12-23T04:20:51.88847-08:00"} {"id":"bd-tcvh","title":"Test prefix beads","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T14:24:41.707092-08:00","created_by":"stevey","updated_at":"2025-12-27T14:24:50.421598-08:00","deleted_at":"2025-12-27T14:24:50.421598-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"bd-tggf","title":"Code Health Review Dec 2025: Technical Debt Cleanup","description":"Epic grouping technical debt identified in the Dec 16, 2025 code health review.\n\n## Overall Health Grade: B (Solid foundation, needs cleanup)\n\n### P1 (High Priority):\n- bd-74w1: Consolidate duplicate path-finding utilities\n- [deleted:bd-b6xo]: Remove/fix ClearDirtyIssues() race condition\n- [deleted:bd-b3og]: Fix TestImportBugIntegration deadlock\n\n### P2 (Medium Priority):\n- bd-05a8: Split large files (doctor.go, sync.go)\n- bd-qioh: Standardize error handling patterns\n- bd-rgyd: Split queries.go (1586 lines)\n- bd-9g1z: Fix/remove TestFindJSONLPathDefault\n\n### P3 (Low Priority):\n- bd-ork0: Add comments to 30+ ignored errors\n- bd-4nqq: Remove dead test code in info_test.go\n- bd-dhza: Reduce global state in main.go\n\n## Key Areas:\n1. Code duplication in path utilities\n2. Large monolithic files (5 files \u003e1000 lines)\n3. Global state (25+ variables, 3 deprecated)\n4. Silent error suppression (30+ instances)\n5. Test gaps and dead test code\n6. Atomicity risks in batch operations","status":"closed","priority":2,"issue_type":"epic","assignee":"beads/polecats/ruby","created_at":"2025-12-16T18:18:58.115507-08:00","updated_at":"2025-12-30T16:59:51.322347-08:00","closed_at":"2025-12-30T16:59:51.322347-08:00","close_reason":"All technical debt cleanup tasks completed: path utilities consolidated, large files split, error handling standardized, dead test code removed, global state reduced, ignored errors documented","dependencies":[{"issue_id":"bd-tggf","depends_on_id":"bd-74w1","type":"blocks","created_at":"2025-12-22T21:00:21.429274-08:00","created_by":"daemon"},{"issue_id":"bd-tggf","depends_on_id":"bd-05a8","type":"blocks","created_at":"2025-12-22T21:00:21.501589-08:00","created_by":"daemon"},{"issue_id":"bd-tggf","depends_on_id":"bd-9g1z","type":"blocks","created_at":"2025-12-22T21:00:21.571116-08:00","created_by":"daemon"},{"issue_id":"bd-tggf","depends_on_id":"bd-qioh","type":"blocks","created_at":"2025-12-22T21:00:21.640589-08:00","created_by":"daemon"},{"issue_id":"bd-tggf","depends_on_id":"bd-rgyd","type":"blocks","created_at":"2025-12-22T21:00:21.710912-08:00","created_by":"daemon"},{"issue_id":"bd-tggf","depends_on_id":"bd-4nqq","type":"blocks","created_at":"2025-12-22T21:00:21.781914-08:00","created_by":"daemon"},{"issue_id":"bd-tggf","depends_on_id":"bd-dhza","type":"blocks","created_at":"2025-12-22T21:00:21.852-08:00","created_by":"daemon"},{"issue_id":"bd-tggf","depends_on_id":"bd-ork0","type":"blocks","created_at":"2025-12-22T21:00:21.930168-08:00","created_by":"daemon"}]} +{"id":"bd-tglv","title":"Merge: onyx-1767142014545","description":"branch: polecat/onyx-1767142014545\ntarget: main\nsource_issue: onyx-1767142014545\nrig: beads","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T17:05:30.189116-08:00","created_by":"beads/polecats/onyx","updated_at":"2025-12-30T17:05:30.189116-08:00"} {"id":"bd-thgk","title":"Improve test coverage for internal/compact (18.2% → 70%)","description":"Improve test coverage for internal/compact package from 17% to 70%.\n\n## Current State\n- Coverage: 17.3%\n- Files: compactor.go, git.go, haiku.go\n- Tests: compactor_test.go (minimal tests)\n\n## Functions Needing Tests\n\n### compactor.go (core compaction)\n- [ ] New - needs config validation tests\n- [ ] CompactTier1 - needs single issue compaction tests\n- [ ] CompactTier1Batch - needs batch processing tests\n- [ ] compactSingleWithResult - internal, test via public API\n\n### git.go\n- [ ] GetCurrentCommitHash - needs git repo fixture tests\n\n### haiku.go (AI summarization) - MOCK REQUIRED\n- [ ] NewHaikuClient - needs API key validation tests\n- [ ] SummarizeTier1 - needs mock API response tests\n- [ ] callWithRetry - needs retry logic tests\n- [ ] isRetryable - needs error classification tests\n- [ ] renderTier1Prompt - needs template rendering tests\n\n## Implementation Guide\n\n1. **Mock the Anthropic API:**\n ```go\n // Create mock HTTP server\n server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n json.NewEncoder(w).Encode(map[string]interface{}{\n \"content\": []map[string]string{{\"text\": \"Summarized content\"}},\n })\n }))\n defer server.Close()\n \n // Point client at mock\n client.baseURL = server.URL\n ```\n\n2. **Test scenarios:**\n - Successful compaction with AI summary\n - API failure with retry\n - Rate limit handling\n - Empty issue handling\n - Large issue truncation\n\n3. **Use test database:**\n ```go\n store, cleanup := testutil.NewTestStore(t)\n defer cleanup()\n ```\n\n## Success Criteria\n- Coverage ≥ 70%\n- AI calls properly mocked (no real API calls in tests)\n- Retry logic verified\n- Error paths covered\n\n## Run Tests\n```bash\ngo test -v -cover ./internal/compact\ngo test -race ./internal/compact\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-13T20:42:58.455767-08:00","updated_at":"2025-12-23T13:41:10.80832-08:00","closed_at":"2025-12-23T13:41:10.80832-08:00","dependencies":[{"issue_id":"bd-thgk","depends_on_id":"bd-iz5t","type":"parent-child","created_at":"2025-12-23T12:44:07.287377-08:00","created_by":"daemon"}]} {"id":"bd-ti1m","title":"Test hooked styling","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T22:33:47.135871-08:00","created_by":"beads/crew/emma","updated_at":"2025-12-28T22:34:26.00871-08:00","closed_at":"2025-12-28T22:34:26.00871-08:00"} {"id":"bd-tj00","title":"Update local installation","description":"go build -o ~/.local/bin/bd ./cmd/bd \u0026\u0026 codesign -s - ~/.local/bin/bd","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T21:53:20.616907-08:00","updated_at":"2025-12-20T21:55:42.756171-08:00","closed_at":"2025-12-20T21:55:42.756171-08:00","dependencies":[{"issue_id":"bd-tj00","depends_on_id":"bd-an4s","type":"parent-child","created_at":"2025-12-20T21:53:20.619834-08:00","created_by":"daemon"},{"issue_id":"bd-tj00","depends_on_id":"bd-9l0h","type":"blocks","created_at":"2025-12-20T21:53:29.817989-08:00","created_by":"daemon"}]} @@ -769,7 +771,7 @@ {"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-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"} -{"id":"bd-umbf","title":"Design contributor namespace isolation for beads pollution prevention","description":"## Problem\n\nWhen contributors work on beads-the-project using beads-the-tool, their personal work-tracking issues leak into PRs. The .beads/issues.jsonl is intentionally tracked (it's the project's issue database), but contributors' local issues pollute the diff.\n\nThis is a recursion problem unique to self-hosting projects.\n\n## Possible Solutions to Explore\n\n1. **Contributor namespaces** - Each contributor gets a private prefix (e.g., `bd-steve-xxxx`) that's gitignored or filtered\n2. **Separate database** - Contributors use BEADS_DIR pointing elsewhere for personal tracking\n3. **Issue ownership/visibility flags** - Mark issues as \"local-only\" vs \"project\"\n4. **Prefix-based filtering** - Configure which prefixes are committed vs ignored\n\n## Design Considerations\n\n- Should be zero-friction for contributors (no manual setup)\n- Must not break existing workflows\n- Needs to work with sync/collaboration features\n- Consider: what if a \"personal\" issue graduates to \"project\" issue?\n\n## Expansion Needed\n\nThis is a placeholder. Needs detailed design exploration before implementation.","design":"See docs/CONTRIBUTOR_NAMESPACE_ISOLATION.md for complete design. Recommends auto-routing (Approach 4) with role detection. Key gap: bd-6x6g needs implementation to actually route issues to target repo.","status":"hooked","priority":2,"issue_type":"feature","assignee":"beads/polecats/onyx","created_at":"2025-12-13T18:00:29.638743-08:00","updated_at":"2025-12-30T17:04:19.019189-08:00"} +{"id":"bd-umbf","title":"Design contributor namespace isolation for beads pollution prevention","description":"## Problem\n\nWhen contributors work on beads-the-project using beads-the-tool, their personal work-tracking issues leak into PRs. The .beads/issues.jsonl is intentionally tracked (it's the project's issue database), but contributors' local issues pollute the diff.\n\nThis is a recursion problem unique to self-hosting projects.\n\n## Possible Solutions to Explore\n\n1. **Contributor namespaces** - Each contributor gets a private prefix (e.g., `bd-steve-xxxx`) that's gitignored or filtered\n2. **Separate database** - Contributors use BEADS_DIR pointing elsewhere for personal tracking\n3. **Issue ownership/visibility flags** - Mark issues as \"local-only\" vs \"project\"\n4. **Prefix-based filtering** - Configure which prefixes are committed vs ignored\n\n## Design Considerations\n\n- Should be zero-friction for contributors (no manual setup)\n- Must not break existing workflows\n- Needs to work with sync/collaboration features\n- Consider: what if a \"personal\" issue graduates to \"project\" issue?\n\n## Expansion Needed\n\nThis is a placeholder. Needs detailed design exploration before implementation.","design":"See docs/CONTRIBUTOR_NAMESPACE_ISOLATION.md for complete design. Recommends auto-routing (Approach 4) with role detection. Key gap: bd-6x6g needs implementation to actually route issues to target repo.","status":"closed","priority":2,"issue_type":"feature","assignee":"beads/polecats/onyx","created_at":"2025-12-13T18:00:29.638743-08:00","updated_at":"2025-12-30T17:05:13.732967-08:00","closed_at":"2025-12-30T17:05:13.732967-08:00","close_reason":"Design complete. See docs/CONTRIBUTOR_NAMESPACE_ISOLATION.md. Recommends auto-routing approach with role detection. Key gap identified: bd-6x6g needs implementation to actually route issues to target repo."} {"id":"bd-uqfn","title":"Work on beads-wkt: Output control parameters for MCP tool...","description":"Work on beads-wkt: Output control parameters for MCP tools (GH#622). Add brief, fields, max_description_length params to ready/list/show. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T22:57:10.675535-08:00","updated_at":"2025-12-20T00:49:51.929271-08:00","closed_at":"2025-12-19T23:28:25.362931-08:00"} {"id":"bd-usro","title":"Rename 'template instantiate' to 'mol bond'","description":"Rename the template instantiation command to match molecule metaphor.\n\nCurrent: bd template instantiate \u003cid\u003e --var key=value\nTarget: bd mol bond \u003cid\u003e --var key=value\n\nChanges needed:\n- Add 'mol' command group (or extend existing)\n- Add 'bond' subcommand that wraps template instantiate logic\n- Keep 'template instantiate' as deprecated alias for backward compat\n- Update help text and docs to use molecule terminology\n\nThe 'bond' verb captures:\n1. Chemistry metaphor (molecules bond to form structures)\n2. Dependency linking (child issues bonded in a DAG)\n3. Short and active\n\nSee also: molecule execution model in Gas Town","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T16:56:37.582795-08:00","updated_at":"2025-12-20T23:22:43.567337-08:00","closed_at":"2025-12-20T23:22:43.567337-08:00"} {"id":"bd-uu8p","title":"Routing bypassed in daemon mode","description":"## Bug\n\nPrefix-based routing (routes.jsonl) only works in direct mode. When the daemon is running, it bypasses routing logic because:\n\n1. Daemon mode resolves IDs via RPC (`daemonClient.ResolveID`)\n2. Daemon uses its own store, which only knows about local beads\n3. The routing logic in `resolveAndGetIssueWithRouting` is only called in direct mode\n\n## Reproduction\n\n```bash\n# With daemon running:\ncd ~/gt\nbd show gt-1py3y # Fails - daemon can't find it\n\n# With daemon bypassed:\nbd --no-daemon show gt-1py3y # Works - uses routing\n```\n\n## Fix Options\n\n### Option A: Client-side routing detection (Recommended)\nBefore calling daemon RPC, check if the ID prefix matches a route to a different beads dir. If so, use direct mode with routing for that ID.\n\n```go\n// In show.go, before daemon mode:\nif daemonClient != nil \u0026\u0026 needsRouting(id) {\n // Fall back to direct mode for this ID\n result, err := resolveAndGetIssueWithRouting(ctx, store, id)\n ...\n}\n```\n\n### Option B: Daemon-side routing\nAdd routing support to the daemon RPC server. More complex - daemon would need to:\n- Load routes.jsonl on startup\n- Open connections to multiple databases\n- Route requests based on ID prefix\n\n### Option C: Hybrid\nDaemon returns \"not found + prefix hint\", client retries with routing.\n\n## Recommendation\n\nOption A is simplest. The client already has routing logic; just use it when we detect a routed prefix.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-26T14:52:00.452285-08:00","updated_at":"2025-12-26T14:54:51.572289-08:00","closed_at":"2025-12-26T14:54:51.572289-08:00"}