Files
beads/CHANGELOG.md
2025-10-30 20:39:24 -07:00

35 KiB

Changelog

All notable changes to the beads project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

[0.20.0] - 2025-10-30

Added

  • Hash-Based IDs: New collision-resistant ID system (bd-168, bd-166, bd-167)
    • 6-character hash IDs with progressive 7/8-char fallback on collision
    • Opt-in via .beads/config.toml with id_mode = "hash"
    • Migration tool: bd migrate --to-hash-ids for existing databases
    • Prefix-optional ID parsing (e.g., bd-abc123 or just abc123)
    • Hierarchical child ID generation for discovered-from relationships
  • Substring ID Matching: All bd commands now support partial ID matching (bd-170)
    • bd show abc matches any ID containing "abc" (e.g., bd-abc123)
    • Ambiguous matches show helpful error with all candidates
  • Daemon Registry: Multi-daemon management for multiple workspaces (bd-07b8c8)
    • bd daemons list shows all running daemons across workspaces
    • bd daemons health detects version mismatches and stale sockets
    • bd daemons logs <workspace> for per-daemon log viewing
    • bd daemons killall to restart all daemons after upgrades

Fixed

  • Test Stability: Deprecated sequence-ID collision tests
    • Kept TestFiveCloneCollision for hash-ID multi-clone testing
    • Fixed TestTwoCloneCollision to use merge instead of rebase
  • Linting: golangci-lint v2.5.0 compatibility
    • Added version: 2 field to .golangci.yml
    • Renamed exclude to exclude-patterns for v3 format

