Commit Graph

284 Commits

Author SHA1 Message Date
Steve Yegge
ac7d8c683a Sync bd issues 2025-10-23 16:53:13 -07:00
Steve Yegge
57fb0e39f4 Sync issues 2025-10-23 16:41:12 -07:00
Steve Yegge
dc64823c15 Update issues 2025-10-23 14:26:36 -07:00
Steve Yegge
e8eb0cb6ae Add bd config command for external integration configuration
- Add GetAllConfig/DeleteConfig methods to storage interface
- Implement config set/get/list/unset subcommands with JSON support
- Add comprehensive tests for config operations
- Create CONFIG.md with full documentation and examples
- Update README.md with config section
- Support namespace conventions (jira.*, linear.*, github.*, custom.*)

Closes bd-60

Amp-Thread-ID: https://ampcode.com/threads/T-33db7481-de7c-475e-b562-6afb7fb4bc7a
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 14:14:22 -07:00
Steve Yegge
68071df49a Auto-sync beads database 2025-10-23 13:37:55 -07:00
Steve Yegge
189dafc6be Auto-sync beads database 2025-10-23 13:29:11 -07:00
Steve Yegge
9e5e375e1e Document MCP auto-approval configuration in PLUGIN.md
Add comprehensive section covering:
- enabledMcpjsonServers for server-level auto-approval
- enableAllProjectMcpServers for project-level trust
- Security trade-offs and recommendations
- Limitation: no per-tool approval granularity

Closes bd-59

Amp-Thread-ID: https://ampcode.com/threads/T-39fad2a0-46a9-410e-a74d-7db2b16c488d
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 13:28:55 -07:00
Steve Yegge
4f1d1a2cca Fix MCP dep tool parameter names to match CLI (issue_id/depends_on_id)
- Changed from confusing from_id/to_id to clear issue_id/depends_on_id
- Matches CLI convention: bd dep add [issue-id] [depends-on-id]
- Updated all tests and implementations
- Fixes GH #113 where Claude Code was creating dependencies backwards

Closes bd-58

Amp-Thread-ID: https://ampcode.com/threads/T-f01aca11-a10f-4908-9ce6-7e1734f2068f
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 13:07:44 -07:00
Steve Yegge
10a313e3a6 Add integration tests for worktree workflow with separate databases
- Created test_worktree_separate_dbs.py with 6 comprehensive tests
- Verifies recommended workflow: one .beads database per worktree
- Tests confirm MCP works with BEADS_USE_DAEMON=0 in worktrees
- Validates database isolation, git syncing, and --no-daemon flag
- All tests passing

Addresses GH #119

Amp-Thread-ID: https://ampcode.com/threads/T-57d5c589-0522-4059-8183-2f0f7f1dccba
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 13:06:05 -07:00
Steve Yegge
c6b0b9a7c6 bd sync: 2025-10-23 11:01:12 2025-10-23 11:01:12 -07:00
Steve Yegge
4f560379f2 Add description parameter to bd update command and MCP server
Fixes #114 and #122 by adding --description/-d flag to bd update CLI
and description parameter to MCP update_issue tool.

Changes:
- CLI: Added --description flag to updateCmd
- RPC: Added Description field to UpdateArgs
- Daemon: Updated updatesFromArgs to handle description
- MCP: Added description to update_issue, UpdateIssueParams, and clients
- Storage: description already supported in allowedUpdateFields

Tested in both daemon and direct modes.
2025-10-23 11:00:19 -07:00
Steve Yegge
c835b81d72 Fix: init command now respects --db flag and BEADS_DB env var
Fixes #118 - Users can now initialize databases outside project directory

Changes:
- Check BEADS_DB env var in init command (PersistentPreRun skipped for init)
- Use global dbPath from --db flag or BEADS_DB, else default to .beads/{prefix}.db
- Use canonical path comparison (filepath.Abs + Clean) instead of strings.Contains
- Only create .beads/ directory when database is actually local
- Ensure parent directory exists for custom database paths
- Add comprehensive tests for --db flag, BEADS_DB env var, and edge cases
- Fix test isolation by resetting global dbPath in test setup

Tests:
- Custom path with --db flag
- Custom path with BEADS_DB env var
- Custom path containing ".beads" substring (prevents false positive)
- Flag precedence over env var
- All existing tests still pass

