Skip to content

Commit 6f00e48

Browse files
steveyeggeclaude
andcommitted
Release v0.40.0
New commands and features: - bd worktree for parallel development - bd slot commands for agent bead slot management - bd agent state for ZFC-compliant state reporting - bd doctor --deep for full graph integrity validation - Agent bead support (type=agent, type=role, migration 030) - Computed .parent field in JSON output - Auto-bypass daemon for wisp operations - Pour warning for vapor-phase formulas Performance: - O(2^n) → O(V+E) cycle detection (GH#775) Fixes: - Import hash mismatch warnings - Test updates for version tracking thresholds - Migration test updated for new agent schema fields 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent d8ef771 commit 6f00e48

4 files changed

Lines changed: 68 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,63 @@ All notable changes to the beads project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.40.0] - 2025-12-28
9+
10+
### Added
11+
12+
- **`bd worktree` command** - Parallel development support
13+
- Manage git worktrees with beads integration
14+
- Enables working on multiple issues simultaneously
15+
16+
- **`bd slot` commands** - Agent bead slot management
17+
- Track agent assignments with dedicated slot operations
18+
- Supports Gas Town multi-agent workflows
19+
20+
- **`bd agent state` command** - ZFC-compliant state reporting
21+
- Report agent state in standardized format
22+
- Enables machine-readable status checks
23+
24+
- **`bd doctor --deep`** - Full graph integrity validation
25+
- Deep validation of bead dependency graphs
26+
- Includes agent bead integrity checks
27+
28+
- **Agent bead support** - New bead types
29+
- `type=agent` and `type=role` for agent tracking
30+
- Agent-specific fields in schema (migration 030)
31+
- Agent ID pattern validation on create
32+
33+
- **Computed `.parent` field** - JSON output enhancement
34+
- Parent field included in JSON for convenience
35+
- Simplifies integration with external tools
36+
37+
- **Auto-bypass daemon for wisp operations** - Performance
38+
- Ephemeral wisp operations skip daemon overhead
39+
- Faster patrol cycle processing
40+
41+
- **Pour warning for vapor-phase formulas** - Safety
42+
- Warning when pouring formulas designed for wisps
43+
- Prevents accidental persistent molecule creation
44+
45+
### Fixed
46+
47+
- **O(2^n) → O(V+E) cycle detection** (GH#775) - Performance
48+
- Replaced exponential algorithm with linear DFS
49+
- Dramatic speedup for large dependency graphs
50+
51+
- **Import hash mismatch warnings** - Data integrity
52+
- Update jsonl_file_hash on import operations
53+
- Prevents spurious hash mismatch warnings
54+
55+
### Changed
56+
57+
- **Community tools documentation** (GH#772, GH#776)
58+
- Consolidated into dedicated docs page
59+
- Added opencode-beads to community tools list
60+
61+
- **Activity feed improvements** - Better context
62+
- Shows title and assignee in activity entries
63+
- More informative `bd activity` output
64+
865
## [0.39.1] - 2025-12-27
966

1067
### Added

cmd/bd/doctor_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -935,7 +935,7 @@ func TestCheckMetadataVersionTracking(t *testing.T) {
935935
name: "slightly outdated version",
936936
setupVersion: func(beadsDir string) error {
937937
// Use a version that's less than 10 minor versions behind current
938-
return os.WriteFile(filepath.Join(beadsDir, ".local_version"), []byte("0.30.0\n"), 0644)
938+
return os.WriteFile(filepath.Join(beadsDir, ".local_version"), []byte("0.35.0\n"), 0644)
939939
},
940940
expectedStatus: doctor.StatusOK,
941941
expectWarning: false,
@@ -944,7 +944,7 @@ func TestCheckMetadataVersionTracking(t *testing.T) {
944944
name: "very old version",
945945
setupVersion: func(beadsDir string) error {
946946
// Use a version that's 10+ minor versions behind current (triggers warning)
947-
return os.WriteFile(filepath.Join(beadsDir, ".local_version"), []byte("0.24.0\n"), 0644)
947+
return os.WriteFile(filepath.Join(beadsDir, ".local_version"), []byte("0.29.0\n"), 0644)
948948
},
949949
expectedStatus: doctor.StatusWarning,
950950
expectWarning: true,

cmd/bd/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414

1515
var (
1616
// Version is the current version of bd (overridden by ldflags at build time)
17-
Version = "0.39.1"
17+
Version = "0.40.0"
1818
// Build can be set via ldflags at compile time
1919
Build = "dev"
2020
// Commit and branch the git revision the binary was built from (optional ldflag)

internal/storage/sqlite/migrations_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ func TestMigrateContentHashColumn(t *testing.T) {
466466
notes TEXT NOT NULL DEFAULT '',
467467
status TEXT NOT NULL CHECK (status IN ('open', 'in_progress', 'blocked', 'closed', 'tombstone')),
468468
priority INTEGER NOT NULL,
469-
issue_type TEXT NOT NULL CHECK (issue_type IN ('bug', 'feature', 'task', 'epic', 'chore', 'message')),
469+
issue_type TEXT NOT NULL CHECK (issue_type IN ('bug', 'feature', 'task', 'epic', 'chore', 'message', 'agent', 'role')),
470470
assignee TEXT,
471471
estimated_minutes INTEGER,
472472
created_at DATETIME NOT NULL,
@@ -496,9 +496,15 @@ func TestMigrateContentHashColumn(t *testing.T) {
496496
await_id TEXT DEFAULT '',
497497
timeout_ns INTEGER DEFAULT 0,
498498
waiters TEXT DEFAULT '',
499+
hook_bead TEXT DEFAULT '',
500+
role_bead TEXT DEFAULT '',
501+
agent_state TEXT DEFAULT '',
502+
last_activity DATETIME,
503+
role_type TEXT DEFAULT '',
504+
rig TEXT DEFAULT '',
499505
CHECK ((status = 'closed') = (closed_at IS NOT NULL))
500506
);
501-
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;
507+
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;
502508
DROP TABLE issues_backup;
503509
`)
504510
if err != nil {

0 commit comments

Comments
 (0)