bd sync: 2025-12-22 00:05:28
This commit is contained in:
@@ -242,7 +242,7 @@
|
||||
{"id":"bd-kpy","title":"Sync race: rebase-based divergence recovery resurrects tombstones","description":"## Problem\nWhen two repos sync simultaneously, tombstones can be resurrected:\n\n1. Repo A deletes issue (creates tombstone), pushes to sync branch\n2. Repo B (with 'closed' status) exports and tries to push\n3. Push fails (non-fast-forward)\n4. fetchAndRebaseInWorktree does git rebase\n5. Git rebase applies B's 'closed' patch on top of A's 'tombstone'\n6. TEXT-level rebase doesn't invoke beads merge driver\n7. 'closed' overwrites 'tombstone' = resurrection\n\n## Root Cause\nCommitToSyncBranch uses git rebase for divergence recovery, but rebase is text-level, not content-level. The proper content-level merge in PullFromSyncBranch handles tombstones correctly, but it runs AFTER the problematic push.\n\n## Proposed Fix\nOption 1: Don't push in CommitToSyncBranch - let PullFromSyncBranch handle merge+push\nOption 2: Replace git rebase with content-level merge in fetchAndRebaseInWorktree\nOption 3: Reorder sync steps: Export → Pull/Merge → Commit → Push\n\n## Workaround Applied\nExcluded tombstones from orphan detection warnings (commit 1e97d9cc).\n\nSee also: bd-3852 (Add orphan detection migration)","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-17T23:29:33.049272-08:00","updated_at":"2025-12-17T23:29:33.049272-08:00"}
|
||||
{"id":"bd-kqo1","title":"Show pin indicator in bd list output","description":"Add a visual indicator (e.g., pin emoji or [P] marker) for pinned issues in bd list output so users can easily identify them.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T23:33:47.402549-08:00","updated_at":"2025-12-21T11:30:27.272768-08:00","closed_at":"2025-12-21T11:30:27.272768-08:00","close_reason":"Already implemented - 📌 emoji shown for pinned issues in bd list output","dependencies":[{"issue_id":"bd-kqo1","depends_on_id":"bd-0vg","type":"blocks","created_at":"2025-12-18T23:33:56.771791-08:00","created_by":"daemon"},{"issue_id":"bd-kqo1","depends_on_id":"bd-7h5","type":"blocks","created_at":"2025-12-18T23:34:07.985271-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-kqw0","title":"Update local installation","description":"Run install script or brew upgrade to get new version locally: curl -fsSL .../install.sh | bash","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T13:52:33.066452-08:00","updated_at":"2025-12-21T13:53:49.656073-08:00","deleted_at":"2025-12-21T13:53:49.656073-08:00","deleted_by":"stevey","delete_reason":"manual delete","original_type":"task","wisp":true}
|
||||
{"id":"bd-kwjh","title":"Wisp storage: ephemeral molecule tracking","description":"Implement ephemeral molecule storage for patrol cycles.\n\n## Architecture\n\nWisps are ephemeral molecules stored in `.beads-wisps/` (gitignored).\nWhen squashed, they create digests in permanent `.beads/`.\n\n**Storage is per-rig, not per-role**: Witness and Refinery share mayor/rig's \n`.beads-wisps/` since they execute from that context.\n\n## Design Doc\nSee: gastown/mayor/rig/docs/wisp-architecture.md\n\n## Key Requirements\n\n1. **Ephemeral storage**: `.beads-wisps/` directory, gitignored\n2. **Bond with --wisp**: Creates in wisps instead of permanent\n3. **Squash**: Deletes wisp, creates digest in permanent beads\n4. **Burn**: Deletes wisp, no digest\n5. **Wisp commands**: `bd wisp list`, `bd wisp gc`\n\n## Storage Locations\n\n| Context | Location |\n|---------|----------|\n| Rig (Deacon, Witness, Refinery) | mayor/rig/.beads-wisps/ |\n| Polecat (if used) | polecats/\u003cname\u003e/.beads-wisps/ |\n\n## Children (to be created)\n- bd mol bond --wisp flag\n- .beads-wisps/ storage backend\n- bd mol squash handles wisp to permanent\n- bd wisp list command\n- bd wisp gc command (orphan cleanup)","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-21T23:34:47.188806-08:00","updated_at":"2025-12-21T23:39:17.536086-08:00"}
|
||||
{"id":"bd-kwjh","title":"Wisp storage: ephemeral molecule tracking","description":"Implement ephemeral molecule storage for patrol cycles.\n\n## Architecture\n\nWisps are ephemeral molecules stored in `.beads-wisps/` (gitignored).\nWhen squashed, they create digests in permanent `.beads/`.\n\n**Storage is per-rig, not per-role**: Witness and Refinery share mayor/rig's \n`.beads-wisps/` since they execute from that context.\n\n## Design Doc\nSee: gastown/mayor/rig/docs/wisp-architecture.md\n\n## Key Requirements\n\n1. **Ephemeral storage**: `.beads-wisps/` directory, gitignored\n2. **Bond with --wisp**: Creates in wisps instead of permanent\n3. **Squash**: Deletes wisp, creates digest in permanent beads\n4. **Burn**: Deletes wisp, no digest\n5. **Wisp commands**: `bd wisp list`, `bd wisp gc`\n\n## Storage Locations\n\n| Context | Location |\n|---------|----------|\n| Rig (Deacon, Witness, Refinery) | mayor/rig/.beads-wisps/ |\n| Polecat (if used) | polecats/\u003cname\u003e/.beads-wisps/ |\n\n## Children (to be created)\n- bd mol bond --wisp flag\n- .beads-wisps/ storage backend\n- bd mol squash handles wisp to permanent\n- bd wisp list command\n- bd wisp gc command (orphan cleanup)","status":"in_progress","priority":1,"issue_type":"epic","assignee":"beads/dave","created_at":"2025-12-21T23:34:47.188806-08:00","updated_at":"2025-12-22T00:05:13.932186-08:00"}
|
||||
{"id":"bd-kwro","title":"Beads Messaging \u0026 Knowledge Graph (v0.30.2)","description":"Add messaging semantics and extended graph links to Beads, enabling it to serve as\nthe universal substrate for knowledge work - issues, messages, documents, and threads\nas nodes in a queryable graph.\n\n## Motivation\n\nGas Town (GGT) needs inter-agent communication. Rather than a separate mail system,\ncollapse messaging into Beads - one system, one sync, one query interface, all in git.\n\nThis also positions Beads as a foundation for:\n- Company-wide issue tracking (like Notion)\n- Threaded conversations (like Reddit/Slack)\n- Knowledge graphs with loose associations\n- Arbitrary workflow UIs built on top\n\n## New Issue Type\n\n**message** - ephemeral communication between workers\n- sender: who sent it\n- assignee: recipient\n- priority: P0 (urgent) to P4 (routine)\n- status: open (unread) -\u003e closed (read)\n- ephemeral: true = can be bulk-deleted after swarm\n\n## New Graph Links\n\n**replies_to** - conversation threading\n- Messages reply to messages\n- Enables Reddit-style nested threads\n- Different from parent_id (not hierarchy, its conversation flow)\n\n**relates_to** - loose see also associations\n- Bidirectional knowledge graph edges\n- Not blocking, not hierarchical, just related\n- Enables discovery and traversal\n\n**duplicates** - deduplication at scale\n- Mark issue B as duplicate of canonical issue A\n- Close B, link to A\n- Essential for large issue databases\n\n**supersedes** - version chains\n- Design Doc v2 supersedes Design Doc v1\n- Track evolution of artifacts\n\n## New Fields (optional, any issue type)\n\n- sender (string) - who created this (for messages)\n- ephemeral (boolean) - can be bulk-deleted when closed\n\n## New Commands\n\nMessaging:\n- bd mail send \u003crecipient\u003e -s Subject -m Body\n- bd mail inbox (list open messages for me)\n- bd mail read \u003cid\u003e (show message content)\n- bd mail ack \u003cid\u003e (mark as read/close)\n- bd mail reply \u003cid\u003e -m Response (reply to thread)\n\nGraph links:\n- bd relate \u003cid1\u003e \u003cid2\u003e (create relates_to link)\n- bd duplicate \u003cid\u003e --of \u003ccanonical\u003e (mark as duplicate)\n- bd supersede \u003cid\u003e --with \u003cnew\u003e (mark superseded)\n\nCleanup:\n- bd cleanup --ephemeral (delete closed ephemeral issues)\n\n## Identity Configuration\n\nWorkers need identity for sender field:\n- BEADS_IDENTITY env var\n- Or .beads/config.json: identity field\n\n## Hooks (for GGT integration)\n\nBeads as platform - extensible without knowing about GGT.\nHook files in .beads/hooks/:\n- on_create (runs after bd create)\n- on_update (runs after bd update)\n- on_close (runs after bd close)\n- on_message (runs after bd mail send)\n\nGGT registers hooks to notify daemons of new messages.\n\n## Schema Changes (Migration Required)\n\nAdd to issue schema:\n- type: message (new valid type)\n- sender: string (optional)\n- ephemeral: boolean (optional)\n- replies_to: string (issue ID, optional)\n- relates_to: []string (issue IDs, optional)\n- duplicates: string (canonical issue ID, optional)\n- superseded_by: string (new issue ID, optional)\n\nMigration adds fields as optional - existing beads unchanged.\n\n## Success Criteria\n\n1. bd mail send/inbox/read/ack/reply work end-to-end\n2. replies_to creates proper thread structure\n3. relates_to, duplicates, supersedes links queryable\n4. Hooks fire on create/update/close/message\n5. Identity configurable via env or config\n6. Migration preserves all existing data\n7. All new features have tests","status":"tombstone","priority":0,"issue_type":"epic","created_at":"2025-12-16T03:00:53.912223-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":"epic"}
|
||||
{"id":"bd-kwro.1","title":"Schema: Add message type and new fields","description":"Add to internal/storage/sqlite/schema.go and models:\n\nNew issue_type value:\n- message\n\nNew optional fields on Issue struct:\n- Sender string (who sent this)\n- Ephemeral bool (can be bulk-deleted)\n- RepliesTo string (issue ID for threading)\n- RelatesTo []string (issue IDs for knowledge graph)\n- Duplicates string (canonical issue ID)\n- SupersededBy string (replacement issue ID)\n\nUpdate:\n- internal/storage/sqlite/schema.go - add columns\n- internal/models/issue.go - add fields to struct\n- internal/storage/sqlite/sqlite.go - CRUD operations\n- Create migration from v0.30.1\n\nEnsure backward compatibility - all new fields optional.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-16T03:01:19.777604-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":"task"}
|
||||
{"id":"bd-kwro.10","title":"Tests for messaging and graph links","description":"Comprehensive test coverage for all new features.\n\nTest files:\n- cmd/bd/mail_test.go - mail command tests\n- internal/storage/sqlite/graph_links_test.go - graph link tests\n- internal/hooks/hooks_test.go - hook execution tests\n\nTest cases:\n- Mail send/inbox/read/ack lifecycle\n- Thread creation and traversal (replies_to)\n- Bidirectional relates_to\n- Duplicate marking and queries\n- Supersedes chains\n- Ephemeral cleanup\n- Identity resolution priority\n- Hook execution (mock hooks)\n- Schema migration preserves data\n\nTarget: \u003e80% coverage on new code","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T03:02:34.050136-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":"task"}
|
||||
|
||||
Reference in New Issue
Block a user