bd sync: 2025-12-21 01:20:06
This commit is contained in:
@@ -203,7 +203,7 @@
|
||||
{"id":"bd-lw0x","title":"Fix bd sync race condition with daemon causing dirty working directory","description":"After bd sync completes with sync.branch mode, subsequent bd commands or daemon file watcher would see a hash mismatch and trigger auto-import, which then schedules re-export, dirtying the working directory.\n\n**Root cause:**\n1. bd sync exports JSONL with NEW content (hash H1)\n2. bd sync updates jsonl_content_hash = H1 in DB\n3. bd sync restores JSONL from HEAD (OLD content, hash H0)\n4. Now: file hash = H0, DB hash = H1 (MISMATCH)\n5. Daemon or next CLI command sees mismatch, imports from OLD JSONL\n6. Import triggers re-export → file is dirty\n\n**Fix:**\nAfter restoreBeadsDirFromBranch(), update jsonl_content_hash to match the restored file's hash. This ensures daemon and CLI see file hash = DB hash → no spurious import/export cycle.\n\nRelated: bd-c83r (multiple daemon prevention)","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-13T06:42:17.130839-08:00","updated_at":"2025-12-13T06:43:33.329042-08:00","closed_at":"2025-12-13T06:43:33.329042-08:00"}
|
||||
{"id":"bd-lxzx","title":"Add close_reason to JSONL export format documentation","description":"PR #551 now persists close_reason to the database, but there's a question about whether this field should be exported to JSONL format.\n\n## Current State\n- close_reason is stored in issues.close_reason column\n- close_reason is also stored in events table (audit trail)\n- The JSONL export format may or may not include close_reason\n\n## Questions\n1. Should close_reason be exported to JSONL format?\n2. If yes, where should it go (root level or nested in events)?\n3. Should there be any special handling to avoid duplication?\n4. How should close_reason be handled during JSONL import?\n\n## Why This Matters\n- JSONL is the git-friendly sync format\n- Other beads instances import from JSONL\n- close_reason is meaningful data that should be preserved across clones\n\n## Suggested Action\n- Check if close_reason is currently exported in JSONL\n- If not, add it to the export schema\n- Document the field in JSONL format spec\n- Add tests for round-trip (export -\u003e import -\u003e verify close_reason)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-14T14:25:17.414916-08:00","updated_at":"2025-12-14T14:25:17.414916-08:00","dependencies":[{"issue_id":"bd-lxzx","depends_on_id":"bd-z86n","type":"discovered-from","created_at":"2025-12-14T14:25:17.416131-08:00","created_by":"stevey","metadata":"{}"}]}
|
||||
{"id":"bd-m8ro","title":"Improve test coverage for internal/rpc (47.5% → 60%)","description":"The RPC package has only 47.5% test coverage. RPC is the communication layer for daemon operations.\n\nCurrent coverage: 47.5%\nTarget coverage: 60%","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-13T20:43:09.515299-08:00","updated_at":"2025-12-13T21:01:17.17404-08:00"}
|
||||
{"id":"bd-mh4w","title":"Rename 'bond' to 'spawn' for instantiation","description":"Rename the bd mol bond command to bd mol spawn for instantiating protos.\n \n- Rename molBondCmd to molSpawnCmd\n- Update command Use/Short/Long descriptions \n- Keep 'bond' available for the new bonding feature\n- Update all documentation references\n- Add 'protomolecule' as easter egg alias for 'proto'","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-21T00:58:44.529026-08:00","updated_at":"2025-12-21T00:58:44.529026-08:00","dependencies":[{"issue_id":"bd-mh4w","depends_on_id":"bd-o5xe","type":"parent-child","created_at":"2025-12-21T00:59:51.167902-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-mh4w","title":"Rename 'bond' to 'spawn' for instantiation","description":"Rename the bd mol bond command to bd mol spawn for instantiating protos.\n \n- Rename molBondCmd to molSpawnCmd\n- Update command Use/Short/Long descriptions \n- Keep 'bond' available for the new bonding feature\n- Update all documentation references\n- Add 'protomolecule' as easter egg alias for 'proto'","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-21T00:58:44.529026-08:00","updated_at":"2025-12-21T01:19:42.942819-08:00","closed_at":"2025-12-21T01:19:42.942819-08:00","close_reason":"Renamed 'bond' to 'spawn' in mol.go, updated all user-facing messages and help text","dependencies":[{"issue_id":"bd-mh4w","depends_on_id":"bd-o5xe","type":"parent-child","created_at":"2025-12-21T00:59:51.167902-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-mql4","title":"getLocalSyncBranch silently ignores YAML parse errors","description":"In autoimport.go:170-172, YAML parsing errors are silently ignored. If a user has malformed YAML in config.yaml, sync-branch will just silently be empty with no feedback.\n\nRecommendation: Add debug logging since this function is only called during auto-import, and debugging silent failures is painful.\n\nAdd: debug.Logf(\"Warning: failed to parse config.yaml: %v\", err)","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-07T02:03:44.217728-08:00","updated_at":"2025-12-07T02:03:44.217728-08:00"}
|
||||
{"id":"bd-muw","title":"Add empty tasks validation in workflow create","description":"workflow.go:321 will panic if wf.Tasks is empty. Add validation that len(wf.Tasks) \u003e 0 before accessing wf.Tasks[0].","status":"closed","priority":3,"issue_type":"bug","created_at":"2025-12-17T22:23:00.75707-08:00","updated_at":"2025-12-17T22:34:07.281133-08:00","closed_at":"2025-12-17T22:34:07.281133-08:00"}
|
||||
{"id":"bd-n386","title":"Improve test coverage for internal/daemon (27.3% → 60%)","description":"The daemon package has only 27.3% test coverage. The daemon is critical for background operations and reliability.\n\nKey areas needing tests:\n- Daemon autostart logic\n- Socket handling\n- PID file management\n- Health checks\n\nCurrent coverage: 27.3%\nTarget coverage: 60%","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-13T20:43:00.895238-08:00","updated_at":"2025-12-13T21:01:17.274438-08:00"}
|
||||
@@ -279,7 +279,7 @@
|
||||
{"id":"bd-r6a.5","title":"Update documentation for template system","description":"Update AGENTS.md and help text to document the new template system:\n\n- How to create a template (epic + template label + child issues)\n- How to define variables (just use {{name}} placeholders)\n- How to instantiate (bd template instantiate)\n- Migration from YAML workflows (if any users had custom ones)","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-17T22:43:55.461345-08:00","updated_at":"2025-12-18T17:42:26.001474-08:00","closed_at":"2025-12-18T13:46:53.446262-08:00","dependencies":[{"issue_id":"bd-r6a.5","depends_on_id":"bd-r6a","type":"parent-child","created_at":"2025-12-17T22:43:55.461763-08:00","created_by":"daemon","metadata":"{}"},{"issue_id":"bd-r6a.5","depends_on_id":"bd-r6a.3","type":"blocks","created_at":"2025-12-17T22:44:03.632404-08:00","created_by":"daemon","metadata":"{}"},{"issue_id":"bd-r6a.5","depends_on_id":"bd-r6a.4","type":"blocks","created_at":"2025-12-17T22:44:03.788517-08:00","created_by":"daemon","metadata":"{}"}]}
|
||||
{"id":"bd-rgd7","title":"Update CHANGELOG.md with release notes","description":"Add release notes for 0.32.1: MCP output control params (#667), pin field fix","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T21:53:16.031879-08:00","updated_at":"2025-12-20T21:54:07.982164-08:00","closed_at":"2025-12-20T21:54:07.982164-08:00","close_reason":"Added 0.32.1 release notes","dependencies":[{"issue_id":"bd-rgd7","depends_on_id":"bd-an4s","type":"parent-child","created_at":"2025-12-20T21:53:16.034926-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-rgyd","title":"Split internal/storage/sqlite/queries.go (1586 lines)","description":"Code health review found queries.go is too large at 1586 lines with:\n\n- Issue scanning logic duplicated between transaction.go and queries.go\n- Timestamp defensive fixes duplicated in CreateIssue, CreateIssues, batch_ops.go\n- Multiple similar patterns that should be consolidated\n\nAlso: transaction.go at 1284 lines, dependencies.go at 893 lines\n\nRecommendation:\n1. Extract common scanning into shared function\n2. Consolidate timestamp defensive fixes\n3. Split queries.go by domain (CRUD, search, batch, events)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T18:17:23.85869-08:00","updated_at":"2025-12-16T18:17:23.85869-08:00","dependencies":[{"issue_id":"bd-rgyd","depends_on_id":"bd-tggf","type":"blocks","created_at":"2025-12-16T18:19:06.062038-08:00","created_by":"daemon","metadata":"{}"}]}
|
||||
{"id":"bd-rnnr","title":"BondRef data model for compound lineage","description":"Add data model support for tracking compound molecule lineage.\n\nNEW FIELDS on Issue:\n bonded_from: []BondRef // For compounds: constituent protos\n\nNEW TYPE:\n type BondRef struct {\n ProtoID string // Source proto ID\n BondType string // sequential, parallel, conditional\n BondPoint string // Attachment site (issue ID or empty for root)\n }\n\nJSONL SERIALIZATION:\n {\n \"id\": \"proto-feature-tested\",\n \"title\": \"Feature with tests\",\n \"bonded_from\": [\n {\"proto_id\": \"proto-feature\", \"bond_type\": \"root\"},\n {\"proto_id\": \"proto-testing\", \"bond_type\": \"sequential\"}\n ],\n ...\n }\n\nQUERIES:\n- GetCompoundConstituents(id) → []BondRef\n- IsCompound(id) → bool\n- GetCompoundsUsing(protoID) → []Issue // Reverse lookup","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-21T00:59:38.582509-08:00","updated_at":"2025-12-21T00:59:38.582509-08:00","dependencies":[{"issue_id":"bd-rnnr","depends_on_id":"bd-o5xe","type":"parent-child","created_at":"2025-12-21T00:59:51.234246-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-rnnr","title":"BondRef data model for compound lineage","description":"Add data model support for tracking compound molecule lineage.\n\nNEW FIELDS on Issue:\n bonded_from: []BondRef // For compounds: constituent protos\n\nNEW TYPE:\n type BondRef struct {\n ProtoID string // Source proto ID\n BondType string // sequential, parallel, conditional\n BondPoint string // Attachment site (issue ID or empty for root)\n }\n\nJSONL SERIALIZATION:\n {\n \"id\": \"proto-feature-tested\",\n \"title\": \"Feature with tests\",\n \"bonded_from\": [\n {\"proto_id\": \"proto-feature\", \"bond_type\": \"root\"},\n {\"proto_id\": \"proto-testing\", \"bond_type\": \"sequential\"}\n ],\n ...\n }\n\nQUERIES:\n- GetCompoundConstituents(id) → []BondRef\n- IsCompound(id) → bool\n- GetCompoundsUsing(protoID) → []Issue // Reverse lookup","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-21T00:59:38.582509-08:00","updated_at":"2025-12-21T01:19:43.922416-08:00","closed_at":"2025-12-21T01:19:43.922416-08:00","close_reason":"Added BondRef type to types.go with ProtoID, BondType, BondPoint fields; added BondedFrom field to Issue; added IsCompound() and GetConstituents() helpers; added BondType constants","dependencies":[{"issue_id":"bd-rnnr","depends_on_id":"bd-o5xe","type":"parent-child","created_at":"2025-12-21T00:59:51.234246-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-rp4o","title":"Deleted issues resurrect during bd sync (tombstones not propagating)","description":"## Problem\n\nWhen issues are deleted with bd delete --force, they get deleted from the local DB but resurrect during the next bd sync.\n\n## Reproduction\n\n1. Observe orphan warnings (bd-cb64c226.*, bd-cbed9619.*)\n2. Delete them: bd delete bd-cb64c226.1 ... --force\n3. Run bd sync\n4. Orphan warnings reappear - issues were resurrected!\n\n## Root Cause Hypothesis\n\nThe sync branch workflow (beads-sync) has the old state before deletions. When bd sync pulls from beads-sync and copies JSONL to main, the deleted issues are re-imported.\n\nTombstones may not be properly:\n1. Written to beads-sync during export\n2. Propagated during pull/merge\n3. Honored during import\n\n## Related\n\n- bd-7b7h: chicken-and-egg sync.branch bug (same workflow)\n- bd-ncwo: ID-based fallback matching to prevent ghost resurrection\n\n## Files to Investigate\n\n- cmd/bd/sync.go (export/import flow)\n- internal/syncbranch/worktree.go (PullFromSyncBranch, copyJSONLToMainRepo)\n- internal/importer/ (tombstone handling)","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-16T23:09:43.072696-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
|
||||
{"id":"bd-rupw","title":"Run bump-version.sh 0.30.7","description":"Run ./scripts/bump-version.sh 0.30.7 to update version in all files","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T22:56:48.649647-08:00","updated_at":"2025-12-19T22:57:31.512956-08:00","closed_at":"2025-12-19T22:57:31.512956-08:00","dependencies":[{"issue_id":"bd-rupw","depends_on_id":"bd-8pyn","type":"parent-child","created_at":"2025-12-19T22:56:48.653475-08:00","created_by":"stevey"}]}
|
||||
{"id":"bd-s0qf","title":"GH#405: Fix prefix parsing with hyphens - multi-hyphen prefixes parsed incorrectly","description":"Fixed: ExtractIssuePrefix was falling back to first-hyphen for word-like suffixes, breaking multi-hyphen prefixes like 'hacker-news' and 'me-py-toolkit'.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-16T01:13:56.951359-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
|
||||
|
||||
Reference in New Issue
Block a user