@beads/bd 0.21.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,865 @@
1
+ # Changelog
2
+
3
+ All notable changes to the beads project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.21.4] - 2025-11-02
11
+
12
+ ### Added
13
+
14
+ - **New Commands**:
15
+ - `bd status` - Database overview command showing issue counts and stats (bd-28db)
16
+ - `bd comment` - Convenient alias for `bd comments add` (bd-d3f0)
17
+ - `bd daemons restart` - Restart specific daemon without manual kill/start
18
+ - `--json` flag for `bd stale` command
19
+
20
+ - **Protected Branch Workflow**:
21
+ - `BEADS_DIR` environment variable for custom database location (bd-e16b)
22
+ - `sync.branch` configuration for protected branch workflows (bd-b7d2)
23
+ - Git worktree management with sparse checkout for sync branches (bd-a4b5)
24
+ - Only checks out `.beads/` in worktrees, minimal disk usage
25
+ - Only used when `sync.branch` is configured, not for default users
26
+ - Comprehensive protected branch documentation
27
+
28
+ - **Migration & Validation**:
29
+ - Migration inspection tools for AI agents (bd-627d)
30
+ - Conflict marker detection in `bd import` and `bd validate`
31
+ - Git hooks health check in `bd doctor`
32
+ - External reference (`external_ref`) UNIQUE constraint and validation
33
+ - `external_ref` now primary matching key for import updates (bd-1022)
34
+
35
+ ### Fixed
36
+
37
+ - **Critical Fixes**:
38
+ - Daemon corruption from git conflicts (bd-8931)
39
+ - MCP `set_context` hangs with stdio transport (GH #153)
40
+ - Double-release race condition in `importInProgress` flag
41
+ - Critical daemon race condition causing stale exports
42
+
43
+ - **Configuration & Migration**:
44
+ - `bd migrate` now detects and sets missing `issue_prefix` config
45
+ - Config system refactored (renamed `config.json` → `metadata.json`)
46
+ - Config version update in migrate command
47
+
48
+ - **Daemon & RPC**:
49
+ - `bd doctor --json` flag not working (bd-6049)
50
+ - `bd import` now flushes JSONL immediately for daemon visibility (bd-47f1)
51
+ - Panic recovery in RPC `handleConnection` (bd-1048)
52
+ - Daemon auto-upgrades database version instead of exiting
53
+
54
+ - **Windows Compatibility**:
55
+ - Windows test failures (path handling, bd binary references)
56
+ - Windows CI: forward slashes in git hook shell scripts
57
+ - TestMetricsSnapshot/uptime flakiness on Windows
58
+
59
+ - **Code Quality**:
60
+ - All golangci-lint errors fixed - linter now passes cleanly
61
+ - All gosec, misspell, and unparam linter warnings resolved
62
+ - Tightened file permissions and added security exclusions
63
+
64
+ ### Changed
65
+
66
+ - Daemon automatically upgrades database schema version instead of exiting
67
+ - Git worktree management for sync branches uses sparse checkout (`.beads/` only)
68
+ - Improved test isolation and performance optimization
69
+
70
+ ## [0.21.2] - 2025-11-01
71
+
72
+ ### Changed
73
+ - Homebrew formula now auto-published in main repo via GoReleaser
74
+ - Deprecated separate homebrew-beads tap repository
75
+
76
+ ## [0.21.1] - 2025-10-31
77
+
78
+ ### Changed
79
+ - Version bump for consistency across CLI, MCP server, and plugin
80
+
81
+ ## [0.20.1] - 2025-10-31
82
+
83
+ ### Breaking Changes
84
+
85
+ - **Hash-Based IDs Now Default**: Sequential IDs (bd-1, bd-2) replaced with hash-based IDs (bd-a1b2, bd-f14c)
86
+ - 4-character hashes for 0-500 issues
87
+ - 5-character hashes for 500-1,500 issues
88
+ - 6-character hashes for 1,500-10,000 issues
89
+ - Progressive length extension prevents collisions with birthday paradox math
90
+ - **Migration required**: Run `bd migrate` to upgrade schema (removes `issue_counters` table)
91
+ - Existing databases continue working - migration is opt-in
92
+ - Dramatically reduces merge conflicts in multi-worker/multi-branch workflows
93
+ - Eliminates ID collision issues when multiple agents create issues concurrently
94
+
95
+ ### Removed
96
+
97
+ - **Sequential ID Generation**: Removed `SyncAllCounters()`, `AllocateNextID()`, and collision remapping logic (bd-c7af, bd-8e05, bd-4c74)
98
+ - Hash IDs handle collisions by extending hash length, not remapping
99
+ - `issue_counters` table removed from schema
100
+ - `--resolve-collisions` flag removed from import (no longer needed)
101
+ - 400+ lines of obsolete collision handling code removed
102
+
103
+ ### Changed
104
+
105
+ - **Collision Handling**: Automatic hash extension on collision instead of ID remapping
106
+ - Much simpler and more reliable than sequential remapping
107
+ - No cross-branch coordination needed
108
+ - Birthday paradox ensures extremely low collision rates
109
+
110
+ ### Migration Notes
111
+
112
+ **For users upgrading from 0.20.0 or earlier:**
113
+
114
+ 1. Run `bd migrate` to detect and upgrade old database schemas
115
+ 2. Database continues to work without migration, but you'll see warnings
116
+ 3. Hash IDs provide better multi-worker reliability at the cost of non-numeric IDs
117
+ 4. Old sequential IDs like `bd-152` become hash IDs like `bd-f14c`
118
+
119
+ See README.md for hash ID format details and birthday paradox collision analysis.
120
+
121
+ ## [0.20.0] - 2025-10-30
122
+
123
+ ### Added
124
+ - **Hash-Based IDs**: New collision-resistant ID system (bd-168, bd-166, bd-167)
125
+ - 6-character hash IDs with progressive 7/8-char fallback on collision
126
+ - Opt-in via `.beads/config.toml` with `id_mode = "hash"`
127
+ - Migration tool: `bd migrate --to-hash-ids` for existing databases
128
+ - Prefix-optional ID parsing (e.g., `bd-abc123` or just `abc123`)
129
+ - Hierarchical child ID generation for discovered-from relationships
130
+ - **Substring ID Matching**: All bd commands now support partial ID matching (bd-170)
131
+ - `bd show abc` matches any ID containing "abc" (e.g., `bd-abc123`)
132
+ - Ambiguous matches show helpful error with all candidates
133
+ - **Daemon Registry**: Multi-daemon management for multiple workspaces (bd-07b8c8)
134
+ - `bd daemons list` shows all running daemons across workspaces
135
+ - `bd daemons health` detects version mismatches and stale sockets
136
+ - `bd daemons logs <workspace>` for per-daemon log viewing
137
+ - `bd daemons killall` to restart all daemons after upgrades
138
+
139
+ ### Fixed
140
+ - **Test Stability**: Deprecated sequence-ID collision tests
141
+ - Kept `TestFiveCloneCollision` for hash-ID multi-clone testing
142
+ - Fixed `TestTwoCloneCollision` to use merge instead of rebase
143
+ - **Linting**: golangci-lint v2.5.0 compatibility
144
+ - Added `version: 2` field to `.golangci.yml`
145
+ - Renamed `exclude` to `exclude-patterns` for v3 format
146
+
147
+ ### Changed
148
+ - **Multiple bd Detection**: Warning when multiple bd binaries in PATH (PR #182)
149
+ - Prevents confusion from version conflicts
150
+ - Shows locations of all bd binaries found
151
+
152
+ ## [0.17.7] - 2025-10-26
153
+
154
+ ### Fixed
155
+ - **Test Isolation**: Export test failures due to hash caching between subtests
156
+ - Added `ClearAllExportHashes()` method to SQLiteStorage for test isolation
157
+ - Export tests now properly reset state between subtests
158
+ - Fixes intermittent test failures when running full test suite
159
+
160
+ ## [0.17.2] - 2025-10-25
161
+
162
+ ### Added
163
+ - **Configurable Sort Policy**: `bd ready --sort` flag for work queue ordering (bd-147)
164
+ - `hybrid` (default): Priority-weighted by staleness
165
+ - `priority`: Strict priority ordering for autonomous systems
166
+ - `oldest`: Pure FIFO for long-tail work
167
+ - **Release Automation**: New scripts for streamlined releases
168
+ - `scripts/release.sh`: Full automated release (version bump, tests, tag, Homebrew, install)
169
+ - `scripts/update-homebrew.sh`: Automated Homebrew formula updates
170
+
171
+ ### Fixed
172
+ - **Critical**: Database reinitialization test re-landed with CI fixes (bd-130)
173
+ - Windows: Fixed git path handling (forward slash normalization)
174
+ - Nix: Skip test when git unavailable
175
+ - JSON: Increased scanner buffer to 64MB for large issues
176
+ - **Bug**: Stale daemon socket detection (bd-137)
177
+ - MCP server now health-checks cached connections before use
178
+ - Auto-reconnect with exponential backoff on stale sockets
179
+ - Handles daemon restarts/upgrades gracefully
180
+ - **Linting**: Fixed all errcheck warnings in production code (bd-58)
181
+ - Proper error handling for database resources and transactions
182
+ - Graceful EOF handling in interactive input
183
+ - **Linting**: Fixed revive style issues (bd-56)
184
+ - Removed unused parameters, renamed builtin shadowing
185
+ - **Linting**: Fixed goconst warnings (bd-116)
186
+
187
+ ## [0.17.0] - 2025-10-24
188
+
189
+ ### Added
190
+ - **Git Hooks**: Automatic installation prompt during `bd init` (bd-51)
191
+ - Eliminates race condition between auto-flush and git commits
192
+ - Pre-commit hook: Flushes pending changes immediately before commit
193
+ - Post-merge hook: Imports updated JSONL after pull/merge
194
+ - Optional installation with Y/n prompt (defaults to yes)
195
+ - See [examples/git-hooks/README.md](examples/git-hooks/README.md) for details
196
+ - **Duplicate Detection**: New `bd duplicates` command for finding and merging duplicate issues (bd-119, bd-203)
197
+ - Automated duplicate detection with content-based matching
198
+ - `--auto-merge` flag for batch merging duplicates
199
+ - `--dry-run` mode to preview merges before execution
200
+ - Helps maintain database cleanliness after imports
201
+ - **External Reference Import**: Smart import matching using `external_ref` field (bd-66-74, GH #142)
202
+ - Issues with `external_ref` match by reference first, not content
203
+ - Enables hybrid workflows with Jira, GitHub, Linear
204
+ - Updates existing issues instead of creating duplicates
205
+ - Database index on `external_ref` for fast lookups
206
+ - **Multi-Database Warning**: Detect and warn about nested beads databases (bd-75)
207
+ - Prevents accidental creation of multiple databases in hierarchy
208
+ - Helps users avoid confusion about which database is active
209
+
210
+ ### Fixed
211
+ - **Critical**: Database reinitialization data loss bug (bd-130, DATABASE_REINIT_BUG.md)
212
+ - Fixed bug where removing `.beads/` and running `bd init` would lose git-tracked issues
213
+ - Now correctly imports from JSONL during initialization
214
+ - Added comprehensive tests (later reverted due to CI issues on Windows/Nix)
215
+ - **Critical**: Foreign key constraint regression (bd-62, GH #144)
216
+ - Pinned modernc.org/sqlite to v1.38.2 to avoid FK violations
217
+ - Prevents database corruption from upstream regression
218
+ - **Critical**: Install script safety (GH #143 by @marcodelpin)
219
+ - Prevents shell corruption from directory deletion during install
220
+ - Restored proper error codes for safer installation
221
+ - **Bug**: Daemon auto-start reliability (bd-137)
222
+ - Daemon now responsive immediately, runs initial sync in background
223
+ - Fixes timeout issues when git pull is slow
224
+ - Skip daemon-running check for forked child process
225
+ - **Bug**: Dependency timestamp churn during auto-import (bd-45, bd-137)
226
+ - Auto-import no longer updates timestamps on unchanged dependencies
227
+ - Eliminates perpetually dirty JSONL from metadata changes
228
+ - **Bug**: Import reporting accuracy (bd-49, bd-88)
229
+ - `bd import` now correctly reports "X updated, Y unchanged" instead of "0 updated"
230
+ - Better visibility into import operation results
231
+ - **Bug**: Memory database handling
232
+ - Fixed :memory: database connection with shared cache mode
233
+ - Proper URL construction for in-memory testing
234
+
235
+ ### Changed
236
+ - **Removed**: Deprecated `bd repos` command
237
+ - Global daemon architecture removed in favor of per-project daemons
238
+ - Eliminated cross-project database confusion
239
+ - **Documentation**: Major reorganization and improvements
240
+ - Condensed README, created specialized docs (QUICKSTART.md, ADVANCED.md, etc.)
241
+ - Enhanced "Why not GitHub Issues?" FAQ section
242
+ - Added Beadster to Community & Ecosystem section
243
+
244
+ ### Performance
245
+ - Test coverage improvements: 46.0% → 57.7% (+11.7%)
246
+ - Added tests for RPC, storage, cmd/bd helpers
247
+ - New test files: coverage_test.go, helpers_test.go, epics_test.go
248
+
249
+ ### Community
250
+ - Community contribution by @marcodelpin (install script safety fixes)
251
+ - Dependabot integration for automated dependency updates
252
+
253
+ ## [0.16.0] - 2025-10-23
254
+
255
+ ### Added
256
+ - **Automated Releases**: GoReleaser workflow for cross-platform binaries (bd-46)
257
+ - Automatic GitHub releases on version tags
258
+ - Linux, macOS, Windows binaries for amd64 and arm64
259
+ - Checksums and changelog generation included
260
+ - **PyPI Automation**: Automated MCP server publishing to PyPI
261
+ - GitHub Actions workflow publishes beads-mcp on version tags
262
+ - Eliminates manual PyPI upload step
263
+ - **Sandbox Mode**: `--sandbox` flag for Claude Code integration (bd-35)
264
+ - Isolated environment for AI agent experimentation
265
+ - Prevents production database modifications during testing
266
+
267
+ ### Fixed
268
+ - **Critical**: Idempotent import timestamp churn (bd-84)
269
+ - Prevents timestamp updates when issue content unchanged
270
+ - Reduces JSONL churn and git noise from repeated imports
271
+ - **Bug**: Windows CI test failures (bd-60, bd-99)
272
+ - Fixed path separator issues and file handling on Windows
273
+ - Skipped flaky tests to stabilize CI
274
+
275
+ ### Changed
276
+ - **Configuration Migration**: Unified config management with Viper (bd-40-44, bd-78)
277
+ - Migrated from manual env var handling to Viper
278
+ - Bound all global flags to Viper for consistency
279
+ - Kept `bd config` independent from Viper for modularity
280
+ - Added comprehensive configuration tests
281
+ - **Documentation Refactor**: Improved documentation structure
282
+ - Condensed main README
283
+ - Created specialized guides (QUICKSTART.md, CONFIG.md, etc.)
284
+ - Enhanced FAQ and community sections
285
+
286
+ ### Testing
287
+ - Hardened `issueDataChanged` with type-safe comparisons
288
+ - Improved test isolation and reliability
289
+
290
+ ## [0.15.0] - 2025-10-23
291
+
292
+ ### Added
293
+ - **Configuration System**: New `bd config` command for managing configuration (GH #115)
294
+ - Environment variable definitions with validation
295
+ - Configuration file support (TOML/YAML/JSON)
296
+ - Get/set/list/unset commands for user-friendly management
297
+ - Validation and type checking for config values
298
+ - Documentation in CONFIG.md
299
+
300
+ ### Fixed
301
+ - **MCP Server**: Smart routing for lifecycle status changes in `update` tool (GH #123)
302
+ - `update(status="closed")` now routes to `close()` tool to respect approval workflows
303
+ - `update(status="open")` now routes to `reopen()` tool to respect approval workflows
304
+ - Prevents bypass of Claude Code approval settings for lifecycle events
305
+ - bd CLI remains unopinionated; routing happens only in MCP layer
306
+ - Users can now safely auto-approve benign updates (priority, notes) without exposing closure bypass
307
+
308
+ ## [0.14.0] - 2025-10-22
309
+
310
+ ### Added
311
+ - **Lifecycle Safety Documentation**: Complete documentation for UnderlyingDB() usage (bd-64)
312
+ - Added tracking guidelines for database lifecycle safety
313
+ - Documented transaction management best practices
314
+ - Prevents UAF (use-after-free) bugs in extensions
315
+
316
+ ### Fixed
317
+ - **Critical**: Git worktree detection and warnings (bd-73)
318
+ - Added automatic detection when running in git worktrees
319
+ - Displays prominent warning if daemon mode is active in worktree
320
+ - Prevents daemon from committing/pushing to wrong branch
321
+ - Documents `--no-daemon` flag as solution for worktree users
322
+ - **Critical**: Multiple daemon race condition (bd-54)
323
+ - Implemented file locking (`daemon.lock`) to prevent multiple daemons per repository
324
+ - Uses `flock` on Unix, `LockFileEx` on Windows for process-level exclusivity
325
+ - Lock held for daemon lifetime, automatically released on exit
326
+ - Eliminates race conditions in concurrent daemon start attempts
327
+ - Backward compatible: Falls back to PID check for pre-lock daemons during upgrades
328
+ - **Bug**: daemon.lock tracked in git
329
+ - Removed daemon.lock from git tracking
330
+ - Added to .gitignore to prevent future commits
331
+ - **Bug**: Regression in Nix Flake (#110)
332
+ - Fixed flake build issues
333
+ - Restored working Nix development environment
334
+
335
+ ### Changed
336
+ - UnderlyingDB() deprecated for most use cases
337
+ - New UnderlyingConn(ctx) provides safer scoped access
338
+ - Reduced risk of UAF bugs in database extensions
339
+ - Updated EXTENDING.md with migration guide
340
+
341
+ ### Documentation
342
+ - Complete release process documentation in RELEASING.md
343
+ - Enhanced EXTENDING.md with lifecycle safety patterns
344
+ - Added UnderlyingDB() tracking guidelines
345
+
346
+ ## [0.11.0] - 2025-10-22
347
+
348
+ ### Added
349
+ - **Issue Merging**: New `bd merge` command for consolidating duplicate issues (bd-7, bd-11-17)
350
+ - Merge multiple source issues into a single target issue
351
+ - Automatically migrates all dependencies and dependents to target
352
+ - Updates text references (bd-X mentions) across all issue fields
353
+ - Closes source issues with "Merged into bd-Y" reason
354
+ - Supports `--dry-run` for validation without changes
355
+ - Example: `bd merge bd-42 bd-43 --into bd-41`
356
+ - **Multi-ID Operations**: Batch operations for increased efficiency (bd-195, #101)
357
+ - `bd update`: Update multiple issues at once
358
+ - `bd show`: View multiple issues in single call
359
+ - `bd label add/remove`: Apply labels to multiple issues
360
+ - `bd close`: Close multiple issues with one command
361
+ - `bd reopen`: Reopen multiple issues together
362
+ - Example: `bd close bd-1 bd-2 bd-3 --reason "Done"`
363
+ - **Daemon RPC Improvements**: Enhanced sync operations (bd-2)
364
+ - `bd sync` now works correctly in daemon mode
365
+ - Export operations properly supported via RPC
366
+ - Prevents database access conflicts during sync
367
+ - **Acceptance Criteria Alias**: Added `--acceptance-criteria` flag (bd-228, #102)
368
+ - Backward-compatible alias for `--acceptance` in `bd update`
369
+ - Improves clarity and matches field name
370
+
371
+ ### Fixed
372
+ - **Critical**: Test isolation and database pollution (bd-1, bd-15, bd-19, bd-52)
373
+ - Comprehensive test isolation ensuring tests never pollute production database
374
+ - Fixed stress test issues writing 1000+ test issues to production
375
+ - Quarantined RPC benchmarks to prevent pollution
376
+ - Added database isolation canary tests
377
+ - **Critical**: Daemon cache staleness (bd-49)
378
+ - Daemon now detects external database modifications via mtime check
379
+ - Prevents serving stale data after external `bd import`, `rm bd.db`, etc.
380
+ - Cache automatically invalidates when DB file changes
381
+ - **Critical**: Counter desync after deletions (bd-49)
382
+ - Issue counters now sync correctly after bulk deletions
383
+ - Prevents ID gaps and counter drift
384
+ - **Critical**: Labels and dependencies not persisted in daemon mode (#101)
385
+ - Fixed label operations failing silently in daemon mode
386
+ - Fixed dependency operations not saving in daemon mode
387
+ - Both now correctly propagate through RPC layer
388
+ - **Daemon sync support**: `bd sync` command now works in daemon mode (bd-2)
389
+ - Previously crashed with nil pointer when daemon running
390
+ - Export operations now properly routed through RPC
391
+ - **Acceptance flag normalization**: Unified `--acceptance` flag behavior (bd-228, #102)
392
+ - Added `--acceptance-criteria` as clearer alias
393
+ - Both flags work identically for backward compatibility
394
+ - **Auto-import Git conflicts**: Better detection of merge conflicts (bd-270)
395
+ - Auto-import detects and warns about unresolved Git merge conflicts
396
+ - Prevents importing corrupted JSONL with conflict markers
397
+ - Clear instructions for resolving conflicts
398
+
399
+ ### Changed
400
+ - **BREAKING**: Removed global daemon socket fallback (bd-231)
401
+ - Each project now must use its own local daemon (.beads/bd.sock)
402
+ - Prevents cross-project daemon connections and database pollution
403
+ - Migration: Stop any global daemon and restart with `bd daemon` in each project
404
+ - Warning displayed if old global socket (~/.beads/bd.sock) is found
405
+ - **Database cleanup**: Project database cleaned from 1000+ to 55 issues
406
+ - Removed accumulated test pollution from stress testing
407
+ - Renumbered issues for clean ID space (bd-1 through bd-55)
408
+ - Better test isolation prevents future pollution
409
+
410
+ ### Deprecated
411
+ - Global daemon socket support (see BREAKING change above)
412
+
413
+ ## [0.10.0] - 2025-10-20
414
+
415
+ ### Added
416
+ - **Agent Onboarding**: New `bd onboard` command for agent-first documentation (bd-173)
417
+ - Outputs structured instructions for agents to integrate bd into documentation
418
+ - Bootstrap workflow: Add 'BEFORE ANYTHING ELSE: run bd onboard' to AGENTS.md
419
+ - Agent adapts instructions to existing project structure
420
+ - More agentic approach vs. direct string replacement
421
+ - Updates README with new bootstrap workflow
422
+
423
+ ## [0.9.11] - 2025-10-20
424
+
425
+ ### Added
426
+ - **Labels Documentation**: Comprehensive LABELS.md guide (bd-159, bd-163)
427
+ - Complete label system documentation with workflows and best practices
428
+ - Common label patterns (components, domains, size, quality gates, releases)
429
+ - Advanced filtering techniques and integration examples
430
+ - Added Labels section to README with quick reference
431
+
432
+ ### Fixed
433
+ - **Critical**: MCP server crashes on None/null responses (bd-172, fixes #79)
434
+ - Added null safety checks in `list_issues()`, `ready()`, and `stats()` methods
435
+ - Returns empty arrays/dicts instead of crashing on None responses
436
+ - Prevents TypeError when daemon returns empty results
437
+
438
+ ## [0.9.10] - 2025-10-18
439
+
440
+ ### Added
441
+ - **Label Filtering**: Enhanced `bd list` command with label-based filtering (bd-161)
442
+ - `--label` (or `-l`): Filter by multiple labels with AND semantics (must have ALL)
443
+ - `--label-any`: Filter by multiple labels with OR semantics (must have AT LEAST ONE)
444
+ - Examples:
445
+ - `bd list --label backend,urgent`: Issues with both 'backend' AND 'urgent'
446
+ - `bd list --label-any frontend,backend`: Issues with either 'frontend' OR 'backend'
447
+ - Works in both daemon and direct modes
448
+ - Includes comprehensive test coverage
449
+ - **Log Rotation**: Automatic daemon log rotation with configurable limits (bd-154)
450
+ - Prevents unbounded log file growth for long-running daemons
451
+ - Configurable via environment variables: `BEADS_DAEMON_LOG_MAX_SIZE`, `BEADS_DAEMON_LOG_MAX_BACKUPS`, `BEADS_DAEMON_LOG_MAX_AGE`
452
+ - Optional compression of rotated logs
453
+ - Defaults: 10MB max size, 3 backups, 7 day retention, compression enabled
454
+ - **Batch Deletion**: Enhanced `bd delete` command with batch operations (bd-127)
455
+ - Delete multiple issues at once: `bd delete bd-1 bd-2 bd-3 --force`
456
+ - Read from file: `bd delete --from-file deletions.txt --force`
457
+ - Dry-run mode: `--dry-run` to preview deletions before execution
458
+ - Cascade mode: `--cascade` to recursively delete all dependents
459
+ - Force mode: `--force` to orphan dependents instead of failing
460
+ - Atomic transactions: all deletions succeed or none do
461
+ - Comprehensive statistics: tracks deleted issues, dependencies, labels, and events
462
+
463
+ ### Fixed
464
+ - **Critical**: `bd list --status all` showing 0 issues (bd-148)
465
+ - Status filter now treats "all" as special value meaning "show all statuses"
466
+ - Previously treated "all" as literal status value, matching no issues
467
+
468
+ ## [0.9.9] - 2025-10-17
469
+
470
+ ### Added
471
+ - **Daemon RPC Architecture**: Production-ready RPC protocol for client-daemon communication (bd-110, bd-111, bd-112, bd-114, bd-117)
472
+ - Unix socket-based RPC enables faster command execution via long-lived daemon process
473
+ - Automatic client detection with graceful fallback to direct mode
474
+ - Serializes SQLite writes and batches git operations to prevent concurrent access issues
475
+ - Resolves database corruption, git lock contention, and ID counter conflicts with multiple agents
476
+ - Comprehensive integration tests and stress testing with 4+ concurrent agents
477
+ - **Issue Deletion**: `bd delete` command for removing issues with comprehensive cleanup
478
+ - Safely removes issues from database and JSONL export
479
+ - Cleans up dependencies and references to deleted issues
480
+ - Works correctly with git-based workflows
481
+ - **Issue Restoration**: `bd restore` command for recovering compacted/deleted issues
482
+ - Restores issues from git history when needed
483
+ - Preserves references and dependency relationships
484
+ - **Prefix Renaming**: `bd rename-prefix` command for batch ID prefix changes
485
+ - Updates all issue IDs and text references throughout the database
486
+ - Useful for project rebranding or namespace changes
487
+ - **Comprehensive Testing**: Added scripttest-based integration tests (#59)
488
+ - End-to-end coverage for CLI workflows
489
+ - Tests for init command edge cases (bd-70)
490
+
491
+ ### Fixed
492
+ - **Critical**: Metadata errors causing crashes on first import (bd-663)
493
+ - Auto-import now treats missing metadata as first import instead of failing
494
+ - Eliminates initialization errors in fresh repositories
495
+ - **Critical**: N+1 query pattern in auto-import (bd-666)
496
+ - Replaced per-issue queries with batch fetching
497
+ - Dramatically improves performance for large imports
498
+ - **Critical**: Duplicate issue imports (bd-421)
499
+ - Added deduplication logic to prevent importing same issue multiple times
500
+ - Maintains data integrity during repeated imports
501
+ - **Bug**: Auto-flush missing after renumber/rename-prefix (bd-346)
502
+ - Commands now properly export to JSONL after completion
503
+ - Ensures git sees latest changes immediately
504
+ - **Bug**: Renumber ID collision with UUID temp IDs (bd-345)
505
+ - Uses proper UUID-based temporary IDs to prevent conflicts during renumbering
506
+ - ID counter now correctly syncs after renumbering operations
507
+ - **Bug**: Collision resolution dependency handling (bd-437)
508
+ - Uses unchecked dependency addition during collision remapping
509
+ - Prevents spurious cycle detection errors
510
+ - **Bug**: macOS crashes documented (closes #3, bd-87)
511
+ - Added CGO_ENABLED=1 workaround documentation for macOS builds
512
+
513
+ ### Changed
514
+ - CLI commands now prefer RPC when daemon is running
515
+ - Improved error reporting and diagnostics for RPC failures
516
+ - More consistent exit codes and status messages
517
+ - Internal command architecture refactored for RPC client/server sharing
518
+ - Reduced code duplication between direct and daemon modes
519
+ - Improved reliability of background operations
520
+ - Ready work sort order flipped to show oldest issues first
521
+ - Helps prioritize long-standing work items
522
+
523
+ ### Performance
524
+ - Faster command execution through RPC-backed daemon (up to 10x improvement)
525
+ - N+1 query elimination in list/show operations
526
+ - Reduced write amplification from improved auto-flush behavior
527
+ - Cycle detection performance benchmarks added (bd-311)
528
+
529
+ ### Testing
530
+ - Integration tests for daemon RPC request/response flows
531
+ - End-to-end coverage for delete/restore lifecycles
532
+ - Regression tests for metadata handling, auto-flush, ID counter sync
533
+ - Comprehensive tests for collision detection in auto-import (bd-401)
534
+
535
+ ### Documentation
536
+ - Release process documentation added (RELEASING.md)
537
+ - Multiple workstreams warning banner for development coordination
538
+
539
+ ## [0.9.8] - 2025-10-16
540
+
541
+ ### Added
542
+ - **Background Daemon Mode**: `bd daemon` command for continuous auto-sync (#bd-386)
543
+ - Watches for changes and automatically exports to JSONL
544
+ - Monitors git repository for incoming changes and auto-imports
545
+ - Production-ready with graceful shutdown, PID file management, and signal handling
546
+ - Eliminates manual export/import in active development workflows
547
+ - **Git Synchronization**: `bd sync` command for automated git workflows (#bd-378)
548
+ - One-command sync: stage, commit, pull, push JSONL changes
549
+ - Automatic merge conflict resolution with collision remapping
550
+ - Status reporting shows sync progress and any issues
551
+ - Ideal for distributed teams and CI/CD integration
552
+ - **Issue Compaction**: `bd compact` command to summarize old closed issues (bd-254-264)
553
+ - AI-powered summarization using Claude Haiku
554
+ - Reduces database size while preserving essential information
555
+ - Configurable thresholds for age, dependencies, and references
556
+ - Compaction status visible in `bd show` output
557
+ - **Label and Title Filtering**: Enhanced `bd list` command (#45, bd-269)
558
+ - Filter by labels: `bd list --label bug,critical`
559
+ - Filter by title: `bd list --title "auth"`
560
+ - Combine with status/priority filters
561
+ - **List Output Formats**: `bd list --format` flag for custom output (PR #46)
562
+ - Format options: `default`, `compact`, `detailed`, `json`
563
+ - Better integration with scripts and automation tools
564
+ - **MCP Reopen Support**: Reopen closed issues via MCP server
565
+ - Claude Desktop plugin can now reopen issues
566
+ - Useful for revisiting completed work
567
+ - **Cross-Type Cycle Prevention**: Dependency cycles detected across all types (bd-312)
568
+ - Prevents A→B→A cycles even when mixing `blocks`, `related`, etc.
569
+ - Semantic validation for parent-child direction
570
+ - Diagnostic warnings when cycles detected
571
+
572
+ ### Fixed
573
+ - **Critical**: Auto-import collision skipping bug (bd-393, bd-228)
574
+ - Import would silently skip collisions instead of remapping
575
+ - Could cause data loss when merging branches
576
+ - Now correctly applies collision resolution with remapping
577
+ - **Critical**: Transaction state corruption (bd-221)
578
+ - Nested transactions could corrupt database state
579
+ - Fixed with proper transaction boundary handling
580
+ - **Critical**: Concurrent temp file collisions (bd-306, bd-373)
581
+ - Multiple `bd` processes would collide on shared `.tmp` filename
582
+ - Now uses PID suffix for temp files: `.beads/issues.jsonl.tmp.12345`
583
+ - **Critical**: Circular dependency detection gaps (bd-307)
584
+ - Some cycle patterns were missed by detection algorithm
585
+ - Enhanced with comprehensive cycle prevention
586
+ - **Bug**: False positive merge conflict detection (bd-313, bd-270)
587
+ - Auto-import would detect conflicts when none existed
588
+ - Fixed with improved Git conflict marker detection
589
+ - **Bug**: Import timeout with large issue sets (bd-199)
590
+ - 200+ issue imports would timeout
591
+ - Optimized import performance
592
+ - **Bug**: Collision resolver missing ID counter sync (bd-331)
593
+ - After remapping, ID counters weren't updated
594
+ - Could cause duplicate IDs in subsequent creates
595
+ - **Bug**: NULL handling in statistics for empty databases (PR #37)
596
+ - `bd stats` would crash on newly initialized databases
597
+ - Fixed NULL value handling in GetStatistics
598
+
599
+ ### Changed
600
+ - Compaction removes snapshot/restore (simplified to permanent decay)
601
+ - Export file writing refactored to avoid Windows Defender false positives (PR #31)
602
+ - Error handling improved in auto-import and fallback paths (PR #47)
603
+ - Reduced cyclomatic complexity in main.go (PR #48)
604
+ - MCP integration tests fixed and linting cleaned up (PR #40)
605
+
606
+ ### Performance
607
+ - Cycle detection benchmarks added (bd-311)
608
+ - Import optimization for large issue sets
609
+ - Export uses PID-based temp files to avoid lock contention
610
+
611
+ ### Community
612
+ - Merged PR #31: Windows Defender mitigation for export
613
+ - Merged PR #37: Fix NULL handling in statistics
614
+ - Merged PR #38: Nix flake for declarative builds
615
+ - Merged PR #40: MCP integration test fixes
616
+ - Merged PR #45: Label and title filtering for bd list
617
+ - Merged PR #46: Add --format flag to bd list
618
+ - Merged PR #47: Error handling consistency
619
+ - Merged PR #48: Cyclomatic complexity reduction
620
+
621
+ ## [0.9.2] - 2025-10-14
622
+
623
+ ### Added
624
+ - **One-Command Dependency Creation**: `--deps` flag for `bd create` (#18)
625
+ - Create issues with dependencies in a single command
626
+ - Format: `--deps type:id` or just `--deps id` (defaults to blocks)
627
+ - Multiple dependencies: `--deps discovered-from:bd-20,blocks:bd-15`
628
+ - Whitespace-tolerant parsing
629
+ - Particularly useful for AI agents creating discovered-from issues
630
+ - **External Reference Tracking**: `external_ref` field for linking to external trackers
631
+ - Link bd issues to GitHub, Jira, Linear, etc.
632
+ - Example: `bd create "Issue" --external-ref gh-42`
633
+ - `bd update` supports updating external references
634
+ - Tracked in JSONL for git portability
635
+ - **Metadata Storage**: Internal metadata table for system state
636
+ - Stores import hash for idempotent auto-import
637
+ - Enables future extensibility for system preferences
638
+ - Auto-migrates existing databases
639
+ - **Windows Support**: Complete Windows 11 build instructions (#10)
640
+ - Tested with mingw-w64
641
+ - Full CGo support documented
642
+ - PATH setup instructions
643
+ - **Go Extension Example**: Complete working example of database extensions (#15)
644
+ - Demonstrates custom table creation
645
+ - Shows cross-layer queries joining with issues
646
+ - Includes test suite and documentation
647
+ - **Issue Type Display**: `bd list` now shows issue type in output (#17)
648
+ - Better visibility: `bd-1 [P1] [bug] open`
649
+ - Helps distinguish bugs from features at a glance
650
+
651
+ ### Fixed
652
+ - **Critical**: Dependency tree deduplication for diamond dependencies (bd-85, #1)
653
+ - Fixed infinite recursion in complex dependency graphs
654
+ - Prevents duplicate nodes at same level
655
+ - Handles multiple blockers correctly
656
+ - **Critical**: Hash-based auto-import replaces mtime comparison (bd-84)
657
+ - Git pull updates mtime but may not change content
658
+ - Now uses SHA256 hash to detect actual changes
659
+ - Prevents unnecessary imports after git operations
660
+ - **Critical**: Parallel issue creation race condition (PR #8, bd-66)
661
+ - Multiple processes could generate same ID
662
+ - Replaced in-memory counter with atomic database counter
663
+ - Syncs counters after import to prevent collisions
664
+ - Comprehensive test coverage
665
+
666
+ ### Changed
667
+ - Auto-import now uses content hash instead of modification time
668
+ - Dependency tree visualization improved for complex graphs
669
+ - Better error messages for dependency operations
670
+
671
+ ### Community
672
+ - Merged PR #8: Parallel issue creation fix
673
+ - Merged PR #10: Windows build instructions
674
+ - Merged PR #12: Fix quickstart EXTENDING.md link
675
+ - Merged PR #14: Better enable Go extensions
676
+ - Merged PR #15: Complete Go extension example
677
+ - Merged PR #17: Show issue type in list output
678
+
679
+ ## [0.9.1] - 2025-10-14
680
+
681
+ ### Added
682
+ - **Incremental JSONL Export**: Major performance optimization
683
+ - Dirty issue tracking system to only export changed issues
684
+ - Auto-flush with 5-second debounce after CRUD operations
685
+ - Automatic import when JSONL is newer than database
686
+ - `--no-auto-flush` and `--no-auto-import` flags for manual control
687
+ - Comprehensive test coverage for auto-flush/import
688
+ - **ID Space Partitioning**: Explicit ID assignment for parallel workers
689
+ - `bd create --id worker1-100` for controlling ID allocation
690
+ - Enables multiple agents to work without conflicts
691
+ - Documented in CLAUDE.md for agent workflows
692
+ - **Auto-Migration System**: Seamless database schema upgrades
693
+ - Automatically adds dirty_issues table to existing databases
694
+ - Silent migration on first access after upgrade
695
+ - No manual intervention required
696
+
697
+ ### Fixed
698
+ - **Critical**: Race condition in dirty tracking (TOCTOU bug)
699
+ - Could cause data loss during concurrent operations
700
+ - Fixed by tracking specific exported IDs instead of clearing all
701
+ - **Critical**: Export with filters cleared all dirty issues
702
+ - Status/priority filters would incorrectly mark non-matching issues as clean
703
+ - Now only clears issues that were actually exported
704
+ - **Bug**: Malformed ID detection never worked
705
+ - SQLite CAST returns 0 for invalid strings, not NULL
706
+ - Now correctly detects non-numeric ID suffixes like "bd-abc"
707
+ - No false positives on legitimate zero-prefixed IDs
708
+ - **Bug**: Inconsistent dependency dirty marking
709
+ - Duplicated 20+ lines of code in AddDependency/RemoveDependency
710
+ - Refactored to use shared markIssuesDirtyTx() helper
711
+ - Fixed unchecked error in import.go when unmarshaling JSON
712
+ - Fixed unchecked error returns in test cleanup code
713
+ - Removed duplicate test code in dependencies_test.go
714
+ - Fixed Go version in go.mod (was incorrectly set to 1.25.2)
715
+
716
+ ### Changed
717
+ - Export now tracks which specific issues were exported
718
+ - ClearDirtyIssuesByID() added (ClearDirtyIssues() deprecated with race warning)
719
+ - Dependency operations use shared dirty-marking helper (DRY)
720
+
721
+ ### Performance
722
+ - Incremental export: Only writes changed issues (vs full export)
723
+ - Regex caching in ID replacement: 1.9x performance improvement
724
+ - Automatic debounced flush prevents excessive I/O
725
+
726
+ ## [0.9.0] - 2025-10-12
727
+
728
+ ### Added
729
+ - **Collision Resolution System**: Automatic ID remapping for import collisions
730
+ - Reference scoring algorithm to minimize updates during remapping
731
+ - Word-boundary regex matching to prevent false replacements
732
+ - Automatic updating of text references and dependencies
733
+ - `--resolve-collisions` flag for safe branch merging
734
+ - `--dry-run` flag to preview collision detection
735
+ - **Export/Import with JSONL**: Git-friendly text format
736
+ - Dependencies embedded in JSONL for complete portability
737
+ - Idempotent import (exact matches detected)
738
+ - Collision detection (same ID, different content)
739
+ - **Ready Work Algorithm**: Find issues with no open blockers
740
+ - `bd ready` command shows unblocked work
741
+ - `bd blocked` command shows what's waiting
742
+ - **Dependency Management**: Four dependency types
743
+ - `blocks`: Hard blocker (affects ready work)
744
+ - `related`: Soft relationship
745
+ - `parent-child`: Epic/subtask hierarchy
746
+ - `discovered-from`: Track issues discovered during work
747
+ - **Database Discovery**: Auto-find database in project hierarchy
748
+ - Walks up directory tree like git
749
+ - Supports `$BEADS_DB` environment variable
750
+ - Falls back to `~/.beads/default.db`
751
+ - **Comprehensive Documentation**:
752
+ - README.md with 900+ lines of examples and FAQs
753
+ - CLAUDE.md for AI agent integration patterns
754
+ - SECURITY.md with security policy and best practices
755
+ - TEXT_FORMATS.md analyzing JSONL approach
756
+ - EXTENDING.md for database extension patterns
757
+ - GIT_WORKFLOW.md for git integration
758
+ - **Examples**: Real-world integration patterns
759
+ - Python agent implementation
760
+ - Bash agent script
761
+ - Git hooks for automatic export/import
762
+ - Branch merge workflow with collision resolution
763
+ - Claude Desktop MCP integration (coming soon)
764
+
765
+ ### Changed
766
+ - Switched to JSONL as source of truth (from binary SQLite)
767
+ - SQLite database now acts as ephemeral cache
768
+ - Issue IDs generated with numerical max (not alphabetical)
769
+ - Export sorts issues by ID for consistent git diffs
770
+
771
+ ### Security
772
+ - SQL injection protection via allowlisted field names
773
+ - Input validation for all issue fields
774
+ - File path validation for database operations
775
+ - Warnings about not storing secrets in issues
776
+
777
+ ## [0.1.0] - Initial Development
778
+
779
+ ### Added
780
+ - Core issue tracking (create, update, list, show, close)
781
+ - SQLite storage backend
782
+ - Dependency tracking with cycle detection
783
+ - Label support
784
+ - Event audit trail
785
+ - Full-text search
786
+ - Statistics and reporting
787
+ - `bd init` for project initialization
788
+ - `bd quickstart` interactive tutorial
789
+
790
+ ---
791
+
792
+ ## Version History
793
+
794
+ - **0.9.8** (2025-10-16): Daemon mode, git sync, compaction, critical bug fixes
795
+ - **0.9.2** (2025-10-14): Community PRs, critical bug fixes, and --deps flag
796
+ - **0.9.1** (2025-10-14): Performance optimization and critical bug fixes
797
+ - **0.9.0** (2025-10-12): Pre-release polish and collision resolution
798
+ - **0.1.0**: Initial development version
799
+
800
+ ## Upgrade Guide
801
+
802
+ ### Upgrading to 0.9.8
803
+
804
+ No breaking changes. All changes are backward compatible:
805
+ - **bd daemon**: New optional background service for auto-sync workflows
806
+ - **bd sync**: New optional git integration command
807
+ - **bd compact**: New optional command for issue summarization (requires Anthropic API key)
808
+ - **--format flag**: Optional new feature for `bd list`
809
+ - **Label/title filters**: Optional new filters for `bd list`
810
+ - **Bug fixes**: All critical fixes are transparent to users
811
+
812
+ Simply pull the latest version and rebuild:
813
+ ```bash
814
+ go install github.com/steveyegge/beads/cmd/bd@latest
815
+ # or
816
+ git pull && go build -o bd ./cmd/bd
817
+ ```
818
+
819
+ **Note**: The `bd compact` command requires an Anthropic API key in `$ANTHROPIC_API_KEY` environment variable. All other features work without any additional setup.
820
+
821
+ ### Upgrading to 0.9.2
822
+
823
+ No breaking changes. All changes are backward compatible:
824
+ - **--deps flag**: Optional new feature for `bd create`
825
+ - **external_ref**: Optional field, existing issues unaffected
826
+ - **Metadata table**: Auto-migrates on first use
827
+ - **Bug fixes**: All critical fixes are transparent to users
828
+
829
+ Simply pull the latest version and rebuild:
830
+ ```bash
831
+ go install github.com/steveyegge/beads/cmd/bd@latest
832
+ # or
833
+ git pull && go build -o bd ./cmd/bd
834
+ ```
835
+
836
+ ### Upgrading to 0.9.1
837
+
838
+ No breaking changes. All changes are backward compatible:
839
+ - **Auto-migration**: The dirty_issues table is automatically added to existing databases
840
+ - **Auto-flush/import**: Enabled by default, improves workflow (can disable with flags if needed)
841
+ - **ID partitioning**: Optional feature, use `--id` flag only if needed for parallel workers
842
+
843
+ If you're upgrading from 0.9.0, simply pull the latest version. Your existing database will be automatically migrated on first use.
844
+
845
+ ### Upgrading to 0.9.0
846
+
847
+ No breaking changes. The JSONL export format is backward compatible.
848
+
849
+ If you have issues in your database:
850
+ 1. Run `bd export -o .beads/issues.jsonl` to create the text file
851
+ 2. Commit `.beads/issues.jsonl` to git
852
+ 3. Add `.beads/*.db` to `.gitignore`
853
+
854
+ New collaborators can clone the repo and run:
855
+ ```bash
856
+ bd import -i .beads/issues.jsonl
857
+ ```
858
+
859
+ The SQLite database will be automatically populated from the JSONL file.
860
+
861
+ ## Future Releases
862
+
863
+ See open issues tagged with milestone markers for planned features in upcoming releases.
864
+
865
+ For version 1.0, see: `bd dep tree bd-8` (the 1.0 milestone epic)