bd sync: 2025-12-23 21:24:10
This commit is contained in:
@@ -122,8 +122,8 @@
|
||||
{"id":"gt-4u5z.1","title":"Update rig init to create refinery as worktree","description":"Modify rig initialization to create refinery as a git worktree instead of a separate clone.\n\n## Changes\n- internal/rig/init.go or similar - change refinery setup\n- Create worktree at \u003crig\u003e/refinery/ with branch 'refinery'\n- Remove clone logic for refinery\n- Update any path assumptions\n\n## Considerations\n- Refinery worktree should track main (or its own branch?)\n- May need to handle existing rigs (migration path)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T20:25:25.927013-08:00","updated_at":"2025-12-23T20:31:07.100875-08:00","closed_at":"2025-12-23T20:31:07.100875-08:00","close_reason":"Rig init now creates refinery as worktree of mayor clone","dependencies":[{"issue_id":"gt-4u5z.1","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:25.92745-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-4u5z.2","title":"Remove origin push from polecat workflow","description":"Polecats should no longer push their branches to origin.\n\n## Changes\n- internal/cmd/done.go - remove 'git push origin HEAD'\n- internal/cmd/mq_submit.go - remove branch push\n- Molecule templates - remove push instructions\n- Any hooks that push polecat branches\n\n## Verification\n- Polecat completes work without pushing\n- Branch stays local\n- Refinery can still see the branch (via shared .git)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T20:25:27.079456-08:00","updated_at":"2025-12-23T20:33:43.173059-08:00","closed_at":"2025-12-23T20:33:43.173059-08:00","close_reason":"Removed origin push from done.go, mq_submit.go, spawn.go, and molecule templates","dependencies":[{"issue_id":"gt-4u5z.2","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:27.081989-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.2","depends_on_id":"gt-4u5z.1","type":"blocks","created_at":"2025-12-23T20:25:43.547484-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-4u5z.3","title":"Update refinery to read local branches","description":"Refinery manager needs to access polecat branches locally instead of fetching from origin.\n\n## Changes\n- internal/refinery/manager.go - remove origin fetch for MR branches\n- internal/refinery/engineer.go - local branch access\n- Remove DeleteRemoteBranch calls (branches are local now)\n- Update merge workflow to work with local refs\n\n## Key insight\nAll worktrees share the same .git - refinery can see polecat/nux branch directly.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T20:25:28.500632-08:00","updated_at":"2025-12-23T20:34:33.879575-08:00","closed_at":"2025-12-23T20:34:33.879575-08:00","close_reason":"Refinery now deletes local branches instead of remote branches","dependencies":[{"issue_id":"gt-4u5z.3","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:28.502671-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.3","depends_on_id":"gt-4u5z.1","type":"blocks","created_at":"2025-12-23T20:25:43.633822-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-4u5z.4","title":"Convert MR queue to wisp storage","description":"MR queue should use wisp storage (.beads-wisp/) instead of durable beads.\n\n## Design (Simplified)\n\nWith refinery as worktree, polecats and refinery share the same machine. No cross-machine MR coordination needed. Wisps are the natural fit.\n\n### Storage\n- Location: `.beads-wisp/mq/\u003cmr-id\u003e.json`\n- Format: Same MRFields structure (branch, target, source_issue, worker, rig)\n- Lifecycle: Create on submit, delete after merge\n\n### Code Changes\n\n1. **MR Creation** (done.go, mq_submit.go)\n - Write to `.beads-wisp/mq/` instead of `bd create --type=merge-request`\n - Generate ID: `mr-\u003ctimestamp\u003e-\u003crandom\u003e` or similar\n\n2. **Refinery Query** (refinery/manager.go, engineer.go)\n - Read from `.beads-wisp/mq/` directory\n - List files, parse JSON, process in order\n\n3. **Cleanup**\n - Delete MR file after successful merge\n - On failure, leave file (refinery retries)\n\n### What Stays in Beads\n- Source issues (the work being merged) - still tracked in beads\n- Merge commits reference source issue ID\n- `bd close \u003cissue\u003e` still happens on merge\n\n### Benefits\n- No sync overhead for transient MR state\n- Simpler model (file per MR, delete when done)\n- Consistent with wisp philosophy (ephemeral operational state)\n\n### Not Needed\n- Digest squashing (MRs are deleted, not accumulated)\n- Cross-machine visibility (single-machine architecture)","status":"in_progress","priority":2,"issue_type":"task","created_at":"2025-12-23T20:25:29.716788-08:00","updated_at":"2025-12-23T21:18:03.969038-08:00","dependencies":[{"issue_id":"gt-4u5z.4","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:29.717201-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.4","depends_on_id":"gt-4u5z.3","type":"blocks","created_at":"2025-12-23T20:25:43.719801-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-4u5z.5","title":"Update architecture documentation","description":"Update all documentation to reflect refinery-as-worktree model.\n\n## Files to update\n- docs/architecture.md (if exists)\n- CLAUDE.md references to refinery\n- mayor/rig/docs/*.md - any refinery docs\n- wisp-architecture.md - add MR wisp details\n- README files mentioning clone vs worktree\n\n## Key messages\n- Refinery is worktree, not clone\n- Polecat branches stay local\n- Only main pushed to origin\n- MRs are wisps (ephemeral)","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T20:25:31.192025-08:00","updated_at":"2025-12-23T20:25:31.192025-08:00","dependencies":[{"issue_id":"gt-4u5z.5","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:31.194085-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.5","depends_on_id":"gt-4u5z.2","type":"blocks","created_at":"2025-12-23T20:25:43.819111-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.5","depends_on_id":"gt-4u5z.3","type":"blocks","created_at":"2025-12-23T20:25:43.907113-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.5","depends_on_id":"gt-4u5z.4","type":"blocks","created_at":"2025-12-23T20:25:43.99734-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-4u5z.4","title":"Convert MR queue to wisp storage","description":"MR queue should use wisp storage (.beads-wisp/) instead of durable beads.\n\n## Design (Simplified)\n\nWith refinery as worktree, polecats and refinery share the same machine. No cross-machine MR coordination needed. Wisps are the natural fit.\n\n### Storage\n- Location: `.beads-wisp/mq/\u003cmr-id\u003e.json`\n- Format: Same MRFields structure (branch, target, source_issue, worker, rig)\n- Lifecycle: Create on submit, delete after merge\n\n### Code Changes\n\n1. **MR Creation** (done.go, mq_submit.go)\n - Write to `.beads-wisp/mq/` instead of `bd create --type=merge-request`\n - Generate ID: `mr-\u003ctimestamp\u003e-\u003crandom\u003e` or similar\n\n2. **Refinery Query** (refinery/manager.go, engineer.go)\n - Read from `.beads-wisp/mq/` directory\n - List files, parse JSON, process in order\n\n3. **Cleanup**\n - Delete MR file after successful merge\n - On failure, leave file (refinery retries)\n\n### What Stays in Beads\n- Source issues (the work being merged) - still tracked in beads\n- Merge commits reference source issue ID\n- `bd close \u003cissue\u003e` still happens on merge\n\n### Benefits\n- No sync overhead for transient MR state\n- Simpler model (file per MR, delete when done)\n- Consistent with wisp philosophy (ephemeral operational state)\n\n### Not Needed\n- Digest squashing (MRs are deleted, not accumulated)\n- Cross-machine visibility (single-machine architecture)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T20:25:29.716788-08:00","updated_at":"2025-12-23T21:22:32.180049-08:00","closed_at":"2025-12-23T21:22:32.180049-08:00","close_reason":"MR queue now uses wisp storage (.beads-wisp/mq/). MRs are created as JSON files, read by refinery, deleted after merge.","dependencies":[{"issue_id":"gt-4u5z.4","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:29.717201-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.4","depends_on_id":"gt-4u5z.3","type":"blocks","created_at":"2025-12-23T20:25:43.719801-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-4u5z.5","title":"Update architecture documentation","description":"Update all documentation to reflect refinery-as-worktree model.\n\n## Files to update\n- docs/architecture.md (if exists)\n- CLAUDE.md references to refinery\n- mayor/rig/docs/*.md - any refinery docs\n- wisp-architecture.md - add MR wisp details\n- README files mentioning clone vs worktree\n\n## Key messages\n- Refinery is worktree, not clone\n- Polecat branches stay local\n- Only main pushed to origin\n- MRs are wisps (ephemeral)","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-23T20:25:31.192025-08:00","updated_at":"2025-12-23T21:24:01.184709-08:00","closed_at":"2025-12-23T21:24:01.184709-08:00","close_reason":"Updated merge-queue-design.md with new architecture: wisp MRs, local branches, refinery worktree","dependencies":[{"issue_id":"gt-4u5z.5","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:31.194085-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.5","depends_on_id":"gt-4u5z.2","type":"blocks","created_at":"2025-12-23T20:25:43.819111-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.5","depends_on_id":"gt-4u5z.3","type":"blocks","created_at":"2025-12-23T20:25:43.907113-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.5","depends_on_id":"gt-4u5z.4","type":"blocks","created_at":"2025-12-23T20:25:43.99734-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-4u5z.6","title":"Design future federation model","description":"Document how remote/federated refinery would work in the future.\n\n## Options to document\n1. Git bundles - portable patches, no branches on origin\n2. Dedicated integration branch pattern (integration/*)\n3. Hybrid - local for same-machine, bundles for remote\n\n## Deliverable\nDesign doc in docs/federation-refinery.md or similar.\nNot implementing now - just capturing the design for when needed.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-23T20:25:32.265488-08:00","updated_at":"2025-12-23T20:25:32.265488-08:00","dependencies":[{"issue_id":"gt-4u5z.6","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:32.267467-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-4u5z.7","title":"Add migration path for existing rigs","description":"Existing rigs have refinery as clone. Need migration path.\n\n## Options\n1. Manual: User runs 'gt rig migrate' or similar\n2. Automatic: Detect clone, convert to worktree on next start\n3. Deprecation: Old rigs work but warn, new rigs use worktree\n\n## Considerations\n- Don't break existing setups\n- Clear upgrade path\n- Handle in-flight MRs during migration","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T20:25:33.746893-08:00","updated_at":"2025-12-23T20:25:33.746893-08:00","dependencies":[{"issue_id":"gt-4u5z.7","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:33.749766-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.7","depends_on_id":"gt-4u5z.1","type":"blocks","created_at":"2025-12-23T20:25:44.086388-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-4xas","title":"Merge fix/spawn-beads-path branch to main","description":"Branch has gt nudge command; main has notification deduplication. Both valuable.\n\nKey insight: Only ~10 commits diverged each way in mayor/rig.\n- Branch: 9509afa feat(nudge): Add gt nudge command (MISSING from main)\n- Main: d2fccd5 slot-based notification deduplication (KEEP)\n\nMerge plan:\n1. git merge fix/spawn-beads-path --no-ff\n2. Keep nudge.go from branch\n3. Keep notification.go from main\n4. Merge tmux.go (both NudgeSession AND SendKeysReplace)\n5. go build \u0026\u0026 go test\n6. Deploy to ~/.local/bin/gt","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T13:28:01.684557-08:00","updated_at":"2025-12-20T13:30:55.817964-08:00","closed_at":"2025-12-20T13:30:55.817964-08:00"}
|
||||
@@ -473,6 +473,7 @@
|
||||
{"id":"gt-gby","title":"gt handoff: Unified agent lifecycle command","description":"## Summary\n\nUnified `gt handoff` command for ALL agent types to request lifecycle actions.\n\n## Usage\n\ngt handoff # Context-aware default\ngt handoff --shutdown # Terminate, cleanup, don't restart\ngt handoff --cycle # Restart with handoff mail\ngt handoff --restart # Fresh restart, no handoff\n\n## Context-Aware Defaults\n\n| Agent Type | Default | Reason |\n|------------|---------|--------|\n| Polecat | --shutdown | Ephemeral, work is done |\n| Witness | --cycle | Long-running, context full |\n| Refinery | --cycle | Long-running, context full |\n| Mayor | --cycle | Long-running, context full |\n| Crew | (sends mail only) | Human-managed |\n\n## What gt handoff Does\n\n1. **Verify safe to stop**\n - Git state clean (no uncommitted changes)\n - Work handed off (PR exists for polecats)\n\n2. **Send handoff mail to self** (for cycle/restart)\n - Captures current state\n - New session will read this\n\n3. **Send lifecycle request to manager**\n - Polecats/Refinery → Witness\n - Witness/Mayor → Daemon\n - Format: mail to \u003cmanager\u003e with action type\n\n4. **Set state: requesting_\u003caction\u003e**\n - Lifecycle manager checks this before acting\n\n5. **Wait for termination**\n - Don't self-exit - let manager kill session\n - Ensures clean handoff\n\n## Lifecycle Request Flow\n\nAgent Lifecycle Manager\n | |\n | 1. gt handoff --cycle |\n | a. Verify git clean |\n | b. Send handoff mail to self |\n | c. Set requesting_cycle=true |\n | d. Send lifecycle request |\n |------------------------------------→|\n | |\n | 2. Receive request\n | 3. Verify state |\n | 4. Kill session |\n | 5. Start new |\n | (for cycle) |\n | |\n | New session reads handoff |\n | Resumes work |\n\n## Who Manages Whom\n\n| Agent | Sends lifecycle request to |\n|-------|---------------------------|\n| Polecat | \u003crig\u003e/witness |\n| Refinery | \u003crig\u003e/witness |\n| Witness | daemon/ |\n| Mayor | daemon/ |\n\n## Implementation\n\n1. Detect current role (polecat, witness, refinery, mayor, crew)\n2. Apply context-aware default if no flag specified\n3. Run pre-flight checks (git clean, work handed off)\n4. Send handoff mail to self (if cycling)\n5. Send lifecycle request to appropriate manager\n6. Set requesting_\u003caction\u003e in state.json\n7. Wait (manager will kill us)\n\n## For Polecats (--shutdown)\n\nAdditional cleanup after kill:\n- Witness removes worktree\n- Witness deletes polecat branch\n- Polecat ceases to exist\n\n## Related Issues\n\n- gt-99m: Daemon (handles Mayor/Witness lifecycle)\n- gt-7ik: Ephemeral polecats (polecat cleanup)\n- gt-eu9: Witness session cycling","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-12-18T11:39:40.806863-08:00","updated_at":"2025-12-18T18:18:22.35369-08:00","dependencies":[{"issue_id":"gt-gby","depends_on_id":"gt-7ik","type":"blocks","created_at":"2025-12-18T11:39:46.423945-08:00","created_by":"daemon"},{"issue_id":"gt-gby","depends_on_id":"gt-eu9","type":"blocks","created_at":"2025-12-18T11:39:46.547204-08:00","created_by":"daemon"},{"issue_id":"gt-gby","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T11:50:24.142182-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-ggmc","title":"Merge: gt-83k0","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-83k0\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T23:36:24.551025-08:00","updated_at":"2025-12-22T23:38:38.536524-08:00","closed_at":"2025-12-22T23:38:38.536524-08:00","close_reason":"Merged to main"}
|
||||
{"id":"gt-gl2","title":"Clarify Mayor vs Witness cleanup responsibilities","description":"Document the cleanup authority model: Witness owns ALL per-worker cleanup, Mayor never involved.\n\n## The Rule\n\n**Witness handles ALL per-worker cleanup. Mayor is never involved.**\n\n## Why This Matters\n\n1. Separation of concerns: Mayor strategic, Witness operational\n2. Reduced coordination overhead: No back-and-forth for routine cleanup\n3. Faster shutdown: Witness kills workers immediately upon verification\n4. Cleaner escalation: Mayor only hears about problems\n\n## What Witness Handles\n\n- Verifying worker git state before kill\n- Nudging workers to fix dirty state\n- Killing worker sessions\n- Updating worker state (sleep/wake)\n- Logging verification results\n\n## What Mayor Handles\n\n- Receiving swarm complete notifications\n- Deciding whether to start new swarms\n- Handling escalations (stuck workers after 3 retries)\n- Cross-rig coordination\n\n## Escalation Path\n\nWorker stuck -\u003e Witness nudges (up to 3x) -\u003e Witness escalates to Mayor -\u003e Mayor decides: force kill, reassign, or human\n\n## Anti-Patterns\n\nDO NOT: Mayor asks Witness if worker X is clean\nDO: Witness reports swarm complete, all workers verified\n\nDO NOT: Mayor kills worker sessions directly\nDO: Mayor tells Witness to abort swarm, Witness handles cleanup\n\nDO NOT: Workers report done to Mayor\nDO: Workers report to Witness, Witness aggregates and reports up","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-15T19:48:56.678724-08:00","updated_at":"2025-12-15T20:48:12.068964-08:00","dependencies":[{"issue_id":"gt-gl2","depends_on_id":"gt-82y","type":"blocks","created_at":"2025-12-15T19:49:05.929877-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-gl6s","title":"gt spawn: polecats report success but no work actually happens","description":"## Problem\n\ngt spawn appears to succeed (creates worktree, sends mail notifications, reports 'Session started') but:\n1. No actual Claude session runs\n2. Polecats send POLECAT_DONE messages without doing work\n3. No code is committed or pushed\n4. MR issues are created but branches don't exist\n\n## Observed Behavior\n\nSpawned 12 polecats with gt spawn beads/\u003cname\u003e --create --issue \u003cid\u003e\n- All reported 'Session started'\n- All sent POLECAT_STARTED notifications\n- All sent POLECAT_DONE notifications\n- But: no worktrees remained, no branches pushed, no code written\n\n## Expected Behavior\n\nPolecats should actually run Claude Code and complete assigned work before sending POLECAT_DONE.\n\n## Impact\n\nSilent failure causes false completion signals, wasted witness time processing fake completions, and stale MR/assignee pollution in beads.","status":"open","priority":1,"issue_type":"bug","created_at":"2025-12-23T21:22:45.498303-08:00","updated_at":"2025-12-23T21:22:45.498303-08:00"}
|
||||
{"id":"gt-glzm","title":"Digest: mol-deacon-patrol","description":"Patrol: 4 msgs (2 blocked on bd mol current, 2 handoffs). 11 polecats, 18 sessions. Swarm in progress.","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T00:23:09.331459-08:00","updated_at":"2025-12-23T00:23:09.331459-08:00","closed_at":"2025-12-23T00:23:09.331412-08:00","close_reason":"Squashed from 5 wisps"}
|
||||
{"id":"gt-gswn","title":"Integration test: agent waits for CI via gate","description":"End-to-end test of the gate workflow.\n\n## Test Scenario\n1. Agent creates gate: bd gate create --await gh:run:123 --timeout 5m --notify beads/dave\n2. Agent writes handoff and exits\n3. Deacon patrol checks gate condition\n4. (Mock) GitHub run completes\n5. Deacon notifies waiter and closes gate\n6. New agent session reads mail and resumes\n\n## Test Requirements\n- Mock GitHub API responses\n- Test timeout path\n- Test multiple waiters\n- Verify mail notifications sent\n\n## Moved from beads\nOriginally bd-rl5t. Tests Deacon patrol which is in gastown.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:23:56.582834-08:00","updated_at":"2025-12-23T12:23:56.582834-08:00","dependencies":[{"issue_id":"gt-gswn","depends_on_id":"gt-dh65","type":"blocks","created_at":"2025-12-23T12:24:01.787444-08:00","created_by":"stevey"}]}
|
||||
{"id":"gt-h0v5","title":"Add keyboard navigation and filtering","description":"Keyboard navigation: j/k or arrows to move, enter to expand/collapse, q to quit. Filtering: by rig name, worker name, event type. Search within activity stream.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T16:27:20.27464-08:00","updated_at":"2025-12-23T16:27:20.27464-08:00","dependencies":[{"issue_id":"gt-h0v5","depends_on_id":"gt-tr0a","type":"blocks","created_at":"2025-12-23T16:27:40.14167-08:00","created_by":"daemon"},{"issue_id":"gt-h0v5","depends_on_id":"gt-55kx","type":"blocks","created_at":"2025-12-23T16:27:40.224089-08:00","created_by":"daemon"},{"issue_id":"gt-h0v5","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:31.027436-08:00","created_by":"daemon"}]}
|
||||
|
||||
Reference in New Issue
Block a user