bd sync: 2025-12-24 16:23:00

This commit is contained in:
Steve Yegge
2025-12-24 16:23:00 -08:00
parent fda4f78207
commit c065e9840b

View File

@@ -97,6 +97,22 @@
{"id":"bd-77gm","title":"Import reports misleading '0 created, 0 updated' when actually importing all issues","description":"When running 'bd import' on a fresh database (no existing issues), the command reports 'Import complete: 0 created, 0 updated' even though it successfully imported all issues from the JSONL file.\n\n**Steps to reproduce:**\n1. Delete .beads/beads.db\n2. Run: bd import .beads/issues.jsonl\n3. Observe output: 'Import complete: 0 created, 0 updated'\n4. Run: bd list\n5. Confirm: All issues are actually present in the database\n\n**Expected behavior:**\nReport the actual number of issues imported, e.g., 'Import complete: 523 created, 0 updated'\n\n**Actual behavior:**\n'Import complete: 0 created, 0 updated' (misleading - makes user think import failed)\n\n**Impact:**\n- Users think import failed when it succeeded\n- Confusing during database sync operations (e.g., after git pull)\n- Makes debugging harder (can't tell if import actually worked)\n\n**Context:**\nDiscovered during VC session when syncing database after git pull. The misleading message caused confusion about whether the database was properly synced with the canonical JSONL file.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-11-09T16:20:13.191156-08:00","updated_at":"2025-12-21T21:13:27.057292-08:00","closed_at":"2025-12-21T21:13:27.057292-08:00","close_reason":"Already fixed in commit 196ce3a6 - added validation for positional arguments"}
{"id":"bd-7b7h","title":"bd sync --merge fails due to chicken-and-egg: .beads/ always dirty","description":"## Problem\n\nWhen sync.branch is configured (e.g., beads-sync), the bd sync workflow creates a chicken-and-egg problem:\n\n1. `bd sync` commits changes to beads-sync via worktree\n2. `bd sync` copies JSONL to main working dir via `copyJSONLToMainRepo()` (sync.go line 364, worktree.go line 678-685)\n3. The copy is NOT committed to main - it just updates the working tree\n4. `bd sync --merge` checks for clean working dir (sync.go line 1547-1548)\n5. `bd sync --merge` FAILS because .beads/issues.jsonl is uncommitted!\n\n## Impact\n\n- sync.branch workflow is fundamentally broken\n- Users cannot periodically merge beads-sync → main\n- Main branch always shows as dirty\n- Creates confusion about git state\n\n## Root Cause\n\nsync.go:1547-1548:\n```go\nif len(strings.TrimSpace(string(statusOutput))) \u003e 0 {\n return fmt.Errorf(\"main branch has uncommitted changes, please commit or stash them first\")\n}\n```\n\nThis check blocks merge when ANY uncommitted changes exist, including the .beads/ changes that `bd sync` itself created.\n\n## Proposed Fix\n\nOption A: Exclude .beads/ from the clean check in `mergeSyncBranch`:\n```go\n// Check if there are non-beads uncommitted changes\nstatusCmd := exec.CommandContext(ctx, \"git\", \"status\", \"--porcelain\", \"--\", \":!.beads/\")\n```\n\nOption B: Auto-stash .beads/ changes before merge, restore after\n\nOption C: Change the workflow - do not copy JSONL to main working dir, instead always read from worktree\n\n## Files to Modify\n\n- cmd/bd/sync.go:1540-1549 (mergeSyncBranch function)\n- Possibly internal/syncbranch/worktree.go (copyJSONLToMainRepo)","notes":"## Fix Implemented\n\nModified cmd/bd/sync.go mergeSyncBranch function:\n\n1. **Exclude .beads/ from dirty check** (line 1543):\n Changed `git status --porcelain` to `git status --porcelain -- :!.beads/`\n This allows merge to proceed when only .beads/ has uncommitted changes.\n\n2. **Restore .beads/ to HEAD before merge** (lines 1553-1561):\n Added `git checkout HEAD -- .beads/` before merge to prevent\n \"Your local changes would be overwritten by merge\" errors.\n The .beads/ changes are redundant since they came FROM beads-sync.\n\n## Testing\n\n- All cmd/bd sync/merge tests pass\n- All internal/syncbranch tests pass\n- Manual verification needed for full workflow","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-16T23:06:06.97703-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
{"id":"bd-7bbc4e6a","title":"Add MCP server functions for repair commands","description":"**Summary:** Added MCP server repair functions for agent dependency management, system validation, and pollution detection. Implemented across BdClientBase, BdCliClient, and daemon clients to enhance system diagnostics and self-healing capabilities.\n\n**Key Decisions:** \n- Expose repair_deps(), detect_pollution(), validate() via MCP server\n- Create abstract method stubs with fallback to CLI execution\n- Use @mcp.tool decorators for function registration\n\n**Resolution:** Successfully implemented comprehensive repair command infrastructure, enabling more robust system health monitoring and automated remediation with full CLI and daemon support.","notes":"Implemented all three MCP server functions:\n\n1. **repair_deps(fix=False)** - Find/fix orphaned dependencies\n2. **detect_pollution(clean=False)** - Detect/clean test issues \n3. **validate(checks=None, fix_all=False)** - Run comprehensive health checks\n\nChanges:\n- Added abstract methods to BdClientBase\n- Implemented in BdCliClient (CLI execution)\n- Added NotImplementedError stubs in BdDaemonClient (falls back to CLI)\n- Created wrapper functions in tools.py\n- Registered @mcp.tool decorators in server.py\n\nAll commands tested and working with --no-daemon flag.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-10-28T19:37:55.72639-07:00","updated_at":"2025-12-16T01:08:11.983953-08:00","closed_at":"2025-11-07T19:38:12.152437-08:00"}
{"id":"bd-7bs4","title":"Release v{{version}}","description":"Clean release workflow for beads. Variables: version (e.g., 0.37.0), date (YYYY-MM-DD)","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-24T16:20:49.905172-08:00","updated_at":"2025-12-24T16:20:49.905172-08:00","labels":["molecule","template"],"dependencies":[{"issue_id":"bd-7bs4","depends_on_id":"bd-qqc","type":"supersedes","created_at":"2025-12-24T16:22:59.957519-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.1","title":"Verify CI is green","description":"Check that CI is passing before starting release:\n```bash\ngh run list --limit 3\n```\nAll recent runs should show 'success'. If not, fix issues first.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:21:03.112-08:00","updated_at":"2025-12-24T16:21:03.112-08:00","dependencies":[{"issue_id":"bd-7bs4.1","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:21:03.112453-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.10","title":"Update Homebrew formula","description":"./scripts/update-homebrew.sh {{version}}","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.238562-08:00","updated_at":"2025-12-24T16:22:20.238562-08:00","dependencies":[{"issue_id":"bd-7bs4.10","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.238936-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.10","depends_on_id":"bd-7bs4.9","type":"blocks","created_at":"2025-12-24T16:22:37.977163-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.11","title":"Upgrade Homebrew bd","description":"brew update \u0026\u0026 brew upgrade bd","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.316818-08:00","updated_at":"2025-12-24T16:22:20.316818-08:00","dependencies":[{"issue_id":"bd-7bs4.11","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.317185-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.11","depends_on_id":"bd-7bs4.10","type":"blocks","created_at":"2025-12-24T16:22:38.045463-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.12","title":"Run go install","description":"go install ./cmd/bd","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.39432-08:00","updated_at":"2025-12-24T16:22:20.39432-08:00","dependencies":[{"issue_id":"bd-7bs4.12","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.39468-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.12","depends_on_id":"bd-7bs4.6","type":"blocks","created_at":"2025-12-24T16:22:38.116749-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.13","title":"Update local binary","description":"cp ./bd ~/.local/bin/bd","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.471352-08:00","updated_at":"2025-12-24T16:22:20.471352-08:00","dependencies":[{"issue_id":"bd-7bs4.13","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.471729-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.13","depends_on_id":"bd-7bs4.6","type":"blocks","created_at":"2025-12-24T16:22:38.18639-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.14","title":"Restart daemons","description":"bd daemons killall","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.546515-08:00","updated_at":"2025-12-24T16:22:20.546515-08:00","dependencies":[{"issue_id":"bd-7bs4.14","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.546923-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.14","depends_on_id":"bd-7bs4.11","type":"blocks","created_at":"2025-12-24T16:22:38.256281-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.14","depends_on_id":"bd-7bs4.12","type":"blocks","created_at":"2025-12-24T16:22:38.326226-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.14","depends_on_id":"bd-7bs4.13","type":"blocks","created_at":"2025-12-24T16:22:38.398666-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.15","title":"Upgrade beads-mcp","description":"pip3 install --upgrade beads-mcp","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.622802-08:00","updated_at":"2025-12-24T16:22:20.622802-08:00","dependencies":[{"issue_id":"bd-7bs4.15","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.623197-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.15","depends_on_id":"bd-7bs4.9","type":"blocks","created_at":"2025-12-24T16:22:38.468619-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.2","title":"Update CHANGELOG header","description":"Change [Unreleased] to [{{version}}] - {{date}} and add new empty [Unreleased] section above it.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:00.42984-08:00","updated_at":"2025-12-24T16:22:00.42984-08:00","dependencies":[{"issue_id":"bd-7bs4.2","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:00.430369-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.2","depends_on_id":"bd-7bs4.1","type":"blocks","created_at":"2025-12-24T16:22:37.417332-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.3","title":"Add versionChanges to info.go","description":"Add entry at TOP of versionChanges in cmd/bd/info.go","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:19.668873-08:00","updated_at":"2025-12-24T16:22:19.668873-08:00","dependencies":[{"issue_id":"bd-7bs4.3","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:19.66937-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.3","depends_on_id":"bd-7bs4.2","type":"blocks","created_at":"2025-12-24T16:22:37.487203-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.4","title":"Run bump-version.sh","description":"./scripts/bump-version.sh {{version}}","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:19.751432-08:00","updated_at":"2025-12-24T16:22:19.751432-08:00","dependencies":[{"issue_id":"bd-7bs4.4","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:19.751827-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.4","depends_on_id":"bd-7bs4.3","type":"blocks","created_at":"2025-12-24T16:22:37.558681-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.5","title":"Build and verify","description":"go build -o bd ./cmd/bd \u0026\u0026 ./bd version","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:19.833893-08:00","updated_at":"2025-12-24T16:22:19.833893-08:00","dependencies":[{"issue_id":"bd-7bs4.5","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:19.834274-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.5","depends_on_id":"bd-7bs4.4","type":"blocks","created_at":"2025-12-24T16:22:37.627922-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.6","title":"Run tests","description":"TMPDIR=/tmp go test -short ./...","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:19.916729-08:00","updated_at":"2025-12-24T16:22:19.916729-08:00","dependencies":[{"issue_id":"bd-7bs4.6","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:19.917118-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.6","depends_on_id":"bd-7bs4.5","type":"blocks","created_at":"2025-12-24T16:22:37.698524-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.7","title":"Commit release","description":"git add -A \u0026\u0026 git commit -m 'release: v{{version}}'","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.003363-08:00","updated_at":"2025-12-24T16:22:20.003363-08:00","dependencies":[{"issue_id":"bd-7bs4.7","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.003768-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.7","depends_on_id":"bd-7bs4.6","type":"blocks","created_at":"2025-12-24T16:22:37.767184-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.8","title":"Create and push tag","description":"git tag v{{version}} \u0026\u0026 git push origin main \u0026\u0026 git push origin v{{version}}","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.082951-08:00","updated_at":"2025-12-24T16:22:20.082951-08:00","dependencies":[{"issue_id":"bd-7bs4.8","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.083335-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.8","depends_on_id":"bd-7bs4.7","type":"blocks","created_at":"2025-12-24T16:22:37.835773-08:00","created_by":"daemon"}]}
{"id":"bd-7bs4.9","title":"Wait for GoReleaser","description":"gh run list --workflow=release.yml - wait for success","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.161053-08:00","updated_at":"2025-12-24T16:22:20.161053-08:00","dependencies":[{"issue_id":"bd-7bs4.9","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.161406-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.9","depends_on_id":"bd-7bs4.8","type":"blocks","created_at":"2025-12-24T16:22:37.906514-08:00","created_by":"daemon"}]}
{"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":"open","priority":2,"issue_type":"task","created_at":"2025-12-05T15:33:42.924618693-07:00","updated_at":"2025-12-05T15:33:42.924618693-07:00"}
{"id":"bd-7h5","title":"Add pinned field to issue schema","description":"Add boolean 'pinned' field to the issue schema. When true, the issue is marked as a persistent context marker that should not be treated as a work item.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T23:33:26.767247-08:00","updated_at":"2025-12-19T00:08:59.854605-08:00","closed_at":"2025-12-19T00:08:59.854605-08:00","close_reason":"Implemented by polecat Slit - pushed to main","dependencies":[{"issue_id":"bd-7h5","depends_on_id":"bd-0vg","type":"blocks","created_at":"2025-12-18T23:33:55.98635-08:00","created_by":"daemon"}]}
{"id":"bd-7h7","title":"bd init should stop running daemon to avoid stale cache","description":"When running bd init, any running daemon continues with stale cached data, causing bd stats and other commands to show old counts.\n\nRepro:\n1. Have daemon running with 788 issues cached\n2. Clean JSONL to 128 issues, delete db, run bd init\n3. bd stats still shows 788 (daemon cache)\n4. Must manually run bd daemon --stop\n\nFix: bd init should automatically stop any running daemon before reinitializing.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-16T13:26:47.117226-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
@@ -411,7 +427,7 @@
{"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","close_reason":"Moved to gastown: gt-dich"}
{"id":"bd-qioh","title":"Standardize error handling: replace direct fmt.Fprintf+os.Exit with FatalError","description":"Standardize error handling in cmd/bd/ using FatalError pattern.\n\n## Current State\n~200+ instances of direct `fmt.Fprintf(os.Stderr, ...) + os.Exit(1)` pattern scattered across cmd/bd/*.go files.\n\n## Target Pattern\n\nUse existing FatalError helper (or create if missing):\n\n```go\n// In cmd/bd/helpers.go or similar\nfunc FatalError(format string, args ...interface{}) {\n fmt.Fprintf(os.Stderr, \"Error: \"+format+\"\\n\", args...)\n os.Exit(1)\n}\n\nfunc FatalErrorf(err error, context string) {\n fmt.Fprintf(os.Stderr, \"Error: %s: %v\\n\", context, err)\n os.Exit(1)\n}\n```\n\n## Transformation\n\n```go\n// Before\nfmt.Fprintf(os.Stderr, \"Error: %v\\n\", err)\nos.Exit(1)\n\n// After\nFatalError(\"%v\", err)\n\n// Before\nfmt.Fprintf(os.Stderr, \"Error: invalid --since duration: %v\\n\", err)\nos.Exit(1)\n\n// After\nFatalError(\"invalid --since duration: %v\", err)\n```\n\n## Files to Update (by occurrence count)\nRun: `grep -c \"os.Exit(1)\" cmd/bd/*.go | sort -t: -k2 -rn | head -20`\n\nPriority files (highest occurrence):\n- close.go\n- show.go\n- sync.go\n- init.go\n- list.go\n- create.go\n- update.go\n\n## Implementation Steps\n\n1. **Check if FatalError exists** in cmd/bd/helpers.go or create it\n2. **Create migration script** or use sed:\n ```bash\n # Find patterns to replace\n grep -rn \"fmt.Fprintf(os.Stderr.*Error.*\\n.*os.Exit(1)\" cmd/bd/\n ```\n3. **Replace systematically** file by file\n4. **Run tests** after each file to verify behavior unchanged\n5. **Run linter** to catch any missed patterns\n\n## Verification\n```bash\n# Count remaining direct exits (should be near zero)\ngrep -c \"os.Exit(1)\" cmd/bd/*.go | awk -F: \"{sum+=\\$2} END {print sum}\"\n\n# Run tests\ngo test -short ./cmd/bd/...\n```\n\n## Success Criteria\n- All error exits use FatalError/FatalErrorf\n- Consistent \"Error: \" prefix on all error messages\n- Tests pass\n- No behavior changes (exit codes remain 1)","notes":"## Progress (Dec 2025)\n\nStandardized error handling in 3 major files:\n- compact.go: All 48 os.Exit(1) calls converted to FatalError\n- sync.go: All error patterns converted (kept 1 valid summary exit)\n- migrate.go: 4 patterns converted\n\n## Remaining Work\n~326 fmt.Fprintf(os.Stderr, \"Error:\") patterns remain across ~30 files.\nHigh-count files remaining: show.go (16), dep.go (14), gate.go (28), init.go (11).\n\n## Verification\n- Build compiles successfully\n- Tests pass","status":"closed","priority":2,"issue_type":"task","assignee":"beads/Errata","created_at":"2025-12-16T18:17:19.309394-08:00","updated_at":"2025-12-23T14:14:37.939802-08:00","closed_at":"2025-12-23T14:14:37.939802-08:00","close_reason":"Error handling standardization - polecat completed, MR submitted","dependencies":[{"issue_id":"bd-qioh","depends_on_id":"bd-iz5t","type":"parent-child","created_at":"2025-12-23T12:44:07.43514-08:00","created_by":"daemon"}]}
{"id":"bd-qkw9","title":"Run bump-version.sh {{version}}","description":"Run ./scripts/bump-version.sh {{version}} to update version in all files","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T22:55:58.841424-08:00","updated_at":"2025-12-20T17:59:26.262877-08:00","closed_at":"2025-12-20T01:18:48.99813-08:00","dependencies":[{"issue_id":"bd-qkw9","depends_on_id":"bd-6s61","type":"parent-child","created_at":"2025-12-19T22:56:14.786027-08:00","created_by":"daemon"}]}
{"id":"bd-qqc","title":"Release v{{version}}","description":"Version bump workflow for beads release {{version}}.\n\n## Variables\n- `{{version}}` - The new version number (e.g., 0.31.0)\n- `{{date}}` - Release date (YYYY-MM-DD format)\n\n## Workflow Steps\n1. Kill running daemons\n2. Run tests and linting\n3. Bump version in all files (10 files total)\n4. Update cmd/bd/info.go with release notes\n5. Commit and push version bump\n6. Create and push git tag\n7. Update Homebrew formula\n8. Upgrade local Homebrew installation\n9. Verify installation\n\n## Files Updated by bump-version.sh\n- cmd/bd/version.go\n- .claude-plugin/plugin.json\n- .claude-plugin/marketplace.json\n- integrations/beads-mcp/pyproject.toml\n- integrations/beads-mcp/src/beads_mcp/__init__.py\n- README.md\n- npm-package/package.json\n- cmd/bd/templates/hooks/* (4 files)\n- CHANGELOG.md\n\n## Manual Step Required\n- cmd/bd/info.go - Add versionChanges entry with release notes","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-18T12:59:00.610371-08:00","updated_at":"2025-12-20T17:59:26.263219-08:00","closed_at":"2025-12-20T01:18:46.71424-08:00","labels":["template"]}
{"id":"bd-qqc","title":"Release v{{version}}","description":"SUPERSEDED by bd-7bs4. Use the new proto for releases.\n\n","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-18T12:59:00.610371-08:00","updated_at":"2025-12-24T16:22:59.885719-08:00","closed_at":"2025-12-20T01:18:46.71424-08:00","labels":["template"]}
{"id":"bd-qqc.1","title":"Update version to {{version}} in version.go","description":"Edit cmd/bd/version.go line 17:\n\n```go\nVersion = \"{{version}}\"\n```\n\nVerify with: `grep 'Version =' cmd/bd/version.go`","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T12:59:13.887087-08:00","updated_at":"2025-12-18T23:34:18.630067-08:00","closed_at":"2025-12-18T22:41:41.82664-08:00","dependencies":[{"issue_id":"bd-qqc.1","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T12:59:13.887655-08:00","created_by":"stevey"}]}
{"id":"bd-qqc.10","title":"Upgrade local Homebrew installation","description":"Upgrade bd via Homebrew:\n\n```bash\nbrew update\nbrew upgrade bd\n/opt/homebrew/bin/bd version # Verify shows {{version}}\n```\n\n**Note**: If `brew upgrade` fails with CLT (Command Line Tools) errors on bleeding-edge macOS versions (e.g., Tahoe 26.x):\n\n```bash\n# Reinstall CLT\nsudo rm -rf /Library/Developer/CommandLineTools\nxcode-select --install\n# Wait for GUI installer to complete, then retry brew upgrade\n```\n\nAlternative: Skip Homebrew and use go install:\n```bash\ngo install ./cmd/bd\n~/go/bin/bd version # Verify shows {{version}}\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T22:42:37.60241-08:00","updated_at":"2025-12-22T12:32:23.678806-08:00","closed_at":"2025-12-18T22:52:00.331429-08:00","dependencies":[{"issue_id":"bd-qqc.10","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T22:42:37.603893-08:00","created_by":"daemon"},{"issue_id":"bd-qqc.10","depends_on_id":"bd-qqc.9","type":"blocks","created_at":"2025-12-18T22:43:21.458817-08:00","created_by":"daemon"}]}
{"id":"bd-qqc.11","title":"Update go install bd to {{version}}","description":"Rebuild and install bd to ~/go/bin:\n\n```bash\ngo install ./cmd/bd\n~/go/bin/bd version # Verify shows {{version}}\n```\n\nNote: If ~/go/bin is in PATH before /opt/homebrew/bin, this is the version that runs by default.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T23:07:55.838013-08:00","updated_at":"2025-12-18T23:09:05.775582-08:00","closed_at":"2025-12-18T23:09:05.775582-08:00","dependencies":[{"issue_id":"bd-qqc.11","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T23:07:55.838432-08:00","created_by":"daemon"},{"issue_id":"bd-qqc.11","depends_on_id":"bd-qqc.10","type":"blocks","created_at":"2025-12-18T23:08:19.629947-08:00","created_by":"daemon"}]}