Commit Graph

22 Commits

Author SHA1 Message Date
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
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