Commit Graph

549 Commits

Author SHA1 Message Date
Steve Yegge
0858bdb7ed Implement hash ID migration tool (bd-173)
- Add migrate-hash-ids command for converting sequential to hash-based IDs
- Integrate into bd migrate --to-hash-ids for transparent user experience
- Generate hash IDs for top-level issues, hierarchical IDs for children
- Update all references: dependencies, comments, text mentions
- Auto-backup database before migration
- Comprehensive tests covering migration scenarios
- Update AGENTS.md with migration documentation

Amp-Thread-ID: https://ampcode.com/threads/T-492f81db-5b0e-437a-b54d-ae4525dd7827
Co-authored-by: Amp <amp@ampcode.com>
2025-10-30 16:28:13 -07:00
Steve Yegge
d348d90cbe bd sync: 2025-10-30 16:23:24 2025-10-30 16:23:24 -07:00
Steve Yegge
ccb4047e03 bd sync: 2025-10-30 15:42:07 2025-10-30 15:42:07 -07:00
Steve Yegge
95fdce967c bd sync: 2025-10-30 15:41:49 2025-10-30 15:41:49 -07:00
Steve Yegge
9876d825a6 bd sync: 2025-10-30 15:21:53 2025-10-30 15:21:53 -07:00
Steve Yegge
3ed2aa07cb Implement hierarchical child ID generation (bd-171)
- Add GetNextChildID to storage interface for generating child IDs
- Implement in SQLiteStorage with atomic counter using child_counters table
- Implement in MemoryStorage with in-memory counter
- Add --parent flag to bd create command
- Support hierarchical IDs (bd-a3f8e9.1, bd-a3f8e9.1.5) in CreateIssue
- Validate parent exists when creating hierarchical issues
- Enforce max depth of 3 levels
- Update ID validation to accept hierarchical IDs with dots
- Add comprehensive tests for child ID generation
- Manual testing confirms: sequential children, nested hierarchies, depth enforcement
2025-10-30 14:42:08 -07:00
Steve Yegge
6c31329ef8 bd sync: 2025-10-30 14:27:40 2025-10-30 14:27:40 -07:00
Steve Yegge
1940357482 bd sync: 2025-10-30 14:27:33 2025-10-30 14:27:33 -07:00
Steve Yegge
edd39ef4a3 Remove polluted issues.jsonl (beads.jsonl is the real database)
Amp-Thread-ID: https://ampcode.com/threads/T-f6b7244f-58ec-4b8b-b54d-fe8b6d59f398
Co-authored-by: Amp <amp@ampcode.com>
2025-10-30 14:27:23 -07:00
Steve Yegge
bbe36b6527 bd sync: 2025-10-30 14:24:54 2025-10-30 14:24:54 -07:00
Steve Yegge
7a1ad14509 bd sync: 2025-10-30 14:12:20 2025-10-30 14:12:20 -07:00
Steve Yegge
6f6f040cf4 bd sync: 2025-10-30 14:04:13 2025-10-30 14:04:13 -07:00
Steve Yegge
4e12f23470 bd sync: 2025-10-30 14:02:09 2025-10-30 14:02:09 -07:00
Steve Yegge
a3f2dda482 Clarify prefix-optional CLI design in bd-165 and bd-170
Updated hash ID design to explicitly document hybrid approach:
- Storage: Always use prefix (bd-a3f8e9)
- CLI input: Prefix optional (a3f8e9 or bd-a3f8e9 both work)
- CLI output: Always show prefix (for external clarity)

Rationale:
 External references are unambiguous: "Fixed in bd-a3f8e9"
 CLI convenience: Less typing when using bd commands
 Grep-able: Can search for bd-a3f8e9 across files
 Future-proof: Supports multiple database prefixes
 No conflict with git SHAs in commit messages

Updated issues:
- bd-165: Added "ID Structure" section with prefix behavior
- bd-170: Detailed prefix parsing logic and examples

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 00:33:05 -07:00
Steve Yegge
b078ade2a8 Move collision analysis to docs/ and create bd-191
- Moved collision-resolution-failure-analysis.md to docs/
  (better organization with other architecture docs)

- Created bd-191: Add --parent flag to bd list command
  Useful for listing children of an epic, will be even better
  with hierarchical IDs (bd-165)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 00:27:59 -07:00
Steve Yegge
312af83f63 Update hash ID design to use hierarchical children (bd-165)
Major simplification of the hash ID proposal:
- Remove separate alias system (was adding complexity)
- Add hierarchical sequential children: bd-{hash}.1.2.3
- Up to 3 levels deep for natural work breakdown structure
- Git-style prefix matching instead of #aliases

Benefits:
 Simpler architecture (no alias counter to coordinate)
 Human-friendly IDs where it matters (epic children)
 Natural WBS encoding in IDs
 Collision-free at top level, rare within epics
 -1000 LOC vs dual-system approach

Updated issues:
- bd-165: Core epic with new design doc
- bd-167: child_counters table (not alias table)
- bd-168: hierarchical child ID generation
- bd-169: JSONL format stores hierarchical IDs
- bd-170: Git-style prefix matching (not aliases)
- bd-171: Hierarchical child logic (not alias conflicts)
- bd-173: Migration preserves hierarchy
- bd-174: Tree visualization (not alias commands)
- bd-176: Updated docs plan

Timeline: ~8 weeks (down from 9 due to simplification)