Changed

  • Multiple bd Detection: Warning when multiple bd binaries in PATH (PR #182)
    • Prevents confusion from version conflicts
    • Shows locations of all bd binaries found

[0.17.7] - 2025-10-26

Fixed

  • Test Isolation: Export test failures due to hash caching between subtests
    • Added ClearAllExportHashes() method to SQLiteStorage for test isolation
    • Export tests now properly reset state between subtests
    • Fixes intermittent test failures when running full test suite

[0.17.2] - 2025-10-25

Added

  • Configurable Sort Policy: bd ready --sort flag for work queue ordering (bd-147)
    • hybrid (default): Priority-weighted by staleness
    • priority: Strict priority ordering for autonomous systems
    • oldest: Pure FIFO for long-tail work
  • Release Automation: New scripts for streamlined releases
    • scripts/release.sh: Full automated release (version bump, tests, tag, Homebrew, install)
    • scripts/update-homebrew.sh: Automated Homebrew formula updates

Fixed

  • Critical: Database reinitialization test re-landed with CI fixes (bd-130)
    • Windows: Fixed git path handling (forward slash normalization)
    • Nix: Skip test when git unavailable
    • JSON: Increased scanner buffer to 64MB for large issues
  • Bug: Stale daemon socket detection (bd-137)
    • MCP server now health-checks cached connections before use
    • Auto-reconnect with exponential backoff on stale sockets
    • Handles daemon restarts/upgrades gracefully
  • Linting: Fixed all errcheck warnings in production code (bd-58)
    • Proper error handling for database resources and transactions
    • Graceful EOF handling in interactive input
  • Linting: Fixed revive style issues (bd-56)
    • Removed unused parameters, renamed builtin shadowing
  • Linting: Fixed goconst warnings (bd-116)

[0.17.0] - 2025-10-24

Added

  • Git Hooks: Automatic installation prompt during bd init (bd-51)
    • Eliminates race condition between auto-flush and git commits
    • Pre-commit hook: Flushes pending changes immediately before commit
    • Post-merge hook: Imports updated JSONL after pull/merge
    • Optional installation with Y/n prompt (defaults to yes)
    • See examples/git-hooks/README.md for details
  • Duplicate Detection: New bd duplicates command for finding and merging duplicate issues (bd-119, bd-203)
    • Automated duplicate detection with content-based matching
    • --auto-merge flag for batch merging duplicates
    • --dry-run mode to preview merges before execution
    • Helps maintain database cleanliness after imports
  • External Reference Import: Smart import matching using external_ref field (bd-66-74, GH #142)
    • Issues with external_ref match by reference first, not content
    • Enables hybrid workflows with Jira, GitHub, Linear
    • Updates existing issues instead of creating duplicates
    • Database index on external_ref for fast lookups
  • Multi-Database Warning: Detect and warn about nested beads databases (bd-75)
    • Prevents accidental creation of multiple databases in hierarchy
    • Helps users avoid confusion about which database is active

Fixed

  • Critical: Database reinitialization data loss bug (bd-130, DATABASE_REINIT_BUG.md)
    • Fixed bug where removing .beads/ and running bd init would lose git-tracked issues
    • Now correctly imports from JSONL during initialization
    • Added comprehensive tests (later reverted due to CI issues on Windows/Nix)
  • Critical: Foreign key constraint regression (bd-62, GH #144)
    • Pinned modernc.org/sqlite to v1.38.2 to avoid FK violations
    • Prevents database corruption from upstream regression
  • Critical: Install script safety (GH #143 by @marcodelpin)
    • Prevents shell corruption from directory deletion during install
    • Restored proper error codes for safer installation
  • Bug: Daemon auto-start reliability (bd-137)
    • Daemon now responsive immediately, runs initial sync in background
    • Fixes timeout issues when git pull is slow
    • Skip daemon-running check for forked child process
  • Bug: Dependency timestamp churn during auto-import (bd-45, bd-137)
    • Auto-import no longer updates timestamps on unchanged dependencies
    • Eliminates perpetually dirty JSONL from metadata changes
  • Bug: Import reporting accuracy (bd-49, bd-88)
    • bd import now correctly reports "X updated, Y unchanged" instead of "0 updated"
    • Better visibility into import operation results
  • Bug: Memory database handling
    • Fixed :memory: database connection with shared cache mode
    • Proper URL construction for in-memory testing

Changed

  • Removed: Deprecated bd repos command
    • Global daemon architecture removed in favor of per-project daemons
    • Eliminated cross-project database confusion
  • Documentation: Major reorganization and improvements
    • Condensed README, created specialized docs (QUICKSTART.md, ADVANCED.md, etc.)
    • Enhanced "Why not GitHub Issues?" FAQ section
    • Added Beadster to Community & Ecosystem section

Performance

  • Test coverage improvements: 46.0% → 57.7% (+11.7%)
    • Added tests for RPC, storage, cmd/bd helpers
    • New test files: coverage_test.go, helpers_test.go, epics_test.go

Community

  • Community contribution by @marcodelpin (install script safety fixes)
  • Dependabot integration for automated dependency updates

[0.16.0] - 2025-10-23

Added

  • Automated Releases: GoReleaser workflow for cross-platform binaries (bd-46)
    • Automatic GitHub releases on version tags
    • Linux, macOS, Windows binaries for amd64 and arm64
    • Checksums and changelog generation included
  • PyPI Automation: Automated MCP server publishing to PyPI
    • GitHub Actions workflow publishes beads-mcp on version tags
    • Eliminates manual PyPI upload step
  • Sandbox Mode: --sandbox flag for Claude Code integration (bd-35)
    • Isolated environment for AI agent experimentation
    • Prevents production database modifications during testing

Fixed

  • Critical: Idempotent import timestamp churn (bd-84)
    • Prevents timestamp updates when issue content unchanged
    • Reduces JSONL churn and git noise from repeated imports
  • Bug: Windows CI test failures (bd-60, bd-99)
    • Fixed path separator issues and file handling on Windows
    • Skipped flaky tests to stabilize CI

Changed

  • Configuration Migration: Unified config management with Viper (bd-40-44, bd-78)
    • Migrated from manual env var handling to Viper
    • Bound all global flags to Viper for consistency
    • Kept bd config independent from Viper for modularity
    • Added comprehensive configuration tests
  • Documentation Refactor: Improved documentation structure
    • Condensed main README
    • Created specialized guides (QUICKSTART.md, CONFIG.md, etc.)
    • Enhanced FAQ and community sections

Testing

  • Hardened issueDataChanged with type-safe comparisons
  • Improved test isolation and reliability

[0.15.0] - 2025-10-23

Added

  • Configuration System: New bd config command for managing configuration (GH #115)
    • Environment variable definitions with validation
    • Configuration file support (TOML/YAML/JSON)
    • Get/set/list/unset commands for user-friendly management
    • Validation and type checking for config values
    • Documentation in CONFIG.md

Fixed

  • MCP Server: Smart routing for lifecycle status changes in update tool (GH #123)
    • update(status="closed") now routes to close() tool to respect approval workflows
    • update(status="open") now routes to reopen() tool to respect approval workflows
    • Prevents bypass of Claude Code approval settings for lifecycle events
    • bd CLI remains unopinionated; routing happens only in MCP layer
    • Users can now safely auto-approve benign updates (priority, notes) without exposing closure bypass

[0.14.0] - 2025-10-22

Added

  • Lifecycle Safety Documentation: Complete documentation for UnderlyingDB() usage (bd-64)
    • Added tracking guidelines for database lifecycle safety
    • Documented transaction management best practices
    • Prevents UAF (use-after-free) bugs in extensions

Fixed

  • Critical: Git worktree detection and warnings (bd-73)
    • Added automatic detection when running in git worktrees
    • Displays prominent warning if daemon mode is active in worktree
    • Prevents daemon from committing/pushing to wrong branch
    • Documents --no-daemon flag as solution for worktree users
  • Critical: Multiple daemon race condition (bd-54)
    • Implemented file locking (daemon.lock) to prevent multiple daemons per repository
    • Uses flock on Unix, LockFileEx on Windows for process-level exclusivity
    • Lock held for daemon lifetime, automatically released on exit
    • Eliminates race conditions in concurrent daemon start attempts
    • Backward compatible: Falls back to PID check for pre-lock daemons during upgrades
  • Bug: daemon.lock tracked in git
    • Removed daemon.lock from git tracking
    • Added to .gitignore to prevent future commits
  • Bug: Regression in Nix Flake (#110)
    • Fixed flake build issues
    • Restored working Nix development environment

Changed

  • UnderlyingDB() deprecated for most use cases
    • New UnderlyingConn(ctx) provides safer scoped access
    • Reduced risk of UAF bugs in database extensions
    • Updated EXTENDING.md with migration guide

Documentation

  • Complete release process documentation in RELEASING.md
  • Enhanced EXTENDING.md with lifecycle safety patterns
  • Added UnderlyingDB() tracking guidelines

[0.11.0] - 2025-10-22

Added

  • Issue Merging: New bd merge command for consolidating duplicate issues (bd-7, bd-11-17)
    • Merge multiple source issues into a single target issue
    • Automatically migrates all dependencies and dependents to target
    • Updates text references (bd-X mentions) across all issue fields
    • Closes source issues with "Merged into bd-Y" reason
    • Supports --dry-run for validation without changes
    • Example: bd merge bd-42 bd-43 --into bd-41
  • Multi-ID Operations: Batch operations for increased efficiency (bd-195, #101)
    • bd update: Update multiple issues at once
    • bd show: View multiple issues in single call
    • bd label add/remove: Apply labels to multiple issues
    • bd close: Close multiple issues with one command
    • bd reopen: Reopen multiple issues together
    • Example: bd close bd-1 bd-2 bd-3 --reason "Done"
  • Daemon RPC Improvements: Enhanced sync operations (bd-2)
    • bd sync now works correctly in daemon mode
    • Export operations properly supported via RPC
    • Prevents database access conflicts during sync
  • Acceptance Criteria Alias: Added --acceptance-criteria flag (bd-228, #102)
    • Backward-compatible alias for --acceptance in bd update
    • Improves clarity and matches field name

Fixed

  • Critical: Test isolation and database pollution (bd-1, bd-15, bd-19, bd-52)
    • Comprehensive test isolation ensuring tests never pollute production database
    • Fixed stress test issues writing 1000+ test issues to production
    • Quarantined RPC benchmarks to prevent pollution
    • Added database isolation canary tests
  • Critical: Daemon cache staleness (bd-49)
    • Daemon now detects external database modifications via mtime check
    • Prevents serving stale data after external bd import, rm bd.db, etc.
    • Cache automatically invalidates when DB file changes
  • Critical: Counter desync after deletions (bd-49)
    • Issue counters now sync correctly after bulk deletions
    • Prevents ID gaps and counter drift
  • Critical: Labels and dependencies not persisted in daemon mode (#101)
    • Fixed label operations failing silently in daemon mode
    • Fixed dependency operations not saving in daemon mode
    • Both now correctly propagate through RPC layer
  • Daemon sync support: bd sync command now works in daemon mode (bd-2)
    • Previously crashed with nil pointer when daemon running
    • Export operations now properly routed through RPC
  • Acceptance flag normalization: Unified --acceptance flag behavior (bd-228, #102)
    • Added --acceptance-criteria as clearer alias
    • Both flags work identically for backward compatibility
  • Auto-import Git conflicts: Better detection of merge conflicts (bd-270)
    • Auto-import detects and warns about unresolved Git merge conflicts
    • Prevents importing corrupted JSONL with conflict markers
    • Clear instructions for resolving conflicts

Changed

  • BREAKING: Removed global daemon socket fallback (bd-231)
    • Each project now must use its own local daemon (.beads/bd.sock)
    • Prevents cross-project daemon connections and database pollution
    • Migration: Stop any global daemon and restart with bd daemon in each project
    • Warning displayed if old global socket (~/.beads/bd.sock) is found
  • Database cleanup: Project database cleaned from 1000+ to 55 issues
    • Removed accumulated test pollution from stress testing
    • Renumbered issues for clean ID space (bd-1 through bd-55)
    • Better test isolation prevents future pollution

Deprecated

  • Global daemon socket support (see BREAKING change above)

[0.10.0] - 2025-10-20

Added

  • Agent Onboarding: New bd onboard command for agent-first documentation (bd-173)
    • Outputs structured instructions for agents to integrate bd into documentation
    • Bootstrap workflow: Add 'BEFORE ANYTHING ELSE: run bd onboard' to AGENTS.md
    • Agent adapts instructions to existing project structure
    • More agentic approach vs. direct string replacement
    • Updates README with new bootstrap workflow

[0.9.11] - 2025-10-20

Added

  • Labels Documentation: Comprehensive LABELS.md guide (bd-159, bd-163)
    • Complete label system documentation with workflows and best practices
    • Common label patterns (components, domains, size, quality gates, releases)
    • Advanced filtering techniques and integration examples
    • Added Labels section to README with quick reference

Fixed

  • Critical: MCP server crashes on None/null responses (bd-172, fixes #79)
    • Added null safety checks in list_issues(), ready(), and stats() methods
    • Returns empty arrays/dicts instead of crashing on None responses
    • Prevents TypeError when daemon returns empty results

[0.9.10] - 2025-10-18

Added

  • Label Filtering: Enhanced bd list command with label-based filtering (bd-161)
    • --label (or -l): Filter by multiple labels with AND semantics (must have ALL)
    • --label-any: Filter by multiple labels with OR semantics (must have AT LEAST ONE)
    • Examples:
      • bd list --label backend,urgent: Issues with both 'backend' AND 'urgent'
      • bd list --label-any frontend,backend: Issues with either 'frontend' OR 'backend'
    • Works in both daemon and direct modes
    • Includes comprehensive test coverage
  • Log Rotation: Automatic daemon log rotation with configurable limits (bd-154)
    • Prevents unbounded log file growth for long-running daemons
    • Configurable via environment variables: BEADS_DAEMON_LOG_MAX_SIZE, BEADS_DAEMON_LOG_MAX_BACKUPS, BEADS_DAEMON_LOG_MAX_AGE
    • Optional compression of rotated logs
    • Defaults: 10MB max size, 3 backups, 7 day retention, compression enabled
  • Batch Deletion: Enhanced bd delete command with batch operations (bd-127)
    • Delete multiple issues at once: bd delete bd-1 bd-2 bd-3 --force
    • Read from file: bd delete --from-file deletions.txt --force
    • Dry-run mode: --dry-run to preview deletions before execution
    • Cascade mode: --cascade to recursively delete all dependents
    • Force mode: --force to orphan dependents instead of failing
    • Atomic transactions: all deletions succeed or none do
    • Comprehensive statistics: tracks deleted issues, dependencies, labels, and events

Fixed

  • Critical: bd list --status all showing 0 issues (bd-148)
    • Status filter now treats "all" as special value meaning "show all statuses"
    • Previously treated "all" as literal status value, matching no issues

[0.9.9] - 2025-10-17

Added

  • Daemon RPC Architecture: Production-ready RPC protocol for client-daemon communication (bd-110, bd-111, bd-112, bd-114, bd-117)
    • Unix socket-based RPC enables faster command execution via long-lived daemon process
    • Automatic client detection with graceful fallback to direct mode
    • Serializes SQLite writes and batches git operations to prevent concurrent access issues
    • Resolves database corruption, git lock contention, and ID counter conflicts with multiple agents
    • Comprehensive integration tests and stress testing with 4+ concurrent agents
  • Issue Deletion: bd delete command for removing issues with comprehensive cleanup
    • Safely removes issues from database and JSONL export
    • Cleans up dependencies and references to deleted issues
    • Works correctly with git-based workflows
  • Issue Restoration: bd restore command for recovering compacted/deleted issues
    • Restores issues from git history when needed
    • Preserves references and dependency relationships
  • Prefix Renaming: bd rename-prefix command for batch ID prefix changes
    • Updates all issue IDs and text references throughout the database
    • Useful for project rebranding or namespace changes
  • Comprehensive Testing: Added scripttest-based integration tests (#59)
    • End-to-end coverage for CLI workflows
    • Tests for init command edge cases (bd-70)

Fixed

  • Critical: Metadata errors causing crashes on first import (bd-663)
    • Auto-import now treats missing metadata as first import instead of failing
    • Eliminates initialization errors in fresh repositories
  • Critical: N+1 query pattern in auto-import (bd-666)
    • Replaced per-issue queries with batch fetching
    • Dramatically improves performance for large imports
  • Critical: Duplicate issue imports (bd-421)
    • Added deduplication logic to prevent importing same issue multiple times
    • Maintains data integrity during repeated imports
  • Bug: Auto-flush missing after renumber/rename-prefix (bd-346)
    • Commands now properly export to JSONL after completion
    • Ensures git sees latest changes immediately
  • Bug: Renumber ID collision with UUID temp IDs (bd-345)
    • Uses proper UUID-based temporary IDs to prevent conflicts during renumbering
    • ID counter now correctly syncs after renumbering operations
  • Bug: Collision resolution dependency handling (bd-437)
    • Uses unchecked dependency addition during collision remapping
    • Prevents spurious cycle detection errors
  • Bug: macOS crashes documented (closes #3, bd-87)
    • Added CGO_ENABLED=1 workaround documentation for macOS builds

Changed

  • CLI commands now prefer RPC when daemon is running
    • Improved error reporting and diagnostics for RPC failures
    • More consistent exit codes and status messages
  • Internal command architecture refactored for RPC client/server sharing
    • Reduced code duplication between direct and daemon modes
    • Improved reliability of background operations
  • Ready work sort order flipped to show oldest issues first
    • Helps prioritize long-standing work items

Performance

  • Faster command execution through RPC-backed daemon (up to 10x improvement)
  • N+1 query elimination in list/show operations
  • Reduced write amplification from improved auto-flush behavior
  • Cycle detection performance benchmarks added (bd-311)

Testing

  • Integration tests for daemon RPC request/response flows
  • End-to-end coverage for delete/restore lifecycles
  • Regression tests for metadata handling, auto-flush, ID counter sync
  • Comprehensive tests for collision detection in auto-import (bd-401)

Documentation

  • Release process documentation added (RELEASING.md)
  • Multiple workstreams warning banner for development coordination

[0.9.8] - 2025-10-16

Added

  • Background Daemon Mode: bd daemon command for continuous auto-sync (#bd-386)
    • Watches for changes and automatically exports to JSONL
    • Monitors git repository for incoming changes and auto-imports
    • Production-ready with graceful shutdown, PID file management, and signal handling
    • Eliminates manual export/import in active development workflows
  • Git Synchronization: bd sync command for automated git workflows (#bd-378)
    • One-command sync: stage, commit, pull, push JSONL changes
    • Automatic merge conflict resolution with collision remapping
    • Status reporting shows sync progress and any issues
    • Ideal for distributed teams and CI/CD integration
  • Issue Compaction: bd compact command to summarize old closed issues (bd-254-264)
    • AI-powered summarization using Claude Haiku
    • Reduces database size while preserving essential information
    • Configurable thresholds for age, dependencies, and references
    • Compaction status visible in bd show output
  • Label and Title Filtering: Enhanced bd list command (#45, bd-269)
    • Filter by labels: bd list --label bug,critical
    • Filter by title: bd list --title "auth"
    • Combine with status/priority filters
  • List Output Formats: bd list --format flag for custom output (PR #46)
    • Format options: default, compact, detailed, json
    • Better integration with scripts and automation tools
  • MCP Reopen Support: Reopen closed issues via MCP server
    • Claude Desktop plugin can now reopen issues
    • Useful for revisiting completed work
  • Cross-Type Cycle Prevention: Dependency cycles detected across all types (bd-312)
    • Prevents A→B→A cycles even when mixing blocks, related, etc.
    • Semantic validation for parent-child direction
    • Diagnostic warnings when cycles detected

Fixed

  • Critical: Auto-import collision skipping bug (bd-393, bd-228)
    • Import would silently skip collisions instead of remapping
    • Could cause data loss when merging branches
    • Now correctly applies collision resolution with remapping
  • Critical: Transaction state corruption (bd-221)
    • Nested transactions could corrupt database state
    • Fixed with proper transaction boundary handling
  • Critical: Concurrent temp file collisions (bd-306, bd-373)
    • Multiple bd processes would collide on shared .tmp filename
    • Now uses PID suffix for temp files: .beads/issues.jsonl.tmp.12345
  • Critical: Circular dependency detection gaps (bd-307)
    • Some cycle patterns were missed by detection algorithm
    • Enhanced with comprehensive cycle prevention
  • Bug: False positive merge conflict detection (bd-313, bd-270)
    • Auto-import would detect conflicts when none existed
    • Fixed with improved Git conflict marker detection
  • Bug: Import timeout with large issue sets (bd-199)
    • 200+ issue imports would timeout
    • Optimized import performance
  • Bug: Collision resolver missing ID counter sync (bd-331)
    • After remapping, ID counters weren't updated
    • Could cause duplicate IDs in subsequent creates
  • Bug: NULL handling in statistics for empty databases (PR #37)
    • bd stats would crash on newly initialized databases
    • Fixed NULL value handling in GetStatistics

Changed

  • Compaction removes snapshot/restore (simplified to permanent decay)
  • Export file writing refactored to avoid Windows Defender false positives (PR #31)
  • Error handling improved in auto-import and fallback paths (PR #47)
  • Reduced cyclomatic complexity in main.go (PR #48)
  • MCP integration tests fixed and linting cleaned up (PR #40)

Performance

  • Cycle detection benchmarks added (bd-311)
  • Import optimization for large issue sets
  • Export uses PID-based temp files to avoid lock contention

Community

  • Merged PR #31: Windows Defender mitigation for export
  • Merged PR #37: Fix NULL handling in statistics
  • Merged PR #38: Nix flake for declarative builds
  • Merged PR #40: MCP integration test fixes
  • Merged PR #45: Label and title filtering for bd list
  • Merged PR #46: Add --format flag to bd list
  • Merged PR #47: Error handling consistency
  • Merged PR #48: Cyclomatic complexity reduction

[0.9.2] - 2025-10-14

Added

  • One-Command Dependency Creation: --deps flag for bd create (#18)
    • Create issues with dependencies in a single command
    • Format: --deps type:id or just --deps id (defaults to blocks)
    • Multiple dependencies: --deps discovered-from:bd-20,blocks:bd-15
    • Whitespace-tolerant parsing
    • Particularly useful for AI agents creating discovered-from issues
  • External Reference Tracking: external_ref field for linking to external trackers
    • Link bd issues to GitHub, Jira, Linear, etc.
    • Example: bd create "Issue" --external-ref gh-42
    • bd update supports updating external references
    • Tracked in JSONL for git portability
  • Metadata Storage: Internal metadata table for system state
    • Stores import hash for idempotent auto-import
    • Enables future extensibility for system preferences
    • Auto-migrates existing databases
  • Windows Support: Complete Windows 11 build instructions (#10)
    • Tested with mingw-w64
    • Full CGo support documented
    • PATH setup instructions
  • Go Extension Example: Complete working example of database extensions (#15)
    • Demonstrates custom table creation
    • Shows cross-layer queries joining with issues
    • Includes test suite and documentation
  • Issue Type Display: bd list now shows issue type in output (#17)
    • Better visibility: bd-1 [P1] [bug] open
    • Helps distinguish bugs from features at a glance

Fixed

  • Critical: Dependency tree deduplication for diamond dependencies (bd-85, #1)
    • Fixed infinite recursion in complex dependency graphs
    • Prevents duplicate nodes at same level
    • Handles multiple blockers correctly
  • Critical: Hash-based auto-import replaces mtime comparison (bd-84)
    • Git pull updates mtime but may not change content
    • Now uses SHA256 hash to detect actual changes
    • Prevents unnecessary imports after git operations
  • Critical: Parallel issue creation race condition (PR #8, bd-66)
    • Multiple processes could generate same ID
    • Replaced in-memory counter with atomic database counter
    • Syncs counters after import to prevent collisions
    • Comprehensive test coverage

Changed

  • Auto-import now uses content hash instead of modification time
  • Dependency tree visualization improved for complex graphs
  • Better error messages for dependency operations

Community

  • Merged PR #8: Parallel issue creation fix
  • Merged PR #10: Windows build instructions
  • Merged PR #12: Fix quickstart EXTENDING.md link
  • Merged PR #14: Better enable Go extensions
  • Merged PR #15: Complete Go extension example
  • Merged PR #17: Show issue type in list output

[0.9.1] - 2025-10-14

Added

  • Incremental JSONL Export: Major performance optimization
    • Dirty issue tracking system to only export changed issues
    • Auto-flush with 5-second debounce after CRUD operations
    • Automatic import when JSONL is newer than database
    • --no-auto-flush and --no-auto-import flags for manual control
    • Comprehensive test coverage for auto-flush/import
  • ID Space Partitioning: Explicit ID assignment for parallel workers
    • bd create --id worker1-100 for controlling ID allocation
    • Enables multiple agents to work without conflicts
    • Documented in CLAUDE.md for agent workflows
  • Auto-Migration System: Seamless database schema upgrades
    • Automatically adds dirty_issues table to existing databases
    • Silent migration on first access after upgrade
    • No manual intervention required

Fixed

  • Critical: Race condition in dirty tracking (TOCTOU bug)
    • Could cause data loss during concurrent operations
    • Fixed by tracking specific exported IDs instead of clearing all
  • Critical: Export with filters cleared all dirty issues
    • Status/priority filters would incorrectly mark non-matching issues as clean
    • Now only clears issues that were actually exported
  • Bug: Malformed ID detection never worked
    • SQLite CAST returns 0 for invalid strings, not NULL
    • Now correctly detects non-numeric ID suffixes like "bd-abc"
    • No false positives on legitimate zero-prefixed IDs
  • Bug: Inconsistent dependency dirty marking
    • Duplicated 20+ lines of code in AddDependency/RemoveDependency
    • Refactored to use shared markIssuesDirtyTx() helper
  • Fixed unchecked error in import.go when unmarshaling JSON
  • Fixed unchecked error returns in test cleanup code
  • Removed duplicate test code in dependencies_test.go
  • Fixed Go version in go.mod (was incorrectly set to 1.25.2)

Changed

  • Export now tracks which specific issues were exported
  • ClearDirtyIssuesByID() added (ClearDirtyIssues() deprecated with race warning)
  • Dependency operations use shared dirty-marking helper (DRY)

Performance

  • Incremental export: Only writes changed issues (vs full export)
  • Regex caching in ID replacement: 1.9x performance improvement
  • Automatic debounced flush prevents excessive I/O

[0.9.0] - 2025-10-12

Added

  • Collision Resolution System: Automatic ID remapping for import collisions
    • Reference scoring algorithm to minimize updates during remapping
    • Word-boundary regex matching to prevent false replacements
    • Automatic updating of text references and dependencies
    • --resolve-collisions flag for safe branch merging
    • --dry-run flag to preview collision detection
  • Export/Import with JSONL: Git-friendly text format
    • Dependencies embedded in JSONL for complete portability
    • Idempotent import (exact matches detected)
    • Collision detection (same ID, different content)
  • Ready Work Algorithm: Find issues with no open blockers
    • bd ready command shows unblocked work
    • bd blocked command shows what's waiting
  • Dependency Management: Four dependency types
    • blocks: Hard blocker (affects ready work)
    • related: Soft relationship
    • parent-child: Epic/subtask hierarchy
    • discovered-from: Track issues discovered during work
  • Database Discovery: Auto-find database in project hierarchy
    • Walks up directory tree like git
    • Supports $BEADS_DB environment variable
    • Falls back to ~/.beads/default.db
  • Comprehensive Documentation:
    • README.md with 900+ lines of examples and FAQs
    • CLAUDE.md for AI agent integration patterns
    • SECURITY.md with security policy and best practices
    • TEXT_FORMATS.md analyzing JSONL approach
    • EXTENDING.md for database extension patterns
    • GIT_WORKFLOW.md for git integration
  • Examples: Real-world integration patterns
    • Python agent implementation
    • Bash agent script
    • Git hooks for automatic export/import
    • Branch merge workflow with collision resolution
    • Claude Desktop MCP integration (coming soon)

Changed

  • Switched to JSONL as source of truth (from binary SQLite)
  • SQLite database now acts as ephemeral cache
  • Issue IDs generated with numerical max (not alphabetical)
  • Export sorts issues by ID for consistent git diffs

Security

  • SQL injection protection via allowlisted field names
  • Input validation for all issue fields
  • File path validation for database operations
  • Warnings about not storing secrets in issues

[0.1.0] - Initial Development

Added

  • Core issue tracking (create, update, list, show, close)
  • SQLite storage backend
  • Dependency tracking with cycle detection
  • Label support
  • Event audit trail
  • Full-text search
  • Statistics and reporting
  • bd init for project initialization
  • bd quickstart interactive tutorial

Version History

  • 0.9.8 (2025-10-16): Daemon mode, git sync, compaction, critical bug fixes
  • 0.9.2 (2025-10-14): Community PRs, critical bug fixes, and --deps flag
  • 0.9.1 (2025-10-14): Performance optimization and critical bug fixes
  • 0.9.0 (2025-10-12): Pre-release polish and collision resolution
  • 0.1.0: Initial development version

Upgrade Guide

Upgrading to 0.9.8

No breaking changes. All changes are backward compatible:

  • bd daemon: New optional background service for auto-sync workflows
  • bd sync: New optional git integration command
  • bd compact: New optional command for issue summarization (requires Anthropic API key)
  • --format flag: Optional new feature for bd list
  • Label/title filters: Optional new filters for bd list
  • Bug fixes: All critical fixes are transparent to users

Simply pull the latest version and rebuild:

go install github.com/steveyegge/beads/cmd/bd@latest
# or
git pull && go build -o bd ./cmd/bd

Note: The bd compact command requires an Anthropic API key in $ANTHROPIC_API_KEY environment variable. All other features work without any additional setup.

Upgrading to 0.9.2

No breaking changes. All changes are backward compatible:

  • --deps flag: Optional new feature for bd create
  • external_ref: Optional field, existing issues unaffected
  • Metadata table: Auto-migrates on first use
  • Bug fixes: All critical fixes are transparent to users

Simply pull the latest version and rebuild:

go install github.com/steveyegge/beads/cmd/bd@latest
# or
git pull && go build -o bd ./cmd/bd

Upgrading to 0.9.1

No breaking changes. All changes are backward compatible:

  • Auto-migration: The dirty_issues table is automatically added to existing databases
  • Auto-flush/import: Enabled by default, improves workflow (can disable with flags if needed)
  • ID partitioning: Optional feature, use --id flag only if needed for parallel workers

If you're upgrading from 0.9.0, simply pull the latest version. Your existing database will be automatically migrated on first use.

Upgrading to 0.9.0

No breaking changes. The JSONL export format is backward compatible.

If you have issues in your database:

  1. Run bd export -o .beads/issues.jsonl to create the text file
  2. Commit .beads/issues.jsonl to git
  3. Add .beads/*.db to .gitignore

New collaborators can clone the repo and run:

bd import -i .beads/issues.jsonl

The SQLite database will be automatically populated from the JSONL file.

Future Releases

See open issues tagged with milestone markers for planned features in upcoming releases.

For version 1.0, see: bd dep tree bd-8 (the 1.0 milestone epic)