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>
This commit is contained in:
57
CHANGELOG.md
57
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/),
|
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).
|
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
|
## [0.39.1] - 2025-12-27
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -935,7 +935,7 @@ func TestCheckMetadataVersionTracking(t *testing.T) {
|
|||||||
name: "slightly outdated version",
|
name: "slightly outdated version",
|
||||||
setupVersion: func(beadsDir string) error {
|
setupVersion: func(beadsDir string) error {
|
||||||
// Use a version that's less than 10 minor versions behind current
|
// 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,
|
expectedStatus: doctor.StatusOK,
|
||||||
expectWarning: false,
|
expectWarning: false,
|
||||||
@@ -944,7 +944,7 @@ func TestCheckMetadataVersionTracking(t *testing.T) {
|
|||||||
name: "very old version",
|
name: "very old version",
|
||||||
setupVersion: func(beadsDir string) error {
|
setupVersion: func(beadsDir string) error {
|
||||||
// Use a version that's 10+ minor versions behind current (triggers warning)
|
// 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,
|
expectedStatus: doctor.StatusWarning,
|
||||||
expectWarning: true,
|
expectWarning: true,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
// Version is the current version of bd (overridden by ldflags at build time)
|
// 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 can be set via ldflags at compile time
|
||||||
Build = "dev"
|
Build = "dev"
|
||||||
// Commit and branch the git revision the binary was built from (optional ldflag)
|
// Commit and branch the git revision the binary was built from (optional ldflag)
|
||||||
|
|||||||
@@ -466,7 +466,7 @@ func TestMigrateContentHashColumn(t *testing.T) {
|
|||||||
notes TEXT NOT NULL DEFAULT '',
|
notes TEXT NOT NULL DEFAULT '',
|
||||||
status TEXT NOT NULL CHECK (status IN ('open', 'in_progress', 'blocked', 'closed', 'tombstone')),
|
status TEXT NOT NULL CHECK (status IN ('open', 'in_progress', 'blocked', 'closed', 'tombstone')),
|
||||||
priority INTEGER NOT NULL,
|
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,
|
assignee TEXT,
|
||||||
estimated_minutes INTEGER,
|
estimated_minutes INTEGER,
|
||||||
created_at DATETIME NOT NULL,
|
created_at DATETIME NOT NULL,
|
||||||
@@ -496,9 +496,15 @@ func TestMigrateContentHashColumn(t *testing.T) {
|
|||||||
await_id TEXT DEFAULT '',
|
await_id TEXT DEFAULT '',
|
||||||
timeout_ns INTEGER DEFAULT 0,
|
timeout_ns INTEGER DEFAULT 0,
|
||||||
waiters TEXT DEFAULT '',
|
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))
|
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;
|
DROP TABLE issues_backup;
|
||||||
`)
|
`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user