243 lines
9.8 KiB
Markdown
243 lines
9.8 KiB
Markdown
# 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]
|
|
|
|
### Added
|
|
- **Nix Flake Support**: Declarative builds and installation via Nix
|
|
- Multi-platform support (x86_64/aarch64 for Linux and macOS)
|
|
- `nix build` to build the bd binary
|
|
- `nix run` support for running bd directly without installation
|
|
- Example flake input: `inputs.beads.url = "github:steveyegge/beads"`
|
|
- Example usage: `nix run github:steveyegge/beads -- ready --json`
|
|
|
|
## [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.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.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)
|