# Changelog 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). ## [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 ` 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](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: ```bash 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: ```bash 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: ```bash 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)