Also added collision-resolution-failure-analysis.md documenting
current architecture issues to inform the redesign.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 00:26:36 -07:00
Steve Yegge
2d53ba347a bd sync: 2025-10-29 23:47:57 2025-10-29 23:47:57 -07:00
Steve Yegge
0b51f8c865 bd sync: 2025-10-29 23:20:22 2025-10-29 23:20:22 -07:00
Steve Yegge
5aed853646 bd sync: 2025-10-29 23:14:46 2025-10-29 23:14:46 -07:00
Steve Yegge
ea38485718 Update issues 2025-10-29 23:00:42 -07:00
Steve Yegge
24fcec03f4 bd sync: 2025-10-29 22:55:15 2025-10-29 22:55:15 -07:00
Steve Yegge
9ba77e981f bd sync: 2025-10-29 21:57:23 2025-10-29 21:57:23 -07:00
Steve Yegge
c34b93fa1a Fix bd-160: Implement JSONL integrity validation and prevent export deduplication data loss
## Problem
Export deduplication feature broke when JSONL and export_hashes diverged
(e.g., after git pull/reset). This caused exports to skip issues that
weren't actually in the file, leading to silent data loss.

## Solution
1. JSONL integrity validation before every export
   - Store JSONL file hash after export
   - Validate hash before export, clear export_hashes if mismatch
   - Automatically recovers from git operations changing JSONL

2. Clear export_hashes on all imports
   - Prevents stale hashes from causing future export failures
   - Import operations invalidate export_hashes state

3. Add Storage interface methods:
   - GetJSONLFileHash/SetJSONLFileHash for integrity tracking
   - ClearAllExportHashes for recovery

## Tests Added
- TestJSONLIntegrityValidation: Unit tests for validation logic
- TestImportClearsExportHashes: Verifies imports clear hashes
- TestExportIntegrityAfterJSONLTruncation: Simulates git reset (would have caught bd-160)
- TestExportIntegrityAfterJSONLDeletion: Tests recovery from file deletion
- TestMultipleExportsStayConsistent: Tests repeated export integrity

## Follow-up
Created bd-179 epic for remaining integration test gaps (multi-repo sync,
daemon auto-sync, corruption recovery tests).

Closes bd-160
2025-10-29 21:57:15 -07:00
Steve Yegge
d5400dcdeb bd sync: 2025-10-29 21:37:39 2025-10-29 21:37:39 -07:00
Steve Yegge
c6476fe2da bd sync: 2025-10-29 21:30:19 2025-10-29 21:30:19 -07:00
Steve Yegge
a7f86341a7 bd sync: 2025-10-29 21:21:13 2025-10-29 21:21:15 -07:00
Steve Yegge
c9704f8bd4 Fix export: clear stale export_hashes 2025-10-29 21:19:29 -07:00
Steve Yegge
98b153f2a7 bd sync: apply rename detection from import 2025-10-29 21:16:13 -07:00
Steve Yegge
a001e4ee7b bd sync: 2025-10-29 21:14:31 2025-10-29 21:14:31 -07:00
Steve Yegge
c9e6757f9e bd sync: 2025-10-29 20:48:48 2025-10-29 20:48:48 -07:00
Steve Yegge
4a9ee2f1e7 bd sync: 2025-10-29 20:48:00 2025-10-29 20:48:00 -07:00
Steve Yegge
4d62cb944c bd sync: 2025-10-29 20:45:07 2025-10-29 20:45:07 -07:00
Steve Yegge
5766bcb496 Import remapped issues after collision 2025-10-29 20:02:51 -07:00
Steve Yegge
5b752903ae bd sync: 2025-10-29 20:02:48 2025-10-29 20:02:48 -07:00
Steve Yegge
08bdac1e14 bd daemon sync: 2025-10-29 19:52:19 2025-10-29 19:52:19 -07:00
Steve Yegge
6e6e7eb1f5 bd daemon sync: 2025-10-29 19:52:15 2025-10-29 19:52:15 -07:00
Steve Yegge
ba18638da2 bd sync: 2025-10-29 19:51:50 2025-10-29 19:51:50 -07:00
Steve Yegge
71cc695a7d Add issue bd-102: --json flag consistency 2025-10-29 19:49:26 -07:00
Steve Yegge
e972295c1e Sync beads database 2025-10-29 19:45:50 -07:00
Steve Yegge
17a20748cb Mark in-progress issues as open 2025-10-29 19:44:54 -07:00
Steve Yegge
0f3b826010 Resolve merge conflict: use local JSONL 2025-10-29 19:32:03 -07:00
Steve Yegge
98c39c2e6f bd sync: 2025-10-29 19:31:28 2025-10-29 19:31:28 -07:00
Steve Yegge
3fd3760a28 bd daemon export: 2025-10-29 19:12:54 2025-10-29 19:12:54 -07:00
Steve Yegge
1873764370 bd daemon export: 2025-10-29 19:11:58 2025-10-29 19:11:58 -07:00
Steve Yegge
a9a26275d5 bd daemon export: 2025-10-29 19:11:28 2025-10-29 19:11:28 -07:00
Steve Yegge
6045e87d55 bd daemon export: 2025-10-29 19:08:03 2025-10-29 19:08:03 -07:00
Steve Yegge
cb68ca3781 bd daemon sync: 2025-10-29 19:06:11 2025-10-29 19:06:11 -07:00
Steve Yegge
8e85ececd2 bd sync: 2025-10-29 17:49:41 2025-10-29 17:49:41 -07:00
Steve Yegge
5743b48ca2 bd sync: 2025-10-29 16:43:32 2025-10-29 16:43:32 -07:00
Steve Yegge
29326d84c3 bd sync: 2025-10-29 16:15:13 2025-10-29 16:15:13 -07:00