From 7faf787e6d701d262235e33f45a13a825e27f9df Mon Sep 17 00:00:00 2001 From: Steve Yegge Date: Sat, 29 Nov 2025 23:37:25 -0800 Subject: [PATCH] chore: bump version to 0.27.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Release highlights: - Custom status states via config (bd-1pj6) - Contributor fork workflows: bd init --contributor (bd-bx9) - Full git worktree support (#416) - CRITICAL: Sync corruption prevention (hash-based staleness + reverse ZFC) - Out-of-order dependency handling in JSONL import (#414) - bd sync --squash for batching commits (bd-o2e) - Fresh clone detection in bd doctor (bd-4ew) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- CHANGELOG.md | 80 ++++++++++++++++++++++++++++ cmd/bd/info.go | 22 ++++---- cmd/bd/templates/hooks/post-checkout | 2 +- cmd/bd/templates/hooks/post-merge | 2 +- cmd/bd/templates/hooks/pre-commit | 2 +- cmd/bd/templates/hooks/pre-push | 2 +- cmd/bd/version.go | 2 +- 7 files changed, 94 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72243455..5f5d36a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,86 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.27.0] - 2025-11-29 + +### Added + +- **Custom Status States**: Define custom issue statuses via config (bd-1pj6) + - Configure project-specific statuses like `testing`, `blocked`, `review` + - Status validation ensures only configured statuses are used + - Backwards compatible: open/in_progress/closed always work + +- **Contributor Fork Workflows**: `bd init --contributor` now auto-configures `sync.remote=upstream` (bd-bx9) + - Syncs issues from upstream rather than origin + - Ideal for contributors working on forks + +- **Git Worktree Support**: Full support for git worktrees (#416) + - `bd hooks install` now works correctly in worktrees + - Helpful message when entering worktree repo without beads initialized + - Hooks properly detect worktree vs main repository + +- **Daemon Health Checks**: Health monitoring in daemon event loop (bd-gqo) + - Periodic health checks detect stale database state + - Auto-recovery from detected inconsistencies + +- **Fresh Clone Detection**: `bd doctor` now detects fresh clones (bd-4ew) + - Suggests `bd init` when JSONL exists but no database + - Improved onboarding experience for new contributors + +- **bd sync --squash**: Batch multiple sync commits into one (bd-o2e) + - Reduces commit noise when syncing frequently + - Optional flag for cleaner git history + +- **Error Handling Helpers**: Extracted FatalError/WarnError utilities (bd-s0z) + - Consistent error formatting across codebase + - Better error messages for users + +### Fixed + +- **CRITICAL: Sync Corruption Prevention**: Multiple fixes prevent stale database from corrupting JSONL + - **Hash-based staleness detection** (bd-f2f): SHA256 hash comparison catches content mismatches + - **Reverse ZFC check** (bd-53c): Detects when JSONL has more issues than DB + - **Stale daemon connection** (eb4b81d): Prevents corruption from stale SQLite connections + - Combined, these fixes eliminate the sync corruption bugs that affected v0.26.x + +- **Multi-Hyphen Prefix Support** (#419): Hash IDs with multi-part prefixes now handled correctly + - Example: `my-app-abc123` correctly parsed as prefix `my-app` + +- **Out-of-Order Dependencies** (#414): JSONL import handles dependencies before their targets exist + - Fixes import failures when issues reference not-yet-imported dependencies + +- **--from-main Sync Mode** (#418): Now defaults to `noGitHistory=true` + - Prevents spurious deletions when syncing from main branch + +- **JSONL-Only Mode Detection**: Auto-detects when config has `no-db: true` (bd-5kj) + - Properly handles repositories using JSONL without SQLite + +- **Init Safety Guard**: Prevents overwriting existing JSONL data on init + - Warns user when data already exists, requires confirmation + +- **Snapshot Cleanup** (bd-0io): Properly cleans up snapshot files after sync + - Removes `.beads/*.snapshot` files that could cause conflicts + +- **Daemon Registry Locking** (bd-5bj): Cross-process locking prevents registry corruption + - Fixes race conditions when multiple processes access daemon registry + +- **Doctor Merge Artifacts**: Excludes merge artifacts from "multiple JSONL" warning + - Reduces false positives during merge resolution + +### Changed + +- **Documentation**: Fixed birthday paradox threshold explanation in README +- **Documentation**: Corrected `bd dep add` syntax and semantics + +### Community + +- PR #419: Multi-hyphen prefix support +- PR #418: --from-main noGitHistory default +- PR #416: Git worktree hooks support +- PR #415: CI fixes +- PR #414: Out-of-order dependency handling +- PR #404: Error on invalid JSON during init (@joelklabo) + ## [0.26.2] - 2025-11-29 ### Fixed diff --git a/cmd/bd/info.go b/cmd/bd/info.go index b2a668ad..df36421b 100644 --- a/cmd/bd/info.go +++ b/cmd/bd/info.go @@ -288,21 +288,17 @@ type VersionChange struct { // versionChanges contains agent-actionable changes for recent versions var versionChanges = []VersionChange{ { - Version: "0.26.2", + Version: "0.27.0", Date: "2025-11-29", Changes: []string{ - "FIX (bd-f2f): Hash-based staleness detection prevents stale DB from corrupting JSONL", - "Detects content differences even when issue counts match between DB and JSONL", - "Computes SHA256 hash of JSONL content to detect mismatches missed by count-based checks", - }, - }, - { - Version: "0.26.1", - Date: "2025-11-29", - Changes: []string{ - "CRITICAL FIX (bd-53c): Reverse ZFC check prevents stale DB from corrupting JSONL", - "bd sync now detects when JSONL has more issues than DB and imports first", - "Prevents fresh/stale clones from exporting incomplete database state", + "Custom Status States - Define project-specific statuses via config (testing, blocked, review)", + "Contributor Fork Workflows - `bd init --contributor` auto-configures sync.remote=upstream", + "Git Worktree Support - Full support for worktrees in hooks and detection", + "CRITICAL: Sync corruption prevention - Hash-based staleness + reverse ZFC checks", + "Out-of-Order Dependencies (#414) - JSONL import handles deps before targets exist", + "--from-main defaults to noGitHistory=true - Prevents spurious deletions", + "bd sync --squash - Batch multiple sync commits into one", + "Fresh Clone Detection - bd doctor suggests 'bd init' when JSONL exists but no DB", }, }, { diff --git a/cmd/bd/templates/hooks/post-checkout b/cmd/bd/templates/hooks/post-checkout index d7471e69..e708a517 100755 --- a/cmd/bd/templates/hooks/post-checkout +++ b/cmd/bd/templates/hooks/post-checkout @@ -1,5 +1,5 @@ #!/bin/sh -# bd-hooks-version: 0.26.2 +# bd-hooks-version: 0.27.0 # # bd (beads) post-checkout hook # diff --git a/cmd/bd/templates/hooks/post-merge b/cmd/bd/templates/hooks/post-merge index 323c5144..f8ea22ea 100755 --- a/cmd/bd/templates/hooks/post-merge +++ b/cmd/bd/templates/hooks/post-merge @@ -1,5 +1,5 @@ #!/bin/sh -# bd-hooks-version: 0.26.2 +# bd-hooks-version: 0.27.0 # # bd (beads) post-merge hook # diff --git a/cmd/bd/templates/hooks/pre-commit b/cmd/bd/templates/hooks/pre-commit index 1189e901..c1a8a2c7 100755 --- a/cmd/bd/templates/hooks/pre-commit +++ b/cmd/bd/templates/hooks/pre-commit @@ -1,5 +1,5 @@ #!/bin/sh -# bd-hooks-version: 0.26.2 +# bd-hooks-version: 0.27.0 # # bd (beads) pre-commit hook # diff --git a/cmd/bd/templates/hooks/pre-push b/cmd/bd/templates/hooks/pre-push index 8848e44d..03bf9039 100755 --- a/cmd/bd/templates/hooks/pre-push +++ b/cmd/bd/templates/hooks/pre-push @@ -1,5 +1,5 @@ #!/bin/sh -# bd-hooks-version: 0.26.2 +# bd-hooks-version: 0.27.0 # # bd (beads) pre-push hook # diff --git a/cmd/bd/version.go b/cmd/bd/version.go index 43919b69..5fa8a412 100644 --- a/cmd/bd/version.go +++ b/cmd/bd/version.go @@ -14,7 +14,7 @@ import ( var ( // Version is the current version of bd (overridden by ldflags at build time) - Version = "0.26.2" + Version = "0.27.0" // Build can be set via ldflags at compile time Build = "dev" // Commit and branch the git revision the binary was built from (optional ldflag)