Amp-Thread-ID: https://ampcode.com/threads/T-04e2c94f-894a-4b49-8132-980450b2300d
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 10:58:35 -07:00
Steve Yegge
62fe485165 Merge beads database 2025-10-23 10:34:38 -07:00
Steve Yegge
0e752fc346 Auto-sync beads database
Amp-Thread-ID: https://ampcode.com/threads/T-d539a677-a9b2-4c0b-b431-cbde1d922731
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 10:34:13 -07:00
Steve Yegge
9c2f25bea5 Track bd-56 (GH #120 fix) 2025-10-23 10:31:12 -07:00
Steve Yegge
e4b0820449 Fix: Preserve timestamps during import (GH-121)
- Change validateBatchIssues() to only set timestamps if IsZero()
- Preserves historical timestamps from external systems (Jira, GitHub)
- Fixes dirty git repo after importing unchanged JSONL
- New issues still get current timestamps as before
- Add daemon.lock to .gitignore

Closes bd-55
Fixes #121

Amp-Thread-ID: https://ampcode.com/threads/T-e53c4a96-38dd-440a-9b8d-824992d33a40
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 09:40:08 -07:00
Steve Yegge
5bc298a175 Add bd-74: Investigate jujutsu integration 2025-10-23 09:24:17 -07:00
Steve Yegge
2807697e9b Upgrade database to v0.14.0 2025-10-23 09:21:32 -07:00
Steve Yegge
5a6177b4bc Fix bd-73: Add git worktree detection and warnings
- Implement robust worktree detection using git-dir vs git-common-dir comparison
- Add prominent warning when daemon mode is active in a worktree
- Warn in 3 places: initial connection, auto-start, and daemon start command
- Show shared database path and clarify BEADS_AUTO_START_DAEMON behavior
- Document limitations and solutions in README.md and AGENTS.md
- Add comprehensive tests for detection and path truncation

Fixes #55

Amp-Thread-ID: https://ampcode.com/threads/T-254eb9e3-1a42-42d7-afdf-b7ca2d2dcb8b
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 23:05:00 -07:00
Steve Yegge
3fae41cb35 Add UnderlyingConn(ctx) for safer scoped DB access
- Add UnderlyingConn method to Storage interface
- Implement in SQLiteStorage for scoped connection access
- Useful for migrations and DDL operations
- Add comprehensive tests for basic access, DDL, context cancellation, and concurrent connections
- Closes bd-66, bd-22, bd-24, bd-38, bd-39, bd-56

Amp-Thread-ID: https://ampcode.com/threads/T-e47963af-4ace-4914-a0ae-4737f77be6ff
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 22:05:58 -07:00
Steve Yegge
fb64a33b99 Close completed and irrelevant issues (bd-23, bd-25, bd-60-62) 2025-10-22 21:38:32 -07:00
Steve Yegge
3601496aee fix: Remove daemon.lock from git tracking and add to .gitignore
Amp-Thread-ID: https://ampcode.com/threads/T-9f74f16c-82b7-4778-af41-2689e17a51ca
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 21:24:59 -07:00
Steve Yegge
a7d6ffcb2d Add lifecycle safety docs and tracking for UnderlyingDB() (bd-64)
- Added comprehensive documentation with 5 safety rules and best practices
- Added atomic.Bool closed field for lifecycle tracking
- Added IsClosed() method to check storage state
- All existing tests pass with -race flag

Amp-Thread-ID: https://ampcode.com/threads/T-e10b5206-4acd-4b9c-915d-423f958e350b
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 20:29:31 -07:00
Steve Yegge
f7a92667fd Close completed issues: bd-57, bd-19, bd-69
- bd-57: VC successfully ported to use beads as Go library
- bd-19: Compact command now works through daemon RPC interface
- bd-69: MCP tests fixed - bd_client.py handles array responses
- bd-56: Downgraded to P3 (atomic merge transactions)

All major P1 blockers resolved except bd-64 (lifecycle safety docs/tests)

Amp-Thread-ID: https://ampcode.com/threads/T-c2c18266-ccf2-4615-a2f1-be134e8f1c0d
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 20:06:20 -07:00
Steve Yegge
bfd6aa4336 Update EXTENDING.md with UnderlyingDB() documentation
- Add recommended UnderlyingDB() usage pattern with examples
- Document safety warnings (never close, no pool changes, keep txns short)
- Add when to use UnderlyingDB() vs sql.Open() guidance
- Update VC example to show embedding pattern with UnderlyingDB()
- Cross-reference bd-64 safety requirements

Closes bd-65

Amp-Thread-ID: https://ampcode.com/threads/T-c2c18266-ccf2-4615-a2f1-be134e8f1c0d
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 19:43:54 -07:00
Steve Yegge
73bacf4e95 Update issues: close bd-71 (GH #107 already fixed)
Amp-Thread-ID: https://ampcode.com/threads/T-b76d6a2f-1114-4a6a-9c92-29de46a8c195
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 19:23:36 -07:00
Steve Yegge
e62ea7f9d7 Add --title flag to bd create command
Agents often try to use --title flag instead of positional argument.
Now accepts both:
- --title alone
- positional argument alone
- both if they match (fails if different)

Amp-Thread-ID: https://ampcode.com/threads/T-43a84f3d-8342-425b-885d-bcd5aefd951a
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 18:06:55 -07:00
Steve Yegge
ee52316f90 Fix GH #103: Add --rename-on-import flag to bd sync command
- bd sync now accepts --rename-on-import flag
- Flag is passed through to import command
- Fixes error where prefix mismatch suggested non-existent flag
- Closes bd-70

Amp-Thread-ID: https://ampcode.com/threads/T-b76d6a2f-1114-4a6a-9c92-29de46a8c195
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 17:59:06 -07:00
Steve Yegge
935470a3d8 Fix MCP close method signature bug (GH #107, bd-67)
- Fix BdDaemonClient.close() to accept issue_id and reason parameters
- Remove uv.lock from repo

Amp-Thread-ID: https://ampcode.com/threads/T-0017f48d-605c-410f-9a77-db62153c9357
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 17:53:28 -07:00
Steve Yegge
42762188ed Fix MCP close tool method signature error (GH #107)
Renamed BdDaemonClient.close() cleanup method to cleanup() to eliminate
method name collision with async close(params) method for closing issues.

Root cause: Python method resolution meant the non-async close(self)
cleanup method was shadowing the async close(self, params) method that
closes issues, causing 'takes 1 positional argument but 2 were given'.

Changes:
- bd_daemon_client.py: Renamed close() -> cleanup()
- server.py: Updated cleanup code to call cleanup() instead of close()
- test_lifecycle.py: Updated tests to use cleanup()

All close-related tests pass. Fixes GitHub issue #107.
Tracked in bd-67 (closed).
2025-10-22 17:43:11 -07:00
Steve Yegge
a777e97287 bd sync: 2025-10-22 17:37:45 2025-10-22 17:37:45 -07:00
Steve Yegge
da521d3471 Update issue tracker: add UnderlyingDB safety and docs issues
Filed during code review of UnderlyingDB() implementation:
- bd-64: Add lifecycle safety docs and tests
- bd-65: Update EXTENDING.md with UnderlyingDB() usage
- bd-66: Consider adding UnderlyingConn() for safer scoped access

Also updated bd-57 status to in_progress.

Amp-Thread-ID: https://ampcode.com/threads/T-a6715beb-fe92-4dee-b931-3c9327124875
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 17:24:15 -07:00
Steve Yegge
6829372c39 Add UnderlyingDB() method for extension database access
Implements database platform layer for extensions like VC to create
their own tables in the same SQLite database.

Changes:
- Add UnderlyingDB() *sql.DB to Storage interface
- Implement in SQLiteStorage to expose underlying connection
- Add comprehensive test suite (5 tests, -race clean)
- Tests cover: basic access, extension tables, concurrency,
  lifecycle safety, and transaction behavior

This allows VC to host its executor_instances and other tables
alongside beads core tables with proper FK enforcement.

Related issues: bd-57, bd-64, bd-65, bd-66

Amp-Thread-ID: https://ampcode.com/threads/T-a6715beb-fe92-4dee-b931-3c9327124875
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 17:19:57 -07:00
Steve Yegge
67cd529f72 Update issue tracker state 2025-10-22 15:49:57 -07:00
Steve Yegge
df36c11fe3 Sync beads database before merge
Amp-Thread-ID: https://ampcode.com/threads/T-dc82df76-5eea-407c-bfdb-86270a028621
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 14:30:04 -07:00
Steve Yegge
f62e640add Add Beads Library Integration epic (bd-58) with 4 phased child tasks
- bd-59: Phase 1 - Add Beads Dependency (Non-Breaking)
- bd-60: Phase 2 - Implement VCStorage Wrapper
- bd-61: Phase 3 - Migration Path & Database Schema Alignment
- bd-62: Phase 4 - Gradual Cutover & Production Rollout

This epic addresses the ~3000 lines of duplicated SQLite code and establishes
a clean architecture where VC extends Beads via wrapper without modifying the
Beads library. Estimated effort: 3-4 sprints, Priority: P2
2025-10-22 14:14:28 -07:00
Steve Yegge
e291f464ee Fix bd-54: Prevent multiple daemon instances via file locking
- Implemented daemon.lock using flock (Unix) and LockFileEx (Windows)
- Lock acquired before PID file, held for daemon lifetime
- Eliminates race conditions in concurrent daemon starts
- Backward compatible: falls back to PID check for old daemons
- Updated isDaemonRunning() to check lock availability
- All tests pass including new lock and backward compatibility tests

Amp-Thread-ID: https://ampcode.com/threads/T-0e2627f4-03f9-4024-bb4b-21d23d296300
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 13:59:58 -07:00
Steve Yegge
d1d3fcdf02 Rename issues.jsonl → beads.jsonl (fresh start after test pollution)
Amp-Thread-ID: https://ampcode.com/threads/T-b160879b-cb6f-4e4c-9348-abcc69ee5048
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 12:40:14 -07:00
Steve Yegge
1363ac74c8 Re-add .beads/issues.jsonl with clean state 2025-10-22 12:32:26 -07:00
Steve Yegge
edb6016949 Stop tracking .beads/issues.jsonl - reset due to test pollution 2025-10-22 12:30:34 -07:00
Steve Yegge
d9e1ee9dd6 Make merge command idempotent for safe retry after partial failures (bd-26)
- Added mergeResult struct to track operations (added vs skipped)
- Check if source issues already closed before attempting to close
- Track dependencies migrated vs already existed
- Count text references updated
- Display detailed breakdown of operations in output
- Updated help text to clarify idempotent behavior
- Added comprehensive tests for idempotent retry scenarios
2025-10-22 12:24:08 -07:00
Steve Yegge
bafc1a9ded Close bd-16, merge bd-53 into bd-26, start bd-26
- Close bd-16: transaction support superseded by idempotency approach
- Merge duplicate bd-53 into bd-26
- Start bd-26: Make merge command idempotent

Amp-Thread-ID: https://ampcode.com/threads/T-95a37593-fd67-4e99-bc84-ace580b4776d
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 11:57:16 -07:00
Steve Yegge
4ef995b0e4 Document merge command and AI duplicate detection workflow (bd-29)
- Add comprehensive merge command documentation to README.md
- Add AI agent duplicate detection workflow to AGENTS.md
- Include command syntax, examples, and best practices
- Close bd-29

Amp-Thread-ID: https://ampcode.com/threads/T-95a37593-fd67-4e99-bc84-ace580b4776d
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 11:48:12 -07:00
Steve Yegge
a7ce986555 Update issues: closed bd-18 2025-10-22 11:31:14 -07:00
Steve Yegge
cbe5daae1f Close completed merge tasks and test pollution issues 2025-10-22 01:08:24 -07:00
Steve Yegge
47b892731a Auto-sync after renumber: remove deleted issues, add comment
Amp-Thread-ID: https://ampcode.com/threads/T-5ad38d33-28ba-4f47-997a-b0d7e0331c26
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 00:56:33 -07:00
Steve Yegge
6571e31063 Renumber issues from bd-1070 to bd-26
Counter now reset to 26. Next issue will be bd-27 instead of bd-1071.

Amp-Thread-ID: https://ampcode.com/threads/T-5ad38d33-28ba-4f47-997a-b0d7e0331c26
Co-authored-by: Amp <amp@ampcode.com>
2025-10-22 00:55:04 -07:00
Steve Yegge
d665882041 Mark bd-19 as open 2025-10-22 00:50:15 -07:00
Steve Yegge
3b782a8e24 Delete test pollution and renumber issues (151→55) 2025-10-22 00:48:46 -07:00
Steve Yegge
75844586ce Update issues: close bd-1 2025-10-22 00:45:08 -07:00