bd sync: 2025-10-31 14:24:43
This commit is contained in:
@@ -44,6 +44,7 @@
|
||||
{"id":"bd-3e307cd4","content_hash":"2d95ea3b6835139e1fd266bbdcd0f683b5b4d26a1041516c4883beeb37b11ede","title":"File change test issue","description":"","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-29T19:11:28.425601-07:00","updated_at":"2025-10-30T17:05:25.998926-07:00"}
|
||||
{"id":"bd-3e9ddc31","content_hash":"4e03660281dbe2c069617fc8d723d546d6e5eb386142c0359b862747867a1b90","title":"Replace getStorageForRequest with Direct Access","description":"Replace all getStorageForRequest(req) calls with s.storage","acceptance_criteria":"- No references to getStorageForRequest() in codebase (except in deleted file)\n- All handlers use s.storage directly\n- Code compiles without errors\n\nFiles to update:\n- internal/rpc/server_issues_epics.go (~8 calls)\n- internal/rpc/server_labels_deps_comments.go (~4 calls)\n- internal/rpc/server_compact.go (~2 calls)\n- internal/rpc/server_export_import_auto.go (~2 calls)\n- internal/rpc/server_routing_validation_diagnostics.go (~1 call)\n\nPattern: store, err := s.getStorageForRequest(req) → store := s.storage","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-27T23:20:10.393759-07:00","updated_at":"2025-10-30T17:05:26.028551-07:00","closed_at":"2025-10-28T14:08:38.06721-07:00"}
|
||||
{"id":"bd-3ee2c7e9","content_hash":"161d171e25f28a7b244c8c4350601edfc2e1cae9c2a62f64f930612e06b88035","title":"Add \"bd daemons\" command for multi-daemon management","description":"Add a new \"bd daemons\" command with subcommands to manage daemon processes across all beads repositories/worktrees. Should show all running daemons with metadata (version, workspace, uptime, last sync), allow stopping/restarting individual daemons, auto-clean stale processes, view logs, and show exclusive lock status.","design":"Subcommands:\n- list: Show all running daemons with metadata (workspace, PID, version, socket path, uptime, last activity, exclusive lock status)\n- stop \u003cpath|pid\u003e: Gracefully stop a specific daemon\n- restart \u003cpath|pid\u003e: Stop and restart daemon\n- killall: Emergency stop all daemons\n- health: Verify each daemon responds to ping\n- logs \u003cpath\u003e: View daemon logs\n\nFeatures:\n- Auto-clean stale sockets/dead processes\n- Discovery: Scan for .beads/bd.sock files + running processes\n- Communication: Use existing socket protocol, add GET /status endpoint for metadata","status":"in_progress","priority":1,"issue_type":"epic","created_at":"2025-10-26T16:53:40.970042-07:00","updated_at":"2025-10-30T17:05:25.987593-07:00"}
|
||||
{"id":"bd-3ef2","content_hash":"81e9eb5607d91db39191d1918b38c93eb98b91466ac689b3a3699bc2cf8b1b73","title":"Update examples/ directories to remove --resolve-collisions usage","description":"Examples reference removed flag: claude-code-skill/references/CLI_REFERENCE.md (lines 266-283), git-hooks/README.md (line 66), github-import/README.md (line 183). Update to reflect hash ID behavior.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-10-31T14:11:05.113854-07:00","updated_at":"2025-10-31T14:23:03.830162-07:00","closed_at":"2025-10-31T14:23:03.830162-07:00"}
|
||||
{"id":"bd-3f80d9e0","title":"Improve internal/daemon test coverage (currently 22.5%)","description":"Daemon functionality needs better coverage:\n- Auto-start behavior\n- Lock file management\n- Discovery mechanisms\n- Connection handling\n- Error recovery","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-29T14:06:30.832728-07:00","updated_at":"2025-10-30T17:05:25.995834-07:00"}
|
||||
{"id":"bd-46381404","content_hash":"1963d7e754c6eaafba9cbefc6d9f38cc4d872386d9d100ecbba7d7f24cbbcea3","title":"Test database naming","description":"","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-27T18:27:28.309676-07:00","updated_at":"2025-10-30T17:05:25.999162-07:00"}
|
||||
{"id":"bd-469a585a","content_hash":"2f0e8212084a4d53ec447be4c470117d4c2d697e1836ac8bd40a68d151f6083e","title":"Test hash ID issue","description":"","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-30T14:23:58.175147-07:00","updated_at":"2025-10-30T17:05:26.01936-07:00","closed_at":"2025-10-30T14:24:02.855391-07:00"}
|
||||
@@ -57,6 +58,7 @@
|
||||
{"id":"bd-4d80b7b1","content_hash":"0cad3e22d722ff045a29f218962fb00bd8265a1cfc82c5b70f29ffe1a40e4088","title":"Investigate and upgrade to modernc.org/sqlite 1.39.1+","description":"We had to pin modernc.org/sqlite to v1.38.2 due to a FOREIGN KEY constraint regression in v1.39.1 (SQLite 3.50.4).\n\n**Issue:** [deleted:bd-cb64c226.2], GH #144\n\n**Symptom:** CloseIssue fails with \"FOREIGN KEY constraint failed (787)\" when called via MCP/daemon, but works fine via CLI.\n\n**Root Cause:** Unknown - likely stricter FK enforcement in SQLite 3.50.4 or modernc.org wrapper changes.\n\n**Workaround:** Pinned to v1.38.2 (SQLite 3.49.x)\n\n**TODO:**\n1. Monitor modernc.org/sqlite releases for fixes\n2. Check SQLite 3.50.5+ changelogs for FK-related fixes\n3. Investigate why daemon mode fails but CLI succeeds (connection reuse? transaction isolation?)\n4. Consider filing upstream issue with reproducible test case\n5. Upgrade when safe","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-24T11:49:12.836292-07:00","updated_at":"2025-10-30T17:05:26.02316-07:00"}
|
||||
{"id":"bd-4dcd2d09","content_hash":"424a55e69759947e5fb5a4326eea0b7d0feb3c64d9aba110f67ce5e05623824b","title":"Add --json flag to all bd commands","description":"Currently not all bd commands support --json output, which makes it difficult for agents to parse output programmatically.\n\nFor example, `bd stats` doesn't support --json flag (returns error).\n\nAll commands should support --json for consistent agent-friendly output:\n- bd stats\n- bd list (already has it)\n- bd show (already has it)\n- bd ready (already has it)\n- bd create (already has it)\n- bd update (already has it)\n- bd close (already has it)\n- bd dep (check if all subcommands support it)\n- bd label (check if all subcommands support it)\n- bd import/export\n- bd sync\n- bd duplicates\n- bd merge\n- Any other commands\n\nAudit all commands and ensure consistent --json support across the board.","status":"open","priority":1,"issue_type":"feature","created_at":"2025-10-29T23:46:34.987439-07:00","updated_at":"2025-10-30T17:05:26.018092-07:00"}
|
||||
{"id":"bd-4e21b5ad","content_hash":"d737255765d8b9579765347a92638b70f9e7bbd293df14b1a3f870e74dd8bd7e","title":"Add test case for symmetric collision (both clones create same ID simultaneously)","description":"TestTwoCloneCollision demonstrates the problem, but we need a simpler unit test for the collision resolver itself.\n\nTest should verify:\n- Two issues with same ID, different content\n- Content hash determines winner deterministically \n- Result is same regardless of which clone imports first\n- No title swapping occurs\n\nThis can be a simpler test than the full integration test.","notes":"Tests cleaned up. Deprecated TestTwoCloneCollision and TestThreeCloneCollision (sequence-ID tests). TestFiveCloneCollision passes successfully with hash IDs, testing 3 different sync orders (sequential, reverse, random). Hash-based IDs prevent ID collisions - git merge conflicts are expected and handled by conflict resolution in the test.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-29T17:46:10.046999-07:00","updated_at":"2025-10-30T20:24:54.717863-07:00","closed_at":"2025-10-30T20:24:54.717863-07:00"}
|
||||
{"id":"bd-50a7","content_hash":"ce3e6a3c2c64d76145ed93ed550c93dd88d7d530911e4cf1fd80d8c16194b8d4","title":"Update FAQ.md to remove --resolve-collisions references","description":"FAQ.md lines 289-291 still recommend 'bd import --resolve-collisions' for same ID scenarios. With hash IDs, this is simply an update operation. Need to update section to explain same-ID imports are updates.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-31T14:11:05.095092-07:00","updated_at":"2025-10-31T14:13:55.105871-07:00","closed_at":"2025-10-31T14:13:55.105871-07:00"}
|
||||
{"id":"bd-5314bddf","content_hash":"bbaf3bd26766fb78465900c455661a3608ab1d1485cb964d12229badf138753a","title":"bd detect-pollution - Test pollution detector","description":"Detect test issues that leaked into production DB.\n\nPattern matching for:\n- Titles starting with 'test', 'benchmark', 'sample'\n- Sequential numbering (test-1, test-2)\n- Generic descriptions\n- Created in rapid succession\n\nOptional AI scoring for confidence.\n\nFiles: cmd/bd/detect_pollution.go (new)","status":"open","priority":1,"issue_type":"task","created_at":"2025-10-28T14:48:17.466906-07:00","updated_at":"2025-10-30T17:05:26.03612-07:00"}
|
||||
{"id":"bd-581b80b3","content_hash":"04c4d952852ae2673e551d9776698c52b0189754ac5f9ca295bed464a5b86a43","title":"bd find-duplicates - AI-powered duplicate detection","description":"Find semantically duplicate issues.\n\nApproaches:\n1. Mechanical: Exact title/description matching\n2. Embeddings: Cosine similarity (cheap, scalable)\n3. AI: LLM-based semantic comparison (expensive, accurate)\n\nUses embeddings by default for \u003e100 issues.\n\nFiles: cmd/bd/find_duplicates.go (new)","status":"open","priority":1,"issue_type":"task","created_at":"2025-10-29T20:49:49.126801-07:00","updated_at":"2025-10-30T17:05:26.035552-07:00"}
|
||||
{"id":"bd-589c7c1e","content_hash":"efbc1fe1379d414d2af33f5aff9787e4f8a3234922199bdc9abce25dba99aef0","title":"Fix revive style issues (78 issues)","description":"Style violations: unused parameters (many cmd/args in cobra commands), missing exported comments, stuttering names (SQLiteStorage), indent-error-flow issues.","design":"Rename unused params to _, add godoc comments to exported types, fix stuttering names, simplify control flow.","notes":"Fixed 19 revive issues:\n- 14 unused-parameter (renamed to _)\n- 2 redefines-builtin-id (max→maxCount, min→minInt)\n- 3 indent-error-flow (gofmt fixed 2, skipped 1 complex nested one)\n\nRemaining issues are acceptable: 11 unused-params in deeper code, 2 empty-blocks with comments, 1 complex indent case, 1 superfluous-else in test.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-10-27T23:20:10.391821-07:00","updated_at":"2025-10-30T17:05:26.027202-07:00","closed_at":"2025-10-27T23:02:41.30653-07:00"}
|
||||
@@ -70,6 +72,7 @@
|
||||
{"id":"bd-64c05d00.1","content_hash":"0744c30a5397c6c44b949c038af110eaf6453ec3800bff55cb027eecc47ab5b5","title":"Fix TestTwoCloneCollision to compare content not timestamps","description":"The test at beads_twoclone_test.go:204-207 currently compares full JSON output including timestamps, causing false negative failures.\n\nCurrent behavior:\n- Both clones converge to identical semantic content\n- Clone A: test-2=\"Issue from clone A\", test-1=\"Issue from clone B\"\n- Clone B: test-1=\"Issue from clone B\", test-2=\"Issue from clone A\"\n- Titles match IDs correctly, no data corruption\n- Only timestamps differ (expected and acceptable)\n\nFix needed:\n- Replace exact JSON comparison with content-aware comparison\n- Normalize or ignore timestamp fields when asserting convergence\n- Test should PASS after this fix\n\nThis blocks completion of bd-71107098.","acceptance_criteria":"- Test compares issue content (title, description, status, priority) not timestamps\n- TestTwoCloneCollision passes\n- Both clones shown to have identical semantic content\n- Timestamps explicitly documented as acceptable difference","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-28T17:58:52.057194-07:00","updated_at":"2025-10-30T17:05:26.043429-07:00","closed_at":"2025-10-28T18:01:38.751895-07:00","dependencies":[{"issue_id":"bd-64c05d00.1","depends_on_id":"bd-64c05d00","type":"parent-child","created_at":"2025-10-28T17:58:52.058202-07:00","created_by":"stevey"},{"issue_id":"bd-64c05d00.1","depends_on_id":"bd-71107098","type":"blocks","created_at":"2025-10-28T17:58:52.05873-07:00","created_by":"stevey"}]}
|
||||
{"id":"bd-64c05d00.2","content_hash":"b86d4c406dd6783a00683a31c8729ea08e846e0ddbc54211e1e3d6dedb96def4","title":"Document 3-clone ID non-determinism in collision resolution","description":"Document the known behavior of 3+ way collision resolution where ID assignments may vary based on sync order, even though content always converges correctly.\n\nUpdates needed:\n- Update bd-71107098 notes to mark 2-clone case as solved\n- Document 3-clone ID non-determinism as known limitation\n- Add explanation to ADVANCED.md or collision resolution docs\n- Explain why this happens (pairwise hash comparison is deterministic, but multi-way ID allocation uses sync-order dependent counters)\n- Clarify trade-offs: content convergence ✅ vs ID stability ❌\n\nKey points to document:\n- Hash-based resolution is pairwise deterministic\n- Content always converges correctly (all issues present with correct data)\n- Numeric ID assignments in 3+ way collisions depend on sync order\n- This is acceptable for most use cases (content convergence is primary goal)\n- Full determinism would require complex multi-way comparison","acceptance_criteria":"- bd-71107098 updated with notes about 2-clone solution being complete\n- 3-clone ID non-determinism documented in ADVANCED.md or similar\n- Explanation includes why it happens and trade-offs\n- Links to TestThreeCloneCollision as demonstration\n- Users understand this is expected behavior, not a bug","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-28T17:59:21.93014-07:00","updated_at":"2025-10-30T17:05:26.044024-07:00","dependencies":[{"issue_id":"bd-64c05d00.2","depends_on_id":"bd-64c05d00","type":"parent-child","created_at":"2025-10-28T17:59:21.938709-07:00","created_by":"stevey"}]}
|
||||
{"id":"bd-64c05d00.3","content_hash":"e006b991353a26f949bc3ae4476849ef785f399f6aca866586eb6fa03d243b35","title":"Add TestThreeCloneCollision for regression protection","description":"Add a 3-clone collision test to document behavior and provide regression protection.\n\nPurpose:\n- Verify content convergence regardless of sync order\n- Document the ID non-determinism behavior (IDs may be assigned differently based on sync order)\n- Provide regression protection for multi-way collisions\n\nTest design:\n- 3 clones create same ID with different content\n- Test two different sync orders (A→B→C vs C→A→B)\n- Assert content sets match (ignore specific ID assignments)\n- Add comment explaining ID non-determinism is expected behavior\n\nKnown limitation:\n- Content always converges correctly (all issues present with correct titles)\n- Numeric ID assignments (test-2 vs test-3) depend on sync order\n- This is acceptable if content convergence is the primary goal","acceptance_criteria":"- TestThreeCloneCollision added to beads_twoclone_test.go (or new file)\n- Tests 3 clones with same ID collision\n- Tests two different sync orders\n- Asserts content convergence (all issues present, correct titles)\n- Documents ID non-determinism in test comments\n- Test passes consistently","status":"closed","priority":2,"issue_type":"task","created_at":"2025-10-28T17:59:05.941735-07:00","updated_at":"2025-10-30T17:05:26.043701-07:00","closed_at":"2025-10-28T18:09:12.717604-07:00","dependencies":[{"issue_id":"bd-64c05d00.3","depends_on_id":"bd-64c05d00","type":"parent-child","created_at":"2025-10-28T17:59:05.942783-07:00","created_by":"stevey"}]}
|
||||
{"id":"bd-650c","content_hash":"84d94464678c75427af7af2c85eaafb3bb6d787a5774816ac9c827d640e6b64f","title":"Update commands/import.md to remove --resolve-collisions documentation","description":"commands/import.md documents --resolve-collisions flag removed in v0.20.1. Remove from usage examples and collision handling section. Update behavior section to clarify same-ID = update.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-31T14:11:05.102504-07:00","updated_at":"2025-10-31T14:17:10.046367-07:00","closed_at":"2025-10-31T14:17:10.046367-07:00"}
|
||||
{"id":"bd-67335f92","content_hash":"9a2120c5d56a818ae4d0b2acc3518b6705d62b6cb866703dd524e3bc1a462397","title":"CLI accepts hash ID prefixes (Git-style)","description":"Implement prefix-optional parsing for hash IDs throughout CLI.\n\n## Parsing Logic\n```go\n// internal/utils/id_parser.go\nfunc ParseIssueID(input string) (issueID string, err error) {\n // Already has prefix: bd-a3f8e9 or bd-a3f8e9.1.2\n if strings.HasPrefix(input, \"bd-\") {\n return input, nil\n }\n \n // Add prefix: a3f8e9 → bd-a3f8e9\n // Works with hierarchical too: a3f8e9.1.2 → bd-a3f8e9.1.2\n return \"bd-\" + input, nil\n}\n\n// Prefix matching for partial IDs\nfunc ResolvePartialID(input string) (fullID string, err error) {\n parsedID := ParseIssueID(input) // Ensure prefix\n \n // Query with LIKE for prefix match\n matches := storage.FindByPrefix(parsedID)\n \n if len(matches) == 0 {\n return \"\", fmt.Errorf(\"no issue found matching %q\", input)\n }\n if len(matches) \u003e 1 {\n return \"\", fmt.Errorf(\"ambiguous ID %q matches: %v\", input, matches)\n }\n return matches[0].ID, nil\n}\n```\n\n## Behavior Examples\n```bash\n# All these inputs work:\nbd show a3f8e9 # Add prefix → bd-a3f8e9\nbd show bd-a3f8e9 # Already has prefix\nbd show a3f8 # Shorter prefix match\nbd show a3f8e9.1 # Hierarchical without prefix\nbd show bd-a3f8e9.1.2 # Full hierarchical with prefix\n\n# Output always shows full ID with prefix:\nbd-a3f8e9 [epic] Auth System\nbd-a3f8e9.1 [epic] Login Flow\nbd-a3f8e9.1.2 [task] Backend validation\n```\n\n## Error Handling\n```bash\n# Not found\n$ bd show xyz789\nError: no issue found matching \"bd-xyz789\"\n\n# Ambiguous (multiple matches)\n$ bd show a3\nError: ambiguous ID \"bd-a3\" matches: bd-a3f8e9, bd-a34721, bd-a38f92\nUse more characters to disambiguate.\n```\n\n## Commands to Update\nAll commands that accept issue IDs:\n\n### Read operations\n- bd show \u003cid\u003e\n- bd list --id \u003cids\u003e\n- bd dep tree \u003cid\u003e\n\n### Write operations\n- bd update \u003cid\u003e\n- bd close \u003cid\u003e\n- bd reopen \u003cid\u003e\n- bd label add \u003cid\u003e\n- bd dep add \u003cid1\u003e \u003cid2\u003e\n- bd comment add \u003cid\u003e\n\n### Multiple IDs\n```bash\n# All work with optional prefix:\nbd show a3f8e9 b7c2d1 # → bd-a3f8e9 bd-b7c2d1\nbd dep add a3f8e9.1 b7c2d1 # → bd-a3f8e9.1 blocks bd-b7c2d1\n```\n\n## Display Format\n**Always show full ID with prefix** in output for:\n- Copy-paste clarity\n- External reference (git commits, docs)\n- Unambiguous identification\n\n```bash\n$ bd list\nbd-a3f8e9 [P1] Auth System [epic] open\nbd-b7c2d1 [P2] Fix daemon crash [bug] open\nbd-1a2b3c4d [P3] Add logging [task] open\n```\n\n## Files to Create/Modify\n- internal/utils/id_parser.go (new - parsing logic)\n- cmd/bd/show.go\n- cmd/bd/update.go\n- cmd/bd/close.go\n- cmd/bd/reopen.go\n- cmd/bd/dep.go\n- cmd/bd/label.go\n- cmd/bd/comment.go\n- cmd/bd/list.go\n\n## Testing\n- Test prefix omitted: a3f8e9 → bd-a3f8e9\n- Test prefix included: bd-a3f8e9 → bd-a3f8e9\n- Test hierarchical: a3f8e9.1.2 → bd-a3f8e9.1.2\n- Test partial match: a3f8 → bd-a3f8e9\n- Test ambiguous ID error\n- Test not found error\n- Test mixed input: bd show a3f8e9 bd-b7c2d1","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-30T17:00:11.079825-07:00","updated_at":"2025-10-31T01:00:21.976681-07:00","closed_at":"2025-10-31T01:00:21.976681-07:00"}
|
||||
{"id":"bd-69bce74a","content_hash":"1eb7b7d60d3be1dcae7ff1e8053b4c9e7dfdfb70f200151c9298be0bb4d5dc72","title":"Platform tests: Linux, macOS, Windows","description":"Test event-driven mode on all platforms. Verify inotify (Linux), FSEvents (macOS), ReadDirectoryChangesW (Windows). Test fallback behavior on each.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-29T19:42:29.85636-07:00","updated_at":"2025-10-30T17:05:26.001574-07:00","closed_at":"2025-10-29T15:33:22.149551-07:00"}
|
||||
{"id":"bd-69fbe98e","content_hash":"b9211785e5423ab62d313590115309dab023b0c418b8d06f8bf98442c1ff740d","title":"Implement \"bd daemons logs\" subcommand","description":"Add command to view daemon logs for a specific workspace. Requires daemon logging to file (may need separate issue for log infrastructure).","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-26T19:41:11.099659-07:00","updated_at":"2025-10-30T17:05:25.996524-07:00"}
|
||||
@@ -99,6 +102,7 @@
|
||||
{"id":"bd-833559b3","content_hash":"9082c986207b9df7a7a4dc87a53007849e2b9f6e92f3bea41e22d6a14f1f6f42","title":"bd validate - Comprehensive health check","description":"Run all validation checks in one command.\n\nChecks:\n- Duplicates\n- Orphaned dependencies\n- Test pollution\n- Git conflicts\n\nSupports --fix-all for auto-repair.\n\nDepends on bd-cbed9619.1, bd-0dcea000, bd-2752a7a2, bd-9826b69a.\n\nFiles: cmd/bd/validate.go (new)","status":"open","priority":1,"issue_type":"task","created_at":"2025-10-29T20:02:47.957692-07:00","updated_at":"2025-10-30T17:05:26.035926-07:00"}
|
||||
{"id":"bd-83f0bb64","content_hash":"c7be091ee7e713dd9c8ec0f9a498a9ae12adb09f8b7510a5ec10a815a05322e1","title":"Platform tests: Linux, macOS, Windows","description":"Test event-driven mode on all platforms. Verify inotify (Linux), FSEvents (macOS), ReadDirectoryChangesW (Windows). Test fallback behavior on each.","status":"open","priority":1,"issue_type":"task","created_at":"2025-10-29T19:42:29.857419-07:00","updated_at":"2025-10-30T17:05:26.039924-07:00"}
|
||||
{"id":"bd-85487065","title":"Add tests for internal/autoimport package","description":"Currently 0.0% coverage. Need tests for auto-import functionality that detects and imports updated JSONL files.","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-29T14:06:18.154805-07:00","updated_at":"2025-10-30T17:05:25.994164-07:00"}
|
||||
{"id":"bd-85a6","content_hash":"12518d8cfa8f5ca2b3e29159b45dcb12781da00cba986a0ac7260e40cf1b6713","title":"Audit test names/comments for outdated collision language","description":"Test files have 'collision' in names/comments: TestAutoImportWithCollision, TestAutoImportNoCollision, beads_hash_multiclone_test.go comments. Review to ensure accuracy with hash ID semantics.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-10-31T14:11:05.132659-07:00","updated_at":"2025-10-31T14:23:49.327052-07:00","closed_at":"2025-10-31T14:23:49.327052-07:00"}
|
||||
{"id":"bd-8900f145","content_hash":"4a07f36a9e5d24aaffb092c89e2273cb58f9de357d24eeb01fcde6a4079ba775","title":"Testing event-driven mode!","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-10-29T15:28:33.564871-07:00","updated_at":"2025-10-30T17:05:25.996186-07:00","closed_at":"2025-10-29T19:12:54.43368-07:00"}
|
||||
{"id":"bd-89f89fc0","content_hash":"235c3bdeb45e3069167f81e7b4e798fc98547478bb16df40556100478c5e505a","title":"Remove unreachable RPC methods","description":"Several RPC server and client methods are unreachable and should be removed:\n\nServer methods (internal/rpc/server.go):\n- `Server.GetLastImportTime` (line 2116)\n- `Server.SetLastImportTime` (line 2123)\n- `Server.findJSONLPath` (line 2255)\n\nClient methods (internal/rpc/client.go):\n- `Client.Import` (line 311) - RPC import not used (daemon uses autoimport)\n\nEvidence:\n```bash\ngo run golang.org/x/tools/cmd/deadcode@latest -test ./...\n```\n\nImpact: Removes ~80 LOC of unused RPC code","acceptance_criteria":"- Remove the 4 unreachable methods (~80 LOC total)\n- Verify no callers: `grep -r \"GetLastImportTime\\|SetLastImportTime\\|findJSONLPath\" .`\n- All tests pass: `go test ./internal/rpc/...`\n- Daemon functionality works: test daemon start/stop/operations","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-28T16:20:02.432202-07:00","updated_at":"2025-10-30T17:05:26.040116-07:00"}
|
||||
{"id":"bd-8e05","content_hash":"1dd0ca7be6f4e7121bb4c6de9ea5b02a5238766fee14ecf3a17c69485c601ac9","title":"Remove sequential ID generation code (AllocateNextID, getNextIDForPrefix)","description":"Now that we've moved to hash-based IDs, we can remove the sequential ID generation functions in sqlite.go:\n- getNextIDForPrefix() (lines 559-574)\n- AllocateNextID() (lines 576-583)\n- These use issue_counters table which may also be removable\n- Check if issue_counters table is still needed or can be dropped","status":"closed","priority":1,"issue_type":"chore","created_at":"2025-10-30T22:16:48.51933-07:00","updated_at":"2025-10-30T22:24:25.583132-07:00","closed_at":"2025-10-30T22:24:25.583132-07:00","labels":["cleanup","hash-ids"]}
|
||||
@@ -151,9 +155,12 @@
|
||||
{"id":"bd-b47c034e","content_hash":"133dfd651d402bb95928091138c77a57b2f3f349587962c744209a534fb800a6","title":"Address gosec security warnings (102 issues)","description":"Security linter warnings: file permissions (0755 should be 0750), G304 file inclusion via variable, G204 subprocess launches. Many are false positives but should be reviewed.","design":"Review each gosec warning. Add exclusions for legitimate cases to .golangci.yml. Fix real security issues (overly permissive file modes).","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-25T13:47:10.719134-07:00","updated_at":"2025-10-30T17:05:26.029179-07:00"}
|
||||
{"id":"bd-b501fcc1","content_hash":"323c3b4f2e53d707ce73e75a357bbb4e320327bea00d0b010c3dd09d1e6555cf","title":"Unit tests for Debouncer","description":"Test debouncer batches multiple triggers into single action. Test timer reset on subsequent triggers. Test cancel during wait. Test thread safety.","status":"open","priority":1,"issue_type":"task","created_at":"2025-10-29T19:42:29.86146-07:00","updated_at":"2025-10-30T17:05:26.041298-07:00"}
|
||||
{"id":"bd-b55e2ac2","title":"Fix autoimport tests for content-hash collision scoring","description":"## Overview\nThree autoimport tests are failing after bd-cbed9619.4 because they expect behavior based on the old reference-counting collision resolution, but the system now uses deterministic content-hash scoring.\n\n## Failing Tests\n1. `TestAutoImportMultipleCollisionsRemapped` - expects local versions preserved\n2. `TestAutoImportAllCollisionsRemapped` - expects local versions preserved \n3. `TestAutoImportCollisionRemapMultipleFields` - expects specific collision resolution behavior\n\n## Root Cause\nThese tests were written when ScoreCollisions used reference counting to determine which version to keep. Now it uses content-hash comparison (introduced in commit 2e87329), which produces different but deterministic results.\n\n## Example\nOld behavior: Issue with more references would be kept\nNew behavior: Issue with lexicographically lower content hash is kept\n\n## Solution\nUpdate each test to:\n1. Verify the new content-hash based behavior is correct\n2. Check that the remapped issue (not necessarily local/remote) has the expected content\n3. Ensure dependencies are preserved on the correct remapped issue\n\n## Acceptance Criteria\n- All three autoimport tests pass\n- Tests verify content-hash determinism (same collision always resolves the same way)\n- Tests check dependency preservation on remapped issues\n- Test documentation explains content-hash scoring expectations\n\n## Files to Modify\n- `cmd/bd/autoimport_collision_test.go`\n\n## Testing\nRun: `go test ./cmd/bd -run \"TestAutoImport.*Collision\" -v`","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-28T19:17:28.358028-07:00","updated_at":"2025-10-30T17:05:25.988638-07:00"}
|
||||
{"id":"bd-b84f","content_hash":"4cb62fc0f82711216771ea429e75af1d5449884aeff9b54d0594d722b09984d2","title":"Rewrite ADVANCED.md 'Handling Import Collisions' section for hash ID era","description":"ADVANCED.md lines 200-235 treats same-ID as collision needing remapping. With hash IDs: same ID = update, --resolve-collisions removed. Section needs complete rewrite.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-31T14:11:05.098045-07:00","updated_at":"2025-10-31T14:16:47.309628-07:00","closed_at":"2025-10-31T14:16:47.309628-07:00"}
|
||||
{"id":"bd-b9323760","content_hash":"47b9f15a8741b9df77e30d448999ad9566f9c6cb1bebe1e760735bfb2cb26c66","title":"Add --parent flag to bd list command","description":"Add --parent flag to bd list to filter issues by parent ID.\n\n## Usage\n```bash\nbd list --parent 165 # List all children of bd-a5e2bd80\nbd list --parent a3f8e9 # List all children (with prefix match)\nbd list --parent a3f8e9 -s open # Combine with status filter\n```\n\n## Behavior\n- Show only direct children (not recursive by default)\n- Add --recursive flag for full subtree\n- Works with current parent-child dependency type\n- With hierarchical IDs (bd-a5e2bd80), this will be natural: filter by ID prefix\n\n## Implementation\nQuery dependencies table:\n```sql\nSELECT i.* FROM issues i\nJOIN dependencies d ON i.id = d.issue_id\nWHERE d.depends_on_id = ? AND d.type = 'parent-child'\n```\n\nWith hierarchical IDs (post bd-a5e2bd80):\n```sql\nSELECT * FROM issues \nWHERE id LIKE 'bd-a3f8e9.%' -- Much simpler!\n```\n\n## Related\n- Complements bd tree command (bd-a5e2bd80.16)\n- Will be cleaner with hierarchical IDs from bd-a5e2bd80\n- Could add --leaves flag (show only leaf nodes, no sub-epics)\n\n## Files\n- cmd/bd/list.go (add --parent flag)\n- May want to add --recursive flag too","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-30T00:27:44.562078-07:00","updated_at":"2025-10-30T17:05:26.018856-07:00"}
|
||||
{"id":"bd-bc2c6191","content_hash":"eb5b47a473c72a0d9f8b3d24c494bfdd1dc51a4b52136718a91eaa8acd9a5209","title":"Audit Current Cache Usage","description":"Understand exactly what code depends on the storage cache","acceptance_criteria":"- Document showing all cache dependencies\n- Confirmation that removing cache won't break MCP\n- List of tests that need updating\n\nFiles to examine:\n- internal/rpc/server_cache_storage.go (cache implementation)\n- internal/rpc/client.go (how req.Cwd is set)\n- internal/rpc/server_*.go (all getStorageForRequest calls)\n- integrations/beads-mcp/ (MCP multi-repo logic)\n\nTasks:\n- Document all callers of getStorageForRequest()\n- Verify req.Cwd is only set by RPC client for database discovery\n- Confirm MCP server doesn't rely on multi-repo cache behavior\n- Check if any tests assume multi-repo routing\n- Review environment variables: BEADS_DAEMON_MAX_CACHE_SIZE, BEADS_DAEMON_CACHE_TTL, BEADS_DAEMON_MEMORY_THRESHOLD_MB","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-10-27T23:02:43.506373-07:00","updated_at":"2025-10-30T17:05:26.026725-07:00"}
|
||||
{"id":"bd-bda8","content_hash":"1fcf064d2854cca9e51236cafa6a556321bc64647985298c9621fc5d49a16e8f","title":"Update TROUBLESHOOTING.md to remove collision resolution guidance","description":"TROUBLESHOOTING.md lines 190-202 recommends 'bd import --resolve-collisions'. With hash IDs, branch merges don't create ID collisions. Update to explain hash IDs prevent collisions and same-ID = update.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-31T14:11:05.098994-07:00","updated_at":"2025-10-31T14:16:59.204699-07:00","closed_at":"2025-10-31T14:16:59.204699-07:00"}
|
||||
{"id":"bd-bdaf24d5","content_hash":"6ccdbf2362d22fbbe854fdc666695a7488353799e1a5c49e6095b34178c9bcb4","title":"Final validation test","description":"","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-27T18:27:28.310533-07:00","updated_at":"2025-10-30T17:05:26.001888-07:00"}
|
||||
{"id":"bd-c083","content_hash":"3736cf0f5158898552c66367db2fcdc8b9183def78b1cda701af7417e968373a","title":"Rename handleCollisions() function to reflect update semantics","description":"internal/importer/importer.go handleCollisions() (lines 196-225) has misleading name. Comment correctly explains these are UPDATES with hash IDs. Consider renaming to handleUpdates() or detectUpdates().","status":"closed","priority":2,"issue_type":"chore","created_at":"2025-10-31T14:11:05.110682-07:00","updated_at":"2025-10-31T14:23:19.660682-07:00","closed_at":"2025-10-31T14:23:19.660682-07:00"}
|
||||
{"id":"bd-c7af","content_hash":"31fe48701faba095a16e24d913d37aaea6993248f0235d3f47b9683d7e7659cc","title":"Remove SyncAllCounters() and all call sites","description":"SyncAllCounters() is already a no-op (bd-aa744b) since hash IDs don't use counters. Clean up all the dead code:\n\nRemove:\n- internal/storage/sqlite/sqlite.go:636 - SyncAllCounters() implementation\n- internal/storage/memory/memory.go:947 - SyncAllCounters() implementation\n- All call sites throughout codebase (20+ locations found)\n- Remove from Storage interface if it exists\n\nThis is safe cleanup of code that already does nothing.","status":"closed","priority":1,"issue_type":"chore","created_at":"2025-10-30T22:17:40.859474-07:00","updated_at":"2025-10-30T22:21:53.720387-07:00","closed_at":"2025-10-30T22:21:53.720387-07:00","labels":["cleanup","hash-ids"]}
|
||||
{"id":"bd-c825f867","content_hash":"27cecaa2dc6cdabb2ae77fd65fbf8dca8f4c536bdf140a13b25cdd16376c9845","title":"Add docs/architecture/event_driven.md","description":"Copy event_driven_daemon.md into docs/ folder. Add to documentation index.","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-28T16:20:02.431399-07:00","updated_at":"2025-10-30T17:05:26.039504-07:00"}
|
||||
{"id":"bd-c947dd1b","content_hash":"79bd51b46b28bc16cfc19cd19a4dd4f57f45cd1e902b682788d355b03ec00b2a","title":"Remove Daemon Storage Cache","description":"The daemon's multi-repo storage cache is the root cause of stale data bugs. Since global daemon is deprecated, we only ever serve one repository, making the cache unnecessary complexity. This epic removes the cache entirely for simpler, more reliable direct storage access.","design":"For local daemon (single repository), eliminate the cache entirely:\n- Use s.storage field directly (opened at daemon startup)\n- Remove getStorageForRequest() routing logic\n- Remove server_cache_storage.go entirely (~300 lines)\n- Remove cache-related tests\n- Simplify Server struct\n\nBenefits:\n✅ No staleness bugs: Always using live SQLite connection\n✅ Simpler code: Remove ~300 lines of cache management\n✅ Easier debugging: Direct storage access, no cache indirection\n✅ Same performance: Cache was always 1 entry for local daemon anyway","acceptance_criteria":"- Daemon has no storage cache code\n- All tests pass\n- MCP integration works\n- No stale data bugs\n- Documentation updated\n- Performance validated","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-10-28T10:50:15.126939-07:00","updated_at":"2025-10-30T17:05:26.03046-07:00","closed_at":"2025-10-28T10:49:53.612049-07:00"}
|
||||
|
||||
Reference in New Issue
Block a user