diff --git a/CHANGELOG.md b/CHANGELOG.md index d0e0d375..22c73648 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,63 @@ All notable changes to the beads project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.40.0] - 2025-12-28 + +### Added + +- **`bd worktree` command** - Parallel development support + - Manage git worktrees with beads integration + - Enables working on multiple issues simultaneously + +- **`bd slot` commands** - Agent bead slot management + - Track agent assignments with dedicated slot operations + - Supports Gas Town multi-agent workflows + +- **`bd agent state` command** - ZFC-compliant state reporting + - Report agent state in standardized format + - Enables machine-readable status checks + +- **`bd doctor --deep`** - Full graph integrity validation + - Deep validation of bead dependency graphs + - Includes agent bead integrity checks + +- **Agent bead support** - New bead types + - `type=agent` and `type=role` for agent tracking + - Agent-specific fields in schema (migration 030) + - Agent ID pattern validation on create + +- **Computed `.parent` field** - JSON output enhancement + - Parent field included in JSON for convenience + - Simplifies integration with external tools + +- **Auto-bypass daemon for wisp operations** - Performance + - Ephemeral wisp operations skip daemon overhead + - Faster patrol cycle processing + +- **Pour warning for vapor-phase formulas** - Safety + - Warning when pouring formulas designed for wisps + - Prevents accidental persistent molecule creation + +### Fixed + +- **O(2^n) → O(V+E) cycle detection** (GH#775) - Performance + - Replaced exponential algorithm with linear DFS + - Dramatic speedup for large dependency graphs + +- **Import hash mismatch warnings** - Data integrity + - Update jsonl_file_hash on import operations + - Prevents spurious hash mismatch warnings + +### Changed + +- **Community tools documentation** (GH#772, GH#776) + - Consolidated into dedicated docs page + - Added opencode-beads to community tools list + +- **Activity feed improvements** - Better context + - Shows title and assignee in activity entries + - More informative `bd activity` output + ## [0.39.1] - 2025-12-27 ### Added diff --git a/cmd/bd/doctor_test.go b/cmd/bd/doctor_test.go index 0da151a8..a6bd6974 100644 --- a/cmd/bd/doctor_test.go +++ b/cmd/bd/doctor_test.go @@ -935,7 +935,7 @@ func TestCheckMetadataVersionTracking(t *testing.T) { name: "slightly outdated version", setupVersion: func(beadsDir string) error { // Use a version that's less than 10 minor versions behind current - return os.WriteFile(filepath.Join(beadsDir, ".local_version"), []byte("0.30.0\n"), 0644) + return os.WriteFile(filepath.Join(beadsDir, ".local_version"), []byte("0.35.0\n"), 0644) }, expectedStatus: doctor.StatusOK, expectWarning: false, @@ -944,7 +944,7 @@ func TestCheckMetadataVersionTracking(t *testing.T) { name: "very old version", setupVersion: func(beadsDir string) error { // Use a version that's 10+ minor versions behind current (triggers warning) - return os.WriteFile(filepath.Join(beadsDir, ".local_version"), []byte("0.24.0\n"), 0644) + return os.WriteFile(filepath.Join(beadsDir, ".local_version"), []byte("0.29.0\n"), 0644) }, expectedStatus: doctor.StatusWarning, expectWarning: true, diff --git a/cmd/bd/version.go b/cmd/bd/version.go index 45ea7823..d4de20f5 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.39.1" + Version = "0.40.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) diff --git a/internal/storage/sqlite/migrations_test.go b/internal/storage/sqlite/migrations_test.go index c1175dc6..a0a8a8ea 100644 --- a/internal/storage/sqlite/migrations_test.go +++ b/internal/storage/sqlite/migrations_test.go @@ -466,7 +466,7 @@ func TestMigrateContentHashColumn(t *testing.T) { notes TEXT NOT NULL DEFAULT '', status TEXT NOT NULL CHECK (status IN ('open', 'in_progress', 'blocked', 'closed', 'tombstone')), priority INTEGER NOT NULL, - issue_type TEXT NOT NULL CHECK (issue_type IN ('bug', 'feature', 'task', 'epic', 'chore', 'message')), + issue_type TEXT NOT NULL CHECK (issue_type IN ('bug', 'feature', 'task', 'epic', 'chore', 'message', 'agent', 'role')), assignee TEXT, estimated_minutes INTEGER, created_at DATETIME NOT NULL, @@ -496,9 +496,15 @@ func TestMigrateContentHashColumn(t *testing.T) { await_id TEXT DEFAULT '', timeout_ns INTEGER DEFAULT 0, waiters TEXT DEFAULT '', + hook_bead TEXT DEFAULT '', + role_bead TEXT DEFAULT '', + agent_state TEXT DEFAULT '', + last_activity DATETIME, + role_type TEXT DEFAULT '', + rig TEXT DEFAULT '', CHECK ((status = 'closed') = (closed_at IS NOT NULL)) ); - INSERT INTO issues SELECT id, title, description, design, acceptance_criteria, notes, status, priority, issue_type, assignee, estimated_minutes, created_at, '', updated_at, closed_at, external_ref, compaction_level, compacted_at, original_size, compacted_at_commit, source_repo, '', NULL, '', '', '', '', 0, 0, 0, '', '', '', '', '', '', 0, '' FROM issues_backup; + INSERT INTO issues SELECT id, title, description, design, acceptance_criteria, notes, status, priority, issue_type, assignee, estimated_minutes, created_at, '', updated_at, closed_at, external_ref, compaction_level, compacted_at, original_size, compacted_at_commit, source_repo, '', NULL, '', '', '', '', 0, 0, 0, '', '', '', '', '', '', 0, '', '', '', '', NULL, '', '' FROM issues_backup; DROP TABLE issues_backup; `) if err != nil {