@beads/bd 0.24.4 → 0.25.1

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.
package/bin/CHANGELOG.md DELETED
@@ -1,1657 +0,0 @@
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
- ### Improved
11
-
12
- - **Daemon Log Rotation**: Increased default rotation limits for better production use (bd-t7ds)
13
- - Max size increased from 10MB to 50MB per file
14
- - Max backups increased from 3 to 7 files
15
- - Max age increased from 7 to 30 days
16
- - Added comprehensive documentation in CONFIG.md
17
- - Better handles long-running daemons with high log output
18
-
19
- - **Git Pre-Push Hook**: Better error messaging and auto-sync option
20
- - Error message now suggests `bd sync` instead of manual git commands
21
- - Interactive prompt offers to run `bd sync` automatically
22
- - Falls back to manual instructions in non-interactive terminals or when bd is unavailable
23
- - Improves user experience when beads JSONL has uncommitted changes
24
-
25
- ## [0.24.2] - 2025-11-22
26
-
27
- ### Fixed
28
-
29
- - **Test Stability**: Complete rootCtx initialization fix for all hanging tests (issue #355, b8db5ab)
30
- - Fixed TestGetAssignedStatus missing rootCtx initialization (a517ec9)
31
- - Prevents test hangs from uninitialized context
32
- - Improved test reliability and isolation
33
-
34
- - **JSONL Configuration**: Improved bd doctor JSONL checks to focus on real problems (87ee3a6)
35
- - Reduces false positives in JSONL validation
36
- - Better detection of actual configuration issues
37
-
38
- ### Changed
39
-
40
- - **JSONL Filename Default**: Changed default JSONL filename from `beads.jsonl` to `issues.jsonl` (c4c5c80)
41
- - Updated TestFindJSONLPathDefault to match new default (5eefec7)
42
- - Removed stale `issues.jsonl` in favor of configured `beads.jsonl` (d918e47)
43
- - More intuitive default filename for new users
44
-
45
- ## [0.24.1] - 2025-11-22
46
-
47
- ### Added
48
-
49
- - **bd search**: Date and priority filters (787fb4e)
50
- - `--created-after`, `--created-before` for date filtering
51
- - `--priority-min`, `--priority-max` for priority range filtering
52
- - Enables more precise search queries
53
-
54
- - **bd count**: New command for counting and grouping issues (d7f4189)
55
- - Count issues by status, priority, type, or labels
56
- - Helpful for generating statistics and reports
57
-
58
- - **Test Infrastructure**: Automatic skip list for tests (0040e80)
59
- - Improves test reliability and maintenance
60
- - Automatically manages flaky or environment-specific tests
61
-
62
- ### Fixed
63
-
64
- - **Test Stability**: Fixed hanging tests by initializing rootCtx (822baa0, bd-n25)
65
- - Prevents test hangs from context cancellation issues
66
- - Better test isolation and cleanup
67
-
68
- - **Git Merge Driver**: Corrected placeholders from %L/%R to %A/%B (ddd209e)
69
- - Fixes merge driver configuration for proper conflict resolution
70
- - Uses correct git merge driver variable names
71
-
72
- - **Database Paths**: Deduplicate database paths when symlinks present (#354, f724b61)
73
- - Prevents duplicate database detection when symlinks are involved
74
- - Improves reliability in complex filesystem setups
75
-
76
- ### Changed
77
-
78
- - **bd list**: Accept both integer and P-format for priority flags (2e2b8d7)
79
- - `--priority 1` and `--priority P1` now both work
80
- - More flexible CLI input for priority filtering
81
-
82
- - **bd update**: Added `--body` flag as alias for `--description` (bb5a480)
83
- - More intuitive flag name for updating issue descriptions
84
- - Both flags work identically for backward compatibility
85
-
86
- - **bd update**: Added label operations (3065db2)
87
- - `--add-labels` and `--remove-labels` flags
88
- - Simplifies label management in update operations
89
-
90
- - **GitHub Copilot Support**: Added `.github/copilot-instructions.md` (605fff1)
91
- - Provides project-specific guidance for GitHub Copilot
92
- - Improves AI-assisted development experience
93
-
94
- - **Documentation**: Moved design/audit docs from cmd/bd to docs/ (ce433bb)
95
- - Better organization of project documentation
96
- - Clearer separation of code and documentation
97
-
98
- ### Performance
99
-
100
- - **Test Suite**: Deleted 7 redundant tests from main_test.go (fa727c7)
101
- - 3x speedup in test execution
102
- - Improved CI/CD performance
103
-
104
- - **Test Coverage**: Tagged 16 slow integration tests with build tags (8290243)
105
- - Faster local test runs with `-short` flag
106
- - CI can still run full test suite
107
-
108
- ### Testing
109
-
110
- - **Security Tests**: Added security and error handling tests for lint warnings (74f3844)
111
- - Improved code quality and safety
112
- - Better coverage of edge cases
113
-
114
- - **Shared Database Pattern**: Refactored multiple test files to use shared DB pattern (bd-1rh)
115
- - compact_test.go, integrity_test.go, validate_test.go, epic_test.go, duplicates_test.go
116
- - Improved test consistency and maintainability
117
- - Faster test execution through better resource sharing
118
-
119
- ## [0.24.0] - 2025-11-20
120
-
121
- ### Added
122
-
123
- - **bd doctor --fix**: Automatic repair functionality (bd-ykd9, 7806937)
124
- - Automatically fixes issues detected by `bd doctor`
125
- - Repairs common database inconsistencies without manual intervention
126
-
127
- - **bd clean**: Remove temporary merge artifacts (e8355c2)
128
- - Cleans up `.base`, `.ours`, `.theirs` snapshot files
129
- - Helps maintain clean `.beads/` directory after merges
130
-
131
- - **bd cleanup**: Enhanced bulk deletion command
132
- - Delete multiple closed issues efficiently
133
- - Improved from previous versions with better performance
134
-
135
- - **.beads/README.md Generation**: Auto-generated during `bd init` (bd-m7ge, e1c8853)
136
- - Provides project-specific beads documentation
137
- - Helps new contributors understand the setup
138
-
139
- - **blocked_issues_cache Table**: Performance optimization for GetReadyWork (62c1f42, ed23f8f)
140
- - Caches blocked issue relationships
141
- - Dramatically improves `bd ready` performance on large databases
142
-
143
- - **Commit Hash in Version Output**: Enhanced version reporting (bd-hpt5, 7c96142)
144
- - `bd version` now shows git commit hash
145
- - Helps identify exact build for debugging
146
-
147
- - **Auto-detection of Issue Prefix**: Scans git history to detect prefix (#277, 8f37904)
148
- - Automatically discovers project's issue prefix
149
- - Reduces manual configuration needed
150
-
151
- - **external_ref Support in Daemon RPC**: Full daemon mode support (#304, 57b6ea6)
152
- - MCP server can now set external references in daemon mode
153
- - Parity with CLI functionality
154
-
155
- - **Context Optimization Features**: AI agent improvements (#297, f7e80dd)
156
- - Context propagation with graceful cancellation (bd-rtp, bd-yb8, bd-2o2, 57253f9)
157
- - Better memory management for long-running agent sessions
158
-
159
- ### Fixed
160
-
161
- - **Critical: Auto-import Resurrection Bug** (bd-khnb, 0020eb4, e28e3ea, 7b6370f)
162
- - Fixed critical bug where deleted issues were resurrected during auto-import
163
- - Cleaned up 497+ resurrected issues from production database
164
- - Prevents data corruption from improper JSONL replay
165
-
166
- - **Critical: bd sync Auto-resolves Conflicts** (bd-ca0b, a1e5075)
167
- - `bd sync` now automatically resolves conflicts instead of failing
168
- - Dramatically improves multi-agent workflow reliability
169
- - Eliminates manual conflict resolution in most cases
170
-
171
- - **Critical: Content-based Timestamp Skew Prevention** (bd-lm2q, d0e7047)
172
- - Fixed false-positive "JSONL is newer than database" warnings
173
- - Uses content-based comparison instead of timestamp-only
174
- - Prevents unnecessary imports that would corrupt state
175
-
176
- - **Critical: bd sync DB Changes After Import** (81c741b)
177
- - Ensures database changes are properly applied after import
178
- - Fixes desync issues between JSONL and database
179
-
180
- - **Critical: Context Propagation Lifecycle Bugs** (bd-rtp, bd-yb8, bd-2o2, 57253f9, a17e4af)
181
- - Fixed multiple context propagation issues causing crashes
182
- - Graceful cancellation support for long-running operations
183
- - Improved stability for AI agent workflows
184
-
185
- - **Critical: Race Condition in Auto-flush** (bd-52, a9b2f9f)
186
- - Fixed race condition in auto-flush mechanism
187
- - Prevents data loss during concurrent operations
188
-
189
- - **Critical: Resource Leaks and Error Handling** (#327, fb65163)
190
- - Fixed critical resource leaks in daemon mode
191
- - Improved error handling throughout codebase
192
-
193
- - **Critical: In-memory Database Deadlock** (bd-yvlc, 944ed10)
194
- - Fixed deadlock in migrations when using in-memory database
195
- - Improves test reliability
196
-
197
- - **MCP Schema Generation Recursion Bug** (GH#346, f3a678f)
198
- - Fixed infinite recursion in MCP schema generation
199
- - Prevents stack overflow crashes
200
-
201
- - **FK Constraint Failures** (bd-5arw, 345766b)
202
- - Fixed foreign key constraint failures in AddComment and ApplyCompaction
203
- - Improved data integrity
204
-
205
- - **--parent Flag Behavior** (b9919fe)
206
- - Now correctly creates parent-child dependency relationships
207
- - Previously was creating wrong dependency type
208
-
209
- - **Exact ID Matching Priority** (gh-316, 934ae04)
210
- - Prefers exact ID matches over prefix matches
211
- - Prevents ambiguous ID resolution
212
-
213
- - **Daemon Lifetime on macOS** (GH#278, 68f9bef)
214
- - Fixed daemon exiting after 5s on macOS due to PID 1 parent monitoring
215
- - Daemon now runs reliably on macOS
216
-
217
- - **Daemon Export/JSONL Sync** (GH#301, #321, 04a1996)
218
- - Fixed daemon export leaving JSONL newer than database
219
- - Ensures proper sync between export and database state
220
-
221
- - **bd doctor Hash ID Detection** (GH#322, 8c1f865)
222
- - Fixed doctor incorrectly diagnosing hash IDs as sequential
223
- - Improved detection logic for ID format validation
224
-
225
- - **ResolvePartialID Handling** (GH#336, 4432af0)
226
- - Improved ResolvePartialID / ResolveID handling for `bd show`
227
- - Better partial ID matching and error messages
228
-
229
- - **bd sync Windows Upstream Detection** (#281, 1deaad1)
230
- - Fixed upstream branch detection on Windows
231
- - Improved cross-platform compatibility
232
-
233
- - **Compact Command Daemon Mode** (#294, d9904a8)
234
- - Fixed compact command failing with 'SQLite DB needed' error when daemon running
235
- - Removed premature store check, uses ensureDirectMode
236
-
237
- - **DB mtime Update After Import** (#296, 9dff345)
238
- - Fixed DB mtime not being updated after import with 0 changes
239
- - Prevents false staleness warnings
240
-
241
- - **FOREIGN KEY Constraint on Non-existent Issues** (09666b4)
242
- - Fixed constraint failures when operating on non-existent issues
243
- - Better error handling and validation
244
-
245
- - **Monitor WebUI Daemon Detection** (e36baee)
246
- - Fixed monitor-webui failure to detect running daemon
247
- - Improved daemon health checking
248
-
249
- - **Onboard Test Deadlock on Windows** (4e22214)
250
- - Fixed deadlock in onboard tests on Windows
251
- - Improved test stability
252
-
253
- - **Windows Concurrent Issue Creation** (4cd26c8)
254
- - Fixed concurrent issue creation failures on Windows
255
- - Better file locking on Windows
256
-
257
- - **Missing Git Hook Message** (#306, 92f3af5)
258
- - Improved messaging when git hooks are missing
259
- - Clearer instructions for users
260
-
261
- - **Prefix Detection for Hyphenated Apps** (83472ac, bd-fasa)
262
- - Fixed prefix detection to only use first hyphen
263
- - Handles hyphenated application names correctly
264
-
265
- - **External Ref Migration Failures** (8be792a)
266
- - Fixed external_ref migration failure on old databases
267
- - Backward compatibility improvements
268
-
269
- - **Duplicate Function Declaration** (#328, 167ab67)
270
- - Fixed compilation failure from duplicate computeJSONLHash declaration
271
- - Removed old version, kept simpler implementation
272
- - Updated test to match new API
273
-
274
- ### Changed
275
-
276
- - **Performance Improvements** (#319, 690c73f):
277
- - Optimized GetReadyWork to use blocked_issues_cache (ed23f8f)
278
- - Replaced N+1 label queries with bulk fetch in `bd list` (968d9e2)
279
- - Cache invalidation for blocked_issues_cache (614ba8a)
280
- - Significant speedup for large databases
281
-
282
- - **FlushManager Improvements** (445857f)
283
- - Added constants for magic numbers
284
- - Enhanced error logging
285
- - Comprehensive functional tests
286
-
287
- - **Auto-upgrade .beads/.gitignore** (#300, f4a2f87)
288
- - Automatically upgrades .gitignore on bd operations
289
- - Ensures latest patterns are always applied
290
-
291
- - **Code Refactoring**:
292
- - Extract duplicated validation logic to internal/validation (d5239ee)
293
- - Centralize error handling patterns in storage layer (bd-bwk2, 3b2cac4)
294
- - Extract duplicated validation and flag logic (bd-g5p7, bbfedb0)
295
- - Improved code organization and maintainability
296
-
297
- - **Documentation Improvements**:
298
- - Document files created by bd init and clarify .gitattributes (721274b, e7fd1dd)
299
- - How to resolve merge conflicts in .beads/beads.jsonl (4985a68)
300
- - Document MCP tools loading issue in Claude Code (GH#346, 79b8dbe)
301
- - Add uv prerequisite to Claude Code plugin docs (#293, a020c6c)
302
- - Don't auto-install Go in Windows installer (#302, 0cba73b)
303
-
304
- - **Improved Error Messages** (#349, 27c0c33)
305
- - Compact error messages
306
- - Remove bogus merge suggestion
307
- - Add daemon/maintenance docs
308
-
309
- - **AGENTS.md Refactoring** (21a0656)
310
- - Extracted detailed instructions to prevent context pollution
311
- - Better organization for AI agent consumption
312
-
313
- - **Type Safety Improvements** (9e57cb6)
314
- - Improved type safety in beads-mcp
315
- - Fixed minor type issues
316
-
317
- - **Test Improvements**:
318
- - Fix CI regressions and stabilize tests (7b63b5a)
319
- - Fix parallel test deadlock (1fc9bf6)
320
- - Annotate gosec-safe file accesses (bf9b2c8)
321
-
322
- - **Local-only Git Repo Support** (bd-biwp, 4de9f01)
323
- - Support repositories without remote origin
324
- - Better handling of local development workflows
325
-
326
- - **Version Marker in Post-checkout Hook** (ad2154b)
327
- - Add version marker to post-checkout hook
328
- - Include in CheckGitHooks for better version tracking
329
-
330
- ### Performance
331
-
332
- - **GetReadyWork Optimization** (bd-5qim, 690c73f, 62c1f42, ed23f8f)
333
- - Introduced blocked_issues_cache table
334
- - Eliminated expensive recursive queries
335
- - Dramatically faster for large dependency graphs
336
-
337
- - **bd list N+1 Query Elimination** (968d9e2)
338
- - Replaced per-issue label queries with bulk fetch
339
- - Significant speedup when listing many labeled issues
340
-
341
- ### Community
342
-
343
- - **Pull Requests**:
344
- - #338: Prevent daemon from exiting when launcher process exits (@cpdata)
345
- - #337: Improve ResolvePartialID handling (@cpdata)
346
- - #333: Fix doctor incorrectly diagnosing hash IDs (@cpdata)
347
- - #327: Address critical resource leaks and error handling
348
- - #306: Improve missing git hook message
349
- - #304: Add external_ref support to daemon mode RPC
350
- - #302: Windows installer improvements
351
- - #300: Automatic .beads/.gitignore upgrade
352
- - #297: Context optimization features for AI agents
353
- - #296: Fix DB mtime update after import
354
- - #294: Fix compact command in daemon mode
355
- - #293: Add uv prerequisite documentation
356
- - #281: Fix bd sync Windows upstream detection
357
- - #277: Auto-detection of issue prefix from git history
358
-
359
- - **Dependency Updates**:
360
- - Bump github.com/anthropics/anthropic-sdk-go from 1.17.0 to 1.18.0 (#330)
361
- - Bump golang.org/x/mod from 0.29.0 to 0.30.0 (#331)
362
- - Bump fastmcp from 2.13.0.2 to 2.13.1 (#332)
363
- - Bump pydantic from 2.12.0 to 2.12.4 (#285)
364
- - Bump pydantic-settings from 2.11.0 to 2.12.0 (#286)
365
- - Bump golangci/golangci-lint-action from 8 to 9 (#287)
366
- - Bump golang.org/x/sys from 0.36.0 to 0.38.0 (#288)
367
- - Bump github.com/ncruces/go-sqlite3 from 0.29.1 to 0.30.1 (#290)
368
- - Bump github.com/google/go-cmp from 0.6.0 to 0.7.0 (#291)
369
-
370
- ### Notes
371
-
372
- This release represents a major stability and performance improvement with **179 commits** since 0.23.1. Key themes:
373
- - **Reliability**: Fixed critical auto-import resurrection bug and multiple daemon issues
374
- - **Performance**: Significant optimizations for `bd ready` and `bd list`
375
- - **AI Agent Support**: Improved context propagation and error handling
376
- - **Cross-platform**: Better Windows and macOS support
377
- - **Developer Experience**: Auto-detection, better error messages, improved docs
378
-
379
- ## [0.23.1] - 2025-11-08
380
-
381
- ### Fixed
382
-
383
- - **#263: Database mtime not updated after import causing false `bd doctor` warnings**
384
- - When `bd sync --import-only` completed, SQLite WAL mode wouldn't update the main database file's mtime
385
- - This caused `bd doctor` to incorrectly warn "JSONL is newer than database" even when perfectly synced
386
- - Now updates database mtime after imports to prevent false warnings
387
-
388
- - **#261: SQLite URI missing 'file:' prefix causing version detection failures**
389
- - Without 'file:' scheme, SQLite treated `?mode=ro` as part of filename instead of connection option
390
- - Created bogus files like `beads.db?mode=ro`
391
- - Caused `bd doctor` to incorrectly report "version pre-0.17.5 (very old)" on modern databases
392
-
393
- - **bd-17d5: Conflict marker false positives on JSON-encoded content**
394
- - Issues containing JSON strings with `<<<<<<<` would trigger false conflict marker detection
395
- - Now checks raw bytes before JSON decoding to avoid false positives
396
-
397
- - **bd-ckvw: Schema compatibility probe prevents silent migration failures**
398
- - Migrations could fail silently, causing cryptic "no such column" and UNIQUE constraint errors later
399
- - Now probes schema after migrations, retries once if incomplete, and fails fast with clear error
400
- - Daemon refuses RPC if client has newer minor version to prevent schema mismatches
401
-
402
- - **#264/#262: Remove stale `--resolve-collisions` references**
403
- - Docs/error messages still referenced `--resolve-collisions` flag (removed in v0.20)
404
- - Fixed post-merge hook error messages and git-hooks README
405
-
406
- ### Changed
407
-
408
- - **bd-auf1: Auto-cleanup snapshot files after successful merge**
409
- - `.beads/` no longer accumulates orphaned `.base`, `.ours`, `.theirs` snapshot files after merges
410
-
411
- - **bd-ky74: Optimize CLI tests with in-process testing**
412
- - Converted exec.Command() tests to in-process rootCmd.Execute() calls
413
- - **Dramatically faster: 10+ minutes → just a few seconds**
414
- - Improved test coverage from 20.2% to 23.3%
415
-
416
- - **bd-6uix: Message system improvements**
417
- - 30s HTTP timeout prevents hangs, full message reading, --importance validation, server-side filtering
418
-
419
- - **Remove noisy version field from metadata.json**
420
- - Eliminated redundant version mismatch warnings on every bd upgrade
421
- - Daemon version checking via RPC is sufficient
422
-
423
- ### Added
424
-
425
- - Go agent example with Agent Mail support
426
- - Agent Mail multi-workspace deployment guide and scripts
427
-
428
- ## [0.23.0] - 2025-11-08
429
-
430
- ### Added
431
-
432
- - **Agent Mail Integration**: Complete Python adapter library with comprehensive documentation and multi-agent coordination tests
433
- - Python adapter library in `integrations/agent-mail-python/`
434
- - Agent Mail quickstart guide and comprehensive integration docs
435
- - Multi-agent race condition tests and failure scenario tests
436
- - Automated git traffic benchmark showing **98.5% reduction in git traffic** compared to git-only sync
437
- - Bash-agent integration example
438
-
439
- - **bd info --whats-new** (bd-eiz9): Agent version awareness for quick upgrade summaries
440
- - Shows last 3 versions with workflow-impacting changes
441
- - Supports `--json` flag for machine-readable output
442
- - Helps agents understand what changed without re-reading full docs
443
-
444
- - **bd hooks install** (bd-908z): Embedded git hooks command
445
- - Replaces external install script with native command
446
- - Git hooks now embedded in bd binary
447
- - Works for all bd users, not just source repo users
448
-
449
- - **bd cleanup**: Bulk deletion command for closed issues (bd-buol)
450
- - Agent-driven compaction for large databases
451
- - Removes closed issues older than specified threshold
452
-
453
- ### Fixed
454
-
455
- - **3-way JSONL Merge** (bd-jjua): Auto-invoked on conflicts
456
- - Automatically triggers intelligent merge on JSONL conflicts
457
- - No manual intervention required
458
- - Warning message added to zombie issues.jsonl file
459
-
460
- - **Auto-import on Missing Database** (ab4ec90): `bd import` now auto-initializes database when missing
461
- - **Daemon Crash Recovery** (bd-vcg5): Panic handler with socket cleanup prevents orphaned processes
462
- - **Stale Database Exports** (bd-srwk): ID-based staleness detection prevents exporting stale data
463
- - **Windows MCP Subprocess Timeout** (bd-r79z): Fix for git detection on Windows
464
- - **Daemon Orphaning** (a6c9579): Track parent PID and exit when parent dies
465
- - **Test Pollution Prevention** (bd-z528, bd-2c5a): Safeguards to prevent test issues in production database
466
- - **Client Self-Heal** (a236558): Auto-recovery for stale daemon.pid files
467
- - **Post-Merge Hook Error Messages** (abb1d1c): Show actual error messages instead of silent failures
468
- - **Auto-import During Delete** (bd-8kde): Disable auto-import during delete operations to prevent conflicts
469
- - **MCP Workspace Context** (bd-8zf2): Auto-detect workspace from CWD
470
- - **Import Sync Warning** (bd-u4f5): Warn when import syncs with working tree but not git HEAD
471
- - **GH#254** (bd-tuqd): `bd init` now detects and chains with existing git hooks
472
- - **GH#249**: Add nil storage checks to prevent RPC daemon crashes
473
- - **GH#252**: Fix SQLite driver name mismatch causing "unknown driver" errors
474
- - **Nested .beads Directories** (bd-eqjc): Prevent creating nested .beads directories
475
- - **Windows SQLite Support**: Fix SQLite in releases for Windows
476
-
477
- ### Changed
478
-
479
- - **Agent Affordances** (observations from agents using beads):
480
- - **bd new**: Added as alias for `bd create` command (agents often tried this)
481
- - **bd list**: Changed default to one-line-per-issue format to prevent agent miscounting; added `--long` flag for previous detailed format
482
-
483
- - **Developer Experience**:
484
- - Extracted supplemental docs from AGENTS.md for better organization
485
- - Added warning for working tree vs git HEAD sync mismatches
486
- - Completion commands now work without database
487
- - Config included in `bd info` JSON output
488
- - Python cache files added to .gitignore
489
- - RPC diagnostics available via `BD_RPC_DEBUG` env var
490
- - Reduced RPC dial timeout from 2s to 200ms for fast-fail (bd-expt)
491
- - Standardized daemon detection with tryDaemonLock probe (bd-wgu4)
492
- - Improved internal/daemon test coverage to 60%
493
-
494
- - **Code Organization**:
495
- - Refactored snapshot management into dedicated module (bd-urob)
496
- - Documented external_ref in content hash behavior (bd-9f4a)
497
- - Added MCP server functions for repair commands (bd-7bbc4e6a)
498
- - Added version number to beads-mcp startup log
499
- - Added system requirements section for glibc compatibility in docs
500
-
501
- - **Release Automation**:
502
- - Automatic Homebrew formula update in release workflow
503
- - Gitignore Formula/bd.rb (auto-generated, real source is homebrew-beads tap)
504
-
505
- - **Other**:
506
- - Added `docs/` directory to links (#242)
507
- - RPC monitoring solution with web UI as implementation example (#244)
508
- - Remove old install.sh script, replaced by `bd hooks install`
509
- - Remove vc.db exclusion from FindDatabasePath filter
510
-
511
- ## [0.22.1] - 2025-11-06
512
-
513
- ### Added
514
-
515
- - **Vendored beads-merge by @neongreen** (bd-bzfy): Native `bd merge` command for intelligent JSONL merging
516
- - Vendored beads-merge algorithm into `internal/merge/` with full attribution and MIT license
517
- - New `bd merge` command as native wrapper (no external binary needed)
518
- - Same field-level 3-way merge algorithm, now built into bd
519
- - Auto-configured during `bd init` (both interactive and `--quiet` modes)
520
- - Thanks to @neongreen for permission to vendor: https://github.com/neongreen/mono/issues/240
521
- - Original tool: https://github.com/neongreen/mono/tree/main/beads-merge
522
-
523
- - **Git Hook Version Detection** (bd-iou5, 991c624): `bd info` now detects outdated git hooks
524
- - Adds version markers to all git hook templates (pre-commit, post-merge, pre-push)
525
- - Warns when installed hooks are outdated or missing
526
- - Suggests running `examples/git-hooks/install.sh` to update
527
- - Prevents issues like the `--resolve-collisions` flag error after updates
528
-
529
- - **Public API for External Extensions** (8f676a4): Extensibility improvements for third-party tools
530
- - **Multi-Repo Patterns Documentation** (e73f89e): Comprehensive guide for AI agents working across multiple repositories
531
- - **Snapshot Versioning** (a891ebe): Add versioning and timestamp validation for snapshots
532
- - `--clear-duplicate-external-refs` flag for `bd import` command (9de98cf)
533
-
534
- ### Fixed
535
-
536
- - **Multi-Workspace Deletion Tracking** (708a81c, e5a6c05, 4718583): Proper deletion tracking across multiple workspaces
537
- - Fixes issue where deletions in one workspace weren't propagated to others
538
- - Added `DeleteIssue` to Storage interface for backend extensibility (e291ee0)
539
- - **Import/Export Deadlock** (a0d24f3): Prevent import/export from hanging when daemon is running
540
- - **Pre-Push Hook** (3ba245e): Fix pre-push hook blocking instead of exporting
541
- - **Hash ID Recognition** (c924731, 055f1d9): Fix `isHashID` to recognize Base36 hash IDs and IDs without a-f letters
542
- - **Git Merge Artifacts** (41b1a21): Ignore merge artifacts in `.beads/.gitignore`
543
- - **bd status Command** (1edf3c6): Now uses git history for recent activity detection
544
- - **Performance**: Add raw string equality short-circuit before jsonEquals (5c1f441)
545
-
546
- ### Changed
547
-
548
- - **Code Organization**:
549
- - Extract SQLite migrations into separate files (b655b29)
550
- - Centralize BD_DEBUG logging into `internal/debug` package (95cbcf4)
551
- - Extract `normalizeLabels` to `internal/util/strings.go` (9520e7a)
552
- - Reorganize project structure: move Go files to `internal/beads`, docs to `docs/` (584c266)
553
- - Remove unused `internal/daemonrunner/` package (~1,500 LOC) (a7ec8a2)
554
-
555
- - **Testing**:
556
- - Optimize test suite with `testing.Short()` guards for faster local testing (11fa142, 0f4b03e)
557
- - Add comprehensive tests for merge driver auto-config (6424ebd)
558
- - Add comprehensive tests for 3-way merge functionality (14b2d34)
559
- - Add edge case tests for `getMultiRepoJSONLPaths()` (78c9d74)
560
-
561
- - **CI/CD**:
562
- - Separate Homebrew update workflow with PAT support (739786e)
563
- - Add manual trigger to Homebrew workflow for testing (563c12b)
564
- - Fix Linux checksums extraction in Homebrew workflow (c47f40b)
565
- - Add script to automate Nix vendorHash updates (#235)
566
-
567
- ### Performance
568
-
569
- - Cache `getMultiRepoJSONLPaths()` to avoid redundant calls (7afb143)
570
-
571
- ## [0.22.0] - 2025-11-05
572
-
573
- ### Added
574
-
575
- - **Intelligent Merge Driver** (bd-omx1, 52c5059): Auto-configured git merge driver for JSONL conflict resolution
576
- - Vendors beads-merge algorithm for field-level 3-way merging
577
- - Automatically configured during `bd init` (both interactive and `--quiet` modes)
578
- - Matches issues by identity (id + created_at + created_by)
579
- - Smart field merging: timestamps→max, dependencies→union, status/priority→3-way
580
- - Eliminates most git merge conflicts in `.beads/beads.jsonl`
581
-
582
- - **Onboarding Wizards** (b230a22): New `bd init` workflows for different collaboration models
583
- - `bd init --contributor`: OSS contributor wizard (separate planning repo)
584
- - `bd init --team`: Team collaboration wizard (branch-based workflow)
585
- - Interactive setup with fork detection and remote configuration
586
- - Auto-configures sync settings for each workflow
587
-
588
- - **Migration Tools** (349817a): New `bd migrate-issues` command for cross-repo issue migration
589
- - Migrate issues between repositories while preserving dependencies
590
- - Source filtering (by label, priority, status, type)
591
- - Automatic remote repo detection and push
592
- - Complete multi-repo workflow documentation
593
-
594
- - **Multi-Phase Development Guide** (3ecc16e): Comprehensive workflow examples
595
- - Multi-phase development (feature → integration → deployment)
596
- - Multiple personas (designer, frontend dev, backend dev)
597
- - Best practices for complex projects
598
-
599
- - **Dependency Status** (3acaf1d): Show blocker status in `bd show` output
600
- - Displays "Blocked by N open issues" when dependencies exist
601
- - Shows "Ready to work (no blockers)" when unblocked
602
-
603
- - **DevContainer Support** (247e659): Automatic bd setup in GitHub Codespaces
604
- - Pre-configured Go environment with bd pre-installed
605
- - Auto-detects existing `.beads/` and imports on startup
606
-
607
- - **Landing the Plane Protocol** (095e40d): Session-ending checklist for AI agents
608
- - Quality gates, sync procedures, git cleanup
609
- - Ensures clean handoff between sessions
610
-
611
- ### Fixed
612
-
613
- - **SearchIssues N+1 Query** (bd-5ots, e90e485): Eliminated N+1 query bug in label loading
614
- - Batch-loads labels for all issues in one query
615
- - Significant performance improvement for `bd list` with many labeled issues
616
-
617
- - **Sync Validation** (bd-9bsx, 5438485): Prevent infinite dirty loop in auto-sync
618
- - Added export verification to detect write failures
619
- - Ensures JSONL line count matches database after export
620
-
621
- - **bd edit Direct Mode** (GH #227, d4c73c3): Force `bd edit` to always use direct mode
622
- - Prevents daemon interference with interactive editor sessions
623
- - Resolves hang issues when editing in terminals
624
-
625
- - **SQLite Driver on arm64 macOS** (f9771cd): Fixed missing SQLite driver in arm64 builds
626
- - Explicitly imports CGO-enabled sqlite driver
627
- - Resolves "database driver not found" errors on Apple Silicon
628
-
629
- - **external_ref Type Handling** (e1e58ef): Handle both string and *string in UpdateIssue RPC
630
- - Fixes type mismatch errors in MCP server
631
- - Ensures consistent API behavior
632
-
633
- - **Windows Test Stability** (2ac28b0, 8c5e51e): Skip flaky concurrent tests on Windows
634
- - Prevents false failures in CI/CD
635
- - Improves overall test suite reliability
636
-
637
- ### Changed
638
-
639
- - **Test Suite Performance** (0fc4da7): Optimized test suite for 15-18x speedup
640
- - Reduced redundant database operations
641
- - Parallelized independent test cases
642
- - Faster CI/CD builds
643
-
644
- - **Priority Format** (b8785d3): Added support for P-prefix priority format (P0-P4)
645
- - Accepts both `--priority 1` and `--priority P1`
646
- - More intuitive for GitHub/Jira users
647
-
648
- - **--label Alias** (85ca8c3): Added `--label` as alias for `--labels` in `bd create`
649
- - Both singular and plural forms now work
650
- - Improved CLI ergonomics
651
-
652
- - **--parent Flag in Daemon Mode** (fc89f15): Added `--parent` support in daemon RPC
653
- - MCP server can now set parent relationships
654
- - Parity with CLI functionality
655
-
656
- ### Documentation
657
-
658
- - **Multi-Repo Migration Guide** (9e60ed1): Complete documentation for multi-repo workflows
659
- - OSS contributors, teams, multi-phase development
660
- - Addresses common questions about fork vs branch workflows
661
-
662
- - **beads-merge Setup Instructions** (527e491): Enhanced merge driver documentation
663
- - Installation guide for standalone binary
664
- - Jujutsu configuration examples
665
-
666
- ## [0.21.9] - 2025-11-05
667
-
668
- ### Added
669
-
670
- - **Epic/Child Filtering** (bd-zkl, fbe790a): New `bd list` filters for hierarchical issue queries
671
- - `--ancestor <id>`: Filter by ancestor issue (shows all descendants)
672
- - `--parent <id>`: Filter by direct parent issue
673
- - `--epic <id>`: Alias for `--ancestor` (more intuitive for epic-based workflows)
674
- - `ancestor_id` field added to issue type for efficient epic hierarchy queries
675
-
676
- - **Advanced List Filters**: Pattern matching, date ranges, and empty checks
677
- - **Pattern matching**: `--title-contains`, `--desc-contains`, `--notes-contains` (case-insensitive substring)
678
- - **Date ranges**: `--created-after/before`, `--updated-after/before`, `--closed-after/before`
679
- - **Empty checks**: `--empty-description`, `--no-assignee`, `--no-labels`
680
- - **Priority ranges**: `--priority-min`, `--priority-max`
681
-
682
- - **Database Migration** (bd-bb08, 3bde4b0): Added `ON DELETE CASCADE` to `child_counters` table
683
- - Prevents orphaned child counter records when issues are deleted
684
- - Comprehensive migration tests ensure data integrity
685
-
686
- ### Fixed
687
-
688
- - **Import Timestamp Preservation** (8b9a486): Fixed critical bug where `closed_at` timestamps were lost during sync
689
- - Ensures closed issues retain their original completion timestamps
690
- - Prevents issue resurrection timestamps from overwriting real closure times
691
-
692
- - **Import Config Respect** (7292c85): Import now respects `import.missing_parents` config setting
693
- - Previously ignored config for parent resurrection behavior
694
- - Now correctly honors user's preference for handling missing parents
695
-
696
- - **GoReleaser Homebrew Tap** (37ed10c): Fixed homebrew tap to point to `steveyegge/homebrew-beads`
697
- - Automated homebrew formula updates now work correctly
698
- - Resolves brew installation issues
699
-
700
- - **npm Package Versioning** (626d51d): Added npm-package to version bump script
701
- - Ensures `@beads/bd` npm package stays in sync with CLI releases
702
- - Prevents version mismatches across distribution channels
703
-
704
- - **Linting** (52cf2af): Fixed golangci-lint errors
705
- - Added proper error handling
706
- - Added gosec suppressions for known-safe operations
707
-
708
- ### Changed
709
-
710
- - **RPC Filter Parity** (510ca17): Comprehensive test coverage for CLI vs RPC filter behavior
711
- - Ensures MCP server and CLI have identical filtering semantics
712
- - Validates all new filters work correctly in both modes
713
-
714
- ## [0.21.8] - 2025-11-05
715
-
716
- ### Added
717
-
718
- - **Parent Resurrection** (bd-58c0): Automatic resurrection of deleted parent issues from JSONL history
719
- - Prevents import failures when parent issues have been deleted
720
- - Creates tombstone placeholders for missing hierarchical parents
721
- - Best-effort dependency resurrection from JSONL
722
-
723
- ### Changed
724
-
725
- - **Error Messages**: Improved error messages for missing parent issues
726
- - Old: `"parent issue X does not exist"`
727
- - New: `"parent issue X does not exist and could not be resurrected from JSONL history"`
728
- - **Breaking**: Scripts parsing exact error messages may need updates
729
-
730
- ### Fixed
731
-
732
- - **JSONL Resurrection Logic**: Fixed to use LAST occurrence instead of FIRST (append-only semantics)
733
- - **Version Bump Script**: Added `--tag` and `--push` flags to automate release tagging
734
- - Addresses confusion where version bump doesn't trigger GitHub release
735
- - New usage: `./scripts/bump-version.sh X.Y.Z --commit --tag --push`
736
-
737
- ## [0.21.7] - 2025-11-04
738
-
739
- ### Fixed
740
-
741
- - **Memory Database Connection Pool** (bd-b121): Fixed `:memory:` database handling to use single shared connection
742
- - Prevents "no such table" errors when using in-memory databases
743
- - Ensures connection pool reuses the same in-memory instance
744
- - Critical fix for event-driven daemon mode tests
745
-
746
- - **Test Suite Stability**: Fixed event-driven test flakiness
747
- - Added `waitFor` helper for event-driven testing
748
- - Improved timing-dependent test reliability
749
-
750
- ## [0.21.6] - 2025-11-04
751
-
752
- ### Added
753
-
754
- - **npm Package** (bd-febc): Created `@beads/bd` npm package for Node.js/Claude Code for Web integration
755
- - Native binary downloads from GitHub releases
756
- - Integration tests and release documentation
757
- - Postinstall script for platform-specific binary installation
758
-
759
- - **Template Support** (bd-164b): Issue creation from markdown templates
760
- - Create multiple issues from a single file
761
- - Structured format for bulk issue creation
762
-
763
- - **`bd comment` Alias** (bd-d3f0): Convenient shorthand for `bd comments add`
764
-
765
- ### Changed
766
-
767
- - **Base36 Issue IDs** (GH #213): Switched from hex to Base36 encoding for shorter, more readable IDs
768
- - Reduces ID length while maintaining uniqueness
769
- - More human-friendly format
770
-
771
- ### Fixed
772
-
773
- - **SQLite URI Handling** (bd-c54b): Fixed `file://` URI scheme to prevent query params in filename
774
- - Prevents database corruption from malformed URIs
775
- - Fixed `:memory:` database connection strings
776
-
777
- - **`bd init --no-db` Behavior** (GH #210): Now correctly creates `metadata.json` and `config.yaml`
778
- - Previously failed to set `no-db: true` flag
779
- - Improved metadata-only initialization workflow
780
-
781
- - **Symlink Path Resolution**: Fixed `findDatabaseInTree` to properly resolve symlinks
782
- - **Epic Hierarchy Display**: Fixed `bd show` command to correctly display epic child relationships
783
- - **CI Stability**: Fixed performance thresholds, test eligibility, and lint errors
784
-
785
- ### Dependencies
786
-
787
- - Bumped `github.com/anthropics/anthropic-sdk-go` from 1.14.0 to 1.16.0
788
- - Bumped `fastmcp` from 2.13.0.1 to 2.13.0.2
789
-
790
- ## [0.21.5] - 2025-11-02
791
-
792
- ### Fixed
793
-
794
- - **Critical Double JSON Encoding Bug** (bd-1048, bd-4ec8): Fixed widespread bug in daemon RPC calls where `ResolveID` responses were incorrectly converted using `string(resp.Data)` instead of `json.Unmarshal`. This caused IDs to become double-quoted (`"\"bd-1048\""`) and database lookups to fail. Affected commands:
795
- - `bd show` - nil pointer dereference and 3 instances of double encoding
796
- - `bd dep add/remove/tree` - 5 instances
797
- - `bd label add/remove/list` - 3 instances
798
- - `bd reopen` - 1 instance
799
-
800
- All 12 instances fixed with proper JSON unmarshaling.
801
-
802
- ## [0.21.4] - 2025-11-02
803
-
804
- ### Added
805
-
806
- - **New Commands**:
807
- - `bd status` - Database overview command showing issue counts and stats (bd-28db)
808
- - `bd comment` - Convenient alias for `bd comments add` (bd-d3f0)
809
- - `bd daemons restart` - Restart specific daemon without manual kill/start
810
- - `--json` flag for `bd stale` command
811
-
812
- - **Protected Branch Workflow**:
813
- - `BEADS_DIR` environment variable for custom database location (bd-e16b)
814
- - `sync.branch` configuration for protected branch workflows (bd-b7d2)
815
- - Git worktree management with sparse checkout for sync branches (bd-a4b5)
816
- - Only checks out `.beads/` in worktrees, minimal disk usage
817
- - Only used when `sync.branch` is configured, not for default users
818
- - Comprehensive protected branch documentation
819
-
820
- - **Migration & Validation**:
821
- - Migration inspection tools for AI agents (bd-627d)
822
- - Conflict marker detection in `bd import` and `bd validate`
823
- - Git hooks health check in `bd doctor`
824
- - External reference (`external_ref`) UNIQUE constraint and validation
825
- - `external_ref` now primary matching key for import updates (bd-1022)
826
-
827
- ### Fixed
828
-
829
- - **Critical Fixes**:
830
- - Daemon corruption from git conflicts (bd-8931)
831
- - MCP `set_context` hangs with stdio transport (GH #153)
832
- - Double-release race condition in `importInProgress` flag
833
- - Critical daemon race condition causing stale exports
834
-
835
- - **Configuration & Migration**:
836
- - `bd migrate` now detects and sets missing `issue_prefix` config
837
- - Config system refactored (renamed `config.json` → `metadata.json`)
838
- - Config version update in migrate command
839
-
840
- - **Daemon & RPC**:
841
- - `bd doctor --json` flag not working (bd-6049)
842
- - `bd import` now flushes JSONL immediately for daemon visibility (bd-47f1)
843
- - Panic recovery in RPC `handleConnection` (bd-1048)
844
- - Daemon auto-upgrades database version instead of exiting
845
-
846
- - **Windows Compatibility**:
847
- - Windows test failures (path handling, bd binary references)
848
- - Windows CI: forward slashes in git hook shell scripts
849
- - TestMetricsSnapshot/uptime flakiness on Windows
850
-
851
- - **Code Quality**:
852
- - All golangci-lint errors fixed - linter now passes cleanly
853
- - All gosec, misspell, and unparam linter warnings resolved
854
- - Tightened file permissions and added security exclusions
855
-
856
- ### Changed
857
-
858
- - Daemon automatically upgrades database schema version instead of exiting
859
- - Git worktree management for sync branches uses sparse checkout (`.beads/` only)
860
- - Improved test isolation and performance optimization
861
-
862
- ## [0.21.2] - 2025-11-01
863
-
864
- ### Changed
865
- - Homebrew formula now auto-published in main repo via GoReleaser
866
- - Deprecated separate homebrew-beads tap repository
867
-
868
- ## [0.21.1] - 2025-10-31
869
-
870
- ### Changed
871
- - Version bump for consistency across CLI, MCP server, and plugin
872
-
873
- ## [0.20.1] - 2025-10-31
874
-
875
- ### Breaking Changes
876
-
877
- - **Hash-Based IDs Now Default**: Sequential IDs (bd-1, bd-2) replaced with hash-based IDs (bd-a1b2, bd-f14c)
878
- - 4-character hashes for 0-500 issues
879
- - 5-character hashes for 500-1,500 issues
880
- - 6-character hashes for 1,500-10,000 issues
881
- - Progressive length extension prevents collisions with birthday paradox math
882
- - **Migration required**: Run `bd migrate` to upgrade schema (removes `issue_counters` table)
883
- - Existing databases continue working - migration is opt-in
884
- - Dramatically reduces merge conflicts in multi-worker/multi-branch workflows
885
- - Eliminates ID collision issues when multiple agents create issues concurrently
886
-
887
- ### Removed
888
-
889
- - **Sequential ID Generation**: Removed `SyncAllCounters()`, `AllocateNextID()`, and collision remapping logic (bd-c7af, bd-8e05, bd-4c74)
890
- - Hash IDs handle collisions by extending hash length, not remapping
891
- - `issue_counters` table removed from schema
892
- - `--resolve-collisions` flag removed from import (no longer needed)
893
- - 400+ lines of obsolete collision handling code removed
894
-
895
- ### Changed
896
-
897
- - **Collision Handling**: Automatic hash extension on collision instead of ID remapping
898
- - Much simpler and more reliable than sequential remapping
899
- - No cross-branch coordination needed
900
- - Birthday paradox ensures extremely low collision rates
901
-
902
- ### Migration Notes
903
-
904
- **For users upgrading from 0.20.0 or earlier:**
905
-
906
- 1. Run `bd migrate` to detect and upgrade old database schemas
907
- 2. Database continues to work without migration, but you'll see warnings
908
- 3. Hash IDs provide better multi-worker reliability at the cost of non-numeric IDs
909
- 4. Old sequential IDs like `bd-152` become hash IDs like `bd-f14c`
910
-
911
- See README.md for hash ID format details and birthday paradox collision analysis.
912
-
913
- ## [0.20.0] - 2025-10-30
914
-
915
- ### Added
916
- - **Hash-Based IDs**: New collision-resistant ID system (bd-168, bd-166, bd-167)
917
- - 6-character hash IDs with progressive 7/8-char fallback on collision
918
- - Opt-in via `.beads/config.toml` with `id_mode = "hash"`
919
- - Migration tool: `bd migrate --to-hash-ids` for existing databases
920
- - Prefix-optional ID parsing (e.g., `bd-abc123` or just `abc123`)
921
- - Hierarchical child ID generation for discovered-from relationships
922
- - **Substring ID Matching**: All bd commands now support partial ID matching (bd-170)
923
- - `bd show abc` matches any ID containing "abc" (e.g., `bd-abc123`)
924
- - Ambiguous matches show helpful error with all candidates
925
- - **Daemon Registry**: Multi-daemon management for multiple workspaces (bd-07b8c8)
926
- - `bd daemons list` shows all running daemons across workspaces
927
- - `bd daemons health` detects version mismatches and stale sockets
928
- - `bd daemons logs <workspace>` for per-daemon log viewing
929
- - `bd daemons killall` to restart all daemons after upgrades
930
-
931
- ### Fixed
932
- - **Test Stability**: Deprecated sequence-ID collision tests
933
- - Kept `TestFiveCloneCollision` for hash-ID multi-clone testing
934
- - Fixed `TestTwoCloneCollision` to use merge instead of rebase
935
- - **Linting**: golangci-lint v2.5.0 compatibility
936
- - Added `version: 2` field to `.golangci.yml`
937
- - Renamed `exclude` to `exclude-patterns` for v3 format
938
-
939
- ### Changed
940
- - **Multiple bd Detection**: Warning when multiple bd binaries in PATH (PR #182)
941
- - Prevents confusion from version conflicts
942
- - Shows locations of all bd binaries found
943
-
944
- ## [0.17.7] - 2025-10-26
945
-
946
- ### Fixed
947
- - **Test Isolation**: Export test failures due to hash caching between subtests
948
- - Added `ClearAllExportHashes()` method to SQLiteStorage for test isolation
949
- - Export tests now properly reset state between subtests
950
- - Fixes intermittent test failures when running full test suite
951
-
952
- ## [0.17.2] - 2025-10-25
953
-
954
- ### Added
955
- - **Configurable Sort Policy**: `bd ready --sort` flag for work queue ordering (bd-147)
956
- - `hybrid` (default): Priority-weighted by staleness
957
- - `priority`: Strict priority ordering for autonomous systems
958
- - `oldest`: Pure FIFO for long-tail work
959
- - **Release Automation**: New scripts for streamlined releases
960
- - `scripts/release.sh`: Full automated release (version bump, tests, tag, Homebrew, install)
961
- - `scripts/update-homebrew.sh`: Automated Homebrew formula updates
962
-
963
- ### Fixed
964
- - **Critical**: Database reinitialization test re-landed with CI fixes (bd-130)
965
- - Windows: Fixed git path handling (forward slash normalization)
966
- - Nix: Skip test when git unavailable
967
- - JSON: Increased scanner buffer to 64MB for large issues
968
- - **Bug**: Stale daemon socket detection (bd-137)
969
- - MCP server now health-checks cached connections before use
970
- - Auto-reconnect with exponential backoff on stale sockets
971
- - Handles daemon restarts/upgrades gracefully
972
- - **Linting**: Fixed all errcheck warnings in production code (bd-58)
973
- - Proper error handling for database resources and transactions
974
- - Graceful EOF handling in interactive input
975
- - **Linting**: Fixed revive style issues (bd-56)
976
- - Removed unused parameters, renamed builtin shadowing
977
- - **Linting**: Fixed goconst warnings (bd-116)
978
-
979
- ## [0.17.0] - 2025-10-24
980
-
981
- ### Added
982
- - **Git Hooks**: Automatic installation prompt during `bd init` (bd-51)
983
- - Eliminates race condition between auto-flush and git commits
984
- - Pre-commit hook: Flushes pending changes immediately before commit
985
- - Post-merge hook: Imports updated JSONL after pull/merge
986
- - Optional installation with Y/n prompt (defaults to yes)
987
- - See [examples/git-hooks/README.md](examples/git-hooks/README.md) for details
988
- - **Duplicate Detection**: New `bd duplicates` command for finding and merging duplicate issues (bd-119, bd-203)
989
- - Automated duplicate detection with content-based matching
990
- - `--auto-merge` flag for batch merging duplicates
991
- - `--dry-run` mode to preview merges before execution
992
- - Helps maintain database cleanliness after imports
993
- - **External Reference Import**: Smart import matching using `external_ref` field (bd-66-74, GH #142)
994
- - Issues with `external_ref` match by reference first, not content
995
- - Enables hybrid workflows with Jira, GitHub, Linear
996
- - Updates existing issues instead of creating duplicates
997
- - Database index on `external_ref` for fast lookups
998
- - **Multi-Database Warning**: Detect and warn about nested beads databases (bd-75)
999
- - Prevents accidental creation of multiple databases in hierarchy
1000
- - Helps users avoid confusion about which database is active
1001
-
1002
- ### Fixed
1003
- - **Critical**: Database reinitialization data loss bug (bd-130, DATABASE_REINIT_BUG.md)
1004
- - Fixed bug where removing `.beads/` and running `bd init` would lose git-tracked issues
1005
- - Now correctly imports from JSONL during initialization
1006
- - Added comprehensive tests (later reverted due to CI issues on Windows/Nix)
1007
- - **Critical**: Foreign key constraint regression (bd-62, GH #144)
1008
- - Pinned modernc.org/sqlite to v1.38.2 to avoid FK violations
1009
- - Prevents database corruption from upstream regression
1010
- - **Critical**: Install script safety (GH #143 by @marcodelpin)
1011
- - Prevents shell corruption from directory deletion during install
1012
- - Restored proper error codes for safer installation
1013
- - **Bug**: Daemon auto-start reliability (bd-137)
1014
- - Daemon now responsive immediately, runs initial sync in background
1015
- - Fixes timeout issues when git pull is slow
1016
- - Skip daemon-running check for forked child process
1017
- - **Bug**: Dependency timestamp churn during auto-import (bd-45, bd-137)
1018
- - Auto-import no longer updates timestamps on unchanged dependencies
1019
- - Eliminates perpetually dirty JSONL from metadata changes
1020
- - **Bug**: Import reporting accuracy (bd-49, bd-88)
1021
- - `bd import` now correctly reports "X updated, Y unchanged" instead of "0 updated"
1022
- - Better visibility into import operation results
1023
- - **Bug**: Memory database handling
1024
- - Fixed :memory: database connection with shared cache mode
1025
- - Proper URL construction for in-memory testing
1026
-
1027
- ### Changed
1028
- - **Removed**: Deprecated `bd repos` command
1029
- - Global daemon architecture removed in favor of per-project daemons
1030
- - Eliminated cross-project database confusion
1031
- - **Documentation**: Major reorganization and improvements
1032
- - Condensed README, created specialized docs (QUICKSTART.md, ADVANCED.md, etc.)
1033
- - Enhanced "Why not GitHub Issues?" FAQ section
1034
- - Added Beadster to Community & Ecosystem section
1035
-
1036
- ### Performance
1037
- - Test coverage improvements: 46.0% → 57.7% (+11.7%)
1038
- - Added tests for RPC, storage, cmd/bd helpers
1039
- - New test files: coverage_test.go, helpers_test.go, epics_test.go
1040
-
1041
- ### Community
1042
- - Community contribution by @marcodelpin (install script safety fixes)
1043
- - Dependabot integration for automated dependency updates
1044
-
1045
- ## [0.16.0] - 2025-10-23
1046
-
1047
- ### Added
1048
- - **Automated Releases**: GoReleaser workflow for cross-platform binaries (bd-46)
1049
- - Automatic GitHub releases on version tags
1050
- - Linux, macOS, Windows binaries for amd64 and arm64
1051
- - Checksums and changelog generation included
1052
- - **PyPI Automation**: Automated MCP server publishing to PyPI
1053
- - GitHub Actions workflow publishes beads-mcp on version tags
1054
- - Eliminates manual PyPI upload step
1055
- - **Sandbox Mode**: `--sandbox` flag for Claude Code integration (bd-35)
1056
- - Isolated environment for AI agent experimentation
1057
- - Prevents production database modifications during testing
1058
-
1059
- ### Fixed
1060
- - **Critical**: Idempotent import timestamp churn (bd-84)
1061
- - Prevents timestamp updates when issue content unchanged
1062
- - Reduces JSONL churn and git noise from repeated imports
1063
- - **Bug**: Windows CI test failures (bd-60, bd-99)
1064
- - Fixed path separator issues and file handling on Windows
1065
- - Skipped flaky tests to stabilize CI
1066
-
1067
- ### Changed
1068
- - **Configuration Migration**: Unified config management with Viper (bd-40-44, bd-78)
1069
- - Migrated from manual env var handling to Viper
1070
- - Bound all global flags to Viper for consistency
1071
- - Kept `bd config` independent from Viper for modularity
1072
- - Added comprehensive configuration tests
1073
- - **Documentation Refactor**: Improved documentation structure
1074
- - Condensed main README
1075
- - Created specialized guides (QUICKSTART.md, CONFIG.md, etc.)
1076
- - Enhanced FAQ and community sections
1077
-
1078
- ### Testing
1079
- - Hardened `issueDataChanged` with type-safe comparisons
1080
- - Improved test isolation and reliability
1081
-
1082
- ## [0.15.0] - 2025-10-23
1083
-
1084
- ### Added
1085
- - **Configuration System**: New `bd config` command for managing configuration (GH #115)
1086
- - Environment variable definitions with validation
1087
- - Configuration file support (TOML/YAML/JSON)
1088
- - Get/set/list/unset commands for user-friendly management
1089
- - Validation and type checking for config values
1090
- - Documentation in CONFIG.md
1091
-
1092
- ### Fixed
1093
- - **MCP Server**: Smart routing for lifecycle status changes in `update` tool (GH #123)
1094
- - `update(status="closed")` now routes to `close()` tool to respect approval workflows
1095
- - `update(status="open")` now routes to `reopen()` tool to respect approval workflows
1096
- - Prevents bypass of Claude Code approval settings for lifecycle events
1097
- - bd CLI remains unopinionated; routing happens only in MCP layer
1098
- - Users can now safely auto-approve benign updates (priority, notes) without exposing closure bypass
1099
-
1100
- ## [0.14.0] - 2025-10-22
1101
-
1102
- ### Added
1103
- - **Lifecycle Safety Documentation**: Complete documentation for UnderlyingDB() usage (bd-64)
1104
- - Added tracking guidelines for database lifecycle safety
1105
- - Documented transaction management best practices
1106
- - Prevents UAF (use-after-free) bugs in extensions
1107
-
1108
- ### Fixed
1109
- - **Critical**: Git worktree detection and warnings (bd-73)
1110
- - Added automatic detection when running in git worktrees
1111
- - Displays prominent warning if daemon mode is active in worktree
1112
- - Prevents daemon from committing/pushing to wrong branch
1113
- - Documents `--no-daemon` flag as solution for worktree users
1114
- - **Critical**: Multiple daemon race condition (bd-54)
1115
- - Implemented file locking (`daemon.lock`) to prevent multiple daemons per repository
1116
- - Uses `flock` on Unix, `LockFileEx` on Windows for process-level exclusivity
1117
- - Lock held for daemon lifetime, automatically released on exit
1118
- - Eliminates race conditions in concurrent daemon start attempts
1119
- - Backward compatible: Falls back to PID check for pre-lock daemons during upgrades
1120
- - **Bug**: daemon.lock tracked in git
1121
- - Removed daemon.lock from git tracking
1122
- - Added to .gitignore to prevent future commits
1123
- - **Bug**: Regression in Nix Flake (#110)
1124
- - Fixed flake build issues
1125
- - Restored working Nix development environment
1126
-
1127
- ### Changed
1128
- - UnderlyingDB() deprecated for most use cases
1129
- - New UnderlyingConn(ctx) provides safer scoped access
1130
- - Reduced risk of UAF bugs in database extensions
1131
- - Updated EXTENDING.md with migration guide
1132
-
1133
- ### Documentation
1134
- - Complete release process documentation in RELEASING.md
1135
- - Enhanced EXTENDING.md with lifecycle safety patterns
1136
- - Added UnderlyingDB() tracking guidelines
1137
-
1138
- ## [0.11.0] - 2025-10-22
1139
-
1140
- ### Added
1141
- - **Issue Merging**: New `bd merge` command for consolidating duplicate issues (bd-7, bd-11-17)
1142
- - Merge multiple source issues into a single target issue
1143
- - Automatically migrates all dependencies and dependents to target
1144
- - Updates text references (bd-X mentions) across all issue fields
1145
- - Closes source issues with "Merged into bd-Y" reason
1146
- - Supports `--dry-run` for validation without changes
1147
- - Example: `bd merge bd-42 bd-43 --into bd-41`
1148
- - **Multi-ID Operations**: Batch operations for increased efficiency (bd-195, #101)
1149
- - `bd update`: Update multiple issues at once
1150
- - `bd show`: View multiple issues in single call
1151
- - `bd label add/remove`: Apply labels to multiple issues
1152
- - `bd close`: Close multiple issues with one command
1153
- - `bd reopen`: Reopen multiple issues together
1154
- - Example: `bd close bd-1 bd-2 bd-3 --reason "Done"`
1155
- - **Daemon RPC Improvements**: Enhanced sync operations (bd-2)
1156
- - `bd sync` now works correctly in daemon mode
1157
- - Export operations properly supported via RPC
1158
- - Prevents database access conflicts during sync
1159
- - **Acceptance Criteria Alias**: Added `--acceptance-criteria` flag (bd-228, #102)
1160
- - Backward-compatible alias for `--acceptance` in `bd update`
1161
- - Improves clarity and matches field name
1162
-
1163
- ### Fixed
1164
- - **Critical**: Test isolation and database pollution (bd-1, bd-15, bd-19, bd-52)
1165
- - Comprehensive test isolation ensuring tests never pollute production database
1166
- - Fixed stress test issues writing 1000+ test issues to production
1167
- - Quarantined RPC benchmarks to prevent pollution
1168
- - Added database isolation canary tests
1169
- - **Critical**: Daemon cache staleness (bd-49)
1170
- - Daemon now detects external database modifications via mtime check
1171
- - Prevents serving stale data after external `bd import`, `rm bd.db`, etc.
1172
- - Cache automatically invalidates when DB file changes
1173
- - **Critical**: Counter desync after deletions (bd-49)
1174
- - Issue counters now sync correctly after bulk deletions
1175
- - Prevents ID gaps and counter drift
1176
- - **Critical**: Labels and dependencies not persisted in daemon mode (#101)
1177
- - Fixed label operations failing silently in daemon mode
1178
- - Fixed dependency operations not saving in daemon mode
1179
- - Both now correctly propagate through RPC layer
1180
- - **Daemon sync support**: `bd sync` command now works in daemon mode (bd-2)
1181
- - Previously crashed with nil pointer when daemon running
1182
- - Export operations now properly routed through RPC
1183
- - **Acceptance flag normalization**: Unified `--acceptance` flag behavior (bd-228, #102)
1184
- - Added `--acceptance-criteria` as clearer alias
1185
- - Both flags work identically for backward compatibility
1186
- - **Auto-import Git conflicts**: Better detection of merge conflicts (bd-270)
1187
- - Auto-import detects and warns about unresolved Git merge conflicts
1188
- - Prevents importing corrupted JSONL with conflict markers
1189
- - Clear instructions for resolving conflicts
1190
-
1191
- ### Changed
1192
- - **BREAKING**: Removed global daemon socket fallback (bd-231)
1193
- - Each project now must use its own local daemon (.beads/bd.sock)
1194
- - Prevents cross-project daemon connections and database pollution
1195
- - Migration: Stop any global daemon and restart with `bd daemon` in each project
1196
- - Warning displayed if old global socket (~/.beads/bd.sock) is found
1197
- - **Database cleanup**: Project database cleaned from 1000+ to 55 issues
1198
- - Removed accumulated test pollution from stress testing
1199
- - Renumbered issues for clean ID space (bd-1 through bd-55)
1200
- - Better test isolation prevents future pollution
1201
-
1202
- ### Deprecated
1203
- - Global daemon socket support (see BREAKING change above)
1204
-
1205
- ## [0.10.0] - 2025-10-20
1206
-
1207
- ### Added
1208
- - **Agent Onboarding**: New `bd onboard` command for agent-first documentation (bd-173)
1209
- - Outputs structured instructions for agents to integrate bd into documentation
1210
- - Bootstrap workflow: Add 'BEFORE ANYTHING ELSE: run bd onboard' to AGENTS.md
1211
- - Agent adapts instructions to existing project structure
1212
- - More agentic approach vs. direct string replacement
1213
- - Updates README with new bootstrap workflow
1214
-
1215
- ## [0.9.11] - 2025-10-20
1216
-
1217
- ### Added
1218
- - **Labels Documentation**: Comprehensive LABELS.md guide (bd-159, bd-163)
1219
- - Complete label system documentation with workflows and best practices
1220
- - Common label patterns (components, domains, size, quality gates, releases)
1221
- - Advanced filtering techniques and integration examples
1222
- - Added Labels section to README with quick reference
1223
-
1224
- ### Fixed
1225
- - **Critical**: MCP server crashes on None/null responses (bd-172, fixes #79)
1226
- - Added null safety checks in `list_issues()`, `ready()`, and `stats()` methods
1227
- - Returns empty arrays/dicts instead of crashing on None responses
1228
- - Prevents TypeError when daemon returns empty results
1229
-
1230
- ## [0.9.10] - 2025-10-18
1231
-
1232
- ### Added
1233
- - **Label Filtering**: Enhanced `bd list` command with label-based filtering (bd-161)
1234
- - `--label` (or `-l`): Filter by multiple labels with AND semantics (must have ALL)
1235
- - `--label-any`: Filter by multiple labels with OR semantics (must have AT LEAST ONE)
1236
- - Examples:
1237
- - `bd list --label backend,urgent`: Issues with both 'backend' AND 'urgent'
1238
- - `bd list --label-any frontend,backend`: Issues with either 'frontend' OR 'backend'
1239
- - Works in both daemon and direct modes
1240
- - Includes comprehensive test coverage
1241
- - **Log Rotation**: Automatic daemon log rotation with configurable limits (bd-154)
1242
- - Prevents unbounded log file growth for long-running daemons
1243
- - Configurable via environment variables: `BEADS_DAEMON_LOG_MAX_SIZE`, `BEADS_DAEMON_LOG_MAX_BACKUPS`, `BEADS_DAEMON_LOG_MAX_AGE`, `BEADS_DAEMON_LOG_COMPRESS`
1244
- - Optional compression of rotated logs
1245
- - Defaults: 50MB max size, 7 backups, 30 day retention, compression enabled
1246
- - **Batch Deletion**: Enhanced `bd delete` command with batch operations (bd-127)
1247
- - Delete multiple issues at once: `bd delete bd-1 bd-2 bd-3 --force`
1248
- - Read from file: `bd delete --from-file deletions.txt --force`
1249
- - Dry-run mode: `--dry-run` to preview deletions before execution
1250
- - Cascade mode: `--cascade` to recursively delete all dependents
1251
- - Force mode: `--force` to orphan dependents instead of failing
1252
- - Atomic transactions: all deletions succeed or none do
1253
- - Comprehensive statistics: tracks deleted issues, dependencies, labels, and events
1254
-
1255
- ### Fixed
1256
- - **Critical**: `bd list --status all` showing 0 issues (bd-148)
1257
- - Status filter now treats "all" as special value meaning "show all statuses"
1258
- - Previously treated "all" as literal status value, matching no issues
1259
-
1260
- ## [0.9.9] - 2025-10-17
1261
-
1262
- ### Added
1263
- - **Daemon RPC Architecture**: Production-ready RPC protocol for client-daemon communication (bd-110, bd-111, bd-112, bd-114, bd-117)
1264
- - Unix socket-based RPC enables faster command execution via long-lived daemon process
1265
- - Automatic client detection with graceful fallback to direct mode
1266
- - Serializes SQLite writes and batches git operations to prevent concurrent access issues
1267
- - Resolves database corruption, git lock contention, and ID counter conflicts with multiple agents
1268
- - Comprehensive integration tests and stress testing with 4+ concurrent agents
1269
- - **Issue Deletion**: `bd delete` command for removing issues with comprehensive cleanup
1270
- - Safely removes issues from database and JSONL export
1271
- - Cleans up dependencies and references to deleted issues
1272
- - Works correctly with git-based workflows
1273
- - **Issue Restoration**: `bd restore` command for recovering compacted/deleted issues
1274
- - Restores issues from git history when needed
1275
- - Preserves references and dependency relationships
1276
- - **Prefix Renaming**: `bd rename-prefix` command for batch ID prefix changes
1277
- - Updates all issue IDs and text references throughout the database
1278
- - Useful for project rebranding or namespace changes
1279
- - **Comprehensive Testing**: Added scripttest-based integration tests (#59)
1280
- - End-to-end coverage for CLI workflows
1281
- - Tests for init command edge cases (bd-70)
1282
-
1283
- ### Fixed
1284
- - **Critical**: Metadata errors causing crashes on first import (bd-663)
1285
- - Auto-import now treats missing metadata as first import instead of failing
1286
- - Eliminates initialization errors in fresh repositories
1287
- - **Critical**: N+1 query pattern in auto-import (bd-666)
1288
- - Replaced per-issue queries with batch fetching
1289
- - Dramatically improves performance for large imports
1290
- - **Critical**: Duplicate issue imports (bd-421)
1291
- - Added deduplication logic to prevent importing same issue multiple times
1292
- - Maintains data integrity during repeated imports
1293
- - **Bug**: Auto-flush missing after renumber/rename-prefix (bd-346)
1294
- - Commands now properly export to JSONL after completion
1295
- - Ensures git sees latest changes immediately
1296
- - **Bug**: Renumber ID collision with UUID temp IDs (bd-345)
1297
- - Uses proper UUID-based temporary IDs to prevent conflicts during renumbering
1298
- - ID counter now correctly syncs after renumbering operations
1299
- - **Bug**: Collision resolution dependency handling (bd-437)
1300
- - Uses unchecked dependency addition during collision remapping
1301
- - Prevents spurious cycle detection errors
1302
- - **Bug**: macOS crashes documented (closes #3, bd-87)
1303
- - Added CGO_ENABLED=1 workaround documentation for macOS builds
1304
-
1305
- ### Changed
1306
- - CLI commands now prefer RPC when daemon is running
1307
- - Improved error reporting and diagnostics for RPC failures
1308
- - More consistent exit codes and status messages
1309
- - Internal command architecture refactored for RPC client/server sharing
1310
- - Reduced code duplication between direct and daemon modes
1311
- - Improved reliability of background operations
1312
- - Ready work sort order flipped to show oldest issues first
1313
- - Helps prioritize long-standing work items
1314
-
1315
- ### Performance
1316
- - Faster command execution through RPC-backed daemon (up to 10x improvement)
1317
- - N+1 query elimination in list/show operations
1318
- - Reduced write amplification from improved auto-flush behavior
1319
- - Cycle detection performance benchmarks added (bd-311)
1320
-
1321
- ### Testing
1322
- - Integration tests for daemon RPC request/response flows
1323
- - End-to-end coverage for delete/restore lifecycles
1324
- - Regression tests for metadata handling, auto-flush, ID counter sync
1325
- - Comprehensive tests for collision detection in auto-import (bd-401)
1326
-
1327
- ### Documentation
1328
- - Release process documentation added (RELEASING.md)
1329
- - Multiple workstreams warning banner for development coordination
1330
-
1331
- ## [0.9.8] - 2025-10-16
1332
-
1333
- ### Added
1334
- - **Background Daemon Mode**: `bd daemon` command for continuous auto-sync (#bd-386)
1335
- - Watches for changes and automatically exports to JSONL
1336
- - Monitors git repository for incoming changes and auto-imports
1337
- - Production-ready with graceful shutdown, PID file management, and signal handling
1338
- - Eliminates manual export/import in active development workflows
1339
- - **Git Synchronization**: `bd sync` command for automated git workflows (#bd-378)
1340
- - One-command sync: stage, commit, pull, push JSONL changes
1341
- - Automatic merge conflict resolution with collision remapping
1342
- - Status reporting shows sync progress and any issues
1343
- - Ideal for distributed teams and CI/CD integration
1344
- - **Issue Compaction**: `bd compact` command to summarize old closed issues (bd-254-264)
1345
- - AI-powered summarization using Claude Haiku
1346
- - Reduces database size while preserving essential information
1347
- - Configurable thresholds for age, dependencies, and references
1348
- - Compaction status visible in `bd show` output
1349
- - **Label and Title Filtering**: Enhanced `bd list` command (#45, bd-269)
1350
- - Filter by labels: `bd list --label bug,critical`
1351
- - Filter by title: `bd list --title "auth"`
1352
- - Combine with status/priority filters
1353
- - **List Output Formats**: `bd list --format` flag for custom output (PR #46)
1354
- - Format options: `default`, `compact`, `detailed`, `json`
1355
- - Better integration with scripts and automation tools
1356
- - **MCP Reopen Support**: Reopen closed issues via MCP server
1357
- - Claude Desktop plugin can now reopen issues
1358
- - Useful for revisiting completed work
1359
- - **Cross-Type Cycle Prevention**: Dependency cycles detected across all types (bd-312)
1360
- - Prevents A→B→A cycles even when mixing `blocks`, `related`, etc.
1361
- - Semantic validation for parent-child direction
1362
- - Diagnostic warnings when cycles detected
1363
-
1364
- ### Fixed
1365
- - **Critical**: Auto-import collision skipping bug (bd-393, bd-228)
1366
- - Import would silently skip collisions instead of remapping
1367
- - Could cause data loss when merging branches
1368
- - Now correctly applies collision resolution with remapping
1369
- - **Critical**: Transaction state corruption (bd-221)
1370
- - Nested transactions could corrupt database state
1371
- - Fixed with proper transaction boundary handling
1372
- - **Critical**: Concurrent temp file collisions (bd-306, bd-373)
1373
- - Multiple `bd` processes would collide on shared `.tmp` filename
1374
- - Now uses PID suffix for temp files: `.beads/issues.jsonl.tmp.12345`
1375
- - **Critical**: Circular dependency detection gaps (bd-307)
1376
- - Some cycle patterns were missed by detection algorithm
1377
- - Enhanced with comprehensive cycle prevention
1378
- - **Bug**: False positive merge conflict detection (bd-313, bd-270)
1379
- - Auto-import would detect conflicts when none existed
1380
- - Fixed with improved Git conflict marker detection
1381
- - **Bug**: Import timeout with large issue sets (bd-199)
1382
- - 200+ issue imports would timeout
1383
- - Optimized import performance
1384
- - **Bug**: Collision resolver missing ID counter sync (bd-331)
1385
- - After remapping, ID counters weren't updated
1386
- - Could cause duplicate IDs in subsequent creates
1387
- - **Bug**: NULL handling in statistics for empty databases (PR #37)
1388
- - `bd stats` would crash on newly initialized databases
1389
- - Fixed NULL value handling in GetStatistics
1390
-
1391
- ### Changed
1392
- - Compaction removes snapshot/restore (simplified to permanent decay)
1393
- - Export file writing refactored to avoid Windows Defender false positives (PR #31)
1394
- - Error handling improved in auto-import and fallback paths (PR #47)
1395
- - Reduced cyclomatic complexity in main.go (PR #48)
1396
- - MCP integration tests fixed and linting cleaned up (PR #40)
1397
-
1398
- ### Performance
1399
- - Cycle detection benchmarks added (bd-311)
1400
- - Import optimization for large issue sets
1401
- - Export uses PID-based temp files to avoid lock contention
1402
-
1403
- ### Community
1404
- - Merged PR #31: Windows Defender mitigation for export
1405
- - Merged PR #37: Fix NULL handling in statistics
1406
- - Merged PR #38: Nix flake for declarative builds
1407
- - Merged PR #40: MCP integration test fixes
1408
- - Merged PR #45: Label and title filtering for bd list
1409
- - Merged PR #46: Add --format flag to bd list
1410
- - Merged PR #47: Error handling consistency
1411
- - Merged PR #48: Cyclomatic complexity reduction
1412
-
1413
- ## [0.9.2] - 2025-10-14
1414
-
1415
- ### Added
1416
- - **One-Command Dependency Creation**: `--deps` flag for `bd create` (#18)
1417
- - Create issues with dependencies in a single command
1418
- - Format: `--deps type:id` or just `--deps id` (defaults to blocks)
1419
- - Multiple dependencies: `--deps discovered-from:bd-20,blocks:bd-15`
1420
- - Whitespace-tolerant parsing
1421
- - Particularly useful for AI agents creating discovered-from issues
1422
- - **External Reference Tracking**: `external_ref` field for linking to external trackers
1423
- - Link bd issues to GitHub, Jira, Linear, etc.
1424
- - Example: `bd create "Issue" --external-ref gh-42`
1425
- - `bd update` supports updating external references
1426
- - Tracked in JSONL for git portability
1427
- - **Metadata Storage**: Internal metadata table for system state
1428
- - Stores import hash for idempotent auto-import
1429
- - Enables future extensibility for system preferences
1430
- - Auto-migrates existing databases
1431
- - **Windows Support**: Complete Windows 11 build instructions (#10)
1432
- - Tested with mingw-w64
1433
- - Full CGo support documented
1434
- - PATH setup instructions
1435
- - **Go Extension Example**: Complete working example of database extensions (#15)
1436
- - Demonstrates custom table creation
1437
- - Shows cross-layer queries joining with issues
1438
- - Includes test suite and documentation
1439
- - **Issue Type Display**: `bd list` now shows issue type in output (#17)
1440
- - Better visibility: `bd-1 [P1] [bug] open`
1441
- - Helps distinguish bugs from features at a glance
1442
-
1443
- ### Fixed
1444
- - **Critical**: Dependency tree deduplication for diamond dependencies (bd-85, #1)
1445
- - Fixed infinite recursion in complex dependency graphs
1446
- - Prevents duplicate nodes at same level
1447
- - Handles multiple blockers correctly
1448
- - **Critical**: Hash-based auto-import replaces mtime comparison (bd-84)
1449
- - Git pull updates mtime but may not change content
1450
- - Now uses SHA256 hash to detect actual changes
1451
- - Prevents unnecessary imports after git operations
1452
- - **Critical**: Parallel issue creation race condition (PR #8, bd-66)
1453
- - Multiple processes could generate same ID
1454
- - Replaced in-memory counter with atomic database counter
1455
- - Syncs counters after import to prevent collisions
1456
- - Comprehensive test coverage
1457
-
1458
- ### Changed
1459
- - Auto-import now uses content hash instead of modification time
1460
- - Dependency tree visualization improved for complex graphs
1461
- - Better error messages for dependency operations
1462
-
1463
- ### Community
1464
- - Merged PR #8: Parallel issue creation fix
1465
- - Merged PR #10: Windows build instructions
1466
- - Merged PR #12: Fix quickstart EXTENDING.md link
1467
- - Merged PR #14: Better enable Go extensions
1468
- - Merged PR #15: Complete Go extension example
1469
- - Merged PR #17: Show issue type in list output
1470
-
1471
- ## [0.9.1] - 2025-10-14
1472
-
1473
- ### Added
1474
- - **Incremental JSONL Export**: Major performance optimization
1475
- - Dirty issue tracking system to only export changed issues
1476
- - Auto-flush with 5-second debounce after CRUD operations
1477
- - Automatic import when JSONL is newer than database
1478
- - `--no-auto-flush` and `--no-auto-import` flags for manual control
1479
- - Comprehensive test coverage for auto-flush/import
1480
- - **ID Space Partitioning**: Explicit ID assignment for parallel workers
1481
- - `bd create --id worker1-100` for controlling ID allocation
1482
- - Enables multiple agents to work without conflicts
1483
- - Documented in CLAUDE.md for agent workflows
1484
- - **Auto-Migration System**: Seamless database schema upgrades
1485
- - Automatically adds dirty_issues table to existing databases
1486
- - Silent migration on first access after upgrade
1487
- - No manual intervention required
1488
-
1489
- ### Fixed
1490
- - **Critical**: Race condition in dirty tracking (TOCTOU bug)
1491
- - Could cause data loss during concurrent operations
1492
- - Fixed by tracking specific exported IDs instead of clearing all
1493
- - **Critical**: Export with filters cleared all dirty issues
1494
- - Status/priority filters would incorrectly mark non-matching issues as clean
1495
- - Now only clears issues that were actually exported
1496
- - **Bug**: Malformed ID detection never worked
1497
- - SQLite CAST returns 0 for invalid strings, not NULL
1498
- - Now correctly detects non-numeric ID suffixes like "bd-abc"
1499
- - No false positives on legitimate zero-prefixed IDs
1500
- - **Bug**: Inconsistent dependency dirty marking
1501
- - Duplicated 20+ lines of code in AddDependency/RemoveDependency
1502
- - Refactored to use shared markIssuesDirtyTx() helper
1503
- - Fixed unchecked error in import.go when unmarshaling JSON
1504
- - Fixed unchecked error returns in test cleanup code
1505
- - Removed duplicate test code in dependencies_test.go
1506
- - Fixed Go version in go.mod (was incorrectly set to 1.25.2)
1507
-
1508
- ### Changed
1509
- - Export now tracks which specific issues were exported
1510
- - ClearDirtyIssuesByID() added (ClearDirtyIssues() deprecated with race warning)
1511
- - Dependency operations use shared dirty-marking helper (DRY)
1512
-
1513
- ### Performance
1514
- - Incremental export: Only writes changed issues (vs full export)
1515
- - Regex caching in ID replacement: 1.9x performance improvement
1516
- - Automatic debounced flush prevents excessive I/O
1517
-
1518
- ## [0.9.0] - 2025-10-12
1519
-
1520
- ### Added
1521
- - **Collision Resolution System**: Automatic ID remapping for import collisions
1522
- - Reference scoring algorithm to minimize updates during remapping
1523
- - Word-boundary regex matching to prevent false replacements
1524
- - Automatic updating of text references and dependencies
1525
- - `--resolve-collisions` flag for safe branch merging
1526
- - `--dry-run` flag to preview collision detection
1527
- - **Export/Import with JSONL**: Git-friendly text format
1528
- - Dependencies embedded in JSONL for complete portability
1529
- - Idempotent import (exact matches detected)
1530
- - Collision detection (same ID, different content)
1531
- - **Ready Work Algorithm**: Find issues with no open blockers
1532
- - `bd ready` command shows unblocked work
1533
- - `bd blocked` command shows what's waiting
1534
- - **Dependency Management**: Four dependency types
1535
- - `blocks`: Hard blocker (affects ready work)
1536
- - `related`: Soft relationship
1537
- - `parent-child`: Epic/subtask hierarchy
1538
- - `discovered-from`: Track issues discovered during work
1539
- - **Database Discovery**: Auto-find database in project hierarchy
1540
- - Walks up directory tree like git
1541
- - Supports `$BEADS_DB` environment variable
1542
- - Falls back to `~/.beads/default.db`
1543
- - **Comprehensive Documentation**:
1544
- - README.md with 900+ lines of examples and FAQs
1545
- - CLAUDE.md for AI agent integration patterns
1546
- - SECURITY.md with security policy and best practices
1547
- - TEXT_FORMATS.md analyzing JSONL approach
1548
- - EXTENDING.md for database extension patterns
1549
- - GIT_WORKFLOW.md for git integration
1550
- - **Examples**: Real-world integration patterns
1551
- - Python agent implementation
1552
- - Bash agent script
1553
- - Git hooks for automatic export/import
1554
- - Branch merge workflow with collision resolution
1555
- - Claude Desktop MCP integration (coming soon)
1556
-
1557
- ### Changed
1558
- - Switched to JSONL as source of truth (from binary SQLite)
1559
- - SQLite database now acts as ephemeral cache
1560
- - Issue IDs generated with numerical max (not alphabetical)
1561
- - Export sorts issues by ID for consistent git diffs
1562
-
1563
- ### Security
1564
- - SQL injection protection via allowlisted field names
1565
- - Input validation for all issue fields
1566
- - File path validation for database operations
1567
- - Warnings about not storing secrets in issues
1568
-
1569
- ## [0.1.0] - Initial Development
1570
-
1571
- ### Added
1572
- - Core issue tracking (create, update, list, show, close)
1573
- - SQLite storage backend
1574
- - Dependency tracking with cycle detection
1575
- - Label support
1576
- - Event audit trail
1577
- - Full-text search
1578
- - Statistics and reporting
1579
- - `bd init` for project initialization
1580
- - `bd quickstart` interactive tutorial
1581
-
1582
- ---
1583
-
1584
- ## Version History
1585
-
1586
- - **0.9.8** (2025-10-16): Daemon mode, git sync, compaction, critical bug fixes
1587
- - **0.9.2** (2025-10-14): Community PRs, critical bug fixes, and --deps flag
1588
- - **0.9.1** (2025-10-14): Performance optimization and critical bug fixes
1589
- - **0.9.0** (2025-10-12): Pre-release polish and collision resolution
1590
- - **0.1.0**: Initial development version
1591
-
1592
- ## Upgrade Guide
1593
-
1594
- ### Upgrading to 0.9.8
1595
-
1596
- No breaking changes. All changes are backward compatible:
1597
- - **bd daemon**: New optional background service for auto-sync workflows
1598
- - **bd sync**: New optional git integration command
1599
- - **bd compact**: New optional command for issue summarization (requires Anthropic API key)
1600
- - **--format flag**: Optional new feature for `bd list`
1601
- - **Label/title filters**: Optional new filters for `bd list`
1602
- - **Bug fixes**: All critical fixes are transparent to users
1603
-
1604
- Simply pull the latest version and rebuild:
1605
- ```bash
1606
- go install github.com/steveyegge/beads/cmd/bd@latest
1607
- # or
1608
- git pull && go build -o bd ./cmd/bd
1609
- ```
1610
-
1611
- **Note**: The `bd compact` command requires an Anthropic API key in `$ANTHROPIC_API_KEY` environment variable. All other features work without any additional setup.
1612
-
1613
- ### Upgrading to 0.9.2
1614
-
1615
- No breaking changes. All changes are backward compatible:
1616
- - **--deps flag**: Optional new feature for `bd create`
1617
- - **external_ref**: Optional field, existing issues unaffected
1618
- - **Metadata table**: Auto-migrates on first use
1619
- - **Bug fixes**: All critical fixes are transparent to users
1620
-
1621
- Simply pull the latest version and rebuild:
1622
- ```bash
1623
- go install github.com/steveyegge/beads/cmd/bd@latest
1624
- # or
1625
- git pull && go build -o bd ./cmd/bd
1626
- ```
1627
-
1628
- ### Upgrading to 0.9.1
1629
-
1630
- No breaking changes. All changes are backward compatible:
1631
- - **Auto-migration**: The dirty_issues table is automatically added to existing databases
1632
- - **Auto-flush/import**: Enabled by default, improves workflow (can disable with flags if needed)
1633
- - **ID partitioning**: Optional feature, use `--id` flag only if needed for parallel workers
1634
-
1635
- If you're upgrading from 0.9.0, simply pull the latest version. Your existing database will be automatically migrated on first use.
1636
-
1637
- ### Upgrading to 0.9.0
1638
-
1639
- No breaking changes. The JSONL export format is backward compatible.
1640
-
1641
- If you have issues in your database:
1642
- 1. Run `bd export -o .beads/issues.jsonl` to create the text file
1643
- 2. Commit `.beads/issues.jsonl` to git
1644
- 3. Add `.beads/*.db` to `.gitignore`
1645
-
1646
- New collaborators can clone the repo and run:
1647
- ```bash
1648
- bd import -i .beads/issues.jsonl
1649
- ```
1650
-
1651
- The SQLite database will be automatically populated from the JSONL file.
1652
-
1653
- ## Future Releases
1654
-
1655
- See open issues tagged with milestone markers for planned features in upcoming releases.
1656
-
1657
- For version 1.0, see: `bd dep tree bd-8` (the 1.0 milestone epic)