Thorough manual review of all 243 commits between v0.24.2 and v0.24.3:
- 10 major Added features with detailed sub-bullets
- 15 critical Fixed issues with technical context
- 4 Changed improvements to workflows
- 2 Testing enhancements
- 1 Performance optimization
Each entry includes:
- Commit hashes for traceability
- bd issue IDs where applicable
- User-focused descriptions
- Technical details and impact
- Follows Keep a Changelog format
This matches the quality and detail of previous changelog entries.
Properly documents all changes from v0.24.2 to v0.24.3:
- Version management and auto-migration features
- Data consistency and sync improvements
- Security enhancements
- Cross-platform bug fixes
- Web UI improvements
- Daemon and git hook enhancements
- Automatically moves [Unreleased] section to [version] - date
- Creates new empty [Unreleased] section at top
- Includes CHANGELOG.md in version bump commit
- Follows Keep a Changelog format properly
Currently 'bd daemon' with no args immediately starts the daemon. This is
inconsistent with other daemon management commands like --stop, --status,
etc. and makes the command less discoverable for new users.
Changes:
- Add --start flag to explicitly start daemon
- Show help text when no operation flags provided
- Update auto-start logic to use --start flag
- Update startDaemon() to pass --start when forking
- Update all documentation to use 'bd daemon --start'
- Update MCP Python client error messages
The MCP docs already incorrectly showed 'bd daemon start' which doesn't
work, so this change fixes that documentation bug while improving UX.
Auto-start still works correctly - it now passes --start internally.
Fixes bd-gfu
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
When importing JSONL after merges that include deletions, FK constraint
violations can occur if an issue references a deleted issue. Previously,
import would fail completely. Now it continues and reports skipped dependencies.
Changes:
- Add SkippedDependencies field to Result/ImportResult structs
- Update importDependencies() to detect FK violations using IsForeignKeyConstraintError()
- Log warnings for each skipped dependency with issue IDs and type
- Continue importing remaining dependencies instead of failing
- Display summary of all skipped dependencies at end of import
Example output:
Warning: Skipping dependency due to missing reference: bd-b → bd-a (blocks)
⚠️ Warning: Skipped 2 dependencies due to missing references:
- bd-b → bd-a (blocks)
- bd-c → bd-a (parent-child)
This can happen after merges that delete issues referenced by other issues.
The import continued successfully - you may want to review the skipped dependencies.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Summary
When metadata.json gets deleted (git clean, merge conflict, rebase), the
version tracking code auto-recreates it using DefaultConfig() which hardcoded
jsonl_export to 'issues.jsonl'. But many repos (including beads itself) use
'beads.jsonl', causing a mismatch between config and actual JSONL file.
## Changes
1. **bd doctor --fix auto-detection** (cmd/bd/doctor/fix/database_config.go)
- New DatabaseConfig() fix function that auto-detects actual JSONL file
- Prefers beads.jsonl over issues.jsonl (canonical name)
- Skips backup files and merge artifacts
- Wired into doctor.go applyFixes()
2. **Version tracking auto-detection** (cmd/bd/version_tracking.go)
- trackBdVersion() now scans for existing JSONL files before defaulting
- Prevents mismatches when metadata.json gets recreated
- Added findActualJSONLFile() helper function
3. **Canonical default name** (internal/configfile/configfile.go)
- DefaultConfig() changed from issues.jsonl to beads.jsonl
- Aligns with canonical naming convention
4. **FindJSONLPath preference** (internal/beads/beads.go)
- Now prefers beads.jsonl over issues.jsonl when scanning
- Default changed from issues.jsonl to beads.jsonl
5. **Test coverage**
- Added comprehensive tests for DatabaseConfig fix
- Updated configfile tests for new default
- Verified backup file skipping logic
## Testing
- All existing tests pass
- New tests verify auto-fix behavior
- Integration tested with simulated mismatches
Closes: bd-afd
Two Windows-specific test failures:
1. TestNewSQLiteStorage - File locking on temp cleanup
- Windows couldn't delete temp database file because connection was still open
- Added defer store.Close() to properly cleanup the database connection
- Without this, Windows file locking prevents TempDir cleanup
2. TestFindAllDatabases - Unexpected nil slice return
- FindAllDatabases could return nil instead of empty slice when os.Getwd() fails
- Changed from var databases to explicit empty slice initialization
- Ensures function always returns non-nil slice, matching test expectations
Both issues are more pronounced on Windows due to stricter file locking
and different filesystem behavior.
Co-Authored-By: Claude <noreply@anthropic.com>
- Add setupGitRepo(), setupGitRepoWithBranch(), and setupMinimalGitRepo() helpers
- Refactor 19 test functions to use shared git repo setup
- Reduces duplicate git initialization boilerplate by ~300 lines
- All tests pass with improved maintainability
Related to bd-ktng
Reverted 'always import' - that would overwrite local DB changes.
Now: only import first if DB has >50% more issues than JSONL (stale DB).
Preserves local uncommitted changes while catching sora scenario.