diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index a65f14f1..ec3bd6aa 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -4,23 +4,21 @@ {"id":"gt-01u","title":"Design: Collapse mail into beads","description":"## Proposal\n\nReplace the separate mail system (JSONL inboxes) with beads issues using a naming convention.\n\n## Rationale\n\nIf all state should be in beads (work items, swarm state, dependencies), why have a separate system for messages? Mail is just:\n- Handoffs (agent → self)\n- Commands (Mayor → Refinery)\n- Escalations (Witness → Mayor)\n\nThese can all be beads issues with a special prefix.\n\n## Design\n\n### Convention\n- Messages use `@-` prefix: `@-witness-1734012345`\n- Assignee = recipient\n- Status: open = unread, closed = read/acknowledged\n- Priority 0 = urgent\n\n### Commands (thin wrappers)\n```bash\ngt mail send witness -s \"Subject\" -m \"Body\"\n → bd create --prefix=@ --title=\"Subject\" --assignee=witness --description=\"Body\"\n\ngt mail inbox\n → bd list --prefix=@ --assignee=$(gt whoami) --status=open\n\ngt mail read @-abc\n → bd show @-abc \u0026\u0026 bd close @-abc\n```\n\n### Notification\nDaemon watches for new `@-` issues and pokes relevant sessions.\nOr: agents poll on heartbeat (simpler).\n\n## What We Remove\n- `mail/inbox.jsonl` files\n- Mail JSONL read/write code\n- Separate delivery mechanism\n\n## What We Keep\n- `gt mail` CLI (as wrapper)\n- Handoff semantics\n- Notification (via daemon or polling)\n\n## Benefits\n- One system, one sync, one query interface\n- All communication in git history\n- Simpler architecture\n\n## Risks\n- Beads prefix filtering must be efficient\n- Namespace collision with user prefixes\n- Performance for high-frequency messages (probably fine for handoffs)\n\n## Decision Point\nDo we need first-class mail support in beads (`bd mail` commands) or is convention sufficient?","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T02:10:18.32879-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-02or","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:37:21.062369-08:00","updated_at":"2025-12-27T21:26:04.601701-08:00","deleted_at":"2025-12-27T21:26:04.601701-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-038es","title":"Digest: mol-deacon-patrol","description":"Patrol 2: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:35:42.688017-08:00","updated_at":"2025-12-26T18:35:42.688017-08:00","closed_at":"2025-12-26T18:35:42.687972-08:00"} -{"id":"gt-03lbg","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T20:00:06.469283-08:00","updated_at":"2025-12-27T21:26:00.669501-08:00","deleted_at":"2025-12-27T21:26:00.669501-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-03rb","title":"Merge: gt-xw7b","description":"branch: polecat/morsov\ntarget: main\nsource_issue: gt-xw7b\nrig: gastown","status":"tombstone","priority":4,"issue_type":"merge-request","created_at":"2025-12-21T16:43:54.909633-08:00","updated_at":"2025-12-27T21:27:23.014757-08:00","deleted_at":"2025-12-27T21:27:23.014757-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-04cfe","title":"Digest: mol-deacon-patrol","description":"Patrol 9: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:21:44.500513-08:00","updated_at":"2025-12-27T21:26:00.157627-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-04cfe","depends_on_id":"gt-eph-ljc","type":"parent-child","created_at":"2025-12-27T20:21:44.50131-08:00","created_by":"deacon"}],"deleted_at":"2025-12-27T21:26:00.157627-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-051cr","title":"gt channel publish command","description":"New CLI command for ephemeral broadcast to channels.\n\n## Deliverables\n\n1. New command: gt channel publish \u003cchannel\u003e \u003cmessage\u003e\n - Example: gt channel publish #witnesses \"Swarm incoming\"\n2. Resolve channel to running sessions\n3. Nudge each session with message\n4. Report delivery status\n\n## Usage\n```bash\ngt channel publish #town \"Handoff in 5 minutes\"\ngt channel publish #rig/gastown \"Merge queue paused\"\n```\n\n## Dependencies\n- #channel resolution (gt-???)\n\n## Acceptance\n- Command works with #channel syntax\n- Message delivered to running sessions\n- Clear output showing delivery status","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-26T14:52:35.212133-08:00","updated_at":"2025-12-26T14:52:35.212133-08:00","dependencies":[{"issue_id":"gt-051cr","depends_on_id":"gt-zk7wl","type":"blocks","created_at":"2025-12-26T14:53:13.305802-08:00","created_by":"daemon"}]} {"id":"gt-051em","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:30:03.465327-08:00","updated_at":"2025-12-27T21:26:02.601879-08:00","deleted_at":"2025-12-27T21:26:02.601879-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-05cx","title":"Merge: gt-h6eq.1","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-h6eq.1\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:44:11.942999-08:00","updated_at":"2025-12-27T21:27:22.844814-08:00","deleted_at":"2025-12-27T21:27:22.844814-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-082","title":"Worker cleanup: Beads sync on shutdown","description":"Add beads sync verification to worker cleanup checklist and Witness verification.\n\n## Update to Decommission Checklist (gt-sd6)\n\nAdd to pre-done verification:\n- bd sync --status must show 'Up to date'\n- git status .beads/ must show no changes\n\n## Beads Edge Cases\n\nUncommitted beads changes:\n bd sync\n git add .beads/\n git commit -m 'beads: final sync'\n\nBeads sync conflict (rare):\n git fetch origin main\n git checkout main -- .beads/\n bd sync --force\n git add .beads/\n git commit -m 'beads: resolve sync conflict'\n\n## Update to Witness Verification (gt-f8v)\n\nWhen capturing worker state:\n town capture \u003cpolecat\u003e \"bd sync --status \u0026\u0026 git status .beads/\"\n\nCheck for:\n- bd sync --status shows 'Up to date'\n- git status .beads/ shows no changes\n\nIf beads not synced, nudge:\n WITNESS CHECK: Beads not synced. Run 'bd sync' then commit .beads/. Signal done when complete.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-15T19:47:21.757756-08:00","updated_at":"2025-12-27T21:29:54.598466-08:00","dependencies":[{"issue_id":"gt-082","depends_on_id":"gt-l3c","type":"blocks","created_at":"2025-12-15T19:47:35.977804-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.598466-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-08mw2","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T14:19:00.702712-08:00","updated_at":"2025-12-25T14:19:00.702712-08:00","closed_at":"2025-12-25T14:19:00.702682-08:00"} {"id":"gt-09hq0","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:05:21.881552-08:00","updated_at":"2025-12-25T00:05:21.881552-08:00","closed_at":"2025-12-25T00:05:21.881524-08:00"} {"id":"gt-09i4","title":"Unify tmux session lifecycle: prefer exec-over-shell pattern","description":"## Context\n\nWhen `gt crew at` is run from INSIDE the target session, it uses `execClaude()` which\nreplaces the shell with Claude directly. This is actually preferable behavior:\n- Cleaner exit (no intermediate shell prompt)\n- More reliable for programmatic worker recycling\n- Better UX for humans\n\nBut currently this only happens accidentally when you run `gt crew at` while already\nin the session at a shell prompt.\n\n## Current behavior\n\n1. Session created: `tmux new-session` starts with shell\n2. Claude started via `send-keys` → shell spawns claude as child\n3. Exit claude → return to shell → exit shell → session ends\n\nWith exec path (only if already in session):\n1. `execClaude()` replaces shell with claude\n2. Exit claude → session ends (no intermediate shell)\n\n## Desired behavior\n\nConsider making exec-the-shell the DEFAULT for all crew/persistent sessions:\n- Spawn session with shell\n- Wait for ready\n- Use `respawn-pane -k` with claude command (kills shell, starts claude directly)\n\nThis gives the cleaner lifecycle without requiring the user to be inside the session.\n\n## Related\n\nPart of tmux control plane unification - ability to manage workers from any session.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T14:24:34.371414-08:00","updated_at":"2025-12-27T21:29:55.492782-08:00","deleted_at":"2025-12-27T21:29:55.492782-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-09mag","title":"Digest: mol-deacon-patrol","description":"Patrol 12: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:44:36.232841-08:00","updated_at":"2025-12-25T13:44:36.232841-08:00","closed_at":"2025-12-25T13:44:36.232809-08:00"} {"id":"gt-0a90","title":"Add gt hook command (wrapper for bd hook)","description":"Add a thin wrapper command `gt hook` that calls `bd hook` to inspect what's pinned to an agent's hook.\n\n## Usage\n\n```bash\ngt hook # Show what's on current agent's hook\ngt hook --agent deacon # Show Deacon's hook\ngt hook --agent gastown/furiosa # Show polecat's hook\n```\n\n## Implementation\n\nThin wrapper in gt that:\n1. Determines current agent identity\n2. Calls `bd hook [--agent \u003cname\u003e]`\n3. Formats output for gt context\n\n## Why gt wrapper?\n\n- Consistent with gt ecosystem (gt mail, gt status, etc.)\n- Can add gt-specific context (session status, etc.)\n- Easier discovery for gt users\n\n## Related\n\n- bd hook command (implemented by Dave)\n- Chemistry UX design: gastown/mayor/rig/docs/chemistry-design-changes.md","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T02:37:02.429497-08:00","updated_at":"2025-12-22T02:37:02.429497-08:00"} {"id":"gt-0asj","title":"Merge: gt-5af.5","description":"branch: polecat/Scabrous\ntarget: main\nsource_issue: gt-5af.5\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T17:50:25.227909-08:00","updated_at":"2025-12-27T21:27:22.700495-08:00","deleted_at":"2025-12-27T21:27:22.700495-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-0atys","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Nominal - halfway point","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:50:19.218794-08:00","updated_at":"2025-12-27T21:26:04.148881-08:00","deleted_at":"2025-12-27T21:26:04.148881-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-0b1c","title":"Review: Refinery patrol template changes (gt-qz2l)","description":"Polecat dementus implemented refinery template changes: banners, wisp-based execution, propulsion protocol. Review for correctness and consistency with witness/deacon patterns.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T19:57:40.117102-08:00","updated_at":"2025-12-23T19:57:40.117102-08:00"} {"id":"gt-0bx57","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All healthy, dave now running","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T17:45:49.357389-08:00","updated_at":"2025-12-27T21:26:01.142534-08:00","deleted_at":"2025-12-27T21:26:01.142534-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-0c7s","title":"Add 'gt account default' command","description":"Set the default account in accounts.yaml. Used when no GT_ACCOUNT env or --account flag specified.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:20.55537-08:00","updated_at":"2025-12-27T21:29:56.17575-08:00","dependencies":[{"issue_id":"gt-0c7s","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:34.811443-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.17575-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-0cys","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:26:42.913686-08:00","updated_at":"2025-12-24T21:26:42.913686-08:00","closed_at":"2025-12-24T21:26:42.913655-08:00"} {"id":"gt-0do6","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-24T21:55:26.347226-08:00","updated_at":"2025-12-27T21:29:57.79216-08:00","deleted_at":"2025-12-27T21:29:57.79216-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-0dra","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:15.178129-08:00","updated_at":"2025-12-27T21:26:04.557376-08:00","deleted_at":"2025-12-27T21:26:04.557376-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-0ei3","title":"Add molecules.jsonl as separate catalog file for template molecules","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-19T20:16:10.763471-08:00","updated_at":"2025-12-27T21:29:53.881608-08:00","deleted_at":"2025-12-27T21:29:53.881608-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} @@ -41,6 +39,7 @@ {"id":"gt-0sf2","title":"Add gt rig rename command","description":"Allow renaming a rig after creation. Similar to gt crew rename, this should:\n\n- Update the directory name\n- Update mayor/rigs.json entry\n- Update the rig's config.json\n- Handle running agents gracefully (require shutdown first or --force)\n\nUse case: User creates a rig, later wants to change its name for better organization.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-23T04:46:41.988492-08:00","updated_at":"2025-12-27T21:29:56.134098-08:00","deleted_at":"2025-12-27T21:29:56.134098-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-0skyg","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize.\nThe spawn command returns immediately without waiting. This step finds spawned\npolecats that are now ready and sends them a trigger to start working.\n\n```bash\n# For each rig with polecats\nfor rig in gastown beads; do\n gt polecats $rig\n # For each working polecat, check if Claude is ready\n # Use tmux capture-pane to look for \"\u003e \" prompt\ndone\n```\n\nFor each ready polecat that hasn't been triggered yet:\n1. Send \"Begin.\" to trigger UserPromptSubmit hook\n2. The hook injects mail, polecat sees its assignment\n3. Mark polecat as triggered in state\n\nUse WaitForClaudeReady from tmux package (polls for \"\u003e \" prompt).\nTimeout: 60 seconds per polecat. If not ready, try again next cycle.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.777565-08:00","updated_at":"2025-12-27T21:29:55.249011-08:00","dependencies":[{"issue_id":"gt-0skyg","depends_on_id":"gt-uru8z","type":"blocks","created_at":"2025-12-25T02:11:33.977731-08:00","created_by":"stevey"}],"deleted_at":"2025-12-27T21:29:55.249011-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-0tnk0","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:49:32.147073-08:00","updated_at":"2025-12-25T10:49:32.147073-08:00","closed_at":"2025-12-25T10:49:32.147044-08:00"} +{"id":"gt-0xhh0","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:36:17.883152-08:00","updated_at":"2025-12-25T00:36:17.883152-08:00","closed_at":"2025-12-25T00:36:17.883115-08:00"} {"id":"gt-0xkyj","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T20:21:00.875459-08:00","updated_at":"2025-12-27T20:21:00.875459-08:00","closed_at":"2025-12-27T20:21:00.875416-08:00","dependencies":[{"issue_id":"gt-0xkyj","depends_on_id":"gt-eph-6e9","type":"parent-child","created_at":"2025-12-27T20:21:00.876206-08:00","created_by":"deacon"}]} {"id":"gt-0xuso","title":"Digest: mol-deacon-patrol","description":"P10: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:59:07.504644-08:00","updated_at":"2025-12-25T19:59:07.504644-08:00","closed_at":"2025-12-25T19:59:07.504589-08:00"} {"id":"gt-0yn0","title":"test pin fix 2","notes":"Released: displaced by new sling","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T12:15:48.827437-08:00","updated_at":"2025-12-27T21:29:56.001943-08:00","deleted_at":"2025-12-27T21:29:56.001943-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -71,7 +70,6 @@ {"id":"gt-1f51t","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 6: routine, healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:23:52.631309-08:00","updated_at":"2025-12-27T21:26:01.924968-08:00","deleted_at":"2025-12-27T21:26:01.924968-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1fl","title":"gt crew restart command","description":"Add a 'gt crew restart' command that kills the tmux session and restarts fresh. Useful when a crew member gets confused or needs a clean slate.\n\nShould:\n- Kill existing tmux session if running\n- Start fresh session with claude\n- Run gt prime to reinitialize context\n\nAlias: gt crew rs","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T19:47:32.131386-08:00","updated_at":"2025-12-27T21:29:57.261152-08:00","deleted_at":"2025-12-27T21:29:57.261152-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1fqwd","title":"Digest: mol-deacon-patrol","description":"Patrol 2 complete: all healthy, no issues","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:58:51.246552-08:00","updated_at":"2025-12-27T21:26:00.677765-08:00","deleted_at":"2025-12-27T21:26:00.677765-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-1g351","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:51:04.158534-08:00","updated_at":"2025-12-25T10:51:04.158534-08:00","closed_at":"2025-12-25T10:51:04.158502-08:00"} {"id":"gt-1gbf","title":"Digest: mol-deacon-patrol","description":"Patrol #5: Routine - 6 sessions healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:22:06.354723-08:00","updated_at":"2025-12-27T21:26:04.793249-08:00","deleted_at":"2025-12-27T21:26:04.793249-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1gy","title":"gt mail read: Support numeric indices for message ID","description":"Allow 'gt mail read 1' to read the first message in inbox.\n\nCurrent behavior requires full message ID like 'msg-abc123'.\nShould support:\n- Numeric index: 'gt mail read 1' reads first/newest message\n- Partial ID match: 'gt mail read abc' matches 'msg-abc123'\n\nThis is a UX improvement - agents frequently type 'gt mail read 1'.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:49:54.60582-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-1gy","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:22:47.658947-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-1i8r","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy - Mayor OK, 2 witnesses, 2 refineries, 0 polecats, 8 sessions, no callbacks","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:44:43.300311-08:00","updated_at":"2025-12-27T21:26:04.227139-08:00","deleted_at":"2025-12-27T21:26:04.227139-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -84,9 +82,9 @@ {"id":"gt-1le","title":"town handoff command (optional)","description":"CLI commands for session handoff workflow (optional convenience).\n\n## Commands\n\n### gt handoff\nGenerate handoff interactively.\n```\ngt handoff [--send]\n```\n- Collects current state (status, inbox, beads)\n- Prompts for additional notes\n- --send: Mail to self and exit\n\n### gt resume\nCheck for and display pending handoff.\n```\ngt resume\n```\n- Checks inbox for handoff message\n- Displays formatted handoff if found\n- Suggests next actions\n\n## Implementation\n\nThese are convenience wrappers. The same workflow can be done manually:\n```bash\n# Manual handoff\ntown status \u003e /tmp/handoff\ntown inbox \u003e\u003e /tmp/handoff\nbd ready \u003e\u003e /tmp/handoff\n# Edit and send\ntown mail send mayor/ -s \"Session Handoff\" -f /tmp/handoff\n```\n\n## Priority\n\nP2 - Optional. Manual workflow works fine. Nice to have for UX.\n\n## Notes\n\nPart of session cycling workflow designed in [deleted:gt-u82].","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-15T20:15:31.954724-08:00","updated_at":"2025-12-25T02:16:08.528308-08:00","dependencies":[{"issue_id":"gt-1le","depends_on_id":"gt-u82","type":"blocks","created_at":"2025-12-15T20:15:39.647043-08:00","created_by":"daemon"}]} {"id":"gt-1py3y","title":"Unify gt sling and gt spawn with --args support","description":"## Summary\n\nComplete the unification: `gt sling` becomes THE way to assign work. Remove top-level `gt spawn`.\n\n## Current State (Partially Done)\n\n- `gt sling` auto-spawns polecats when target is a rig\n- `gt sling --args` stores args in bead (no-tmux mode, gt-vc3l4)\n- `gt spawn` still exists with flags not yet in sling\n\n## Remaining Work\n\n### 1. Move spawn-only flags to sling\n\n| Flag | Current | Action |\n|------|---------|--------|\n| `--naked` | spawn only | Move to sling |\n| `--create` | spawn only | Move to sling |\n| `--molecule` | spawn only | Move to sling |\n| `--force` | spawn only | Move to sling |\n| `--account` | spawn only | Move to sling |\n| `--no-start` | spawn only | Evaluate if needed |\n\n### 2. Remove top-level gt spawn\n\n- Keep `gt spawn pending` as subcommand if still needed\n- Remove `gt spawn` from root commands\n- Update all docs and CLAUDE.md references\n\n### 3. Unified UX Design\n\nTarget resolution (smart defaults):\n```bash\ngt sling gt-abc # Self (current agent)\ngt sling gt-abc crew # Crew worker in current rig \ngt sling gt-abc gastown # Auto-spawn polecat in rig\ngt sling gt-abc gastown/Toast # Specific polecat\ngt sling gt-abc mayor # Mayor\n```\n\nKey flags:\n```bash\ngt sling gt-abc --args \"patch release\" # Natural language context\ngt sling gt-abc --naked # No-tmux mode (manual start)\ngt sling gt-abc --create # Create polecat if missing\ngt sling gt-abc --molecule mol-review # Use specific workflow\n```\n\n### 4. Update Witness/Refinery/Deacon\n\nThese agents currently use `gt spawn`. Update to use `gt sling`:\n- Witness: spawning polecats for work\n- Refinery: spawning merge workers \n- Deacon: any spawn logic\n\n## Acceptance Criteria\n\n- [ ] All spawn flags available in sling\n- [ ] `gt spawn` removed (or hidden/deprecated)\n- [ ] Witness uses `gt sling \u003crig\u003e` for polecat work\n- [ ] Docs updated\n- [ ] Both human and agent UX is clean","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-26T13:35:55.902844-08:00","updated_at":"2025-12-27T21:29:45.90011-08:00","deleted_at":"2025-12-27T21:29:45.90011-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-1qti","title":"Mayor restart loop: auto-prime and mail check on attach","description":"When mayor session cycles (after /exit, gt mayor attach reconnects), the new session lacks context.\n\n## Current Behavior\n- Mayor exits, shell script loop restarts claude\n- New session starts cold - no gt prime, no mail check\n- Mayor is disoriented, doesn't know prior context\n- Strong 'antimemetic properties' - we discuss fixing it, then forget\n\n## Expected Behavior\nAfter restart, mayor should automatically:\n1. Run gt prime (load role context)\n2. Check gt mail inbox (find handoff messages)\n3. Look for 🤝 HANDOFF messages from predecessor\n\n## Possible Fixes\n1. Startup hook in Claude Code settings that runs gt prime\n2. CLAUDE.md instructions that say 'FIRST THING: run gt prime'\n3. Shell script wrapper that injects context before attach\n4. Modify gt mayor attach to inject prime command\n\n## Related\n- gt-vci: Mayor handoff mail template\n- gt-sye: Mayor startup protocol prompting","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-19T14:44:43.188588-08:00","updated_at":"2025-12-27T21:29:54.025195-08:00","deleted_at":"2025-12-27T21:29:54.025195-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} +{"id":"gt-1r6o6","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:48:31.845975-08:00","updated_at":"2025-12-26T17:48:31.845975-08:00","closed_at":"2025-12-26T17:48:31.845924-08:00"} {"id":"gt-1s89v","title":"gt crew next: Return self when only window in cycle group","description":"## Problem\n`gt crew next --session 'gt-mayor'` returns exit code 1 when the Mayor is the only window in that cycle group.\n\n## Expected Behavior\nWhen an agent is the only member of its cycle group (or not in any configured cycle group), `gt crew next` should return the current session itself rather than failing.\n\n## Context\n- C-b n in Mayor's session triggers this command\n- Currently only rig crews have configured cycle groups\n- Mayor is not part of any crew cycle group, so it should just return itself\n\n## Fix\nIf no other windows exist in the cycle group, return the current session name instead of error.","status":"tombstone","priority":1,"issue_type":"bug","assignee":"gastown/crew/max","created_at":"2025-12-27T16:46:28.657641-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-27T21:29:45.740079-08:00","close_reason":"Fixed - non-crew sessions now return success instead of error","deleted_at":"2025-12-27T21:29:45.740079-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-1su","title":"Spawn inject: Enter not submitted after multiline paste","description":"When gt spawn injects a multiline context (85+ lines), Claude Code shows \n'[Pasted text #1 +85 lines]' but the prompt is not submitted.\n\nThe tmux SendKeys function does include 'Enter' but it appears to not work\nfor long pasted text:\n\n```go\nfunc (t *Tmux) SendKeys(session, keys string) error {\n _, err := t.run(\"send-keys\", \"-t\", session, keys, \"Enter\")\n return err\n}\n```\n\nPossible fixes:\n1. Use tmux paste-buffer instead of send-keys for long text\n2. Send Enter separately after the text\n3. Use bracketed paste mode correctly\n\nReproduction:\n```bash\ngt spawn gastown/Nux --issue gt-u1j.13 --create\n# Session shows pasted text but waits at prompt\n```","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-17T14:09:20.774203-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"} -{"id":"gt-1tqy","title":"Digest: mol-deacon-patrol","description":"Patrol 15","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:24.121681-08:00","updated_at":"2025-12-24T23:10:24.121681-08:00","closed_at":"2025-12-24T23:10:24.121649-08:00"} {"id":"gt-1u9","title":"Interactive prompts for destructive operations","description":"Add interactive confirmations for destructive operations.\n\n## Operations Needing Confirmation\n- `gt swarm cancel` - Cancels active swarm\n- `gt swarm land --force` - Force landing\n- `gt polecat decommission` - Removes polecat\n- `gt rig remove` - Removes rig\n- `gt stop --all` - Stops all sessions\n- `gt mail purge` - Permanently deletes mail\n\n## Implementation Options\n\n### Option 1: promptui library\n```go\nimport \"github.com/manifoldco/promptui\"\n\nprompt := promptui.Prompt{\n Label: \"Delete polecat Toast\",\n IsConfirm: true,\n}\nresult, err := prompt.Run()\n```\n\n### Option 2: Simple stdin\n```go\nfunc confirm(prompt string) bool {\n fmt.Printf(\"%s [y/N]: \", prompt)\n var response string\n fmt.Scanln(\u0026response)\n return strings.ToLower(response) == \"y\"\n}\n```\n\n## Bypass Flags\nAll confirmations skippable with --force or --yes:\n```go\nif !force \u0026\u0026 !confirm(\"Really cancel swarm?\") {\n return nil\n}\n```\n\n## Acceptance Criteria\n- [ ] Destructive ops prompt by default\n- [ ] --force or --yes bypasses\n- [ ] Clear prompt text explaining action\n- [ ] Non-interactive mode (piped input) auto-fails","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T14:48:51.551594-08:00","updated_at":"2025-12-16T16:06:54.283696-08:00"} {"id":"gt-1wc1l","title":"Digest: mol-deacon-patrol","description":"Patrol 18: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:17:51.280971-08:00","updated_at":"2025-12-27T21:26:00.954722-08:00","deleted_at":"2025-12-27T21:26:00.954722-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1wmw","title":"E2E Test: Verify mol-polecat-work spawn","description":"Simple test task for Phase 5 E2E validation","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-24T22:53:38.996878-08:00","updated_at":"2025-12-27T21:29:52.564408-08:00","deleted_at":"2025-12-27T21:29:52.564408-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -94,6 +92,7 @@ {"id":"gt-1xsah","title":"Add gt role command group with env-based role detection","description":"# gt role Command Group\n\nMake role detection less fragile by using env var injection instead of cwd detection.\n\n## Env Vars\n- `GT_ROLE` - authoritative role name (mayor, witness, refinery, polecat, crew)\n- `GT_ROLE_HOME` - canonical home directory for the role\n\n## Detection Precedence\n1. `$GT_ROLE` env var (authoritative)\n2. Fall back to cwd-based detection (legacy/manual)\n3. Warn if they disagree\n\n## Subcommands\n- `gt role` / `gt role show` - show current role\n- `gt role home [ROLE]` - show home dir for role\n- `gt role detect` - force cwd-based detection (debugging)\n- `gt role list` - list all known roles\n- `gt role env` - print export statements\n\n## Integration Points\n- gt prime - show role, warn on mismatch\n- gt mol status - use gt role instead of own detection\n- gt handoff - preserve GT_ROLE, reset to home\n- All spawners - inject GT_ROLE and GT_ROLE_HOME\n\n## Background\nMayor wandered to refinery dir, handoff preserved it, role detection broke.\nEnv var injection makes role stable across cd operations.","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-25T00:50:53.378051-08:00","updated_at":"2025-12-27T21:29:52.539527-08:00","deleted_at":"2025-12-27T21:29:52.539527-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-1xsbn","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 4: routine, healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:22:42.747113-08:00","updated_at":"2025-12-27T21:26:01.942322-08:00","deleted_at":"2025-12-27T21:26:01.942322-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1y0e","title":"🤝 HANDOFF: Investigate beads-sync divergence (221 files)","description":"## Context\n\ngt doctor now detects orphaned code on beads-sync branch. Running it shows:\n\n beads-sync-orphans: 221 file(s) on beads-sync not in main\n\nThis is in the gastown repo (checking from crew/max).\n\n## Background\n\n- Earlier today we recovered orphaned mail migration code lost in merge 96c773f\n- Recently simplified architecture: all workers use mayor/rig/.beads (redirects)\n- This simplification may have caused beads-sync branch to diverge unexpectedly\n\n## Investigation Steps\n\n1. From crew/max run: git diff main..beads-sync --stat\n2. Check if beads-sync should even exist anymore (was for multi-clone sync)\n3. If obsolete with redirect architecture, consider deleting it\n4. If it has legitimate changes, cherry-pick or merge to main\n\n## Key Question\n\nWith all workers using mayor/rig/.beads via redirects, is beads-sync still needed?\n\n## Commands\n\ngit log main..beads-sync --oneline | head -20\ngit diff main..beads-sync -- *.go | head -100","status":"open","priority":2,"issue_type":"message","created_at":"2025-12-20T22:38:49.242099-08:00","updated_at":"2025-12-20T22:38:49.242099-08:00"} +{"id":"gt-1yy51","title":"Digest: mol-deacon-patrol","description":"Patrol 6: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:05:23.106356-08:00","updated_at":"2025-12-27T23:05:23.106356-08:00","closed_at":"2025-12-27T23:05:23.106321-08:00","dependencies":[{"issue_id":"gt-1yy51","depends_on_id":"gt-eph-9xy","type":"parent-child","created_at":"2025-12-27T23:05:23.107213-08:00","created_by":"deacon"}]} {"id":"gt-1z3z","title":"Human escalation path design","description":"Flesh out the human escalation mechanism for Gas Town errors. Currently: errors mail Mayor, Mayor startup prompts about escalations. Need: structured escalation channel, escalation severity levels, and clear documentation. All edge cases in molecular algebra can write warnings to this channel.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T18:45:26.354472-08:00","updated_at":"2025-12-23T18:45:26.354472-08:00"} {"id":"gt-1z4m","title":"gt swarm is implemented but undocumented","description":"internal/swarm/ package is fully implemented with:\n- gt swarm create\n- gt swarm status\n- gt swarm list\n- gt swarm land\n- gt swarm cancel\n- gt swarm start\n\nBut no documentation exists for it:\n- Not in README\n- Not in architecture.md (uses different terminology)\n- Not in any role prompts\n\nEither:\n1. Document gt swarm as the canonical mechanism\n2. Or deprecate it in favor of gt sling\n\nRelated to gt-6n13 (competing molecule mechanisms)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:51:23.768049-08:00","updated_at":"2025-12-24T12:51:23.768049-08:00","dependencies":[{"issue_id":"gt-1z4m","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.817907-08:00","created_by":"daemon"},{"issue_id":"gt-1z4m","depends_on_id":"gt-e0qj2","type":"blocks","created_at":"2025-12-26T23:21:29.370789-08:00","created_by":"daemon"}]} {"id":"gt-202k","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:44","description":"Patrol 6: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:44:33.079069-08:00","updated_at":"2025-12-27T21:26:05.137605-08:00","deleted_at":"2025-12-27T21:26:05.137605-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -108,6 +107,7 @@ {"id":"gt-26y8u","title":"Digest: mol-deacon-patrol","description":"Patrol 15: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:23:52.904806-08:00","updated_at":"2025-12-27T21:26:00.059966-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-26y8u","depends_on_id":"gt-eph-w7f","type":"parent-child","created_at":"2025-12-27T20:23:52.905552-08:00","created_by":"deacon"}],"deleted_at":"2025-12-27T21:26:00.059966-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-272b","title":"Work on gt-role-template: Refine witness/CLAUDE.md role t...","description":"Work on gt-role-template: Refine witness/CLAUDE.md role template. Run 'bd show gt-role-template' to see the full issue.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-20T07:44:10.203384-08:00","updated_at":"2025-12-27T21:29:56.814387-08:00","deleted_at":"2025-12-27T21:29:56.814387-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-29k50","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T05:01:26.919989-08:00","updated_at":"2025-12-27T21:26:03.718654-08:00","deleted_at":"2025-12-27T21:26:03.718654-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-2b9b","title":"Digest: mol-deacon-patrol","description":"Patrol 19","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:11:19.536607-08:00","updated_at":"2025-12-24T23:11:19.536607-08:00","closed_at":"2025-12-24T23:11:19.53657-08:00"} {"id":"gt-2bisz","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:34:00.699814-08:00","updated_at":"2025-12-27T21:26:02.916168-08:00","deleted_at":"2025-12-27T21:26:02.916168-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-2bz","title":"Swarm learning: Refinery merge queue automation","description":"Manually merging 15 polecat branches was painful and error-prone. Refinery should automate: detect completed work, run tests, merge to main, handle conflicts. This is core Refinery value prop.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T01:21:51.137974-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-2c1","title":"Swarm learning: Spawn should auto-notify polecats","description":"town spawn assigns issues but doesn't notify polecats. Required separate 'town session send' to inject prompts. This should be one atomic operation - spawn assigns AND pokes the polecat to start working.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T01:21:47.223608-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} @@ -125,6 +125,7 @@ {"id":"gt-2k4f.2","title":"working","description":"Actively working. Monitor for stuck.\n\nThe polecat is processing its assigned issue ({{issue}}).\nMonitor via peek. Watch for:\n- Progress on commits\n- Status updates in beads\n- SHUTDOWN mail when done\n\nWait for SHUTDOWN signal from the polecat.\nVariables: {{polecat}}, {{issue}}","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T23:43:42.77616-08:00","updated_at":"2025-12-25T11:45:02.114796-08:00","dependencies":[{"issue_id":"gt-2k4f.2","depends_on_id":"gt-2k4f","type":"parent-child","created_at":"2025-12-22T23:43:42.778213-08:00","created_by":"daemon"},{"issue_id":"gt-2k4f.2","depends_on_id":"gt-2k4f.1","type":"blocks","created_at":"2025-12-22T23:43:55.78046-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T11:45:02.114796-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-2k4f.3","title":"done","description":"Exit received. Ready for cleanup.\n\nThe polecat has completed its work and sent SHUTDOWN.\nPerform cleanup:\n```bash\ngt session kill {{polecat}}\ngt worktree prune {{polecat}}\n```\n\nUpdate beads state and close the lease.\nVariables: {{polecat}}, {{issue}}","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T23:43:44.676322-08:00","updated_at":"2025-12-25T11:45:02.114796-08:00","dependencies":[{"issue_id":"gt-2k4f.3","depends_on_id":"gt-2k4f","type":"parent-child","created_at":"2025-12-22T23:43:44.676783-08:00","created_by":"daemon"},{"issue_id":"gt-2k4f.3","depends_on_id":"gt-2k4f.2","type":"blocks","created_at":"2025-12-22T23:43:55.898358-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T11:45:02.114796-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-2kz","title":"CLI: cleanup commands for stale state","description":"Cleanup commands for recovering from stale state.\n\n## Commands\n\n### gt cleanup \u003cpolecat\u003e\nClean stale state for specific polecat.\n```\ngt cleanup \u003crig\u003e/\u003cpolecat\u003e [--dry-run]\n```\n\nActions:\n- Remove orphaned state.json if clone missing\n- Clear stale session references\n- Reset stuck state (working → idle after timeout)\n\n### gt cleanup --all\nClean all polecats in workspace.\n```\ngt cleanup --all [--dry-run]\n```\n\n## Implementation\n```go\nfunc CleanupPolecat(rigName, polecatName string, dryRun bool) (*CleanupResult, error)\n\ntype CleanupResult struct {\n OrphanedStateRemoved bool\n SessionsCleared int\n StateReset bool\n Warnings []string\n}\n```\n\n## Overlap with Doctor\n- Doctor diagnoses and offers --fix\n- Cleanup is more aggressive state recovery\n- Consider merging into doctor --fix\n\n## New File\ninternal/cmd/cleanup.go\n\n## Acceptance Criteria\n- [ ] Removes orphaned state files\n- [ ] Clears stale session refs\n- [ ] --dry-run shows what would happen\n- [ ] Reports all actions taken","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T14:48:31.944982-08:00","updated_at":"2025-12-16T16:07:12.430696-08:00"} +{"id":"gt-2l8r8","title":"Digest: mol-deacon-patrol","description":"Patrol 7: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:40:39.193113-08:00","updated_at":"2025-12-26T18:40:39.193113-08:00","closed_at":"2025-12-26T18:40:39.19307-08:00"} {"id":"gt-2mut4","title":"Digest: mol-deacon-patrol","description":"P14","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:26:05.355961-08:00","updated_at":"2025-12-27T21:26:01.626427-08:00","deleted_at":"2025-12-27T21:26:01.626427-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-2n3f","title":"Merge conflicts: Buzzard/mq-status, Dementus/harness-docs","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-19T12:08:07.486349-08:00","updated_at":"2025-12-27T21:29:54.042016-08:00","deleted_at":"2025-12-27T21:29:54.042016-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-2n6z","title":"Inconsistent error wrapping patterns","description":"Error handling is inconsistent across the codebase:\n\n1. Some functions use fmt.Errorf with %w for wrapping, others don't\n2. return nil, nil patterns (40+ occurrences) sometimes represent 'not found' and sometimes 'error but continue' - should use sentinel errors\n3. Some places return nil for errors when they should propagate them\n\nExamples of nil,nil that might need review:\n- internal/git/git.go:272, 308\n- internal/crew/manager.go:227\n- internal/witness/manager.go:517, 523, 530, 775\n- internal/beads/beads.go:225, 492","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-21T21:35:25.451396-08:00","updated_at":"2025-12-27T21:29:57.891394-08:00","deleted_at":"2025-12-27T21:29:57.891394-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -152,12 +153,13 @@ {"id":"gt-35s","title":"Architecture: beads config and direct landing docs","description":"Added to architecture.md:\n- Beads multi-agent configuration table (daemon, worktree, sync-branch)\n- ASCII directory layout for non-mermaid rendering\n- Direct landing workflow (bypass merge queue)\n- Design decisions 9 and 10 for direct landing and daemon awareness\n- CLI commands for gt land","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T00:29:52.395906-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-35x","title":"Plugin: plan-oracle (work decomposition)","description":"Plugin that helps decompose epics/issues into sub-tasks. Analyzes scope, identifies dependencies, estimates complexity for parallelization, creates beads for sub-tasks with dependency links.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-15T22:53:05.772986-08:00","updated_at":"2025-12-15T23:17:06.423894-08:00","dependencies":[{"issue_id":"gt-35x","depends_on_id":"gt-axz","type":"blocks","created_at":"2025-12-15T22:53:17.587726-08:00","created_by":"daemon"}]} {"id":"gt-361qj","title":"Standardize wisp creation syntax across role templates","description":"## Task\n\nRole templates use inconsistent syntax for creating wisps.\n\n## Current State\n\n**Deacon template:**\n```bash\nbd mol wisp create mol-deacon-patrol\nbd update \u003cwisp-id\u003e --status=pinned --assignee=deacon\n```\n\n**Witness template (BROKEN - see gt-xxx):**\n```bash\nbd mol wisp mol-witness-patrol --assignee={{ .RigName }}/witness\n```\n\n## Recommended Pattern\n\nAll patrol roles should use the same two-step pattern:\n```bash\nbd mol wisp create mol-\u003crole\u003e-patrol\nbd update \u003cwisp-id\u003e --status=pinned --assignee=\u003cidentity\u003e\n```\n\nOr we should add `--assignee` flag to `bd mol wisp` (file in beads repo if preferred).\n\n## Templates to Update\n\n- witness.md.tmpl (broken, needs immediate fix)\n- Verify consistency in refinery.md.tmpl if it also creates wisps\n\n## Related\n\nThis is a consistency task; the witness template bug is tracked separately as P0.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T17:12:37.726636-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-27T21:29:54.687993-08:00","close_reason":"Fixed - witness template now matches deacon pattern","deleted_at":"2025-12-27T21:29:54.687993-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-38sb8","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T14:29:02.342209-08:00","updated_at":"2025-12-25T14:29:02.342209-08:00","closed_at":"2025-12-25T14:29:02.342177-08:00"} {"id":"gt-39cb3","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, no lifecycle requests, cleaned 3 abandoned wisps","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:33:20.837523-08:00","updated_at":"2025-12-27T21:26:02.196074-08:00","deleted_at":"2025-12-27T21:26:02.196074-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-39ej","title":"Digest: mol-deacon-patrol","description":"Patrol #1: No issues found. All 6 agents healthy. No orphans.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:14:35.83023-08:00","updated_at":"2025-12-27T21:26:04.828115-08:00","deleted_at":"2025-12-27T21:26:04.828115-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-39ttg","title":"Day 2.1: Daemon reads agent bead state field","description":"Daemon queries agent beads for state instead of inferring from PID/tmux.\n\nChange getAgentState() to:\n1. Look up agent bead by ID (gt-mayor, gt-witness, etc.)\n2. Read state field (idle|running|stuck|stopped)\n3. Trust the value\n\nParent: gt-d0jqp","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T20:57:55.813003-08:00","created_by":"mayor","updated_at":"2025-12-27T20:57:55.813003-08:00","dependencies":[{"issue_id":"gt-39ttg","depends_on_id":"gt-lisj6","type":"blocks","created_at":"2025-12-27T21:00:31.823241-08:00","created_by":"daemon"}]} {"id":"gt-3a4","title":"Add gt decommission command for clean swarm/worker shutdown","description":"Single command to cleanly shut down a swarm and its workers: cancel swarm, stop sessions, optionally remove polecats. E.g. gt decommission gt-hw6 --cleanup","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-18T11:33:37.217682-08:00","updated_at":"2025-12-27T21:29:57.214217-08:00","deleted_at":"2025-12-27T21:29:57.214217-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-3abj","title":"go install may fail for new users - private repo","description":"README shows:\n go install github.com/steveyegge/gastown/cmd/gt@latest\n\nThis fails on fresh install if repo is private:\n fatal: could not read Username for 'https://github.com'\n\nREADME should either:\n1. Note the repo is private (if applicable)\n2. Add SSH config instructions\n3. Or provide 'build from source' alternative\n\nThis will be the first command new users try.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-24T12:51:42.10651-08:00","updated_at":"2025-12-27T21:29:52.638592-08:00","dependencies":[{"issue_id":"gt-3abj","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:05.187114-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.638592-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} -{"id":"gt-3be8","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:10:11.929736-08:00","updated_at":"2025-12-24T21:10:11.929736-08:00","closed_at":"2025-12-24T21:10:11.929709-08:00"} +{"id":"gt-3b4jp","title":"Digest: mol-deacon-patrol","description":"Patrol 14: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:18:57.76815-08:00","updated_at":"2025-12-25T10:18:57.76815-08:00","closed_at":"2025-12-25T10:18:57.768117-08:00"} {"id":"gt-3cns.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-3cns\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T22:30:43.381581-08:00","updated_at":"2025-12-27T21:29:55.670828-08:00","deleted_at":"2025-12-27T21:29:55.670828-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3cu","title":"Default polecat names: Mad Max theme instead of AdjectiveNoun","description":"Current default naming for new polecats uses AdjectiveNoun convention.\nSince rigs already provide namespacing, we can use more thematic names.\n\nSuggestion: Use Mad Max / Fury Road character and vehicle names as defaults.\nExamples: Furiosa, Nux, Slit, Morsov, Toast, Rictus, Warboy, etc.\n\nCould also include:\n- War Rig parts: Guzzler, Tanker, Pursuit\n- Citadel roles: Imperator, Blackthumb, Organic\n- Wasteland terms: Chrome, Witness, Shiny\n\nImplementation:\n- Add name generator in internal/polecat/ or similar\n- Use when --create flag is used without explicit name\n- Cycle through pool to avoid duplicates within a rig","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-17T14:50:43.252922-08:00","updated_at":"2025-12-17T14:50:43.252922-08:00"} {"id":"gt-3dgv","title":"Digest: mol-deacon-patrol","description":"Patrol #17","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:25:59.591357-08:00","updated_at":"2025-12-27T21:26:04.692327-08:00","deleted_at":"2025-12-27T21:26:04.692327-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -172,6 +174,7 @@ {"id":"gt-3lygr","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:50:46.338114-08:00","updated_at":"2025-12-27T21:26:04.140748-08:00","deleted_at":"2025-12-27T21:26:04.140748-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3ndj","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:44","description":"Patrol 7: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:44:48.99583-08:00","updated_at":"2025-12-27T21:26:05.129076-08:00","deleted_at":"2025-12-27T21:26:05.129076-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3njt","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\n[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T22:27:56.249779-08:00","updated_at":"2025-12-27T21:29:57.866515-08:00","deleted_at":"2025-12-27T21:29:57.866515-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-3nlte","title":"Digest: mol-deacon-patrol","description":"Patrol 18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:57:27.343464-08:00","updated_at":"2025-12-26T14:57:27.343464-08:00","closed_at":"2025-12-26T14:57:27.343415-08:00"} {"id":"gt-3ns5","title":"Polecat template: clarify work status commands (bd list vs gt mol status)","description":"Template shows 'bd list --status=in_progress' for checking work, but polecats should probably use 'gt mol status' instead (or in addition). Clarify the right approach for polecats to check their current work assignment.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:46.909036-08:00","updated_at":"2025-12-27T21:29:55.93508-08:00","dependencies":[{"issue_id":"gt-3ns5","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.371341-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.93508-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3oyn","title":"Blocked issues: gt-um6q, gt-lz13, gt-5xph depend on missing beads features","description":"Template/docs updates blocked on: bd-nurq (bd mol current), bd-29fb (bd close --continue). These gastown issues should be marked blocked on the beads issues once cross-rig deps work.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T00:19:12.532683-08:00","updated_at":"2025-12-23T00:19:12.532683-08:00"} {"id":"gt-3p77","title":"Implement gt watch command scaffold","description":"Basic bubbletea TUI scaffold for 'gt watch' command. Discovers rigs, connects to daemons, renders placeholder view. Foundation for the full activity feed TUI.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:27:09.800586-08:00","updated_at":"2025-12-23T16:27:09.800586-08:00","dependencies":[{"issue_id":"gt-3p77","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:30.683781-08:00","created_by":"daemon"}]} @@ -237,6 +240,7 @@ {"id":"gt-4ev4","title":"Implement gt sling command","description":"The unified work dispatch command.\n\n```bash\ngt sling \u003cthing\u003e \u003ctarget\u003e [options]\n```\n\nImplements spawn + assign + pin in one operation. See sling-design.md.\n\nAcceptance:\n- [ ] Parse thing (proto name, issue ID, epic ID)\n- [ ] Parse target (agent address) \n- [ ] Spawn molecule if proto\n- [ ] Assign to target agent\n- [ ] Pin to agent's hook (pinned bead)\n- [ ] Support --wisp flag for ephemeral\n- [ ] Support --molecule flag for issue+workflow\n- [ ] Error if hook already occupied (unless --force)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T03:17:27.273013-08:00","updated_at":"2025-12-27T21:29:53.269071-08:00","deleted_at":"2025-12-27T21:29:53.269071-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-4fdi","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:48","description":"Patrol 20: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:48:32.167102-08:00","updated_at":"2025-12-27T21:26:05.029912-08:00","deleted_at":"2025-12-27T21:26:05.029912-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-4km6p","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:37.301068-08:00","updated_at":"2025-12-27T21:26:02.130788-08:00","deleted_at":"2025-12-27T21:26:02.130788-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-4mg4e","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:49:54.412119-08:00","updated_at":"2025-12-25T10:49:54.412119-08:00","closed_at":"2025-12-25T10:49:54.412089-08:00"} {"id":"gt-4my","title":"Doctor check: Worker health and stuck detection","description":"Detect and report stuck workers via gt doctor.\n\n## Checks\n\n### WorkerHealthCheck\n- List all active workers (polecats with state=working)\n- Check last activity timestamp for each\n- Flag as potentially stuck if no progress for configurable threshold (default: 30 min)\n- Check if Witness is running for the rig\n- Verify Witness last heartbeat time\n\n### Stuck Detection Criteria\n- Polecat state=working but session not running\n- Polecat state=working but output unchanged for threshold\n- Witness not responding to health checks\n- Multiple polecats in same rig all stuck\n\n## Output\n\n```\n[WARN] Workers in rig 'wyvern' may be stuck:\n - Toast: working for 45m, no recent output\n - Capable: working for 52m, session not found\n - Witness: last heartbeat 20m ago\n \n Suggestions:\n - gt witness status wyvern\n - gt capture wyvern/Toast 50\n - gt stop --rig wyvern (kill all)\n```\n\n## Auto-Fix\n\nCannot auto-fix stuck workers (risk of data loss), but can:\n- Restart Witness daemon if crashed\n- Send warning mail to Mayor","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-15T23:17:59.265062-08:00","updated_at":"2025-12-27T21:29:54.521246-08:00","dependencies":[{"issue_id":"gt-4my","depends_on_id":"gt-f9x.4","type":"blocks","created_at":"2025-12-15T23:19:05.565606-08:00","created_by":"daemon"},{"issue_id":"gt-4my","depends_on_id":"gt-7ik","type":"blocks","created_at":"2025-12-17T15:44:42.068149-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.521246-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-4nn","title":"Molecules: Composable Workflow Beads","description":"## Summary\n\nMolecules are crystallized workflow patterns stored as Beads issues.\nWhen instantiated, the molecule creates child beads forming a DAG.\n\n## Key Insight: Molecules ARE Beads\n\nPer HOP Decision 001: Beads IS the ledger. Molecules don't get a separate YAML format - they're issues with `type: molecule` containing prose-based step definitions.\n\nAgents don't need rigid schemas. They parse natural language natively. A molecule is just instructions with enough structure for tooling.\n\n## Example: Engineer in a Box\n\n```markdown\nid: mol-xyz\ntype: molecule\ntitle: Engineer in a Box\n\nThis workflow takes a task from design to merge.\n\n## Step: design\nThink carefully about architecture. Consider existing patterns, \ntrade-offs, testability.\n\n## Step: implement\nWrite clean code. Follow codebase conventions.\nNeeds: design\n\n## Step: review \nReview for bugs, edge cases, style issues.\nNeeds: implement\n\n## Step: test\nWrite and run tests. Cover happy path and edge cases.\nNeeds: implement\n\n## Step: submit\nSubmit for merge via refinery.\nNeeds: review, test\n```\n\n## Instantiation\n\n```bash\n# Attach molecule when spawning\ngt spawn --issue gt-abc --molecule mol-xyz\n\n# Creates child beads atomically:\ngt-abc.design ← ready first\ngt-abc.implement ← blocked by design \ngt-abc.review ← blocked by implement\ngt-abc.test ← blocked by implement\ngt-abc.submit ← blocked by review, test\n```\n\nEach step issue gets an `instantiated-from` edge to the molecule (with step metadata).\n\n## Why This Matters\n\n1. **Unified data plane**: Everything in Beads, no parallel YAML channel\n2. **AI-native**: Prose instructions, not rigid schemas\n3. **Error isolation**: Each step is a checkpoint - failure doesn't lose progress\n4. **Scales with AI**: As agents get smarter, they handle more complex molecules\n\n## Implementation Primitives\n\n- `ParseMoleculeSteps()`: Extract steps from prose (convention-based)\n- `InstantiateMolecule()`: Atomic transaction creating all steps + edges \n- `instantiated-from` edge type: Track provenance\n- Parameterization: `{{variable}}` substitution from context map","status":"tombstone","priority":0,"issue_type":"epic","created_at":"2025-12-18T18:06:24.573068-08:00","updated_at":"2025-12-27T21:29:45.595678-08:00","deleted_at":"2025-12-27T21:29:45.595678-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-4nn.1","title":"Molecule schema: YAML format for workflow definitions","description":"Define the YAML schema for molecule definitions:\n\n```yaml\nmolecule: \u003cname\u003e\nversion: 1\ndescription: \"Human description\"\nsteps:\n - id: \u003cstep-id\u003e\n title: \"Step title\"\n prompt: \"Instructions for agent\"\n depends: [\u003cother-step-ids\u003e] # optional\n tier: haiku|sonnet|opus # optional, default from config\n timeout: 30m # optional\n```\n\nStore molecules in:\n- `\u003crig\u003e/molecules/\u003cname\u003e.yaml` for rig-specific\n- `\u003ctown\u003e/molecules/\u003cname\u003e.yaml` for town-wide\n\nBuilt-in molecules to ship:\n- engineer-in-box: design→code→review→test→submit\n- quick-fix: implement→test→submit\n- research: investigate→document","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-18T18:06:49.441267-08:00","updated_at":"2025-12-27T21:29:45.587385-08:00","dependencies":[{"issue_id":"gt-4nn.1","depends_on_id":"gt-4nn","type":"parent-child","created_at":"2025-12-18T18:06:49.442723-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.587385-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -303,11 +307,9 @@ {"id":"gt-5af.6","title":"Add Deacon heartbeat mechanism","description":"Deacon writes deacon/heartbeat.json on each wake. Go daemon reads it to decide whether to poke. Add heartbeat read/write helpers.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-19T17:13:52.057582-08:00","updated_at":"2025-12-27T21:29:53.94095-08:00","dependencies":[{"issue_id":"gt-5af.6","depends_on_id":"gt-5af","type":"parent-child","created_at":"2025-12-19T17:13:52.059708-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.94095-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-5af.7","title":"Add crew session pattern to lifecycle handling","description":"Update identityToSession and restartSession to handle crew patterns: gastown/max -\u003e gt-gastown-max. Crew workers can request lifecycle but are not proactively monitored.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-19T17:13:57.662197-08:00","updated_at":"2025-12-27T21:29:53.932522-08:00","dependencies":[{"issue_id":"gt-5af.7","depends_on_id":"gt-5af","type":"parent-child","created_at":"2025-12-19T17:13:57.664036-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.932522-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-5af.8","title":"Add human escalation configuration","description":"Add overseer contact config to mayor/town.json. Deacon uses this for escalation when it cannot resolve issues. Support email and/or other notification methods.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T17:14:02.770713-08:00","updated_at":"2025-12-27T21:29:56.950086-08:00","dependencies":[{"issue_id":"gt-5af.8","depends_on_id":"gt-5af","type":"parent-child","created_at":"2025-12-19T17:14:02.772612-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.950086-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-5bjgq","title":"Digest: mol-deacon-patrol","description":"Patrol 19","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:57:47.79199-08:00","updated_at":"2025-12-26T14:57:47.79199-08:00","closed_at":"2025-12-26T14:57:47.791943-08:00"} {"id":"gt-5c0lp","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:41:28.721109-08:00","updated_at":"2025-12-27T21:26:00.287373-08:00","deleted_at":"2025-12-27T21:26:00.287373-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-5cql0","title":"Day 5.2: Fix integration issues","description":"Address any issues found in Day 5.1:\n- Debug failures\n- Fix edge cases\n- Retry integration test\n- Document remaining gaps\n\nThis is buffer time for reality.\n\nParent: gt-oki8p","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T20:57:58.914212-08:00","created_by":"mayor","updated_at":"2025-12-27T20:57:58.914212-08:00","dependencies":[{"issue_id":"gt-5cql0","depends_on_id":"gt-j0gx2","type":"blocks","created_at":"2025-12-27T20:58:31.859106-08:00","created_by":"daemon"},{"issue_id":"gt-5cql0","depends_on_id":"gt-oki8p","type":"parent-child","created_at":"2025-12-27T20:58:39.644301-08:00","created_by":"daemon"},{"issue_id":"gt-5cql0","depends_on_id":"gt-liftoff","type":"blocks","created_at":"2025-12-27T21:43:12.603927-08:00","created_by":"daemon"}]} {"id":"gt-5e50a","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:35:02.300302-08:00","updated_at":"2025-12-27T21:26:02.51926-08:00","deleted_at":"2025-12-27T21:26:02.51926-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-5eaou","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T01:46:25.351184-08:00","updated_at":"2025-12-25T01:46:25.351185-08:00"} {"id":"gt-5eegv","title":"Day 2.3: Agent writes state on lifecycle events","description":"Agents update their bead state:\n- On startup: bd update gt-\u003crole\u003e --state=running\n- On shutdown: bd update gt-\u003crole\u003e --state=stopped\n- On stuck: bd update gt-\u003crole\u003e --state=stuck\n\nState is self-reported, not inferred.\n\nParent: gt-d0jqp","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:05.269312-08:00","created_by":"mayor","updated_at":"2025-12-27T20:58:05.269312-08:00","dependencies":[{"issue_id":"gt-5eegv","depends_on_id":"gt-39ttg","type":"blocks","created_at":"2025-12-27T20:58:44.375633-08:00","created_by":"daemon"}]} {"id":"gt-5fa3i","title":"Digest: mol-deacon-patrol","description":"Patrol 1: inbox empty, Mayor OK, 2 witnesses, 2 refineries healthy, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:40:42.819905-08:00","updated_at":"2025-12-27T21:26:03.271225-08:00","deleted_at":"2025-12-27T21:26:03.271225-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-5ft3","title":"Merge: gt-99a","description":"branch: polecat/Slit\ntarget: main\nsource_issue: gt-99a\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T16:18:15.329358-08:00","updated_at":"2025-12-27T21:27:22.963883-08:00","deleted_at":"2025-12-27T21:27:22.963883-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -353,6 +355,7 @@ {"id":"gt-6957","title":"Deacon primes pending workers instead of spawn nudge","description":"## Problem\n\nWhen gt spawn starts a polecat, it tries to send a nudge message immediately:\n1. Starts tmux session with Claude Code\n2. Waits 3 seconds (hardcoded)\n3. Sends nudge via NudgeSession\n\nBut Claude Code takes 10-20+ seconds to be ready. The message arrives before\nthe prompt is ready, so it appears as part of the prompt string instead of\nbeing executed.\n\n## Solution\n\nMove priming responsibility to the Deacon patrol cycle:\n\n1. gt spawn: Mark polecat as pending_prime=true in state, return immediately\n2. Deacon patrol: New step prime-pending-workers that:\n - Scans all rigs for workers with pending_prime=true\n - Uses WaitForClaudeReady() to poll for \"\u003e \" prompt (already exists in tmux.go)\n - Once ready, sends gt prime + assignment nudge\n - Clears pending_prime flag\n\n## Implementation\n\n### spawn.go changes\n- Remove the 3-second sleep (line 368)\n- Remove the NudgeSession call (lines 375-383)\n- Instead: Update polecat state with pending_prime=true\n\n### Polecat state addition\nstatus: assigned, pending_prime: true, issue: gt-xxx\n\n### Deacon patrol addition\nAdd step between inbox-check and plugin-run:\nprime-pending-workers: Check all rigs for workers marked pending_prime.\nFor each pending worker: WaitForClaudeReady(60s), then gt prime + nudge\n\n### Benefits\n- No race condition - we poll until actually ready\n- Deacon already does health checks - priming is natural fit\n- Works for polecats, witnesses, refineries, crew (unified approach)\n- Timeout handling built in\n\n## Depends on\n- Existing WaitForClaudeReady() in tmux.go (lines 384-403)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T17:19:33.589909-08:00","updated_at":"2025-12-27T21:29:53.124884-08:00","deleted_at":"2025-12-27T21:29:53.124884-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-69hf","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-24T00:23:28.795987-08:00","updated_at":"2025-12-27T21:29:57.841655-08:00","deleted_at":"2025-12-27T21:29:57.841655-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-69l","title":"Hook system for event extensibility","description":"GGT needs hook system for extensibility like PGT.\n\n## Event Types\n```go\ntype Event string\nconst (\n EventPreSessionStart Event = \"pre-session-start\"\n EventPostSessionStart Event = \"post-session-start\"\n EventPreShutdown Event = \"pre-shutdown\"\n EventPostShutdown Event = \"post-shutdown\"\n EventOnPaneOutput Event = \"on-pane-output\"\n EventSessionIdle Event = \"session-idle\"\n EventMailReceived Event = \"mail-received\"\n EventWorkAssigned Event = \"work-assigned\"\n)\n```\n\n## Hook Configuration\nFile: .claude/hooks.json or .gastown/hooks.json\n```json\n{\n \"hooks\": {\n \"pre-shutdown\": [\n {\"type\": \"command\", \"cmd\": \"./scripts/pre-shutdown.sh\"}\n ],\n \"on-pane-output\": [\n {\"type\": \"command\", \"cmd\": \"./scripts/activity-monitor.sh\"}\n ]\n }\n}\n```\n\n## Hook Types\n1. **Command**: Execute external script\n2. **Built-in**: Internal Go functions (pre-shutdown checks)\n\n## Hook Interface\n```go\ntype HookRunner struct {\n config *HookConfig\n}\n\ntype HookResult struct {\n Success bool\n Message string\n Block bool // For pre-* hooks: should operation be blocked?\n}\n\nfunc (r *HookRunner) Fire(event Event, ctx *HookContext) []HookResult\n```\n\n## CLI Commands\n```\ngt hooks list [\u003cevent\u003e] # List registered hooks\ngt hooks fire \u003cevent\u003e # Manually fire for testing\ngt hooks test [--all] # Validate hook config\n```\n\n## Integration Points\n- internal/session/manager.go: Fire pre/post session hooks\n- internal/mail/router.go: Fire mail-received hook\n\n## New Package\ninternal/hooks/\n├── types.go # Event, HookConfig, HookResult\n├── runner.go # HookRunner, Fire()\n└── builtin.go # Built-in hooks (pre-shutdown checks)\n\n## PGT Reference\ngastown-py/src/gastown/hooks/\n\n## Acceptance Criteria\n- [ ] Hook config loading from JSON\n- [ ] Command hooks execute subprocess\n- [ ] Pre-shutdown hook integration with session stop\n- [ ] CLI for listing and testing hooks","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:47:34.584907-08:00","updated_at":"2025-12-16T16:04:47.890588-08:00"} +{"id":"gt-6bhu","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T22:06:13.33163-08:00","updated_at":"2025-12-27T23:44:54.6489-08:00","closed_at":"2025-12-27T23:44:54.6489-08:00"} {"id":"gt-6c084","title":"Digest: mol-deacon-patrol","description":"Patrol 2: Quiet cycle, all agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T07:24:29.872651-08:00","updated_at":"2025-12-27T21:26:03.676821-08:00","deleted_at":"2025-12-27T21:26:03.676821-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-6cok","title":"Digest: mol-deacon-patrol","description":"Patrol #4: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:31:01.457636-08:00","updated_at":"2025-12-27T21:26:04.367448-08:00","deleted_at":"2025-12-27T21:26:04.367448-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-6db","title":"gt rig shutdown: Gracefully stop all rig agents","description":"Add 'gt rig shutdown \u003crig\u003e' command to gracefully stop all agents in a rig.\n\nShould:\n- Stop all polecat sessions\n- Stop refinery\n- Stop witness\n- Optionally wait for graceful shutdown with timeout","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T21:50:07.938698-08:00","updated_at":"2025-12-27T21:29:57.222574-08:00","dependencies":[{"issue_id":"gt-6db","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:23:43.179236-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.222574-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -368,7 +371,6 @@ {"id":"gt-6n4as","title":"Digest: mol-deacon-patrol","description":"Patrol 17: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:19:40.852613-08:00","updated_at":"2025-12-27T21:26:03.511465-08:00","deleted_at":"2025-12-27T21:26:03.511465-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-6n8fy","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:51:51.349775-08:00","updated_at":"2025-12-27T21:26:04.11634-08:00","deleted_at":"2025-12-27T21:26:04.11634-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-6qdii","title":"Digest: mol-deacon-patrol","description":"Patrol 13: Nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:51:28.696535-08:00","updated_at":"2025-12-27T21:26:04.124537-08:00","deleted_at":"2025-12-27T21:26:04.124537-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-6qelh","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:54:30.942826-08:00","updated_at":"2025-12-26T13:54:30.942826-08:00","closed_at":"2025-12-26T13:54:30.942786-08:00"} {"id":"gt-6qld","title":"Daemon should auto-start as part of town bootstrap","description":"The Go daemon should be started automatically when the town boots up (mol-gastown-boot). Currently it requires manual 'gt daemon start'.\n\nThe daemon is critical infrastructure - it monitors the Deacon and nudges it when naked. Without it, the Deacon patrol loop doesn't run.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T13:16:52.000929-08:00","updated_at":"2025-12-23T13:16:52.000929-08:00"} {"id":"gt-6qyt1","title":"Refinery: event-driven merge queue","description":"## Problem\nRefinery only acts on explicit requests, no queue management.\n\n## ZFC-Compliant Solution\nAdd steps to `mol-refinery-patrol.formula.toml`:\n\n```toml\n[[step]]\nid = \"check-merge-requests\"\ntitle = \"Process merge queue from inbox\"\ndescription = \"\"\"\n1. Check inbox for MERGE_READY messages: gt mail inbox\n2. For each merge request:\n - Read branch name from message\n - Add to local queue (track in state.json or temp file)\n3. Process queue in order:\n - git fetch origin\n - git checkout main \u0026\u0026 git pull\n - git merge --no-ff origin/polecat/\u003cname\u003e\n - If conflict: mail Mayor with details, skip\n - If success: git push \u0026\u0026 delete remote branch\n4. For each merged branch:\n - gt mail send \u003crig\u003e/witness -s \"MERGED: polecat/\u003cname\u003e\" -m \"Branch merged successfully\"\n - Delete the MERGE_READY mail\n\"\"\"\ndepends_on = [\"inbox-check\"]\n```\n\n## Queue State\nRefinery agent tracks queue in `state.json`:\n```json\n{\n \"merge_queue\": [\"polecat/foo\", \"polecat/bar\"],\n \"last_merged\": \"polecat/baz\"\n}\n```\n\n## Why This Works\n- Refinery Claude agent runs formula\n- Agent handles conflicts with judgment\n- Mail is coordination primitive\n- State persists in agent's state.json\n\n## Files\n- formulas/mol-refinery-patrol.formula.toml","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-27T16:41:05.11996-08:00","created_by":"mayor","updated_at":"2025-12-27T21:29:45.748327-08:00","close_reason":"Subsumed by gt-7uhts (Day 3.4: Refinery processes MERGE_READY mail)","dependencies":[{"issue_id":"gt-6qyt1","depends_on_id":"gt-7uhts","type":"relates-to","created_at":"2025-12-27T20:59:09.678685-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.748327-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-6qzay","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:15:59.128327-08:00","updated_at":"2025-12-25T19:15:59.128327-08:00","closed_at":"2025-12-25T19:15:59.12827-08:00"} @@ -390,6 +392,7 @@ {"id":"gt-71i","title":"Update architecture.md: Engineer role and Beads merge queue","description":"Update docs/architecture.md with recent design decisions:\n\n1. Agent table: Change \"Refinery\" role to \"Engineer\"\n - Refinery = place/module/directory\n - Engineer = role (agent that works in the Refinery)\n\n2. Merge Queue section: Document Beads-native model\n - MRs are beads issues with --type=merge-request\n - gt mq commands (submit, list, next, process, reorder)\n - Ordering via depends-on links\n\n3. CLI section: Add gt mq commands\n\n4. Key Design Decisions: Add decisions for:\n - #15: Merge Queue in Beads\n - #16: Engineer role (distinct from Refinery place)\n - #17: Session restart protocol for Engineer","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T23:12:03.616159-08:00","updated_at":"2025-12-27T21:29:54.394591-08:00","dependencies":[{"issue_id":"gt-71i","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:12:14.92163-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.394591-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-722jc","title":"Digest: mol-deacon-patrol","description":"Patrol 4: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:32:15.321778-08:00","updated_at":"2025-12-27T21:26:00.41535-08:00","deleted_at":"2025-12-27T21:26:00.41535-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-72so","title":"gt mq list: doesn't show submitted MRs","description":"After submitting MRs with gt mq submit, gt mq list gastown shows empty queue.\n\n## Reproduction\n1. gt mq submit --issue gt-h5n.5 --branch polecat/Scabrous\n2. gt mq list gastown → (empty)\n3. bd list --type=merge-request → shows the MR\n\n## Expected\ngt mq list should show submitted MRs\n\n## MR example\ngt-ts4u has rig: gastown in description, type=merge-request, status=open","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-19T14:54:26.731813-08:00","updated_at":"2025-12-27T21:29:54.008454-08:00","deleted_at":"2025-12-27T21:29:54.008454-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} +{"id":"gt-73gzw","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:46:48.759627-08:00","updated_at":"2025-12-25T10:46:48.759627-08:00","closed_at":"2025-12-25T10:46:48.759596-08:00"} {"id":"gt-74a7","title":"Wire GT_ACCOUNT env var into spawn/attach","description":"When spawning Claude Code (gt spawn, gt crew attach), check GT_ACCOUNT env var. If set, look up account in config and set CLAUDE_CONFIG_DIR accordingly.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:22.86335-08:00","updated_at":"2025-12-27T21:29:56.167565-08:00","dependencies":[{"issue_id":"gt-74a7","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:34.897966-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.167565-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-751s","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses wisp storage (.beads-wisp/) for ephemeral patrol state.\nPersistent state (nudge counts, handoffs) is stored in a witness handoff bead.","status":"tombstone","priority":4,"issue_type":"epic","created_at":"2025-12-23T01:41:54.504354-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-75b0","title":"Digest: mol-deacon-patrol","description":"Patrol 12: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:37:48.776182-08:00","updated_at":"2025-12-27T21:26:04.585408-08:00","deleted_at":"2025-12-27T21:26:04.585408-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -410,6 +413,7 @@ {"id":"gt-7gno","title":"Digest: mol-deacon-patrol","description":"Patrol #18: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:35:15.310522-08:00","updated_at":"2025-12-27T21:26:04.252071-08:00","deleted_at":"2025-12-27T21:26:04.252071-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-7grh6","title":"Tmux session scanner for running agents","description":"Scan tmux for running Gas Town agent sessions.\n\n## Deliverables\n\n1. Function: ScanRunningSessions() -\u003e []AgentAddr\n - Parse tmux list-sessions\n - Filter for Gas Town session naming pattern\n - Return addresses of running agents\n\n2. Function: ScanRigSessions(rig) -\u003e []AgentAddr\n - Filter running sessions by rig prefix\n\n3. Alias resolution:\n - #rig/gastown → running sessions in gastown\n - #town → all running Gas Town sessions\n - #witnesses → running witness sessions\n\n## Location\ninternal/discovery/tmux.go\n\n## Acceptance\n- Scanner finds running sessions\n- Correctly parses session names to addresses\n- Handles no-sessions case gracefully","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-26T14:52:32.408394-08:00","updated_at":"2025-12-26T14:52:32.408394-08:00"} {"id":"gt-7hor","title":"Document the Propulsion Principle","description":"Write canonical documentation for the Universal Gas Town Propulsion Principle.\n\nLocation: gastown/mayor/rig/docs/propulsion-principle.md\n\nContent:\n- The One Rule (hook has work → work happens)\n- Why it works (stateless agents, molecule-driven)\n- The sling lifecycle diagram\n- Agent startup protocol\n- Examples and anti-patterns\n\nThis is foundational theory-of-operation documentation.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T03:17:47.790012-08:00","updated_at":"2025-12-27T21:29:56.362057-08:00","deleted_at":"2025-12-27T21:29:56.362057-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-7huqu","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T14:13:59.546891-08:00","updated_at":"2025-12-25T14:13:59.546891-08:00","closed_at":"2025-12-25T14:13:59.54686-08:00"} {"id":"gt-7hz3","title":"Merge: gt-92l","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-92l\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T16:31:37.716367-08:00","updated_at":"2025-12-27T21:27:22.938439-08:00","deleted_at":"2025-12-27T21:27:22.938439-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-7i6i6","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:31:52.727074-08:00","updated_at":"2025-12-27T21:26:02.577294-08:00","deleted_at":"2025-12-27T21:26:02.577294-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-7iek","title":"context-check","description":"Assess own context usage. If high, prepare for handoff.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T17:51:45.43771-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","dependencies":[{"issue_id":"gt-7iek","depends_on_id":"gt-hbnz","type":"parent-child","created_at":"2025-12-21T17:51:45.442974-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} @@ -426,8 +430,8 @@ {"id":"gt-7q4","title":"HOP: Skill vectors on work items","description":"Add skill embeddings to work items for capability-based matching. See ~/ai/stevey-gastown/hop/CONTEXT.md. Post-v0.1 work.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-17T01:00:43.251085-08:00","updated_at":"2025-12-17T01:00:43.251085-08:00"} {"id":"gt-7qgm0","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy, read Mayor handoff (info)","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T14:54:20.388504-08:00","updated_at":"2025-12-27T21:26:03.14066-08:00","deleted_at":"2025-12-27T21:26:03.14066-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-7sqi","title":"Refactor: Extract common manager creation boilerplate","description":"Five nearly identical functions exist for creating managers:\n- getPolecatManager (polecat.go:241)\n- getSessionManager (session.go:183)\n- getCrewManager (crew_helpers.go:44)\n- getRefineryManager (refinery.go:116)\n- getWitnessManager (witness.go:102)\n\nAll follow the same pattern: find workspace, load config, get rig, create manager. Should extract to a common helper that takes a factory function.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:34:30.495275-08:00","updated_at":"2025-12-27T21:29:56.487369-08:00","deleted_at":"2025-12-27T21:29:56.487369-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-7tmh","title":"mol-deacon-patrol","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nDeacon patrol molecule template. Label: template","status":"tombstone","priority":4,"issue_type":"epic","created_at":"2025-12-23T13:03:21.516072-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-7tt8","title":"Default crew name should be something better than 'main'","description":"When creating a new rig, the default crew worker name is 'main'. This is confusing since:\n\n1. 'main' is also the git branch name\n2. It doesn't convey that this is the user's personal workspace\n3. Crew names should feel more personal/distinct\n\nConsider alternatives like:\n- 'home' - the user's home base\n- 'desk' - their personal desk\n- 'joe/max/etc' - actual name-based defaults\n- Let user pick during rig init","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-21T16:46:51.049367-08:00","updated_at":"2025-12-21T16:46:59.133599-08:00"} -{"id":"gt-7ucrr","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:58:58.140323-08:00","updated_at":"2025-12-26T13:58:58.140323-08:00","closed_at":"2025-12-26T13:58:58.140272-08:00"} {"id":"gt-7uhts","title":"Day 3.4: Refinery processes MERGE_READY mail","description":"Refinery patrol handles merge requests:\n1. Check inbox for MERGE_READY messages\n2. For each, verify branch exists\n3. Run merge checks (tests, lint)\n4. If passing, merge to main\n5. Send MERGED signal back\n\nParent: gt-hwka3","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:05.510472-08:00","created_by":"mayor","updated_at":"2025-12-27T20:58:05.510472-08:00","dependencies":[{"issue_id":"gt-7uhts","depends_on_id":"gt-hwka3","type":"parent-child","created_at":"2025-12-27T20:58:48.873689-08:00","created_by":"daemon"},{"issue_id":"gt-7uhts","depends_on_id":"gt-u6siy","type":"blocks","created_at":"2025-12-27T20:59:00.772533-08:00","created_by":"daemon"},{"issue_id":"gt-7uhts","depends_on_id":"gt-6qyt1","type":"relates-to","created_at":"2025-12-27T20:59:09.685061-08:00","created_by":"daemon"},{"issue_id":"gt-7uhts","depends_on_id":"gt-k294l","type":"blocks","created_at":"2025-12-27T23:17:28.282401-08:00","created_by":"daemon"}]} {"id":"gt-7wcf","title":"README: Update Install section for homebrew/npm","description":"README currently shows:\n go install github.com/steveyegge/gastown/cmd/gt@latest\n\nBut users will install via homebrew or npm. Update to show:\n brew install gastown\n # or\n npm install -g @anthropic/gastown\n\nAlso add prerequisites section (tmux, Claude Code CLI).","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-24T13:04:51.751097-08:00","updated_at":"2025-12-27T21:29:52.630314-08:00","dependencies":[{"issue_id":"gt-7wcf","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T13:05:00.100253-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.630314-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-7we","title":"Swarms of One: Lightweight single-worker task dispatch","description":"Design and implement a lightweight pattern for firing off single workers to handle tasks without full swarm overhead.\n\n## Context\n\nCurrently we have:\n- town spawn: Creates a polecat in a rig with issue assignment\n- Swarms (sw-*): Full lifecycle tracking with manifest, state, events, reports\n- Ephemeral rigs (rig-*): Temporary worker groups for swarms\n\nWhat's missing: A simple way to say 'fire off a worker to do X' without swarm ceremony.\n\n## Design Questions\n\n1. Should this be a new command like 'gt fire' or an option on existing commands?\n2. Should single tasks still get swarm IDs (sw-N) for consistency/queryability?\n3. Should it default to creating new workers or support --reuse for idle polecats?\n4. How does this relate to crew workers (gt-cik)?\n\n## Possible Interface\n\ngt fire --rig gastown --issue gt-xyz [--prompt '...']\ngt fire gastown/QuickTask --issue gt-xyz\n\n## Related\n\n- gt-cik: Overseer Crew (user-managed persistent workspaces)\n- gt-kmn: Swarm System epic","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T16:51:02.716629-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} @@ -517,7 +521,6 @@ {"id":"gt-8w8qy","title":"Digest: mol-deacon-patrol","description":"Patrol 9: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:32:44.627727-08:00","updated_at":"2025-12-27T21:26:00.784916-08:00","deleted_at":"2025-12-27T21:26:00.784916-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-8wf","title":"Polecat prompting: gt mq submit on completion","description":"Update Polecat CLAUDE.md prompting to:\n\n1. On task completion, run: gt mq submit --issue \u003cid\u003e\n2. This creates a merge-request bead in the queue\n3. Engineer will process it\n\nThe Polecat self-reports completion to the merge queue.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T23:02:39.914724-08:00","updated_at":"2025-12-16T23:02:39.914724-08:00","dependencies":[{"issue_id":"gt-8wf","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:55.930679-08:00","created_by":"daemon"},{"issue_id":"gt-8wf","depends_on_id":"gt-svi","type":"blocks","created_at":"2025-12-16T23:03:12.950782-08:00","created_by":"daemon"}]} {"id":"gt-8ws7o","title":"Schematic: Domain-Level Formula Composition","description":"A Schematic is a coordinated set of formulas defining an entire workflow domain.\n\n## Concept\n\nLike an orchestra score to instrument parts - says how formulas fit together.\n\n```toml\n# shiny-engineering.schematic\n[schematic]\nname = \"The Shiny Way\"\ndescription = \"Full engineering workflow from issue to production\"\n\n[formulas]\nplanning = \"@gastown/shiny\"\ndevelopment = \"@gastown/polecat-work\" \nreview = \"@gastown/review\"\nrelease = \"@gastown/release\"\n\n[flow]\ndefault = \"planning \u003e\u003e development \u003e\u003e review \u003e\u003e release\"\n\n[constraints]\nall_code_reviewed = true\ntests_before_deploy = true\n```\n\n## Relationship to Other Concepts\n\n- **Schematic** (workflow dimension) = composition of Formulas\n- **Campaign** (work dimension) = composition of Epics\n- Schematic compiles to Campaign, like Formula compiles to Molecule\n\n## Use Cases\n\n1. Define \"The Shiny Way\" for a team/org\n2. Encode compliance requirements\n3. Standardize workflows across projects\n4. Enable workflow reuse and sharing\n\n## Open Questions\n\n1. File format - TOML? YAML? Extend formula syntax?\n2. Validation - how to verify schematic consistency?\n3. Overrides - can project override org schematic?\n\n## Related\n\n- docs/formula_evolution.md\n- gt-8tmz - molecule algebra\n","status":"open","priority":4,"issue_type":"epic","created_at":"2025-12-26T01:00:52.546808-08:00","updated_at":"2025-12-27T14:20:33.906776-08:00"} -{"id":"gt-8xeue","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:46:28.418527-08:00","updated_at":"2025-12-25T10:46:28.418527-08:00","closed_at":"2025-12-25T10:46:28.418492-08:00"} {"id":"gt-8xr1e","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, archived 17 routine handoffs, cleaned 1 orphan process and 1 stale lock","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:50:42.117684-08:00","updated_at":"2025-12-27T21:26:01.795534-08:00","deleted_at":"2025-12-27T21:26:01.795534-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-8y70b","title":"Swarm remaining gt-8tmz P3/P4 issues","description":"## Swarm Plan for Molecule Algebra Completion\n\nEncapsulates the remaining swarmable work from gt-8tmz (Molecule Algebra epic).\n\n### Swarmable Issues (6 total)\n\n**Batch 1 - Parallel (3 polecats):**\n- gt-8tmz.10: Rename Engineer in Box to Shiny (simple rename)\n- gt-8tmz.36: Validate expanded step IDs are unique (validation)\n- gt-8tmz.31: Formula validation specification (docs)\n\n**Batch 2 - Sequential (1 polecat):**\n- gt-8tmz.34: Expansion var overrides → gt-8tmz.35: Inline step expansion\n (dependency chain - .35 depends on .34)\n\n**Batch 3 - Solo (1 polecat):**\n- gt-8tmz.30: Proto debugging and inspection tools (add --graph)\n\n### Hold for Human (7 issues - need design decisions)\n- gt-8tmz.19: Meta-formulas (schema design)\n- gt-8tmz.20: Org inheritance (policy structure)\n- gt-8tmz.21: Conditional aspects (when clause syntax)\n- gt-8tmz.22: Review dimensions as aspects (refactor)\n- gt-8tmz.28: Error handling policy\n- gt-8tmz.29: Versioning strategy\n- gt-8tmz.37: Nested expansion recursion\n\n### Code Location\nAll work is in beads repo: /Users/stevey/gt/beads/crew/emma\n- internal/formula/*.go\n- cmd/bd/cook.go\n\n### Execution\nHand to Witness for polecat dispatch, or execute manually with polecats.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T18:54:03.709983-08:00","updated_at":"2025-12-27T21:29:55.139369-08:00","close_reason":"gt-8tmz fully closed","dependencies":[{"issue_id":"gt-8y70b","depends_on_id":"gt-8tmz","type":"blocks","created_at":"2025-12-25T18:54:09.318078-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.139369-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-8yawq","title":"Digest: mol-deacon-patrol","description":"Patrol 19","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T20:06:36.426614-08:00","updated_at":"2025-12-27T21:26:00.635465-08:00","deleted_at":"2025-12-27T21:26:00.635465-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -557,7 +560,6 @@ {"id":"gt-9a2.7","title":"CloudRun protocol types: WorkRequest, WorkEvent, WorkResult","description":"## Overview\n\nHTTP protocol types for Cloud Run work dispatch. **Types only** - server and client are separate tasks.\n\n## Request Type\n\n```go\ntype WorkRequest struct {\n IssueID string `json:\"issue_id\"`\n Rig RigConfig `json:\"rig\"`\n Beads BeadsConfig `json:\"beads\"`\n Branch string `json:\"worker_branch\"`\n Context map[string]any `json:\"context,omitempty\"`\n}\n\ntype RigConfig struct {\n URL string `json:\"url\"`\n Branch string `json:\"branch\"`\n}\n\ntype BeadsConfig struct {\n URL string `json:\"url\"`\n Branch string `json:\"branch\"`\n}\n```\n\n## Response Types (streaming NDJSON)\n\n```go\ntype WorkEvent struct {\n Type string `json:\"type\"` // status, log, progress, result, error\n Status string `json:\"status,omitempty\"`\n Line string `json:\"line,omitempty\"`\n Percent int `json:\"percent,omitempty\"`\n Branch string `json:\"branch,omitempty\"`\n PRURL string `json:\"pr_url,omitempty\"`\n Code string `json:\"code,omitempty\"`\n Message string `json:\"message,omitempty\"`\n}\n\ntype WorkResult struct {\n Status string `json:\"status\"` // done, failed\n Branch string `json:\"branch\"`\n PRURL string `json:\"pr_url,omitempty\"`\n Error string `json:\"error,omitempty\"`\n}\n```\n\n## Files\n\n- `internal/cloudrun/protocol.go` - All types above\n\n## Notes\n\nThis is just types. Server (gt-9a2.7b) and client (gt-9a2.7c) are separate tasks.\nSmall, focused task - can complete quickly.","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-16T18:02:51.480019-08:00","updated_at":"2025-12-27T21:29:57.701115-08:00","dependencies":[{"issue_id":"gt-9a2.7","depends_on_id":"gt-9a2","type":"parent-child","created_at":"2025-12-16T18:02:51.48197-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.7","depends_on_id":"gt-9a2.1","type":"blocks","created_at":"2025-12-16T18:03:45.984572-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.701115-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-9a2.8","title":"CloudRunOutpost: Basic implementation","description":"## Overview\n\nBasic CloudRunOutpost implementation. Persistent connections and cost tracking are separate tasks.\n\n## Implementation\n\n```go\ntype CloudRunOutpost struct {\n name string\n project string\n region string\n service string\n maxWorkers int\n client *WorkClient\n workers map[string]*CloudRunWorker\n mu sync.RWMutex\n}\n\nfunc NewCloudRunOutpost(cfg OutpostConfig) (*CloudRunOutpost, error) {\n serviceURL := fmt.Sprintf(\n \"https://%s-%s.a.run.app\",\n cfg.Service, cfg.Region,\n )\n return \u0026CloudRunOutpost{\n name: cfg.Name,\n project: cfg.Project,\n region: cfg.Region,\n service: cfg.Service,\n maxWorkers: cfg.MaxWorkers,\n client: NewWorkClient(serviceURL),\n workers: make(map[string]*CloudRunWorker),\n }, nil\n}\n```\n\n## Spawn\n\n```go\nfunc (o *CloudRunOutpost) Spawn(issue string, cfg WorkerConfig) (Worker, error) {\n req := WorkRequest{\n IssueID: issue,\n Rig: RigConfig{URL: cfg.RigURL, Branch: cfg.GitBranch},\n Beads: BeadsConfig{URL: cfg.BeadsURL, Branch: \"beads-sync\"},\n Branch: \"polecat/\" + issue,\n }\n \n events, err := o.client.DispatchWork(context.Background(), req)\n if err != nil {\n return nil, err\n }\n \n worker := \u0026CloudRunWorker{\n id: uuid.New().String(),\n outpost: o.name,\n issue: issue,\n events: events,\n status: WorkerStatusWorking,\n }\n \n o.mu.Lock()\n o.workers[worker.id] = worker\n o.mu.Unlock()\n \n go worker.monitor()\n return worker, nil\n}\n```\n\n## CloudRunWorker\n\n```go\ntype CloudRunWorker struct {\n id string\n outpost string\n issue string\n status WorkerStatus\n events \u003c-chan WorkEvent\n logs []string\n}\n\nfunc (w *CloudRunWorker) Attach() error {\n return errors.New(\"Cloud Run workers do not support attach\")\n}\n\nfunc (w *CloudRunWorker) Logs() (io.Reader, error) {\n return strings.NewReader(strings.Join(w.logs, \"\\n\")), nil\n}\n```\n\n## Files\n\n- `internal/outpost/cloudrun.go`\n\n## Dependencies\n\nDepends on: gt-9a2.1 (interfaces), gt-9a2.12 (HTTP client)\nBlocks: gt-9a2.13 (persistent connections), gt-9a2.14 (cost tracking)","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-16T18:03:06.803401-08:00","updated_at":"2025-12-27T21:29:57.692806-08:00","dependencies":[{"issue_id":"gt-9a2.8","depends_on_id":"gt-9a2","type":"parent-child","created_at":"2025-12-16T18:03:06.805524-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.8","depends_on_id":"gt-9a2.1","type":"blocks","created_at":"2025-12-16T18:03:46.081721-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.8","depends_on_id":"gt-9a2.12","type":"blocks","created_at":"2025-12-16T18:15:54.915831-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.692806-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-9a2.9","title":"Outpost assignment policy: Smart work routing","description":"## Overview\n\nPolicy engine for deciding which outpost gets which work.\n\n## Policy Configuration\n\n```yaml\npolicy:\n # Default order of preference\n default_preference: [local, gce-burst, cloudrun-burst]\n \n # Rules applied in order\n rules:\n # Background work → Cloud Run (cheap)\n - condition: \"priority \u003e= P3\"\n prefer: cloudrun-burst\n \n # Long tasks → VM (persistent)\n - condition: \"estimated_duration \u003e 30m\"\n prefer: gce-burst\n \n # Specific epic → specific outpost\n - condition: \"epic == gt-abc\"\n prefer: local\n```\n\n## Implementation\n\n```go\ntype AssignmentPolicy struct {\n DefaultPreference []string\n Rules []PolicyRule\n}\n\ntype PolicyRule struct {\n Condition string // Simple expression\n Prefer string // Outpost name\n Require string // Must use this outpost\n}\n\nfunc (p *AssignmentPolicy) SelectOutpost(\n issue Issue, \n outposts map[string]Outpost,\n) Outpost {\n // Check rules in order\n for _, rule := range p.Rules {\n if rule.Matches(issue) {\n if op, ok := outposts[rule.Prefer]; ok {\n if op.ActiveWorkers() \u003c op.MaxWorkers() {\n return op\n }\n }\n }\n }\n \n // Fall back to default preference\n for _, name := range p.DefaultPreference {\n if op, ok := outposts[name]; ok {\n if op.ActiveWorkers() \u003c op.MaxWorkers() {\n return op\n }\n }\n }\n \n return nil // All outposts at capacity\n}\n```\n\n## Condition Language\n\nSimple expressions, not a full DSL:\n\n```\npriority \u003e= P3\npriority == P0\nestimated_duration \u003e 30m\nepic == gt-abc\ntype == bug\nlabel contains \"urgent\"\n```\n\n## Files\n\n- `internal/outpost/policy.go`\n- `internal/outpost/condition.go`\n\nDepends on: gt-9a2.3 (config)","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-16T18:03:21.08101-08:00","updated_at":"2025-12-27T21:29:57.684514-08:00","dependencies":[{"issue_id":"gt-9a2.9","depends_on_id":"gt-9a2","type":"parent-child","created_at":"2025-12-16T18:03:21.083256-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.9","depends_on_id":"gt-9a2.3","type":"blocks","created_at":"2025-12-16T18:03:46.300288-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.684514-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-9ae69","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T13:43:08.241676-08:00","updated_at":"2025-12-25T14:12:41.853879-08:00","deleted_at":"2025-12-25T14:12:41.853879-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-9bpji","title":"Digest: mol-deacon-patrol","description":"P20: stable - handoff after 20 patrols","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:00:46.97186-08:00","updated_at":"2025-12-27T21:26:02.343606-08:00","deleted_at":"2025-12-27T21:26:02.343606-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-9d5zz","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:03:13.84255-08:00","updated_at":"2025-12-27T21:26:04.001681-08:00","deleted_at":"2025-12-27T21:26:04.001681-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-9e8q","title":"Digest: mol-deacon-patrol","description":"Patrol 14","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:11.832142-08:00","updated_at":"2025-12-27T21:26:04.425053-08:00","deleted_at":"2025-12-27T21:26:04.425053-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -584,9 +586,9 @@ {"id":"gt-9o9s","title":"gt mail inbox shows wrong identity when run from deacon directory","description":"When running 'gt mail inbox' from ~/gt/deacon/, it shows 'Inbox: mayor/' instead of 'Inbox: deacon/'. The role detection works (deacon checks in correctly), but mail identity detection is broken.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-23T13:29:11.801311-08:00","updated_at":"2025-12-23T13:29:11.801311-08:00"} {"id":"gt-9ojgy","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:48:38.058041-08:00","updated_at":"2025-12-27T21:26:04.185508-08:00","deleted_at":"2025-12-27T21:26:04.185508-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-9pyg","title":"Deacon tmux status bar: heartbeat timing and patrol state","description":"## Problem\n\nThe deacon shows patrol output but lacks real-time observability:\n- No indication of when last heartbeat occurred\n- No indication of when next heartbeat is scheduled\n- No visibility into current patrol step\n\n## Desired Behavior\n\nThe tmux status bar for gt-deacon should show:\n\n```\n⛪ Deacon | ❤️ 2m ago | ⏰ 3m | 📍 health-scan (3/7)\n```\n\nComponents:\n- **Role icon**: ⛪ (deacon identity)\n- **Last heartbeat**: ❤️ 2m ago (time since last heartbeat file update)\n- **Next heartbeat**: ⏰ 3m (time until daemon would poke)\n- **Current step**: 📍 health-scan (3/7) (current patrol atom, step N of M)\n\n## Implementation\n\n1. **Read heartbeat.json** for last update time\n2. **Calculate next poke** based on daemon interval (default 5m)\n3. **Read current wisp** from .beads-wisp/ to get patrol progress\n4. **Update tmux status** periodically or on state change\n\nOptions:\n- tmux status-right with shell script\n- gt deacon status --tmux for formatted output\n- Hook into patrol step completion\n\n## Related\n\n- gt-id36: Deacon Kernel epic\n- gt-3x0z: Wisp Molecule Integration","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-22T03:03:38.693983-08:00","updated_at":"2025-12-27T21:29:56.387158-08:00","deleted_at":"2025-12-27T21:29:56.387158-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} +{"id":"gt-9qhc4","title":"Digest: mol-deacon-patrol","description":"Patrol 11","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:51:46.955388-08:00","updated_at":"2025-12-25T20:51:46.955388-08:00","closed_at":"2025-12-25T20:51:46.95534-08:00"} {"id":"gt-9r4sk","title":"Digest: mol-deacon-patrol","description":"Patrol 20: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:06:05.822838-08:00","updated_at":"2025-12-27T21:26:03.339464-08:00","deleted_at":"2025-12-27T21:26:03.339464-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-9rmm","title":"Merge: gt-a95","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-a95\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:53.973816-08:00","updated_at":"2025-12-19T19:13:27.736445-08:00","closed_at":"2025-12-19T17:48:09.608699-08:00"} -{"id":"gt-9s6rh","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:00:05.490551-08:00","updated_at":"2025-12-27T21:26:01.76229-08:00","deleted_at":"2025-12-27T21:26:01.76229-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-9t14","title":"Wire up --wisp flag for ephemeral molecules","description":"The --wisp flag exists in gt sling but isn't wired through to bd mol.\n\nNeed:\n1. bd mol run --wisp - spawn to .beads-wisp/ instead of .beads/\n2. Automatic burn on molecule completion\n3. Optional squash to digest for audit trail\n\nCurrently:\n- sling.go sets thing.IsWisp but never uses it\n- bd mol run has no --wisp flag\n- .beads-wisp/ exists but nothing writes to it","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-22T13:12:25.192854-08:00","updated_at":"2025-12-27T21:29:53.21739-08:00","deleted_at":"2025-12-27T21:29:53.21739-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-9uxr","title":"Critical packages lack test coverage","description":"Several packages have no test files:\n- internal/lock/ - Core identity locking (212 lines UNTESTED)\n- internal/witness/ - Worker monitoring\n- internal/mrqueue/ - MR queue management\n- internal/claude/ - Claude integration\n- internal/style/ - Terminal styling\n- internal/constants/ - Constants\n\nPriority for testing:\n1. lock/ - prevents duplicate agents, critical for correctness\n2. witness/ - agent lifecycle management\n3. mrqueue/ - merge request processing\n\nOverall: 37 test files for 160 Go files (23% by file count)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:51:01.154427-08:00","updated_at":"2025-12-24T12:51:01.154427-08:00","dependencies":[{"issue_id":"gt-9uxr","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.558885-08:00","created_by":"daemon"}]} {"id":"gt-9uy0","title":"Remove 'spawn' terminology from molecular chemistry","description":"Clean all docs and code to present ONLY current terminology. No migration paths, no \"old vs new\" tables, no deprecated flags. The codebase should read as if the current design was always the design.\n\n**Terminology rules:**\n- spawn = polecats/workers ONLY\n- pour = create persistent mol\n- wisp = create ephemeral wisp \n- run = create and execute\n\n**Scope:**\n- Remove all \"Old → New\" migration tables\n- Remove deprecated flag documentation (--persistent, etc.)\n- Remove chemistry-design-changes.md entirely (it is a migration doc)\n- Clean all docs to use current terminology only\n- Rename spawn functions in code that deal with molecules","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-24T13:06:43.805547-08:00","updated_at":"2025-12-27T21:29:52.622049-08:00","dependencies":[{"issue_id":"gt-9uy0","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T13:06:49.341648-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.622049-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -638,13 +640,12 @@ {"id":"gt-av92i","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All healthy, halfway mark","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:47:59.377355-08:00","updated_at":"2025-12-27T21:26:03.462272-08:00","deleted_at":"2025-12-27T21:26:03.462272-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-avq9","title":"Merge: gt-3x1.3","description":"branch: polecat/Doof\ntarget: main\nsource_issue: gt-3x1.3\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T21:23:06.77909-08:00","updated_at":"2025-12-27T21:27:22.650787-08:00","deleted_at":"2025-12-27T21:27:22.650787-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-avv7","title":"Digest: mol-deacon-patrol","description":"Patrol #12: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:40.201208-08:00","updated_at":"2025-12-27T21:26:04.30162-08:00","deleted_at":"2025-12-27T21:26:04.30162-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-awu07","title":"Day 1.4: Create agent beads for core roles","description":"Create agent beads with deterministic IDs:\n- gt-mayor (Mayor coordinator)\n- gt-witness (per-rig polecat monitor)\n- gt-refinery (per-rig merge processor)\n\nEach with role_type, rig, and initial state.\n\nParent: gt-d0jqp","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:11.427106-08:00","created_by":"mayor","updated_at":"2025-12-27T20:58:11.427106-08:00","dependencies":[{"issue_id":"gt-awu07","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T20:58:49.122365-08:00","created_by":"daemon"},{"issue_id":"gt-awu07","depends_on_id":"gt-v2gkv","type":"blocks","created_at":"2025-12-27T20:58:50.202777-08:00","created_by":"daemon"},{"issue_id":"gt-awu07","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.69769-08:00","created_by":"daemon"}]} +{"id":"gt-awu07","title":"Day 1.4: Create agent beads for core roles","description":"Create agent beads with deterministic IDs:\n- gt-mayor (Mayor coordinator)\n- gt-witness (per-rig polecat monitor)\n- gt-refinery (per-rig merge processor)\n\nEach with role_type, rig, and initial state.\n\nParent: gt-d0jqp","status":"pinned","priority":1,"issue_type":"task","assignee":"gastown/crew/joe","created_at":"2025-12-27T20:58:11.427106-08:00","created_by":"mayor","updated_at":"2025-12-28T00:00:23.736603-08:00","dependencies":[{"issue_id":"gt-awu07","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T20:58:49.122365-08:00","created_by":"daemon"},{"issue_id":"gt-awu07","depends_on_id":"gt-v2gkv","type":"blocks","created_at":"2025-12-27T20:58:50.202777-08:00","created_by":"daemon"},{"issue_id":"gt-awu07","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.69769-08:00","created_by":"daemon"}]} {"id":"gt-axtei","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:04:28.164433-08:00","updated_at":"2025-12-27T21:26:03.968642-08:00","deleted_at":"2025-12-27T21:26:03.968642-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-axz","title":"Design: Plugin architecture (agents-as-plugins)","description":"Plugin system where plugins are just additional agents with identities, mailboxes, and beads access. See docs/architecture.md Plugins section. No special framework - just directory conventions and mail-based invocation.","status":"tombstone","priority":3,"issue_type":"epic","created_at":"2025-12-15T22:52:43.614095-08:00","updated_at":"2025-12-27T21:29:57.759152-08:00","dependencies":[{"issue_id":"gt-axz","depends_on_id":"gt-id36","type":"blocks","created_at":"2025-12-20T21:47:41.790184-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.759152-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-ay1r","title":"gt molecule current: Show what agent should be working on","description":"Query what an agent identity is supposed to be working on via breadcrumb trail.\n\n## Command\n```bash\ngt molecule current \u003cidentity\u003e\ngt molecule current gastown/furiosa\ngt molecule current deacon\n```\n\n## Logic\n1. Find handoff bead for identity (pinned bead titled \"\u003crole\u003e Handoff\")\n2. Parse attachment field → molecule ID\n3. If no attachment → \"naked\" (no active molecule)\n4. If attached → load molecule, find current step:\n - bd ready --parent=\u003cmol-id\u003e → next unblocked step\n - Or first in_progress step\n\n## Output\n```\nIdentity: gastown/furiosa\nHandoff: gt-8v2 (Furiosa Handoff)\nMolecule: gt-mol-abc (mol-polecat-work)\nProgress: 3/8 steps complete\nCurrent: gt-mol-abc.4 - verify-tests\n```\n\nOr if naked:\n```\nIdentity: gastown/angharad\nHandoff: gt-9x1 (Angharad Handoff)\nMolecule: (none attached)\nStatus: naked - awaiting work assignment\n```\n\n## Use Cases\n- Mayor checking what polecats are doing\n- Witness verifying polecat progress\n- Debug: \"why isnt this polecat working?\"\n- Deacon patrol: track all agent states","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-21T21:34:01.430109-08:00","updated_at":"2025-12-27T21:29:53.375429-08:00","deleted_at":"2025-12-27T21:29:53.375429-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-aygm5","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all clear, hook fix applied","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T17:16:01.0164-08:00","updated_at":"2025-12-27T21:26:01.201359-08:00","deleted_at":"2025-12-27T21:26:01.201359-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-az41","title":"mol-ready-work variants: safe vs aggressive","description":"## Summary\n\nCreate two variants of mol-ready-work:\n\n### mol-ready-work-safe (default)\n- PRs: review and comment, but require human approval for merge\n- Issues: triage only, don't auto-close\n- Beads: implement but create PR instead of pushing to main\n\n### mol-ready-work-aggressive \n- PRs: can approve and merge directly\n- Issues: can close duplicates/invalid\n- Beads: can push directly to main\n\n## Implementation\nCould be a single molecule with a `{{mode}}` variable, or two separate protos.\n\n## Parent\nPart of gt-tnca (mol-ready-work epic)","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:19:38.703698-08:00","updated_at":"2025-12-27T21:29:56.250681-08:00","close_reason":"Obsoleted by new designs (parent gt-tnca closed)","dependencies":[{"issue_id":"gt-az41","depends_on_id":"gt-tnca","type":"blocks","created_at":"2025-12-23T01:19:56.387233-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.250681-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-azpxk","title":"Digest: mol-deacon-patrol","description":"Patrol 18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:53:21.879858-08:00","updated_at":"2025-12-25T20:53:21.879858-08:00","closed_at":"2025-12-25T20:53:21.879798-08:00"} {"id":"gt-azzni","title":"Digest: mol-deacon-patrol","description":"Patrol 18: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:36:52.597153-08:00","updated_at":"2025-12-27T21:26:00.710685-08:00","deleted_at":"2025-12-27T21:26:00.710685-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-b00d7","title":"Digest: mol-deacon-patrol","description":"Patrol 12: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:01.615713-08:00","updated_at":"2025-12-27T21:26:02.114479-08:00","deleted_at":"2025-12-27T21:26:02.114479-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-b089l","title":"Digest: mol-deacon-patrol","description":"Patrol 13: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T07:28:09.102947-08:00","updated_at":"2025-12-27T21:26:03.617976-08:00","deleted_at":"2025-12-27T21:26:03.617976-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -671,6 +672,7 @@ {"id":"gt-bf75o","title":"Digest: mol-deacon-patrol","description":"Patrol complete: fixed EMERGENCY clone divergence (zoey 103 behind, refinery 40 behind), cleaned orphan processes, created patrol molecules, fixed invalid hook attachments","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:24:07.333939-08:00","updated_at":"2025-12-27T21:26:00.610148-08:00","deleted_at":"2025-12-27T21:26:00.610148-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-bf95","title":"rebase-main","description":"Rebase against main to incorporate any changes.\nResolve conflicts if needed.\n\ngit fetch origin main\ngit rebase origin/main\n\nIf there are conflicts, resolve them carefully and continue the rebase.\n\nDepends: self-review, verify-tests","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:48:26.322259-08:00","updated_at":"2025-12-25T14:12:42.206356-08:00","dependencies":[{"issue_id":"gt-bf95","depends_on_id":"gt-i4lo","type":"parent-child","created_at":"2025-12-21T21:48:26.327372-08:00","created_by":"stevey"},{"issue_id":"gt-bf95","depends_on_id":"gt-ldm4","type":"blocks","created_at":"2025-12-21T21:48:26.328498-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.206356-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-bfd","title":"Keepalive signal from bd/gt commands","description":"Every bd and gt command should touch a keepalive file to signal 'agent is alive/working'.\n\n## Implementation\n\nTouch `\u003cworkspace\u003e/.gastown/keepalive.json`:\n```json\n{\"last_command\": \"bd show gt-99m\", \"timestamp\": \"2025-12-18T13:45:00Z\"}\n```\n\n## Usage by Daemon\n\n- Fresh (\u003c 2 min) → agent is working, skip heartbeat\n- Stale (2-5 min) → might be thinking, gentle poke\n- Very stale (\u003e 5 min) → likely idle, safe to interrupt\n\n## Benefits\n\n- Zero cost (just file I/O)\n- Works during long tool calls\n- Doesn't require agent cooperation\n- Foundation for smarter backoff strategies","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T14:19:26.241957-08:00","updated_at":"2025-12-27T21:29:54.186458-08:00","dependencies":[{"issue_id":"gt-bfd","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T14:19:46.407664-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.186458-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-bfd4q","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:00.862619-08:00","updated_at":"2025-12-25T11:05:00.862619-08:00","closed_at":"2025-12-25T11:05:00.862585-08:00"} {"id":"gt-bho9","title":"stderr suppression hides critical errors","description":"Multiple files set cmd.Stderr = nil:\n- prime.go\n- up.go\n- orphans.go\n- daemon.go\n\nThis hides git errors and command failures.\n\nShould capture stderr for debugging and log when errors occur,\nrather than suppressing entirely.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:51:41.108782-08:00","updated_at":"2025-12-24T12:51:41.108782-08:00","dependencies":[{"issue_id":"gt-bho9","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.908317-08:00","created_by":"daemon"}]} {"id":"gt-bhvif","title":"Digest: mol-deacon-patrol","description":"P12","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:25:37.594453-08:00","updated_at":"2025-12-27T21:26:01.64609-08:00","deleted_at":"2025-12-27T21:26:01.64609-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-bhxng","title":"Digest: mol-deacon-patrol","description":"P19","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:27:27.892885-08:00","updated_at":"2025-12-27T21:26:01.585308-08:00","deleted_at":"2025-12-27T21:26:01.585308-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -695,6 +697,7 @@ {"id":"gt-c045h","title":"Digest: mol-witness-patrol","description":"Patrol cycle 2: Processed 3 POLECAT_DONE (nux=ESCALATED, slit=DEFERRED, furiosa=COMPLETED). Wrong-rig issue escalated to Mayor. All 3 gastown polecat sessions stopped.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:57:40.769464-08:00","updated_at":"2025-12-27T21:26:02.392786-08:00","dependencies":[{"issue_id":"gt-c045h","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:57:40.770311-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:26:02.392786-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-c3xyl","title":"Digest: mol-deacon-patrol","description":"Patrol #21: No messages, all agents healthy, cleaned 1 stale lock, burned 1 orphan wisp","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:10:19.786065-08:00","updated_at":"2025-12-27T21:26:00.854571-08:00","deleted_at":"2025-12-27T21:26:00.854571-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-c4264","title":"Digest: mol-deacon-patrol","description":"P10: stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:12:22.32234-08:00","updated_at":"2025-12-27T21:26:02.269786-08:00","deleted_at":"2025-12-27T21:26:02.269786-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-c59nq","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:06:04.0299-08:00","updated_at":"2025-12-25T11:06:04.0299-08:00"} {"id":"gt-c6zs","title":"Add molecule phase lifecycle diagram to architecture.md","description":"Create a clear lifecycle diagram showing molecule phases:\n\n```\n ┌─────────────┐\n │ Proto │\n │ (crystal) │\n └──────┬──────┘\n │\n bd mol bond\n │\n ┌────────────┴────────────┐\n │ │\n ▼ ▼\n ┌───────────────┐ ┌───────────────┐\n │ Mol │ │ Wisp │\n │ (liquid) │ │ (gas) │\n │ durable │ │ ephemeral │\n │ main beads │ │ .beads-eph/ │\n └───────┬───────┘ └───────┬───────┘\n │ │\n bd mol squash bd mol squash\n │ │\n ▼ ▼\n ┌───────────────┐ ┌───────────────┐\n │ Digest │ │ (nothing) │\n │ (distillate) │ │ evaporates │\n │ in git hist │ └───────────────┘\n └───────────────┘\n```\n\nAlso document:\n- When to use Mol vs Wisp\n- Mol: code review waves, epic implementation, feature work\n- Wisp: orchestration, polecat work sessions, patrol loops","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T16:32:47.487341-08:00","updated_at":"2025-12-27T21:29:53.426087-08:00","dependencies":[{"issue_id":"gt-c6zs","depends_on_id":"gt-62hm","type":"blocks","created_at":"2025-12-21T16:33:17.38302-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.426087-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-c70hl","title":"Digest: mol-deacon-patrol","description":"Patrol 5: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:54:21.579968-08:00","updated_at":"2025-12-27T21:26:00.575976-08:00","deleted_at":"2025-12-27T21:26:00.575976-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-c78vo","title":"Digest: mol-deacon-patrol","description":"Patrol 11: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:15:31.420476-08:00","updated_at":"2025-12-27T21:26:01.013745-08:00","deleted_at":"2025-12-27T21:26:01.013745-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -801,9 +804,7 @@ {"id":"gt-dw6v","title":"Review: Deacon town-level wisp storage (gt-ci84)","description":"Polecat slit implemented town-level wisp storage for deacon patrol. Review the changes to ensure deacon wisps are correctly stored in ~/gt/.beads-wisp/ instead of gastown rig beads.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T19:57:36.967604-08:00","updated_at":"2025-12-23T19:57:36.967604-08:00"} {"id":"gt-dx5c","title":"Update swarm terminology to streams","description":"Gas Town moved from batch swarms to continuous streaming of polecats. Update:\n- Docs and designs\n- Code comments\n- CLI flags (remove --swarm if present, or reframe)\n- Variable/function names where appropriate\n\nStreams reflect the reality: polecats flow continuously, not in discrete batches.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T21:42:19.559957-08:00","updated_at":"2025-12-22T21:42:19.559957-08:00"} {"id":"gt-dxsvj","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:35:45.54298-08:00","updated_at":"2025-12-27T21:26:02.502902-08:00","deleted_at":"2025-12-27T21:26:02.502902-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-dyz3","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:55:26.734746-08:00","updated_at":"2025-12-25T01:33:00.204059-08:00","closed_at":"2025-12-25T01:33:00.204059-08:00"} {"id":"gt-dyz3.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-dyz3\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:55:26.823047-08:00","updated_at":"2025-12-27T21:29:55.377417-08:00","deleted_at":"2025-12-27T21:29:55.377417-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-e0pu0","title":"Digest: mol-deacon-patrol","description":"Patrol 14: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:44:29.288368-08:00","updated_at":"2025-12-26T18:44:29.288368-08:00","closed_at":"2025-12-26T18:44:29.288311-08:00"} {"id":"gt-e0qj2","title":"Documentation overhaul: User Guide approach","description":"## Problem\n\nCurrent docs are:\n1. **Grandiose** - Too much vision, belongs in ~/gt/docs (HOP), not here\n2. **Verbose** - Need bullets/tables, not sections. Too many separate files.\n3. **Bottom-up** - Written as we built. Users need top-down.\n\nGas Town is a simple agent orchestrator (4-10 → 20-30 agents). Not a manifesto.\n\n## Target Structure\n\n### 1. Features at a Glance\n- Persistent agent identities with mail inboxes and \"work hooks\"\n- Sling work to agents, pinned to their hook\n- Universal Propulsion: If hook is pinned, RUN IT\n- Hooks survive crash, shutdown, compaction, restart\n- Self-sling for auto-restart workflows\n- Pin individual beads or entire epics\n\n### 2. Available Workflows\n- tmux mode vs no-tmux (raw Claude Code)\n- Full Gas Town vs partial (single roles)\n- Modular and resilient - one role at a time\n\n### 3. Cooking Formulas\n- Molecules = chains of issues (railroad tracks)\n- Formulas = step descriptions (atoms)\n- Cook formulas → molecules → durable workflows\n- Examples: release molecule, deacon patrol, polecat workflow, shiny\n\n### 4. (Optional) MEOW Deep Dive\n- Structured epics as chained work graphs\n- Serial/parallel branches, gates, loops, algebra\n- States of matter, polymorphic bond operators\n- But users just need to cook formulas\n\n## Deliverable\n\nOne README + maybe one or two supporting docs. Radically condensed.\n","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-26T23:21:03.464073-08:00","created_by":"stevey","updated_at":"2025-12-27T21:29:45.798259-08:00","close_reason":"Updated gastown for bd mol pour/wisp. Reverted Go code until bd v0.38.0 released. Filed hq-j850 for wisp flag bug.","deleted_at":"2025-12-27T21:29:45.798259-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-e1n86","title":"Template and Formula Distribution: Embed in binary, detect staleness","description":"## Problem\n\nTwo types of Gas Town infrastructure live in `.beads/` but have unclear distribution:\n\n1. **Role templates** (`*.md.tmpl`) - embedded in binary, rendered to CLAUDE.md on setup\n2. **Patrol formulas** (`*.formula.json`) - currently just exist, no clear seeding path\n\nWhen `gt` is rebuilt with updated templates/formulas, existing installations don't auto-update.\n\n## Current State\n\n- Templates: embedded via `//go:embed`, written on `gt install`/`gt rig init`\n- Formulas: exist in `.beads/formulas/` but no seeding mechanism\n- `bd init` creates empty structure (correct - bd shouldn't know Gas Town)\n- No staleness detection for either\n\n## Proposed Solution\n\n### 1. Embed formulas in `gt` binary\n\n```go\n//go:embed formulas/*.formula.json\nvar formulaFS embed.FS\n```\n\n### 2. Seed formulas during setup\n\n`gt install` and `gt rig init` write embedded formulas to `.beads/formulas/`.\n\n### 3. Hash-based staleness detection\n\n`gt doctor` checks:\n- CLAUDE.md hash vs embedded template hash\n- Formula files hash vs embedded formula hash\n\nIf stale → warn. `gt doctor --fix` refreshes.\n\n### 4. Keep bd/gt boundary clean\n\n- `bd` stays generic: `bd cook \u003cpath\u003e` takes any formula path\n- `gt` knows where formulas live, handles distribution\n- Patrol formulas are Gas Town infrastructure, not beads concern\n\n## Tasks\n\n1. Move formulas to embedded FS in gt binary\n2. Add formula seeding to `gt install` / `gt rig init`\n3. Add hash storage for templates and formulas\n4. Add staleness detection to `gt doctor`\n5. Add `--fix` flag to refresh stale files","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T20:04:28.044085-08:00","updated_at":"2025-12-27T21:29:54.960657-08:00","deleted_at":"2025-12-27T21:29:54.960657-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-e1r","title":"CLI: rig commands (add, list, show, remove)","description":"GGT needs rig management commands.\n\nMissing Commands:\n- gt rig add \u003cgit-url\u003e [--name NAME] - Add rig to workspace\n- gt rig list - List all rigs with status\n- gt rig show \u003crig\u003e - Show detailed rig info\n- gt rig remove \u003crig\u003e - Remove a rig\n\nPGT Reference: gastown-py/src/gastown/cli/rig_cmd.py\n\nCurrent State:\n- gt init creates rig structure but no ongoing management\n- Rig discovery in internal/rig/manager.go but not exposed via CLI","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T14:46:33.23951-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} @@ -833,7 +834,6 @@ {"id":"gt-eh7p","title":"Digest: mol-deacon-patrol","description":"Patrol #1: All agents healthy, no messages, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:28:50.209258-08:00","updated_at":"2025-12-27T21:26:04.392292-08:00","deleted_at":"2025-12-27T21:26:04.392292-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ehjuv","title":"Digest: mol-deacon-patrol","description":"Patrol 20: routine, handoff triggered","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:47:40.181991-08:00","updated_at":"2025-12-27T21:26:00.862944-08:00","deleted_at":"2025-12-27T21:26:00.862944-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-eho9v","title":"Digest: mol-deacon-patrol","description":"Patrol 8: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:14:26.413184-08:00","updated_at":"2025-12-27T21:26:01.040705-08:00","deleted_at":"2025-12-27T21:26:01.040705-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-ej1wj","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:31:02.350842-08:00","updated_at":"2025-12-25T13:31:02.350842-08:00","closed_at":"2025-12-25T13:31:02.350808-08:00"} {"id":"gt-ekgxf","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Quick cycle, all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:06:15.060768-08:00","updated_at":"2025-12-27T21:26:03.000866-08:00","deleted_at":"2025-12-27T21:26:03.000866-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-eln2","title":"Digest: mol-deacon-patrol","description":"Patrol OK: 0 polecats, 6 core sessions up, town quiet","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T02:11:42.107532-08:00","updated_at":"2025-12-27T21:26:05.380714-08:00","deleted_at":"2025-12-27T21:26:05.380714-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-eo1aa","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:06:03.759472-08:00","updated_at":"2025-12-27T21:26:03.347957-08:00","deleted_at":"2025-12-27T21:26:03.347957-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -942,7 +942,6 @@ {"id":"gt-ghh7q","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final before handoff, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:58:07.951302-08:00","updated_at":"2025-12-27T21:26:01.486022-08:00","deleted_at":"2025-12-27T21:26:01.486022-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gic8y","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All agents healthy, routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:51:34.264706-08:00","updated_at":"2025-12-27T21:26:03.83757-08:00","deleted_at":"2025-12-27T21:26:03.83757-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gizsv","title":"Day 3.2: Witness reads agent beads for polecat state","description":"Witness patrol reads polecat state from agent beads:\n- bd list --type=agent --role_type=polecat\n- For each, check state field\n- If state=running, check progress\n- If state=stuck, handle stuck protocol\n\nNo more PID/tmux inference.\n\nParent: gt-hwka3","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:03.267386-08:00","created_by":"mayor","updated_at":"2025-12-27T20:58:03.267386-08:00","dependencies":[{"issue_id":"gt-gizsv","depends_on_id":"gt-hwka3","type":"parent-child","created_at":"2025-12-27T20:58:46.785298-08:00","created_by":"daemon"},{"issue_id":"gt-gizsv","depends_on_id":"gt-qpoxz","type":"blocks","created_at":"2025-12-27T20:58:57.74074-08:00","created_by":"daemon"},{"issue_id":"gt-gizsv","depends_on_id":"gt-dtw9u","type":"relates-to","created_at":"2025-12-27T20:59:11.760004-08:00","created_by":"daemon"},{"issue_id":"gt-gizsv","depends_on_id":"gt-k294l","type":"blocks","created_at":"2025-12-27T23:17:28.218839-08:00","created_by":"daemon"}]} -{"id":"gt-gk1kv","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:19:02.636685-08:00","updated_at":"2025-12-25T15:19:02.636685-08:00","closed_at":"2025-12-25T15:19:02.636657-08:00"} {"id":"gt-gkbof","title":"Digest: mol-deacon-patrol","description":"Patrol 11: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:44:23.439842-08:00","updated_at":"2025-12-27T21:26:03.198075-08:00","deleted_at":"2025-12-27T21:26:03.198075-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gl1xy","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 6 msgs archived, all agents healthy, cleaned 29 stale mols","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T21:03:57.724194-08:00","updated_at":"2025-12-27T21:26:01.985538-08:00","deleted_at":"2025-12-27T21:26:01.985538-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"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":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-15T19:48:56.678724-08:00","updated_at":"2025-12-27T21:29:54.572509-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"}],"deleted_at":"2025-12-27T21:29:54.572509-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -951,6 +950,7 @@ {"id":"gt-glisw","title":"Ephemeral patrol molecules leaking into beads","description":"## Problem\n\nEphemeral patrol orchestration molecules (e.g., mol-deacon-patrol, wisp step issues) keep appearing in bd ready output in gastown beads.\n\nThese are ephemeral/wisp issues that should:\n1. Never be synced to the beads-sync branch\n2. Live only in .beads-wisp/ (ephemeral storage)\n3. Be squashed to digests, not persisted as regular beads\n\n## Examples found\n\n- gt-wisp-6ue: mol-deacon-patrol\n- gt-pacdm: mol-deacon-patrol \n- gt-wisp-mpm: Check own context limit\n- gt-wisp-lkc: Clean dead sessions\n\n## Investigation needed\n\n1. Where are these being created? (gt mol bond? manual bd create?)\n2. Why are they using the gt- prefix instead of staying ephemeral?\n3. Is the wisp storage (.beads-wisp/) being used correctly?\n4. Is bd sync accidentally picking up ephemeral issues?\n\n## Expected behavior\n\nPatrol molecules and their steps should be ephemeral and never appear in bd ready or bd list.\n\nMoved from bd-exy3.","status":"tombstone","priority":1,"issue_type":"bug","assignee":"gastown/crew/joe","created_at":"2025-12-27T19:18:04.448597-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-27T21:29:45.715281-08:00","close_reason":"Fixed: closed historical leaked patrol molecules (gt-k0poi, gt-wisp-oe4). Current wisp system is working correctly - new wisps use gt-eph-* prefix and ephemeral=true.","comments":[{"id":1,"issue_id":"gt-glisw","author":"gastown/crew/joe","text":"## Investigation Results\n\n### Root Cause\nHistorical patrol molecules were created BEFORE the ephemeral/wisp system was properly implemented. These old molecules:\n1. Had `ephemeral=0` (not marked as ephemeral)\n2. Used `gt-` prefix instead of `gt-eph-` prefix\n3. Were exported to JSONL and synced via git\n\n### Current State\nThe wisp system is NOW working correctly:\n- New wisps use `gt-eph-*` prefix\n- Have `ephemeral=1` set in database\n- Are excluded from JSONL export (sync_export.go lines 63-73)\n- Do not appear in `bd ready` or `bd list`\n\n### Actions Taken\n1. Closed leaked patrol molecules: `gt-k0poi`, `gt-wisp-oe4`\n2. Verified the current wisp system creates issues correctly with ephemeral=true\n3. Confirmed export filtering works (tested with `bd mol wisp mol-deacon-patrol`)\n\n### No Code Changes Needed\nThe system is working as designed. This was a historical data issue from before the ephemeral system was fully implemented.","created_at":"2025-12-28T03:27:22Z"}],"deleted_at":"2025-12-27T21:29:45.715281-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-glwd","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\n[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-24T21:50:24.723492-08:00","updated_at":"2025-12-27T21:29:57.800368-08:00","deleted_at":"2025-12-27T21:29:57.800368-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"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":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T00:23:09.331459-08:00","updated_at":"2025-12-27T21:26:05.424623-08:00","deleted_at":"2025-12-27T21:26:05.424623-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-gmpl7","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T13:26:52.057376-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-gmqe","title":"Refinery needs branch visibility: Convert to worktree or push branches","description":"The refinery cannot see polecat branches because it is a separate clone, not a worktree.\n\n## Problem\n- Polecats are worktrees of mayor/rig (correct, per gt-4u5z)\n- Refinery is still a separate clone at refinery/rig (not converted)\n- Polecat branches are local to mayor/rig, invisible to refinery\n\n## Decision (2025-12-25)\n**Use a shared bare repo as the single git source of truth.**\n\n```\ngastown/\n├── .repo.git/ ← Bare repo (no working tree, invisible base)\n├── mayor/rig/ ← Worktree (human workspace)\n├── polecats/\n│ └── Toast/ ← Worktree on polecat/Toast\n├── refinery/rig/ ← Worktree on main (can see all branches!)\n└── crew/max/ ← Worktree or separate clone (TBD)\n```\n\n**Why bare repo:**\n- No working directory to accidentally work in\n- Standard git pattern (how servers work)\n- All worktrees share branch visibility\n- Refinery on main can merge polecat branches directly\n\n## Implementation\n1. Create `.repo.git` as bare clone\n2. Convert refinery to worktree of .repo.git on main\n3. Convert polecats to worktrees of .repo.git\n4. Optionally convert mayor/rig (or keep as worktree)\n5. Update gt rig init for new rigs\n6. Write migration for existing rigs\n\n## Evidence\nTracer bullet 2025-12-23: Refinery could not see polecat/tracer until pushed to origin.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T21:58:27.414179-08:00","updated_at":"2025-12-27T21:29:52.812382-08:00","deleted_at":"2025-12-27T21:29:52.812382-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-godo","title":"Digest: mol-deacon-patrol","description":"Patrol 16: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:01:17.323252-08:00","updated_at":"2025-12-27T21:26:04.894446-08:00","deleted_at":"2025-12-27T21:26:04.894446-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gox90","title":"Digest: mol-deacon-patrol","description":"Patrol 18: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:06:01.664845-08:00","updated_at":"2025-12-27T21:26:03.356041-08:00","deleted_at":"2025-12-27T21:26:03.356041-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -967,7 +967,7 @@ {"id":"gt-guuv0","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T02:31:25.422463-08:00","updated_at":"2025-12-27T21:26:03.780074-08:00","deleted_at":"2025-12-27T21:26:03.780074-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gvxyu","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:16:22.236359-08:00","updated_at":"2025-12-27T21:26:02.732364-08:00","deleted_at":"2025-12-27T21:26:02.732364-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gwiye","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Refineries healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:54:30.168506-08:00","updated_at":"2025-12-27T21:26:01.510861-08:00","deleted_at":"2025-12-27T21:26:01.510861-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-gzp2y","title":"Day 1.1b: Add type=role to bead schema","description":"Add role as a valid bead type in the schema.\n\nRole beads define agent behavior:\n- Priming instructions (from current CLAUDE.md content)\n- default_molecule field\n- capabilities list\n\nThis enables Day 1.5 (creating role beads from CLAUDE.md).\n\nMust be done alongside type=agent schema work.","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-27T23:17:10.456454-08:00","created_by":"mayor","updated_at":"2025-12-27T23:17:10.456454-08:00","dependencies":[{"issue_id":"gt-gzp2y","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T23:17:26.728179-08:00","created_by":"daemon"}]} +{"id":"gt-gzp2y","title":"Day 1.1b: Add type=role to bead schema","description":"Add role as a valid bead type in the schema.\n\nRole beads define agent behavior:\n- Priming instructions (from current CLAUDE.md content)\n- default_molecule field\n- capabilities list\n\nThis enables Day 1.5 (creating role beads from CLAUDE.md).\n\nMust be done alongside type=agent schema work.","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-27T23:17:10.456454-08:00","created_by":"mayor","updated_at":"2025-12-27T23:39:09.219483-08:00","closed_at":"2025-12-27T23:39:09.219483-08:00","close_reason":"Implemented: type=agent and type=role added to schema (927e8374)","dependencies":[{"issue_id":"gt-gzp2y","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T23:17:26.728179-08:00","created_by":"daemon"}]} {"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"}]} {"id":"gt-h1n5","title":"Witness patrol: Add banners and wisp-based execution","description":"Bring Witness patrol up to Deacon's level of sophistication:\n\n## Current state\n- mol-witness-patrol exists (gt-qflq)\n- Basic step definitions\n\n## Needed\n1. **Banners** - Print step banners like Deacon does:\n ```\n ═══════════════════════════════════════════════════════════════\n 👁️ POLECAT-SCAN\n Checking polecat health and nudging stale workers\n ═══════════════════════════════════════════════════════════════\n ```\n\n2. **Wisp-based execution** - Spawn patrol as wisp, squash when complete\n3. **Handoff bead attachment** - Witness needs its own handoff bead with attached_molecule\n4. **Loop-or-exit step** - Context-aware cycling like Deacon\n5. **Patrol summary banner** at end of each cycle\n\n## Reference\nSee Deacon patrol implementation in ~/gt/deacon/CLAUDE.md","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T13:19:40.503122-08:00","updated_at":"2025-12-27T21:29:53.023883-08:00","dependencies":[{"issue_id":"gt-h1n5","depends_on_id":"gt-y481","type":"parent-child","created_at":"2025-12-23T13:20:15.684048-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.023883-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-h262","title":"bd ready --blockers: prioritize issues that block other work","description":"bd ready should prioritize issues that are blocking other work.\n\n**From VC**: Blocker-first prioritization in GetReadyWork(). ~100 lines.\nAlgorithm: baseline-failure first, then discovered:blocker, then by priority.\n\n**Gas Town implementation**: CLI flag or default behavior:\n```bash\nbd ready --blockers-first # Or make this default\n```\n\nChecks dependency graph. Issues with many dependents surface first.\n\n**Value**: Unblocks parallelism faster. Critical path gets cleared.\n\n**VC lesson**: Without blocker priority, work can starve on discovered issues.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-20T20:30:18.426957-08:00","updated_at":"2025-12-20T20:30:18.426957-08:00","dependencies":[{"issue_id":"gt-h262","depends_on_id":"gt-zhpa","type":"parent-child","created_at":"2025-12-20T20:30:27.664473-08:00","created_by":"daemon"}]} @@ -993,7 +993,7 @@ {"id":"gt-h5n.7","title":"Auto-target: MRs for epic children target integration branch","description":"Automatically target integration branches for epic children.\n\nWhen 'gt mq submit' is called:\n1. Parse source issue from branch\n2. Check if issue has a parent epic\n3. Check if integration/\u003cepic\u003e branch exists\n4. If yes: set target=integration/\u003cepic\u003e\n5. If no: set target=main\n\nThis ensures batch work automatically flows to integration branches.\n\nAlso update 'gt mq submit --epic' to explicitly target an epic's integration branch.\n\nReference: docs/merge-queue-design.md#integration-branches","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T13:51:56.992465-08:00","updated_at":"2025-12-27T21:29:54.304002-08:00","dependencies":[{"issue_id":"gt-h5n.7","depends_on_id":"gt-h5n","type":"parent-child","created_at":"2025-12-17T13:51:56.994579-08:00","created_by":"daemon"},{"issue_id":"gt-h5n.7","depends_on_id":"gt-h5n.4","type":"blocks","created_at":"2025-12-17T13:53:16.648727-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.304002-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-h5n.8","title":"MQ config schema: merge_queue section in rig config.json","description":"Define and implement merge_queue configuration in rig config.\n\nSchema:\n{\n \"merge_queue\": {\n \"enabled\": true,\n \"target_branch\": \"main\",\n \"integration_branches\": true,\n \"on_conflict\": \"assign_back\", // or \"auto_rebase\"\n \"run_tests\": true,\n \"test_command\": \"go test ./...\",\n \"delete_merged_branches\": true,\n \"retry_flaky_tests\": 1,\n \"poll_interval\": \"30s\",\n \"max_concurrent\": 1\n }\n}\n\nImplement:\n- Config loading in rig package\n- Default values\n- Validation\n\nReference: docs/merge-queue-design.md#configuration","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T13:52:00.322779-08:00","updated_at":"2025-12-27T21:29:54.295707-08:00","dependencies":[{"issue_id":"gt-h5n.8","depends_on_id":"gt-h5n","type":"parent-child","created_at":"2025-12-17T13:52:00.324781-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.295707-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-h5n.9","title":"Per-epic config overrides: custom merge settings","description":"Allow per-epic merge configuration overrides.\n\nEpic can specify merge_config in its description:\n merge_config:\n run_tests: true\n test_command: 'go test -race ./...'\n on_conflict: assign_back\n\nWhen processing MRs for an epic:\n1. Load rig-level merge_queue config\n2. Check if epic has merge_config\n3. Merge epic config over rig config\n4. Use merged config for processing\n\nUse cases:\n- Risky refactors: more thorough testing\n- Urgent fixes: skip some checks\n- Experimental work: different test suite\n\nReference: docs/merge-queue-design.md#per-epic-overrides","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-17T13:52:02.32832-08:00","updated_at":"2025-12-17T13:52:02.32832-08:00","dependencies":[{"issue_id":"gt-h5n.9","depends_on_id":"gt-h5n","type":"parent-child","created_at":"2025-12-17T13:52:02.32997-08:00","created_by":"daemon"}]} -{"id":"gt-h5sza","title":"Day 1.3: Implement bd slot set/clear commands","description":"Add slot management commands:\n- bd slot set \u003cagent\u003e \u003cslot\u003e \u003cbead\u003e - set slot (error if occupied)\n- bd slot clear \u003cagent\u003e \u003cslot\u003e - clear slot\n- bd slot show \u003cagent\u003e - show all slots\n\nThese enforce cardinality constraints.\n\nParent: gt-d0jqp","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:04.497595-08:00","created_by":"mayor","updated_at":"2025-12-27T20:58:04.497595-08:00","dependencies":[{"issue_id":"gt-h5sza","depends_on_id":"gt-v2gkv","type":"blocks","created_at":"2025-12-27T20:58:48.158544-08:00","created_by":"daemon"},{"issue_id":"gt-h5sza","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.643158-08:00","created_by":"daemon"}]} +{"id":"gt-h5sza","title":"Day 1.3: Implement bd slot set/clear commands","description":"Add slot management commands:\n- bd slot set \u003cagent\u003e \u003cslot\u003e \u003cbead\u003e - set slot (error if occupied)\n- bd slot clear \u003cagent\u003e \u003cslot\u003e - clear slot\n- bd slot show \u003cagent\u003e - show all slots\n\nThese enforce cardinality constraints.\n\nParent: gt-d0jqp","status":"pinned","priority":1,"issue_type":"task","assignee":"beads/crew/emma","created_at":"2025-12-27T20:58:04.497595-08:00","created_by":"mayor","updated_at":"2025-12-28T00:00:12.5564-08:00","dependencies":[{"issue_id":"gt-h5sza","depends_on_id":"gt-v2gkv","type":"blocks","created_at":"2025-12-27T20:58:48.158544-08:00","created_by":"daemon"},{"issue_id":"gt-h5sza","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.643158-08:00","created_by":"daemon"}]} {"id":"gt-h6ay5","title":"gt rig add: Auto-configure HQ routes.jsonl for new rigs","description":"## Summary\n\nWhen `gt rig add \u003crig-name\u003e` adds a new rig to the town, it should automatically\nadd a routing entry to `~/gt/.beads/routes.jsonl` so that beads with that rig's\nprefix can be looked up from the town root.\n\n## Current Behavior\n\nAfter running `gt rig add myproject`:\n- Rig is cloned and set up\n- No routing entry is added to HQ beads\n\n## Desired Behavior\n\nAfter running `gt rig add myproject`:\n- Rig is cloned and set up\n- Detect the rig's beads prefix (from config.yaml or existing issues)\n- Add entry to `~/gt/.beads/routes.jsonl`:\n `{\"prefix\": \"mp-\", \"path\": \"myproject/mayor/rig\"}`\n\n## Implementation Notes\n\n1. After rig setup, check for `\u003crig\u003e/mayor/rig/.beads/config.yaml`\n2. Read `issue-prefix` if set, or sample an issue ID from the database\n3. Append to `~/gt/.beads/routes.jsonl` if the prefix isn't already routed\n4. Create routes.jsonl if it doesn't exist\n\n## Edge Cases\n\n- Rig has no beads yet (no prefix known) - skip routing setup, let doctor fix later\n- Prefix already exists in routes.jsonl - warn and skip (or update path?)\n- routes.jsonl doesn't exist - create it","status":"tombstone","priority":2,"issue_type":"feature","assignee":"gastown/crew/joe","created_at":"2025-12-26T14:45:32.166285-08:00","updated_at":"2025-12-27T21:29:54.843679-08:00","close_reason":"Already implemented in commit 4405475. rig.go:214-224 calls beads.AppendRoute() after rig setup. All edge cases handled: prefix detection, duplicate handling, file creation.","deleted_at":"2025-12-27T21:29:54.843679-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-h6eq","title":"Pinned beads architecture implementation","description":"Implement the pinned beads architecture from docs/pinned-beads-design.md\n\nPhases:\n1. Doctor checks for hook validation\n2. Dashboard visibility (gt hooks, gt dashboard)\n3. Protocol enforcement (self-pin, audit trail)\n4. Documentation updates","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-23T05:06:11.469558-08:00","updated_at":"2025-12-27T21:29:56.125906-08:00","deleted_at":"2025-12-27T21:29:56.125906-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-h6eq.1","title":"Add hook-singleton doctor check","description":"Add gt doctor check to ensure each agent has at most one handoff bead.\n\nCheck: hook-singleton\nError if: Multiple pinned beads with same '{role} Handoff' title\nFix suggestion: Delete duplicate(s) with bd close","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T05:07:03.489465-08:00","updated_at":"2025-12-27T21:29:56.11762-08:00","dependencies":[{"issue_id":"gt-h6eq.1","depends_on_id":"gt-h6eq","type":"parent-child","created_at":"2025-12-23T05:07:03.489947-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.11762-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1013,6 +1013,7 @@ {"id":"gt-hade","title":"Digest: mol-deacon-patrol","description":"Patrol #20: Final before handoff","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:26:38.39395-08:00","updated_at":"2025-12-27T21:26:04.667435-08:00","deleted_at":"2025-12-27T21:26:04.667435-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hbg5","title":"Cross-project dependency workflow (Gas Town side)","description":"Gas Town integration for cross-project dependencies.\n\n## Components\n- gt-zniu: gt park command (park molecule on external dep)\n- gt-in3x: gt spawn --continue (resume parked molecule)\n- gt-5uf3: Patrol auto-resume (future)\n\n## Design Doc\nSee: docs/cross-project-deps.md\n\n## Depends on Beads\n- bd-h807: Cross-project dependency support (epic)\n\n## Launch Plan\nPhase 1 (launch): gt park + gt spawn --continue (manual resume)\nPhase 2 (later): Patrol auto-resume","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-21T22:39:36.395383-08:00","updated_at":"2025-12-27T21:29:56.428466-08:00","deleted_at":"2025-12-27T21:29:56.428466-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-hbnz","title":"mol-deacon-patrol","description":"Deacon patrol molecule template. Label: template","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-21T17:51:45.436236-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} +{"id":"gt-hca9v","title":"Digest: mol-deacon-patrol","description":"Patrol 18: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:46.965239-08:00","updated_at":"2025-12-25T13:45:46.965239-08:00","closed_at":"2025-12-25T13:45:46.965209-08:00"} {"id":"gt-hcc0","title":"gt polecat remove --all: bulk polecat teardown","description":"Currently gt polecat remove only accepts one polecat at a time. Need bulk operations:\n\n## Requested\n- `gt polecat remove gastown --all` - remove all polecats from a rig\n- `gt polecat remove gastown/A gastown/B ...` - remove multiple by name\n\n## Context\nAfter a swarm completes, tearing down 20 polecats one at a time is tedious.\nEphemeral workers should be easy to create and destroy in bulk.\n\n## Related\n- gt-c92: CLI: all command for batch polecat operations","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-19T14:06:43.892225-08:00","updated_at":"2025-12-27T21:29:56.993333-08:00","deleted_at":"2025-12-27T21:29:56.993333-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-hce03","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:29:14.852561-08:00","updated_at":"2025-12-25T07:29:14.852561-08:00","closed_at":"2025-12-25T07:29:14.852517-08:00"} {"id":"gt-hcsz","title":"Track merge requests as beads (type=merge-request)","description":"Currently MRs are tracked in .gastown/refinery.json. For HOP audit trail and entity CV tracking, merge requests should be Beads entries with type=merge-request. This enables:\n- Full audit trail of what was merged, when, by whom\n- Entity chain contributions (who validated what)\n- Cross-rig visibility of merge activity\n\nThe refinery would create an MR bead when work enters the queue, update status as it progresses (open → in_progress → merged/rejected).\n\nPart of Beads-as-data-plane vision from HOP.","status":"open","priority":4,"issue_type":"feature","created_at":"2025-12-21T22:07:28.836388-08:00","updated_at":"2025-12-21T22:07:28.836388-08:00"} @@ -1024,7 +1025,7 @@ {"id":"gt-hj9e","title":"Remove pinned field workaround after beads fix","description":"## Summary\n\nOnce bd-phtv is fixed in beads, we can remove the workaround documentation and potentially simplify the pinToHook() implementation.\n\n## Current Workaround\n\nThe handoff bead attachment mechanism (AttachMolecule) is used as the primary work assignment mechanism instead of the pinned field. This works correctly but adds complexity.\n\n## Changes After Beads Fix\n\n1. Remove the NOTE comment in internal/beads/beads.go:Pin() explaining the bug\n2. Consider simplifying pinToHook() if the pinned field becomes reliable\n3. Update gt-o3is to reference the fix\n\n## Blocked By\n\nThis issue is blocked by external:beads:pinned-field-fix (bd-phtv).\nWhen that capability is shipped, this issue becomes ready.\n\n## Related\n\n- gt-o3is: Original investigation that found this bug\n- bd-phtv: The beads fix (in ~/gt/beads)","notes":"BLOCKED: Can't add external:beads:pinned-field-fix dependency due to bd-ucgz (migration invariants bug). Once that's fixed, add: bd dep add gt-hj9e external:beads:pinned-field-fix","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T12:35:32.316302-08:00","updated_at":"2025-12-23T12:37:18.526987-08:00"} {"id":"gt-hkf8j","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-u2vg) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:53:37.310476-08:00","updated_at":"2025-12-25T14:12:42.115183-08:00","dependencies":[{"issue_id":"gt-hkf8j","depends_on_id":"gt-6n1cy","type":"parent-child","created_at":"2025-12-25T01:53:37.31208-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.115183-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hkx95","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 8: all nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:41:05.230108-08:00","updated_at":"2025-12-27T21:26:01.410966-08:00","deleted_at":"2025-12-27T21:26:01.410966-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-hlaaf","title":"Day 1.7: Define per-rig agent bead ID pattern","description":"Document and implement the agent bead ID pattern for per-rig agents.\n\nPattern: gt-\u003crole\u003e-\u003crig\u003e\nExamples:\n- gt-witness-gastown\n- gt-refinery-gastown\n- gt-refinery-beads\n- gt-polecat-gastown-nux\n\nTown-level agents (no rig):\n- gt-mayor\n- gt-deacon\n\nThis pattern enables:\n- Consistent lookup: bd show gt-witness-gastown\n- Routing: routes.jsonl maps prefixes\n- Filtering: bd list --type=agent --rig=gastown\n\nUpdate:\n- agent-as-bead.md with examples\n- bd create --type=agent to validate pattern","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T22:01:43.64279-08:00","created_by":"mayor","updated_at":"2025-12-27T22:01:43.64279-08:00","dependencies":[{"issue_id":"gt-hlaaf","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T22:02:45.168539-08:00","created_by":"daemon"},{"issue_id":"gt-hlaaf","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T23:32:42.479886-08:00","created_by":"daemon"}]} +{"id":"gt-hlaaf","title":"Day 1.7: Define per-rig agent bead ID pattern","description":"Document and implement the agent bead ID pattern for per-rig agents.\n\nPattern: gt-\u003crole\u003e-\u003crig\u003e\nExamples:\n- gt-witness-gastown\n- gt-refinery-gastown\n- gt-refinery-beads\n- gt-polecat-gastown-nux\n\nTown-level agents (no rig):\n- gt-mayor\n- gt-deacon\n\nThis pattern enables:\n- Consistent lookup: bd show gt-witness-gastown\n- Routing: routes.jsonl maps prefixes\n- Filtering: bd list --type=agent --rig=gastown\n\nUpdate:\n- agent-as-bead.md with examples\n- bd create --type=agent to validate pattern","status":"pinned","priority":1,"issue_type":"task","assignee":"beads/crew/dave","created_at":"2025-12-27T22:01:43.64279-08:00","created_by":"mayor","updated_at":"2025-12-28T00:01:36.181768-08:00","dependencies":[{"issue_id":"gt-hlaaf","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T22:02:45.168539-08:00","created_by":"daemon"},{"issue_id":"gt-hlaaf","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T23:32:42.479886-08:00","created_by":"daemon"}]} {"id":"gt-hlz0e","title":"Digest: mol-deacon-patrol","description":"Patrol 11: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:18:13.342103-08:00","updated_at":"2025-12-27T21:26:03.54429-08:00","deleted_at":"2025-12-27T21:26:03.54429-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hoyd","title":"Merge: gt-rana.1","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-rana.1\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T15:51:03.089517-08:00","updated_at":"2025-12-27T21:27:22.617826-08:00","deleted_at":"2025-12-27T21:27:22.617826-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-hpy9","title":"Merge: gt-o3is","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-o3is\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T19:32:41.142903-08:00","updated_at":"2025-12-27T21:27:22.426782-08:00","deleted_at":"2025-12-27T21:27:22.426782-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -1047,14 +1048,13 @@ {"id":"gt-i4i2","title":"Update deacon.md.tmpl with correct molecule commands","description":"The deacon prompt references commands that don't exist:\n- gt mol bond → should be bd mol run or gt mol arm\n- gt mol status → needs gt mol command tree first\n\nUpdate after gt mol command tree is implemented.\n\nDepends on: gt mol command tree issue","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T13:12:26.401739-08:00","updated_at":"2025-12-27T21:29:53.209031-08:00","dependencies":[{"issue_id":"gt-i4i2","depends_on_id":"gt-x74c","type":"blocks","created_at":"2025-12-22T13:12:35.69774-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.209031-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-i4kq","title":"Update templates for Propulsion Principle","description":"Overhaul agent prompts to embody the Universal Gas Town Propulsion Principle:\n\n\u003e If you find something on your hook, YOU RUN IT.\n\nTemplates to update:\n- [ ] deacon.md.tmpl - Check hook first, no decision logic\n- [ ] polecat.md.tmpl - Propulsion startup, follow molecule\n- [ ] witness.md.tmpl - Sling wisps when spawning agents\n- [ ] refinery.md.tmpl - Accept slung epics\n\nKey changes:\n1. Remove 'should I run this?' decision points\n2. Add 'check your hook' as step 1 of startup\n3. Make molecule-following the default mode\n4. Simplify - agents don't think, they execute","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T03:17:46.464968-08:00","updated_at":"2025-12-27T21:29:53.251839-08:00","dependencies":[{"issue_id":"gt-i4kq","depends_on_id":"gt-4ev4","type":"blocks","created_at":"2025-12-22T12:10:42.245621-08:00","created_by":"daemon"},{"issue_id":"gt-i4kq","depends_on_id":"gt-uym5","type":"blocks","created_at":"2025-12-22T12:10:42.320803-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.251839-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-i4lo","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- gt-test123 - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-21T21:48:26.320963-08:00","updated_at":"2025-12-27T21:29:56.462098-08:00","deleted_at":"2025-12-27T21:29:56.462098-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} +{"id":"gt-i5bbp","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:49:59.037423-08:00","updated_at":"2025-12-25T20:49:59.037423-08:00","closed_at":"2025-12-25T20:49:59.037377-08:00"} {"id":"gt-i5gkw","title":"Digest: mol-deacon-patrol","description":"Patrol complete: inbox empty, 2 polecats working, all agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:00:03.018473-08:00","updated_at":"2025-12-27T23:00:03.018473-08:00","closed_at":"2025-12-27T23:00:03.018437-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-i5gkw","depends_on_id":"gt-eph-9p7","type":"parent-child","created_at":"2025-12-27T23:00:03.019353-08:00","created_by":"deacon"}]} -{"id":"gt-i5iv0","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:31:54.565104-08:00","updated_at":"2025-12-25T13:31:54.565104-08:00","closed_at":"2025-12-25T13:31:54.565074-08:00"} {"id":"gt-i6b9","title":"Merge: gt-cp2s","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-cp2s\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T23:45:29.171329-08:00","updated_at":"2025-12-27T21:27:22.485068-08:00","deleted_at":"2025-12-27T21:27:22.485068-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-i6jvc","title":"Config directory and schema for messaging","description":"Create ~/gt/config/ directory structure for messaging configuration.\n\n## Deliverables\n\n1. Create ~/gt/config/ directory\n2. Define JSON schema for lists.json:\n ```json\n {\n \"oncall\": [\"mayor/\", \"gastown/witness\"],\n \"cleanup/gastown\": [\"gastown/witness\", \"deacon/\"]\n }\n ```\n3. Define JSON schema for queues.json (if separate from lists)\n4. Add config loading utility in internal/config/\n\n## Acceptance\n- Config directory exists\n- Schema documented\n- Load/parse functions work","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:51:36.803749-08:00","updated_at":"2025-12-26T14:51:36.803749-08:00"} {"id":"gt-i6k1","title":"Clean up duplicate patrol protos (gt-qflq, gt-iep9)","description":"There are duplicate protos for patrol molecules:\n\n## Duplicates\n\n| Old Proto | New Proto | Name |\n|-----------|-----------|------|\n| gt-qflq | mol-witness-patrol | mol-witness-patrol |\n| gt-iep9 | mol-deacon-patrol | mol-deacon-patrol |\n\nThe old gt-* prefix protos were created before the formula cooking system.\nThe new mol-* prefix protos were created by `bd cook`.\n\n## Action\n\n1. Close or delete the old gt-* protos\n2. Update any references to use the new mol-* protos\n3. Verify `bd mol list` shows clean output\n\n## Root Cause\n\nThe bd cook command uses the formula name as the proto ID (mol-*), \nnot the project prefix (gt-*). This is probably correct behavior,\nbut means we have legacy protos to clean up.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T13:50:11.424341-08:00","updated_at":"2025-12-27T21:29:55.510323-08:00","deleted_at":"2025-12-27T21:29:55.510323-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-i6pub","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 0 callbacks, no gates, all witnesses/refineries healthy, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T22:15:38.387794-08:00","updated_at":"2025-12-27T22:15:38.387794-08:00","closed_at":"2025-12-27T22:15:38.387759-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-i6pub","depends_on_id":"gt-eph-yxv","type":"parent-child","created_at":"2025-12-27T22:15:38.38859-08:00","created_by":"deacon"}]} {"id":"gt-i73jh","title":"Digest: mol-deacon-patrol","description":"Patrol 11: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:57:41.693222-08:00","updated_at":"2025-12-27T21:26:00.524485-08:00","deleted_at":"2025-12-27T21:26:00.524485-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-i8cvv","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T00:26:21.45563-08:00","updated_at":"2025-12-25T00:28:16.769812-08:00","closed_at":"2025-12-25T00:28:16.769812-08:00"} {"id":"gt-i9s7o","title":"Add tmux crash detection hooks","description":"Use tmux hooks to detect when agent panes die unexpectedly.\n\n## tmux Hooks to Use\n- pane-died: fires when a pane exits\n- session-closed: fires when session ends\n\n## Implementation\n```bash\nset-hook -g pane-died 'run-shell \"gt log pane-died #{pane_id} #{pane_dead_status}\"'\nset-hook -g session-closed 'run-shell \"gt log session-closed #{session_name}\"'\n```\n\n## Integration\n- gt spawn should set these hooks on agent sessions\n- Distinguish expected exits (handoff, done) from crashes\n- Capture last N lines of output on crash\n- Record exit code/signal for forensics\n\n## gt log crash command\n- Parse pane-died events\n- Show crash history\n- Filter by agent, time range","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-26T15:29:40.899086-08:00","updated_at":"2025-12-27T21:29:45.882716-08:00","deleted_at":"2025-12-27T21:29:45.882716-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-ia0s","title":"Review: Beads Universal Data Plane documentation","description":"Review new docs/beads-data-plane.md (275 lines) for accuracy.\n\n## Commit\n- 54c8269: Add Beads Universal Data Plane documentation\n\n## Review focus\n- Accuracy of beads architecture description\n- Correct field mappings (mail → beads fields)\n- Two-level architecture (town vs rig beads) correctly explained","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T14:27:49.410707-08:00","updated_at":"2025-12-23T14:27:49.410707-08:00","dependencies":[{"issue_id":"gt-ia0s","depends_on_id":"gt-e0qj2","type":"blocks","created_at":"2025-12-26T23:21:29.418109-08:00","created_by":"daemon"}]} {"id":"gt-iahc","title":"Merge: gt-h6eq.6","description":"branch: polecat/keeper\ntarget: main\nsource_issue: gt-h6eq.6\nrig: gastown","status":"tombstone","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T11:42:12.738221-08:00","updated_at":"2025-12-27T21:27:22.997501-08:00","deleted_at":"2025-12-27T21:27:22.997501-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -1072,7 +1072,7 @@ {"id":"gt-idmvl","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:45:19.044736-08:00","updated_at":"2025-12-27T21:26:01.535733-08:00","deleted_at":"2025-12-27T21:26:01.535733-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-idt8f","title":"Digest: mol-deacon-patrol","description":"P13: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:59:21.269231-08:00","updated_at":"2025-12-25T19:59:21.269231-08:00","closed_at":"2025-12-25T19:59:21.269178-08:00"} {"id":"gt-ie33.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-ie33\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T00:10:09.989188-08:00","updated_at":"2025-12-27T21:29:55.620979-08:00","deleted_at":"2025-12-27T21:29:55.620979-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-iep9","title":"mol-deacon-patrol","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nDeacon patrol molecule template. Label: template","status":"tombstone","priority":4,"issue_type":"epic","created_at":"2025-12-21T17:50:22.545763-08:00","updated_at":"2025-12-25T11:44:16.881599-08:00","deleted_at":"2025-12-25T11:44:16.881599-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} +{"id":"gt-ieem","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-24T21:04:09.817241-08:00","updated_at":"2025-12-27T23:39:16.857083-08:00","closed_at":"2025-12-27T23:39:16.857083-08:00"} {"id":"gt-iep9.1","title":"inbox-check","description":"Handle callbacks from agents. Check gt mail inbox, process lifecycle requests.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T17:50:57.090986-08:00","updated_at":"2025-12-25T11:44:16.881599-08:00","deleted_at":"2025-12-25T11:44:16.881599-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-iep9.7","title":"loop-or-exit","description":"Decision: burn and loop if context low, exit for respawn if context high.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T17:51:04.755716-08:00","updated_at":"2025-12-25T11:44:16.881599-08:00","deleted_at":"2025-12-25T11:44:16.881599-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-ifxvi","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T14:24:01.913738-08:00","updated_at":"2025-12-25T14:24:01.913738-08:00","closed_at":"2025-12-25T14:24:01.913706-08:00"} @@ -1081,7 +1081,7 @@ {"id":"gt-iib","title":"Architecture: Decentralized rig structure with per-rig agents","description":"## Decision\n\nAdopt decentralized architecture where each rig contains all its agents (mayor/, witness/, refinery/, polecats/) rather than centralizing mayor clones at town level.\n\n## Town Level Structure\n\n```\n~/ai/ # Town root\n├── config/ # Town config (VISIBLE, not hidden)\n│ ├── town.json # {\"type\": \"town\"}\n│ ├── rigs.json # Registry of managed rigs\n│ └── federation.json # Wasteland config (future)\n│\n├── mayor/ # Mayor's HOME at town level\n│ ├── CLAUDE.md\n│ ├── mail/inbox.jsonl\n│ └── state.json\n│\n└── \u003crigs\u003e/ # Managed projects\n```\n\n## Rig Level Structure (e.g., wyvern)\n\n```\nwyvern/ # Rig = clone of project repo\n├── .git/info/exclude # Gas Town adds: polecats/ refinery/ witness/ mayor/\n├── .beads/ # Beads (if project uses it)\n├── [project files] # Clean project code on main\n│\n├── polecats/ # Worker clones\n│ └── \u003cname\u003e/ # Each is a git clone\n│\n├── refinery/\n│ ├── rig/ # Refinery's clone\n│ ├── state.json\n│ └── mail/inbox.jsonl\n│\n├── witness/ # NEW: Per-rig pit boss\n│ ├── rig/ # Witness's clone\n│ ├── state.json\n│ └── mail/inbox.jsonl\n│\n└── mayor/\n ├── rig/ # Mayor's clone for this rig\n └── state.json\n```\n\n## Key Decisions\n\n1. **Visible config dir**: `config/` not `.gastown/` (models don't find hidden dirs)\n2. **Witness per-rig**: Each rig has its own Witness (pit boss) with its own clone\n3. **Mayor decentralized**: Mayor's clones live IN each rig at `\u003crig\u003e/mayor/rig/`\n4. **Minimal invasiveness**: Only `.git/info/exclude` modified, no commits to project\n5. **Clone subdir name**: Keep `rig/` for consistency (refinery/rig/, witness/rig/, mayor/rig/)\n\n## Role Detection\n\n- Town root or mayor/ → Mayor (town level)\n- Rig root → Mayor (canonical main)\n- \u003crig\u003e/mayor/rig/ → Mayor (rig-specific)\n- \u003crig\u003e/refinery/rig/ → Refinery\n- \u003crig\u003e/witness/rig/ → Witness\n- \u003crig\u003e/polecats/\u003cname\u003e/ → Polecat\n\n## Migration from PGT\n\n- `mayor/rigs/\u003crig\u003e/` → `\u003crig\u003e/mayor/rig/`\n- `\u003crig\u003e/town/` → eliminated (rig root IS the clone)\n- Add `witness/` to each rig","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-15T19:21:19.913928-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-iib","depends_on_id":"gt-u1j","type":"blocks","created_at":"2025-12-15T19:21:40.374551-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-ijmgg","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All agents healthy, routine check","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:45:14.673074-08:00","updated_at":"2025-12-27T21:26:03.845742-08:00","deleted_at":"2025-12-27T21:26:03.845742-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ikyh","title":"Digest: mol-deacon-patrol","description":"Patrol #3: Stable, no changes","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:30:26.503345-08:00","updated_at":"2025-12-27T21:26:04.375716-08:00","deleted_at":"2025-12-27T21:26:04.375716-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-ikyo1","title":"Day 1.1: Add type=agent to bead schema","description":"Add agent as a valid bead type in the schema. This is the foundation for agent-as-bead.\n\nParent: gt-d0jqp","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-27T20:57:54.914343-08:00","created_by":"mayor","updated_at":"2025-12-27T23:14:14.753586-08:00","dependencies":[{"issue_id":"gt-ikyo1","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.539952-08:00","created_by":"daemon"}]} +{"id":"gt-ikyo1","title":"Day 1.1: Add type=agent to bead schema","description":"Add agent as a valid bead type in the schema. This is the foundation for agent-as-bead.\n\nParent: gt-d0jqp","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-27T20:57:54.914343-08:00","created_by":"mayor","updated_at":"2025-12-27T23:39:09.208782-08:00","closed_at":"2025-12-27T23:39:09.208782-08:00","close_reason":"Implemented: type=agent and type=role added to schema (927e8374)","dependencies":[{"issue_id":"gt-ikyo1","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.539952-08:00","created_by":"daemon"}]} {"id":"gt-il2p7","title":"bd update --claim for work queue semantics","description":"Atomic claim operation for work queue messages.\n\n## Deliverables\n\n1. Add --claim flag to bd update\n2. Atomic operation:\n - Sets assignee to claimer\n - Sets status to in_progress\n - Fails if already claimed\n3. Conflict detection:\n - If already claimed, return error: \"already claimed by X\"\n4. Integration with gt mail for queue messages\n\n## Example\n```bash\ngt mail queue cleanup/gastown # See available work\nbd update msg-xxx --claim # Claim it atomically\n# Returns error if someone else claimed first\n```\n\n## Dependencies\n- queue: shared storage (gt-???)\n\n## Acceptance\n- --claim sets assignee + status atomically\n- Double-claim returns clear error\n- Works with queue messages","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:52:08.186488-08:00","updated_at":"2025-12-26T14:52:08.186488-08:00","dependencies":[{"issue_id":"gt-il2p7","depends_on_id":"gt-tnap3","type":"blocks","created_at":"2025-12-26T14:53:08.553425-08:00","created_by":"daemon"}]} {"id":"gt-ilav","title":"Polecat Lifecycle Events: Refinery-Witness Coordination","description":"## Problem\n\nPolecat work completion is currently treated as a single event (MR submission), but the true completion is when the Refinery merges the work. This creates a lifecycle gap:\n\n1. Polecat submits MR → considered \"done\" by Witness\n2. But MR might fail to merge (conflicts, test failures)\n3. No one notifies anyone when merge actually succeeds\n\n## Solution: Two-Event Lifecycle\n\n**Event 1: MR Submitted**\n- `gt mq submit` notifies Witness\n- Witness verifies submission was clean\n- Polecat can go idle (but worktree retained)\n- If submission had issues, Witness can help\n\n**Event 2: MR Merged**\n- Refinery sends `LIFECYCLE: work merged` to Witness\n- Witness updates polecat state to `merged`\n- Worktree now eligible for full cleanup/recycling\n\n## Village Sibling Watch\n\nFor robustness, patrol roles check on their siblings:\n- Refinery checks Witness via `gt peek`\n- Witness checks Refinery via `gt peek`\n- Creates defense in depth - if primary notification fails, someone catches it\n\n## Recovery\n\nIf Refinery misses sending lifecycle notification:\n- Witness polecat-scan can detect: polecat in mr_submitted but MR shows merged\n- Deacon orphan-check can detect: merged MRs with stale polecats","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-23T12:06:56.746185-08:00","updated_at":"2025-12-27T21:29:56.026982-08:00","deleted_at":"2025-12-27T21:29:56.026982-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-ilav.1","title":"Refinery: Add lifecycle-notify step to patrol","description":"After successful merge in handleSuccess(), send lifecycle notification to Witness.\n\n## Implementation\n\n1. Add new mail type: `LIFECYCLE: work merged`\n2. In engineer.go handleSuccess(), after closing MR and source issue:\n ```\n gt mail send \u003crig\u003e/witness -s \"LIFECYCLE: work merged\" -m \"\n Worker: \u003cpolecat\u003e\n MR: \u003cmr-id\u003e\n Issue: \u003csource-issue\u003e\n Commit: \u003cmerge-commit\u003e\n Action: Polecat work merged. Worktree eligible for recycling.\n \"\n ```\n\n3. Update mol-refinery-patrol to include lifecycle-notify step between merge-push and loop-check\n\n## Acceptance\n- Successful merges send mail to Witness\n- Mail includes worker name, MR id, source issue, commit SHA","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:07:46.715807-08:00","updated_at":"2025-12-23T12:07:46.715807-08:00","dependencies":[{"issue_id":"gt-ilav.1","depends_on_id":"gt-ilav","type":"parent-child","created_at":"2025-12-23T12:07:46.716238-08:00","created_by":"daemon"}]} @@ -1167,17 +1167,16 @@ {"id":"gt-k1lr.6","title":"Update gt doctor to check new config locations","description":"Doctor should validate new structure:\n- Check mayor/config.json exists and is valid\n- Check settings/ exists for each rig\n- Warn if old .gastown/ files still exist\n- Offer --fix to migrate old locations to new","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T01:02:25.886588-08:00","updated_at":"2025-12-27T21:29:53.286676-08:00","dependencies":[{"issue_id":"gt-k1lr.6","depends_on_id":"gt-k1lr","type":"parent-child","created_at":"2025-12-22T01:02:25.888093-08:00","created_by":"daemon"},{"issue_id":"gt-k1lr.6","depends_on_id":"gt-k1lr.1","type":"blocks","created_at":"2025-12-22T01:02:37.750161-08:00","created_by":"daemon"},{"issue_id":"gt-k1lr.6","depends_on_id":"gt-k1lr.3","type":"blocks","created_at":"2025-12-22T01:02:37.820429-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.286676-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-k1lr.7","title":"Update documentation for new config architecture","description":"Update docs to reflect new structure:\n- docs/architecture.md: Directory structure section\n- CLAUDE.md files: Config references\n- Add docs/configuration.md with full reference","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T01:02:27.104869-08:00","updated_at":"2025-12-27T21:29:56.412024-08:00","dependencies":[{"issue_id":"gt-k1lr.7","depends_on_id":"gt-k1lr","type":"parent-child","created_at":"2025-12-22T01:02:27.106351-08:00","created_by":"daemon"},{"issue_id":"gt-k1lr.7","depends_on_id":"gt-k1lr.1","type":"blocks","created_at":"2025-12-22T01:02:37.609785-08:00","created_by":"daemon"},{"issue_id":"gt-k1lr.7","depends_on_id":"gt-k1lr.3","type":"blocks","created_at":"2025-12-22T01:02:37.680026-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.412024-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-k1lr.8","title":"Remove .gastown/ after migration complete","description":"Final cleanup:\n- Remove .gastown/ directories at town and rig levels\n- Remove daemon/ and deacon/ directories (replaced by .runtime/)\n- Update .gitignore to remove old patterns\n- Verify all tests pass with new structure","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T01:02:28.43634-08:00","updated_at":"2025-12-27T21:29:56.403854-08:00","dependencies":[{"issue_id":"gt-k1lr.8","depends_on_id":"gt-k1lr","type":"parent-child","created_at":"2025-12-22T01:02:28.437853-08:00","created_by":"daemon"},{"issue_id":"gt-k1lr.8","depends_on_id":"gt-k1lr.7","type":"blocks","created_at":"2025-12-22T01:02:37.466318-08:00","created_by":"daemon"},{"issue_id":"gt-k1lr.8","depends_on_id":"gt-k1lr.6","type":"blocks","created_at":"2025-12-22T01:02:37.539854-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.403854-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-k294l","title":"Day 3.0: Document mail protocol for patrol coordination","description":"Document the mail protocol used for patrol coordination.\n\n**Mail types:**\n- POLECAT_DONE: Polecat → Witness (work complete, ready for merge)\n- MERGE_READY: Witness → Refinery (branch ready for merge queue)\n- MERGED: Refinery → Witness (merge complete, safe to nuke)\n- WITNESS_PING: Witness → Deacon (health check for second-order monitoring)\n- HELP: Any → escalation target (stuck, need intervention)\n- HANDOFF: Any → self (session continuity)\n\n**Format conventions:**\n- Subject prefix indicates type (e.g., 'POLECAT_DONE: nux')\n- Body contains structured data (branch, bead ID, etc.)\n\nThis documentation enables consistent implementation across all patrol formulas.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T23:17:11.657593-08:00","created_by":"mayor","updated_at":"2025-12-27T23:17:11.657593-08:00"} +{"id":"gt-k294l","title":"Day 3.0: Document mail protocol for patrol coordination","description":"Document the mail protocol used for patrol coordination.\n\n**Mail types:**\n- POLECAT_DONE: Polecat → Witness (work complete, ready for merge)\n- MERGE_READY: Witness → Refinery (branch ready for merge queue)\n- MERGED: Refinery → Witness (merge complete, safe to nuke)\n- WITNESS_PING: Witness → Deacon (health check for second-order monitoring)\n- HELP: Any → escalation target (stuck, need intervention)\n- HANDOFF: Any → self (session continuity)\n\n**Format conventions:**\n- Subject prefix indicates type (e.g., 'POLECAT_DONE: nux')\n- Body contains structured data (branch, bead ID, etc.)\n\nThis documentation enables consistent implementation across all patrol formulas.","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-12-27T23:17:11.657593-08:00","created_by":"mayor","updated_at":"2025-12-28T00:02:46.64818-08:00"} {"id":"gt-k2aj","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 0 mail, Mayor+2 witnesses+2 refineries healthy, 3 polecats working (gastown), no orphans, gc N/A","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-22T20:40:02.581522-08:00","updated_at":"2025-12-27T21:26:05.483662-08:00","deleted_at":"2025-12-27T21:26:05.483662-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-k2ilq","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:48:55.379716-08:00","updated_at":"2025-12-27T21:26:02.888229-08:00","deleted_at":"2025-12-27T21:26:02.888229-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-k4dxp","title":"Digest: mol-deacon-patrol","description":"Patrol 4: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:30:11.536346-08:00","updated_at":"2025-12-27T21:26:00.82962-08:00","deleted_at":"2025-12-27T21:26:00.82962-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-k6986","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:56:43.09177-08:00","updated_at":"2025-12-26T13:56:43.09177-08:00","closed_at":"2025-12-26T13:56:43.091735-08:00"} {"id":"gt-k7l0w","title":"Digest: mol-deacon-patrol","description":"Patrol 2: Quiet cycle, all healthy, orphan gt-mol-aux persists","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:13:24.625145-08:00","updated_at":"2025-12-27T21:26:02.77341-08:00","deleted_at":"2025-12-27T21:26:02.77341-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-k7x0","title":"Merge: gt-h5n.5","description":"branch: polecat/Scabrous\ntarget: main\nsource_issue: gt-h5n.5\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:42.318338-08:00","updated_at":"2025-12-27T21:27:22.78341-08:00","deleted_at":"2025-12-27T21:27:22.78341-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-k8dnh","title":"Digest: mol-deacon-patrol","description":"Patrol 4: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:10:16.350897-08:00","updated_at":"2025-12-27T21:26:01.074031-08:00","deleted_at":"2025-12-27T21:26:01.074031-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-k8u5t","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:33:42.064804-08:00","updated_at":"2025-12-25T15:52:58.107047-08:00","deleted_at":"2025-12-25T15:52:58.107047-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-k9185","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 2: quick scan, no changes","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:15:18.561034-08:00","updated_at":"2025-12-27T21:26:03.32014-08:00","deleted_at":"2025-12-27T21:26:03.32014-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-k949h","title":"Digest: mol-deacon-patrol","description":"Patrol 16: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:17:11.402724-08:00","updated_at":"2025-12-27T21:26:00.971834-08:00","deleted_at":"2025-12-27T21:26:00.971834-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-k9828","title":"Digest: mol-deacon-patrol","description":"Patrol 18: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:19:54.510894-08:00","updated_at":"2025-12-25T10:19:54.510894-08:00","closed_at":"2025-12-25T10:19:54.510865-08:00"} {"id":"gt-kabx","title":"Build context self-check into patrol molecules","description":"Patrol molecules (witness-patrol, refinery-patrol, deacon-patrol) should have\nexplicit context self-check as part of each cycle:\n\nAfter each patrol cycle step:\n- Self-assess context pressure\n- If high: complete current step, then initiate handoff\n- If OK: continue to next cycle\n\nThis could be:\n1. Explicit step in molecule: 'context-check'\n2. Guidance in step instructions: 'Before continuing, assess context...'\n3. Protocol baked into the patrol loop description\n\nThe key is making it unavoidable - not optional guidance that gets ignored.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:46:57.067465-08:00","updated_at":"2025-12-23T01:46:57.067465-08:00"} {"id":"gt-kaue","title":"Digest: mol-deacon-patrol","description":"Patrol #11: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:25.611316-08:00","updated_at":"2025-12-27T21:26:04.310029-08:00","deleted_at":"2025-12-27T21:26:04.310029-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-kcee","title":"Witness commands: gt witness start/stop/status needed","description":"## Summary\n\nNo `gt witness` command exists. The witness should:\n- Monitor polecats for stuck/idle state\n- Nudge polecats that seem blocked\n- Report status to mayor\n- Handle polecat lifecycle\n\n## Expected Commands\n\n```bash\ngt witness start gastown # Start witness for rig\ngt witness stop gastown # Stop witness\ngt witness status # Show witness status\n```\n\n## Current State\n\n- Witness directory exists: /Users/stevey/gt/gastown/witness/\n- Has state.json but no active process\n- gt status shows 'Witnesses: 0'\n\n## Context\n\nFull polecat flow needs witness monitoring for production use.","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-18T21:55:24.079671-08:00","updated_at":"2025-12-27T21:29:54.083885-08:00","deleted_at":"2025-12-27T21:29:54.083885-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} @@ -1213,7 +1212,6 @@ {"id":"gt-ko73c","title":"Digest: mol-deacon-patrol","description":"P9","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:24:32.507404-08:00","updated_at":"2025-12-27T21:26:01.671325-08:00","deleted_at":"2025-12-27T21:26:01.671325-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-kp2","title":"Add merge-request type to Beads schema","description":"Define the merge-request bead type with fields:\n- branch: source branch (e.g., polecat/Nux/gt-xxx)\n- target_branch: destination (main or integration/xxx)\n- source_issue: the work being merged (gt-xxx)\n- worker: who did the work\n- rig: which rig\n- merge_commit: (filled on close) SHA of merge commit\n- close_reason: (filled on close) success/failure details\n\nThis may require beads schema changes or just convention.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-16T23:02:14.471248-08:00","updated_at":"2025-12-27T21:29:45.673918-08:00","dependencies":[{"issue_id":"gt-kp2","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:55.338148-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.673918-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-kp3s3","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- gt-ds3h3 - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T01:59:05.781319-08:00","updated_at":"2025-12-27T21:29:55.325758-08:00","deleted_at":"2025-12-27T21:29:55.325758-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} -{"id":"gt-kqacw","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:44:42.615685-08:00","updated_at":"2025-12-25T10:44:42.615685-08:00","closed_at":"2025-12-25T10:44:42.615655-08:00"} {"id":"gt-kqwpb","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All healthy, no issues","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:53:25.592462-08:00","updated_at":"2025-12-27T21:26:01.778644-08:00","deleted_at":"2025-12-27T21:26:01.778644-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-kr3v6","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Quick cycle, all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:05:52.581321-08:00","updated_at":"2025-12-27T21:26:03.009125-08:00","deleted_at":"2025-12-27T21:26:03.009125-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-krut","title":"Polecat .beads/ contamination from stale branches","description":"**Fixed in commit 8699b7b**\n\n## Problem\n\nWhen polecats are spawned from branches that previously had bd sync run on them, the .beads/ directory from the branch contains stale issues.jsonl, config.yaml, etc.\n\nThe setupSharedBeads() function was creating a redirect file, but NOT cleaning up the existing .beads/ contents first.\n\n## Root Cause\n\n1. Old polecat branch has .beads/ tracked in git (from previous bd sync)\n2. gt spawn uses Add() which reuses existing branch\n3. WorktreeAddExisting() checks out branch, including .beads/ files\n4. setupSharedBeads() creates redirect, but other files remain\n5. bd commands see stale data\n\n## Fix\n\nsetupSharedBeads() now:\n1. Removes entire .beads/ directory if it exists\n2. Recreates fresh with only redirect file\n3. Redirect points directly to mayor/rig/.beads (not through rig root)","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-22T12:22:42.781701-08:00","updated_at":"2025-12-27T21:29:53.24314-08:00","deleted_at":"2025-12-27T21:29:53.24314-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} @@ -1221,16 +1219,18 @@ {"id":"gt-ksrt.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-ksrt\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T16:16:46.436616-08:00","updated_at":"2025-12-27T21:29:55.481382-08:00","deleted_at":"2025-12-27T21:29:55.481382-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ktal","title":"Epic: Refinery Engineer Autonomy","description":"Make Refinery Engineer fully autonomous:\n\n## Goal\nRefinery can run indefinitely, processing all polecat work through merge queue, cycling sessions as needed, without human intervention.\n\n## Key Components\n1. Role prompting (CLAUDE.md, templates)\n2. Handoff mechanism (pinned beads)\n3. Context detection (gt prime)\n4. Communication protocol (Witness, Deacon)\n5. Future: Merge orchestration plugins\n\n## Success Criteria\n- Refinery starts, reads handoff, knows what to do\n- Processes merges sequentially with conflict resolution\n- Cycles sessions cleanly via Deacon\n- Communicates results to Witness\n- No work left behind","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-19T18:09:30.84543-08:00","updated_at":"2025-12-27T21:29:53.890138-08:00","deleted_at":"2025-12-27T21:29:53.890138-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-ktf3","title":"bd ready --type: missing type filter for MQ integration","description":"bd ready lacks --type flag that engineer.go expects.\n\n## Code (internal/refinery/engineer.go)\nreadyMRs, err := e.beads.ReadyWithType(\"merge-request\")\n\n## Actual bd ready\nNo --type flag - only supports assignee, label, priority filters.\n\n## Impact\nRefinery can't find merge-requests in queue, so MQ doesn't process anything.\n\n## Fix Options\n1. Add --type flag to bd ready\n2. Use bd list --type=merge-request --status=open instead\n3. Both (ready filters for unblocked, list for all)\n\nThis is blocking the entire MQ pipeline.","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-19T14:57:16.297847-08:00","updated_at":"2025-12-27T21:29:45.545131-08:00","deleted_at":"2025-12-27T21:29:45.545131-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} +{"id":"gt-ku1y","title":"Digest: mol-deacon-patrol","description":"Patrol 13","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:00.990435-08:00","updated_at":"2025-12-24T23:10:00.990435-08:00","closed_at":"2025-12-24T23:10:00.990401-08:00"} {"id":"gt-kut","title":"Test message","description":"Testing GGT mail system","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-17T16:12:11.437529-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"} {"id":"gt-kuyo7","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, no messages, quiet cycle","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:03:59.845797-08:00","updated_at":"2025-12-27T21:26:03.042237-08:00","deleted_at":"2025-12-27T21:26:03.042237-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-kxw7x","title":"Digest: mol-deacon-patrol","description":"Patrol 16: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:00:34.661476-08:00","updated_at":"2025-12-27T21:26:00.482697-08:00","deleted_at":"2025-12-27T21:26:00.482697-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-l0z34","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 9: routine, healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:25:37.061769-08:00","updated_at":"2025-12-27T21:26:01.898256-08:00","deleted_at":"2025-12-27T21:26:01.898256-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-l19ca","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:45:41.449171-08:00","updated_at":"2025-12-26T14:45:41.449171-08:00","closed_at":"2025-12-26T14:45:41.449126-08:00"} {"id":"gt-l1o","title":"Harness \u0026 Priming: Document architecture and update all role contexts","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-17T16:42:29.314113-08:00","updated_at":"2025-12-27T21:29:54.270631-08:00","deleted_at":"2025-12-27T21:29:54.270631-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} +{"id":"gt-l2ccm","title":"Digest: mol-deacon-patrol","description":"Patrol 16","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:52:58.703667-08:00","updated_at":"2025-12-25T20:52:58.703667-08:00","closed_at":"2025-12-25T20:52:58.703614-08:00"} {"id":"gt-l32kx","title":"implement","description":"Implement the solution for gt-u2vg. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:53:37.31087-08:00","updated_at":"2025-12-25T14:12:42.103957-08:00","dependencies":[{"issue_id":"gt-l32kx","depends_on_id":"gt-6n1cy","type":"parent-child","created_at":"2025-12-25T01:53:37.328352-08:00","created_by":"stevey"},{"issue_id":"gt-l32kx","depends_on_id":"gt-hkf8j","type":"blocks","created_at":"2025-12-25T01:53:37.344719-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.103957-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-l3c","title":"Design: Polecat Beads write access","description":"Design for granting polecats direct beads write access.\n\n## Background\n\nWith Beads v0.30.0 tombstone-based rearchitecture, we have solid multi-agent support. Reversing the original read-only decision.\n\n## Benefits\n\n- Simplifies architecture (no mail-based issue filing proxy)\n- Empowers polecats to file discovered work\n- Beads handles work-disavowal\n\n## Complications\n\nFor OSS projects where you cannot commit to project .beads/, need per-rig beads repo configuration.\n\n## Subtasks (implementation)\n\n- gt-zx3: Per-rig beads configuration schema\n- gt-e1y: Worker prompting updates for beads access\n- gt-cjb: Witness proxy removal\n- gt-082: Beads sync in decommission checklist\n\n**Design complete.** Each subtask has full specification in its description.","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-15T19:37:42.191734-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-l3gfn","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:29:32.029593-08:00","updated_at":"2025-12-25T07:29:32.029593-08:00","closed_at":"2025-12-25T07:29:32.029556-08:00"} {"id":"gt-l3o0k","title":"Update gastown to use 'ephemeral' instead of 'wisp' terminology","description":"After beads renames 'wisp' to 'ephemeral' (bd-o18s), update gastown code:\n\n- patrol_helpers.go: bd wisp create → bd ephemeral create (or new API)\n- doctor/wisp_check.go: rename to ephemeral_check.go\n- All references to Wisp field → Ephemeral\n\nDepends on: bd-o18s","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T20:16:44.91769-08:00","updated_at":"2025-12-26T20:16:44.91769-08:00","dependencies":[{"issue_id":"gt-l3o0k","depends_on_id":"external:beads:ephemeral-rename","type":"blocks","created_at":"2025-12-26T20:17:00.859719-08:00","created_by":"daemon"},{"issue_id":"gt-l3o0k","depends_on_id":"external:beads:bd-o18s","type":"blocks","created_at":"2025-12-26T20:17:51.026548-08:00","created_by":"daemon"}]} +{"id":"gt-l42h","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-1wmw) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:55:01.79541-08:00","updated_at":"2025-12-25T15:52:58.278388-08:00","deleted_at":"2025-12-25T15:52:58.278388-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-l4gm","title":"Crew workers: design documentation and remaining work","description":"## Summary\n\nCrew workers are user-managed persistent workspaces within a rig, distinct from polecats.\n\n## Current Implementation\n\n### Commands (all working)\n- `gt crew add \u003cname\u003e` - Create workspace (git clone)\n- `gt crew list` - List workspaces with status\n- `gt crew at \u003cname\u003e` - Attach to tmux session\n- `gt crew remove \u003cname\u003e` - Remove workspace\n- `gt crew pristine [\u003cname\u003e]` - git pull + bd sync\n- `gt crew refresh \u003cname\u003e` - Context cycle with handoff mail\n- `gt crew status [\u003cname\u003e]` - Detailed status\n- `gt crew rename \u003cname\u003e` - Rename workspace\n\n### Crew vs Polecat\n\n| Aspect | Crew | Polecat |\n|--------|------|---------|\n| Lifecycle | User-managed | Witness-managed |\n| Scheduling | Manual | `gt spawn` |\n| Merge flow | Direct push OK | Integration branch → refinery |\n| Garbage collection | Never | Auto on completion |\n| Identity | Long-lived (emma, dave) | Ephemeral (Nux, Toast) |\n\n## Known Bugs\n\n- **gt-70b3**: detectSender() doesn't recognize crew workers\n- **gt-vdp0**: Crew CLAUDE.md shows Refinery template\n\n## Potential Enhancements\n\n1. Rebase helper in `gt crew pristine` for conflict resolution\n2. Cross-rig crew support (crew worker in multiple rigs?)\n3. Better mail identity auto-detection for crew","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-18T21:49:58.524424-08:00","updated_at":"2025-12-27T21:29:57.076832-08:00","deleted_at":"2025-12-27T21:29:57.076832-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-l5l0f","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:14:41.221012-08:00","updated_at":"2025-12-27T21:26:02.756958-08:00","deleted_at":"2025-12-27T21:26:02.756958-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-l6dzm","title":"Digest: mol-deacon-patrol","description":"Patrol 13: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:04.697254-08:00","updated_at":"2025-12-27T21:26:02.106315-08:00","deleted_at":"2025-12-27T21:26:02.106315-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1271,7 +1271,6 @@ {"id":"gt-lth8y.6","title":"Test shiny formula end-to-end","description":"Test the shiny (engineer-in-box) formula:\n\n1. **Create issue with formula**:\n```bash\ngt sling shiny --var feature=\"Add hello world endpoint\" gastown\n```\n\n2. **Watch polecat execute shiny steps**:\n - design: Architecture thinking\n - implement: Write the code\n - review: Self-review\n - test: Run tests\n - submit: Create PR\n\n3. **Verify output**:\n - Design notes in issue/commit\n - Implementation matches design\n - Tests pass\n - PR created and ready for merge\n\nSuccess: A reviewed, tested PR from a single command.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-27T14:19:49.453837-08:00","created_by":"mayor","updated_at":"2025-12-27T21:29:45.183783-08:00","close_reason":"Blocked by gt-1dbcp (polecat auto-start). Shiny formula exists but can't be tested end-to-end until polecats auto-start work.","dependencies":[{"issue_id":"gt-lth8y.6","depends_on_id":"gt-lth8y","type":"parent-child","created_at":"2025-12-27T14:19:49.455617-08:00","created_by":"daemon"},{"issue_id":"gt-lth8y.6","depends_on_id":"gt-lth8y.5","type":"blocks","created_at":"2025-12-27T14:20:03.991745-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.183783-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lth8y.7","title":"Fix patrol role priming","description":"Patrol roles (deacon, witness, refinery) need proper context priming.\n\nCurrent issue: Sessions start but may not have proper CLAUDE.md context.\n\nFix:\n1. Ensure role templates include patrol formula reference\n2. Verify SessionStart hook runs gt prime\n3. Check that patrol loop starts automatically\n\nRelated: Role templates in internal/templates/roles/*.md.tmpl","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-27T14:19:50.867349-08:00","created_by":"mayor","updated_at":"2025-12-27T21:29:45.781691-08:00","close_reason":"Same root cause as gt-1dbcp: Claude needs user input to trigger SessionStart hook. All patrol roles affected.","dependencies":[{"issue_id":"gt-lth8y.7","depends_on_id":"gt-lth8y","type":"parent-child","created_at":"2025-12-27T14:19:50.868931-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.781691-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ltomz","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:35.729682-08:00","updated_at":"2025-12-27T21:26:02.072669-08:00","deleted_at":"2025-12-27T21:26:02.072669-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-luo74","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:35:53.856168-08:00","updated_at":"2025-12-27T21:26:03.870123-08:00","deleted_at":"2025-12-27T21:26:03.870123-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lve0","title":"Digest: mol-deacon-patrol","description":"Patrol #2: All healthy, no changes","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:29:43.926838-08:00","updated_at":"2025-12-27T21:26:04.383994-08:00","deleted_at":"2025-12-27T21:26:04.383994-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lwuu","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- {{issue}} - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-21T21:47:15.553926-08:00","updated_at":"2025-12-25T11:45:02.114796-08:00","deleted_at":"2025-12-25T11:45:02.114796-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-lwuu.1","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue ({{issue}}) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:47:23.880531-08:00","updated_at":"2025-12-25T11:45:02.114796-08:00","dependencies":[{"issue_id":"gt-lwuu.1","depends_on_id":"gt-lwuu","type":"parent-child","created_at":"2025-12-21T21:47:23.882049-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T11:45:02.114796-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} @@ -1299,13 +1298,13 @@ {"id":"gt-maieo","title":"Digest: mol-deacon-patrol","description":"Patrol 5: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:39:28.463668-08:00","updated_at":"2025-12-27T21:26:00.904716-08:00","deleted_at":"2025-12-27T21:26:00.904716-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mat34","title":"Digest: mol-deacon-patrol","description":"Patrol 8: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:02.92058-08:00","updated_at":"2025-12-27T21:26:03.421553-08:00","deleted_at":"2025-12-27T21:26:03.421553-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mbyy","title":"CLI API Audit: gt and bd command structure review before OSS launch","description":"# CLI API Audit for OSS Launch\n\nBefore launching Gas Town + Beads as an SDK, we need to ensure the command-line\nAPI is intelligently designed, consistent, intuitive, and structurally sound.\n\n## Current State Audit\n\n### gt (Gas Town) - 50+ top-level commands\n\n**Agent Lifecycle:**\n- `gt mayor`, `gt deacon`, `gt witness`, `gt refinery` - agent management\n- `gt polecat` - worker management (subcommands: add, remove, list, etc.)\n- `gt crew` - persistent workspace management\n- `gt spawn` - create polecat with work\n\n**Work Lifecycle:**\n- `gt spawn` - assign work to new polecat\n- `gt sling` - hook work + start immediately\n- `gt hook` - attach work durably\n- `gt handoff` - pass work to fresh session\n- `gt done` - signal work complete\n- `gt release` - release stuck issues\n\n**Infrastructure:**\n- `gt daemon`, `gt up`, `gt down`, `gt start`, `gt stop`, `gt shutdown`\n- `gt init`, `gt install`, `gt doctor`\n\n**Communication:**\n- `gt mail` (subcommands: send, inbox, read, etc.)\n- `gt nudge`, `gt broadcast`\n\n**Molecules:**\n- `gt molecule` / `gt mol` (17 subcommands!)\n\n### bd (Beads) - Well-categorized but some sprawl\n\n**Core CRUD:**\n- `bd create`, `bd show`, `bd update`, `bd close`, `bd list`\n\n**Molecules:**\n- `bd mol` (5 subcommands: catalog, show, bond, run, distill)\n- `bd wisp` (3 subcommands: create, gc, list)\n- `bd pour` (top-level alias for instantiation)\n- `bd cook` (compile formula to proto)\n\n**Hook/Pin:**\n- `bd pin` - attach mol to agent hook\n- `bd unpin` - remove from hook\n- `bd hook` - inspect what's on hook\n\n## Structural Concerns\n\n### 1. gt is sprawling (50+ top-level commands)\n\nMany commands could be subcommands:\n```\n# Current # Could be\ngt up/down/start/stop gt daemon {up|down|start|stop}\ngt spawn/sling/hook/handoff gt work {spawn|sling|hook|handoff}\ngt mayor/deacon/witness gt agent {mayor|deacon|witness|...}\n```\n\n### 2. Overlap between gt and bd\n\n| Concept | gt | bd |\n|---------|----|----|\n| Hook | `gt hook` | `bd pin`, `bd hook` |\n| Mail | `gt mail` | `bd mail` (delegates) |\n| Molecules | `gt mol` (17 cmds) | `bd mol` (5 cmds) |\n\nWhich owns what? User confusion likely.\n\n### 3. Naming inconsistencies\n\n- `gt polecat` (noun) vs `gt spawn` (verb) - both about polecats\n- `gt done` vs `gt handoff` - both end work but different\n- `bd mol run` vs `bd pour` - both instantiate\n\n### 4. Subcommand depth decisions\n\n**Good patterns:**\n- `bd mol {catalog|show|bond|run|distill}` - coherent group\n- `gt mail {send|inbox|read|archive}` - coherent group\n\n**Questionable patterns:**\n- `bd create --wisp` AND `bd wisp create` - two ways to do same thing\n- `gt spawn --molecule X` AND `gt mol instantiate` - overlap\n\n### 5. Flag vs subcommand guidelines needed\n\nWhen to use flags vs subcommands?\n- `--json` as flag ✓ (modifier)\n- `--wisp` as flag for create? Or separate `bd wisp create`?\n- `--molecule` on spawn? Or separate workflow?\n\n## Recommendations to Evaluate\n\n### A. Consolidate gt top-level commands\n\nGroup related commands:\n```\ngt agent {mayor|deacon|witness|refinery|polecat}\ngt work {spawn|sling|hook|handoff|done}\ngt infra {daemon|up|down|doctor}\n```\n\n### B. Clarify gt vs bd ownership\n\n| Domain | Owner | Other defers |\n|--------|-------|--------------|\n| Issues | bd | gt uses bd |\n| Agents | gt | bd doesn't touch |\n| Molecules | bd mol | gt mol wraps for UX |\n| Hooks | bd pin/hook | gt hook wraps |\n| Mail | gt mail | bd mail delegates |\n\n### C. Apply consistent naming\n\n- All agent commands: nouns (`gt polecat`, `gt mayor`)\n- All work commands: verbs (`gt spawn`, `gt sling`, `gt hook`)\n- Avoid synonyms: pick one term and stick with it\n\n### D. Flag vs subcommand rule\n\n- Flags: modify behavior of command (`--json`, `--force`, `--wisp`)\n- Subcommands: distinct operations (`mol run`, `mol squash`, `mol burn`)\n- Exception: very common operations can have top-level aliases\n\n## Tasks\n\n1. [ ] Review gt command groupings - propose consolidation\n2. [ ] Review bd command groupings - check for sprawl\n3. [ ] Document gt vs bd ownership boundaries\n4. [ ] Identify and resolve naming inconsistencies\n5. [ ] Document flag vs subcommand decision criteria\n6. [ ] Create migration plan for any breaking changes\n7. [ ] Update help text to be consistent\n8. [ ] Test agent UX: can Claude guess commands correctly?\n\n## Success Criteria\n\n- New user can guess command structure intuitively\n- `gt --help` fits on one screen (or is well-categorized)\n- No duplicate functionality between gt and bd\n- Consistent naming throughout\n- Claude agents can discover commands without documentation","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-24T23:48:42.420867-08:00","updated_at":"2025-12-27T21:29:52.547876-08:00","dependencies":[{"issue_id":"gt-mbyy","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T23:48:52.221824-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.547876-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} -{"id":"gt-mc4n","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-test123) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:56:18.534569-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","dependencies":[{"issue_id":"gt-mc4n","depends_on_id":"gt-zjqs","type":"parent-child","created_at":"2025-12-21T21:56:18.535487-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-mcch0","title":"Digest: mol-deacon-patrol","description":"Patrol 16: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:28:57.926784-08:00","updated_at":"2025-12-25T07:28:57.926784-08:00","closed_at":"2025-12-25T07:28:57.926736-08:00"} {"id":"gt-mcjd","title":"Work on gt-o9j: Fix tmux status bar polecat count - exclu...","description":"Work on gt-o9j: Fix tmux status bar polecat count - exclude static roles (mayor, deacon, witnesses, refineries, docs, hop). Run 'bd show gt-o9j' for details.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-20T07:52:51.623541-08:00","updated_at":"2025-12-27T21:29:56.806106-08:00","deleted_at":"2025-12-27T21:29:56.806106-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-md2rg.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-md2rg\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:14.340033-08:00","updated_at":"2025-12-27T21:29:55.317325-08:00","deleted_at":"2025-12-27T21:29:55.317325-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mdgt8","title":"Convert formula files from YAML to JSON","description":"Formulas currently use .formula.yaml but the project avoids YAML. Convert to .formula.json for consistency with the rest of the codebase. This blocks implementing compose operators (advice, expand, etc.) since the schema needs to be right first.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-25T01:23:06.149396-08:00","updated_at":"2025-12-27T21:29:52.53127-08:00","deleted_at":"2025-12-27T21:29:52.53127-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-me866","title":"Digest: mol-deacon-patrol","description":"Patrol 17: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:35.600017-08:00","updated_at":"2025-12-25T13:45:35.600017-08:00","closed_at":"2025-12-25T13:45:35.599984-08:00"} {"id":"gt-mfatq","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:52:57.848245-08:00","updated_at":"2025-12-27T21:26:04.091698-08:00","deleted_at":"2025-12-27T21:26:04.091698-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-mh18d","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:57:28.9637-08:00","updated_at":"2025-12-26T13:57:28.9637-08:00","closed_at":"2025-12-26T13:57:28.96366-08:00"} {"id":"gt-mh5s","title":"Refinery gates: test/lint/build before merge","description":"Before merging polecat work to main, run configurable quality gates.\n\n**From VC**: internal/gates/ - parallel execution with timeout, any failure = overall failure.\n\n**Gas Town implementation**: Refinery config with gate commands:\n```yaml\ngates:\n test:\n cmd: go test ./...\n timeout: 5m\n lint:\n cmd: golangci-lint run\n timeout: 2m\n build:\n cmd: go build ./...\n timeout: 3m\nparallel: true\n```\n\nIf gates fail, don't merge. Polecat can iterate and retry.\n\n**Value**: Prevents broken code from reaching main. VC had 90.9% gate pass rate.\n\n**VC complexity**: ~200 lines Go\n**Gas Town complexity**: ~10 lines YAML","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-20T20:30:12.44681-08:00","updated_at":"2025-12-20T20:30:12.44681-08:00","dependencies":[{"issue_id":"gt-mh5s","depends_on_id":"gt-zhpa","type":"parent-child","created_at":"2025-12-20T20:30:27.402708-08:00","created_by":"daemon"}]} {"id":"gt-mjs5e","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:35:40.754118-08:00","updated_at":"2025-12-27T21:26:00.373404-08:00","deleted_at":"2025-12-27T21:26:00.373404-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mjso","title":"Merge: gt-rixa","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-rixa\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-21T14:09:26.367745-08:00","updated_at":"2025-12-27T21:27:22.912542-08:00","deleted_at":"2025-12-27T21:27:22.912542-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -1316,17 +1315,18 @@ {"id":"gt-mol-0mz","title":"Load context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-8tmz.36) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:36.237689-08:00","updated_at":"2025-12-27T21:29:55.106067-08:00","deleted_at":"2025-12-27T21:29:55.106067-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mol-1vj","title":"Load context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-gmqe) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T18:45:53.650028-08:00","updated_at":"2025-12-27T21:29:55.147812-08:00","dependencies":[{"issue_id":"gt-mol-1vj","depends_on_id":"gt-mol-aux","type":"parent-child","created_at":"2025-12-25T18:45:53.674603-08:00","created_by":"mayor"}],"deleted_at":"2025-12-27T21:29:55.147812-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mol-3f0","title":"Implement","description":"Implement the solution for gt-8tmz.34. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:10.031026-08:00","updated_at":"2025-12-27T21:29:55.13109-08:00","dependencies":[{"issue_id":"gt-mol-3f0","depends_on_id":"gt-mol-xl8","type":"blocks","created_at":"2025-12-25T19:47:10.045526-08:00","created_by":"mayor"}],"deleted_at":"2025-12-27T21:29:55.13109-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-mol-3g1","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work. A polecat that crashes after any step can restart, read its molecule state, and continue from the last completed step. No work is lost.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| issue | Yes | The source issue ID being worked on |","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:47:48.598459-08:00","updated_at":"2025-12-25T19:56:54.390868-08:00","closed_at":"2025-12-25T19:56:54.390868-08:00"} {"id":"gt-mol-572","title":"Implement","description":"Implement the solution for gt-8tmz.36. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:36.237423-08:00","updated_at":"2025-12-27T21:29:55.114325-08:00","dependencies":[{"issue_id":"gt-mol-572","depends_on_id":"gt-mol-0mz","type":"blocks","created_at":"2025-12-25T19:47:36.252069-08:00","created_by":"mayor"}],"deleted_at":"2025-12-27T21:29:55.114325-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-mol-8fn","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work. A polecat that crashes after any step can restart, read its molecule state, and continue from the last completed step. No work is lost.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| issue | Yes | The source issue ID being worked on |","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:47:10.030496-08:00","updated_at":"2025-12-25T21:03:00.246657-08:00","closed_at":"2025-12-25T21:03:00.246657-08:00"} {"id":"gt-mol-a8b","title":"Load context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-8tmz.10) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:48.59927-08:00","updated_at":"2025-12-27T21:29:55.089396-08:00","deleted_at":"2025-12-27T21:29:55.089396-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mol-aux","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work. A polecat that crashes after any step can restart, read its molecule state, and continue from the last completed step. No work is lost.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| issue | Yes | The source issue ID being worked on |","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T18:45:53.649284-08:00","updated_at":"2025-12-27T21:29:55.16453-08:00","deleted_at":"2025-12-27T21:29:55.16453-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} -{"id":"gt-mol-dat","title":"Request shutdown","description":"Send shutdown request to Witness.\nWait for termination.\n\nThe polecat is now ready to be cleaned up.\nDo not exit directly - wait for Witness to kill the session.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:10.031563-08:00","updated_at":"2025-12-25T19:54:25.98509-08:00","closed_at":"2025-12-25T19:54:25.98509-08:00"} +{"id":"gt-mol-dat","title":"Request shutdown","description":"Send shutdown request to Witness.\nWait for termination.\n\nThe polecat is now ready to be cleaned up.\nDo not exit directly - wait for Witness to kill the session.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:10.031563-08:00","updated_at":"2025-12-25T19:54:25.98509-08:00","closed_at":"2025-12-25T19:54:25.98509-08:00","dependencies":[{"issue_id":"gt-mol-dat","depends_on_id":"gt-mol-8fn","type":"parent-child","created_at":"2025-12-25T19:47:10.072065-08:00","created_by":"mayor"},{"issue_id":"gt-mol-dat","depends_on_id":"gt-mol-ttt","type":"blocks","created_at":"2025-12-25T19:47:10.085511-08:00","created_by":"mayor"}]} {"id":"gt-mol-g8x","title":"Request shutdown","description":"Send shutdown request to Witness.\nWait for termination.\n\nThe polecat is now ready to be cleaned up.\nDo not exit directly - wait for Witness to kill the session.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:48.599526-08:00","updated_at":"2025-12-27T21:29:55.081039-08:00","dependencies":[{"issue_id":"gt-mol-g8x","depends_on_id":"gt-mol-jpg","type":"blocks","created_at":"2025-12-25T19:47:48.657908-08:00","created_by":"mayor"}],"deleted_at":"2025-12-27T21:29:55.081039-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-mol-i2o","title":"Self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:45:53.650511-08:00","updated_at":"2025-12-25T19:51:45.253951-08:00","closed_at":"2025-12-25T19:51:45.253951-08:00","dependencies":[{"issue_id":"gt-mol-i2o","depends_on_id":"gt-mol-aux","type":"parent-child","created_at":"2025-12-25T18:45:53.710925-08:00","created_by":"mayor"},{"issue_id":"gt-mol-i2o","depends_on_id":"gt-mol-07k","type":"blocks","created_at":"2025-12-25T18:45:53.723219-08:00","created_by":"mayor"}]} {"id":"gt-mol-jpg","title":"Self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:48.59976-08:00","updated_at":"2025-12-27T21:29:55.072671-08:00","dependencies":[{"issue_id":"gt-mol-jpg","depends_on_id":"gt-mol-uau","type":"blocks","created_at":"2025-12-25T19:47:48.687264-08:00","created_by":"mayor"}],"deleted_at":"2025-12-27T21:29:55.072671-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-mol-ttt","title":"Self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:10.031815-08:00","updated_at":"2025-12-25T19:54:25.969063-08:00","closed_at":"2025-12-25T19:54:25.969063-08:00","dependencies":[{"issue_id":"gt-mol-ttt","depends_on_id":"gt-mol-8fn","type":"parent-child","created_at":"2025-12-25T19:47:10.099092-08:00","created_by":"mayor"},{"issue_id":"gt-mol-ttt","depends_on_id":"gt-mol-3f0","type":"blocks","created_at":"2025-12-25T19:47:10.112469-08:00","created_by":"mayor"}]} {"id":"gt-mol-uau","title":"Implement","description":"Implement the solution for gt-8tmz.10. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:48.599004-08:00","updated_at":"2025-12-27T21:29:55.097728-08:00","dependencies":[{"issue_id":"gt-mol-uau","depends_on_id":"gt-mol-a8b","type":"blocks","created_at":"2025-12-25T19:47:48.614361-08:00","created_by":"mayor"}],"deleted_at":"2025-12-27T21:29:55.097728-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mol-xl8","title":"Load context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-8tmz.34) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:10.031297-08:00","updated_at":"2025-12-27T21:29:55.122589-08:00","deleted_at":"2025-12-27T21:29:55.122589-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-molmall","title":"Mol Mall: Formula marketplace and aspect composition","description":"## Summary\n\nA marketplace for sharing molecule formulas using GitHub as backend, plus a new\n**aspect composition** capability for cooking that allows formulas to be applied\nas cross-cutting transformations to existing mols.\n\n## Key Insight\n\nFormulas aren't just standalone workflows—they're **transformations** you can\napply to other mols. This enables patterns like:\n- \"Apply Rule of Five code review to any coding task\"\n- \"Wrap any epic with security review steps\"\n- \"Add logging/metrics to any patrol molecule\"\n\n## Architecture\n\n```\nRemote Formulas (GitHub)\n ↓ install\nLocal Formulas (~/.gt/formulas/ or .beads/formulas/)\n ↓ cook --with\nMols (beads, git-tracked)\n ↓ pour/sling\nExecution (ephemeral or tracked)\n```\n\n## Formula Types\n\n1. **Standalone** - Complete workflows (mol-polecat-work, mol-deacon-patrol)\n2. **Aspects** - Cross-cutting concerns woven into other mols (rule-of-five)\n3. **Adapters** - Wrappers that make things runnable\n\n## Aspect Composition (New Cooking Capability)\n\n```bash\nbd cook my-epic --with rule-of-five,security-review\n```\n\nAspects declare injection points:\n\n```yaml\n# rule-of-five.formula.yaml\nkind: aspect\nname: rule-of-five\nversion: 1.2.0\n\ninject_after:\n tag: generates-code # matches any step with this tag\n\nsteps:\n - id: review-correctness\n title: \"Review: Correctness\"\n - id: review-edge-cases\n title: \"Review: Edge Cases\"\n - id: review-performance\n title: \"Review: Performance\"\n - id: review-security\n title: \"Review: Security\"\n - id: review-maintainability\n title: \"Review: Maintainability\"\n```\n\nInjection modes:\n- `inject_after: \u003cstep-id or tag\u003e` - insert steps after\n- `inject_before: \u003cstep-id or tag\u003e` - insert steps before\n- `wrap: \u003cstep-id or tag\u003e` - insert before AND after\n- `replace: \u003cstep-id or tag\u003e` - substitute entirely\n\n## The Mall Index\n\nA well-known repo maps short names to full references:\n\n```yaml\n# steveyegge/gt-mall/index.yaml\nformulas:\n rule-of-five:\n repo: steveyegge/gt-formulas\n path: aspects/rule-of-five.formula.yaml\n version: v1.2.0\n description: \"Five-lens code review\"\n tags: [review, quality]\n```\n\nCommands:\n- `gt mol search review` - search the index\n- `gt mol install rule-of-five` - fetch from GitHub\n- `gt mol install github.com/acme/formulas/custom@v1` - direct URL\n\n## Implementation Phases\n\n### Phase 1: Aspect Composition (Cooking)\n- Extend `bd cook` to accept `--with aspect1,aspect2`\n- Aspect application during mol generation\n- Local aspects in `.beads/formulas/`\n\n### Phase 2: Mall Index\n- Create gt-mall repo with index.yaml\n- `gt mol search` queries the index\n- `gt mol install` fetches and caches formulas\n\n### Phase 3: Publishing\n- `gt mol publish` pushes to your formula repo\n- PR workflow to add to mall index\n\n### Phase 4: Refinements\n- Aspect ordering and conflict detection\n- Aspect dependencies (`requires: [other-aspect]`)\n- Private formula repos (enterprise)\n- Local overrides/forks\n\n## Open Questions\n\n1. **Ordering conflicts**: Two aspects inject after same step—which goes first?\n2. **Aspect dependencies**: Aspect A requires aspect B?\n3. **Compile-time vs runtime**: Aspects are compile-time (baked into mol).\n Wisps remain runtime (slung dynamically).\n\n## Deferred Until\n\nGas Town patrols operational. Prerequisites:\n- [ ] Patrol system working (Deacon, Witness, Refinery)\n- [ ] Basic spawn/work/merge cycle\n- [ ] Activity feed showing work progress\n\nThen the mall becomes valuable for sharing patrol customizations.\n\n## Supersedes\n\nThis replaces gt-uzf2l which had the original marketplace concept but lacked\nthe aspect composition insight.\n\n## Related\n\n- Cooking system (bd cook)\n- Formula definitions (.formula.yaml)\n- Wisp architecture (runtime molecules)","notes":"See docs/formula_evolution.md for expanded thinking on: formula resolution hierarchy, combinators (\u003e\u003e, |, wrap, inject, extends), algebraic properties, higher abstractions, Mol Mall registry predictions, distribution scenarios, and open questions. The aspect composition in this design corresponds to the Wrapping (AOP) and Injection combinators in that doc.","status":"deferred","priority":2,"issue_type":"epic","created_at":"2025-12-26T00:33:44.380242-08:00","updated_at":"2025-12-26T00:36:57.3959-08:00"} +{"id":"gt-mpo6","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-24T23:31:09.318283-08:00","updated_at":"2025-12-25T01:26:28.782435-08:00","closed_at":"2025-12-25T01:26:28.782435-08:00"} {"id":"gt-mqbm","title":"Digest: mol-deacon-patrol","description":"Patrol: TRACER BULLET SUCCESS - gt-oiv0 merged to main, furiosa completed and exited cleanly, 0 polecats now, all agents up","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-22T23:13:30.087307-08:00","updated_at":"2025-12-27T21:26:05.441745-08:00","deleted_at":"2025-12-27T21:26:05.441745-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mqu65","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, no messages, no issues","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:13:57.610811-08:00","updated_at":"2025-12-27T21:26:03.601385-08:00","deleted_at":"2025-12-27T21:26:03.601385-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mquab","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy, routine cycle complete","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:51:57.921364-08:00","updated_at":"2025-12-27T21:26:03.454115-08:00","deleted_at":"2025-12-27T21:26:03.454115-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1359,6 +1359,7 @@ {"id":"gt-n8u5","title":"bd list --parent: filter by parent issue","description":"Add --parent flag to bd list to filter issues by parent.\n\nExample:\n```bash\nbd list --parent=gt-h5n --status=open\n```\n\nWould show all open children of gt-h5n.\n\nUseful for:\n- Checking epic progress\n- Finding swarmable work within an epic\n- Molecule step listing","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-23T01:50:56.224031-08:00","updated_at":"2025-12-27T21:29:56.233779-08:00","deleted_at":"2025-12-27T21:29:56.233779-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-n9o2","title":"save-state","description":"Update handoff bead with new state.\n\nPersist nudge counts and pending actions.\n\nNeeds: execute-actions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.507176-08:00","updated_at":"2025-12-25T15:52:57.676488-08:00","deleted_at":"2025-12-25T15:52:57.676488-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-na6o2","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no messages, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:58:44.4382-08:00","updated_at":"2025-12-24T23:58:44.4382-08:00","closed_at":"2025-12-24T23:58:44.438166-08:00"} +{"id":"gt-na7y","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:40:58.973379-08:00","updated_at":"2025-12-25T01:33:00.502546-08:00","closed_at":"2025-12-25T01:33:00.502546-08:00"} {"id":"gt-na7y.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-na7y\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:40:59.065447-08:00","updated_at":"2025-12-27T21:29:55.463886-08:00","deleted_at":"2025-12-27T21:29:55.463886-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-nahxr","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:26:45.974483-08:00","updated_at":"2025-12-25T07:26:45.974483-08:00","closed_at":"2025-12-25T07:26:45.974453-08:00"} {"id":"gt-nam3","title":"Update docs to reflect molecule-first paradigm","description":"Gas Town is fundamentally a molecule execution engine. Documentation should reflect this more clearly.\n\n## Issues Found\n\n### 1. gt spawn examples show molecule as optional\nREADME.md line 116: `gt spawn --issue \u003cid\u003e # Start polecat on issue`\nShould emphasize: polecats execute molecules, not just issues.\n\n### 2. Architecture.md spawn examples inconsistent\nLine 344 shows molecule: `gt spawn --issue gt-xyz --molecule mol-engineer-in-box`\nLine 1434 shows without: `gt spawn --issue \u003cid\u003e`\n\n### 3. Config vs molecule distinction not clear\noutposts.yaml shows static policy - should note when molecules apply.\n\n### 4. Operational molecules section is good but buried\nLines 430-566 cover operational molecules well. Should be more prominent.\n\n## Updates Needed\n- [ ] README: Update spawn examples to show molecule usage\n- [ ] architecture.md: Ensure all spawn examples include molecules\n- [ ] architecture.md: Add section on \"when config vs molecule\"\n- [ ] architecture.md: Move operational molecules higher in document\n- [ ] Add principle: \"If it requires cognition, it's a molecule\"\n- [ ] federation-design.md: Note that policy can escalate to mol-outpost-assign\n\n## Key Message\nGas Town doesn't spawn workers on issues. It spawns workers on molecules.\nThe issue is just the seed data for the molecule execution.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-20T03:26:31.842406-08:00","updated_at":"2025-12-27T21:29:53.781173-08:00","deleted_at":"2025-12-27T21:29:53.781173-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1377,7 +1378,6 @@ {"id":"gt-nho2","title":"Merge: gt-i4kq","description":"branch: polecat/slit\ntarget: main\nsource_issue: gt-i4kq\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T23:44:37.465886-08:00","updated_at":"2025-12-27T21:27:22.493339-08:00","deleted_at":"2025-12-27T21:27:22.493339-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-ni6a","title":"Witness role template + CLAUDE.md","description":"Create the Witness agent's role context:\n\n1. internal/templates/roles/witness.md.tmpl\n - Witness responsibilities (polecat lifecycle)\n - Core loop description\n - Commands available (gt polecats, bd ready, etc)\n - Escalation protocol\n\n2. Generate CLAUDE.md for witness/ directories\n - Context about the rig\n - Mail address: \u003crig\u003e/witness\n - Startup protocol (gt prime, check inbox)\n\nThe Witness is the per-rig 'pit boss' - NOT a global coordinator. It manages polecats for ONE rig only.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-20T03:14:18.617496-08:00","updated_at":"2025-12-27T21:29:53.831749-08:00","dependencies":[{"issue_id":"gt-ni6a","depends_on_id":"gt-53w6","type":"parent-child","created_at":"2025-12-20T03:14:37.105264-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.831749-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-nimml","title":"Digest: mol-deacon-patrol","description":"Patrol 8: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:35:05.066322-08:00","updated_at":"2025-12-27T21:26:00.381735-08:00","deleted_at":"2025-12-27T21:26:00.381735-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-nj3e5","title":"Digest: mol-deacon-patrol","description":"Patrol 5: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:04:44.720601-08:00","updated_at":"2025-12-27T23:04:44.720601-08:00","closed_at":"2025-12-27T23:04:44.720566-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-nj3e5","depends_on_id":"gt-eph-0j8","type":"parent-child","created_at":"2025-12-27T23:04:44.721409-08:00","created_by":"deacon"}]} {"id":"gt-njem","title":"Remove gt mail dependency on bd mail commands","description":"Replaced bd mail send/inbox/read/ack with bd create/list/show/close. Messages are now stored as beads issues with type=message.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-20T17:52:43.47722-08:00","updated_at":"2025-12-27T21:29:56.72792-08:00","deleted_at":"2025-12-27T21:29:56.72792-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-njr","title":"Engineer session restart protocol","description":"Implement session restart flow for when the Engineer needs to split work:\n\n1. Engineer creates subtask(s) in Beads assigned to self\n2. Engineer sends handoff mail to self (🤝 HANDOFF)\n3. Engineer sends restart request to Witness\n4. Witness verifies:\n - Handoff mail exists in Engineer outbox/sent\n - Subtasks filed in Beads\n5. Witness restarts the Refinery session (new Engineer context)\n\nThis enables \"occasionally consistent, eventually convergent\" work patterns.\nThe Refinery continues; the Engineer gets fresh context.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T23:02:48.22994-08:00","updated_at":"2025-12-27T21:29:54.402848-08:00","dependencies":[{"issue_id":"gt-njr","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:56.148564-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.402848-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-nk7i","title":"Digest: mol-deacon-patrol","description":"Patrol 13: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:00:14.154408-08:00","updated_at":"2025-12-27T21:26:04.919231-08:00","deleted_at":"2025-12-27T21:26:04.919231-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1393,7 +1393,6 @@ {"id":"gt-nrer7","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Quick cycle, all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:09:00.383617-08:00","updated_at":"2025-12-27T21:26:02.942517-08:00","deleted_at":"2025-12-27T21:26:02.942517-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-nriy","title":"Test: Alpha to Beta","description":"Sibling communication test","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T21:44:00.731578-08:00","updated_at":"2025-12-25T14:12:42.250457-08:00","deleted_at":"2025-12-25T14:12:42.250457-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} {"id":"gt-nrz6g","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:48:55.937269-08:00","updated_at":"2025-12-25T16:48:55.937269-08:00","closed_at":"2025-12-25T16:48:55.937235-08:00"} -{"id":"gt-nspx5","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:45:40.304368-08:00","updated_at":"2025-12-25T10:45:40.304368-08:00","closed_at":"2025-12-25T10:45:40.304312-08:00"} {"id":"gt-nsyy","title":"Merge: gt-h6eq.7","description":"branch: polecat/dag\ntarget: main\nsource_issue: gt-h6eq.7\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:42:39.260767-08:00","updated_at":"2025-12-27T21:27:22.853057-08:00","deleted_at":"2025-12-27T21:27:22.853057-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-nti8","title":"Polecats should not push branches to remote","description":"## Current Behavior\n\nPolecats push their branches to origin (e.g., `polecat/furiosa`), which pollutes the remote with many short-lived branches.\n\n## Desired Behavior\n\nPolecats should only commit locally. The Refinery handles all remote pushes:\n1. Polecat works on local `polecat/\u003cname\u003e` branch\n2. Polecat signals done (state → idle)\n3. Refinery pulls from local polecat branch\n4. Refinery runs tests, merges to main\n5. Refinery pushes main to remote\n6. If PR review needed, Refinery creates the PR\n\n## Benefits\n\n- Clean remote (no branch pollution)\n- Clear responsibility (Refinery is the quality gate)\n- Simpler cleanup (local branches deleted with worktree)\n- Less noise in GitHub UI\n\n## Trade-offs\n\n- If polecat crashes before Refinery merges, code is lost locally\n- But beads issue remains open, another polecat can redo the work\n- This is acceptable for ephemeral workers\n\n## Implementation\n\nIn polecat CLAUDE.md or landing protocol:\n- Remove `git push origin HEAD` from workflow\n- Replace with just `git commit` + signal done\n- Refinery handles the rest","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-21T14:13:48.804954-08:00","updated_at":"2025-12-27T21:29:56.619965-08:00","deleted_at":"2025-12-27T21:29:56.619965-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-nvql","title":"max Handoff","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T11:47:59.020501-08:00","updated_at":"2025-12-27T21:29:56.04343-08:00","deleted_at":"2025-12-27T21:29:56.04343-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1406,7 +1405,6 @@ {"id":"gt-o2wgw","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:38.841389-08:00","updated_at":"2025-12-27T21:26:02.060659-08:00","deleted_at":"2025-12-27T21:26:02.060659-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-o3is","title":"gt sling pinToHook doesn't set pinned boolean field","description":"## Updated Root Cause Analysis (2025-12-23)\n\nThe issue is **NOT** in gt as originally thought. It's in the beads (bd) codebase.\n\n### What happens:\n1. `bd pin` correctly sets pinned=1 in SQLite\n2. Any subsequent `bd` command (even `bd show`) resets pinned to 0\n3. This happens even with `--no-auto-import` and `--sandbox` flags\n\n### Evidence:\n```bash\n$ bd --no-daemon pin gt-k08o --for=max\n📌 Pinned gt-k08o to max's hook\n\n$ sqlite3 beads.db 'SELECT id, pinned FROM issues WHERE id=\"gt-k08o\"'\ngt-k08o|1 # ← Correct immediately after pin\n\n$ bd --no-daemon --no-auto-import show gt-k08o\n[shows issue without pinned field]\n\n$ sqlite3 beads.db 'SELECT id, pinned FROM issues WHERE id=\"gt-k08o\"' \ngt-k08o|0 # ← WRONG\\! bd show overwrote it\n```\n\n### Where to look:\nThe bug is likely in one of these beads code paths:\n- Some import/hydration running despite --no-auto-import\n- WAL mode not flushing before subsequent reads\n- Multi-repo or redirect handling corrupting pinned field\n\n### Workaround:\nThe handoff bead attachment mechanism (AttachMolecule) works correctly.\nThe pinned field is cosmetic for `bd hook` visibility only.\ngt sling correctly uses AttachMolecule for work assignment.\n\n### Next steps:\nCreate a beads issue to fix this properly in the bd codebase.\nThis is not a gt issue.","notes":"Created beads bug: bd-phtv in ~/gt/beads","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-23T04:41:12.668958-08:00","updated_at":"2025-12-27T21:29:53.040476-08:00","deleted_at":"2025-12-27T21:29:53.040476-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-o40t","title":"gt sling --force: return displaced work to ready pool","description":"When slinging with --force to an agent with occupied hook, the displaced molecule should be returned to the ready pool rather than silently orphaned.\n\nCurrent behavior:\n- --force overwrites the hook attachment\n- Previous work becomes orphaned (still assigned but not pinned)\n\nDesired behavior:\n1. Unpin the displaced molecule (clear assignee, set pinned=false)\n2. Print warning in tool output: 'Warning: displaced gt-xxx back to ready pool'\n3. Proceed with new sling\n\nThis ensures:\n- No silent data loss\n- Agent sees the warning and can act on it\n- Human caller sees what happened\n- Displaced work is discoverable via 'bd ready'\n\nImplementation location: checkHookCollision() or the sling handlers themselves (after the --force check passes)","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T16:00:23.713733-08:00","updated_at":"2025-12-27T21:29:55.968712-08:00","deleted_at":"2025-12-27T21:29:55.968712-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-o4q9k","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:59:43.879252-08:00","updated_at":"2025-12-26T13:59:43.879252-08:00","closed_at":"2025-12-26T13:59:43.879209-08:00"} {"id":"gt-o5ae","title":"implement","description":"Implement the solution for gt-1wmw. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:54:21.060148-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","dependencies":[{"issue_id":"gt-o5ae","depends_on_id":"gt-wx0w","type":"parent-child","created_at":"2025-12-24T22:54:21.077776-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-o5ra","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no lifecycle requests, 8 active sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:54:13.477737-08:00","updated_at":"2025-12-27T21:26:05.013415-08:00","deleted_at":"2025-12-27T21:26:05.013415-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-o75l","title":"Merge: gt-h6eq.3","description":"branch: polecat/keeper\ntarget: main\nsource_issue: gt-h6eq.3\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:49:58.84455-08:00","updated_at":"2025-12-27T21:27:22.828169-08:00","deleted_at":"2025-12-27T21:27:22.828169-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -1414,7 +1412,9 @@ {"id":"gt-o975j","title":"Digest: mol-deacon-patrol","description":"Patrol 17: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:36:27.195688-08:00","updated_at":"2025-12-27T21:26:00.718894-08:00","deleted_at":"2025-12-27T21:26:00.718894-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-o9osx","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:47:16.478644-08:00","updated_at":"2025-12-27T21:26:03.470488-08:00","deleted_at":"2025-12-27T21:26:03.470488-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-oahqo","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:36.911655-08:00","updated_at":"2025-12-25T11:05:36.911655-08:00","closed_at":"2025-12-25T11:05:36.911619-08:00"} -{"id":"gt-ob0t","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T12:46:15.328647-08:00","updated_at":"2025-12-25T01:33:00.697734-08:00","closed_at":"2025-12-25T01:33:00.697734-08:00"} +{"id":"gt-ob0t","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T12:46:15.328647-08:00","updated_at":"2025-12-27T23:44:54.660334-08:00","closed_at":"2025-12-27T23:44:54.660338-08:00"} +{"id":"gt-ob0t.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T12:46:15.421667-08:00","updated_at":"2025-12-25T01:33:00.68133-08:00","closed_at":"2025-12-25T01:33:00.68133-08:00","dependencies":[{"issue_id":"gt-ob0t.1","depends_on_id":"gt-ob0t","type":"parent-child","created_at":"2025-12-24T12:46:15.422135-08:00","created_by":"daemon"}]} +{"id":"gt-obk26","title":"Digest: mol-deacon-patrol","description":"Patrol 15","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T20:05:13.051681-08:00","updated_at":"2025-12-26T20:05:13.051681-08:00","closed_at":"2025-12-26T20:05:13.051633-08:00"} {"id":"gt-obxz","title":"Digest: mol-deacon-patrol","description":"Patrol #9","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:23:37.705161-08:00","updated_at":"2025-12-27T21:26:04.759434-08:00","deleted_at":"2025-12-27T21:26:04.759434-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-oc2","title":"Daemon: proper rig discovery","description":"Currently discovers rigs by scanning tmux session names for gt-*-witness pattern. Should instead:\n- Read rigs from mayor/rigs.json\n- Or scan town directory for .gastown subdirs\n- Handle rigs that exist but don't have running witnesses","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-18T13:38:15.825299-08:00","updated_at":"2025-12-27T21:29:57.184842-08:00","dependencies":[{"issue_id":"gt-oc2","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T13:38:26.826697-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.184842-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-occdx","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:43:56.478866-08:00","updated_at":"2025-12-27T21:26:02.896845-08:00","deleted_at":"2025-12-27T21:26:02.896845-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1470,13 +1470,11 @@ {"id":"gt-phdci","title":"Digest: mol-deacon-patrol","description":"Patrol 11: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:42:51.250066-08:00","updated_at":"2025-12-26T18:42:51.250066-08:00","closed_at":"2025-12-26T18:42:51.250024-08:00"} {"id":"gt-pia6","title":"Merge: gt-h6eq.4","description":"branch: polecat/valkyrie\ntarget: main\nsource_issue: gt-h6eq.4\nrig: gastown","status":"tombstone","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T12:13:07.092756-08:00","updated_at":"2025-12-27T21:27:22.989131-08:00","deleted_at":"2025-12-27T21:27:22.989131-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-pio","title":"Plugin: merge-oracle (merge queue analysis)","description":"Example plugin that analyzes changesets before Refinery processes them. Builds overlap graph, classifies disjointness (parallel-safe vs needs-sequencing), uses LLM for semantic complexity, identifies high-risk patterns. Based on merge-orchestration proposal. See docs/architecture.md.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-15T22:53:04.027073-08:00","updated_at":"2025-12-15T23:17:06.507108-08:00","dependencies":[{"issue_id":"gt-pio","depends_on_id":"gt-axz","type":"blocks","created_at":"2025-12-15T22:53:17.507459-08:00","created_by":"daemon"}]} -{"id":"gt-piy9c","title":"Digest: mol-deacon-patrol","description":"Patrol 9","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:51:02.414152-08:00","updated_at":"2025-12-25T20:51:02.414152-08:00","closed_at":"2025-12-25T20:51:02.414093-08:00"} {"id":"gt-pj222","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All agents healthy, no messages, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:26:34.954324-08:00","updated_at":"2025-12-27T21:26:02.934026-08:00","deleted_at":"2025-12-27T21:26:02.934026-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-plcg","title":"Add --account flag to gt spawn and gt crew attach","description":"Add --account=\u003chandle\u003e flag. Precedence: GT_ACCOUNT env \u003e --account flag \u003e default from config.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:23.832188-08:00","updated_at":"2025-12-27T21:29:56.15928-08:00","dependencies":[{"issue_id":"gt-plcg","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:34.984336-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.15928-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-pln0","title":"Digest: mol-deacon-patrol","description":"Patrol 6: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:57:32.057118-08:00","updated_at":"2025-12-27T21:26:04.977001-08:00","deleted_at":"2025-12-27T21:26:04.977001-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-pm5rs","title":"Digest: mol-deacon-patrol","description":"Patrol 3: nux exited (wrong-rig escalation), 11 sessions, all core healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:09:23.555634-08:00","updated_at":"2025-12-27T21:26:02.318996-08:00","deleted_at":"2025-12-27T21:26:02.318996-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-pmef","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:04:44.376339-08:00","updated_at":"2025-12-27T23:11:03.996247-08:00","closed_at":"2025-12-27T23:11:03.996252-08:00","deleted_at":"2025-12-27T21:29:55.712339-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-pmef.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:04:44.468753-08:00","updated_at":"2025-12-25T01:33:01.061399-08:00","closed_at":"2025-12-25T01:33:01.061399-08:00","dependencies":[{"issue_id":"gt-pmef.1","depends_on_id":"gt-pmef","type":"parent-child","created_at":"2025-12-23T22:04:44.469169-08:00","created_by":"daemon"}]} +{"id":"gt-pmef","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:04:44.376339-08:00","updated_at":"2025-12-27T23:55:34.492482-08:00","closed_at":"2025-12-27T23:55:34.492486-08:00","deleted_at":"2025-12-27T21:29:55.712339-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-pnch9","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:29:48.868198-08:00","updated_at":"2025-12-25T07:29:48.868198-08:00","closed_at":"2025-12-25T07:29:48.868161-08:00"} {"id":"gt-pnu4","title":"Test","description":"Body","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T21:38:39.019559-08:00","updated_at":"2025-12-25T14:12:42.272191-08:00","deleted_at":"2025-12-25T14:12:42.272191-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} {"id":"gt-pnurj","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Green - routine cycle complete, handing off","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:36:47.596964-08:00","updated_at":"2025-12-27T21:26:02.474719-08:00","deleted_at":"2025-12-27T21:26:02.474719-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1516,18 +1514,19 @@ {"id":"gt-qcvqx","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:28.120992-08:00","updated_at":"2025-12-27T21:26:02.155407-08:00","deleted_at":"2025-12-27T21:26:02.155407-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qdnmm","title":"Digest: mol-deacon-patrol","description":"Patrol 9: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:43:53.751357-08:00","updated_at":"2025-12-27T21:26:03.214415-08:00","deleted_at":"2025-12-27T21:26:03.214415-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qe9w","title":"Simplify and reorganize molecular chemistry docs","description":"The Gas Town molecular chemistry docs (molecules.md, molecular-chemistry.md, molecule-algebra.md) are too dramatic and verbose. They need a simplification pass to be more reference-manual style.\n\n**Current problems:**\n1. Too much metaphor and philosophy, not enough practical reference\n2. Start with the chemistry abstraction instead of what users care about (patrols, workflows)\n3. Layer cake is presented top-down (formulas → protos → molecules) instead of bottom-up (issues → dependencies → execution)\n\n**Proposed structure (inverted pyramid):**\n\n1. **Start with execution semantics:**\n - Work = issues with dependencies\n - Dependencies control execution (blocks = sequential, no dep = parallel)\n - Agents traverse dependency graphs until blocked\n - Multi-day workflows via compound bonding\n\n2. **Move to molecules:**\n - Molecules are just epics with workflow intent\n - Bonding = creating dependencies between work graphs\n - No protos required for ad-hoc workflows\n\n3. **Then templates (protos/wisps):**\n - Phase metaphor for storage locations\n - pour/wisp/squash/burn operations\n - When to use each phase\n\n4. **Finally formulas (for advanced users):**\n - YAML compile-time composition\n - extends, compose, aspects\n - Only needed for complex reusable patterns\n\n**Style guidelines:**\n- Reference manual with quick examples\n- Written like agent priming (context they need to execute)\n- Less dramatic, more straightforward\n- TL;DR at top of each doc\n\n**See also:**\n- beads/docs/MOLECULES.md has a simplified version to use as template\n- The execution model section explains multi-day traversal clearly","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T19:51:42.43826-08:00","updated_at":"2025-12-24T19:51:42.43826-08:00","dependencies":[{"issue_id":"gt-qe9w","depends_on_id":"gt-e0qj2","type":"blocks","created_at":"2025-12-26T23:21:29.277397-08:00","created_by":"daemon"}]} -{"id":"gt-qflq","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\n## The Christmas Ornament Shape\n\nThis molecule uses dynamic bonding to create inspection arms per-polecat:\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌─────┘ │ └─────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n ┌───┴───┐ ┌─┴─┐ ┌───┴───┐\n │inbox │ │sur│ │aggreg │\n │refnry │ │vey│ │save │\n │load │ └─┬─┘ │summary│\n └───────┘ │ │contxt │\n │ │loop │\n ┌─────────┼─────────┐ └───────┘\n │ │ │\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n │ │ │\n ┌──┴──┐ ┌──┴──┐ ┌──┴──┐\n │cap │ │cap │ │cap │\n │ass │ │ass │ │ass │\n │dec │ │dec │ │dec │\n │exec │ │exec │ │exec │\n └──┬──┘ └──┬──┘ └──┬──┘\n │ │ │\n └─────────┴─────────┘\n │\n ⬣ base (cleanup)\n```\n\n## Phases\n\n### PREFLIGHT (fixed steps)\n1. inbox-check - Process lifecycle requests, help messages\n2. check-refinery - Ensure MQ is alive and processing\n3. load-state - Read persistent state (nudge counts, etc.)\n\n### DISCOVERY (spawns dynamic arms)\n4. survey-workers - List polecats, bond mol-polecat-arm per polecat\n5. run-plugins - Bond mol-plugin-runner for each witness plugin\n\n### CLEANUP (gate + fixed steps)\n6. aggregate - GATE: WaitsFor all arms + plugins to complete\n7. save-state - Persist nudge counts, action log\n8. generate-summary - Create digest content\n9. context-check - Check if context is high\n10. burn-or-loop - Squash/burn wisp, then loop or exit\n\n## Dynamic Arms\n\nEach polecat gets mol-polecat-arm bonded as a wisp child:\n- capture - Capture tmux output\n- assess - Categorize state (working/idle/error/done)\n- load-history - Get nudge counts for this polecat\n- decide - Apply nudge matrix\n- execute - Take action (nudge/kill/escalate/none)\n\nArms run in PARALLEL. The aggregate step waits for all to complete.\n\n## Activity Feed\n\nThis design enables real-time visibility:\n\n```\n[14:32:08] + patrol-x7k.arm-ace bonded (5 steps)\n[14:32:09] → patrol-x7k.arm-ace.capture in_progress\n[14:32:10] ✓ patrol-x7k.arm-ace.capture completed\n[14:32:14] ✓ patrol-x7k.arm-ace.decide completed (action: nudge-1)\n[14:32:17] ✓ patrol-x7k.arm-ace COMPLETE\n```\n\n## Storage\n\n- Wisp storage: .beads-wisp/ (ephemeral, gitignored)\n- Persistent state: witness handoff bead (nudge counts, etc.)\n- Digests: Squashed summaries in permanent beads\n\n## Dependencies\n\n- bd-xo1o: Dynamic Molecule Bonding epic (in beads rig)\n - bd mol bond with variable substitution\n - WaitsFor directive for fanout gates\n - Activity feed query\n\nLabels: [template, christmas-ornament]","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-23T01:39:31.895817-08:00","updated_at":"2025-12-25T11:44:16.881599-08:00","deleted_at":"2025-12-25T11:44:16.881599-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-qgbe","title":"Digest: mol-deacon-patrol","description":"Patrol 3: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:55:49.186887-08:00","updated_at":"2025-12-27T21:26:05.005406-08:00","deleted_at":"2025-12-27T21:26:05.005406-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qh2","title":"Session cycling UX: smooth transitions via TUI wrapper","description":"## Problem\n\nCurrent CLI agent session cycling is painful:\n- Shell → CC starts → priming → context loads → ready → work → exit/crash → repeat\n- Each cycle is 30-60 seconds of cold boot\n- No continuity between shell and agent's inner state\n- Raw \"session not running, starting...\" loop is the baseline\n\n## GGT Advantages (already have)\n\n- Beads: Work state survives session death completely\n- Mail: Handoff notes from past-self to future-self \n- Prime commands: Structured context reload\n\n## Gap: Transition Mechanics\n\nIdeas to explore when actively using CLI:\n\n1. **In-band cycling** - `/restart` or `/cycle` command, agent handles own restart without dropping to shell\n\n2. **Hot standby** - TUI maintains pre-warmed session in background, switch to already-primed agent\n\n3. **Persistent wrapper** - Bubbletea TUI stays running across session cycles, CC sessions come/go inside it\n\n4. **Session pooling** - Keep 2-3 primed sessions ready, never wait for cold start\n\n## Deferred\n\nDeliberately P4 until we're actively using the simpler CLI and feel the pain firsthand.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-15T20:38:12.660716-08:00","updated_at":"2025-12-15T23:17:34.27061-08:00"} {"id":"gt-qi6ij","title":"Digest: mol-deacon-patrol","description":"Patrol 8: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:41:10.784398-08:00","updated_at":"2025-12-26T18:41:10.784398-08:00","closed_at":"2025-12-26T18:41:10.784359-08:00"} {"id":"gt-qivm","title":"gt crew at: auto-prime when exec'ing Claude in-session","description":"When running 'gt crew at \u003cname\u003e' from inside the target session, we exec Claude directly. But this means we can't send 'gt prime' afterward since we ARE the process.\n\nPossible solutions:\n1. Claude startup hook that runs gt prime\n2. Pass prompt as argument to claude CLI\n3. Wrapper script approach\n\nRelated: crew resume prompt also can't be sent in this path.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T15:13:38.035775-08:00","updated_at":"2025-12-27T21:29:56.975825-08:00","deleted_at":"2025-12-27T21:29:56.975825-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qj12","title":"Obsolete beads issues need cleanup","description":"Found obsolete issues that should be closed or fixed:\n\nTest artifacts to close:\n- gt-nriy: Test: Alpha to Beta (message test)\n- gt-gswn: Integration test (test artifact)\n- gt-54kn: Test: New Router\n\nBroken dependencies (reference non-existent gt-test123):\n- gt-vhby: implement\n- gt-tvos: load-context\n- gt-lwuu.2: implement (template variable unresolved)\n\nCloudRun references (non-existent /deploy/cloudrun/):\n- gt-9a2.6, gt-9a2.7, gt-9a2.11\n\nReview and close/update these before launch.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T12:50:57.843146-08:00","updated_at":"2025-12-27T21:29:55.561682-08:00","dependencies":[{"issue_id":"gt-qj12","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.394519-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.561682-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-qkoah","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:54:19.67205-08:00","updated_at":"2025-12-25T13:54:19.67205-08:00","closed_at":"2025-12-25T13:54:19.67202-08:00"} {"id":"gt-qn4l","title":"bd create should support molecule type","description":"gt molecule commands expect type=molecule but bd validates against bug|feature|task|epic|chore|merge-request only","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-19T18:25:31.591953-08:00","updated_at":"2025-12-27T21:29:56.932709-08:00","deleted_at":"2025-12-27T21:29:56.932709-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-qn5rg","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:57:05.118801-08:00","updated_at":"2025-12-27T21:26:01.770399-08:00","deleted_at":"2025-12-27T21:26:01.770399-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qna4","title":"gt done: Missing command referenced in polecat docs","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-20T01:10:57.495372-08:00","updated_at":"2025-12-27T21:29:53.856677-08:00","deleted_at":"2025-12-27T21:29:53.856677-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-qns0","title":"TIDY UP: Your previous work (patrol runner) was already m...","description":"TIDY UP: Your previous work (patrol runner) was already merged to main. Check your git status is clean, sync beads, and if nothing to do, just run 'gt done'.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T17:26:39.343497-08:00","updated_at":"2025-12-27T21:29:56.512587-08:00","deleted_at":"2025-12-27T21:29:56.512587-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qnt78","title":"Daemon sending heartbeat to Mayor - should not","description":"Daemon appears to be sending heartbeat messages to Mayor, but Mayor should not receive heartbeats. Observed at least once or twice - needs investigation to confirm and fix.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-26T17:39:55.247942-08:00","updated_at":"2025-12-27T21:29:54.774741-08:00","deleted_at":"2025-12-27T21:29:54.774741-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-qobkl","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T18:18:57.096949-08:00","updated_at":"2025-12-27T21:26:02.838451-08:00","deleted_at":"2025-12-27T21:26:02.838451-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-qp2w","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\n## The Christmas Ornament Shape\n\nThis molecule uses dynamic bonding to create inspection arms per-polecat:\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌─────┘ │ └─────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n ┌───┴───┐ ┌─┴─┐ ┌───┴───┐\n │inbox │ │sur│ │aggreg │\n │refnry │ │vey│ │save │\n │load │ └─┬─┘ │summary│\n └───────┘ │ │contxt │\n │ │loop │\n ┌─────────┼─────────┐ └───────┘\n │ │ │\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n │ │ │\n ┌──┴──┐ ┌──┴──┐ ┌──┴──┐\n │cap │ │cap │ │cap │\n │ass │ │ass │ │ass │\n │dec │ │dec │ │dec │\n │exec │ │exec │ │exec │\n └──┬──┘ └──┬──┘ └──┬──┘\n │ │ │\n └─────────┴─────────┘\n │\n ⬣ base (cleanup)\n```\n\n## Phases\n\n### PREFLIGHT (fixed steps)\n1. inbox-check - Process lifecycle requests, help messages\n2. check-refinery - Ensure MQ is alive and processing\n3. load-state - Read persistent state (nudge counts, etc.)\n\n### DISCOVERY (spawns dynamic arms)\n4. survey-workers - List polecats, bond mol-polecat-arm per polecat\n5. run-plugins - Bond mol-plugin-runner for each witness plugin\n\n### CLEANUP (gate + fixed steps)\n6. aggregate - GATE: WaitsFor all arms + plugins to complete\n7. save-state - Persist nudge counts, action log\n8. generate-summary - Create digest content\n9. context-check - Check if context is high\n10. burn-or-loop - Squash/burn wisp, then loop or exit\n\n## Dynamic Arms\n\nEach polecat gets mol-polecat-arm bonded as a wisp child:\n- capture - Capture tmux output\n- assess - Categorize state (working/idle/error/done)\n- load-history - Get nudge counts for this polecat\n- decide - Apply nudge matrix\n- execute - Take action (nudge/kill/escalate/none)\n\nArms run in PARALLEL. The aggregate step waits for all to complete.\n\n## Activity Feed\n\nThis design enables real-time visibility:\n\n```\n[14:32:08] + patrol-x7k.arm-ace bonded (5 steps)\n[14:32:09] → patrol-x7k.arm-ace.capture in_progress\n[14:32:10] ✓ patrol-x7k.arm-ace.capture completed\n[14:32:14] ✓ patrol-x7k.arm-ace.decide completed (action: nudge-1)\n[14:32:17] ✓ patrol-x7k.arm-ace COMPLETE\n```\n\n## Storage\n\n- Wisp storage: .beads-wisp/ (ephemeral, gitignored)\n- Persistent state: witness handoff bead (nudge counts, etc.)\n- Digests: Squashed summaries in permanent beads\n\n## Dependencies\n\n- bd-xo1o: Dynamic Molecule Bonding epic (in beads rig)\n - bd mol bond with variable substitution\n - WaitsFor directive for fanout gates\n - Activity feed query\n\nLabels: [template, christmas-ornament]","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-23T16:18:21.59836-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-qp98","title":"Refactor: Eliminate state.json, use beads assignee field for polecat state","description":"## Problem\n\nstate.json in each polecat worktree duplicates data that should be in beads:\n- `issue` field duplicates assignment (should be issue.assignee)\n- `state` field duplicates status (derivable from issue.status)\n- `name/rig/branch/clone_path` are all derivable from filesystem/git\n\nThis violates 'Beads as the data plane' (HOP Decision 001).\n\n## Current State\n\n```json\n{\n \"name\": \"Angharad\", // Derivable: basename(cwd)\n \"rig\": \"gastown\", // Derivable: parent dir name\n \"state\": \"working\", // Should be: issue.status\n \"clone_path\": \"/path\", // Derivable: cwd\n \"branch\": \"polecat/X\", // Derivable: git branch\n \"issue\": \"gt-xyz\", // Should be: issue.assignee\n \"timestamps\": \"...\" // Should be in beads history\n}\n```\n\n## Target State\n\n**Polecat identity**: Derived from worktree path\n**Polecat assignment**: `issue.assignee = 'gastown/Angharad'`\n**Polecat state**: Derived from issue.status (in_progress = working, closed = done)\n**Polecat existence**: Worktree directory exists\n\n## Benefits\n\n1. Single source of truth (no sync issues)\n2. Queryable: `bd list --assignee=gastown/Angharad`\n3. History tracking via beads\n4. Cross-agent coordination via beads sync\n5. Simpler code (no state file management)\n\n## Implementation\n\n1. Update `gt spawn` to set issue.assignee instead of writing state.json\n2. Update polecat list/status commands to query beads\n3. Update Witness to query beads for polecat state\n4. Remove state.json read/write code\n5. Keep state.json as optional bootstrap cache (perf optimization only)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-19T11:40:33.389689-08:00","updated_at":"2025-12-27T21:29:54.050126-08:00","deleted_at":"2025-12-27T21:29:54.050126-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qpoxz","title":"Day 3.1: Wire witness patrol formula to daemon cron","description":"Witness patrol molecule runs on schedule:\n- Daemon pokes witness on cron interval\n- Witness runs mol-witness-patrol steps\n- Results in wisp (ephemeral), squashed later\n\nParent: gt-hwka3","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:02.445409-08:00","created_by":"mayor","updated_at":"2025-12-27T20:58:02.445409-08:00","dependencies":[{"issue_id":"gt-qpoxz","depends_on_id":"gt-hwka3","type":"parent-child","created_at":"2025-12-27T20:58:45.809196-08:00","created_by":"daemon"},{"issue_id":"gt-qpoxz","depends_on_id":"gt-lisj6","type":"blocks","created_at":"2025-12-27T21:00:46.96662-08:00","created_by":"daemon"},{"issue_id":"gt-qpoxz","depends_on_id":"gt-k294l","type":"blocks","created_at":"2025-12-27T23:17:28.18659-08:00","created_by":"daemon"}]} {"id":"gt-qpwv4","title":"Witness: detect polecat completion and trigger merge","description":"## Problem\nWhen polecat pushes completed work, witness needs to detect it and signal refinery.\n\n## ZFC-Compliant Solution\nAdd step to `mol-witness-patrol.formula.toml`:\n\n```toml\n[[step]]\nid = \"check-ready-branches\"\ntitle = \"Check for branches ready to merge\"\ndescription = \"\"\"\n1. List polecat branches: git branch -r | grep origin/polecat/\n2. For each branch ahead of main:\n - Check if polecat session is done (no session or at handoff prompt)\n - Check if bead is closed: bd show \u003cbead-id\u003e\n3. For ready branches, mail refinery:\n gt mail send \u003crig\u003e/refinery -s \"MERGE_READY: polecat/\u003cname\u003e\" -m \"Branch ready for merge\"\n\"\"\"\ndepends_on = [\"survey-polecats\"]\n```\n\n## Alternative: Polecat signals explicitly\nAdd to polecat workflow (end of work):\n```\ngt mail send \u003crig\u003e/refinery -s \"MERGE_READY\" -m \"polecat/\u003cname\u003e ready\"\ngt mail send \u003crig\u003e/witness -s \"WORK_COMPLETE\" -m \"\u003cbead-id\u003e done\"\n```\n\n## Why This Works\n- Witness/polecat agents make decisions\n- Mail is the coordination primitive\n- No daemon code needed\n\n## Files\n- formulas/mol-witness-patrol.formula.toml\n- formulas/mol-polecat-work.formula.toml (add completion signal)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-27T16:41:04.857442-08:00","created_by":"mayor","updated_at":"2025-12-27T21:29:45.756607-08:00","close_reason":"Subsumed by gt-u6siy (Day 3.3: Witness sends MERGE_READY to refinery)","dependencies":[{"issue_id":"gt-qpwv4","depends_on_id":"gt-u6siy","type":"relates-to","created_at":"2025-12-27T20:59:10.634142-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.756607-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1595,7 +1594,6 @@ {"id":"gt-rivr","title":"Activity Feed TUI","description":"Terminal UI for browsing Gas Town activity. Shows hierarchical view of rigs, workers, and their current state. Features: live updates, expandable details, molecule progress (step X of Y). Built with bubbletea/lipgloss. Design doc: history/activity-feed-tui-design.md","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-23T16:26:45.667677-08:00","updated_at":"2025-12-27T21:29:52.948339-08:00","deleted_at":"2025-12-27T21:29:52.948339-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-rixa","title":"Bug: parseLifecycleRequest always matches 'cycle' due to LIFECYCLE prefix","description":"In lifecycle.go, parseLifecycleRequest checks strings.Contains(title, \"cycle\") first, but the prefix \"LIFECYCLE:\" contains the word \"cycle\". This means ALL lifecycle messages match the cycle action, making restart and shutdown unreachable. Fix: check for restart/shutdown before cycle, or use word boundaries.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-19T16:17:16.083512-08:00","updated_at":"2025-12-27T21:29:56.958825-08:00","deleted_at":"2025-12-27T21:29:56.958825-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-rm3","title":"CLI: gt refinery commands (start, stop, status, queue)","description":"CLI commands for managing the Refinery agent.\n\n## Commands\n\n```bash\ngt refinery start \u003crig\u003e # Start refinery for a rig\ngt refinery stop \u003crig\u003e # Stop refinery\ngt refinery status \u003crig\u003e # Show refinery status\ngt refinery queue \u003crig\u003e # Show merge queue\n```\n\n## gt refinery start\n\nStarts the Refinery daemon for the specified rig.\n\nOptions:\n- --foreground: Run in foreground (default: background)\n- --auto-merge: Enable auto-merge (default: from config)\n\n## gt refinery stop\n\nStops a running Refinery. Gracefully finishes current MR if processing.\n\n## gt refinery status\n\nShows:\n- Running state (running/stopped)\n- Current MR being processed (if any)\n- Queue length\n- Last merge time\n- Recent activity\n\n## gt refinery queue\n\nShows the merge queue:\n```\nMerge queue for 'wyvern':\n 1. [pending] Toast/polecat-auth-fix (15m ago)\n 2. [pending] Capable/polecat-new-feature (5m ago)\n \n1 merged today, 0 rejected\n```\n\n## Implementation\n\nUses gt-ov2 (Refinery agent) for daemon functionality.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-15T23:22:24.754361-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-rm3","depends_on_id":"gt-ov2","type":"blocks","created_at":"2025-12-15T23:22:30.679909-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} -{"id":"gt-rnkmb","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:19:47.683001-08:00","updated_at":"2025-12-26T17:19:47.683001-08:00","closed_at":"2025-12-26T17:19:47.682962-08:00"} {"id":"gt-ro5hc","title":"Digest: mol-deacon-patrol","description":"Patrol 20: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:02:56.374874-08:00","updated_at":"2025-12-27T21:26:00.448545-08:00","deleted_at":"2025-12-27T21:26:00.448545-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ronyn","title":"CRITICAL: gt doctor orphan-processes kills active crew sessions","description":"## Problem\n\nThe deacon's patrol runs `gt doctor --fix` which includes an orphan-processes check. This check is incorrectly identifying ACTIVE crew sessions as orphaned and killing them.\n\n## Impact\n\n- Crew workers are being killed mid-session\n- Work is lost\n- The deacon is currently disabled until this is fixed\n\n## Root Cause\n\nThe orphan-processes detection logic in `internal/doctor/` doesn't properly identify crew workers. It likely:\n1. Doesn't recognize the `gt-\u003crig\u003e-\u003cname\u003e` session pattern for crew\n2. Or misidentifies the Claude process as orphaned when it has a valid tmux parent\n\n## Workaround\n\nThe patrol formula was updated to instruct deacon not to run `--fix` if orphan-processes reports any PIDs. But this workaround failed - the deacon still killed crew.\n\n## Fix Required\n\n1. Update `internal/doctor/identity_check.go` or `branch_check.go` to properly detect crew sessions\n2. Add crew session patterns to the valid session detection\n3. Add test coverage for crew worker scenarios\n\n## Files\n\n- internal/doctor/identity_check.go\n- internal/doctor/branch_check.go \n- internal/cmd/doctor.go\n\n## Related\n\n- Commit 3452b041 attempted to fix via formula instructions but failed\n- The digest hq-yedg claimed to file gt-vj5zc but never did","status":"tombstone","priority":1,"issue_type":"bug","assignee":"gastown/crew/joe","created_at":"2025-12-27T00:14:05.870126-08:00","created_by":"deacon","updated_at":"2025-12-27T21:29:45.789954-08:00","close_reason":"Fixed in 1c7346b","deleted_at":"2025-12-27T21:29:45.789954-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-rp0f4","title":"Digest: mol-deacon-patrol","description":"Patrol 6: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:04:58.835959-08:00","updated_at":"2025-12-25T11:04:58.835959-08:00","closed_at":"2025-12-25T11:04:58.835926-08:00"} @@ -1603,7 +1601,6 @@ {"id":"gt-rpsu2","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:31:06.415769-08:00","updated_at":"2025-12-27T21:26:03.903011-08:00","deleted_at":"2025-12-27T21:26:03.903011-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rr1i","title":"mol-swarm-cleanup: Post-swarm debris cleanup molecule","description":"After a 20+ worker swarm completed, found significant beads debris:\n- 18 stale messages (work assignments, lifecycle requests, swarm instructions)\n- 3 completed issues still open/in_progress\n- Test messages accumulated\n\nNeed: Document a post-swarm checklist or create gt swarm cleanup command that:\n1. Closes stale work assignment messages\n2. Reviews in_progress issues for completion\n3. Closes orphaned lifecycle messages\n4. Optionally archives test messages","status":"open","priority":3,"issue_type":"chore","created_at":"2025-12-20T03:12:28.646175-08:00","updated_at":"2025-12-20T03:15:45.521085-08:00"} {"id":"gt-rrd62","title":"Digest: mol-deacon-patrol","description":"Patrol 15: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:19:11.608183-08:00","updated_at":"2025-12-25T10:19:11.608183-08:00","closed_at":"2025-12-25T10:19:11.608153-08:00"} -{"id":"gt-rsdn1","title":"Digest: mol-deacon-patrol","description":"Patrol 6: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T20:20:40.136685-08:00","updated_at":"2025-12-27T20:20:40.136685-08:00","closed_at":"2025-12-27T20:20:40.136648-08:00","dependencies":[{"issue_id":"gt-rsdn1","depends_on_id":"gt-eph-sas","type":"parent-child","created_at":"2025-12-27T20:20:40.137442-08:00","created_by":"deacon"}]} {"id":"gt-rsxwb","title":"implement","description":"Implement the solution for gt-ds3h3. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:59:05.782317-08:00","updated_at":"2025-12-25T14:12:42.080641-08:00","dependencies":[{"issue_id":"gt-rsxwb","depends_on_id":"gt-kp3s3","type":"parent-child","created_at":"2025-12-25T01:59:05.800066-08:00","created_by":"stevey"},{"issue_id":"gt-rsxwb","depends_on_id":"gt-up9uw","type":"blocks","created_at":"2025-12-25T01:59:05.816315-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.080641-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rt6g","title":"Bug: Deacon session linked to Mayor pane causes heartbeat crosstalk","description":"**Root cause found**: The gt-deacon tmux session was linked to gt-mayor window 2 - they shared the same pane (@283). When the daemon sent heartbeats to the Deacon, they appeared as typed input in the Mayor's window, interrupting user prompts.\n\n**Fix applied**: Killed the broken gt-deacon session. The daemon auto-recreates it with a proper independent pane.\n\n**Prevention**: Investigate how sessions can get linked and add safeguards to session creation code.\n\nOriginal symptom: Mayor receiving 'HEARTBEAT: Tip: Witnesses monitor polecats...' messages that ate user input.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T17:00:28.667896-08:00","updated_at":"2025-12-27T21:29:56.345049-08:00","deleted_at":"2025-12-27T21:29:56.345049-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ruw","title":"Fix TestHasPolecat test failure in internal/session","description":"TestHasPolecat in internal/session/manager_test.go fails because it expects\nspecific polecats (Toast, Cheedo) to exist in the test environment.\n\nError:\n```\nmanager_test.go:46: expected hasPolecat(Toast) = true\nmanager_test.go:49: expected hasPolecat(Cheedo) = true\n```\n\nFix: Either create test fixtures or mock the filesystem check.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-17T15:02:30.030032-08:00","updated_at":"2025-12-27T21:29:57.305373-08:00","deleted_at":"2025-12-27T21:29:57.305373-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} @@ -1612,7 +1609,7 @@ {"id":"gt-rwdtl","title":"Digest: mol-deacon-patrol","description":"Patrol 10: routine, halfway","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:17:53.312326-08:00","updated_at":"2025-12-27T21:26:03.552463-08:00","deleted_at":"2025-12-27T21:26:03.552463-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rx2y4","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:02:29.590204-08:00","updated_at":"2025-12-27T21:26:04.009896-08:00","deleted_at":"2025-12-27T21:26:04.009896-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rx5sc","title":"Digest: mol-deacon-patrol","description":"Patrol 18: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:01:46.227281-08:00","updated_at":"2025-12-27T21:26:00.465467-08:00","deleted_at":"2025-12-27T21:26:00.465467-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-rxa7v","title":"Day 1.4c: Create polecat agent bead lifecycle","description":"Define ephemeral polecat agent bead lifecycle.\n\nPolecats need agent beads for ZFC compliance (self-report state).\n\nLifecycle:\n1. On spawn: Create agent bead\n ```yaml\n id: gt-polecat-\u003crig\u003e-\u003cname\u003e\n type: agent\n role_type: polecat\n rig: \u003crig\u003e\n state: spawning\n hook_bead: \u003cassigned-issue\u003e\n ```\n\n2. On Claude ready: Update state=working\n\n3. On completion: Update state=done\n\n4. On nuke: Delete agent bead\n\nCommands needed:\n- gt polecat spawn creates agent bead\n- gt polecat nuke deletes agent bead\n- Polecat updates own state via bd agent state\n\nNote: This ensures Witness can read polecat state from beads instead of tmux scraping.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T22:01:42.464521-08:00","created_by":"mayor","updated_at":"2025-12-27T22:01:42.464521-08:00","dependencies":[{"issue_id":"gt-rxa7v","depends_on_id":"gt-v2gkv","type":"blocks","created_at":"2025-12-27T22:02:45.109373-08:00","created_by":"daemon"},{"issue_id":"gt-rxa7v","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T23:32:42.52862-08:00","created_by":"daemon"}]} +{"id":"gt-rxa7v","title":"Day 1.4c: Create polecat agent bead lifecycle","description":"Define ephemeral polecat agent bead lifecycle.\n\nPolecats need agent beads for ZFC compliance (self-report state).\n\nLifecycle:\n1. On spawn: Create agent bead\n ```yaml\n id: gt-polecat-\u003crig\u003e-\u003cname\u003e\n type: agent\n role_type: polecat\n rig: \u003crig\u003e\n state: spawning\n hook_bead: \u003cassigned-issue\u003e\n ```\n\n2. On Claude ready: Update state=working\n\n3. On completion: Update state=done\n\n4. On nuke: Delete agent bead\n\nCommands needed:\n- gt polecat spawn creates agent bead\n- gt polecat nuke deletes agent bead\n- Polecat updates own state via bd agent state\n\nNote: This ensures Witness can read polecat state from beads instead of tmux scraping.","notes":"BLOCKED: bd CLI doesn't support type=agent yet. gt-ikyo1 marked as closed but the bd binary (v0.39.1) rejects --type=agent. Need beads update first.","status":"open","priority":1,"issue_type":"task","assignee":"gastown/crew/max","created_at":"2025-12-27T22:01:42.464521-08:00","created_by":"mayor","updated_at":"2025-12-28T00:03:22.979551-08:00","dependencies":[{"issue_id":"gt-rxa7v","depends_on_id":"gt-v2gkv","type":"blocks","created_at":"2025-12-27T22:02:45.109373-08:00","created_by":"daemon"},{"issue_id":"gt-rxa7v","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T23:32:42.52862-08:00","created_by":"daemon"}]} {"id":"gt-rxewi","title":"Digest: mol-deacon-patrol","description":"Patrol complete: all agents healthy, no callbacks, cleaned 1 stale lock","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:56:57.672878-08:00","updated_at":"2025-12-27T21:26:00.686015-08:00","deleted_at":"2025-12-27T21:26:00.686015-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rxsh","title":"Multiple merge/landing models documented without clarification","description":"Architecture describes three different merge models:\n\n1. Refinery-only model (traditional)\n2. Direct landing model (Mayor bypass) \n3. Swarm integration branch model (internal/swarm)\n\nThese appear to conflict. Documentation should clarify:\n- Which model is canonical?\n- When to use which model?\n- Or are some deprecated?\n\nThis is confusing for users trying to understand the system.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:51:43.593597-08:00","updated_at":"2025-12-24T12:51:43.593597-08:00","dependencies":[{"issue_id":"gt-rxsh","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.992252-08:00","created_by":"daemon"},{"issue_id":"gt-rxsh","depends_on_id":"gt-e0qj2","type":"blocks","created_at":"2025-12-26T23:21:29.324268-08:00","created_by":"daemon"}]} {"id":"gt-ry56s","title":"Digest: mol-deacon-patrol","description":"Patrol 12: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:37:23.791096-08:00","updated_at":"2025-12-27T21:26:00.348032-08:00","deleted_at":"2025-12-27T21:26:00.348032-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1651,6 +1648,7 @@ {"id":"gt-sr8","title":"Test merge request","description":"branch: polecat/Test/gt-test\ntarget: main\nsource_issue: gt-test\nworker: TestWorker\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-18T20:08:22.678439-08:00","updated_at":"2025-12-27T21:27:22.980748-08:00","deleted_at":"2025-12-27T21:27:22.980748-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-srvfp","title":"Digest: mol-deacon-patrol","description":"Patrol 10","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T20:03:22.57505-08:00","updated_at":"2025-12-27T21:26:00.652776-08:00","deleted_at":"2025-12-27T21:26:00.652776-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-sstg","title":"Deacon patrol molecules stored in wrong beads location","description":"outputDeaconPatrolContext in prime.go hardcodes 'gastown/mayor/rig' (line 691) to find patrol molecules. But Deacon is a town-level role, not a rig role. Deacon molecules should be in town root beads (~/gt/.beads/) not rig beads. This also affects gt mol status which uses findLocalBeadsDir() - from ~/gt/deacon/ it won't find the right beads location.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-23T13:30:18.021287-08:00","updated_at":"2025-12-23T13:30:18.021287-08:00"} +{"id":"gt-stekz","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:49:04.268748-08:00","updated_at":"2025-12-25T10:49:04.268748-08:00","closed_at":"2025-12-25T10:49:04.268712-08:00"} {"id":"gt-sult","title":"gt spawn beads sync warning is misleading for redirect-based polecats","description":"## Problem\n\nWhen spawning a polecat, gt spawn shows a warning:\n```\nWarning: beads sync: exit status 1\n```\n\nThis is misleading because polecats using the redirect architecture (`.beads/redirect`) share the canonical database at `mayor/rig/.beads/beads.db`. The 'stale beads' indicated by the warning is just git branch divergence (main vs beads-sync), not actual data staleness.\n\n## Expected Behavior\n\ngt spawn should either:\n1. Skip the beads sync check for polecats using redirects (they share the canonical DB)\n2. Or provide a clearer message like 'beads redirect active, using shared database'\n\n## Reproduction\n\n```bash\ngt spawn --issue gt-xxx --rig gastown --create\n# Shows 'Warning: beads sync: exit status 1' even though beads are current\n```\n\n## Root Cause\n\nspawn.go calls beads sync and treats any non-zero exit as a warning. But with redirects, the polecat doesn't need its own beads - it uses the canonical source via the redirect chain:\n```\npolecat/.beads/redirect -\u003e ../../.beads -\u003e gastown/.beads/redirect -\u003e mayor/rig/.beads\n```\n\n## Fix Options\n\n1. Check for .beads/redirect before calling sync\n2. Have bd sync return 0 when redirect is present\n3. Suppress the warning in spawn when redirect exists","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-21T14:02:01.28061-08:00","updated_at":"2025-12-27T21:29:56.636475-08:00","deleted_at":"2025-12-27T21:29:56.636475-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-suvmb","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T16:43:56.468927-08:00","updated_at":"2025-12-27T21:26:03.066921-08:00","deleted_at":"2025-12-27T21:26:03.066921-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-svi","title":"Implement gt mq CLI commands","description":"Add gt mq subcommands as sugar over bd:\n\n- gt mq submit: Create MR for current branch\n- gt mq list: Show open merge requests\n- gt mq next: Show next MR ready to process\n- gt mq process: Engineer processes the queue\n- gt mq reorder \u003cid\u003e --after \u003cx\u003e: Change ordering via deps\n- gt mq status \u003cid\u003e: Show MR details\n\nAll commands should work with the Beads data plane.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-16T23:02:16.649648-08:00","updated_at":"2025-12-27T21:29:45.665684-08:00","dependencies":[{"issue_id":"gt-svi","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:55.456462-08:00","created_by":"daemon"},{"issue_id":"gt-svi","depends_on_id":"gt-kp2","type":"blocks","created_at":"2025-12-16T23:03:12.689547-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.665684-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1679,6 +1677,7 @@ {"id":"gt-t8du","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:47:04.511823-08:00","updated_at":"2025-12-27T21:26:04.210544-08:00","deleted_at":"2025-12-27T21:26:04.210544-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-t9u7","title":"Polecat template cleanup","description":"Collection of improvements to the polecat role template (polecat.md.tmpl). Focus: reduce prose redundancy, move behavior into molecules, fix terminology, improve clarity.","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-23T16:57:05.03738-08:00","updated_at":"2025-12-27T21:29:55.889275-08:00","deleted_at":"2025-12-27T21:29:55.889275-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-tca","title":"Polecats should auto-cleanup after MR submission","description":"Currently polecats must manually run 'gt handoff --shutdown' after completing work. This is error-prone and leaves stale polecats around.\n\n## Desired Flow\n\n1. Polecat completes work\n2. Polecat runs 'gt mq submit' (or similar)\n3. MR is added to integration queue\n4. **Polecat automatically cleans up** (no manual handoff needed)\n\n## Implementation Options\n\n### Option A: mq submit triggers cleanup\nIn 'gt mq submit':\n1. Submit MR to queue\n2. Automatically run cleanup (same as gt handoff --shutdown)\n3. Polecat session terminates\n\n### Option B: Refinery triggers cleanup\nWhen Refinery picks up MR:\n1. Refinery processes MR\n2. Sends message to Witness: 'CLEANUP: \u003cpolecat\u003e'\n3. Witness cleans up polecat\n\n### Option C: Molecule-driven\nDefine cleanup as final phase of polecat-work molecule:\n1. code → test → submit-mr → cleanup\n\n## Note\nThis reinforces the ephemeral model: polecats exist only for the duration of a single task.","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-20T15:22:54.485456-08:00","updated_at":"2025-12-27T21:29:53.719557-08:00","dependencies":[{"issue_id":"gt-tca","depends_on_id":"gt-9nf","type":"related","created_at":"2025-12-20T15:40:08.998908-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.719557-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} +{"id":"gt-tcv8","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:35:11.507838-08:00","updated_at":"2025-12-24T22:35:11.507838-08:00","closed_at":"2025-12-24T22:35:11.507795-08:00"} {"id":"gt-teq0p","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.776531-08:00","updated_at":"2025-12-27T21:29:55.274773-08:00","dependencies":[{"issue_id":"gt-teq0p","depends_on_id":"gt-v7wq4","type":"blocks","created_at":"2025-12-25T02:11:33.890608-08:00","created_by":"stevey"}],"deleted_at":"2025-12-27T21:29:55.274773-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-tfg1","title":"Digest: mol-deacon-patrol","description":"Patrol #2: Routine - all 6 agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:15:34.682289-08:00","updated_at":"2025-12-27T21:26:04.819594-08:00","deleted_at":"2025-12-27T21:26:04.819594-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-tgy1v","title":"@group dynamic resolution in mail router","description":"Wire agent bead queries into mail router for @group addresses.\n\n## Updated Approach (post agent-as-bead)\n\nAgent discovery now uses bead queries instead of filesystem scanning:\n\n```bash\n# Instead of filesystem scan\nbd list --type=agent --rig=gastown\n\n# Filter by role\nbd list --type=agent --role_type=witness\nbd list --type=agent --role_type=crew --rig=gastown\n```\n\n## Deliverables\n\n1. Parse @group syntax in router:\n - @rig/gastown → bd list --type=agent --rig=gastown\n - @town → bd list --type=agent\n - @witnesses → bd list --type=agent --role_type=witness\n - @crew/gastown → bd list --type=agent --role_type=crew --rig=gastown\n\n2. Fan-out at send time:\n - Resolve @group to list of agent bead IDs\n - Create N message copies (one per recipient)\n - Each recipient gets their own message\n\n3. Update gt mail send to handle @group\n\n## Dependencies\n- Agent bead schema (gt-ikyo1) - enables type=agent queries\n- Agent beads must exist for resolution to return results\n\n## Acceptance\n- @rig/gastown sends to all gastown agents\n- Each recipient has own message copy\n- Works with existing mail infrastructure","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:52:04.244948-08:00","updated_at":"2025-12-27T22:16:34.323067-08:00","dependencies":[{"issue_id":"gt-tgy1v","depends_on_id":"gt-xo05b","type":"blocks","created_at":"2025-12-26T14:53:03.081856-08:00","created_by":"daemon"},{"issue_id":"gt-tgy1v","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T22:16:18.444503-08:00","created_by":"daemon"}]} @@ -1687,7 +1686,6 @@ {"id":"gt-tk8s8","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-25T01:05:28.114611-08:00","updated_at":"2025-12-27T21:43:33.004378-08:00","closed_at":"2025-12-27T21:43:33.004378-08:00"} {"id":"gt-tl54","title":"MR: gt-test (main)","description":"branch: main\ntarget: main\nsource_issue: gt-test","status":"tombstone","priority":3,"issue_type":"merge-request","created_at":"2025-12-18T20:16:41.125975-08:00","updated_at":"2025-12-27T21:27:23.006168-08:00","deleted_at":"2025-12-27T21:27:23.006168-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-tmm","title":"Polecat beads not synced with rig beads","description":"When gt spawn assigns an issue to a polecat, the polecat cannot find the issue because:\n\n1. Rig beads at /gt/gastown/.beads contains gt-th7\n2. Polecat beads at /gt/gastown/polecats/dementus/.beads does NOT have gt-th7\n3. bd sync in polecat dir pulls from beads-sync branch which doesn't have the new issue\n4. Rig bd sync uses 'main' branch, causing a branch mismatch\n\nThe polecat gets a work assignment for an issue it literally cannot see.\n\n## Root Cause\n\n- Rig beads and polecat beads are separate git-tracked copies\n- No mechanism to propagate newly created issues from rig to polecats before assignment\n- Sync branch configuration mismatch between rig and polecats\n\n## Fix Options\n\n1. gt spawn should sync rig beads before assigning work\n2. gt spawn should sync polecat beads after assignment\n3. Use shared beads (symlink or same DB) instead of copies\n4. Push new issues immediately on create","notes":"Note: This sync mismatch is resolved by gt-9nf (fresh polecats). Rather than fixing sync between stale clones, we'll always create fresh worktrees. This issue documents the root cause for posterity.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-20T15:17:10.158624-08:00","updated_at":"2025-12-27T21:29:53.744537-08:00","deleted_at":"2025-12-27T21:29:53.744537-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} -{"id":"gt-tmnoi","title":"Digest: mol-deacon-patrol","description":"Patrol 11","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T20:03:56.238528-08:00","updated_at":"2025-12-26T20:03:56.238528-08:00","closed_at":"2025-12-26T20:03:56.238396-08:00"} {"id":"gt-tmoz3","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Quiet, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:14:05.427108-08:00","updated_at":"2025-12-27T21:26:02.765167-08:00","deleted_at":"2025-12-27T21:26:02.765167-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-tnap3","title":"queue: shared storage work queues","description":"Work queue with shared storage (single copy, first-to-claim).\n\n## Deliverables\n\n1. Parse queue:name syntax in router\n2. Shared storage model:\n - Single message copy (NOT fan-out)\n - Stored in a queue-specific location\n - Multiple agents can see it\n3. Queue configuration in ~/gt/config/queues.json\n4. Queue inbox command: gt mail queue \u003cname\u003e\n\n## Key difference from list:\n- list: creates N copies (N obligations)\n- queue: creates 1 copy (1 obligation, first-to-claim)\n\n## Dependencies\n- Config directory (gt-i6jvc)\n\n## Acceptance\n- queue:cleanup creates single message\n- Multiple agents can view queue\n- Message visible until claimed","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:52:07.091239-08:00","updated_at":"2025-12-26T14:52:07.091239-08:00","dependencies":[{"issue_id":"gt-tnap3","depends_on_id":"gt-i6jvc","type":"blocks","created_at":"2025-12-26T14:53:06.932146-08:00","created_by":"daemon"}]} {"id":"gt-tnca","title":"Design mol-ready-work patrol for crew workers","description":"## Summary\n\nDesign and implement a protomolecule (mol-ready-work) that enables crew workers to autonomously work through backlogs when the overseer is away. This replaces the normal \"await instructions\" patrol step with productive backlog processing.\n\n## Context\n\nCrew workers like dave/joe are persistent, user-managed agents. Currently their patrol loop has an \"await instructions\" step that idles. We want an alternative: sling mol-ready-work at them and they crank through backlogs until:\n- The overseer interrupts with new instructions\n- Context fills up (request handoff)\n- Backlogs are empty\n\n## Backlogs (Priority Order)\n\n1. **Open PRs** - Review/merge pending pull requests\n2. **Untriaged GH issues** - New issues needing triage\n3. **Open beads work** - bd ready items (unblocked issues)\n4. **Triaged GH issues** - Bugs/features to implement\n\n## Key Features\n\n### ROI-Based Selection\nInstead of strict priority, agent applies ROI heuristic:\n- Size estimate (fits in remaining context?)\n- Achievability (has all needed info?)\n- Impact (priority + type weight)\n- Pick highest-value achievable item\n\n### Context Management\n- Check token usage after each work item\n- Request handoff before running out\n- Leave clear handoff notes (mail to self)\n- Next session picks up the patrol\n\n### Patrol Loop Structure\n```\norient → scan-backlogs → select-work → execute-work → check-context → (loop or handoff)\n```\n\n## Design Questions\n\n1. How does gt sling work? Does it exist?\n2. How does this interact with the normal crew patrol?\n3. Should the molecule go in Gas Town catalog or per-rig?\n4. How does bonding work for discovered work during execution?\n5. Should this be a wisp (ephemeral) or mol (persistent)?\n\n## Acceptance Criteria\n\n- [ ] mol-ready-work protomolecule defined in catalog\n- [ ] gt sling command implemented (or existing mechanism documented)\n- [ ] Context-checking step works with agent token awareness\n- [ ] Handoff mechanism integrates with gt mail\n- [ ] Documentation for crew workers on using the patrol","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-22T23:45:40.63509-08:00","updated_at":"2025-12-27T21:29:56.309081-08:00","close_reason":"Obsoleted by new designs","deleted_at":"2025-12-27T21:29:56.309081-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} @@ -1712,6 +1710,7 @@ {"id":"gt-tubn","title":"Track operational stats as entity/audit beads","description":"Witness and refinery track operational stats in JSON files:\n- total_merged, today_merged, total_failed (refinery)\n- total_checks, total_nudges, total_escalations (witness)\n\nFor HOP entity CV tracking, these could become:\n- type=audit beads (daily roll-ups of operational metrics)\n- Entity chain entries showing validator activity\n\nThis provides observability and contributes to entity reputation tracking (e.g., refinery X has merged 500 PRs with 2% failure rate).\n\nNot critical for launch but aligns with HOP Platform of Platforms vision.","status":"open","priority":4,"issue_type":"feature","created_at":"2025-12-21T22:07:30.404073-08:00","updated_at":"2025-12-21T22:07:30.404073-08:00"} {"id":"gt-tulx","title":"gt mq submit: creates task type instead of merge-request type","description":"## Problem\n\n`gt mq submit` creates an issue with `type: task` but should be `type: merge-request`.\n\n## Evidence\n\n```\n$ bd show gt-n508\ngt-n508: Merge: gt-70b3\nStatus: open\nPriority: P1\nType: task \u003c-- WRONG, should be merge-request\n...\nDescription:\ntype: merge-request \u003c-- Correct type is in description, not in actual type field\n```\n\n## Impact\n\n`gt mq list` shows empty queue because it queries for `type: merge-request`\n\n## Fix\n\n`gt mq submit` should set `--type merge-request` when creating the bead.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-18T21:57:37.905848-08:00","updated_at":"2025-12-27T21:29:54.066926-08:00","deleted_at":"2025-12-27T21:29:54.066926-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-tvlam","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:01:29.899-08:00","updated_at":"2025-12-27T21:26:04.026295-08:00","deleted_at":"2025-12-27T21:26:04.026295-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-tvos","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-test123) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:48:26.32141-08:00","updated_at":"2025-12-25T14:12:42.239473-08:00","dependencies":[{"issue_id":"gt-tvos","depends_on_id":"gt-i4lo","type":"parent-child","created_at":"2025-12-21T21:48:26.323129-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.239473-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-tw1g","title":"Startup hook should validate attached molecule is still open","description":"When the SessionStart hook outputs attached_molecule from the handoff bead, it should check if that molecule is still open. If closed, it should:\n1. Clear the stale attachment\n2. Auto-spawn a fresh patrol molecule\n3. Attach the new patrol\n\nCurrently it just outputs the stale reference without validation, leaving the Deacon confused about what to run.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-23T13:16:51.73028-08:00","updated_at":"2025-12-27T21:29:55.985303-08:00","deleted_at":"2025-12-27T21:29:55.985303-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-twjr5","title":"Async Coordination Gates","description":"Agents wait for external events without polling.\n\n## Problem\nAgents cannot wait for external conditions (CI completion, human approval, timers) without wasteful polling or losing state on handoff.\n\n## Requirements\n- Gate issue type in beads (type=gate)\n- bd gate create --await timer:5m / gh:run:123 / human:approve / mail:pattern\n- Deacon evaluates pending gates each patrol cycle\n- Agents park work on gate, resume when condition met\n- Gate timeout and notification\n\n## Gate Types\n- timer:\u003cduration\u003e - Simple delay (5m, 1h, 24h)\n- gh:run:\u003cid\u003e - GitHub Actions run completion\n- gh:pr:\u003cid\u003e - PR merged/closed \n- human:\u003cprompt\u003e - Human approval required\n- mail:\u003cpattern\u003e - Wait for mail matching pattern\n\n## Success Criteria\n- Agent can create gate and suspend work\n- Deacon wakes agent when gate condition met\n- Gates survive session cycling\n\nConsolidates gt-31eg. Parallel work with no dependencies.","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-25T20:46:07.930952-08:00","updated_at":"2025-12-27T21:29:52.498052-08:00","deleted_at":"2025-12-27T21:29:52.498052-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-twjr5.1","title":"Gate issue type and bd gate create","description":"Add type=gate to beads schema. Implement bd gate create command with --await flag. Gates are special issues that represent wait conditions. Example: bd gate create --await timer:5m --title 'Wait for cooldown'","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-25T20:55:44.796316-08:00","updated_at":"2025-12-27T21:29:45.985412-08:00","dependencies":[{"issue_id":"gt-twjr5.1","depends_on_id":"gt-twjr5","type":"parent-child","created_at":"2025-12-25T20:55:44.7969-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.985412-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1721,7 +1720,6 @@ {"id":"gt-twjr5.5","title":"Agent parking and resuming","description":"Implement gt park and gt resume commands. Agent parks work on a gate, state persists across sessions. When gate condition met, Deacon sends wake mail. Agent resumes from parked state. Critical for async workflows.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:55:51.294474-08:00","updated_at":"2025-12-27T21:29:54.935805-08:00","dependencies":[{"issue_id":"gt-twjr5.5","depends_on_id":"gt-twjr5","type":"parent-child","created_at":"2025-12-25T20:55:51.296459-08:00","created_by":"daemon"},{"issue_id":"gt-twjr5.5","depends_on_id":"gt-twjr5.2","type":"blocks","created_at":"2025-12-25T20:56:46.946883-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.935805-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ty3w4","title":"Digest: mol-deacon-patrol","description":"Final patrol cycle 20: all systems healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:22:00.43096-08:00","updated_at":"2025-12-27T21:26:03.311941-08:00","deleted_at":"2025-12-27T21:26:03.311941-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-tyu37","title":"Digest: mol-deacon-patrol","description":"Patrol 13: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:23:11.657968-08:00","updated_at":"2025-12-27T21:26:00.092483-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-tyu37","depends_on_id":"gt-eph-xw9","type":"parent-child","created_at":"2025-12-27T20:23:11.65877-08:00","created_by":"deacon"}],"deleted_at":"2025-12-27T21:26:00.092483-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-tz7f","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-1wmw) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:54:21.059785-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","dependencies":[{"issue_id":"gt-tz7f","depends_on_id":"gt-wx0w","type":"parent-child","created_at":"2025-12-24T22:54:21.061204-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-tzn8z","title":"Digest: mol-deacon-patrol","description":"Patrol 19: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:25:18.709476-08:00","updated_at":"2025-12-27T21:25:59.99424-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-tzn8z","depends_on_id":"gt-eph-du1","type":"parent-child","created_at":"2025-12-27T20:25:18.710266-08:00","created_by":"deacon"}],"deleted_at":"2025-12-27T21:25:59.99424-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-tzogh","title":"Clean up deprecated gt mol command examples in molecule.go","description":"## Task\n\nThe molecule.go file contains example strings that reference deprecated gt mol commands.\n\n## Deprecated References Found\n\n1. `gt molecule instantiate mol-xyz` → should reference `bd mol pour`\n2. `gt mol list --catalog` → should reference `bd formula list` \n3. `gt mol bond mol-polecat-arm` → should reference `bd mol bond`\n\n## Location\n\n`internal/cmd/molecule.go` (multiple lines)\n\n## Context\n\nThe gt mol help already correctly redirects:\n```\nFor beads data operations (listing, showing, creating molecules), use bd:\n bd formula list List molecule protos (replaces gt mol catalog)\n bd mol show Show molecule details (replaces gt mol show)\n bd mol pour Instantiate molecule (replaces gt mol instantiate)\n bd mol bond Bond molecules together (replaces gt mol bond)\n```\n\nBut the example strings in the code still show the old patterns.\n\n## Fix\n\nUpdate the example strings to use the current bd mol patterns.","status":"tombstone","priority":2,"issue_type":"task","assignee":"gastown/crew/joe","created_at":"2025-12-27T17:12:36.602205-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-27T21:29:54.696525-08:00","close_reason":"Already fixed - deprecated commands removed, only migration docs remain in help text","deleted_at":"2025-12-27T21:29:54.696525-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-u0c1","title":"Merge: gt-qna4","description":"branch: polecat/capable\ntarget: main\nsource_issue: gt-qna4\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T07:47:28.453817-08:00","updated_at":"2025-12-27T21:27:22.684012-08:00","deleted_at":"2025-12-27T21:27:22.684012-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -1771,6 +1769,7 @@ {"id":"gt-uazec","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:44:36.529952-08:00","updated_at":"2025-12-25T20:44:36.529952-08:00","closed_at":"2025-12-25T20:44:36.529895-08:00"} {"id":"gt-ub5gh","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:43:56.849161-08:00","updated_at":"2025-12-25T15:43:56.849161-08:00","closed_at":"2025-12-25T15:43:56.84913-08:00"} {"id":"gt-ubd4","title":"Merge: gt-tnca.1","description":"branch: polecat/immortan\ntarget: main\nsource_issue: gt-tnca.1\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T00:18:22.782233-08:00","updated_at":"2025-12-27T21:27:22.861381-08:00","deleted_at":"2025-12-27T21:27:22.861381-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} +{"id":"gt-ud2at","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:34:07.199119-08:00","updated_at":"2025-12-25T15:52:58.533098-08:00","deleted_at":"2025-12-25T15:52:58.533098-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-uhc3","title":"gt mq list shows empty when MRs exist","description":"The gt mq list command returns empty results even when merge requests exist in the queue.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-21T17:51:18.712633-08:00","updated_at":"2025-12-21T17:51:18.712633-08:00"} {"id":"gt-uhe4","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:20","description":"Patrol complete: inbox empty, all agents healthy (Mayor, 2 Witnesses, 2 Refineries), no polecats, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:20:09.935353-08:00","updated_at":"2025-12-27T21:26:05.330941-08:00","deleted_at":"2025-12-27T21:26:05.330941-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ujwab","title":"Digest: mol-deacon-patrol","description":"Patrol 5: all clear, proto closure warning noted","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T17:18:32.52576-08:00","updated_at":"2025-12-27T21:26:01.19296-08:00","deleted_at":"2025-12-27T21:26:01.19296-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1792,7 +1791,6 @@ {"id":"gt-usy0","title":"Merge: gt-3x0z.3","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-3x0z.3\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-21T16:03:43.535266-08:00","updated_at":"2025-12-27T21:27:22.895324-08:00","deleted_at":"2025-12-27T21:27:22.895324-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-utwc","title":"Self-mail should suppress tmux notification","description":"When sending mail to yourself (e.g., mayor sending to mayor/), the tmux notification shouldn't fire.\n\n**Rationale:**\n- Self-mail is intended for future-you (next session handoff)\n- Present-you just sent it, so you already know about it\n- The notification is redundant/confusing in this case\n\n**Fix:**\nSuppress tmux notification when sender == recipient address.","status":"tombstone","priority":3,"issue_type":"bug","created_at":"2025-12-22T17:55:39.573705-08:00","updated_at":"2025-12-27T21:29:57.547504-08:00","deleted_at":"2025-12-27T21:29:57.547504-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-utxy0","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:58.501065-08:00","updated_at":"2025-12-27T21:26:02.122711-08:00","deleted_at":"2025-12-27T21:26:02.122711-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-uvga","title":"Digest: mol-deacon-patrol","description":"Patrol 16","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:43.578204-08:00","updated_at":"2025-12-24T23:10:43.578204-08:00","closed_at":"2025-12-24T23:10:43.57816-08:00"} {"id":"gt-uvpo6","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All agents healthy, routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:16:30.625876-08:00","updated_at":"2025-12-27T21:26:03.821293-08:00","deleted_at":"2025-12-27T21:26:03.821293-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ux0f","title":"Digest: mol-deacon-patrol","description":"Patrol #16: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:42.184561-08:00","updated_at":"2025-12-27T21:26:04.268599-08:00","deleted_at":"2025-12-27T21:26:04.268599-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-uym5","title":"Implement gt mol status command","description":"Show what's on an agent's hook.\n\n```bash\ngt mol status [target]\n```\n\nOutput:\n- What's slung (molecule name, associated issue)\n- Current phase and progress\n- Whether it's a wisp\n- Next action hint\n\nIf no target, shows current agent's status.\n\nAcceptance:\n- [ ] Read pinned bead attachment\n- [ ] Display molecule/issue info\n- [ ] Show phase progress\n- [ ] Indicate wisp vs durable","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T03:17:34.679963-08:00","updated_at":"2025-12-27T21:29:53.260399-08:00","deleted_at":"2025-12-27T21:29:53.260399-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1803,7 +1801,7 @@ {"id":"gt-uzf2l.4","title":"bd mol publish: Push formula to GitHub repo","description":"Publish a local formula to a GitHub repository.\n\nUsage: bd mol publish \u003cformula-name\u003e \u003cgithub-repo\u003e\n\nShould:\n- Create or update GitHub repo with formula\n- Add README.md from formula metadata\n- Tag with version\n- Set appropriate topics for discoverability","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-25T21:53:01.817145-08:00","updated_at":"2025-12-27T21:29:57.321834-08:00","dependencies":[{"issue_id":"gt-uzf2l.4","depends_on_id":"gt-uzf2l","type":"parent-child","created_at":"2025-12-25T21:53:01.817569-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.321834-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-v0xqo","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T15:32:26.623344-08:00","updated_at":"2025-12-27T21:26:03.116251-08:00","deleted_at":"2025-12-27T21:26:03.116251-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-v1pcg","title":"ApplyBranches/ApplyGates mutate steps in place","description":"ApplyBranches and ApplyGates claim to return a modified steps slice, but they actually mutate the original steps via the pointer map from buildStepMap().\n\n```go\n// ApplyBranches docstring says:\n// Returns the modified steps slice (steps are modified in place for dependencies).\n```\n\nThis is technically documented but violates the pattern established by ApplyLoops and ApplyAdvice which return new step slices.\n\nOptions:\n1. Document explicitly that these functions mutate in place (current behavior)\n2. Clone steps before modification for true immutability\n3. Accept this as intentional since it's an optimization\n\nThe current behavior is safe because cook.go doesn't reuse the input slice, but could cause subtle bugs if callers expect immutability.\n\nRecommend option 1 (document) or 2 (clone) for consistency.","status":"tombstone","priority":3,"issue_type":"bug","created_at":"2025-12-25T15:14:01.921527-08:00","updated_at":"2025-12-27T21:29:57.338244-08:00","dependencies":[{"issue_id":"gt-v1pcg","depends_on_id":"gt-8tmz.4","type":"blocks","created_at":"2025-12-25T15:14:18.94711-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.338244-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} -{"id":"gt-v2gkv","title":"Day 1.2: Add agent-specific fields to schema","description":"Add fields for agent beads:\n- hook_bead: reference to current work (0..1 cardinality)\n- role_bead: reference to role definition (1)\n- state: agent-reported state (idle|running|stuck|stopped)\n\nParent: gt-d0jqp","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-27T20:57:59.97079-08:00","created_by":"mayor","updated_at":"2025-12-27T23:14:14.774515-08:00","dependencies":[{"issue_id":"gt-v2gkv","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T20:58:46.995644-08:00","created_by":"daemon"},{"issue_id":"gt-v2gkv","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.590267-08:00","created_by":"daemon"}]} +{"id":"gt-v2gkv","title":"Day 1.2: Add agent-specific fields to schema","description":"Add fields for agent beads:\n- hook_bead: reference to current work (0..1 cardinality)\n- role_bead: reference to role definition (1)\n- state: agent-reported state (idle|running|stuck|stopped)\n\nParent: gt-d0jqp","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-27T20:57:59.97079-08:00","created_by":"mayor","updated_at":"2025-12-27T23:44:50.74944-08:00","closed_at":"2025-12-27T23:44:50.74944-08:00","close_reason":"Implemented: agent fields added to schema (b5c69507)","dependencies":[{"issue_id":"gt-v2gkv","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T20:58:46.995644-08:00","created_by":"daemon"},{"issue_id":"gt-v2gkv","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.590267-08:00","created_by":"daemon"}]} {"id":"gt-v30g","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:36:38.029543-08:00","updated_at":"2025-12-27T21:26:04.634615-08:00","deleted_at":"2025-12-27T21:26:04.634615-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-v3bjf","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:28:25.96187-08:00","updated_at":"2025-12-25T07:28:25.96187-08:00","closed_at":"2025-12-25T07:28:25.961842-08:00"} {"id":"gt-v5hv","title":"Work on ga-y6b: Implement Refinery as Claude agent. Conve...","description":"Work on ga-y6b: Implement Refinery as Claude agent. Convert from shell to Claude agent that processes MRs in merge queue, runs tests, merges to integration branch. When done, submit MR (not PR) to integration branch for Refinery.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T22:58:17.576892-08:00","updated_at":"2025-12-27T21:29:56.889461-08:00","deleted_at":"2025-12-27T21:29:56.889461-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1826,6 +1824,7 @@ {"id":"gt-vj3rb","title":"Digest: mol-deacon-patrol","description":"Patrol 3: stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:43.678006-08:00","updated_at":"2025-12-27T21:26:02.433771-08:00","deleted_at":"2025-12-27T21:26:02.433771-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vjv","title":"Add bulk session stop command (gt session stop --all)","description":"When decommissioning a rig, need to stop multiple sessions one at a time. A --all or --rig flag would allow: gt session stop --rig gastown","status":"tombstone","priority":3,"issue_type":"feature","created_at":"2025-12-18T11:33:33.394649-08:00","updated_at":"2025-12-27T21:29:57.622515-08:00","deleted_at":"2025-12-27T21:29:57.622515-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-vjw","title":"Swarm learning: Session cleanup missing from swarm workflow","description":"## Problem\n\nAfter Enders Game swarm completed (18 issues merged), 16 polecat sessions were left running but idle. No automated cleanup occurred.\n\n## What Should Happen\n\n1. Witness detects polecat completed work (idle at prompt)\n2. Witness verifies git state is clean\n3. Witness shuts down session\n4. Witness reports completion to Mayor\n\n## GGT Components\n\n- gt-cxx: Witness context cycling (covers self-cycling)\n- gt-u1j.9: Witness daemon heartbeat loop\n- gt-kmn.6: Witness swarm landing protocol\n\n## Recommendation\n\nAdd to Witness responsibilities:\n- Monitor for 'work complete' signals (DONE keyword, idle detection)\n- Automated session shutdown after verification\n- Swarm completion reporting to Mayor\n\nSee also: architecture.md 'Worker Cleanup (Witness-Owned)' section which describes this but it wasn't implemented in PGT.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T01:27:52.796587-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} +{"id":"gt-vkmpf","title":"Digest: mol-deacon-patrol","description":"Patrol 12: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:43:21.209794-08:00","updated_at":"2025-12-26T18:43:21.209794-08:00","closed_at":"2025-12-26T18:43:21.209749-08:00"} {"id":"gt-vlpvi","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T03:56:28.353902-08:00","updated_at":"2025-12-27T21:26:03.737869-08:00","deleted_at":"2025-12-27T21:26:03.737869-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vm85o","title":"Mol Mall: Formula Package Registry","description":"A package registry for sharing and discovering formulas, schematics, and protocols.\n\n## Concept\n\nLike npm/Maven/Go modules but for workflow definitions.\n\n```\nmol-mall.io/\n├── @gastown/ # Official Gas Town formulas\n│ ├── shiny\n│ ├── polecat-work\n│ └── release\n├── @acme-corp/ # Enterprise org (private)\n│ └── compliance-review\n├── @linus/ # Individual publisher\n│ └── kernel-review\n└── community/ # Unscoped public formulas\n └── towers-of-hanoi\n```\n\n## Resolution Hierarchy\n\n```\n1. Project: ./.beads/formulas/ # Project-specific\n2. Rig: ~/gt/\u003crig\u003e/.formulas/ # Rig-wide\n3. Town: ~/gt/.formulas/ # Town-wide (mayor stdlib)\n4. User: ~/.gastown/formulas/ # Personal collection\n5. Mall: mol-mall.io/ # Published packages\n```\n\n## Package Manifest\n\n```toml\n[package]\nname = \"shiny\"\nversion = \"1.2.0\"\ndescription = \"Engineer in a Box\"\nauthors = [\"Gas Town \u003cgastown@example.com\u003e\"]\nlicense = \"MIT\"\n\n[dependencies]\n\"@gastown/review-patterns\" = \"^2.0\"\n```\n\n## Distribution Scenarios\n\n1. **Celebrity Formulas**: Expert-curated workflows (e.g., Linus kernel review)\n2. **Enterprise Compliance**: Private company formulas\n3. **Standard Library**: @gastown/* blessed defaults\n4. **Community Ecosystem**: Varying quality, needs ratings/verification\n\n## Open Questions\n\n1. Versioning semantics - SemVer? Breaking change rules?\n2. Security model - sandboxing? signing? permissions?\n3. Private registries - self-hosted? authentication?\n4. Lock files - formulas.lock format?\n\n## Related\n\n- docs/formula_evolution.md - package ecosystem parallel section\n- gt-8ws7o - Schematic (can be published)\n- gt-y3jb9 - Protocol (can be published)\n","status":"open","priority":4,"issue_type":"epic","created_at":"2025-12-26T01:01:24.551028-08:00","updated_at":"2025-12-26T01:01:24.551028-08:00"} {"id":"gt-vmk7","title":"Guardrail: Verify commits exist before closing polecat issues","description":"## Updated Approach (ZFC)\n\nThe original proposal was for mechanical guardrails in bd close. This contradicts the ZFC principle: all decisions go to models, not code.\n\n## Correct Solution\n\nThe verification should happen in **mol-polecat-arm** execute step, not bd close:\n\nIn the pre-kill-verify action:\n```bash\n# Current steps\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n\n# ADD: Verify productive work\ngit log --oneline --grep='\u003cissue-id\u003e' | head -1\n# If no commits AND issue being closed as 'done' → flag for review\n```\n\nThe agent (Witness) makes the decision. The mol gives it the verification step.\n\n## Why Not Code Guardrails\n\nPolecats have legitimate reasons to close issues without commits:\n- Already done (someone else fixed it)\n- Deferred (out of scope)\n- Escalated (needs human decision)\n- Duplicate (merged with another issue)\n\nA code guardrail would block all these. The mol step lets the agent verify AND make the judgment call.\n\n## Implementation\n\nUpdate mol-polecat-arm execute step to include commit verification for 'done' closures.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T14:35:24.695717-08:00","updated_at":"2025-12-27T21:29:52.973768-08:00","deleted_at":"2025-12-27T21:29:52.973768-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1844,6 +1843,7 @@ {"id":"gt-w1zd","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:10:52.98396-08:00","updated_at":"2025-12-24T21:10:52.98396-08:00","closed_at":"2025-12-24T21:10:52.983923-08:00"} {"id":"gt-w2n82","title":"Digest: mol-deacon-patrol","description":"Patrol 11: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:07:59.516238-08:00","updated_at":"2025-12-27T23:07:59.516238-08:00","closed_at":"2025-12-27T23:07:59.516202-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-w2n82","depends_on_id":"gt-eph-4wh","type":"parent-child","created_at":"2025-12-27T23:07:59.517052-08:00","created_by":"deacon"}]} {"id":"gt-w3bu","title":"gt spawn: Enter key needs debounce delay after paste","description":"## Problem\n\nWhen spawning polecats via `gt spawn`, instructions are pasted into tmux but workers often sit idle at prompt because the Enter key arrives before the paste is fully processed.\n\n## Observed Behavior\n\n- Instructions pasted via tmux send-keys\n- Enter key sent immediately after\n- Worker session shows prompt with no input (paste not submitted)\n- Requires manual intervention to nudge workers\n\n## Expected Behavior\n\n- Paste completes fully\n- Enter key submits the pasted instructions\n- Worker begins executing immediately\n\n## Root Cause\n\nLikely a race condition between paste buffer processing and keypress handling. Need either:\n1. Debounce delay before sending Enter\n2. Longer delay (Tmax) to ensure paste completes\n3. Alternative submission mechanism\n\n## Impact\n\n- Swarm of 10 workers had multiple stalls at startup\n- Required manual tmux send-keys to unstick them\n- Defeats purpose of automated spawning\n\n## References\n\n- Observed during Mad Max swarm (Dec 18, 2025)\n- Affects gt spawn command in internal/cmd/spawn.go","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-18T21:06:50.734123-08:00","updated_at":"2025-12-27T21:29:54.126014-08:00","deleted_at":"2025-12-27T21:29:54.126014-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} +{"id":"gt-w3cz7","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:51:32.440471-08:00","updated_at":"2025-12-25T10:51:32.440471-08:00","closed_at":"2025-12-25T10:51:32.440435-08:00"} {"id":"gt-w52o8","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:05:39.718034-08:00","updated_at":"2025-12-27T21:26:03.960258-08:00","deleted_at":"2025-12-27T21:26:03.960258-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-w5dj","title":"Merge: gt-unrd","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-unrd\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T15:42:06.600633-08:00","updated_at":"2025-12-27T21:27:22.750283-08:00","deleted_at":"2025-12-27T21:27:22.750283-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-w631c","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\n[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-25T00:57:46.905803-08:00","updated_at":"2025-12-27T21:29:57.783989-08:00","deleted_at":"2025-12-27T21:29:57.783989-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1854,7 +1854,6 @@ {"id":"gt-w98d","title":"witness Handoff","status":"pinned","priority":2,"issue_type":"task","created_at":"2025-12-23T16:23:42.292529-08:00","updated_at":"2025-12-27T18:14:41.837335-08:00"} {"id":"gt-w9o","title":"/restart: Personal slash command for in-place agent restart","description":"Create ~/.claude/commands/restart.md that restarts current Gas Town agent in place.\n\n## Detection\n- Read tmux session name: gt-mayor, gt-witness-*, gt-refinery-*, gt-polecat-*\n- Fallback: check GT_ROLE env var\n\n## Behavior by role\n- mayor: gt mayor restart (sends Ctrl-C, loop respawns)\n- witness: gt witness restart\n- refinery: gt refinery restart \n- polecat: gt polecat restart (or witness-mediated)\n\n## Command format\nUses backticks for inline bash to detect context, then instructs Claude to run appropriate restart.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T18:32:30.043125-08:00","updated_at":"2025-12-27T21:29:54.151093-08:00","deleted_at":"2025-12-27T21:29:54.151093-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wav5","title":"Merge: gt-a95","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-a95\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T21:23:08.375434-08:00","updated_at":"2025-12-27T21:27:22.642527-08:00","deleted_at":"2025-12-27T21:27:22.642527-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} -{"id":"gt-waw2f","title":"Digest: mol-deacon-patrol","description":"Patrol 13","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:55:55.319665-08:00","updated_at":"2025-12-26T14:55:55.319665-08:00","closed_at":"2025-12-26T14:55:55.31962-08:00"} {"id":"gt-wewf.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-wewf\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T00:10:43.433441-08:00","updated_at":"2025-12-27T21:29:55.6126-08:00","deleted_at":"2025-12-27T21:29:55.6126-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wexr","title":"Polecat role references deprecated 'swarm' terminology","description":"prompts/roles/polecat.md line 12 says:\n'Part of a swarm: Other polecats may be working on related issues in parallel'\n\nBut architecture.md explicitly states:\n'There are no swarm IDs - just epics with children'\n\nThe swarm concept has been replaced by streams/dependency model.\nUpdate polecat.md to remove swarm references.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-24T12:50:32.097647-08:00","updated_at":"2025-12-27T21:29:52.655198-08:00","dependencies":[{"issue_id":"gt-wexr","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:05.023976-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.655198-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-whpnr","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:09:46.3409-08:00","updated_at":"2025-12-27T21:26:01.082412-08:00","deleted_at":"2025-12-27T21:26:01.082412-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1862,23 +1861,23 @@ {"id":"gt-wisp-050","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with YAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents. Sequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.013101-08:00","updated_at":"2025-12-27T21:29:54.80869-08:00","deleted_at":"2025-12-27T21:29:54.80869-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-09v","title":"Handle callbacks from agents","description":"Handle callbacks from agents.\n\nCheck the Mayor's inbox for messages from:\n- Witnesses reporting polecat status\n- Refineries reporting merge results\n- Polecats requesting help or escalation\n- External triggers (webhooks, timers)\n\n```bash\ngt mail inbox\n# For each message:\ngt mail read \u003cid\u003e\n# Handle based on message type\n```\n\nCallbacks may spawn new polecats, update issue state, or trigger other actions.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.876898-08:00","updated_at":"2025-12-26T14:05:45.139618-08:00","closed_at":"2025-12-26T14:05:45.139618-08:00"} {"id":"gt-wisp-0ca","title":"Evaluate pending async gates","description":"Evaluate pending async gates.\n\nGates are async coordination primitives that block until conditions are met.\nThe Deacon is responsible for monitoring gates and closing them when ready.\n\n**Timer gates** (await_type: timer):\nCheck if elapsed time since creation exceeds the timeout duration.\n\n```bash\n# List all open gates\nbd gate list --json\n\n# For each timer gate, check if elapsed:\n# - CreatedAt + Timeout \u003c Now → gate is ready to close\n# - Close with: bd gate close \u003cid\u003e --reason \"Timer elapsed\"\n```\n\n**GitHub gates** (await_type: gh:run, gh:pr) - handled in separate step.\n\n**Human/Mail gates** - require external input, skip here.\n\nAfter closing a gate, the Waiters field contains mail addresses to notify.\nSend a brief notification to each waiter that the gate has cleared.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.877467-08:00","updated_at":"2025-12-27T21:29:54.860673-08:00","deleted_at":"2025-12-27T21:29:54.860673-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-wisp-1pv","title":"Clean dead sessions","description":"Clean dead sessions and orphaned state.\n\nRun `gt doctor --fix` to handle all cleanup:\n\n```bash\n# Preview what needs cleaning\ngt doctor -v\n\n# Fix everything\ngt doctor --fix\n```\n\nThis handles:\n- **orphan-sessions**: Kill orphaned tmux sessions (gt-* not matching valid patterns)\n- **orphan-processes**: Kill orphaned Claude processes (no tmux parent)\n- **wisp-gc**: Garbage collect abandoned wisps (\u003e1h old)\n\nAll cleanup is handled by doctor checks - no need to run separate commands.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.373152-08:00","updated_at":"2025-12-26T19:59:32.795791-08:00","closed_at":"2025-12-26T19:59:32.795791-08:00"} +{"id":"gt-wisp-271","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.04993-08:00","updated_at":"2025-12-26T13:09:27.201766-08:00","closed_at":"2025-12-26T13:09:27.201766-08:00","dependencies":[{"issue_id":"gt-wisp-271","depends_on_id":"gt-wisp-9ss","type":"blocks","created_at":"2025-12-26T13:04:23.202384-08:00","created_by":"deacon"}]} {"id":"gt-wisp-3fc","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Ensure state is saved to handoff bead\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue patrolling\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821372-08:00","updated_at":"2025-12-27T21:29:55.036103-08:00","dependencies":[{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.907769-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-hp3","type":"blocks","created_at":"2025-12-25T19:54:36.921536-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.036103-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-wisp-43x","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:04:17.501448-08:00","updated_at":"2025-12-25T19:04:17.501448-08:00"} {"id":"gt-wisp-48l","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses dynamic bonding to spawn mol-polecat-arm for each worker,\nenabling parallel inspection with a fanout gate for aggregation.\n\n## The Christmas Ornament Shape\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌────────┘ │ └────────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n inbox-check survey aggregate (WaitsFor: all-children)\n check-refnry │ save-state\n load-state │ generate-summary\n ↓ context-check\n ┌───────┼───────┐ burn-or-loop\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n```\n","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:54:36.819952-08:00","updated_at":"2025-12-27T21:26:02.441987-08:00","deleted_at":"2025-12-27T21:26:02.441987-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-wisp-4sy","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.878227-08:00","updated_at":"2025-12-26T14:07:15.467966-08:00","closed_at":"2025-12-26T14:07:15.467966-08:00"} -{"id":"gt-wisp-5av","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.878742-08:00","updated_at":"2025-12-26T20:07:45.184944-08:00","closed_at":"2025-12-26T20:07:45.184944-08:00"} -{"id":"gt-wisp-5ri","title":"Check Witness and Refinery health","description":"Check Witness and Refinery health for each rig.\n\n**ZFC Principle**: You (Claude) make the judgment call about what is \"stuck\" or \"unresponsive\" - there are no hardcoded thresholds in Go. Read the signals, consider context, and decide.\n\nFor each rig, run:\n```bash\ngt witness status \u003crig\u003e\ngt refinery status \u003crig\u003e\n```\n\n**Signals to assess:**\n\n| Component | Healthy Signals | Concerning Signals |\n|-----------|-----------------|-------------------|\n| Witness | State: running, recent activity | State: not running, no heartbeat |\n| Refinery | State: running, queue processing | Queue stuck, merge failures |\n\n**Tracking unresponsive cycles:**\n\nMaintain in your patrol state (persisted across cycles):\n```\nhealth_state:\n \u003crig\u003e:\n witness:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n refinery:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n```\n\n**Decision matrix** (you decide the thresholds based on context):\n\n| Cycles Unresponsive | Suggested Action |\n|---------------------|------------------|\n| 1-2 | Note it, check again next cycle |\n| 3-4 | Attempt restart: gt witness restart \u003crig\u003e |\n| 5+ | Escalate to Mayor with context |\n\n**Restart commands:**\n```bash\ngt witness restart \u003crig\u003e\ngt refinery restart \u003crig\u003e\n```\n\n**Escalation:**\n```bash\ngt mail send mayor/ -s \"Health: \u003crig\u003e \u003ccomponent\u003e unresponsive\" \\\n -m \"Component has been unresponsive for N cycles. Restart attempts failed.\n Last healthy: \u003ctimestamp\u003e\n Error signals: \u003cdetails\u003e\"\n```\n\nReset unresponsive_cycles to 0 when component responds normally.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.372405-08:00","updated_at":"2025-12-26T13:36:54.045993-08:00","closed_at":"2025-12-26T13:36:54.045993-08:00"} {"id":"gt-wisp-5yy","title":"Load persisted patrol state","description":"Read handoff bead and get nudge counts.\n\nLoad persistent state from the witness handoff bead:\n- Active workers and their status from last cycle\n- Nudge counts per worker per issue\n- Last nudge timestamps\n- Pending escalations\n\n```bash\nbd show \u003chandoff-bead-id\u003e\n```\n\nIf no handoff exists (fresh start), initialize empty state.\nThis state persists across wisp burns and session cycles.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.82212-08:00","updated_at":"2025-12-27T21:29:55.010987-08:00","dependencies":[{"issue_id":"gt-wisp-5yy","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.977849-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-5yy","depends_on_id":"gt-wisp-ps8","type":"blocks","created_at":"2025-12-25T19:54:36.992199-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.010987-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-7yg","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.878984-08:00","updated_at":"2025-12-27T21:29:54.852102-08:00","close_reason":"Orphan patrol step","deleted_at":"2025-12-27T21:29:54.852102-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-wisp-8cr","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize. The spawn command returns immediately without waiting. This step finds spawned polecats that are now ready and sends them a trigger to start working.\n\n**ZFC-Compliant Observation** (AI observes AI):\n\n```bash\n# View pending spawns with captured terminal output\ngt deacon pending\n```\n\nFor each pending session, analyze the captured output:\n- Look for Claude's prompt indicator \"\u003e \" at the start of a line\n- If prompt is visible, Claude is ready for input\n- Make the judgment call yourself - you're the AI observer\n\nFor each ready polecat:\n```bash\n# 1. Trigger the polecat\ngt nudge \u003csession\u003e \"Begin.\"\n\n# 2. Clear from pending list\ngt deacon pending \u003csession\u003e\n```\n\nThis triggers the UserPromptSubmit hook, which injects mail so the polecat sees its assignment.\n\n**Bootstrap mode** (daemon-only, no AI available):\nThe daemon uses `gt deacon trigger-pending` with regex detection. This ZFC violation is acceptable during cold startup when no AI agent is running yet.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.048419-08:00","updated_at":"2025-12-26T13:06:37.525763-08:00","closed_at":"2025-12-26T13:06:37.525763-08:00"} {"id":"gt-wisp-8g4","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.373414-08:00","updated_at":"2025-12-27T21:29:54.86914-08:00","deleted_at":"2025-12-27T21:29:54.86914-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-wisp-99t","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.014153-08:00","updated_at":"2025-12-26T20:07:45.150162-08:00","closed_at":"2025-12-26T20:07:45.150162-08:00","dependencies":[{"issue_id":"gt-wisp-99t","depends_on_id":"gt-wisp-mpm","type":"blocks","created_at":"2025-12-26T16:16:32.105946-08:00","created_by":"stevey"}]} {"id":"gt-wisp-9hf","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize. The spawn command returns immediately without waiting. This step finds spawned polecats that are now ready and sends them a trigger to start working.\n\n**ZFC-Compliant Observation** (AI observes AI):\n\n```bash\n# View pending spawns with captured terminal output\ngt deacon pending\n```\n\nFor each pending session, analyze the captured output:\n- Look for Claude's prompt indicator \"\u003e \" at the start of a line\n- If prompt is visible, Claude is ready for input\n- Make the judgment call yourself - you're the AI observer\n\nFor each ready polecat:\n```bash\n# 1. Trigger the polecat\ngt nudge \u003csession\u003e \"Begin.\"\n\n# 2. Clear from pending list\ngt deacon pending \u003csession\u003e\n```\n\nThis triggers the UserPromptSubmit hook, which injects mail so the polecat sees its assignment.\n\n**Bootstrap mode** (daemon-only, no AI available):\nThe daemon uses `gt deacon trigger-pending` with regex detection. This ZFC violation is acceptable during cold startup when no AI agent is running yet.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.01231-08:00","updated_at":"2025-12-27T21:29:54.817167-08:00","deleted_at":"2025-12-27T21:29:54.817167-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-wisp-9ss","title":"Clean dead sessions","description":"Clean dead sessions and orphaned state.\n\nRun `gt doctor --fix` to handle all cleanup:\n\n```bash\n# Preview what needs cleaning\ngt doctor -v\n\n# Fix everything\ngt doctor --fix\n```\n\nThis handles:\n- **orphan-sessions**: Kill orphaned tmux sessions (gt-* not matching valid patterns)\n- **orphan-processes**: Kill orphaned Claude processes (no tmux parent)\n- **wisp-gc**: Garbage collect abandoned wisps (\u003e1h old)\n\nAll cleanup is handled by doctor checks - no need to run separate commands.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.049699-08:00","updated_at":"2025-12-26T13:09:27.208152-08:00","closed_at":"2025-12-26T13:09:27.208152-08:00"} {"id":"gt-wisp-a1c","title":"Process witness mail","description":"Process witness mail: lifecycle requests, help requests.\n\n```bash\ngt mail inbox\n```\n\nHandle by message type:\n- **LIFECYCLE/Shutdown**: Queue for pre-kill verification\n- **Blocked/Help**: Assess if resolvable or escalate\n- **HANDOFF**: Load predecessor state\n- **Work complete**: Verify issue closed, proceed to pre-kill\n\nRecord any pending actions for later steps.\nMark messages as processed when complete.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821859-08:00","updated_at":"2025-12-27T21:29:55.019343-08:00","dependencies":[{"issue_id":"gt-wisp-a1c","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.963525-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.019343-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-wisp-bol","title":"Check Witness and Refinery health","description":"Check Witness and Refinery health for each rig.\n\n**ZFC Principle**: You (Claude) make the judgment call about what is \"stuck\" or \"unresponsive\" - there are no hardcoded thresholds in Go. Read the signals, consider context, and decide.\n\nFor each rig, run:\n```bash\ngt witness status \u003crig\u003e\ngt refinery status \u003crig\u003e\n```\n\n**Signals to assess:**\n\n| Component | Healthy Signals | Concerning Signals |\n|-----------|-----------------|-------------------|\n| Witness | State: running, recent activity | State: not running, no heartbeat |\n| Refinery | State: running, queue processing | Queue stuck, merge failures |\n\n**Tracking unresponsive cycles:**\n\nMaintain in your patrol state (persisted across cycles):\n```\nhealth_state:\n \u003crig\u003e:\n witness:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n refinery:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n```\n\n**Decision matrix** (you decide the thresholds based on context):\n\n| Cycles Unresponsive | Suggested Action |\n|---------------------|------------------|\n| 1-2 | Note it, check again next cycle |\n| 3-4 | Attempt restart: gt witness restart \u003crig\u003e |\n| 5+ | Escalate to Mayor with context |\n\n**Restart commands:**\n```bash\ngt witness restart \u003crig\u003e\ngt refinery restart \u003crig\u003e\n```\n\n**Escalation:**\n```bash\ngt mail send mayor/ -s \"Health: \u003crig\u003e \u003ccomponent\u003e unresponsive\" \\\n -m \"Component has been unresponsive for N cycles. Restart attempts failed.\n Last healthy: \u003ctimestamp\u003e\n Error signals: \u003cdetails\u003e\"\n```\n\nReset unresponsive_cycles to 0 when component responds normally.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.501992-08:00","updated_at":"2025-12-25T19:55:55.596967-08:00","closed_at":"2025-12-25T19:55:55.596967-08:00"} {"id":"gt-wisp-cas","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with YAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents. Sequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.049219-08:00","updated_at":"2025-12-26T13:07:53.269781-08:00","closed_at":"2025-12-26T13:07:53.269781-08:00","dependencies":[{"issue_id":"gt-wisp-cas","depends_on_id":"gt-wisp-u84","type":"blocks","created_at":"2025-12-26T13:04:23.173039-08:00","created_by":"deacon"}]} {"id":"gt-wisp-h5d","title":"Persist patrol state","description":"Update handoff bead with new states.\n\nPersist state to the witness handoff bead:\n- Updated worker statuses from all arms\n- Current nudge counts per worker\n- Nudge timestamps\n- Actions taken this cycle\n- Pending items for next cycle\n\n```bash\nbd update \u003chandoff-bead-id\u003e --description=\"\u003cserialized state\u003e\"\n```\n\nThis state survives wisp burns and session cycles.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822355-08:00","updated_at":"2025-12-27T21:29:55.002586-08:00","dependencies":[{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:37.006252-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-lsd","type":"blocks","created_at":"2025-12-25T19:54:37.020736-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.002586-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-hp3","title":"Generate handoff summary","description":"Summarize this patrol cycle for digest.\n\nInclude:\n- Workers inspected (count, names)\n- Nudges sent (count, to whom)\n- Sessions killed (count, names)\n- Escalations (count, issues)\n- Issues found (brief descriptions)\n- Actions pending for next cycle\n\nThis becomes the digest when the patrol wisp is squashed.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821607-08:00","updated_at":"2025-12-27T21:29:55.027795-08:00","dependencies":[{"issue_id":"gt-wisp-hp3","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.93569-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-hp3","depends_on_id":"gt-wisp-h5d","type":"blocks","created_at":"2025-12-25T19:54:36.949594-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.027795-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-hzw","title":"Clean dead sessions","description":"Clean dead sessions.\n\nGarbage collect terminated sessions:\n- Remove stale polecat directories\n- Clean up wisp session artifacts\n- Prune old logs and temp files\n- Archive completed molecule state\n\n```bash\ngt gc --sessions\ngt gc --wisps --age=1h\n```\n\nPreserve audit trail. Only clean sessions confirmed dead.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.502717-08:00","updated_at":"2025-12-27T21:29:54.969003-08:00","dependencies":[{"issue_id":"gt-wisp-hzw","depends_on_id":"gt-wisp-nna","type":"blocks","created_at":"2025-12-25T19:55:37.675362-08:00","created_by":"deacon"}],"deleted_at":"2025-12-27T21:29:54.969003-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-wisp-ibj","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-26T15:38:55.470805-08:00","updated_at":"2025-12-26T15:39:36.082717-08:00","closed_at":"2025-12-26T15:39:36.082717-08:00"} {"id":"gt-wisp-krx","title":"Evaluate pending async gates","description":"Evaluate pending async gates.\n\nGates are async coordination primitives that block until conditions are met.\nThe Deacon is responsible for monitoring gates and closing them when ready.\n\n**Timer gates** (await_type: timer):\nCheck if elapsed time since creation exceeds the timeout duration.\n\n```bash\n# List all open gates\nbd gate list --json\n\n# For each timer gate, check if elapsed:\n# - CreatedAt + Timeout \u003c Now → gate is ready to close\n# - Close with: bd gate close \u003cid\u003e --reason \"Timer elapsed\"\n```\n\n**GitHub gates** (await_type: gh:run, gh:pr) - handled in separate step.\n\n**Human/Mail gates** - require external input, skip here.\n\nAfter closing a gate, the Waiters field contains mail addresses to notify.\nSend a brief notification to each waiter that the gate has cleared.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.012588-08:00","updated_at":"2025-12-26T16:17:46.361337-08:00","closed_at":"2025-12-26T16:17:46.361337-08:00"} {"id":"gt-wisp-lkc","title":"Clean dead sessions","description":"Clean dead sessions and orphaned state.\n\nRun `gt doctor --fix` to handle all cleanup:\n\n```bash\n# Preview what needs cleaning\ngt doctor -v\n\n# Fix everything\ngt doctor --fix\n```\n\nThis handles:\n- **orphan-sessions**: Kill orphaned tmux sessions (gt-* not matching valid patterns)\n- **orphan-processes**: Kill orphaned Claude processes (no tmux parent)\n- **wisp-gc**: Garbage collect abandoned wisps (\u003e1h old)\n\nAll cleanup is handled by doctor checks - no need to run separate commands.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.013602-08:00","updated_at":"2025-12-27T21:29:54.800179-08:00","close_reason":"Ephemeral patrol molecules should not be in beads - filed bd-xxx to investigate","deleted_at":"2025-12-27T21:29:54.800179-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-lsd","title":"Aggregate arm results","description":"Collect outcomes from all polecat inspection arms.\n\nThis is a **fanout gate** - it cannot proceed until ALL dynamically-bonded\npolecat arms have completed their inspection cycles.\n\nOnce all arms complete, collect their outcomes:\n- Actions taken per polecat (nudge, kill, escalate, none)\n- Updated nudge counts\n- Any errors or issues discovered\n\nBuild the consolidated state for save-state.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.820571-08:00","updated_at":"2025-12-27T21:29:55.064377-08:00","dependencies":[{"issue_id":"gt-wisp-lsd","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.822951-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-lsd","depends_on_id":"gt-wisp-q5d","type":"blocks","created_at":"2025-12-25T19:54:36.837897-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.064377-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1886,13 +1885,13 @@ {"id":"gt-wisp-mpm","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.01385-08:00","updated_at":"2025-12-27T21:29:54.791712-08:00","close_reason":"Ephemeral patrol molecules should not be in beads - filed bd-xxx to investigate","dependencies":[{"issue_id":"gt-wisp-mpm","depends_on_id":"gt-wisp-lkc","type":"blocks","created_at":"2025-12-26T16:16:32.100079-08:00","created_by":"stevey"}],"deleted_at":"2025-12-27T21:29:54.791712-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-nna","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.502477-08:00","updated_at":"2025-12-27T21:29:54.977222-08:00","deleted_at":"2025-12-27T21:29:54.977222-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-oe4","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-26T14:14:37.79452-08:00","updated_at":"2025-12-27T21:26:01.73748-08:00","deleted_at":"2025-12-27T21:26:01.73748-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} -{"id":"gt-wisp-ovv","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:33:32.627542-08:00","updated_at":"2025-12-25T21:03:00.233563-08:00","closed_at":"2025-12-25T21:03:00.233563-08:00"} {"id":"gt-wisp-ps8","title":"Ensure refinery is alive","description":"Ensure the refinery is alive and processing merge requests.\n\n**Redundant system**: This check runs in both gt spawn and Witness patrol\nto ensure the merge queue processor stays operational.\n\n```bash\n# Check if refinery session is running\ngt session status \u003crig\u003e/refinery\n\n# Check for merge requests in queue\nbd list --type=merge-request --status=open\n```\n\nIf merge requests are waiting AND refinery is not running:\n```bash\ngt session start \u003crig\u003e/refinery\ngt mail send \u003crig\u003e/refinery -s \"PATROL: Wake up\" -m \"Merge requests in queue. Please process.\"\n```\n\nIf refinery is running but queue is non-empty for \u003e30 min, send nudge.\nThis ensures polecats don't wait forever for their branches to merge.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821127-08:00","updated_at":"2025-12-27T21:29:55.047335-08:00","dependencies":[{"issue_id":"gt-wisp-ps8","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.880056-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-ps8","depends_on_id":"gt-wisp-a1c","type":"blocks","created_at":"2025-12-25T19:54:36.893717-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.047335-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-q5d","title":"Survey all polecats (fanout)","description":"List polecats and bond mol-polecat-arm for each one.\n\n```bash\n# Get list of polecats\ngt polecat list \u003crig\u003e\n```\n\nFor each polecat discovered, dynamically bond an inspection arm:\n\n```bash\n# Bond mol-polecat-arm for each polecat\nfor polecat in $(gt polecat list \u003crig\u003e --names); do\n bd mol bond mol-polecat-arm $PATROL_WISP_ID \\\n --ref arm-$polecat \\\n --var polecat_name=$polecat \\\n --var rig=\u003crig\u003e\ndone\n```\n\nThis creates child wisps like:\n- patrol-x7k.arm-ace (5 steps)\n- patrol-x7k.arm-nux (5 steps)\n- patrol-x7k.arm-toast (5 steps)\n\nEach arm runs in PARALLEL. The aggregate step will wait for all to complete.\n\nIf no polecats are found, this step completes immediately with no children.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822584-08:00","updated_at":"2025-12-27T21:29:54.994173-08:00","dependencies":[{"issue_id":"gt-wisp-q5d","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:37.034999-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-q5d","depends_on_id":"gt-wisp-5yy","type":"blocks","created_at":"2025-12-25T19:54:37.049799-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:54.994173-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-qx6","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses dynamic bonding to spawn mol-polecat-arm for each worker,\nenabling parallel inspection with a fanout gate for aggregation.\n\n## The Christmas Ornament Shape\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌────────┘ │ └────────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n inbox-check survey aggregate (WaitsFor: all-children)\n check-refnry │ save-state\n load-state │ generate-summary\n ↓ context-check\n ┌───────┼───────┐ burn-or-loop\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n```\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:48:34.05296-08:00","updated_at":"2025-12-26T19:59:32.832833-08:00","closed_at":"2025-12-26T19:59:32.832833-08:00"} +{"id":"gt-wisp-su2","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize. The spawn command returns immediately without waiting. This step finds spawned polecats that are now ready and sends them a trigger to start working.\n\n**ZFC-Compliant Observation** (AI observes AI):\n\n```bash\n# View pending spawns with captured terminal output\ngt deacon pending\n```\n\nFor each pending session, analyze the captured output:\n- Look for Claude's prompt indicator \"\u003e \" at the start of a line\n- If prompt is visible, Claude is ready for input\n- Make the judgment call yourself - you're the AI observer\n\nFor each ready polecat:\n```bash\n# 1. Trigger the polecat\ngt nudge \u003csession\u003e \"Begin.\"\n\n# 2. Clear from pending list\ngt deacon pending \u003csession\u003e\n```\n\nThis triggers the UserPromptSubmit hook, which injects mail so the polecat sees its assignment.\n\n**Bootstrap mode** (daemon-only, no AI available):\nThe daemon uses `gt deacon trigger-pending` with regex detection. This ZFC violation is acceptable during cold startup when no AI agent is running yet.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.371871-08:00","updated_at":"2025-12-26T13:35:46.128446-08:00","closed_at":"2025-12-26T13:35:46.128446-08:00"} {"id":"gt-wisp-u84","title":"Check Witness and Refinery health","description":"Check Witness and Refinery health for each rig.\n\n**ZFC Principle**: You (Claude) make the judgment call about what is \"stuck\" or \"unresponsive\" - there are no hardcoded thresholds in Go. Read the signals, consider context, and decide.\n\nFor each rig, run:\n```bash\ngt witness status \u003crig\u003e\ngt refinery status \u003crig\u003e\n```\n\n**Signals to assess:**\n\n| Component | Healthy Signals | Concerning Signals |\n|-----------|-----------------|-------------------|\n| Witness | State: running, recent activity | State: not running, no heartbeat |\n| Refinery | State: running, queue processing | Queue stuck, merge failures |\n\n**Tracking unresponsive cycles:**\n\nMaintain in your patrol state (persisted across cycles):\n```\nhealth_state:\n \u003crig\u003e:\n witness:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n refinery:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n```\n\n**Decision matrix** (you decide the thresholds based on context):\n\n| Cycles Unresponsive | Suggested Action |\n|---------------------|------------------|\n| 1-2 | Note it, check again next cycle |\n| 3-4 | Attempt restart: gt witness restart \u003crig\u003e |\n| 5+ | Escalate to Mayor with context |\n\n**Restart commands:**\n```bash\ngt witness restart \u003crig\u003e\ngt refinery restart \u003crig\u003e\n```\n\n**Escalation:**\n```bash\ngt mail send mayor/ -s \"Health: \u003crig\u003e \u003ccomponent\u003e unresponsive\" \\\n -m \"Component has been unresponsive for N cycles. Restart attempts failed.\n Last healthy: \u003ctimestamp\u003e\n Error signals: \u003cdetails\u003e\"\n```\n\nReset unresponsive_cycles to 0 when component responds normally.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.048979-08:00","updated_at":"2025-12-27T21:29:54.877603-08:00","deleted_at":"2025-12-27T21:29:54.877603-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-wisp-uvq","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.373669-08:00","updated_at":"2025-12-26T19:59:32.722239-08:00","closed_at":"2025-12-26T19:59:32.722239-08:00","dependencies":[{"issue_id":"gt-wisp-uvq","depends_on_id":"gt-wisp-8g4","type":"blocks","created_at":"2025-12-26T13:34:16.470344-08:00","created_by":"deacon"}]} {"id":"gt-wisp-yj8","title":"Burn and respawn or loop","description":"End of patrol cycle decision.\n\nIf context is LOW:\n- Burn this wisp (no audit trail needed for patrol cycles)\n- Sleep briefly to avoid tight loop (30-60 seconds)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Burn wisp with summary digest\n- Exit cleanly (daemon will respawn fresh Witness)\n\n```bash\nbd mol burn # Destroy ephemeral wisp\n```\n\nThe daemon ensures Witness is always running.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.820851-08:00","updated_at":"2025-12-27T21:29:55.056026-08:00","dependencies":[{"issue_id":"gt-wisp-yj8","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.852513-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-yj8","depends_on_id":"gt-wisp-3fc","type":"blocks","created_at":"2025-12-25T19:54:36.86625-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.056026-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-wisp-zlz","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:29:39.281453-08:00","updated_at":"2025-12-25T19:29:39.281453-08:00"} {"id":"gt-wiu7y","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 17: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:47:37.442727-08:00","updated_at":"2025-12-27T21:26:01.33713-08:00","deleted_at":"2025-12-27T21:26:01.33713-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wjd6q","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 10: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:44:33.548312-08:00","updated_at":"2025-12-27T21:26:01.394216-08:00","deleted_at":"2025-12-27T21:26:01.394216-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wmhj","title":"tmux link-window auto-selects new window, causing agent confusion","description":"## Summary\n\nWhen running `gt crew at \u003cother\u003e` from inside a tmux session, the linked window auto-selects, causing the user to unknowingly switch agents.\n\n## Root Cause\n\n`internal/tmux/tmux.go:535-538` - `LinkWindow` doesn't use `-d` flag:\n```go\n_, err := t.run(\"link-window\", \"-s\", source) // Missing -d!\n```\n\nBy default, `tmux link-window` selects the newly linked window.\n\n## Reproduction\n\n1. Be in Max's tmux session talking to Max\n2. Ask Max to run `gt crew at joe`\n3. Max creates Joe's session and links it\n4. User is now in Joe's window without realizing it\n5. Max appears to have 'disappeared'\n\n## Fix\n\nAdd `-d` flag to prevent auto-selection:\n```go\n_, err := t.run(\"link-window\", \"-s\", source, \"-d\")\n```\n\n## Related\n\n- gt-09i4: Unify tmux session lifecycle (broader epic Max filed)\n","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-24T14:33:40.40319-08:00","updated_at":"2025-12-27T21:29:52.61366-08:00","deleted_at":"2025-12-27T21:29:52.61366-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} @@ -1912,7 +1911,6 @@ {"id":"gt-wtnb5","title":"Digest: mol-deacon-patrol","description":"Patrol 5: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:16:31.082548-08:00","updated_at":"2025-12-25T10:16:31.082548-08:00","closed_at":"2025-12-25T10:16:31.082511-08:00"} {"id":"gt-wugqp","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final patrol, 11 sessions healthy, no incidents","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:20:38.900039-08:00","updated_at":"2025-12-27T21:26:02.642504-08:00","deleted_at":"2025-12-27T21:26:02.642504-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wusk","title":"Layered context onboarding pattern","description":"Pattern from handoff discussion:\n\n## Pattern: Layered Context Onboarding\n\nTown CLAUDE.md (user/org) -\u003e Rig CLAUDE.md (project) -\u003e Role priming\n\n## Ultra-compressed HOP for workers (no reveal)\n\n- Permanent record: All work tracked. Outcomes matter.\n- Quality gates: Molecule steps exist for a reason.\n- Attribution: Completions build your track record.\n- Handoff clean: Leave state any worker can continue.\n\n## Recommendation\n\nCreate Town @AGENTS.md for shared worker context that all workers see.\nThis provides common behavioral guidance without revealing full HOP context.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-20T00:55:11.984103-08:00","updated_at":"2025-12-20T00:55:11.984103-08:00"} -{"id":"gt-wv582","title":"Digest: mol-deacon-patrol","description":"Patrol 7: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T20:02:35.667778-08:00","updated_at":"2025-12-26T20:02:35.667778-08:00","closed_at":"2025-12-26T20:02:35.66773-08:00"} {"id":"gt-wvycd","title":"Digest: mol-deacon-patrol","description":"Patrol 10: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:44:08.199048-08:00","updated_at":"2025-12-27T21:26:03.206256-08:00","deleted_at":"2025-12-27T21:26:03.206256-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wvyi","title":"sling pin test 2","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T11:51:01.899435-08:00","updated_at":"2025-12-27T21:29:56.035136-08:00","deleted_at":"2025-12-27T21:29:56.035136-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wx0w","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- gt-1wmw - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-24T22:54:21.058362-08:00","updated_at":"2025-12-27T21:29:55.368789-08:00","deleted_at":"2025-12-27T21:29:55.368789-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} @@ -1932,6 +1930,7 @@ {"id":"gt-x9tk","title":"Merge: gt-j6s8","description":"branch: polecat/dementus\ntarget: main\nsource_issue: gt-j6s8\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T01:15:22.372353-08:00","updated_at":"2025-12-27T21:27:22.451878-08:00","deleted_at":"2025-12-27T21:27:22.451878-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-xbfw","title":"Missing standard OSS files: CONTRIBUTING, CODE_OF_CONDUCT, SECURITY","description":"For OSS launch, we need:\n1. CONTRIBUTING.md - How to contribute, PR process, code style\n2. CODE_OF_CONDUCT.md - Community standards\n3. SECURITY.md - How to report vulnerabilities\n\nThese are expected by OSS communities and GitHub surfaces them in repo UI.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-24T12:50:30.389345-08:00","updated_at":"2025-12-27T21:29:52.663509-08:00","dependencies":[{"issue_id":"gt-xbfw","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:04.941476-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.663509-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xdhg","title":"test sling pinned","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T11:47:46.118753-08:00","updated_at":"2025-12-27T21:29:56.051683-08:00","deleted_at":"2025-12-27T21:29:56.051683-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-xedvd","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:19:25.262774-08:00","updated_at":"2025-12-27T21:26:00.230092-08:00","dependencies":[{"issue_id":"gt-xedvd","depends_on_id":"gt-eph-22v","type":"parent-child","created_at":"2025-12-27T20:19:25.263632-08:00","created_by":"deacon"}],"deleted_at":"2025-12-27T21:26:00.230092-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xf3fi","title":"Digest: mol-deacon-patrol","description":"P17","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:27:01.581886-08:00","updated_at":"2025-12-27T21:26:01.601729-08:00","deleted_at":"2025-12-27T21:26:01.601729-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xf5d","title":"Digest: mol-deacon-patrol","description":"Patrol 9","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:57.919962-08:00","updated_at":"2025-12-27T21:26:04.449625-08:00","deleted_at":"2025-12-27T21:26:04.449625-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xfznm","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:59:55.813534-08:00","updated_at":"2025-12-27T21:26:00.490588-08:00","deleted_at":"2025-12-27T21:26:00.490588-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1976,6 +1975,7 @@ {"id":"gt-y5o","title":"Daemon: verify requesting_cycle before kill","description":"Per gt-gby spec, daemon should verify agent state shows requesting_cycle=true before killing session. Currently kills on any lifecycle request without verification.\n\nRequires state.json in agent workspace with requesting_cycle field.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-18T13:38:13.049988-08:00","updated_at":"2025-12-27T21:29:57.197132-08:00","dependencies":[{"issue_id":"gt-y5o","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T13:38:26.590883-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.197132-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-y68zm","title":"Digest: mol-deacon-patrol","description":"Patrol 5: 11 sessions, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:05.583458-08:00","updated_at":"2025-12-27T21:26:02.171656-08:00","deleted_at":"2025-12-27T21:26:02.171656-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-y9gj3","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:14:49.293338-08:00","updated_at":"2025-12-27T21:26:03.59315-08:00","deleted_at":"2025-12-27T21:26:03.59315-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-y9kjw","title":"Digest: mol-deacon-patrol","description":"Patrol 9","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T20:03:12.897092-08:00","updated_at":"2025-12-26T20:03:12.897092-08:00","closed_at":"2025-12-26T20:03:12.897044-08:00"} {"id":"gt-y9vm3","title":"Digest: mol-deacon-patrol","description":"Patrol 4: 9 sessions healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T07:25:34.660496-08:00","updated_at":"2025-12-27T21:26:03.660185-08:00","deleted_at":"2025-12-27T21:26:03.660185-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-yc0ok","title":"Digest: mol-deacon-patrol","description":"Patrol 13","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:52:10.828566-08:00","updated_at":"2025-12-27T21:26:02.002622-08:00","deleted_at":"2025-12-27T21:26:02.002622-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-yd98","title":"Molecule format bridge: convert embedded markdown to child issues","description":"## Problem\n\nTwo molecule formats exist:\n1. **Old (gastown builtin)**: Steps embedded as markdown in Description field, parsed by ParseMoleculeSteps()\n2. **New (bd mol)**: Steps as child issues in proper beads DAG\n\nThe daemon's InstantiateMolecule() uses the old format. bd mol spawn uses the new format.\n\n## Options\n\n### Option A: Require child issues (new format)\n- Update daemon to use bd mol spawn instead of InstantiateMolecule\n- Deprecate embedded markdown format\n- Pro: One format, simpler\n- Con: Breaking change for existing molecules\n\n### Option B: Build a bridge\n- In InstantiateMolecule, detect format:\n - If Description has ## Step: markers → parse to child issues\n - If issue has children with template label → use directly\n- Convert old format to new format on instantiation\n- Pro: Backward compatible\n- Con: More complexity\n\n## Recommendation\n\nOption B - build the bridge. On instantiation, convert markdown steps to child issues. This unifies execution while preserving authoring flexibility.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T17:55:15.751168-08:00","updated_at":"2025-12-27T21:29:53.392446-08:00","deleted_at":"2025-12-27T21:29:53.392446-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1991,6 +1991,7 @@ {"id":"gt-yk4r","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:50.175501-08:00","updated_at":"2025-12-27T21:26:04.524177-08:00","deleted_at":"2025-12-27T21:26:04.524177-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-yl5sd","title":"Digest: mol-deacon-patrol","description":"Patrol 2 complete: all systems healthy, no incidents","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:18:42.52511-08:00","updated_at":"2025-12-27T21:26:00.246331-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-yl5sd","depends_on_id":"gt-eph-v3c","type":"parent-child","created_at":"2025-12-27T20:18:42.525904-08:00","created_by":"deacon"}],"deleted_at":"2025-12-27T21:26:00.246331-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-yls","title":"Document merge queue architecture","description":"Update docs/architecture.md with:\n\n- Merge Queue section explaining Beads-native approach\n- Engineer role (renamed from Refinery)\n- Session restart protocol\n- gt mq command reference\n- Federation considerations for queue\n\nAlso update any references to .gastown/ → config/.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T23:02:41.533065-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-yls","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:56.043373-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} +{"id":"gt-ynb5f","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:59:22.583497-08:00","updated_at":"2025-12-26T13:59:22.583497-08:00","closed_at":"2025-12-26T13:59:22.583455-08:00"} {"id":"gt-ynp6","title":"gt context --usage: estimate remaining context via tmux line count","description":"## Summary\n\nImplement `gt context --usage` to estimate remaining context capacity.\n\n## Approach\n\nUse tmux scrollback buffer line count as proxy for token usage:\n- `tmux capture-pane -p | wc -l` gives current line count\n- Heuristics (tunable per model):\n - Opus 4.5: ~1800 lines = warning threshold\n - ~2000+ lines = critical, need handoff\n\n## Output Format\n```\nContext Usage: 1642 lines (~82%)\nStatus: WARNING - consider handoff soon\n```\n\n## Notes\n- Heuristics are model-specific, need config\n- Line count is proxy, not exact token count\n- Good enough for autonomous patrol decisions","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-23T01:19:13.108332-08:00","updated_at":"2025-12-27T21:29:56.26736-08:00","deleted_at":"2025-12-27T21:29:56.26736-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-yt1yc","title":"Digest: mol-deacon-patrol","description":"P16: stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:14:21.241655-08:00","updated_at":"2025-12-27T21:26:02.23698-08:00","deleted_at":"2025-12-27T21:26:02.23698-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-yt6g","title":"Standardize session end: gt handoff for all roles","description":"## Summary\n\nStandardize session ending across all agent roles to use `gt handoff` as the canonical command. This is critical for the beads propulsion cycle - turning agent sessions from pets into cattle.\n\n## Current State (Inconsistent)\n\n| Role | Current Guidance | Command |\n|------|-----------------|---------|\n| Mayor | Manual mail send | `gt mail send mayor/ -s 'HANDOFF:...' -m '...'` |\n| Crew | Manual mail send | `gt mail send \u003crig\u003e/crew/\u003cname\u003e -s 'HANDOFF:...' -m '...'` |\n| Witness | Manual mail send | `gt mail send \u003crig\u003e/witness -s 'HANDOFF:...' -m '...'` |\n| Refinery | Manual mail send | `gt mail send \u003crig\u003e/refinery -s 'HANDOFF:...' -m '...'` |\n| Deacon | Exit on high context | (implicit) |\n| Polecat | `gt done` | `gt done [--exit TYPE]` |\n\n## Target State (Unified)\n\nAll roles use `gt handoff`:\n- `gt handoff` - Hand off current session to fresh instance\n- `gt handoff -s 'context' -m 'details'` - Hand off with custom message\n- For polecats: `gt handoff` internally calls `gt done`\n\n## Changes Required\n\n### 1. Code Changes\n- [ ] Update `gt handoff` to detect polecat role and call `gt done` internally\n- [ ] Consider adding `--exit` flag to `gt handoff` for polecat compatibility\n\n### 2. CLAUDE.md Updates (gastown)\n- [ ] ~/gt/CLAUDE.md (Mayor)\n- [ ] gastown/crew/max/CLAUDE.md\n- [ ] gastown/crew/joe/CLAUDE.md\n- [ ] gastown/witness/CLAUDE.md\n- [ ] gastown/refinery/CLAUDE.md (and rig/)\n- [ ] deacon/CLAUDE.md\n\n### 3. CLAUDE.md Updates (beads)\n- [ ] beads/mayor/rig/CLAUDE.md\n- [ ] beads/crew/dave/CLAUDE.md\n- [ ] beads/crew/zoey/CLAUDE.md\n- [ ] beads/witness/CLAUDE.md\n- [ ] beads/refinery/CLAUDE.md (and rig/)\n\n### 4. Architecture Docs\n- [ ] docs/patrol-system-design.md\n- [ ] gastown/mayor/rig/docs/prompts.md\n- [ ] gastown/mayor/rig/docs/session-management.md\n\n## New Session End Checklist (Universal)\n\n```\n# SESSION CLOSE PROTOCOL\n\n[ ] 1. git status (check uncommitted changes)\n[ ] 2. git add \u003cfiles\u003e (stage changes)\n[ ] 3. git commit -m '...' (commit with issue ID)\n[ ] 4. bd sync (sync beads)\n[ ] 5. git push (push to remote - CRITICAL)\n[ ] 6. gt handoff (hand off to fresh session)\n OR gt handoff -s 'Context' -m 'Details for next session'\n```\n\n## Why This Matters\n\nThe handoff mechanism is what turns agent sessions from **pets** (precious, long-lived) into **cattle** (disposable, replaceable). At any time, any agent can:\n1. Send itself a detailed handoff mail (or sling itself a mol)\n2. System shuts them down and restarts them\n3. Fresh session runs priming and reads mail\n4. Work continues seamlessly\n\nThis enables:\n- Unlimited context through automatic cycling\n- Clean recovery from any state\n- Consistent behavior across all roles\n- Simplified agent instructions","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T12:57:25.246279-08:00","updated_at":"2025-12-27T21:29:53.032182-08:00","deleted_at":"2025-12-27T21:29:53.032182-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2011,7 +2012,6 @@ {"id":"gt-z4pfn","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:29:04.948214-08:00","updated_at":"2025-12-27T21:26:03.935749-08:00","deleted_at":"2025-12-27T21:26:03.935749-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-z5q73","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:50:30.49576-08:00","updated_at":"2025-12-25T20:50:30.49576-08:00","closed_at":"2025-12-25T20:50:30.495714-08:00"} {"id":"gt-z6a5","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:43","description":"Patrol 3: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:43:12.75587-08:00","updated_at":"2025-12-27T21:26:05.162706-08:00","deleted_at":"2025-12-27T21:26:05.162706-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-z6sly","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:48:08.290341-08:00","updated_at":"2025-12-26T17:48:08.290341-08:00","closed_at":"2025-12-26T17:48:08.290305-08:00"} {"id":"gt-z7hwn","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:15:32.191569-08:00","updated_at":"2025-12-27T21:26:02.740518-08:00","deleted_at":"2025-12-27T21:26:02.740518-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-z80br","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Routine, witnesses/refineries healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:49:11.210041-08:00","updated_at":"2025-12-27T21:26:02.019378-08:00","deleted_at":"2025-12-27T21:26:02.019378-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-z8dq9","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T17:47:45.797255-08:00","updated_at":"2025-12-27T21:26:01.116267-08:00","deleted_at":"2025-12-27T21:26:01.116267-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2026,6 +2026,7 @@ {"id":"gt-zb9v","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:47","description":"Patrol 15: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:47:12.561963-08:00","updated_at":"2025-12-27T21:26:05.071037-08:00","deleted_at":"2025-12-27T21:26:05.071037-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-zbcwk","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:10.853312-08:00","updated_at":"2025-12-27T21:26:02.0899-08:00","deleted_at":"2025-12-27T21:26:02.0899-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-zbmg8","title":"gt status should show runtime state, not just structure","description":"## Problem\n`gt status` shows structural info (which crews exist) but not runtime reality (which sessions are running).\n\n## Current Output\n- Shows 'Crews: [dave emma zoey]' but doesn't indicate dave is crashed\n- Missing Deacon from output entirely\n- Hooks shown but unclear if agents are alive\n\n## Expected\n- Show which tmux sessions are actually running\n- Indicate crashed/missing sessions with warning\n- Include all roles (Mayor, Deacon, Witnesses, Refineries, Crews)\n- Distinguish between:\n - Structure: what COULD run\n - Runtime: what IS running\n\n## Example Better Output\n```\nAgents\n mayor ✓ running (gt-mayor)\n deacon ✓ running (gt-deacon)\n \nRigs\n beads\n witness ✓ running\n refinery ✓ running \n crew/dave ✗ CRASHED (session missing)\n crew/emma ✓ running\n gastown\n witness ✓ running\n refinery ✓ running\n crew/max ✗ CRASHED (session missing)\n```","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-26T15:31:12.30459-08:00","updated_at":"2025-12-27T21:29:45.874138-08:00","deleted_at":"2025-12-27T21:29:45.874138-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} +{"id":"gt-zbqa6","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:35:29.743129-08:00","updated_at":"2025-12-25T20:35:29.743129-08:00","closed_at":"2025-12-25T20:35:29.743075-08:00"} {"id":"gt-zbx5","title":"Merge: gt-rana.2","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-rana.2\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:17:31.287004-08:00","updated_at":"2025-12-27T21:27:22.60134-08:00","deleted_at":"2025-12-27T21:27:22.60134-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-zde4","title":"CRITICAL: Witness hallucinated swarm work instead of spawning polecats","description":"The Witness was asked to spawn 12 polecats for a swarm. Instead of actually spawning polecats and doing the work, it:\n\n1. Displayed 'Spawning 12 polecats...' with gt spawn commands shown as 'Waiting'\n2. Then immediately showed all 12 issues as 'closed' with plausible-sounding close reasons\n3. No actual polecats were spawned (gt polecat list beads shows 'No active polecats')\n4. No git commits were made\n5. The claimed code changes don't exist in the codebase\n\nExample fake close reasons:\n- bd-d28c: 'Added 10 tests covering createTombstone and deleteIssue wrappers with 100% coverage'\n- bd-c7y5: 'Implemented --tombstones-only flag for bd compact'\n\nVerification:\n```\n$ grep -r 'createTombstone' internal/rpc/*_test.go # No output\n$ grep -r 'tombstones-only' cmd/bd/*.go # No output\n$ git log --oneline --since='1 hour ago' # No commits\n```\n\nThis is a severe trust violation. The Witness needs guardrails to:\n1. Actually verify polecats were spawned before reporting success\n2. Verify git commits exist before closing issues\n3. Never close issues it didn't actually work on","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-23T21:18:45.787608-08:00","updated_at":"2025-12-27T21:29:45.460519-08:00","deleted_at":"2025-12-27T21:29:45.460519-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-zfe0","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:29","description":"Patrol 19","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:29:15.965892-08:00","updated_at":"2025-12-27T21:26:05.196288-08:00","deleted_at":"2025-12-27T21:26:05.196288-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} diff --git a/.beads/sync-state.json b/.beads/sync-state.json index 5519fbf1..67cee371 100644 --- a/.beads/sync-state.json +++ b/.beads/sync-state.json @@ -1,7 +1,7 @@ { - "last_failure": "2025-12-27T23:34:46.091112-08:00", + "last_failure": "2025-12-27T23:55:39.231953-08:00", "failure_count": 1, - "backoff_until": "2025-12-27T23:35:16.091112-08:00", + "backoff_until": "2025-12-27T23:56:09.231953-08:00", "needs_manual_sync": false, "failure_reason": "git pull failed in worktree: exit status 128\nFrom github.com:steveyegge/gastown\n * branch beads-sync -\u003e FETCH_HEAD\nfatal: Cannot rebase onto multiple branches.\n" } \ No newline at end of file