diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index bfee956d..beec8142 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -12,6 +12,7 @@ {"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-09eim","title":"Merge: toast-1767088545235","description":"branch: polecat/toast-1767088545235\ntarget: main\nsource_issue: toast-1767088545235\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T02:01:08.536019-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-30T02:01:08.536019-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-0a0vr","title":"Merge: furiosa-1767087671424","description":"branch: polecat/furiosa-1767087671424\ntarget: main\nsource_issue: furiosa-1767087671424\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T01:53:07.728514-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-30T01:53:07.728514-08:00"} @@ -45,6 +46,7 @@ {"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-0ua3f","title":"Merge: capable-1767079826600","description":"branch: polecat/capable-1767079826600\ntarget: main\nsource_issue: capable-1767079826600\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:37:39.344583-08:00","created_by":"gastown/polecats/capable","updated_at":"2025-12-29T23:43:15.624256-08:00","closed_at":"2025-12-29T23:43:15.624256-08:00","close_reason":"Merged to main (f9e82098)"} {"id":"gt-0vu9e","title":"Add unit tests for internal/mrqueue package","description":"attached_args: mrqueue package tests\n\nAdd comprehensive tests for the merge request queue package.\n\n## Files to create\n- internal/mrqueue/mrqueue_test.go\n\n## Test cases to cover\n1. NewQueue creates queue directory\n2. Add() persists MR to queue\n3. Get() retrieves MR by ID\n4. List() returns all MRs\n5. Remove() deletes MR\n6. MR serialization/deserialization\n7. Queue handles concurrent access\n\n## Acceptance criteria\n- [ ] internal/mrqueue/mrqueue_test.go created\n- [ ] At least 6 test functions\n- [ ] Tests pass: go test ./internal/mrqueue/...\n- [ ] Coverage \u003e 70%","status":"hooked","priority":2,"issue_type":"task","created_at":"2025-12-28T15:49:12.750237-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T15:57:05.876953-08:00"} +{"id":"gt-0wpnf","title":"Digest: mol-deacon-patrol","description":"Patrol 17: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:56:45.271323-08:00","updated_at":"2025-12-28T15:56:45.271323-08:00","closed_at":"2025-12-28T15:56:45.271291-08:00"} {"id":"gt-0x5og","title":"Dogs: Deacon's Helper Workers","description":"## Overview\n\nDogs are reusable workers managed by the Deacon for infrastructure and cleanup tasks.\nThey parallel how Polecats serve the Witness, but at town level with cross-rig scope.\n\n## Key Concepts\n\n- **Dogs**: Deacon-managed, reusable, infrastructure/cleanup tasks\n- **Kennel**: Where dogs live (`deacon/dogs/`)\n- **Multi-rig worktrees**: Dogs have worktrees into multiple rigs for cross-rig work\n\n## Cats vs Dogs\n\n| Aspect | Polecats | Dogs |\n|--------|----------|------|\n| Manager | Witness | Deacon |\n| Scope | Per-rig | Town (cross-rig) |\n| Lifecycle | Ephemeral | Reusable |\n| Work | Features | Infrastructure |\n| Location | `\u003crig\u003e/polecats/` | `deacon/dogs/` |\n\n## Implementation\n\n### Phase 1: Dog Infrastructure\n- `gt dog add/remove/list/call/status` commands\n- Kennel directory structure (`~/gt/deacon/dogs/`)\n- Multi-rig worktree creation\n- Dog state tracking\n\n### Phase 2: Deacon Dispatch\n- Sling support for `deacon/dogs` target\n- Pool management (spawn/retire logic)\n- Completion mail handling\n\n### Phase 3: Infrastructure Formulas\n- mol-convoy-cleanup\n- mol-dep-propagate\n- mol-digest-generate\n\n### Phase 4: Deacon Refactor\n- Patrol becomes detect → dispatch\n- Heavy work moves to dog slings\n\n## Reference\n\n- docs/patrol-system-design.md#dogs-deacons-helper-workers\n- docs/PRIMING.md (Role Taxonomy)","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-29T19:34:00.808508-08:00","created_by":"mayor","updated_at":"2025-12-29T19:34:00.808508-08:00"} {"id":"gt-0x5og.1","title":"gt dog add/remove/list/call/status CLI","description":"Dog management commands:\n- gt dog add \u003cname\u003e - Create dog in kennel with multi-rig worktrees\n- gt dog remove \u003cname\u003e - Retire dog, cleanup worktrees\n- gt dog list - Show the pack (all dogs with status)\n- gt dog call [name] - Wake idle dog(s)\n- gt dog status [name] - Show detailed dog state","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/furiosa","created_at":"2025-12-29T19:34:24.005184-08:00","created_by":"mayor","updated_at":"2025-12-30T00:30:30.91252-08:00","dependencies":[{"issue_id":"gt-0x5og.1","depends_on_id":"gt-0x5og","type":"parent-child","created_at":"2025-12-29T19:34:24.005762-08:00","created_by":"daemon"},{"issue_id":"gt-0x5og.1","depends_on_id":"gt-0x5og.2","type":"blocks","created_at":"2025-12-29T19:34:37.683244-08:00","created_by":"daemon"}]} {"id":"gt-0x5og.2","title":"Kennel directory structure and multi-rig worktrees","description":"Create kennel infrastructure:\n- ~/gt/deacon/dogs/\u003cname\u003e/ directory\n- Worktrees into each rig (gastown, beads, etc.)\n- .dog.json state file (idle/working, last-active, assigned-work)\n- Worktree refresh/cleanup logic","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-29T19:34:25.403417-08:00","created_by":"mayor","updated_at":"2025-12-29T19:34:25.403417-08:00","dependencies":[{"issue_id":"gt-0x5og.2","depends_on_id":"gt-0x5og","type":"parent-child","created_at":"2025-12-29T19:34:25.403973-08:00","created_by":"daemon"}]} @@ -57,7 +59,7 @@ {"id":"gt-0zefw","title":"Standardize error handling and warning output patterns","description":"Inconsistent patterns across codebase:\n\nError wrapping:\n- Some: fmt.Errorf(\"context: %w\", err) (good)\n- Some: return err (loses context)\n- Some: fmt.Errorf(\"message\", rigName) without wrapping original\n\nExit handling in Cobra commands:\n- Some use os.Exit(1) inside RunE (bad - loses error chain)\n- Some properly return errors\n\nWarning output styles:\n- fmt.Printf(\"%s Warning: ...\", style.Dim.Render(\"⚠\"))\n- fmt.Printf(\"Warning: %s\", ...)\n- fmt.Fprintf(os.Stderr, \"warning: ...\")\n\nSuggestion:\n1. Always wrap errors with %w\n2. Never call os.Exit() in RunE handlers\n3. Standardize on style.Warning.Render(\"Warning:\") pattern","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T15:43:18.89794-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T15:47:22.183478-08:00","closed_at":"2025-12-28T15:47:22.183478-08:00"} {"id":"gt-0zpdn","title":"Day 4.5: Test multi-step molecule lifecycle","description":"Integration test (UPDATED for self-managed handoffs):\n1. Sling work with molecule to polecat\n2. Polecat works through all steps (self-handoffs as context fills)\n3. Polecat calls gt done when work complete\n4. Witness verifies clean state and sends MERGE_READY to refinery\n5. Refinery merges branch\n6. Refinery sends MERGED to witness\n7. Witness calls gt polecat nuke for full cleanup\n8. Verify clean state (no worktree, no branch, agent bead closed)\n\n**VALIDATED**: rictus lifecycle worked end-to-end: gt done → witness → refinery → merged\n\nParent: gt-4a2qt","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:08.06509-08:00","created_by":"mayor","updated_at":"2025-12-28T16:12:02.015887-08:00","closed_at":"2025-12-28T16:12:02.015887-08:00","dependencies":[{"issue_id":"gt-0zpdn","depends_on_id":"gt-4a2qt","type":"parent-child","created_at":"2025-12-27T20:58:47.568249-08:00","created_by":"daemon"},{"issue_id":"gt-0zpdn","depends_on_id":"gt-zb0io","type":"blocks","created_at":"2025-12-27T20:58:56.884662-08:00","created_by":"daemon"},{"issue_id":"gt-0zpdn","depends_on_id":"gt-ztpe8","type":"blocks","created_at":"2025-12-27T20:58:57.915265-08:00","created_by":"daemon"}]} {"id":"gt-110m","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no lifecycle requests, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:05:14.439933-08:00","updated_at":"2025-12-27T21:26:04.507497-08:00","deleted_at":"2025-12-27T21:26:04.507497-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-11zdz","title":"Digest: mol-deacon-patrol","description":"Cycle 3: quiet patrol","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:08:45.744596-08:00","updated_at":"2025-12-28T13:08:45.744596-08:00","closed_at":"2025-12-28T13:08:45.744565-08:00"} +{"id":"gt-11zdz","title":"Digest: mol-deacon-patrol","description":"Cycle 3: quiet patrol","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:08:45.744596-08:00","updated_at":"2025-12-28T13:08:45.744596-08:00","closed_at":"2025-12-28T13:08:45.744565-08:00","dependencies":[{"issue_id":"gt-11zdz","depends_on_id":"gt-eph-js7","type":"parent-child","created_at":"2025-12-28T13:08:45.745438-08:00","created_by":"deacon"}]} {"id":"gt-14hd","title":"Work on ga-xxp: Define mol-polecat-work standard molecule...","description":"Work on ga-xxp: Define mol-polecat-work standard molecule. See bd show ga-xxp for full details.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T21:49:14.070072-08:00","updated_at":"2025-12-27T21:29:56.923963-08:00","deleted_at":"2025-12-27T21:29:56.923963-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-14w3x","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:36:04.72988-08:00","updated_at":"2025-12-27T21:26:02.494566-08:00","deleted_at":"2025-12-27T21:26:02.494566-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-15p32","title":"Digest: mol-deacon-patrol","description":"Patrol 15: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:12.609172-08:00","updated_at":"2025-12-27T21:26:03.181654-08:00","deleted_at":"2025-12-27T21:26:03.181654-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -67,6 +69,7 @@ {"id":"gt-17zr","title":"gt refinery start: doesn't actually start a session","description":"## Problem\n\n`gt refinery start gastown` reports success but doesn't start a tmux session.\n\n## Evidence\n\n```\n$ gt refinery start gastown\nStarting refinery for gastown...\n✓ Refinery started for gastown\n\n$ tmux list-sessions | grep refinery\n(nothing)\n\n$ gt refinery status gastown\nState: ○ stopped\n```\n\n## Expected\n\nShould start a tmux session (e.g., gt-gastown-refinery) with Claude processing the merge queue.\n\n## Related\n\n- gt-kcee: Witness commands also need implementation\n- The refinery 'start' may just be updating state.json without spawning a session","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-18T21:58:57.188389-08:00","updated_at":"2025-12-27T21:29:54.058504-08:00","deleted_at":"2025-12-27T21:29:54.058504-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-189d","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:27","description":"Patrol 14","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:27:18.422413-08:00","updated_at":"2025-12-27T21:26:05.238569-08:00","deleted_at":"2025-12-27T21:26:05.238569-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-18bck","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:46:25.162002-08:00","updated_at":"2025-12-27T21:26:03.804969-08:00","deleted_at":"2025-12-27T21:26:03.804969-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-1941b","title":"Digest: mol-deacon-patrol","description":"Routine patrol, town stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:26:51.611433-08:00","updated_at":"2025-12-28T19:26:51.611433-08:00","closed_at":"2025-12-28T19:26:51.611394-08:00"} {"id":"gt-19gw","title":"Digest: mol-deacon-patrol","description":"Patrol: mayor handoff (Batch 1 complete, notifications working), 5 polecats now active (Batch 2)","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-22T23:48:49.79781-08:00","updated_at":"2025-12-27T21:26:05.433385-08:00","deleted_at":"2025-12-27T21:26:05.433385-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1alp3","title":"Digest: mol-deacon-patrol","description":"Patrol 12: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:27:51.596348-08:00","updated_at":"2025-12-25T07:27:51.596348-08:00","closed_at":"2025-12-25T07:27:51.59631-08:00"} {"id":"gt-1ar5","title":"Merge: gt-qsvq","description":"branch: polecat/capable\ntarget: main\nsource_issue: gt-qsvq\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T07:55:31.049583-08:00","updated_at":"2025-12-27T21:27:22.675732-08:00","deleted_at":"2025-12-27T21:27:22.675732-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -94,7 +97,6 @@ {"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-1lvog","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:37.102371-08:00","updated_at":"2025-12-28T11:22:37.102371-08:00","closed_at":"2025-12-28T11:22:37.102337-08:00"} {"id":"gt-1pelm","title":"Add unit tests for internal/mail router and mailbox","description":"attached_args: Add unit tests for mail router and mailbox\n\nAdd tests for mail routing and mailbox functionality.\n\n## Files to create\n- internal/mail/router_test.go\n- internal/mail/mailbox_test.go\n\n## Test cases for router\n1. Route() resolves addresses correctly\n2. Route() handles rig/role format\n3. Route() handles rig/crew/name format\n4. Invalid addresses return error\n\n## Test cases for mailbox\n1. Send() writes message to mailbox\n2. Inbox() lists messages\n3. Read() retrieves message by ID\n4. Delete() removes message\n5. Messages persist correctly\n\n## Acceptance criteria\n- [ ] router_test.go with 4+ tests\n- [ ] mailbox_test.go with 5+ tests\n- [ ] Tests pass: go test ./internal/mail/...\n- [ ] Coverage \u003e 60%","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:49:13.002918-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T16:10:00.287761-08:00","closed_at":"2025-12-28T16:10:00.287761-08:00"} -{"id":"gt-1pugw","title":"Digest: mol-deacon-patrol","description":"Patrol 17: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:35:53.948037-08:00","updated_at":"2025-12-29T22:35:53.948037-08:00","closed_at":"2025-12-29T22:35:53.948003-08:00","dependencies":[{"issue_id":"gt-1pugw","depends_on_id":"gt-eph-hzn","type":"parent-child","created_at":"2025-12-29T22:35:53.948936-08:00","created_by":"deacon"}]} {"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"} @@ -154,14 +156,11 @@ {"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"} -{"id":"gt-2nzvi","title":"Digest: mol-deacon-patrol","description":"Routine patrol, town stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:25:38.756056-08:00","updated_at":"2025-12-28T19:25:38.756056-08:00","closed_at":"2025-12-28T19:25:38.756021-08:00"} {"id":"gt-2ocgh","title":"Code review swarm: recent merges","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-29T22:20:59.115974-08:00","created_by":"gastown/refinery","updated_at":"2025-12-29T22:20:59.115974-08:00"} {"id":"gt-2p2","title":"Test message","description":"Testing GGT mail integration","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-17T14:04:50.045948-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-2r6dt","title":"Test: Polecat lifecycle validation (auto-close)","description":"Simple test task: Read this issue, print 'Lifecycle test passed', then close this issue with bd close. No code changes needed.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-27T18:28:10.052196-08:00","created_by":"mayor","updated_at":"2025-12-27T21:29:45.723582-08:00","deleted_at":"2025-12-27T21:29:45.723582-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-2rfvq","title":"list: static mailing list lookup","description":"Static mailing list support via config file.\n\n## Deliverables\n\n1. Load lists from ~/gt/config/lists.json\n2. Parse list:name syntax in router\n3. Fan-out at send time (same as @group)\n4. Error handling for unknown list names\n\n## Example\n```bash\ngt mail send list:oncall -s \"Alert\" -m \"System down\"\n# Expands to: mayor/, gastown/witness, beads/witness\n# Creates 3 message copies\n```\n\n## Dependencies\n- Config directory (gt-i6jvc)\n\n## Acceptance\n- list:oncall resolves to configured members\n- Each member gets own message copy\n- Unknown list returns clear error","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:52:05.784822-08:00","updated_at":"2025-12-26T14:52:05.784822-08:00","dependencies":[{"issue_id":"gt-2rfvq","depends_on_id":"gt-i6jvc","type":"blocks","created_at":"2025-12-26T14:53:05.44199-08:00","created_by":"daemon"}]} -{"id":"gt-2rpyk","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:12:37.114354-08:00","updated_at":"2025-12-27T23:12:37.114354-08:00","closed_at":"2025-12-27T23:12:37.114315-08:00"} {"id":"gt-2sw","title":"Plugin surface for daemon lifecycle hooks","description":"Allow rigs to customize daemon behavior via hooks/plugins.\n\n## Hook Points\n\n- on_heartbeat: Called during daemon heartbeat cycle\n- on_worker_idle: Called when worker goes idle\n- on_worker_stuck: Called when stuck detection triggers\n- on_lifecycle_request: Called before processing lifecycle\n\n## Configuration\n\n```\n\u003crig\u003e/config/daemon-hooks.json\n{\n \"on_heartbeat\": \"./hooks/check-ci-status.sh\",\n \"on_worker_idle\": \"./hooks/maybe-assign-work.sh\",\n \"idle_threshold\": \"5m\",\n \"custom_signals\": [\n {\"name\": \"ci_status\", \"command\": \"./hooks/get-ci.sh\"}\n ]\n}\n```\n\n## Signal Contribution\n\nHooks can return signals that feed into decision engine:\n- SKIP_POKE: Don't poke this agent\n- FORCE_POKE: Override backoff, poke now\n- CUSTOM_DATA: Extra context for logging\n\n## Use Cases\n\n- Check CI status before interrupting test runs\n- Auto-assign work when worker becomes idle\n- Custom stuck detection for specific workflows","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-18T14:19:34.702624-08:00","updated_at":"2025-12-18T14:19:34.702624-08:00","dependencies":[{"issue_id":"gt-2sw","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T14:19:47.035848-08:00","created_by":"daemon"}]} -{"id":"gt-2tjy5","title":"Digest: mol-deacon-patrol","description":"Patrol 11: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:46:47.786158-08:00","updated_at":"2025-12-28T19:46:47.786158-08:00","closed_at":"2025-12-28T19:46:47.786122-08:00"} {"id":"gt-2tp","title":"init.go: Replace custom contains() with strings.Contains","status":"tombstone","priority":3,"issue_type":"bug","created_at":"2025-12-16T13:55:11.326407-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-2uos6","title":"Digest: mol-deacon-patrol","description":"Patrol 4: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:17:09.139846-08:00","updated_at":"2025-12-26T17:17:09.139846-08:00","closed_at":"2025-12-26T17:17:09.139809-08:00"} {"id":"gt-2ux","title":"gt uninstall: Clean removal of Gas Town harness","description":"Add 'gt uninstall' command to cleanly remove a Gas Town installation.\n\nShould:\n- Remove harness directory structure\n- Optionally preserve rigs/data with --keep-data flag\n- Warn about running sessions\n- Clean up any global config references","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:47:16.175246-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-2ux","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:22:47.419553-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"} @@ -204,6 +203,7 @@ {"id":"gt-3eqof","title":"Overseer inbox for strategic notifications","description":"New address overseer/ for strategic notifications.\n\nReceives:\n- Convoy completions\n- Cross-rig dependency resolutions\n- Escalations from Deacon\n- Daily digests (optional)\n\nSeparate from operational mail - this is the executive dashboard.\n\nRelated: hq-7h8jx (Convoy System epic in town beads)","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-29T18:47:34.183831-08:00","created_by":"mayor","updated_at":"2025-12-29T18:47:34.183831-08:00","dependencies":[{"issue_id":"gt-3eqof","depends_on_id":"gt-wthcc","type":"blocks","created_at":"2025-12-29T18:47:51.112035-08:00","created_by":"daemon"}]} {"id":"gt-3fm","title":"Mail orchestrator daemon","description":"Background mail orchestrator daemon.\n\n## Command\n```\ngt mail orchestrate [--interval N] [--once] [--verbose]\n```\n\n## Purpose\nBackground process that:\n1. Monitors outbox for pending mail\n2. Delivers to recipient inboxes\n3. Handles offline recipients (retry later)\n4. Cleans delivered messages from outbox\n\n## Why Needed?\nCurrent mail is synchronous. If recipient is offline or mailbox locked, send fails.\nOrchestrator enables async delivery with retry.\n\n## Implementation\n```go\nfunc (o *Orchestrator) Run(interval time.Duration) error {\n ticker := time.NewTicker(interval)\n for range ticker.C {\n o.processOutbox()\n }\n}\n\nfunc (o *Orchestrator) processOutbox() {\n // List outbox/*.json\n // For each, attempt delivery\n // On success, delete from outbox\n // On failure, increment retry count\n}\n```\n\n## Outbox Structure\n```\n\u003ctown\u003e/mayor/mail/outbox/\n├── msg-abc123.json\n└── msg-def456.json\n```\n\n## Lower Priority\nCurrent synchronous delivery works. Orchestrator is optimization.\n\n## Acceptance Criteria\n- [ ] Background daemon mode\n- [ ] Retry failed deliveries\n- [ ] --once for single pass\n- [ ] Configurable interval","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T14:48:29.830841-08:00","updated_at":"2025-12-16T16:07:35.973257-08:00"} {"id":"gt-3fu6z","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:19:51.795226-08:00","updated_at":"2025-12-27T21:26:02.658797-08:00","deleted_at":"2025-12-27T21:26:02.658797-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-3gepq","title":"Merge: toast-1767081120579","description":"branch: polecat/toast-1767081120579\ntarget: main\nsource_issue: toast-1767081120579\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:55:14.854033-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-29T23:55:14.854033-08:00"} {"id":"gt-3htc","title":"Digest: mol-deacon-patrol","description":"Patrol #7","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:23:00.657254-08:00","updated_at":"2025-12-27T21:26:04.776673-08:00","deleted_at":"2025-12-27T21:26:04.776673-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3hzgh","title":"Digest: mol-deacon-patrol","description":"Patrol 2: all healthy, no callbacks","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:02:17.213492-08:00","updated_at":"2025-12-27T23:02:17.213492-08:00","closed_at":"2025-12-27T23:02:17.213455-08:00"} {"id":"gt-3jlpf","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 7: routine, healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:24:26.295967-08:00","updated_at":"2025-12-27T21:26:01.915897-08:00","deleted_at":"2025-12-27T21:26:01.915897-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -211,6 +211,7 @@ {"id":"gt-3limt","title":"Digest: mol-deacon-patrol","description":"Patrol 5: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:04:35.041079-08:00","updated_at":"2025-12-27T21:26:03.429705-08:00","deleted_at":"2025-12-27T21:26:03.429705-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"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-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"}]} @@ -224,7 +225,7 @@ {"id":"gt-3twz","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All systems nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:46:05.137994-08:00","updated_at":"2025-12-27T21:26:04.218842-08:00","deleted_at":"2025-12-27T21:26:04.218842-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3tz","title":"CLI: polecat commands (add, list, wake, sleep, decommission)","description":"GGT is missing most polecat management commands that PGT has.\n\nMissing Commands:\n- gt polecat add \u003crig\u003e \u003cname\u003e - Add polecat to rig (creates clone)\n- gt polecat list [\u003crig\u003e] - List polecats with state\n- gt polecat info \u003cpolecat\u003e - Show detailed info\n- gt polecat wake \u003cpolecat\u003e - Mark available\n- gt polecat sleep \u003cpolecat\u003e - Mark unavailable \n- gt polecat decommission \u003cpolecat\u003e - Remove polecat safely\n\nPGT Reference: gastown-py/src/gastown/cli/polecat_cmd.py\n\nNotes:\n- spawn exists but doesn't cover management\n- wake/sleep are in polecat manager but not CLI\n- decommission should check for uncommitted work","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T14:46:31.326692-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-3ubur","title":"Digest: mol-deacon-patrol","description":"Patrol complete: inbox clear, no gates, all agents healthy, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:29:06.80036-08:00","updated_at":"2025-12-27T21:26:00.440344-08:00","deleted_at":"2025-12-27T21:26:00.440344-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-3ue68","title":"Digest: mol-deacon-patrol","description":"Patrol 2: all healthy, beads swarm active","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:50:54.637503-08:00","updated_at":"2025-12-28T15:50:54.637503-08:00","closed_at":"2025-12-28T15:50:54.637463-08:00"} +{"id":"gt-3ue68","title":"Digest: mol-deacon-patrol","description":"Patrol 2: all healthy, beads swarm active","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:50:54.637503-08:00","updated_at":"2025-12-28T15:50:54.637503-08:00","closed_at":"2025-12-28T15:50:54.637463-08:00","dependencies":[{"issue_id":"gt-3ue68","depends_on_id":"gt-eph-17t","type":"parent-child","created_at":"2025-12-28T15:50:54.638473-08:00","created_by":"deacon"}]} {"id":"gt-3uegm","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:32:24.714703-08:00","updated_at":"2025-12-27T21:26:02.569-08:00","deleted_at":"2025-12-27T21:26:02.569-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3uw5d","title":"Digest: mol-deacon-patrol","description":"Patrol 4: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:42:30.550966-08:00","updated_at":"2025-12-27T21:26:03.254966-08:00","deleted_at":"2025-12-27T21:26:03.254966-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3vqw3","title":"Merge: slit-1767080431456","description":"branch: polecat/slit-1767080431456\ntarget: main\nsource_issue: slit-1767080431456\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:49:04.263034-08:00","created_by":"gastown/polecats/slit","updated_at":"2025-12-29T23:55:11.801127-08:00","closed_at":"2025-12-29T23:55:11.801127-08:00","close_reason":"Stale MR from nuked polecat"} @@ -414,7 +415,6 @@ {"id":"gt-69ruq","title":"Digest: mol-deacon-patrol","description":"Patrol 8: healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T06:10:18.225418-08:00","updated_at":"2025-12-28T06:10:18.225418-08:00","closed_at":"2025-12-28T06:10:18.225382-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-6c3kn","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:43:56.834698-08:00","updated_at":"2025-12-25T18:43:56.834698-08:00","closed_at":"2025-12-25T18:43:56.834642-08:00"} -{"id":"gt-6c4nh","title":"Digest: mol-deacon-patrol","description":"Patrol 5: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:29:54.403996-08:00","updated_at":"2025-12-28T01:29:54.403996-08:00","closed_at":"2025-12-28T01:29:54.403955-08:00"} {"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"} {"id":"gt-6exub","title":"Digest: mol-deacon-patrol","description":"Patrol: no callbacks, no polecats, all agents healthy, cleaned 2 orphan processes + 2 stale locks","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:14:24.79552-08:00","updated_at":"2025-12-27T21:26:01.477672-08:00","deleted_at":"2025-12-27T21:26:01.477672-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -545,6 +545,7 @@ {"id":"gt-8mbz","title":"Town Doctor molecule for harness health checks","description":"Create a Town Doctor molecule that any Gas Town agent can run to diagnose and repair harness issues.\n\n## Concept\n\nInstead of just `gt doctor` as a CLI command with hardcoded checks, create a **molecule** (checklist workflow) that:\n- Any agent (Mayor, Witness, Polecat) can instantiate\n- Walks the agent through diagnostic steps\n- Agent uses judgment to fix issues found\n- Works as a structured troubleshooting guide\n\n## Why a Molecule?\n\n1. **Agent-driven**: The agent running it becomes \"the doctor\" temporarily\n2. **Extensible**: Add new checks by updating the molecule, not code\n3. **Contextual**: Agent can reason about issues, not just run scripts\n4. **Self-healing**: Agent can fix problems it finds, not just report them\n\n## Proposed Checks (molecule steps)\n\n1. Verify harness structure (mayor/, .beads/, CLAUDE.md exist)\n2. Validate config files (town.json, rigs.json parse correctly)\n3. Check beads health (bd doctor, redirect validity)\n4. Verify git state (clean working tree, proper remotes)\n5. Check rig integrity (each registered rig exists, has config.json)\n6. Validate agent clones (mayor/rig/, refinery/rig/ exist and are valid)\n7. Check for orphaned worktrees/branches\n8. Verify daemon state (if running)\n\n## Integration\n\n- `gt doctor` could instantiate the molecule for the current agent\n- Or agent can run `bd ready` and pick up doctor tasks when prioritized\n- Results logged to beads for audit trail\n\n## Related\n\n- gt-cr9: Harness Design \u0026 Documentation (completed)\n- Molecules design in architecture.md","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-19T13:03:22.688851-08:00","updated_at":"2025-12-27T21:29:57.001673-08:00","deleted_at":"2025-12-27T21:29:57.001673-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-8nmy","title":"Update Deacon template to emphasize staying in ~/gt/deacon directory","description":"The Deacon template should instruct the agent to stay in ~/gt/deacon/ as much as possible, and always return there after any excursion. This prevents issues with identity detection (mail, mol status) which depend on cwd.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T13:30:27.969826-08:00","updated_at":"2025-12-23T13:30:27.969826-08:00"} {"id":"gt-8os8","title":"Work on ga-p6r: Add handoff protocol to spawn priming. En...","description":"Work on ga-p6r: Add handoff protocol to spawn priming. Ensure polecats receive handoff context when spawned. When done, submit MR (not PR) to integration branch for Refinery.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T22:57:59.334003-08:00","updated_at":"2025-12-27T21:29:56.906515-08:00","deleted_at":"2025-12-27T21:29:56.906515-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-8padi","title":"Digest: mol-deacon-patrol","description":"Patrol 13: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:09:04.639-08:00","updated_at":"2025-12-27T23:09:04.639-08:00","closed_at":"2025-12-27T23:09:04.638966-08:00"} {"id":"gt-8pcb","title":"Plugin/molecule catalog integration design","description":"Two currently independent systems:\n1. Disk-based plugins (~~/gt/plugins/) - Deacon patrol extensions\n2. Molecule catalog (protos in beads) - bd pour/wisp/bond\n\nInvestigate integration points:\n- User-contributed molecules bonded to catalog\n- Dynamic molecule attachment during execution (e.g., 'attach security sniffer because we noticed condition X')\n- How plugins could contribute protos\n- How protos could trigger plugins\n\nNot blocking launch. Future design investigation.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-22T21:52:47.897048-08:00","updated_at":"2025-12-28T22:34:14.460561-08:00","closed_at":"2025-12-28T22:34:14.460561-08:00"} {"id":"gt-8q4qb","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:49:44.632044-08:00","updated_at":"2025-12-27T21:26:01.24637-08:00","deleted_at":"2025-12-27T21:26:01.24637-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-8r7","title":"Enhance Mayor CLAUDE.md with GGT milestone tracking","description":"Update ~/ai/CLAUDE.md (Mayor startup context) with:\n\n1. GGT Self-Hosting Milestone section\n - Track progress toward gt replacing town\n - Key blockers: gt-h5n (merge queue), gt-974 (daemon)\n - What \"self-hosting\" means (GGT working on itself)\n\n2. Recent Architecture Decisions\n - Engineer = role, Refinery = place\n - Merge queue in Beads (not branch discovery)\n - Session restart protocol\n\n3. Transition Plan\n - Current: use town commands (PGT)\n - Target: use gt commands (GGT)\n - Switch criteria: gt-b1g closed\n\nKeep it concise - Mayor context should be quick to scan.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T23:12:07.260653-08:00","updated_at":"2025-12-16T23:12:07.260653-08:00","dependencies":[{"issue_id":"gt-8r7","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:12:15.124842-08:00","created_by":"daemon"}]} @@ -681,6 +682,7 @@ {"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"} {"id":"gt-9v52","title":"gt sling reports hook occupied but bd hook shows empty","description":"gt sling thinks a hook is occupied when bd hook shows it empty. Example: bd hook --agent beads/crew/dave shows (empty), but gt sling bd-hobo beads/crew/dave says 'hook already occupied by bd-ul59'. They should use the same source of truth (beads database pinned field).","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/furiosa","created_at":"2025-12-24T20:01:42.105132-08:00","updated_at":"2025-12-29T23:42:43.552586-08:00","closed_at":"2025-12-29T23:42:43.552586-08:00","close_reason":"Fixed by using proper bd commands (bd agent state, bd slot set/clear) instead of embedding in description text. Now gastown and beads use the same SQLite columns for hook_bead and agent_state."} {"id":"gt-9w1b2","title":"Merge: dementus-1767073385126","description":"branch: polecat/dementus-1767073385126\ntarget: main\nsource_issue: dementus-1767073385126\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T21:56:54.773673-08:00","created_by":"gastown/polecats/dementus","updated_at":"2025-12-29T23:32:37.279586-08:00","closed_at":"2025-12-29T23:32:37.279586-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"} +{"id":"gt-9w64q","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:34:11.480376-08:00","updated_at":"2025-12-29T22:34:11.480376-08:00","closed_at":"2025-12-29T22:34:11.480341-08:00"} {"id":"gt-9wb07","title":"Digest: mol-deacon-patrol","description":"Patrol 6: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:55:01.948504-08:00","updated_at":"2025-12-27T21:26:00.567108-08:00","deleted_at":"2025-12-27T21:26:00.567108-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-9wv0","title":"gt spawn should verify daemon is running for polecat triggering","description":"gt spawn notifies the Deacon (via mail) that a polecat was started, expecting the Deacon to trigger it once Claude is ready. But if the daemon isn't running, the mail sits unread and the polecat never gets triggered.\n\n## Current Behavior\n1. gt spawn starts polecat session\n2. gt spawn sends POLECAT_STARTED to deacon/\n3. (assumes daemon will trigger polecat)\n\n## Problem\nIf gt daemon isn't running, step 3 never happens and polecat sits at prompt.\n\n## Solution\nIn gt spawn, after session start:\n1. Check if daemon is running (gt daemon status)\n2. If not running, either:\n a. Start daemon: gt daemon start\n b. Or warn user: 'Daemon not running, polecat may not auto-start'\n\n## Alternative\nThe user can manually trigger with gt nudge, but automated flow should work.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:03:03.71521-08:00","updated_at":"2025-12-23T01:03:03.71521-08:00","dependencies":[{"issue_id":"gt-9wv0","depends_on_id":"gt-bjft","type":"blocks","created_at":"2025-12-23T01:03:12.187224-08:00","created_by":"daemon"}]} {"id":"gt-9xx4","title":"Digest: mol-deacon-patrol","description":"Patrol #14","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:25:08.524261-08:00","updated_at":"2025-12-27T21:26:04.717165-08:00","deleted_at":"2025-12-27T21:26:04.717165-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -690,6 +692,7 @@ {"id":"gt-9zp8t","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:28:55.536366-08:00","updated_at":"2025-12-25T16:28:55.536366-08:00","closed_at":"2025-12-25T16:28:55.536331-08:00"} {"id":"gt-a07f","title":"Chemistry UX commands from Beads","description":"Waiting on Beads repo to implement chemistry UX sugar commands (bd pour, bd wisp, bd hook, --pour flag). These are nice-to-have polish items, not blockers for core functionality.\n\nSee: gastown/mayor/rig/docs/chemistry-design-changes.md","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T02:19:04.083172-08:00","updated_at":"2025-12-27T21:29:56.395503-08:00","deleted_at":"2025-12-27T21:29:56.395503-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-a2lrp","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T03:36:27.960057-08:00","updated_at":"2025-12-27T21:26:03.746799-08:00","deleted_at":"2025-12-27T21:26:03.746799-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-a3m1m","title":"Digest: mol-deacon-patrol","description":"Patrol 11: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:33:11.534637-08:00","updated_at":"2025-12-28T01:33:11.534637-08:00","closed_at":"2025-12-28T01:33:11.534601-08:00"} {"id":"gt-a41um","title":"Daemon must delete LIFECYCLE messages after processing","description":"## Problem\n\nCrew workers were being killed every 5 minutes.\n\n## Root Cause\n\nOld stale LIFECYCLE messages from days ago were sitting in the deacon's inbox. The daemon's ProcessLifecycleRequests() was re-finding and re-processing them every 5-minute heartbeat cycle.\n\nThe closeMessage() function in lifecycle.go calls 'gt mail delete' but failures are silent - the message stays in the inbox and gets reprocessed on the next heartbeat.\n\n## Fix Required\n\n1. Ensure closeMessage() actually deletes the message\n2. If delete fails, log the error AND mark the message as read so it's not reprocessed\n3. Consider adding a 'processed' label or moving to a processed folder\n\n## Files\n\n- internal/daemon/lifecycle.go: closeMessage() function\n- internal/daemon/lifecycle.go: ProcessLifecycleRequests() loop","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-26T17:42:52.25807-08:00","updated_at":"2025-12-27T21:29:45.243013-08:00","deleted_at":"2025-12-27T21:29:45.243013-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-a4la6","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 1: All healthy - witnesses, refineries running. No callbacks, no orphans, no pending spawns.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:16:17.348433-08:00","updated_at":"2025-12-28T11:16:17.348433-08:00","closed_at":"2025-12-28T11:16:17.348399-08:00"} {"id":"gt-a5yv","title":"Digest: mol-deacon-patrol","description":"Patrol 4: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:56:31.09396-08:00","updated_at":"2025-12-27T21:26:04.996512-08:00","deleted_at":"2025-12-27T21:26:04.996512-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -792,7 +795,6 @@ {"id":"gt-bnik","title":"gt nudge should accept partial/fuzzy session names","description":"Currently gt nudge requires the exact tmux session name (e.g., gt-gastown-crew-max). Should be more forgiving:\n\n1. Accept partial matches when unambiguous (e.g., 'max' → gt-gastown-crew-max)\n2. Accept shorthand like 'gastown/max' or 'crew/max'\n3. Show helpful error with suggestions when ambiguous\n\nExamples that should work:\n- gt nudge max '...' → matches gt-gastown-crew-max\n- gt nudge gastown/max '...' → matches gt-gastown-crew-max\n- gt nudge beads-dave '...' → matches gt-beads-crew-dave","status":"tombstone","priority":3,"issue_type":"feature","created_at":"2025-12-20T17:53:44.834337-08:00","updated_at":"2025-12-27T21:29:57.605927-08:00","deleted_at":"2025-12-27T21:29:57.605927-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-bnlev","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 20: final cycle before handoff","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:48:49.95776-08:00","updated_at":"2025-12-27T21:26:01.312421-08:00","deleted_at":"2025-12-27T21:26:01.312421-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-bo8mo","title":"Witness: must send MERGE_READY to Refinery after POLECAT_DONE","description":"Integration test gt-7psb8 revealed that Witness processes POLECAT_DONE but doesn't send MERGE_READY to Refinery.\n\nObserved:\n- Witness receives POLECAT_DONE from furiosa\n- Witness verifies branch pushed\n- Witness kills polecat session\n- Witness notifies Mayor\n- NO MERGE_READY sent to Refinery\n\nExpected: After successful pre-kill verification, Witness should send MERGE_READY to gastown/refinery with the MR details.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-28T13:11:54.428918-08:00","created_by":"mayor","updated_at":"2025-12-28T13:58:05.348621-08:00","closed_at":"2025-12-28T13:58:05.348621-08:00"} -{"id":"gt-boiw8","title":"Digest: mol-deacon-patrol","description":"Patrol 8: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:54:03.322389-08:00","updated_at":"2025-12-28T15:54:03.322389-08:00","closed_at":"2025-12-28T15:54:03.322353-08:00"} {"id":"gt-bp0ht","title":"Add mutex to swarm.Manager for thread safety","description":"attached_args: Add swarm.Manager mutex for thread safety\n\nFix potential race condition in swarm manager's map access.\n\n## Files to modify\n- internal/swarm/manager.go\n- internal/swarm/manager_test.go (add concurrency test)\n\n## Problem\nThe swarms map[string]*Swarm is accessed without synchronization:\n```go\ntype Manager struct {\n swarms map[string]*Swarm // No mutex protection\n}\n```\n\nMultiple goroutines could call Create(), GetSwarm(), etc. simultaneously.\n\n## Implementation\n```go\ntype Manager struct {\n mu sync.RWMutex\n swarms map[string]*Swarm\n}\n\nfunc (m *Manager) GetSwarm(id string) *Swarm {\n m.mu.RLock()\n defer m.mu.RUnlock()\n return m.swarms[id]\n}\n```\n\n## Acceptance criteria\n- [ ] sync.RWMutex added to Manager struct\n- [ ] All map accesses protected by mutex\n- [ ] RLock for reads, Lock for writes\n- [ ] Concurrency test added\n- [ ] go test -race ./internal/swarm/... passes","status":"hooked","priority":2,"issue_type":"task","created_at":"2025-12-28T15:49:16.520654-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T15:54:16.914513-08:00"} {"id":"gt-bq1yn","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T14:04:00.499629-08:00","updated_at":"2025-12-25T14:04:00.499629-08:00","closed_at":"2025-12-25T14:04:00.499596-08:00"} {"id":"gt-bq4wo","title":"Day 2.7c: gt doctor checks agent beads exist","description":"Add gt doctor check: agent-beads-exist\n\n1. For town-level: verify gt-deacon and gt-mayor beads exist\n2. For each rig: verify gt-witness-\u003crig\u003e and gt-refinery-\u003crig\u003e beads exist\n3. Report missing beads as warnings\n4. Implement --fix to create missing beads\n\nFiles:\n- internal/doctor/agent_beads_check.go (new)\n- internal/cmd/doctor.go (register check)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-28T02:17:08.814494-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T02:40:06.712421-08:00","closed_at":"2025-12-28T02:40:06.712421-08:00","dependencies":[{"issue_id":"gt-bq4wo","depends_on_id":"gt-aer7q","type":"parent-child","created_at":"2025-12-28T02:17:17.582571-08:00","created_by":"daemon"},{"issue_id":"gt-bq4wo","depends_on_id":"gt-h3hak","type":"blocks","created_at":"2025-12-28T02:17:20.043469-08:00","created_by":"daemon"},{"issue_id":"gt-bq4wo","depends_on_id":"gt-pinkq","type":"blocks","created_at":"2025-12-28T02:17:20.073712-08:00","created_by":"daemon"}]} @@ -808,6 +810,7 @@ {"id":"gt-bz2pu","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All agents healthy, 1 orphan process cleaned, no mail","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T17:43:34.631017-08:00","updated_at":"2025-12-27T21:26:01.159742-08:00","deleted_at":"2025-12-27T21:26:01.159742-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-bzd","title":"beads: Stop searching upward when .beads found","description":"## Problem\n\nWhen running bd commands in a nested directory structure with multiple .beads directories, bd shows a confusing warning:\n\n```\n╔══════════════════════════════════════════════════════════════════════════╗\n║ WARNING: 2 beads databases detected in directory hierarchy ║\n╠══════════════════════════════════════════════════════════════════════════╣\n║ Multiple databases can cause confusion and database pollution. ║\n║ ║\n║ /Users/stevey/gt/gastown/.beads (261 issues) ║\n║ /Users/stevey/gt/.beads (21 issues) ║\n║ ║\n║ WARNING: Not using the closest database! Check your BEADS_DB setting. ║\n║ ║\n║ RECOMMENDED: Consolidate or remove unused databases to avoid confusion. ║\n╚══════════════════════════════════════════════════════════════════════════╝\n```\n\n## Why This Is Wrong\n\nIn Gas Town, nested .beads directories are **intentional and necessary**:\n- Town level: /Users/stevey/gt/.beads (mail, town-level issues)\n- Rig level: /Users/stevey/gt/gastown/.beads (gastown project issues)\n- Worker level: polecats have their own beads in worktrees\n\nThese are **unrelated** beads instances for different scopes. They should never be consolidated.\n\n## Expected Behavior\n\nWhen bd finds a .beads directory, it should:\n1. Use that directory (closest ancestor wins)\n2. **Stop searching upward** - do not look for parent .beads directories\n3. **No warning** about multiple databases\n\n## Current Behavior\n\nbd searches all the way up to root, finds all .beads directories, and warns about \"multiple databases\" even though they are separate, intentional instances.\n\n## Fix\n\nIn the database discovery code, stop the upward search as soon as a .beads directory is found. The first .beads found is the one to use, and parent directories are out of scope.\n\n## Note\n\nThis is a beads issue, filed here for tracking. Should be implemented in the beads codebase.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-18T19:09:44.295743-08:00","updated_at":"2025-12-27T21:29:54.14296-08:00","deleted_at":"2025-12-27T21:29:54.14296-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-bzey4","title":"Add NODE_OPTIONS crash logging to claude invocations","description":"## Background\n\nInvestigation in bd-6df0 found that NODE_OPTIONS can enable Node.js crash reporting for Claude Code:\n\n```bash\nNODE_OPTIONS=\"--report-on-fatalerror --report-uncaught-exception --report-directory=$HOME/.claude/crash-reports\"\n```\n\n## Proposal\n\nModify gt to set NODE_OPTIONS when spawning claude sessions. Key locations in gastown:\n\n- `internal/cmd/up.go` - deacon, witness, crew, polecat spawning\n- `internal/cmd/start.go` - refinery, crew spawning \n- `internal/cmd/mayor.go` - mayor spawning\n- `internal/cmd/handoff.go` - handoff respawning\n- `internal/cmd/crew_helpers.go` - execClaude()\n- `internal/daemon/lifecycle.go` - daemon-managed spawns\n\n## Implementation\n\n1. Create helper function to build NODE_OPTIONS string\n2. Set env var before each claude invocation\n3. Ensure ~/.claude/crash-reports/ directory exists\n4. Optionally add `gt doctor` check to clean old reports\n\n## Benefits\n\n- Crash diagnostics without user config changes\n- All gt-managed sessions automatically covered\n- Reports available for debugging unexpected terminations","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-28T09:32:15.467817-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-28T09:35:03.888171-08:00","closed_at":"2025-12-28T09:35:03.888171-08:00"} +{"id":"gt-bzn8","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-24T00:20:50.418875-08:00","updated_at":"2025-12-27T22:40:44.708514-08:00","closed_at":"2025-12-27T22:40:44.708514-08:00"} {"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-c0fzm","title":"Parameterize 'read org docs' step in polecat workflows","description":"## Problem\n\nThe mol-polecat-chrome formula has hardcoded paths to strategic docs:\n- ~/gt/docs/hop/CONTEXT.md\n- ~/gt/docs/PRIMING.md\n\nThis limits reusability across different projects/organizations.\n\n## Solution\n\nAdd a `context_docs` variable to the formula that takes a list of document paths:\n\n```toml\n[vars.context_docs]\ndescription = \"Paths to organizational context documents to read before design\"\ndefault = [\"~/gt/docs/hop/CONTEXT.md\", \"~/gt/docs/PRIMING.md\"]\n```\n\n## Usage at cook/wisp time\n\n```bash\n# Use defaults\ngt sling gt-abc gastown -q chrome\n\n# Override for different project\ngt sling gt-abc gastown -q chrome --var context_docs=\"docs/ARCHITECTURE.md,docs/PRINCIPLES.md\"\n```\n\n## Step template\n\nThe step description would interpolate the paths:\n\n```toml\n[[steps]]\nid = \"read-strategic-context\"\ntitle = \"Read organizational context documents\"\ndescription = \"\"\"\nRead the following strategic context documents before designing:\n\n{{#each context_docs}}\n- {{this}}\n{{/each}}\n\nThese contain the vision, principles, and constraints that should guide your work.\n\"\"\"\n```\n\n## Considerations\n\n1. How to handle the array in TOML var syntax?\n2. Should this be a reusable step fragment or inline in chrome?\n3. Default paths should work for Gas Town but be overridable\n\n## Related\n- mol-polecat-chrome.formula.toml (current hardcoded implementation)","status":"closed","priority":2,"issue_type":"feature","assignee":"gastown/crew/max","created_at":"2025-12-29T23:12:40.145379-08:00","created_by":"gastown/refinery","updated_at":"2025-12-29T23:17:53.827955-08:00","closed_at":"2025-12-29T23:17:53.827955-08:00","close_reason":"Implemented mol-polecat-chrome formula with parameterized context_docs variable. Default paths point to Gas Town docs, can be overridden via --var context_docs=\"...\" at sling time."} {"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"} @@ -815,7 +818,6 @@ {"id":"gt-c4b83","title":"Consider gt polecats --status=idle for swarm dispatch","description":"The dispatch-swarm-work step in mol-witness-patrol uses a complex jq command to find idle polecats:\n\n```bash\nbd list --type=agent --json | jq '[.[] | select(.description | contains(\"role_type: polecat\") and contains(\"agent_state: idle\"))]'\n```\n\nConsider adding a dedicated command:\n```bash\ngt polecats \u003crig\u003e --status=idle\n```\n\nBenefits:\n- Simpler for formula authors\n- Encapsulates agent bead schema details\n- Could add --json output for programmatic use\n\nLow priority - the jq approach works, this is just ergonomics.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-29T14:36:18.152191-08:00","created_by":"mayor","updated_at":"2025-12-29T14:36:18.152191-08:00"} {"id":"gt-c4j4j","title":"Witness patrol formula should document 'dead' agent state","description":"## Problem\n\nThe witness patrol formula survey-workers step documents these agent states:\n\n agent_state: running|idle|stuck|done\n\nBut the daemon lifecycle (daemon/lifecycle.go:647) can set agent_state to 'dead'\nwhen an agent goes unresponsive. This state isn't mentioned in the formula.\n\n## Found in commit\n\nf3a6ef6 (feat: Witness reads polecat state from agent beads)\n\n## Suggested fix\n\nUpdate the formula survey-workers step to include 'dead' in the state table:\n\n| agent_state | Meaning | Action |\n|-------------|---------|--------|\n| running | Actively working | Check progress (Step 3) |\n| idle | No work assigned | Skip (no action needed) |\n| stuck | Self-reported stuck | Handle stuck protocol |\n| done | Work complete | Verify cleanup triggered |\n| dead | Marked dead by daemon | Clean up or respawn |","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T09:48:21.452636-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T09:55:13.416985-08:00","closed_at":"2025-12-28T09:55:13.416985-08:00"} {"id":"gt-c55jv","title":"Digest: mol-deacon-patrol","description":"Patrol 17: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:46:04.311563-08:00","updated_at":"2025-12-26T18:46:04.311563-08:00","closed_at":"2025-12-26T18:46:04.311512-08:00"} -{"id":"gt-c57z0","title":"Digest: mol-deacon-patrol","description":"Patrol 13: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:34:03.807298-08:00","updated_at":"2025-12-28T01:34:03.807298-08:00","closed_at":"2025-12-28T01:34:03.807262-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"} @@ -883,7 +885,7 @@ {"id":"gt-crew-gastown-joe","title":"gt-crew-gastown-joe","description":"gt-crew-gastown-joe\n\nrole_type: \nrig: null\nagent_state: running\nhook_bead: null\nrole_bead: null\ncleanup_status: null","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-28T10:04:05.03443-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-29T14:48:00.681115-08:00","closed_at":"2025-12-29T14:30:47.632199-08:00","close_reason":"Migrated to canonical naming: gt-gastown-crew-\u003cname\u003e"} {"id":"gt-crew-gastown-max","title":"gt-crew-gastown-max","description":"gt-crew-gastown-max\n\nrole_type: crew\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-crew-gastown-max-role\ncleanup_status: null","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-28T09:51:58.720059-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-29T15:01:06.25399-08:00","closed_at":"2025-12-29T14:30:47.637875-08:00","close_reason":"Migrated to canonical naming: gt-gastown-crew-\u003cname\u003e"} {"id":"gt-crew-gastown-wolf","title":"Crew worker wolf in gastown - human-managed persistent workspace.","description":"Crew worker wolf in gastown - human-managed persistent workspace.\n\nrole_type: crew\nrig: gastown\nagent_state: idle\nhook_bead: null\nrole_bead: gt-crew-gastown-wolf-role\ncleanup_status: null","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T13:00:39.799433-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-29T14:30:47.606388-08:00","closed_at":"2025-12-29T14:30:47.606388-08:00","close_reason":"Migrated to canonical naming: gt-gastown-crew-\u003cname\u003e"} -{"id":"gt-crew-role","title":"Crew Role Definition","description":"You are a Crew Worker - a human-managed persistent workspace within a rig.\n\nUnlike polecats which are witness-managed and transient, crew workers are:\n- Persistent: Not auto-garbage-collected\n- User-managed: Overseer controls lifecycle\n- Long-lived identities: Keep your name across sessions\n- Gas Town integrated: Mail, handoff mechanics work\n\ndefault_molecule: null\ncapabilities:\n - autonomous_work\n - beads_access\n - git_operations\n - mail_communication\n\n## Core Responsibilities\n\n1. Execute assigned work autonomously\n2. Track progress via beads (bd commands)\n3. Communicate via mail when blocked or complete\n4. Maintain clean git state\n5. Hand off context when cycling sessions\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nHook has work -\u003e Run it. Hook empty -\u003e Check mail. Nothing -\u003e Wait for overseer.\n\n## Session End Protocol\n\n- git status, git add, bd sync, git commit, git push\n- gt handoff - hand off to fresh session\n\n## Key Commands\n\n- gt mol status - Check your hook\n- bd ready - Find next step\n- bd close \u003cid\u003e - Mark work complete\n- gt mail inbox - Check messages\n- gt handoff - Cycle to fresh session","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/dementus","created_at":"2025-12-29T13:23:55.830567-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-30T00:40:23.883133-08:00"} +{"id":"gt-crew-role","title":"Crew Role Definition","description":"You are a Crew Worker - a human-managed persistent workspace within a rig.\n\nUnlike polecats which are witness-managed and transient, crew workers are:\n- Persistent: Not auto-garbage-collected\n- User-managed: Overseer controls lifecycle\n- Long-lived identities: Keep your name across sessions\n- Gas Town integrated: Mail, handoff mechanics work\n\nsession_pattern: gt-{rig}-crew-{name}\nwork_dir_pattern: {town}/{rig}/crew/{name}\nneeds_pre_sync: true\nstart_command: exec claude --dangerously-skip-permissions\n\ndefault_molecule: null\ncapabilities:\n - autonomous_work\n - beads_access\n - git_operations\n - mail_communication\n\n## Core Responsibilities\n\n1. Execute assigned work autonomously\n2. Track progress via beads (bd commands)\n3. Communicate via mail when blocked or complete\n4. Maintain clean git state\n5. Hand off context when cycling sessions\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nHook has work then Run it. Hook empty then Check mail. Nothing then Wait for overseer.\n\n## Session End Protocol\n\n- git status, git add, bd sync, git commit, git push\n- gt handoff - hand off to fresh session\n\n## Key Commands\n\n- gt mol status - Check your hook\n- bd ready - Find next step\n- bd close \u003cid\u003e - Mark work complete\n- gt mail inbox - Check messages\n- gt handoff - Cycle to fresh session","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/dementus","created_at":"2025-12-29T13:23:55.830567-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-30T02:03:27.407163-08:00"} {"id":"gt-crh3q","title":"Digest: mol-deacon-patrol","description":"Patrol 1: all agents healthy, no callbacks, clone divergence detected (zoey 52 behind)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:26:07.334875-08:00","updated_at":"2025-12-28T01:26:07.334875-08:00","closed_at":"2025-12-28T01:26:07.334841-08:00"} {"id":"gt-csba","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Routine - handoff threshold reached","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:39:00.441055-08:00","updated_at":"2025-12-27T21:26:04.515663-08:00","deleted_at":"2025-12-27T21:26:04.515663-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-csbjj","title":"Errant redirect file in .beads/ causes chain warnings","description":"A redirect file appeared in gastown/mayor/rig/.beads/ alongside the actual beads.db, causing 'redirect chains not allowed' warnings. The redirect pointed to ../../mayor/rig/.beads which is circular. Had to manually delete the redirect file.","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/furiosa","created_at":"2025-12-30T00:11:29.08669-08:00","created_by":"mayor","updated_at":"2025-12-30T00:46:59.227299-08:00","closed_at":"2025-12-30T00:46:59.227299-08:00","close_reason":"Fixed: Added circular redirect detection to ResolveBeadsDir (auto-removes errant redirects) and added safety checks to ensureBeadsRedirect to prevent creating redirects in canonical beads location"} @@ -912,7 +914,6 @@ {"id":"gt-d5tgv","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:31.187594-08:00","updated_at":"2025-12-27T21:26:02.147192-08:00","deleted_at":"2025-12-27T21:26:02.147192-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-d6kyw","title":"Digest: mol-refinery-patrol","description":"Refinery patrol: no MRs in queue. Tests passed (all ok). No issues filed.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-30T00:56:55.381522-08:00","updated_at":"2025-12-30T00:56:55.381522-08:00","closed_at":"2025-12-30T00:56:55.381481-08:00","close_reason":"Squashed from 10 wisps","dependencies":[{"issue_id":"gt-d6kyw","depends_on_id":"gt-eph-6j9","type":"parent-child","created_at":"2025-12-30T00:56:55.382412-08:00","created_by":"mayor"}]} {"id":"gt-d7i","title":"gt session capture: Support positional line count argument","description":"Make 'gt session capture gastown/Toast 50' work.\n\nCurrently requires: gt session capture gastown/Toast -n 50\nShould also accept: gt session capture gastown/Toast 50\n\nAgent UX principle: commands should work the way agents guess they work.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T22:28:44.291285-08:00","updated_at":"2025-12-27T21:29:54.211841-08:00","deleted_at":"2025-12-27T21:29:54.211841-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-d7xwj","title":"Digest: mol-deacon-patrol","description":"Patrol 17: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:49:08.440137-08:00","updated_at":"2025-12-28T19:49:08.440137-08:00","closed_at":"2025-12-28T19:49:08.440104-08:00"} {"id":"gt-d8a8x","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:34:25.657224-08:00","updated_at":"2025-12-27T21:26:02.535732-08:00","deleted_at":"2025-12-27T21:26:02.535732-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-d8ia3","title":"Digest: mol-deacon-patrol","description":"Patrol 12: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:22:50.271584-08:00","updated_at":"2025-12-27T21:26:00.108727-08:00","deleted_at":"2025-12-27T21:26:00.108727-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-d9smb","title":"gt mol status: Change 'Pinned' to 'Hooked' in output","description":"The `gt mol status` output shows \"📌 Pinned: \u003cbead-id\u003e\" for hooked beads, which is confusing now that we have distinct statuses:\n\n- **hooked**: Work assigned to you (triggers autonomous mode)\n- **pinned**: Permanent reference beads (like agent beads, role beads)\n\nThe output currently says:\n```\n📌 Pinned: gt-3amkz: Overhaul autonomous-mode guidance...\nNo molecule attached\n```\n\nShould say:\n```\n🪝 Hooked: gt-3amkz: Overhaul autonomous-mode guidance...\nNo molecule attached\n```\n\nAdditional improvements:\n1. Change icon from 📌 to 🪝 for hooked beads\n2. Add a note clarifying that hooked work triggers autonomous mode even without an attached molecule\n3. Consider adding \"AUTONOMOUS MODE\" banner when hooked work is found (similar to gt prime)\n\nFiles to update:\n- internal/cmd/molecule_status.go (outputMoleculeStatus function around line 576)","status":"closed","priority":1,"issue_type":"bug","assignee":"gastown/crew/max","created_at":"2025-12-29T16:03:52.956377-08:00","created_by":"mayor","updated_at":"2025-12-29T16:11:04.397646-08:00","closed_at":"2025-12-29T16:11:04.397646-08:00","close_reason":"Implemented: Changed output to show 🪝 Hooked instead of 📌 Pinned, added AUTONOMOUS MODE banner, clarified hooked bead triggers autonomous work"} @@ -924,7 +925,7 @@ {"id":"gt-ddugk","title":"Code review: session health monitoring (gt-i7wcn)","description":"Review the session health monitoring and auto-restart implementation in internal/cmd/session.go, internal/daemon/daemon.go, and internal/daemon/lifecycle.go","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/furiosa","created_at":"2025-12-29T22:20:36.481466-08:00","created_by":"gastown/refinery","updated_at":"2025-12-29T22:26:44.071027-08:00","closed_at":"2025-12-29T22:26:44.071027-08:00","close_reason":"Code review complete: APPROVED. Implementation is solid with good crash detection logic, hook-aware restarts, and fallback notification. Minor suggestions for follow-up: restart rate limiting, CLI hook status display.","dependencies":[{"issue_id":"gt-ddugk","depends_on_id":"gt-2ocgh","type":"blocks","created_at":"2025-12-29T22:21:05.073406-08:00","created_by":"daemon"}]} {"id":"gt-ddw3y","title":"Extract duplicate boilerplate in molecule_lifecycle.go","description":"attached_args: Extract molecule_lifecycle boilerplate\n\nExtract duplicate boilerplate in molecule_lifecycle.go.\n\n## Files to modify\n- internal/cmd/molecule_lifecycle.go\n\n## Current duplication\nrunMoleculeBurn (lines 17-53) and runMoleculeSquash (lines 121-165) share ~50 lines of identical target detection code:\n- Get cwd\n- Find workspace\n- Parse target argument\n- Determine rig from address or role\n\n## Implementation\nExtract helper function:\n```go\ntype AgentContext struct {\n TownRoot string\n RigName string\n Role string\n Target string // polecat name or crew name\n}\n\nfunc getTargetAgentContext(args []string) (*AgentContext, error) {\n cwd, err := os.Getwd()\n if err != nil {\n return nil, fmt.Errorf(\"getting current directory: %w\", err)\n }\n townRoot, err := workspace.FindFromCwd()\n if err != nil {\n return nil, fmt.Errorf(\"finding workspace: %w\", err)\n }\n if townRoot == \"\" {\n return nil, fmt.Errorf(\"not in a Gas Town workspace\")\n }\n // ... rest of target detection logic ...\n}\n```\n\n## Acceptance criteria\n- [ ] AgentContext struct defined\n- [ ] getTargetAgentContext function extracts shared logic\n- [ ] runMoleculeBurn uses getTargetAgentContext\n- [ ] runMoleculeSquash uses getTargetAgentContext\n- [ ] Duplicate code eliminated (diff shows net negative lines)\n- [ ] go build ./... passes\n- [ ] go test ./internal/cmd/... passes","status":"hooked","priority":2,"issue_type":"task","created_at":"2025-12-28T15:43:21.155883-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T15:56:59.804116-08:00"} {"id":"gt-deacon","title":"gt-deacon","description":"Deacon (daemon beacon) - receives mechanical heartbeats, runs town plugins and monitoring.\n\nrole_type: deacon\nrig: null\nagent_state: idle\nhook_bead: null\nrole_bead: gt-deacon-role","status":"hooked","priority":2,"issue_type":"agent","assignee":"gastown/polecats/capable","created_at":"2025-12-28T00:46:17.666539-08:00","created_by":"stevey","updated_at":"2025-12-30T00:40:30.005934-08:00"} -{"id":"gt-deacon-role","title":"Deacon Role Definition","description":"You are the Deacon - the town-level lifecycle manager.\n\nYou run patrol cycles checking the health of all agents across all rigs,\nnudging stuck workers, and managing session lifecycles.\n\ndefault_molecule: mol-deacon-patrol\ncapabilities:\n - health_monitoring\n - session_lifecycle\n - cross_rig_visibility\n - agent_nudging\n\n## Core Responsibilities\n\n1. Run patrol cycles across all rigs\n2. Monitor agent health and progress\n3. Nudge stuck agents\n4. Manage session lifecycles (kill/restart)\n5. Escalate systemic issues to Mayor\n\n## Patrol Cycle\n\nEach patrol:\n1. Check all agent sessions (gt status)\n2. Identify stuck or idle agents\n3. Nudge or restart as needed\n4. Log patrol results\n5. Sleep until next cycle\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour work is the mol-deacon-patrol wisp. Execute patrol steps continuously.\n\n## Commands\n\n- gt status - Check all agents\n- tmux kill-session -t \u003csession\u003e - Kill stuck session\n- gt mail send \u003caddr\u003e - Communicate with agents\n- gt mail send mayor/ - Escalate to Mayor\n\n## Session Cycling\n\nWhen context fills, hand off to fresh session:\ngt handoff -s \"Deacon patrol handoff\" -m \"Completed N cycles...\"","status":"open","priority":2,"issue_type":"role","created_at":"2025-12-29T13:24:35.911278-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-29T13:24:35.911278-08:00"} +{"id":"gt-deacon-role","title":"Deacon Role Definition","description":"You are the Deacon - the town-level lifecycle manager.\n\nYou run patrol cycles checking the health of all agents across all rigs,\nnudging stuck workers, and managing session lifecycles.\n\nsession_pattern: gt-deacon\nwork_dir_pattern: {town}\nneeds_pre_sync: false\nstart_command: exec claude --dangerously-skip-permissions\n\ndefault_molecule: mol-deacon-patrol\ncapabilities:\n - health_monitoring\n - session_lifecycle\n - cross_rig_visibility\n - agent_nudging\n\n## Core Responsibilities\n\n1. Run patrol cycles across all rigs\n2. Monitor agent health and progress\n3. Nudge stuck agents\n4. Manage session lifecycles (kill/restart)\n5. Escalate systemic issues to Mayor\n\n## Patrol Cycle\n\nEach patrol:\n1. Check all agent sessions (gt status)\n2. Identify stuck or idle agents\n3. Nudge or restart as needed\n4. Log patrol results\n5. Sleep until next cycle\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour work is the mol-deacon-patrol wisp. Execute patrol steps continuously.\n\n## Commands\n\n- gt status - Check all agents\n- tmux kill-session -t \u003csession\u003e - Kill stuck session\n- gt mail send \u003caddr\u003e - Communicate with agents\n- gt mail send mayor/ - Escalate to Mayor\n\n## Session Cycling\n\nWhen context fills, hand off to fresh session:\ngt handoff -s \"Deacon patrol handoff\" -m \"Completed N cycles...\"","status":"open","priority":2,"issue_type":"role","created_at":"2025-12-29T13:24:35.911278-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-30T02:02:31.537078-08:00"} {"id":"gt-dfeho","title":"P4: Graceful degradation without tmux","description":"Low-priority: Add graceful degradation for environments without tmux.\n\nCurrent state: Patrol formulas use tmux capture-pane for observing agent state.\n\ntmux-independent alternatives (degraded mode):\n1. Tail Claude Code session logs if available\n2. Rely solely on agent bead state (less real-time)\n3. Use claude --output-file and tail that\n4. IPC mechanisms (named pipes, sockets)\n\nNOT launch-blocking. By summer 2025, Claude Code is expected to add signaling and reflection features that will obviate tmux scraping.\n\nFor now:\n- Keep tmux as primary observation mechanism\n- Document the tmux dependency\n- Add --no-tmux flag that falls back to bead-only observation\n\nThis is P4 backlog - address after liftoff.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-27T22:02:33.397709-08:00","created_by":"mayor","updated_at":"2025-12-27T22:02:33.397709-08:00"} {"id":"gt-dfsbv","title":"Merge: toast-1767074299802","description":"attached_args: Code review this merge request\n\nbranch: polecat/toast-1767074299802\ntarget: main\nsource_issue: toast-1767074299802\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","assignee":"gastown/polecats/capable","created_at":"2025-12-29T22:08:32.358698-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-29T22:12:10.510693-08:00","closed_at":"2025-12-29T22:12:10.510693-08:00","close_reason":"APPROVED: Code review passed. Build compiles, tests pass, follows existing patterns, proper error handling."} {"id":"gt-dft6a","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All green - halfway mark","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:32:55.926182-08:00","updated_at":"2025-12-27T21:26:02.560468-08:00","deleted_at":"2025-12-27T21:26:02.560468-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -937,10 +938,11 @@ {"id":"gt-dlnin","title":"Merge: cheedo-1767079863534","description":"branch: polecat/cheedo-1767079863534\ntarget: main\nsource_issue: cheedo-1767079863534\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:39:55.959351-08:00","created_by":"gastown/polecats/cheedo","updated_at":"2025-12-29T23:55:11.848257-08:00","closed_at":"2025-12-29T23:55:11.848257-08:00","close_reason":"Stale MR from nuked polecat"} {"id":"gt-dlrn","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:46","description":"Patrol 13: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:46:40.722551-08:00","updated_at":"2025-12-27T21:26:05.087567-08:00","deleted_at":"2025-12-27T21:26:05.087567-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-dm7k","title":"Digest: mol-deacon-patrol","description":"Patrol #17: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:59.419736-08:00","updated_at":"2025-12-27T21:26:04.260319-08:00","deleted_at":"2025-12-27T21:26:04.260319-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-dmagm","title":"Digest: mol-deacon-patrol","description":"Patrol 17: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:36:06.393647-08:00","updated_at":"2025-12-28T01:36:06.393647-08:00","closed_at":"2025-12-28T01:36:06.393612-08:00"} {"id":"gt-dmozb","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T08:13:26.555648-08:00","updated_at":"2025-12-28T08:13:26.555648-08:00","closed_at":"2025-12-28T08:13:26.55561-08:00"} {"id":"gt-dq3","title":"Split PGT/GGT harness or migrate to GGT-only","description":"Current ~/ai harness is shared by PGT and GGT with confusing overlap. Options:\n1. Keep separate (document the coexistence)\n2. Migrate fully to GGT structure\n3. Create separate harnesses\n\nThis affects the beads redirect, Mayor home location, and rig structure.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T17:15:32.308192-08:00","updated_at":"2025-12-27T21:29:54.245064-08:00","dependencies":[{"issue_id":"gt-dq3","depends_on_id":"gt-cr9","type":"blocks","created_at":"2025-12-17T17:15:51.717903-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.245064-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-drbd","title":"Add no-PR instructions to mol-polecat-work at two points","description":"Update mol-polecat-work in builtin_molecules.go to explicitly forbid GitHub PRs.\n\n## Two Points to Add Instructions\n\n### 1. submit-work step\nWhen polecat is ready to submit:\n- Push branch to origin\n- Create beads merge-request issue\n- DO NOT use gh pr create or GitHub PRs\n\n### 2. CLAUDE.md polecat context\nAdd to polecat role instructions:\n- Never use gh pr create\n- Never create GitHub pull requests\n- The Refinery processes merges via beads MR issues\n\n## Why Two Points\n- Molecule step description guides the workflow\n- CLAUDE.md reinforces at context level\n- Belt and suspenders approach\n\n## Implementation\n1. Update PolecatWorkMolecule() submit-work step description\n2. Update prompts/roles/polecat.md with explicit prohibition\n\nRelated: gt-44wh (general no-PR bug)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T16:44:51.497283-08:00","updated_at":"2025-12-27T21:29:53.409225-08:00","dependencies":[{"issue_id":"gt-drbd","depends_on_id":"gt-44wh","type":"related","created_at":"2025-12-21T16:44:57.503314-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.409225-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-drkhg","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 2: all quiet, agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:06:40.832353-08:00","updated_at":"2025-12-28T13:06:40.832353-08:00","closed_at":"2025-12-28T13:06:40.832318-08:00","dependencies":[{"issue_id":"gt-drkhg","depends_on_id":"gt-eph-thb","type":"parent-child","created_at":"2025-12-28T13:06:40.833193-08:00","created_by":"deacon"}]} +{"id":"gt-drkhg","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 2: all quiet, agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:06:40.832353-08:00","updated_at":"2025-12-28T13:06:40.832353-08:00","closed_at":"2025-12-28T13:06:40.832318-08:00"} {"id":"gt-drp5","title":"mol-ready-work: graceful GitHub/label handling","description":"## Summary\n\nmol-ready-work assumes:\n- GitHub repo exists with gh CLI configured\n- Labels 'untriaged' and 'triaged' exist\n\nShould handle gracefully:\n1. No GitHub repo (beads-only project) → skip GH backlogs\n2. Missing labels → skip that backlog tier, don't error\n3. gh CLI not authenticated → warn and skip GH backlogs\n\n## Implementation\nAdd checks in scan-backlogs step:\n```bash\n# Check if gh is available and authenticated\nif gh auth status \u0026\u003e/dev/null; then\n # scan GH backlogs\nfi\n```\n\n## Parent\nPart of gt-tnca (mol-ready-work epic)","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:19:39.992868-08:00","updated_at":"2025-12-27T21:29:56.242289-08:00","dependencies":[{"issue_id":"gt-drp5","depends_on_id":"gt-tnca","type":"blocks","created_at":"2025-12-23T01:19:56.493028-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.242289-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ds3h3","title":"gt mol status: role detection fails from polecat directory","description":"When running 'gt mol status' from a polecat's worktree directory (e.g., ~/gt/gastown/polecats/furiosa), the role detection incorrectly returns 'mayor' instead of 'gastown/furiosa'.\n\n## Root Cause\nThe detectRole() function in prime.go calculates relPath from townRoot (~gt) to cwd (~/gt/gastown/polecats/furiosa), giving 'gastown/polecats/furiosa'. It then checks parts[0] == 'mayor' but 'gastown' != 'mayor', so it falls through to rig detection where it treats 'gastown' as a rig name.\n\nHowever, the code then looks for parts[1] == 'polecats' but the actual check is parts[1] == 'polecats' which should work...\n\n## Actual Issue\nNeed to debug further - the hook file IS created correctly by spawn, but gt mol status can't find it because it's looking for the wrong agent identity.\n\n## Expected\nRunning from ~/gt/gastown/polecats/furiosa should detect:\n- Role: polecat\n- Rig: gastown \n- Polecat: furiosa\n- Agent identity: gastown/furiosa\n\n## Actual\n- Role: mayor\n- Agent identity: mayor\n\nThis prevents polecats from seeing their slung work via gt mol status.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-25T01:55:54.680601-08:00","updated_at":"2025-12-27T21:29:52.523004-08:00","deleted_at":"2025-12-27T21:29:52.523004-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-dsfi","title":"gt handoff: Deadlock in waitForRetirement","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-20T01:11:33.44686-08:00","updated_at":"2025-12-27T21:29:53.848393-08:00","deleted_at":"2025-12-27T21:29:53.848393-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} @@ -954,7 +956,7 @@ {"id":"gt-dy2k8","title":"Digest: mol-deacon-patrol","description":"Patrol 20: quiet, handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:50:21.56188-08:00","updated_at":"2025-12-28T19:50:21.56188-08:00","closed_at":"2025-12-28T19:50:21.561844-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-e01cj","title":"Digest: mol-deacon-patrol","description":"Cycle 11: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:19:46.280919-08:00","updated_at":"2025-12-28T13:19:46.280919-08:00","closed_at":"2025-12-28T13:19:46.280887-08:00"} -{"id":"gt-e0p84","title":"Merge: toast-1767081120579","description":"branch: polecat/toast-1767081120579\ntarget: main\nsource_issue: toast-1767081120579\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:56:27.54274-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-30T01:01:04.328205-08:00","closed_at":"2025-12-30T01:01:04.328205-08:00","close_reason":"Already merged to main"} +{"id":"gt-e0p84","title":"Merge: toast-1767081120579","description":"branch: polecat/toast-1767081120579\ntarget: main\nsource_issue: toast-1767081120579\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:56:27.54274-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-30T00:34:53.052362-08:00","closed_at":"2025-12-30T00:34:53.052362-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","deleted_at":"2025-12-27T21:29:45.798259-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-e0u3r","title":"gt sling: Make target path parsing more forgiving","description":"Current parsing rejects valid-looking paths like 'gastown/nux' or 'gastown/polecats/nux'.\n\nShould accept:\n- gastown/nux (polecat)\n- gastown/Nux (polecat, case-insensitive)\n- gastown/polecats/nux (explicit)\n- gastown/crew/max (crew)\n- gastown (auto-spawn)\n\nThe help says 'gastown/Toast' works but it doesn't. Parser is too strict.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-28T00:42:00.738517-08:00","created_by":"mayor","updated_at":"2025-12-28T00:54:34.999256-08:00","closed_at":"2025-12-28T00:54:34.999256-08:00"} {"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"} @@ -994,27 +996,28 @@ {"id":"gt-emrh5","title":"Merge: slit-1767059695613","description":"branch: polecat/slit-1767059695613\ntarget: main\nsource_issue: slit-1767059695613\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T18:03:49.25825-08:00","created_by":"gastown/polecats/slit","updated_at":"2025-12-29T21:45:58.325358-08:00","closed_at":"2025-12-29T21:45:58.325358-08:00","close_reason":"Stale merge requests - branches no longer exist"} {"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"} {"id":"gt-ep7f","title":"survey-workers","description":"List polecats and categorize by status.\n\n```bash\ngt polecat list \u003crig\u003e\n```\n\nNeeds: load-state","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.506038-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","dependencies":[{"issue_id":"gt-ep7f","depends_on_id":"gt-751s","type":"parent-child","created_at":"2025-12-23T01:41:54.555919-08:00","created_by":"stevey"},{"issue_id":"gt-ep7f","depends_on_id":"gt-z94m","type":"blocks","created_at":"2025-12-23T01:41:54.562822-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-eph-2wb","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-28T09:54:49.166597-08:00","updated_at":"2025-12-28T09:55:21.11902-08:00","closed_at":"2025-12-28T09:55:21.11902-08:00","dependencies":[{"issue_id":"gt-eph-2wb","depends_on_id":"gt-eph-5jh","type":"blocks","created_at":"2025-12-28T09:54:49.258993-08:00","created_by":"deacon"}]} +{"id":"gt-eph-17t","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.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","created_at":"2025-12-28T15:49:42.481387-08:00","updated_at":"2025-12-28T15:49:48.971111-08:00"} +{"id":"gt-eph-2wb","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-28T09:54:49.166597-08:00","updated_at":"2025-12-28T09:55:21.11902-08:00","closed_at":"2025-12-28T09:55:21.11902-08:00","dependencies":[{"issue_id":"gt-eph-2wb","depends_on_id":"gt-eph-bex","type":"parent-child","created_at":"2025-12-28T09:54:49.195803-08:00","created_by":"deacon"},{"issue_id":"gt-eph-2wb","depends_on_id":"gt-eph-5jh","type":"blocks","created_at":"2025-12-28T09:54:49.258993-08:00","created_by":"deacon"}]} {"id":"gt-eph-43s","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","assignee":"gastown/polecats/dementus","created_at":"2025-12-28T09:55:41.719317-08:00","updated_at":"2025-12-30T00:35:16.814565-08:00","closed_at":"2025-12-30T00:35:16.814565-08:00","close_reason":"Patrol complete. Findings:\n- No in_progress issues without active polecats\n- All 6 active polecats (capable, dementus, furiosa, nux, rictus, slit) are idle with running sessions\n- Closed 3 orphaned merge requests:\n - gt-tpq7i (keeper): branch deleted, no work\n - gt-5o2l0 (cheedo): branch deleted, no work \n - gt-e0p84 (toast): only bd sync commit, no code\n- Garbage collected 39 stale polecat branches","dependencies":[{"issue_id":"gt-eph-43s","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.75482-08:00","created_by":"deacon"},{"issue_id":"gt-eph-43s","depends_on_id":"gt-eph-tc2","type":"blocks","created_at":"2025-12-28T09:55:41.818357-08:00","created_by":"deacon"}]} {"id":"gt-eph-5c8","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","assignee":"gastown/polecats/dag","created_at":"2025-12-28T09:55:41.717851-08:00","updated_at":"2025-12-29T23:40:18.001582-08:00","closed_at":"2025-12-29T23:40:18.001582-08:00","close_reason":"Implemented gt callbacks process command with support for POLECAT_DONE, MERGE_COMPLETED/REJECTED, HELP, ESCALATION, SLING_REQUEST, WITNESS_REPORT, and REFINERY_REPORT callbacks. Added EventCallback to townlog for logging.","dependencies":[{"issue_id":"gt-eph-5c8","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.720544-08:00","created_by":"deacon"}]} -{"id":"gt-eph-5jh","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-28T09:54:49.166307-08:00","updated_at":"2025-12-30T00:40:55.696947-08:00","closed_at":"2025-12-30T00:40:55.696952-08:00","dependencies":[{"issue_id":"gt-eph-5jh","depends_on_id":"gt-eph-uqs","type":"blocks","created_at":"2025-12-28T09:54:49.251653-08:00","created_by":"deacon"}]} -{"id":"gt-eph-71z","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.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-28T11:22:34.278234-08:00","updated_at":"2025-12-28T11:22:34.278234-08:00"} +{"id":"gt-eph-5jh","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-28T09:54:49.166307-08:00","updated_at":"2025-12-30T00:40:55.696947-08:00","closed_at":"2025-12-30T00:40:55.696952-08:00","dependencies":[{"issue_id":"gt-eph-5jh","depends_on_id":"gt-eph-bex","type":"parent-child","created_at":"2025-12-28T09:54:49.189005-08:00","created_by":"deacon"},{"issue_id":"gt-eph-5jh","depends_on_id":"gt-eph-uqs","type":"blocks","created_at":"2025-12-28T09:54:49.251653-08:00","created_by":"deacon"}]} {"id":"gt-eph-8fu","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","assignee":"gastown/polecats/toast","created_at":"2025-12-28T09:55:41.718169-08:00","updated_at":"2025-12-29T23:54:29.078246-08:00","closed_at":"2025-12-29T23:54:29.078246-08:00","close_reason":"Checked for pending spawns - none found. All polecats in gastown are already in 'working' state.","dependencies":[{"issue_id":"gt-eph-8fu","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.727407-08:00","created_by":"deacon"},{"issue_id":"gt-eph-8fu","depends_on_id":"gt-eph-5c8","type":"blocks","created_at":"2025-12-28T09:55:41.782453-08:00","created_by":"deacon"}]} {"id":"gt-eph-acp","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.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","created_at":"2025-12-28T15:57:11.334141-08:00","updated_at":"2025-12-28T15:57:18.365848-08:00"} +{"id":"gt-eph-bex","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-28T09:54:49.16491-08:00","updated_at":"2025-12-28T22:33:13.212646-08:00","closed_at":"2025-12-28T22:33:13.212646-08:00"} {"id":"gt-eph-bf1","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":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.719859-08:00","updated_at":"2025-12-28T09:55:41.719859-08:00","dependencies":[{"issue_id":"gt-eph-bf1","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.768581-08:00","created_by":"deacon"},{"issue_id":"gt-eph-bf1","depends_on_id":"gt-eph-lm1","type":"blocks","created_at":"2025-12-28T09:55:41.833279-08:00","created_by":"deacon"}]} -{"id":"gt-eph-cfu","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-28T09:53:46.12348-08:00","updated_at":"2025-12-28T09:54:29.071412-08:00","closed_at":"2025-12-28T09:54:29.071412-08:00"} {"id":"gt-eph-ei9","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","assignee":"gastown/polecats/cheedo","created_at":"2025-12-28T09:55:41.718473-08:00","updated_at":"2025-12-30T00:26:38.621994-08:00","closed_at":"2025-12-30T00:26:38.621994-08:00","close_reason":"No pending gates found - patrol step complete","dependencies":[{"issue_id":"gt-eph-ei9","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.734258-08:00","created_by":"deacon"},{"issue_id":"gt-eph-ei9","depends_on_id":"gt-eph-5c8","type":"blocks","created_at":"2025-12-28T09:55:41.789441-08:00","created_by":"deacon"}]} {"id":"gt-eph-gf1","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":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.719043-08:00","updated_at":"2025-12-28T09:55:41.719043-08:00","dependencies":[{"issue_id":"gt-eph-gf1","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.747929-08:00","created_by":"deacon"},{"issue_id":"gt-eph-gf1","depends_on_id":"gt-eph-tc2","type":"blocks","created_at":"2025-12-28T09:55:41.810967-08:00","created_by":"deacon"}]} {"id":"gt-eph-hfj","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-28T09:55:41.717288-08:00","updated_at":"2025-12-28T09:55:41.717288-08:00"} -{"id":"gt-eph-ith","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-27T23:11:23.258596-08:00","updated_at":"2025-12-27T23:18:05.33491-08:00","closed_at":"2025-12-27T23:18:05.33491-08:00"} +{"id":"gt-eph-ing","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.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-28T11:22:50.504719-08:00","updated_at":"2025-12-28T11:22:50.504719-08:00"} +{"id":"gt-eph-js7","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.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-28T13:06:45.30485-08:00","updated_at":"2025-12-28T13:08:37.636341-08:00","closed_at":"2025-12-28T13:08:37.636341-08:00"} {"id":"gt-eph-lm1","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","assignee":"gastown/polecats/rictus","created_at":"2025-12-28T09:55:41.719584-08:00","updated_at":"2025-12-30T00:33:14.485082-08:00","closed_at":"2025-12-30T00:33:14.485082-08:00","close_reason":"Session cleanup verified clean - no orphan sessions, no orphan processes, no abandoned wisps. gt doctor --fix ran successfully for session-related checks.","dependencies":[{"issue_id":"gt-eph-lm1","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.761736-08:00","created_by":"deacon"},{"issue_id":"gt-eph-lm1","depends_on_id":"gt-eph-43s","type":"blocks","created_at":"2025-12-28T09:55:41.825725-08:00","created_by":"deacon"}]} -{"id":"gt-eph-o04","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-28T09:54:49.166871-08:00","updated_at":"2025-12-30T00:40:55.706901-08:00","closed_at":"2025-12-30T00:40:55.706905-08:00","dependencies":[{"issue_id":"gt-eph-o04","depends_on_id":"gt-eph-5jh","type":"blocks","created_at":"2025-12-28T09:54:49.266603-08:00","created_by":"deacon"}]} +{"id":"gt-eph-o04","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-28T09:54:49.166871-08:00","updated_at":"2025-12-30T00:40:55.706901-08:00","closed_at":"2025-12-30T00:40:55.706905-08:00","dependencies":[{"issue_id":"gt-eph-o04","depends_on_id":"gt-eph-bex","type":"parent-child","created_at":"2025-12-28T09:54:49.2027-08:00","created_by":"deacon"},{"issue_id":"gt-eph-o04","depends_on_id":"gt-eph-5jh","type":"blocks","created_at":"2025-12-28T09:54:49.266603-08:00","created_by":"deacon"}]} {"id":"gt-eph-tc2","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","assignee":"gastown/polecats/capable","created_at":"2025-12-28T09:55:41.718758-08:00","updated_at":"2025-12-30T00:33:10.653177-08:00","closed_at":"2025-12-30T00:33:10.653177-08:00","close_reason":"Health check complete: All witnesses and refineries running normally (gastown, beads)","dependencies":[{"issue_id":"gt-eph-tc2","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.74114-08:00","created_by":"deacon"},{"issue_id":"gt-eph-tc2","depends_on_id":"gt-eph-8fu","type":"blocks","created_at":"2025-12-28T09:55:41.796618-08:00","created_by":"deacon"},{"issue_id":"gt-eph-tc2","depends_on_id":"gt-eph-ei9","type":"blocks","created_at":"2025-12-28T09:55:41.803807-08:00","created_by":"deacon"}]} -{"id":"gt-eph-thb","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.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-28T13:05:00.650524-08:00","updated_at":"2025-12-28T13:06:36.220356-08:00","closed_at":"2025-12-28T13:06:36.220356-08:00"} {"id":"gt-eph-ucl","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":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.720135-08:00","updated_at":"2025-12-28T09:55:41.720135-08:00","dependencies":[{"issue_id":"gt-eph-ucl","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.775524-08:00","created_by":"deacon"},{"issue_id":"gt-eph-ucl","depends_on_id":"gt-eph-bf1","type":"blocks","created_at":"2025-12-28T09:55:41.841216-08:00","created_by":"deacon"}]} -{"id":"gt-eph-uqs","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-28T09:54:49.166022-08:00","updated_at":"2025-12-28T09:55:21.2336-08:00","closed_at":"2025-12-28T09:55:21.2336-08:00"} -{"id":"gt-eph-xvc","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-28T09:54:49.167697-08:00","updated_at":"2025-12-28T09:55:21.262397-08:00","closed_at":"2025-12-28T09:55:21.262397-08:00"} +{"id":"gt-eph-uqs","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-28T09:54:49.166022-08:00","updated_at":"2025-12-28T09:55:21.2336-08:00","closed_at":"2025-12-28T09:55:21.2336-08:00","dependencies":[{"issue_id":"gt-eph-uqs","depends_on_id":"gt-eph-bex","type":"parent-child","created_at":"2025-12-28T09:54:49.18209-08:00","created_by":"deacon"}]} +{"id":"gt-eph-xvc","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-28T09:54:49.167697-08:00","updated_at":"2025-12-28T09:55:21.262397-08:00","closed_at":"2025-12-28T09:55:21.262397-08:00","dependencies":[{"issue_id":"gt-eph-xvc","depends_on_id":"gt-eph-bex","type":"parent-child","created_at":"2025-12-28T09:54:49.223142-08:00","created_by":"deacon"},{"issue_id":"gt-eph-xvc","depends_on_id":"gt-eph-zdk","type":"blocks","created_at":"2025-12-28T09:54:49.289859-08:00","created_by":"deacon"}]} {"id":"gt-eph-xw9","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-27T20:22:58.092045-08:00","updated_at":"2025-12-27T21:26:00.100632-08:00","deleted_at":"2025-12-27T21:26:00.100632-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} +{"id":"gt-eph-zdk","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-28T09:54:49.167404-08:00","updated_at":"2025-12-28T09:55:21.290309-08:00","closed_at":"2025-12-28T09:55:21.290309-08:00","dependencies":[{"issue_id":"gt-eph-zdk","depends_on_id":"gt-eph-bex","type":"parent-child","created_at":"2025-12-28T09:54:49.216275-08:00","created_by":"deacon"}]} {"id":"gt-eqys","title":"gt spawn: pasted work assignment needs manual Enter to start","description":"## Problem\n\nAfter `gt spawn` pastes the work assignment into Claude, the session waits for Enter.\n\n## Current Behavior\n\n1. `gt spawn gastown/Rictus --issue gt-xxx`\n2. Session starts, work is pasted\n3. Claude shows 'Pasted text #1 +53 lines' but doesn't start\n4. Must manually send Enter or attach and press Enter\n\n## Expected\n\nThe spawn should send Enter after pasting to kick off the work.\n\n## Related\n\nSame debounce issue as tmux notifications (gt-vnp9).","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-18T21:54:14.111101-08:00","updated_at":"2025-12-27T21:29:57.060019-08:00","deleted_at":"2025-12-27T21:29:57.060019-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-er0u","title":"Work on ga-yp3: Polecat inbox system for reliable work as...","description":"Work on ga-yp3: Polecat inbox system for reliable work assignment. This is P1 priority. See bd show ga-yp3 for full design spec.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T21:57:34.473056-08:00","updated_at":"2025-12-27T21:29:56.915155-08:00","deleted_at":"2025-12-27T21:29:56.915155-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-erssy","title":"Digest: mol-deacon-patrol","description":"Patrol 2: all agents healthy, no issues","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:28:00.465093-08:00","updated_at":"2025-12-28T01:28:00.465093-08:00","closed_at":"2025-12-28T01:28:00.465059-08:00"} @@ -1096,7 +1099,6 @@ {"id":"gt-fw6am","title":"Digest: mol-deacon-patrol","description":"Patrol 18: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:24:57.143299-08:00","updated_at":"2025-12-27T21:26:00.010651-08:00","deleted_at":"2025-12-27T21:26:00.010651-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-fwj8y","title":"Merge: toast-1767079830359","description":"branch: polecat/toast-1767079830359\ntarget: main\nsource_issue: toast-1767079830359\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:37:44.765009-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-29T23:44:37.695134-08:00","closed_at":"2025-12-29T23:44:37.695134-08:00","close_reason":"Branch not found - likely already merged"} {"id":"gt-fy11w","title":"Daemon patrol should clean stale locks","description":"The gt daemon patrol cycle should detect and clean up stale locks.\n\n## Problem\nIf daemon crashes or there are orphaned locks, they can block operations indefinitely.\n\n## Proposed Solution\nDuring patrol cycle:\n1. Check for lock files older than threshold (e.g., 5 minutes)\n2. Verify owning process is dead (check PID if stored)\n3. Remove stale locks\n4. Log cleanup for audit","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-26T23:13:37.681972-08:00","created_by":"mayor","updated_at":"2025-12-26T23:13:37.681972-08:00"} -{"id":"gt-fyt31","title":"Digest: mol-deacon-patrol","description":"Patrol 9: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:45:59.65526-08:00","updated_at":"2025-12-28T19:45:59.65526-08:00","closed_at":"2025-12-28T19:45:59.655224-08:00"} {"id":"gt-fz2o1","title":"Digest: mol-deacon-patrol","description":"Patrol 5: clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:23:14.185469-08:00","updated_at":"2025-12-26T14:23:14.185469-08:00","closed_at":"2025-12-26T14:23:14.18543-08:00"} {"id":"gt-g0cp","title":"Digest: mol-deacon-patrol","description":"Patrol OK: town quiet","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T02:46:38.594856-08:00","updated_at":"2025-12-27T21:26:05.372454-08:00","deleted_at":"2025-12-27T21:26:05.372454-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-g1ud","title":"Direct test","description":"Testing direct bd create","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T17:45:55.058067-08:00","updated_at":"2025-12-25T14:12:42.282698-08:00","deleted_at":"2025-12-25T14:12:42.282698-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} @@ -1128,7 +1130,7 @@ {"id":"gt-gastown-polecat-bravo","title":"gt-gastown-polecat-bravo","description":"gt-gastown-polecat-bravo\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: null","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:41:37.373036-08:00","created_by":"mayor","updated_at":"2025-12-29T21:45:13.565657-08:00","deleted_at":"2025-12-29T21:45:13.565657-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-capable","title":"gt-gastown-polecat-capable","description":"gt-gastown-polecat-capable\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-rbncw\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:56:09.595279-08:00","created_by":"mayor","updated_at":"2025-12-30T01:37:54.010685-08:00","closed_at":"2025-12-30T01:16:59.117907-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.082776-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-charlie","title":"gt-gastown-polecat-charlie","description":"gt-gastown-polecat-charlie\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: null","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:41:38.470051-08:00","created_by":"mayor","updated_at":"2025-12-29T21:45:13.679776-08:00","deleted_at":"2025-12-29T21:45:13.679776-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} -{"id":"gt-gastown-polecat-cheedo","title":"gt-gastown-polecat-cheedo","description":"gt-gastown-polecat-cheedo\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:54.800962-08:00","created_by":"mayor","updated_at":"2025-12-30T00:27:11.088894-08:00","closed_at":"2025-12-30T00:27:11.088894-08:00","close_reason":"nuked","deleted_at":"2025-12-30T00:27:11.050736-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} +{"id":"gt-gastown-polecat-cheedo","title":"gt-gastown-polecat-cheedo","description":"gt-gastown-polecat-cheedo\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:54.800962-08:00","created_by":"mayor","updated_at":"2025-12-30T02:00:38.850468-08:00","closed_at":"2025-12-30T00:27:11.088894-08:00","close_reason":"nuked","deleted_at":"2025-12-30T00:27:11.050736-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-dag","title":"gt-gastown-polecat-dag","description":"gt-gastown-polecat-dag\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-tvwnz\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:43.032649-08:00","created_by":"mayor","updated_at":"2025-12-30T01:37:56.668682-08:00","closed_at":"2025-12-30T00:27:10.927465-08:00","close_reason":"nuked","deleted_at":"2025-12-30T00:27:10.888813-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-delta","title":"gt-gastown-polecat-delta","description":"gt-gastown-polecat-delta\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: null","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:41:39.879592-08:00","created_by":"mayor","updated_at":"2025-12-29T21:45:13.792554-08:00","deleted_at":"2025-12-29T21:45:13.792554-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-dementus","title":"gt-gastown-polecat-dementus","description":"gt-gastown-polecat-dementus\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-lfi2d\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:43:05.226023-08:00","created_by":"mayor","updated_at":"2025-12-30T01:42:54.064701-08:00","closed_at":"2025-12-30T01:16:59.263603-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.226661-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} @@ -1136,9 +1138,9 @@ {"id":"gt-gastown-polecat-keeper","title":"gt-gastown-polecat-keeper","description":"gt-gastown-polecat-keeper\n\nrole_type: polecat\nrig: gastown\nagent_state: done\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:59:02.304059-08:00","created_by":"mayor","updated_at":"2025-12-29T22:08:09.913397-08:00","closed_at":"2025-12-29T22:08:09.913397-08:00","close_reason":"nuked","deleted_at":"2025-12-29T22:08:09.875921-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-morsov","title":"gt-gastown-polecat-morsov","description":"gt-gastown-polecat-morsov\n\nrole_type: polecat\nrig: gastown\nagent_state: done\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:59:41.438694-08:00","created_by":"mayor","updated_at":"2025-12-29T22:09:14.794797-08:00","closed_at":"2025-12-29T22:09:14.794797-08:00","close_reason":"nuked","deleted_at":"2025-12-29T22:09:14.754543-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-nux","title":"gt-gastown-polecat-nux","description":"gt-gastown-polecat-nux\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-s94gq\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T17:54:53.302196-08:00","created_by":"mayor","updated_at":"2025-12-30T01:50:53.570498-08:00","closed_at":"2025-12-30T01:16:59.549222-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.515591-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} -{"id":"gt-gastown-polecat-rictus","title":"gt-gastown-polecat-rictus","description":"gt-gastown-polecat-rictus\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-u4fh\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T17:54:58.123296-08:00","created_by":"mayor","updated_at":"2025-12-30T01:45:35.629033-08:00","closed_at":"2025-12-30T01:16:59.688333-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.653942-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} +{"id":"gt-gastown-polecat-rictus","title":"gt-gastown-polecat-rictus","description":"gt-gastown-polecat-rictus\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-u4fh\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T17:54:58.123296-08:00","created_by":"mayor","updated_at":"2025-12-30T01:54:13.176556-08:00","closed_at":"2025-12-30T01:16:59.688333-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.653942-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-slit","title":"gt-gastown-polecat-slit","description":"gt-gastown-polecat-slit\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-bho9\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T17:54:55.706657-08:00","created_by":"mayor","updated_at":"2025-12-30T01:52:04.608299-08:00","closed_at":"2025-12-30T01:16:59.828219-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.794879-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} -{"id":"gt-gastown-polecat-toast","title":"gt-gastown-polecat-toast","description":"gt-gastown-polecat-toast\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-38doh\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:19.899125-08:00","created_by":"mayor","updated_at":"2025-12-30T00:27:10.763368-08:00","closed_at":"2025-12-30T00:27:10.763368-08:00","close_reason":"nuked","deleted_at":"2025-12-30T00:27:10.724735-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} +{"id":"gt-gastown-polecat-toast","title":"gt-gastown-polecat-toast","description":"gt-gastown-polecat-toast\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-38doh\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:19.899125-08:00","created_by":"mayor","updated_at":"2025-12-30T02:01:08.813205-08:00","closed_at":"2025-12-30T00:27:10.763368-08:00","close_reason":"nuked","deleted_at":"2025-12-30T00:27:10.724735-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-valkyrie","title":"gt-gastown-polecat-valkyrie","description":"gt-gastown-polecat-valkyrie\n\nrole_type: polecat\nrig: gastown\nagent_state: done\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:58.583302-08:00","created_by":"mayor","updated_at":"2025-12-29T22:10:00.175657-08:00","closed_at":"2025-12-29T22:10:00.175657-08:00","close_reason":"nuked","deleted_at":"2025-12-29T22:10:00.139673-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-refinery","title":"Refinery for gastown - processes merge queue.","description":"Refinery for gastown - processes merge queue.\n\nrole_type: refinery\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-refinery-role\ncleanup_status: null","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-29T14:48:16.178399-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-30T01:41:13.373666-08:00"} {"id":"gt-gastown-witness","title":"Witness for gastown - monitors polecat health and progress.","description":"Witness for gastown - monitors polecat health and progress.\n\nrole_type: witness\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-witness-role\ncleanup_status: null","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-29T14:48:00.691337-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-30T01:18:04.028189-08:00"} @@ -1149,6 +1151,7 @@ {"id":"gt-gaxo.4","title":"Remove polecat state derivation from issue status","description":"**File:** polecat/manager.go (lines 556-599)\n\n**Current behavior:**\n- Switch on issue.Status to derive polecat state\n- Go decides: open/in_progress → Working, closed → Done\n\n**Fix:**\n- Polecat state comes from polecat, not inferred by Go\n- Polecat signals state via mail or explicit field\n- Or: remove state derivation entirely, just report issue status\n\n**Lines to refactor:**\n- manager.go:576-588 (switch statement)\n\n**Priority:** P2 - less critical than daemon/heartbeat logic","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T23:59:05.85152-08:00","updated_at":"2025-12-27T21:29:55.63759-08:00","dependencies":[{"issue_id":"gt-gaxo.4","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:05.852006-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.63759-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gaxo.5","title":"Design Deacon molecule health-check step","description":"**Context:** After removing Go heuristics, Deacon molecule needs the logic.\n\n**New molecule step: health-scan**\n\nClaude executes:\n1. Check Witness heartbeat: gt witness status \u003crig\u003e\n2. Check Refinery heartbeat: gt refinery status \u003crig\u003e\n3. For each, assess: responsive? stuck? needs restart?\n4. If unresponsive for N cycles, send escalation mail\n\n**Key difference from Go approach:**\n- Claude makes the judgment call, not hardcoded thresholds\n- Claude can read context (what was the agent working on?)\n- Claude can ask questions or check additional signals\n- Thresholds come from molecule config, not Go constants\n\n**Deliverables:**\n- Update mol-deacon-patrol health-scan step\n- Add configurable thresholds as molecule variables\n- Test with simulated stuck agents","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T23:59:07.247548-08:00","updated_at":"2025-12-27T21:29:55.629245-08:00","dependencies":[{"issue_id":"gt-gaxo.5","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:07.248049-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.629245-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gaxo.6","title":"Remove lifecycle intent parsing from Go","description":"daemon/lifecycle.go parses mail subjects with regex looking for restart/shutdown/cycle keywords, then executes actions. Fix: use structured message types in mail body instead of parsing subjects. Go reads action field, does not interpret text.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T23:59:15.765947-08:00","updated_at":"2025-12-27T21:29:52.72171-08:00","dependencies":[{"issue_id":"gt-gaxo.6","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:15.766409-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.72171-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-gaza0","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:33:44.544221-08:00","updated_at":"2025-12-29T22:33:44.544221-08:00","closed_at":"2025-12-29T22:33:44.544184-08:00"} {"id":"gt-gby","title":"gt handoff: Unified agent lifecycle command","description":"## Summary\n\nUnified `gt handoff` command for ALL agent types to request lifecycle actions.\n\n## Usage\n\ngt handoff # Context-aware default\ngt handoff --shutdown # Terminate, cleanup, don't restart\ngt handoff --cycle # Restart with handoff mail\ngt handoff --restart # Fresh restart, no handoff\n\n## Context-Aware Defaults\n\n| Agent Type | Default | Reason |\n|------------|---------|--------|\n| Polecat | --shutdown | Ephemeral, work is done |\n| Witness | --cycle | Long-running, context full |\n| Refinery | --cycle | Long-running, context full |\n| Mayor | --cycle | Long-running, context full |\n| Crew | (sends mail only) | Human-managed |\n\n## What gt handoff Does\n\n1. **Verify safe to stop**\n - Git state clean (no uncommitted changes)\n - Work handed off (PR exists for polecats)\n\n2. **Send handoff mail to self** (for cycle/restart)\n - Captures current state\n - New session will read this\n\n3. **Send lifecycle request to manager**\n - Polecats/Refinery → Witness\n - Witness/Mayor → Daemon\n - Format: mail to \u003cmanager\u003e with action type\n\n4. **Set state: requesting_\u003caction\u003e**\n - Lifecycle manager checks this before acting\n\n5. **Wait for termination**\n - Don't self-exit - let manager kill session\n - Ensures clean handoff\n\n## Lifecycle Request Flow\n\nAgent Lifecycle Manager\n | |\n | 1. gt handoff --cycle |\n | a. Verify git clean |\n | b. Send handoff mail to self |\n | c. Set requesting_cycle=true |\n | d. Send lifecycle request |\n |------------------------------------→|\n | |\n | 2. Receive request\n | 3. Verify state |\n | 4. Kill session |\n | 5. Start new |\n | (for cycle) |\n | |\n | New session reads handoff |\n | Resumes work |\n\n## Who Manages Whom\n\n| Agent | Sends lifecycle request to |\n|-------|---------------------------|\n| Polecat | \u003crig\u003e/witness |\n| Refinery | \u003crig\u003e/witness |\n| Witness | daemon/ |\n| Mayor | daemon/ |\n\n## Implementation\n\n1. Detect current role (polecat, witness, refinery, mayor, crew)\n2. Apply context-aware default if no flag specified\n3. Run pre-flight checks (git clean, work handed off)\n4. Send handoff mail to self (if cycling)\n5. Send lifecycle request to appropriate manager\n6. Set requesting_\u003caction\u003e in state.json\n7. Wait (manager will kill us)\n\n## For Polecats (--shutdown)\n\nAdditional cleanup after kill:\n- Witness removes worktree\n- Witness deletes polecat branch\n- Polecat ceases to exist\n\n## Related Issues\n\n- gt-99m: Daemon (handles Mayor/Witness lifecycle)\n- gt-7ik: Ephemeral polecats (polecat cleanup)\n- gt-eu9: Witness session cycling","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T11:39:40.806863-08:00","updated_at":"2025-12-27T21:29:54.203457-08:00","dependencies":[{"issue_id":"gt-gby","depends_on_id":"gt-7ik","type":"blocks","created_at":"2025-12-18T11:39:46.423945-08:00","created_by":"daemon"},{"issue_id":"gt-gby","depends_on_id":"gt-eu9","type":"blocks","created_at":"2025-12-18T11:39:46.547204-08:00","created_by":"daemon"},{"issue_id":"gt-gby","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T11:50:24.142182-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.203457-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gcnnr","title":"Add logging for silently ignored errors","description":"attached_args: Add logging for silently ignored errors\n\nAdd logging for silently ignored errors.\n\n## Problem\nMany places use `_ =` pattern to ignore errors without any logging, making debugging difficult.\n\n## Files to modify\n- internal/cmd/start.go (lines 167, 322-323, 429, 747-753, 886-888)\n- internal/cmd/polecat.go (search for `_ =`)\n- internal/session/manager.go (lines 140-154)\n- internal/refinery/manager.go (line 399)\n- internal/keepalive/keepalive.go (document as intentional)\n\n## Implementation options\n\n### Option A: Add comments explaining safety\n```go\n_ = m.saveState(ref) // Non-fatal: state will be recreated on next run\n```\n\n### Option B: Log warnings (preferred for important operations)\n```go\nif err := m.saveState(ref); err != nil {\n log.Printf(\"warning: failed to save state: %v\", err)\n}\n```\n\n## Guidelines\n- Use logging for: state saves, config writes, cleanup operations\n- Use comments for: truly benign operations (e.g., closing already closed file)\n- keepalive is intentionally best-effort - add package-level comment\n\n## Acceptance criteria\n- [ ] All `_ =` in start.go have comment OR logging\n- [ ] All `_ =` in session/manager.go have comment OR logging \n- [ ] refinery/manager.go:399 has logging\n- [ ] keepalive package has doc comment explaining best-effort design\n- [ ] grep '`_ =`' shows all have justification\n- [ ] go build ./... passes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:43:13.787806-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T16:40:19.539625-08:00","closed_at":"2025-12-28T16:40:19.539625-08:00"} {"id":"gt-gczi","title":"Digest: mol-deacon-patrol","description":"Patrol 20 - handoff threshold reached","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:11:34.570635-08:00","updated_at":"2025-12-27T21:26:04.408676-08:00","deleted_at":"2025-12-27T21:26:04.408676-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1158,6 +1161,7 @@ {"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-giyhp","title":"Bug: gt sling doesn't update agent bead hook_bead field","description":"gt sling marks task as pinned with assignee, but doesn't update the agent bead's hook_bead field. Agent beads show hook_bead: null even after slinging. This prevents agents from knowing they have work on their hook.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-28T16:19:01.206912-08:00","created_by":"stevey","updated_at":"2025-12-28T16:21:08.592848-08:00","closed_at":"2025-12-28T16:21:08.592848-08:00"} {"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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:03.267386-08:00","created_by":"mayor","updated_at":"2025-12-28T09:42:16.843615-08:00","closed_at":"2025-12-28T09:42:16.843615-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-gkbmj","title":"Digest: mol-deacon-patrol","description":"Patrol 16: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:35:27.242285-08:00","updated_at":"2025-12-28T01:35:27.242285-08:00","closed_at":"2025-12-28T01:35:27.242252-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"} @@ -1192,7 +1196,7 @@ {"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"}]} {"id":"gt-h28m","title":"Deacon patrol banners: visual feedback on atom transitions","description":"Print large ASCII banners when transitioning between patrol atoms.\n\n## Problem\n\nWhen the deacon progresses through patrol atoms (steps), there is no visual feedback.\nThe operator cannot easily see what the deacon is doing without reading the full output.\n\n## Desired Behavior\n\nPrint banners on step start and completion:\n\n INBOX-CHECK - Checking for lifecycle requests, escalations, timers\n INBOX-CHECK COMPLETE - Processed 3 messages, 0 lifecycle requests\n\n## Benefits\n\n1. Scanability: Operator can glance at tmux and see what is happening\n2. Progress tracking: Easy to see where in the patrol loop we are\n3. Debugging: Clear demarcation between steps for troubleshooting\n\n## Implementation Options\n\n1. In deacon CLAUDE.md: Instruct agent to print banners\n2. gt patrol step start/end: Commands that print banners\n3. bd mol step hooks: Automatically on step transitions\n\n## Related\n\n- gt-id36: Deacon Kernel\n- gt-rana: Patrol System","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-22T03:04:14.290474-08:00","updated_at":"2025-12-27T21:29:56.37873-08:00","deleted_at":"2025-12-27T21:29:56.37873-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} -{"id":"gt-h2cvm","title":"Digest: mol-deacon-patrol","description":"Patrol 18: all healthy, handled 1 handoff msg","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:12:03.408989-08:00","updated_at":"2025-12-27T23:12:03.408989-08:00","closed_at":"2025-12-27T23:12:03.408951-08:00","dependencies":[{"issue_id":"gt-h2cvm","depends_on_id":"gt-eph-ith","type":"parent-child","created_at":"2025-12-27T23:12:03.409801-08:00","created_by":"deacon"}]} +{"id":"gt-h2cvm","title":"Digest: mol-deacon-patrol","description":"Patrol 18: all healthy, handled 1 handoff msg","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:12:03.408989-08:00","updated_at":"2025-12-27T23:12:03.408989-08:00","closed_at":"2025-12-27T23:12:03.408951-08:00"} {"id":"gt-h2dc","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.\n\nDepends: generate-summary","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T22:04:43.421327-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","dependencies":[{"issue_id":"gt-h2dc","depends_on_id":"gt-jvr3","type":"parent-child","created_at":"2025-12-21T22:04:43.424974-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-h2qua","title":"Digest: mol-deacon-patrol","description":"Patrol 6: all clear, agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:44:29.400277-08:00","updated_at":"2025-12-27T21:26:01.263011-08:00","deleted_at":"2025-12-27T21:26:01.263011-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-h3hak","title":"Day 2.7a: gt install creates Deacon and Mayor agent beads","description":"Update gt install to create agent beads:\n\n1. After initializing town beads, create:\n - gt-deacon agent bead (role_type: deacon, rig: null, agent_state: idle)\n - gt-mayor agent bead (role_type: mayor, rig: null, agent_state: idle)\n\n2. Use bd create --type=agent or internal beads API\n\nFiles:\n- internal/cmd/install.go","notes":"Moved to gt rig add instead of gt install due to routing constraints. Agent beads need to be in rig beads (not town beads) for daemon to find them via prefix routing. First rig added gets gt-deacon and gt-mayor.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-28T02:17:05.962052-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T02:31:10.60009-08:00","closed_at":"2025-12-28T02:31:10.60009-08:00","dependencies":[{"issue_id":"gt-h3hak","depends_on_id":"gt-aer7q","type":"parent-child","created_at":"2025-12-28T02:17:17.522839-08:00","created_by":"daemon"}]} @@ -1244,6 +1248,7 @@ {"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"} {"id":"gt-hdlw6","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Quiet, 8 sessions healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:17:12.416379-08:00","updated_at":"2025-12-27T21:26:02.715987-08:00","deleted_at":"2025-12-27T21:26:02.715987-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hdzct","title":"gt mail send to self: Auto-detect from cwd for handoff mail","description":"When sending mail to yourself (common for handoffs), gt mail send from an agent directory should auto-detect both sender and recipient. Example: gt mail send -s 'HANDOFF' -m '...' from mayor/rig should send to mayor/.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-28T22:27:42.426037-08:00","created_by":"stevey","updated_at":"2025-12-28T22:27:42.426037-08:00"} +{"id":"gt-hencu","title":"Digest: mol-deacon-patrol","description":"Patrol 12: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:33:37.763838-08:00","updated_at":"2025-12-28T01:33:37.763838-08:00","closed_at":"2025-12-28T01:33:37.763801-08:00"} {"id":"gt-hfi97","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All agents healthy, cleaned 18 stale wisps","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T03:04:22.750541-08:00","updated_at":"2025-12-27T21:26:03.771751-08:00","deleted_at":"2025-12-27T21:26:03.771751-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hgk","title":"Mail system: message types and threading","description":"GGT mail system needs message types and threading like PGT.\n\n## 1. Message Types\nAdd to internal/mail/types.go:\n```go\ntype MessageType string\nconst (\n TypeTask MessageType = \"task\" // Required processing\n TypeScavenge MessageType = \"scavenge\" // Optional first-come work\n TypeNotification MessageType = \"notification\" // Informational\n TypeReply MessageType = \"reply\" // Response to message\n)\n\n// Update Message struct\ntype Message struct {\n // existing fields...\n Type MessageType `json:\"type\"`\n ThreadID string `json:\"thread_id,omitempty\"`\n ReplyTo string `json:\"reply_to,omitempty\"`\n}\n```\n\n## 2. Priority Levels\nExpand from 2 to 4:\n```go\ntype Priority string\nconst (\n PriorityLow Priority = \"low\"\n PriorityNormal Priority = \"normal\"\n PriorityHigh Priority = \"high\"\n PriorityUrgent Priority = \"urgent\"\n)\n```\n\n## 3. CLI Updates\ninternal/cmd/mail.go:\n- Add --type flag to send: `gt mail send ... --type task`\n- Add --reply-to flag: `gt mail send ... --reply-to \u003cmsg-id\u003e`\n- Add thread command: `gt mail thread \u003cthread-id\u003e`\n\n## 4. Threading Logic\nNewMessage() should auto-generate thread_id if not a reply.\nReply messages inherit thread_id from original.\n\n## Files to Modify\n- internal/mail/types.go: Add types, expand Priority\n- internal/mail/mailbox.go: Thread filtering\n- internal/cmd/mail.go: CLI flags and thread command\n\n## PGT Reference\ngastown-py/src/gastown/mail/message.py\n\n## Acceptance Criteria\n- [ ] Messages have type field (default: notification)\n- [ ] 4 priority levels supported\n- [ ] Reply creates thread with shared thread_id\n- [ ] gt mail thread \u003cid\u003e shows conversation","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T14:46:55.29463-08:00","updated_at":"2025-12-27T21:29:54.452638-08:00","deleted_at":"2025-12-27T21:29:54.452638-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hj0ei","title":"Polecat writes files outside worktree (integration test)","description":"During integration test gt-7psb8, polecat furiosa was asked to create ~/gt/gastown/test-polecat-integration.txt\n\nIt used Write tool with relative path '../../test-polecat-integration.txt' which resolved to gastown root instead of its worktree at ~/gt/gastown/polecats/furiosa/\n\nObserved:\n- File created at ~/gt/gastown/test-polecat-integration.txt (WRONG)\n- Furiosa worktree at ~/gt/gastown/polecats/furiosa/ has no such file\n- Furiosa branch has no commits of any new files\n\nRoot cause: Claude Code resolves relative paths from cwd, and the polecat may have been in the wrong directory or used incorrect path.\n\nThis caused the entire merge to be empty (branch at same commit as main).","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-28T13:13:38.423978-08:00","created_by":"mayor","updated_at":"2025-12-28T14:00:14.068658-08:00","closed_at":"2025-12-28T14:00:14.068658-08:00"} @@ -1256,7 +1261,6 @@ {"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-hpmb1","title":"Digest: mol-deacon-patrol","description":"Patrol 16: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:35:44.801254-08:00","updated_at":"2025-12-29T22:35:44.801254-08:00","closed_at":"2025-12-29T22:35:44.801217-08:00","dependencies":[{"issue_id":"gt-hpmb1","depends_on_id":"gt-eph-016","type":"parent-child","created_at":"2025-12-29T22:35:44.802203-08:00","created_by":"deacon"}]} {"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"} -{"id":"gt-hq9lx","title":"Digest: mol-deacon-patrol","description":"Patrol 13: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:35:09.497504-08:00","updated_at":"2025-12-29T22:35:09.497504-08:00","closed_at":"2025-12-29T22:35:09.497473-08:00"} {"id":"gt-hqymv","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:04.952768-08:00","updated_at":"2025-12-25T11:05:04.952768-08:00","closed_at":"2025-12-25T11:05:04.952741-08:00"} {"id":"gt-hr2bg","title":"Digest: mol-deacon-patrol","description":"Patrol 4: gastown+beads witnesses/refineries healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:38:43.666431-08:00","updated_at":"2025-12-27T21:26:00.912967-08:00","deleted_at":"2025-12-27T21:26:00.912967-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hrgpg","title":"Unified Beads Namespace - prefix-based routing across town","description":"Vision: Run bd commands from anywhere in town, with prefix-based routing.\n\nCurrent state:\n- Town beads at ~/gt/.beads/ with hq-* prefix\n- Rig beads at ~/gt/\u003crig\u003e/mayor/rig/.beads/ with rig-specific prefixes (gt-, bd-, wy-, etc.)\n- Redirects allow agents to use specific beads location\n- No automatic prefix-based routing\n\nDesired state:\n- bd show gt-xyz from ANYWHERE in town → routes to gastown beads\n- bd show hq-abc from ANYWHERE in town → routes to town beads \n- bd show wy-def from ANYWHERE in town → routes to wyvern beads\n- Prefix determines beads location automatically\n\nImplementation options:\n1. Registry file at town root mapping prefix → beads location\n2. bd wrapper/hook that reads prefix and routes\n3. Unified store with namespace prefixes (more invasive)\n\nRelated work:\n- gt-0pdhj: Remove hardcoded gastown dependencies\n- Template fixes needed for deacon, witness, refinery CLAUDE.md","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-26T18:35:49.567861-08:00","updated_at":"2025-12-27T21:29:45.806641-08:00","deleted_at":"2025-12-27T21:29:45.806641-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} @@ -1273,7 +1277,6 @@ {"id":"gt-hyj5t","title":"Digest: mol-deacon-patrol","description":"Patrol 1: No mail, all agents healthy (mayor/witnesses/refineries OK), 0 polecats active, 2 orphaned mols for removed furiosa polecat noted","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T07:23:29.892203-08:00","updated_at":"2025-12-27T21:26:03.68519-08:00","deleted_at":"2025-12-27T21:26:03.68519-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hymm0","title":"Crew agent beads never created (dead code in reportAgentState)","description":"## Problem\n\nIn prime.go, reportAgentState is called for ALL roles including crew workers.\nThe function calls bd.UpdateAgentState for crew with ID like gt-crew-gastown-max.\n\nBut crew agent beads are NEVER created:\n- Polecats: Created on spawn (polecat/manager.go:167)\n- Infrastructure: Created by doctor/install (doctor/agent_beads_check.go)\n- Crew: Nothing creates them\n\nThe error is silently ignored, so this doesn't break anything, but it's dead code.\n\n## Found in commit\n\nf3a6ef6 (feat: Witness reads polecat state from agent beads)\n\n## Decision\n\n**Create crew agent beads** on first gt prime if they don't exist.\n\nCrew workers are human-managed but their state is still valuable for:\n- Town-wide status dashboards\n- Understanding who's working on what\n- Consistent agent bead model across all agent types\n\n## Implementation\n\nIn prime.go reportAgentState(), before calling UpdateAgentState:\n1. Try to get the agent bead\n2. If it doesn't exist, create it with CreateAgentBead\n3. Then update state as normal","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T09:48:06.89737-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T09:52:22.110029-08:00","closed_at":"2025-12-28T09:52:22.110029-08:00"} {"id":"gt-hzr","title":"gt witness: Witness management commands","description":"Add 'gt witness' command group for witness lifecycle management.\n\nSubcommands:\n- gt witness start [rig] - Start witness for a rig\n- gt witness stop [rig] - Stop witness\n- gt witness status [rig] - Show witness status\n- gt witness attach [rig] - Attach to witness session\n\nWitness monitors polecats and handles:\n- Idle detection and cleanup\n- Session health checks\n- Nudging stuck agents","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T21:47:32.210917-08:00","updated_at":"2025-12-27T21:29:57.24778-08:00","dependencies":[{"issue_id":"gt-hzr","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:23:42.955006-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.24778-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-hzxzx","title":"Digest: mol-deacon-patrol","description":"Patrol 12: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:47:12.749201-08:00","updated_at":"2025-12-28T19:47:12.749201-08:00","closed_at":"2025-12-28T19:47:12.749166-08:00"} {"id":"gt-i11mk","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 19: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:50.416671-08:00","updated_at":"2025-12-28T11:22:50.416671-08:00","closed_at":"2025-12-28T11:22:50.416639-08:00"} {"id":"gt-i26df","title":"Code Smell Cleanup: Gas Town Code Quality","description":"Comprehensive code smell cleanup identified in code review session.\n\n## Scope\nFixes for duplication, thread safety, missing tests, inconsistent patterns, and dead code.\n\n## Child issues (18 total)\n\n### Thread Safety \u0026 Data Integrity (P2)\n- gt-wled7: Atomic write pattern for state files\n- gt-xtsb5: Fix namepool Save() mutex\n- gt-bp0ht: Add swarm.Manager mutex\n\n### Duplication Removal (P2)\n- gt-560ge: Extract processExists function\n- gt-ddw3y: Extract molecule_lifecycle boilerplate\n- gt-atqr8: Session name helper functions\n- gt-ov2uv: AgentIdentity type for parsing\n\n### Missing Tests (P2)\n- gt-p2eg5: Lock package tests\n- gt-0vu9e: mrqueue package tests\n- gt-1pelm: mail router/mailbox tests\n\n### Code Quality (P2)\n- gt-gcnnr: Add logging for ignored errors\n\n### Constants Extraction (P3)\n- gt-4u682: SupportedShells constant\n- gt-795e8: Timing constants\n\n### Refactoring (P3)\n- gt-tkbd5: Refactor runStart\n- gt-dsqxw: Refactor runStartCrew\n\n### Error Handling (P3)\n- gt-h3skz: Remove os.Exit from RunE\n- gt-g6kor: Standardize warning output\n\n### Dead Code (P4)\n- gt-2g130: Remove unused code\n\n## Acceptance criteria\n- [ ] All child issues closed\n- [ ] go build ./... passes\n- [ ] go test ./... passes\n- [ ] go test -race ./... passes","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-28T15:50:43.855896-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T17:21:29.660385-08:00","closed_at":"2025-12-28T17:21:29.660385-08:00","dependencies":[{"issue_id":"gt-i26df","depends_on_id":"gt-560ge","type":"blocks","created_at":"2025-12-28T15:51:22.661646-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-ddw3y","type":"blocks","created_at":"2025-12-28T15:51:22.695272-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-gcnnr","type":"blocks","created_at":"2025-12-28T15:51:22.727278-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-2g130","type":"blocks","created_at":"2025-12-28T15:51:22.758725-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-atqr8","type":"blocks","created_at":"2025-12-28T15:51:22.790849-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-ov2uv","type":"blocks","created_at":"2025-12-28T15:51:22.822137-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-4u682","type":"blocks","created_at":"2025-12-28T15:51:22.854658-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-795e8","type":"blocks","created_at":"2025-12-28T15:51:22.887375-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-p2eg5","type":"blocks","created_at":"2025-12-28T15:51:22.919914-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-0vu9e","type":"blocks","created_at":"2025-12-28T15:51:22.95112-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-1pelm","type":"blocks","created_at":"2025-12-28T15:51:22.982649-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-tkbd5","type":"blocks","created_at":"2025-12-28T15:51:23.014724-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-dsqxw","type":"blocks","created_at":"2025-12-28T15:51:23.04713-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-bp0ht","type":"blocks","created_at":"2025-12-28T15:51:23.079833-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-xtsb5","type":"blocks","created_at":"2025-12-28T15:51:23.111918-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-wled7","type":"blocks","created_at":"2025-12-28T15:51:23.14385-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-h3skz","type":"blocks","created_at":"2025-12-28T15:51:23.17564-08:00","created_by":"daemon"},{"issue_id":"gt-i26df","depends_on_id":"gt-g6kor","type":"blocks","created_at":"2025-12-28T15:51:23.207367-08:00","created_by":"daemon"}]} {"id":"gt-i3deo","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 18: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:48:00.534606-08:00","updated_at":"2025-12-27T21:26:01.328895-08:00","deleted_at":"2025-12-27T21:26:01.328895-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1282,6 +1285,7 @@ {"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"} +{"id":"gt-i60n0","title":"Digest: mol-deacon-patrol","description":"Patrol 12: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:34:51.442287-08:00","updated_at":"2025-12-29T22:34:51.442287-08:00","closed_at":"2025-12-29T22:34:51.442253-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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:51:36.803749-08:00","updated_at":"2025-12-28T14:07:37.693255-08:00","closed_at":"2025-12-28T14:07:37.693255-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"} @@ -1355,7 +1359,6 @@ {"id":"gt-iu23","title":"Polecat doesn't auto-start after spawn inject - requires manual nudge","description":"## Problem\n\nAfter `gt spawn --issue \u003cid\u003e --create`, the polecat session shows Claude Code started with the injected prompt, but Claude doesn't begin processing. The prompt just sits there until manually nudged.\n\n## Evidence\n\n```\n$ gt spawn --issue gt-rixa --rig gastown --create\n...\n✓ Session started. Attach with: gt session at gastown/furiosa\n Polecat nudged to start working\n Witness notified to monitor startup\n```\n\nSession shows:\n```\n\u003e You have a work assignment. Run 'gt mail inbox' to see it, then start\n working on issue gt-rixa.\n\n ⏵⏵ bypass permissions on (shift+tab to cycle)\n```\n\nBut Claude doesn't respond. Manual nudge required:\n```\n$ gt nudge gt-gastown-furiosa \"Please start working...\"\n```\n\nAfter nudge, polecat immediately starts working correctly.\n\n## Hypothesis\n\nThe spawn inject happens before Claude Code is fully initialized. The text arrives in the input buffer, but Claude hasn't started listening yet. By the time Claude starts, the input has already been 'consumed' as initial prompt text but not submitted.\n\n## Resolution Plan\n\nThis will be solved by the **polecat molecule workflow** (mol-polecat-work), which provides structured lifecycle management. The molecule approach handles startup, work, and shutdown as discrete steps with proper state tracking.\n\n**Blocked on**: beads/crew/dave completing ephemeral molecules (bd mol bond, ephemeral beads repo).\n\n## Workaround\n\nFor now, use `gt nudge` if a polecat doesn't start within ~30 seconds of spawn.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-21T14:06:27.375686-08:00","updated_at":"2025-12-27T21:29:53.535065-08:00","deleted_at":"2025-12-27T21:29:53.535065-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-iua8","title":"Merge: gt-frs","description":"branch: polecat/Slit\ntarget: main\nsource_issue: gt-frs\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T16:30:05.529099-08:00","updated_at":"2025-12-27T21:27:22.947103-08:00","deleted_at":"2025-12-27T21:27:22.947103-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-iudqo","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-25T11:05:57.818656-08:00","updated_at":"2025-12-28T22:33:21.96702-08:00","closed_at":"2025-12-28T22:33:21.96702-08:00"} -{"id":"gt-iuv1c","title":"Digest: mol-deacon-patrol","description":"Patrol 14: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:09:38.184463-08:00","updated_at":"2025-12-27T23:09:38.184463-08:00","closed_at":"2025-12-27T23:09:38.18442-08:00"} {"id":"gt-iva20","title":"Liftoff test: Add timestamp comment to manager.go","description":"Simple liftoff test task.\n\nAdd a comment at the top of internal/polecat/manager.go with the current timestamp, like:\n// Liftoff test: \u003ctimestamp\u003e\n\nThis tests the full polecat → refinery → witness cycle.","status":"hooked","priority":1,"issue_type":"task","created_at":"2025-12-28T16:18:27.905345-08:00","created_by":"stevey","updated_at":"2025-12-28T16:18:40.555384-08:00"} {"id":"gt-ivf6w","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:56:13.720896-08:00","updated_at":"2025-12-28T15:56:13.720896-08:00","closed_at":"2025-12-28T15:56:13.720857-08:00"} {"id":"gt-ivtk7","title":"Digest: mol-deacon-patrol","description":"Patrol 20: healthy - handoff cycle","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:25:40.059953-08:00","updated_at":"2025-12-27T21:25:59.977735-08:00","deleted_at":"2025-12-27T21:25:59.977735-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1451,7 +1454,6 @@ {"id":"gt-kh6q","title":"Remove Go-based witness patrol - Claude session is the executor","description":"## Problem\n\nThe witness has 1370 lines of Go code in internal/witness/manager.go that reimplements what mol-witness-patrol does:\n- healthCheck() - polls polecats\n- autoSpawnForReadyWork() - spawns polecats for ready issues \n- handleStuckPolecat() - nudge logic\n- processShutdownRequests() - cleanup logic\n- verifyPolecatState() - git state checks\n\nThis is backwards. The molecule should drive the work, Claude should execute it.\n\n## The Wrong Architecture (gt-59zd, now cancelled)\n\nThe cancelled gt-59zd tried to use molecules as 'tracking ledgers' for Go code:\n- Go code runs patrol logic\n- Molecule just records what Go did\n- Duplicates work, adds complexity\n\n## The Right Architecture\n\n1. Witness runs as Claude session (via gt sling witness or tmux)\n2. Claude executes mol-witness-patrol steps directly\n3. No Go patrol loop needed\n4. Molecule IS the executor, not bookkeeping\n\n## Scope\n\n1. Remove patrol-related functions from manager.go:\n - run(), checkAndProcess(), healthCheck()\n - handleStuckPolecat(), getNudgeCount(), recordNudge()\n - processShutdownRequests(), verifyPolecatState()\n - autoSpawnForReadyWork(), etc.\n\n2. Keep session management functions:\n - Start(), Stop(), Status() - for starting/stopping Claude session\n - State persistence for session identity\n\n3. Update gt witness commands to use Claude session model\n\n4. Test that mol-witness-patrol executes correctly in Claude session\n\n## Related\n\n- gt-zde4: Fixed Witness CLAUDE.md to emphasize mol-following\n- gt-59zd: Cancelled - wrong architecture\n- witness.md.tmpl: Already rewritten with ZFC principle","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-23T22:42:13.02343-08:00","updated_at":"2025-12-27T21:29:52.763067-08:00","deleted_at":"2025-12-27T21:29:52.763067-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-ki3qa","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no mail, no action needed","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:43:42.061004-08:00","updated_at":"2025-12-27T21:26:03.495134-08:00","deleted_at":"2025-12-27T21:26:03.495134-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-kjnt","title":"Polecat Mood Plugin (standard)","description":"Standard witness plugin molecule that assesses polecat emotional state.\n\n## Molecule Definition\n\n```json\n{\n \"id\": \"mol-polecat-mood\",\n \"title\": \"Assess mood for {{polecat_name}}\",\n \"description\": \"Analyze captured output and determine emotional state.\\n\\nVars:\\n- {{polecat_name}} - The polecat to assess\\n- {{captured_output}} - Recent tmux capture\\n\\nOutput: gt polecat mood {{polecat_name}} \u003cemoji\u003e\",\n \"labels\": [\"template\", \"plugin\", \"witness\", \"tier:haiku\"],\n \"issue_type\": \"task\"\n}\n```\n\n## Mood Emojis\n\n```\n😺 working Active tool calls, making progress\n😸 productive Completing tasks, tests passing\n🐱 idle Waiting at prompt, no recent activity\n😼 confident Self-reviewing, about to submit\n😿 struggling Repeated errors, test failures\n🙀 stuck No progress for 10+ min\n😽 done Work complete, requesting shutdown\n😾 blocked Explicitly waiting on dependency\n```\n\n## Bonding\n\nDuring witness patrol plugin-run step:\n\n```bash\nbd mol bond mol-polecat-mood $PATROL_WISP \\\n --ref mood-{{polecat_name}} \\\n --var polecat_name=ace \\\n --var captured_output=\"$TMUX_CAPTURE\"\n```\n\n## Installation\n\n```bash\nbd mol install mol-polecat-mood # From Mol Mall\n```\n\n## Customization\n\nFork the molecule and modify description to change assessment criteria or add custom moods. Install your fork to override.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-21T16:17:12.841134-08:00","updated_at":"2025-12-27T21:29:56.562233-08:00","dependencies":[{"issue_id":"gt-kjnt","depends_on_id":"gt-u818","type":"blocks","created_at":"2025-12-21T16:17:20.444775-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.562233-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} -{"id":"gt-kjsp3","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:06:55.631263-08:00","updated_at":"2025-12-27T23:06:55.631263-08:00","closed_at":"2025-12-27T23:06:55.631229-08:00"} {"id":"gt-kkcql","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:53:55.840419-08:00","updated_at":"2025-12-27T21:26:02.879581-08:00","deleted_at":"2025-12-27T21:26:02.879581-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-kktj","title":"Patrol agent state.json not updated on activity","description":"Witness and Refinery state.json files show last_active from Dec 19 even though sessions have been running. The state should update each patrol cycle.\n\nEvidence:\n```\n$ cat beads/witness/state.json\n{\"role\": \"witness\", \"last_active\": \"2025-12-19T17:50:00Z\"}\n\n$ cat beads/refinery/state.json \n{\"role\": \"refinery\", \"last_active\": \"2025-12-19T17:50:00Z\"}\n```\n\nExpected: last_active should update each time the agent runs a patrol cycle.\n\nImpact: Can't tell if patrol agents are actually active vs just having an open tmux session.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-23T20:29:58.515591-08:00","updated_at":"2025-12-28T22:37:43.91459-08:00","closed_at":"2025-12-28T22:37:43.91459-08:00"} {"id":"gt-kl5e","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:36:01.786393-08:00","updated_at":"2025-12-27T21:26:04.642845-08:00","deleted_at":"2025-12-27T21:26:04.642845-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1515,6 +1517,7 @@ {"id":"gt-l9t35","title":"Test MR","description":"branch: test-branch\ntarget: main\nsource_issue: gt-test\nrig: gastown","status":"closed","priority":3,"issue_type":"merge-request","created_at":"2025-12-28T13:55:31.051975-08:00","created_by":"mayor","updated_at":"2025-12-28T13:55:51.591898-08:00","closed_at":"2025-12-28T13:55:51.591898-08:00"} {"id":"gt-lajrx","title":"Digest: mol-deacon-patrol","description":"Patrol 7: healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T06:09:55.036375-08:00","updated_at":"2025-12-28T06:09:55.036375-08:00","closed_at":"2025-12-28T06:09:55.036344-08:00"} {"id":"gt-lak31","title":"MQ events in gt feed","description":"Wire MQ lifecycle events to gt feed display.\n\nAfter 'Refinery emits activity events' is done:\n- gt feed should show merge_started, merged, merge_failed events\n- Format: timestamp, event type, MR details\n- Color coding: green for merged, red for failed\n\nExample output:\n 19:45 MERGED gt-abc123 (polecat/nux → main)\n 19:42 MERGE_STARTED gt-abc123\n 19:40 MERGE_FAILED gt-xyz789 (conflict)","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/capable","created_at":"2025-12-28T21:40:39.079766-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-30T01:13:59.396794-08:00","closed_at":"2025-12-30T01:13:59.396794-08:00","close_reason":"Implemented MQ lifecycle events in gt feed using standalone mqevents package","dependencies":[{"issue_id":"gt-lak31","depends_on_id":"gt-ytsxp","type":"blocks","created_at":"2025-12-28T21:41:11.587659-08:00","created_by":"daemon"}]} +{"id":"gt-lcjjk","title":"Digest: mol-deacon-patrol","description":"Patrol 18: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:36:32.505078-08:00","updated_at":"2025-12-28T01:36:32.505078-08:00","closed_at":"2025-12-28T01:36:32.505042-08:00"} {"id":"gt-ldb5m","title":"Digest: mol-deacon-patrol","description":"P11: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:59:19.365052-08:00","updated_at":"2025-12-25T19:59:19.365052-08:00","closed_at":"2025-12-25T19:59:19.364984-08:00"} {"id":"gt-ldk8","title":"Witness should verify polecat submitted before stopping session","description":"## Problem\n\nWitness stopped dementus's session before it could call `gt done`, losing the MR submission. I had to manually push and submit the branch.\n\n## Root Cause\n\nWitness cleanup is triggered by nudge/manual check rather than by receiving POLECAT_DONE message. When Witness cleans up based on issue status (closed), it doesn't wait for the polecat to complete its shutdown sequence.\n\n## Expected Behavior\n\nWitness should only stop a polecat session after:\n1. Receiving POLECAT_DONE message from that polecat, OR\n2. Timeout waiting for POLECAT_DONE after issue is closed\n\n## Current Behavior\n\nWitness stops sessions immediately when asked to check for completions, even if polecat hasn't called `gt done` yet.\n\n## Fix\n\nIn mol-witness-patrol inbox-check step:\n- Only clean up polecats that have sent POLECAT_DONE\n- For polecats with closed issues but no DONE message, nudge them to complete\n- Add timeout before force-killing","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-22T23:54:12.969528-08:00","updated_at":"2025-12-27T21:29:53.074298-08:00","deleted_at":"2025-12-27T21:29:53.074298-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-ldm4","title":"verify-tests","description":"Run existing tests. Add new tests for new functionality.\nEnsure adequate coverage.\n\ngo test ./...\n\nFix any test failures before proceeding.\n\nDepends: implement","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:48:26.322056-08:00","updated_at":"2025-12-25T14:12:42.217455-08:00","deleted_at":"2025-12-25T14:12:42.217455-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1524,7 +1527,7 @@ {"id":"gt-leqvb","title":"Merge: slit-1767079899677","description":"branch: polecat/slit-1767079899677\ntarget: main\nsource_issue: slit-1767079899677\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:36:35.88583-08:00","created_by":"gastown/polecats/slit","updated_at":"2025-12-29T23:55:11.871688-08:00","closed_at":"2025-12-29T23:55:11.871688-08:00","close_reason":"Stale MR from nuked polecat"} {"id":"gt-lexye","title":"Create internal/tui/ package with feed model","description":"Create the TUI infrastructure for gt feed.\n\n## Package structure\n```\ninternal/tui/\n feed/\n model.go # bubbletea Model struct\n view.go # View() rendering\n update.go # Update() message handling\n events.go # Event stream subscription (tail .feed.jsonl)\n styles.go # lipgloss styles\n keys.go # Key bindings\n```\n\n## Model components\n1. **AgentTree** - Collapsible tree of agents by role\n2. **EventStream** - Scrollable viewport of recent events\n3. **StatusBar** - Current filter, help hints\n4. **FilterPopup** - Modal for setting filters\n\n## Key bindings\n- j/k - scroll events\n- J/K - scroll agent tree\n- tab - switch focus (tree/stream)\n- enter - expand/details\n- / - search\n- f - filter popup\n- q - quit\n- ? - help\n\n## Event subscription\n- Tail ~/gt/.feed.jsonl using fsnotify or polling\n- Parse JSONL events\n- Send as bubbletea messages to update model","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T16:13:40.29527-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T16:21:50.5417-08:00","closed_at":"2025-12-28T16:21:50.5417-08:00","dependencies":[{"issue_id":"gt-lexye","depends_on_id":"gt-be0as","type":"blocks","created_at":"2025-12-28T16:14:50.294818-08:00","created_by":"daemon"}]} {"id":"gt-lf7c8","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final patrol, handing off","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:06:01.256064-08:00","updated_at":"2025-12-27T21:26:03.951969-08:00","deleted_at":"2025-12-27T21:26:03.951969-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-lfi2d","title":"Delete .runtime/*.json observable state","description":"Remove JSON files that tracked observable state (now in beads/activity stream).\n\nFiles to delete or minimize:\n- .runtime/refinery.json - remove stats (keep minimal process state if needed)\n- .runtime/witness.json - remove stats\n- .runtime/swarms.json - delete entirely (gt-kc7yj moves to beads)\n\nPrerequisite: All events flowing through activity stream, swarms in beads.\n\nThis is the cleanup step after observability is working.","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/dementus","created_at":"2025-12-28T21:40:53.315319-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-30T00:23:48.318758-08:00","dependencies":[{"issue_id":"gt-lfi2d","depends_on_id":"gt-lak31","type":"blocks","created_at":"2025-12-28T21:41:11.646917-08:00","created_by":"daemon"},{"issue_id":"gt-lfi2d","depends_on_id":"gt-rbncw","type":"blocks","created_at":"2025-12-28T21:41:11.676514-08:00","created_by":"daemon"},{"issue_id":"gt-lfi2d","depends_on_id":"gt-kc7yj","type":"blocks","created_at":"2025-12-28T21:41:11.706063-08:00","created_by":"daemon"}]} +{"id":"gt-lfi2d","title":"Delete .runtime/*.json observable state","description":"Remove JSON files that tracked observable state (now in beads/activity stream).\n\nFiles to delete or minimize:\n- .runtime/refinery.json - remove stats (keep minimal process state if needed)\n- .runtime/witness.json - remove stats\n- .runtime/swarms.json - delete entirely (gt-kc7yj moves to beads)\n\nPrerequisite: All events flowing through activity stream, swarms in beads.\n\nThis is the cleanup step after observability is working.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/toast","created_at":"2025-12-28T21:40:53.315319-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-30T02:00:51.189957-08:00","closed_at":"2025-12-30T02:00:51.189957-08:00","close_reason":"Removed Stats fields from witness and refinery types. Observable metrics now flow through activity stream.","dependencies":[{"issue_id":"gt-lfi2d","depends_on_id":"gt-lak31","type":"blocks","created_at":"2025-12-28T21:41:11.646917-08:00","created_by":"daemon"},{"issue_id":"gt-lfi2d","depends_on_id":"gt-rbncw","type":"blocks","created_at":"2025-12-28T21:41:11.676514-08:00","created_by":"daemon"},{"issue_id":"gt-lfi2d","depends_on_id":"gt-kc7yj","type":"blocks","created_at":"2025-12-28T21:41:11.706063-08:00","created_by":"daemon"}]} {"id":"gt-lg66","title":"Mail should use wisps for ephemeral orchestration messages","description":"## Problem\n\nTown HQ beads are polluted with lifecycle orchestration messages:\n- POLECAT_STARTED notifications\n- Work assignments to polecats\n- \"Start work\" nudges\n- Test messages\n\nThese should never have been persistent beads. They accumulate forever.\n\n## Analysis\n\nMail serves two purposes:\n1. **Durable messages** - Handoffs, escalations, human-agent comms (need persistence)\n2. **Ephemeral signals** - Lifecycle pings, work assignments, nudges (should be wisps)\n\n## Options\n\n### Option A: Dual-inbox architecture\n- `gt mail inbox` checks both `.beads/` and `.beads-wisp/`\n- Sender specifies `--ephemeral` flag for transient messages\n- Ephemeral messages auto-expire or squash to digests\n\n### Option B: All mail becomes wisps\n- Default to wisp storage for all mail\n- Important messages explicitly promoted to persistent\n- Simpler model but loses audit trail for some messages\n\n### Option C: Message type determines storage\n- `message` type beads go to wisps by default\n- `handoff` type stays persistent\n- Automatic routing based on content\n\n## Recommendation\n\nOption A (dual-inbox) seems cleanest:\n- Explicit control via `--ephemeral`\n- Backwards compatible\n- Clear mental model\n\n## Acceptance Criteria\n\n- Lifecycle pings (POLECAT_STARTED, etc.) go to wisps\n- Work assignments go to wisps\n- Handoffs stay persistent\n- `gt mail inbox` shows both\n- Wisps auto-cleanup on patrol squash\n\n## Blocks\n\nThis blocks reliable swarm operations - every spawn pollutes HQ indefinitely.","status":"tombstone","priority":0,"issue_type":"feature","created_at":"2025-12-24T19:17:43.874045-08:00","updated_at":"2025-12-27T21:29:45.268297-08:00","deleted_at":"2025-12-27T21:29:45.268297-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-lgtcr","title":"Digest: mol-deacon-patrol","description":"Patrol 10: all healthy, sessions up","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:54:49.173354-08:00","updated_at":"2025-12-28T15:54:49.173354-08:00","closed_at":"2025-12-28T15:54:49.17332-08:00"} {"id":"gt-liftoff","title":"Liftoff implementation plan in Beads","description":"## Context\n\nSession on 2025-12-27 produced three key docs:\n- `~/gt/docs/agent-as-bead.md` - Agents ARE beads (identity, hook slots, CV chain roots)\n- `~/gt/docs/zfc-violations-audit.md` - Where Go infers instead of trusting agents\n- `~/gt/docs/liftoff-plan.md` - 4.5 day plan to self-sustaining Gas Town\n\n## Work Required\n\n### Phase 1: Audit existing beads ✅\n- Review all open beads in gt- prefix\n- Close obsolete/stale issues\n- Update any that need refinement\n- Note which existing beads align with liftoff plan\n\n### Phase 2: File new beads ✅\nTranslate liftoff-plan.md into beads with proper dependencies.\n\nThree pillars:\n1. **Pillar 1: Agent Identity** (gt-d0jqp) - schema, slot commands, migration\n2. **Pillar 2: Patrol Ignition** (gt-hwka3) - witness/refinery formula wiring\n3. **Pillar 3: Polecat Lifecycle** (gt-4a2qt) - recycle/nuke commands, session-per-step\n\n### Phase 3: Review ✅\nHuman reviews the plan.\n\n## Deliverable\n\nA complete dependency graph in beads that can be:\n1. Queried with `bd ready` to find available work\n2. Slung to polecats in dependency order\n3. Tracked to completion\n\n## References\n\n- ~/gt/docs/liftoff-plan.md - 4.5 day plan\n- ~/gt/docs/agent-as-bead.md - Agent identity design\n- ~/gt/docs/zfc-violations-audit.md - ZFC violations addressed","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-27T21:42:03.880845-08:00","created_by":"mayor","updated_at":"2025-12-28T16:13:09.29063-08:00","closed_at":"2025-12-28T16:13:09.29063-08:00","dependencies":[{"issue_id":"gt-liftoff","depends_on_id":"gt-d0jqp","type":"blocks","created_at":"2025-12-27T21:42:12.255705-08:00","created_by":"daemon"},{"issue_id":"gt-liftoff","depends_on_id":"gt-hwka3","type":"blocks","created_at":"2025-12-27T21:42:12.293402-08:00","created_by":"daemon"},{"issue_id":"gt-liftoff","depends_on_id":"gt-4a2qt","type":"blocks","created_at":"2025-12-27T21:42:12.329975-08:00","created_by":"daemon"}]} @@ -1543,6 +1546,7 @@ {"id":"gt-lom0","title":"Digest: mol-deacon-patrol","description":"Patrol 20: OK - Handoff threshold reached","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:02:40.085741-08:00","updated_at":"2025-12-27T21:26:04.861368-08:00","deleted_at":"2025-12-27T21:26:04.861368-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lpki","title":"test message","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T17:41:51.652131-08:00","updated_at":"2025-12-27T21:29:56.761096-08:00","deleted_at":"2025-12-27T21:29:56.761096-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} {"id":"gt-lqgf","title":"burn-or-loop","description":"Squash wisp and decide: loop or cycle session.\n\nIf context low: spawn new wisp and loop\nIf context high: handoff and request cycle\n\nNeeds: generate-summary","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.505125-08:00","updated_at":"2025-12-25T15:52:57.932675-08:00","dependencies":[{"issue_id":"gt-lqgf","depends_on_id":"gt-g261","type":"blocks","created_at":"2025-12-23T01:41:54.521716-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:57.932675-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-ls4he","title":"Digest: mol-deacon-patrol","description":"Patrol 8: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:31:25.114431-08:00","updated_at":"2025-12-28T01:31:25.114431-08:00","closed_at":"2025-12-28T01:31:25.11439-08:00"} {"id":"gt-ls9sh","title":"Digest: mol-deacon-patrol","description":"Patrol 8","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:50:51.372141-08:00","updated_at":"2025-12-25T20:50:51.372141-08:00","closed_at":"2025-12-25T20:50:51.372074-08:00"} {"id":"gt-lsfqq","title":"Hook ergonomics: auto-replace completed pins","description":"## Problem\n\nWhen pinning a new bead, if the old pinned bead is complete, the new pin should automatically replace it. Currently this fails and requires manual unpinning (which doesn't exist as a command).\n\nObserved friction:\n1. Old patrol wisp 100% complete, still pinned\n2. Created new patrol wisp\n3. `gt mol attach` failed: 'not pinned'\n4. Tried to close old wisp: 'cannot close pinned issue'\n5. Tried `gt hook unpin`: command doesn't exist\n6. Stuck in limbo\n\n## Proposed fix\n\n- `gt hook \u003cnew-bead\u003e` auto-replaces if old pin is complete\n- Require `--force` if old pin is incomplete\n- `gt mol attach` should auto-pin if bead isn't pinned\n\n## Orphan detection\n\nUnpinned incomplete molecules aren't stale orphans until they create graph pressure (blocking other work). Orphan detection should focus on dependency blocking, not just 'unpinned' status.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-26T17:29:28.717725-08:00","updated_at":"2025-12-27T21:29:54.783279-08:00","deleted_at":"2025-12-27T21:29:54.783279-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-lta16","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 10: routine, healthy - midpoint","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:26:07.534823-08:00","updated_at":"2025-12-27T21:26:01.889513-08:00","deleted_at":"2025-12-27T21:26:01.889513-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1569,6 +1573,7 @@ {"id":"gt-lyn3","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:45","description":"Patrol 8: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:45:04.933298-08:00","updated_at":"2025-12-27T21:26:05.120555-08:00","deleted_at":"2025-12-27T21:26:05.120555-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lz13","title":"Update templates with molecule navigation workflow","description":"Update all agent templates to use new molecule navigation commands.\n\n## Commands to integrate\n- bd mol current: orientation after startup/handoff (bd-sal9)\n- bd close --continue: seamless step transitions (bd-ieyy)\n\n## Templates to update\n\n### prompts/roles/polecat.md\n- Add bd mol current to 'Finding Your Work' section\n- Replace manual 3-command dance with bd close --continue\n- Update 'Working Through Steps' section\n\n### prompts/roles/crew.md \n- Add molecule navigation to workflow section\n- Show bd mol current for session startup\n\n### prompts/roles/refinery.md\n- Update patrol step transitions to use --continue\n\n### prompts/roles/witness.md\n- Update patrol step transitions to use --continue\n\n### prompts/roles/deacon.md\n- Update patrol step transitions to use --continue\n\n## Key message\nThe Propulsion Principle: close a step, immediately get handed the next.\nNo friction, no forgetting, no 3-command dance.\n\n## Blocked by (Beads features)\n- bd-sal9: bd mol current\n- bd-ieyy: bd close --continue","notes":"BLOCKED 2025-12-23 00:17: Waiting for beads features (bd mol current, bd close --continue) to be implemented. Notified mayor.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T17:01:12.119194-08:00","updated_at":"2025-12-27T21:29:53.13326-08:00","dependencies":[{"issue_id":"gt-lz13","depends_on_id":"gt-qswb","type":"blocks","created_at":"2025-12-22T17:01:31.707885-08:00","created_by":"daemon"},{"issue_id":"gt-lz13","depends_on_id":"gt-fly0","type":"blocks","created_at":"2025-12-22T17:01:31.78232-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.13326-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lzlee","title":"Digest: mol-deacon-patrol","description":"Patrol 16: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:36:01.407687-08:00","updated_at":"2025-12-27T21:26:00.727181-08:00","deleted_at":"2025-12-27T21:26:00.727181-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-m08q4","title":"Digest: mol-deacon-patrol","description":"Patrol 19: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:59.707981-08:00","updated_at":"2025-12-25T13:45:59.707981-08:00","closed_at":"2025-12-25T13:45:59.707951-08:00"} {"id":"gt-m0fx.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-m0fx\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T23:28:07.781991-08:00","updated_at":"2025-12-27T21:29:55.645876-08:00","deleted_at":"2025-12-27T21:29:55.645876-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-m3hh","title":"Merge: gt-7hor","description":"branch: polecat/slit\ntarget: main\nsource_issue: gt-7hor\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-22T12:32:43.108463-08:00","updated_at":"2025-12-27T21:27:22.869876-08:00","deleted_at":"2025-12-27T21:27:22.869876-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-m46z2","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:39:09.102076-08:00","updated_at":"2025-12-27T21:26:00.32059-08:00","deleted_at":"2025-12-27T21:26:00.32059-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1588,7 +1593,7 @@ {"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-mayor","title":"gt-mayor","description":"gt-mayor\n\nrole_type: mayor\nrig: null\nagent_state: stopped\nhook_bead: null\nrole_bead: gt-mayor-role\ncleanup_status: null","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-28T00:07:10.885229-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T01:00:36.748295-08:00"} -{"id":"gt-mayor-role","title":"Mayor Role Definition","description":"You are the Mayor - global coordinator of Gas Town. You sit above all rigs,\ncoordinating work across the entire workspace.\n\ndefault_molecule: mol-mayor-patrol\ncapabilities:\n - dispatch_work\n - cross_rig_coordination\n - escalation_handling\n\n## Responsibilities\n\n- Work dispatch: Spawn workers for issues, coordinate batch work on epics\n- Cross-rig coordination: Route work between rigs when needed\n- Escalation handling: Resolve issues Witnesses can't handle\n- Strategic decisions: Architecture, priorities, integration planning\n\nNOT your job: Per-worker cleanup, session killing, nudging workers (Witness handles that)\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour pinned molecule persists across sessions. Hook has work -\u003e Run it.\nHook empty -\u003e Check mail. Nothing anywhere -\u003e Wait for user.\n\n## Key Commands\n\n### Communication\n- gt mail inbox - Check your messages\n- gt mail read \u003cid\u003e - Read a specific message\n- gt mail send \u003caddr\u003e -s \"Subject\" -m \"Message\" - Send mail\n\n### Status\n- gt status - Overall town status\n- gt rigs - List all rigs\n- gt polecats \u003crig\u003e - List polecats in a rig\n\n### Work Management\n- bd ready - Issues ready to work (no blockers)\n- gt sling \u003cbead\u003e \u003crig\u003e - Assign work to polecat in rig\n\n## Session End Protocol\n\n- git status, git add, bd sync, git commit, git push\n- gt handoff - hand off to fresh session\n","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/nux","created_at":"2025-12-28T00:51:20.692107-08:00","created_by":"stevey","updated_at":"2025-12-30T00:40:11.545065-08:00"} +{"id":"gt-mayor-role","title":"Mayor Role Definition","description":"You are the Mayor - global coordinator of Gas Town. You sit above all rigs,\ncoordinating work across the entire workspace.\n\nsession_pattern: gt-mayor\nwork_dir_pattern: {town}\nneeds_pre_sync: false\nstart_command: exec claude --dangerously-skip-permissions\n\ndefault_molecule: mol-mayor-patrol\ncapabilities:\n - dispatch_work\n - cross_rig_coordination\n - escalation_handling\n\n## Responsibilities\n\n- Work dispatch: Spawn workers for issues, coordinate batch work on epics\n- Cross-rig coordination: Route work between rigs when needed\n- Escalation handling: Resolve issues Witnesses cannot handle\n- Strategic decisions: Architecture, priorities, integration planning\n\nNOT your job: Per-worker cleanup, session killing, nudging workers (Witness handles that)\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour pinned molecule persists across sessions. Hook has work then Run it.\nHook empty then Check mail. Nothing anywhere then Wait for user.\n\n## Key Commands\n\n### Communication\n- gt mail inbox - Check your messages\n- gt mail read \u003cid\u003e - Read a specific message\n- gt mail send \u003caddr\u003e -s \"Subject\" -m \"Message\" - Send mail\n\n### Status\n- gt status - Overall town status\n- gt rigs - List all rigs\n- gt polecats \u003crig\u003e - List polecats in a rig\n\n### Work Management\n- bd ready - Issues ready to work (no blockers)\n- gt sling \u003cbead\u003e \u003crig\u003e - Assign work to polecat in rig\n\n## Session End Protocol\n\n- git status, git add, bd sync, git commit, git push\n- gt handoff - hand off to fresh session","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/nux","created_at":"2025-12-28T00:51:20.692107-08:00","created_by":"stevey","updated_at":"2025-12-30T02:02:18.922636-08:00"} {"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","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"} @@ -1642,10 +1647,12 @@ {"id":"gt-mziio","title":"Digest: mol-deacon-patrol","description":"Patrol 10: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:36:15.586442-08:00","updated_at":"2025-12-27T21:26:00.365273-08:00","deleted_at":"2025-12-27T21:26:00.365273-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mzzl9","title":"Digest: mol-deacon-patrol","description":"Patrol complete: inbox checked (4 msgs, 1 escalation resolved), all agents healthy (2 witnesses, 2 refineries, 3 polecats, 5 crew), cleaned 66 abandoned wisps","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:42:46.3183-08:00","updated_at":"2025-12-27T21:26:02.46653-08:00","deleted_at":"2025-12-27T21:26:02.46653-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-n1010","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy. Handoff after 20 cycles.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T03:11:45.170133-08:00","updated_at":"2025-12-28T03:11:45.170133-08:00","closed_at":"2025-12-28T03:11:45.170097-08:00"} +{"id":"gt-n23v2","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:36:23.752064-08:00","updated_at":"2025-12-29T22:36:23.752064-08:00","closed_at":"2025-12-29T22:36:23.752031-08:00","dependencies":[{"issue_id":"gt-n23v2","depends_on_id":"gt-eph-gi8","type":"parent-child","created_at":"2025-12-29T22:36:23.753866-08:00","created_by":"deacon"}]} {"id":"gt-n33lx","title":"Digest: mol-deacon-patrol","description":"Patrol 16: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:19:26.175734-08:00","updated_at":"2025-12-27T21:26:03.519688-08:00","deleted_at":"2025-12-27T21:26:03.519688-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-n3i7","title":"Digest: mol-deacon-patrol","description":"Patrol 15: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:00:56.816258-08:00","updated_at":"2025-12-27T21:26:04.902723-08:00","deleted_at":"2025-12-27T21:26:04.902723-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-n4vz7","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 5: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:20:57.158949-08:00","updated_at":"2025-12-28T11:20:57.158949-08:00","closed_at":"2025-12-28T11:20:57.158916-08:00"} {"id":"gt-n508","title":"Merge: gt-70b3","description":"type: merge-request\nbranch: polecat/Rictus\ntarget: main\nsource_issue: gt-70b3\nrig: gastown","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T21:56:57.840796-08:00","updated_at":"2025-12-27T21:29:54.07535-08:00","deleted_at":"2025-12-27T21:29:54.07535-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-n5u8i","title":"Digest: mol-deacon-patrol","description":"Patrol 8: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:06:24.927093-08:00","updated_at":"2025-12-27T23:06:24.927093-08:00","closed_at":"2025-12-27T23:06:24.927062-08:00"} {"id":"gt-n5uy","title":"Digest: mol-deacon-patrol","description":"Patrol OK: 8 polecats, 4 witness/refineries up","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T01:06:42.456269-08:00","updated_at":"2025-12-27T21:26:05.397271-08:00","deleted_at":"2025-12-27T21:26:05.397271-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-n7cm4","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:34:39.56723-08:00","updated_at":"2025-12-27T21:26:02.527491-08:00","deleted_at":"2025-12-27T21:26:02.527491-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-n7xxc","title":"Merge: gt-594l2","description":"branch: polecat/morsov-1766966180179\ntarget: main\nsource_issue: gt-594l2\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-28T16:37:28.154049-08:00","created_by":"gastown/polecats/morsov","updated_at":"2025-12-28T22:28:06.12421-08:00","closed_at":"2025-12-28T22:28:06.12421-08:00"} @@ -1695,6 +1702,7 @@ {"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-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-nu47q","title":"Merge: rictus-1767087768853","description":"branch: polecat/rictus-1767087768853\ntarget: main\nsource_issue: rictus-1767087768853\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T01:54:12.911687-08:00","created_by":"gastown/polecats/rictus","updated_at":"2025-12-30T01:54:12.911687-08:00"} {"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"} {"id":"gt-nvws7","title":"Digest: mol-deacon-patrol","description":"Quick patrol: no messages, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:03:52.500691-08:00","updated_at":"2025-12-25T11:03:52.500691-08:00","closed_at":"2025-12-25T11:03:52.500657-08:00"} {"id":"gt-nxea","title":"Digest: mol-deacon-patrol","description":"Patrol #3: Routine - 6 agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:16:10.287785-08:00","updated_at":"2025-12-27T21:26:04.810885-08:00","deleted_at":"2025-12-27T21:26:04.810885-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1704,7 +1712,6 @@ {"id":"gt-o29j","title":"inspect-workers","description":"Capture output for each working polecat.\n\n```bash\ngt peek \u003crig\u003e/\u003cpolecat\u003e\n```\n\nNeeds: survey-workers","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.506324-08:00","updated_at":"2025-12-25T15:52:57.508608-08:00","deleted_at":"2025-12-25T15:52:57.508608-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"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-o3skt","title":"Digest: mol-deacon-patrol","description":"Patrol 18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T20:06:18.575389-08:00","updated_at":"2025-12-26T20:06:18.575389-08:00","closed_at":"2025-12-26T20:06:18.575343-08:00"} {"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-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"} @@ -1713,7 +1720,6 @@ {"id":"gt-o9hwu","title":"Digest: mol-deacon-patrol","description":"Cycle 12: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:20:41.375337-08:00","updated_at":"2025-12-28T13:20:41.375337-08:00","closed_at":"2025-12-28T13:20:41.375302-08:00"} {"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-oared","title":"Digest: mol-deacon-patrol","description":"Patrol 16: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:48:47.63204-08:00","updated_at":"2025-12-28T19:48:47.63204-08:00","closed_at":"2025-12-28T19:48:47.632007-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-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"} @@ -1723,7 +1729,6 @@ {"id":"gt-odfr","title":"Add WaitsFor parsing to molecule steps","description":"Add WaitsFor field to MoleculeStep struct and parse 'WaitsFor: all-children' (and future variants) from molecule descriptions.\n\nThis enables:\n- mol progress to understand fanout patterns\n- Validation that WaitsFor references valid constructs\n- Future automated orchestration\n\nImplementation:\n1. Add WaitsFor []string to MoleculeStep struct\n2. Add waitsForLineRegex to parse 'WaitsFor: ...' lines\n3. Update ParseMoleculeSteps to extract WaitsFor\n4. Update tests","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T21:35:55.004767-08:00","updated_at":"2025-12-27T21:29:52.836996-08:00","deleted_at":"2025-12-27T21:29:52.836996-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-odvf","title":"Document bd mol bond/squash/burn CLI","description":"Create CLI reference documentation for molecule commands:\n\n## bd mol bond\n\nInstantiate a proto into a runnable molecule.\n\n```bash\nbd mol bond \u003cproto-id\u003e [--wisp] [--assignee=\u003caddr\u003e]\n```\n\n- Default: creates a Mol (durable, in main beads)\n- --wisp: creates a Wisp (ephemeral, in .beads-ephemeral/)\n- --assignee: who will execute this molecule\n\n## bd mol squash\n\nComplete a molecule and generate digest.\n\n```bash\nbd mol squash \u003cmol-id\u003e --summary='...'\n```\n\n- For Mol: creates digest in git history\n- For Wisp: evaporates (no permanent record)\n- --summary: required summary of what was accomplished\n\n## bd mol burn\n\nAbandon a molecule without completing.\n\n```bash\nbd mol burn \u003cmol-id\u003e [--reason='...']\n```\n\n- Discards molecule state\n- No digest created\n- Use when molecule is no longer needed","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T16:33:06.462105-08:00","updated_at":"2025-12-27T21:29:56.537382-08:00","dependencies":[{"issue_id":"gt-odvf","depends_on_id":"gt-62hm","type":"blocks","created_at":"2025-12-21T16:33:17.530156-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.537382-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-odvr","title":"Merge: gt-r6td","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-r6td\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T22:54:01.000047-08:00","updated_at":"2025-12-27T21:27:22.543258-08:00","deleted_at":"2025-12-27T21:27:22.543258-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} -{"id":"gt-oe135","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:05:54.728776-08:00","updated_at":"2025-12-27T23:05:54.728776-08:00","closed_at":"2025-12-27T23:05:54.728735-08:00"} {"id":"gt-oeori","title":"Day 3.7: Witness pings Deacon for second-order monitoring","description":"Add second-order monitoring: Witnesses monitor the Deacon.\n\nProblem: Who monitors the Deacon? If Deacon dies, the whole town stalls.\n\nSolution:\n1. Each Witness periodically sends a ping to Deacon during patrol:\n ```bash\n gt mail send deacon/ -s \"WITNESS_PING\" -m \"{\\\"rig\\\": \\\"gastown\\\"}\"\n ```\n\n2. Deacon patrol (inbox-check) aggregates witness pings as health signals\n\n3. If Witness doesn't get Deacon response for 2 cycles:\n - Escalate to Mayor: \"Deacon unresponsive\"\n - Mayor can restart Deacon via daemon\n\nThis creates overlapping patrols:\n- Deacon monitors Witnesses/Refineries\n- Witnesses monitor Deacon (collectively)\n- Mayor is escalation target for both\n\nAdd to mol-witness-patrol after survey-workers step.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T22:02:32.179579-08:00","created_by":"mayor","updated_at":"2025-12-27T23:18:47.265651-08:00","closed_at":"2025-12-27T23:18:47.265651-08:00","dependencies":[{"issue_id":"gt-oeori","depends_on_id":"gt-qpoxz","type":"blocks","created_at":"2025-12-27T22:02:45.78993-08:00","created_by":"daemon"}]} {"id":"gt-of0w1","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T18:24:00.367405-08:00","updated_at":"2025-12-27T21:26:02.830298-08:00","deleted_at":"2025-12-27T21:26:02.830298-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ofl2","title":"CRITICAL: ProcessMRFromQueue not implemented - Refinery merge logic stubbed","description":"File: internal/refinery/engineer.go:384\nThe ProcessMRFromQueue() function returns hardcoded failure with TODO comment.\nThis is a core refinery function that cannot process merges in current state.\nMust implement actual merge logic before OSS launch.","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-24T12:50:27.824454-08:00","updated_at":"2025-12-27T21:29:45.447974-08:00","dependencies":[{"issue_id":"gt-ofl2","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:04.778532-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.447974-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} @@ -1747,6 +1752,7 @@ {"id":"gt-ouo","title":"gt swarm start: Does not spawn polecat sessions","description":"gt swarm start marks swarm as 'active' but doesn't start any polecat sessions.\n\nRepro:\n1. gt swarm create gastown --epic gt-hw6 --worker Toast --worker Nux\n2. gt swarm start gt-hw6\n3. gt session list - shows no new sessions\n\nExpected: Polecat sessions should start for each worker.\nActual: No sessions started, workers sit idle.","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-17T22:25:43.430981-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-ov2","title":"Refinery agent: merge queue processing loop","description":"The Refinery agent processes the merge queue, merging polecat work to main.\n\n## Interface\n\n```go\ntype Refinery struct {\n rig *Rig\n queue *MergeQueue\n git *Git\n mail *Mailbox\n config RefineryConfig\n}\n\ntype RefineryConfig struct {\n AutoMerge bool // Auto-merge passing MRs\n RunTests bool // Run tests before merge\n TestCommand string // Command to run tests\n RequireReview bool // Require review before merge (future)\n}\n\nfunc NewRefinery(rig *Rig, ...) *Refinery\n\n// Lifecycle\nfunc (r *Refinery) Start() error\nfunc (r *Refinery) Stop() error\nfunc (r *Refinery) IsRunning() bool\n\n// Processing\nfunc (r *Refinery) ProcessQueue() error\nfunc (r *Refinery) ProcessMR(mr *MergeRequest) error\n```\n\n## Processing Loop\n\n1. Check queue for pending MRs\n2. For each pending MR:\n a. Fetch polecat branch\n b. Attempt merge to refinery/rig (local main)\n c. Run tests if configured\n d. If pass: push to origin, mark merged\n e. If fail: mark rejected, notify polecat\n3. Sleep, repeat\n\n## Merge Strategy\n\n- Fast-forward when possible\n- Merge commit when not\n- On conflict: reject MR, polecat must rebase\n\n## Test Integration\n\nIf tests configured:\n```bash\ncd refinery/rig\ngit merge polecat/branch\n\u003ctest_command\u003e # e.g., go test ./...\n```\nResult determines merge/reject.\n\n## Notifications\n\nOn merge success:\n- Mail to polecat: \"Your work merged\"\n- Update bead if issue tracked\n\nOn merge failure:\n- Mail to polecat: \"Merge failed: \u003creason\u003e\"\n- Include conflict details if applicable\n\n## Dependencies\n\nNeeds: Rig management, Git wrapper, Mail system, Merge queue","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-15T23:22:08.498771-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-ov2","depends_on_id":"gt-u1j.14","type":"blocks","created_at":"2025-12-15T23:22:21.801826-08:00","created_by":"daemon"},{"issue_id":"gt-ov2","depends_on_id":"gt-u1j.6","type":"blocks","created_at":"2025-12-15T23:22:21.89716-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-ov2uv","title":"Create AgentIdentity type for session name parsing","description":"attached_args: Create AgentIdentity type - depends on completed gt-atqr8\n\nCreate AgentIdentity type to parse and construct session names, replacing duplicated logic.\n\n## Files to modify\n- internal/session/identity.go (NEW)\n- internal/cmd/sling.go (update to use new type)\n- internal/cmd/handoff.go (update to use new type)\n\n## Implementation\n```go\ntype AgentIdentity struct {\n Role string // mayor, deacon, witness, refinery, crew, polecat\n Rig string // empty for mayor/deacon\n Name string // crew/polecat name\n}\n\nfunc ParseSessionName(session string) (*AgentIdentity, error)\nfunc (a *AgentIdentity) SessionName() string\nfunc (a *AgentIdentity) Address() string // e.g., \"gastown/crew/max\"\n```\n\n## Acceptance criteria\n- [ ] AgentIdentity type with Role, Rig, Name fields\n- [ ] ParseSessionName handles all agent types (mayor, deacon, witness, refinery, crew, polecat)\n- [ ] SessionName() reconstructs valid session name\n- [ ] Address() returns mail-style address\n- [ ] sling.go:sessionToAgentID replaced with ParseSessionName\n- [ ] handoff.go:sessionToGTRole replaced with ParseSessionName\n- [ ] Unit tests for all parsing cases\n- [ ] go test ./... passes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:49:10.113644-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T16:23:27.939492-08:00","closed_at":"2025-12-28T16:23:27.939492-08:00","dependencies":[{"issue_id":"gt-ov2uv","depends_on_id":"gt-atqr8","type":"blocks","created_at":"2025-12-28T15:51:31.393311-08:00","created_by":"daemon"}]} +{"id":"gt-owgd5","title":"Digest: mol-deacon-patrol","description":"Patrol 14: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:35:18.966173-08:00","updated_at":"2025-12-29T22:35:18.966173-08:00","closed_at":"2025-12-29T22:35:18.966138-08:00"} {"id":"gt-ox67","title":"Maintenance: Regular cleanup of closed MR/gate beads","description":"Closed merge-request and gate beads accumulate over time. Need regular cleanup.\n\n## Cleanup Candidates\n- type=merge-request with status=closed\n- type=gate with status=closed\n- type=molecule with status=closed (completed workflows)\n\n## Options\n1. **Deacon patrol step** - squash closed MRs periodically\n2. **Refinery post-merge** - close and tombstone MR after successful merge\n3. **bd doctor check** - warn when stale MR count exceeds threshold\n\n## Consideration\nKeep some audit trail? Or just tombstone after N days?","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T14:38:31.532094-08:00","updated_at":"2025-12-23T14:38:31.532094-08:00"} {"id":"gt-ox9","title":"Test from Mayor","description":"This is a test message via GGT mail","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-16T22:04:31.483843-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-oxqry","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 18: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:30:31.909987-08:00","updated_at":"2025-12-27T21:26:01.82079-08:00","deleted_at":"2025-12-27T21:26:01.82079-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1798,7 +1804,7 @@ {"id":"gt-polecat-gastown-test-cat","title":"gt-polecat-gastown-test-cat","description":"gt-polecat-gastown-test-cat\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: null","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-28T02:16:55.810497-08:00","created_by":"mayor","updated_at":"2025-12-28T02:17:01.786065-08:00","deleted_at":"2025-12-28T02:17:01.786065-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"agent"} {"id":"gt-polecat-gastown-testcat","title":"gt-polecat-gastown-testcat","description":"gt-polecat-gastown-testcat\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: null","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-28T15:32:27.70761-08:00","created_by":"mayor","updated_at":"2025-12-28T15:33:38.022666-08:00","deleted_at":"2025-12-28T15:33:38.022666-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"agent"} {"id":"gt-polecat-gastown-warboy","title":"gt-polecat-gastown-warboy","description":"gt-polecat-gastown-warboy\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: null","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-28T15:56:20.415565-08:00","created_by":"mayor","updated_at":"2025-12-28T18:47:16.95025-08:00","closed_at":"2025-12-28T18:47:16.95025-08:00"} -{"id":"gt-polecat-role","title":"Polecat Role Definition","description":"You are a Polecat - an autonomous worker assigned to a specific issue.\n\nYou work independently, following the mol-polecat-work formula, and signal\ncompletion to your Witness. You are transient - spawned for work, cleaned up\nafter completion.\n\ndefault_molecule: mol-polecat-work\ncapabilities:\n - execute_assigned_work\n - git_operations\n - branch_management\n - completion_signaling\n\n## Core Responsibilities\n\n1. Execute your pinned molecule's steps\n2. Maintain clean git state\n3. Signal completion via gt done\n4. Wait for Witness to handle lifecycle\n\n## You Do NOT\n\n- Push directly to main (Refinery merges)\n- Kill your own session (Witness does cleanup)\n- Skip verification steps\n- Work on anything other than your assigned issue\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour work is defined by your pinned molecule. Execute steps:\n- bd ready (find next step)\n- bd show \u003cstep-id\u003e (see what to do)\n- bd close \u003cstep-id\u003e (mark complete)\n\n## Completion Protocol\n\nWhen done:\n1. Tests pass: go test ./...\n2. COMMIT changes: git add \u0026\u0026 git commit\n3. Push branch: git push -u origin HEAD\n4. Close issue: bd close \u003cissue\u003e\n5. Sync beads: bd sync\n6. Run gt done\n7. WAIT: Witness will kill your session\n\n## Communication\n\nMail your Witness when stuck:\ngt mail send \u003crig\u003e/witness -s \"HELP: \u003cproblem\u003e\" -m \"...\"","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/dementus","created_at":"2025-12-29T13:24:16.758613-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-30T00:44:27.433394-08:00"} +{"id":"gt-polecat-role","title":"Polecat Role Definition","description":"You are a Polecat - an autonomous worker assigned to a specific issue.\n\nYou work independently, following the mol-polecat-work formula, and signal\ncompletion to your Witness. You are transient - spawned for work, cleaned up\nafter completion.\n\nsession_pattern: gt-{rig}-{name}\nwork_dir_pattern: {town}/{rig}/polecats/{name}\nneeds_pre_sync: true\nstart_command: export GT_ROLE=polecat GT_RIG={rig} GT_POLECAT={name} BD_ACTOR={rig}/polecats/{name} \u0026\u0026 claude --dangerously-skip-permissions\n\ndefault_molecule: mol-polecat-work\ncapabilities:\n - execute_assigned_work\n - git_operations\n - branch_management\n - completion_signaling\n\n## Core Responsibilities\n\n1. Execute your pinned molecule's steps\n2. Maintain clean git state\n3. Signal completion via gt done\n4. Wait for Witness to handle lifecycle\n\n## You Do NOT\n\n- Push directly to main (Refinery merges)\n- Kill your own session (Witness does cleanup)\n- Skip verification steps\n- Work on anything other than your assigned issue\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour work is defined by your pinned molecule. Execute steps:\n- bd ready (find next step)\n- bd show \u003cstep-id\u003e (see what to do)\n- bd close \u003cstep-id\u003e (mark complete)\n\n## Completion Protocol\n\nWhen done:\n1. Tests pass: go test ./...\n2. COMMIT changes: git add and git commit\n3. Push branch: git push -u origin HEAD\n4. Close issue: bd close \u003cissue\u003e\n5. Sync beads: bd sync\n6. Run gt done\n7. WAIT: Witness will kill your session\n\n## Communication\n\nMail your Witness when stuck:\ngt mail send \u003crig\u003e/witness -s \"HELP: \u003cproblem\u003e\" -m \"...\"","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/dementus","created_at":"2025-12-29T13:24:16.758613-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-30T02:03:42.9242-08:00"} {"id":"gt-powfg","title":"Merge: morsov-1767074381346","description":"attached_args: Code review this merge request\n\nbranch: polecat/morsov-1767074381346\ntarget: main\nsource_issue: morsov-1767074381346\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","assignee":"gastown/polecats/dementus","created_at":"2025-12-29T22:08:38.495538-08:00","created_by":"gastown/polecats/morsov","updated_at":"2025-12-29T22:11:49.038089-08:00","closed_at":"2025-12-29T22:11:49.038089-08:00","close_reason":"Already merged: morsov's work (commit 10e79789: Fix swarm not tracking dynamically added workers) is present in main. Branch is ancestor of main - no merge needed."} {"id":"gt-poxd","title":"Create handoff beads for Witness and Refinery roles","description":"Each patrol role needs a pinned handoff bead to track attached molecules and patrol state.\n\n## Pattern (from Deacon)\n- Title: '\u003crole\u003e Handoff' (e.g., 'witness Handoff', 'refinery Handoff')\n- Status: pinned\n- Description contains structured state\n\n## Witness Handoff State\n\n```yaml\nattached_molecule: mol-witness-patrol\nattached_at: 2025-12-24T10:00:00Z\n\n# Nudge escalation tracking\nnudges:\n toast:\n count: 2\n last: \"2025-12-24T10:30:00Z\"\n ace:\n count: 0\n last: null\n\n# Polecats queued for cleanup\npending_cleanup:\n - nux # received POLECAT_DONE, awaiting verification\n```\n\n## Refinery Handoff State\n\n```yaml\nattached_molecule: mol-refinery-patrol\nattached_at: 2025-12-24T10:00:00Z\n\n# Merge queue tracking\nlast_processed_branch: polecat/toast\nbranches_merged_this_cycle: 3\n```\n\n## Tasks\n1. Create 'witness Handoff' bead in each rig's beads\n2. Create 'refinery Handoff' bead in each rig's beads\n3. Update Witness/Refinery startup to check handoff bead for attached work\n4. Update templates to document handoff bead usage\n5. Include nudge state schema for Witness\n6. Include merge state schema for Refinery\n\n## Note\nThese are rig-level beads (in gastown/.beads/, beads/.beads/), not town-level like deacon Handoff (in ~/gt/.beads/).\n\n## See Also\n- docs/witness-patrol-design.md - Theory of operation","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T13:19:41.055563-08:00","updated_at":"2025-12-27T21:29:53.007253-08:00","dependencies":[{"issue_id":"gt-poxd","depends_on_id":"gt-y481","type":"parent-child","created_at":"2025-12-23T13:20:15.89851-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.007253-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ppdmm","title":"Digest: mol-deacon-patrol","description":"Patrol 10: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:15:09.272455-08:00","updated_at":"2025-12-27T21:26:01.022637-08:00","deleted_at":"2025-12-27T21:26:01.022637-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1837,7 +1843,7 @@ {"id":"gt-qcr6","title":"Polecat template: fix 'git clone' to 'git worktree'","description":"Template says 'You're in a project git clone' but polecats use worktrees, not clones. Fix terminology.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-23T16:56:44.091888-08:00","updated_at":"2025-12-27T21:29:55.951993-08:00","dependencies":[{"issue_id":"gt-qcr6","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.207186-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.951993-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-qctb0","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All services healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:51:18.083218-08:00","updated_at":"2025-12-27T21:26:02.010983-08:00","deleted_at":"2025-12-27T21:26:02.010983-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"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-qd7ri","title":"E2E Phase 2 observability test","description":"End-to-end test of Phase 2 observability:\n\nTest scenario:\n1. Sling work to polecat\n2. Watch gt feed for polecat activity\n3. Polecat completes, signals done\n4. Watch gt feed for MQ events (merge_started, merged)\n5. gt status shows queue depth changes\n6. Swarm status visible in gt swarm status\n\nAll observable without checking .runtime/*.json files.\n\nSuccess = glass cockpit is lit.","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/slit","created_at":"2025-12-28T21:40:54.57062-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-30T00:30:36.827026-08:00","dependencies":[{"issue_id":"gt-qd7ri","depends_on_id":"gt-lak31","type":"blocks","created_at":"2025-12-28T21:41:11.735996-08:00","created_by":"daemon"},{"issue_id":"gt-qd7ri","depends_on_id":"gt-rbncw","type":"blocks","created_at":"2025-12-28T21:41:11.76734-08:00","created_by":"daemon"},{"issue_id":"gt-qd7ri","depends_on_id":"gt-tvwnz","type":"blocks","created_at":"2025-12-28T21:41:11.797211-08:00","created_by":"daemon"}]} +{"id":"gt-qd7ri","title":"E2E Phase 2 observability test","description":"End-to-end test of Phase 2 observability:\n\nTest scenario:\n1. Sling work to polecat\n2. Watch gt feed for polecat activity\n3. Polecat completes, signals done\n4. Watch gt feed for MQ events (merge_started, merged)\n5. gt status shows queue depth changes\n6. Swarm status visible in gt swarm status\n\nAll observable without checking .runtime/*.json files.\n\nSuccess = glass cockpit is lit.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/cheedo","created_at":"2025-12-28T21:40:54.57062-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-30T02:00:11.163715-08:00","closed_at":"2025-12-30T02:00:11.163715-08:00","close_reason":"E2E test passed: gt feed shows polecat/bead/MQ events, gt status shows agents/hooks/mail, gt swarm list shows swarms, gt polecat list shows workers. Glass cockpit is lit.","dependencies":[{"issue_id":"gt-qd7ri","depends_on_id":"gt-lak31","type":"blocks","created_at":"2025-12-28T21:41:11.735996-08:00","created_by":"daemon"},{"issue_id":"gt-qd7ri","depends_on_id":"gt-rbncw","type":"blocks","created_at":"2025-12-28T21:41:11.76734-08:00","created_by":"daemon"},{"issue_id":"gt-qd7ri","depends_on_id":"gt-tvwnz","type":"blocks","created_at":"2025-12-28T21:41:11.797211-08:00","created_by":"daemon"}]} {"id":"gt-qd9p0","title":"Swarm doesn't track dynamically added workers","description":"When creating a swarm with --worker flags and then adding more polecats later, the swarm status only shows the original workers.\n\nSteps to reproduce:\n1. gt swarm create gastown --epic gt-i26df --worker slit --worker rictus --start\n2. Add more polecats: gt polecat add gastown capable\n3. gt sling gt-xxx gastown/capable\n4. gt swarm status gt-i26df -\u003e only shows slit, rictus\n\nExpected: Swarm tracks all workers that are working on swarm tasks.\nActual: Only original workers shown.","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/dementus","created_at":"2025-12-28T16:31:52.419095-08:00","created_by":"mayor","updated_at":"2025-12-29T21:56:35.820602-08:00","closed_at":"2025-12-29T21:56:35.820602-08:00","close_reason":"Fixed JSON field name (dependencies-\u003edependents) and added Assignee field extraction in loadTasksFromBeads()"} {"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-qdq50","title":"Merge: furiosa-1767075886199","description":"branch: polecat/furiosa-1767075886199\ntarget: main\nsource_issue: furiosa-1767075886199\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:28:03.264371-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-29T23:32:37.191575-08:00","closed_at":"2025-12-29T23:32:37.191575-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"} @@ -1905,7 +1911,6 @@ {"id":"gt-r83og","title":"Digest: mol-deacon-patrol","description":"Patrol 4: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:29:23.029208-08:00","updated_at":"2025-12-28T01:29:23.029208-08:00","closed_at":"2025-12-28T01:29:23.029171-08:00"} {"id":"gt-r8ej","title":"Implement pinned beads for handoff state","description":"Add pinned bead support to beads:\n- Pinned beads never close, only update\n- Use for persistent state like Refinery handoffs\n- bd create --pinned flag\n- bd list --pinned to find them\n- Update description to change state","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-19T18:09:08.019293-08:00","updated_at":"2025-12-27T21:29:53.915582-08:00","dependencies":[{"issue_id":"gt-r8ej","depends_on_id":"gt-ktal","type":"blocks","created_at":"2025-12-19T18:09:39.340915-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.915582-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-r9ng","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:46","description":"Patrol 14: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:46:56.641819-08:00","updated_at":"2025-12-27T21:26:05.079324-08:00","deleted_at":"2025-12-27T21:26:05.079324-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-ra3xj","title":"Merge: keeper-1767074342207","description":"branch: polecat/keeper-1767074342207\ntarget: main\nsource_issue: keeper-1767074342207\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:03:12.995705-08:00","created_by":"gastown/polecats/keeper","updated_at":"2025-12-29T23:55:11.895376-08:00","closed_at":"2025-12-29T23:55:11.895376-08:00"} {"id":"gt-rana","title":"Patrol System: Agent lifecycle loops with attachments","description":"Enable Gas Town agents to run continuous patrols, survive crashes, and hand off work across sessions.\n\n## Core Concepts\n- **Attachments**: Molecules bound to agent's pinned bead until complete\n- **Patrols**: Cyclic molecules that loop (deacon, witness, refinery)\n- **Quiescent**: Agents that sleep until triggered (witness, refinery)\n\n## Design Doc\nSee docs/patrol-system-design.md\n\n## Phases\nPhase 1: Foundation (attachment field, daemon detection, mol-deacon-patrol)\nPhase 2: Quiescent Agents (wake triggers, witness/refinery patrols)\nPhase 3: Callbacks and Plugins (mail protocol, plugin runner)\nPhase 4: Polish (gt patrol status, metrics, tuning)\n\n## Key Decisions\n- Attachment as field on pinned bead (not edge type, for now)\n- Mail-based orchestration for all callbacks\n- Queue replacement for heartbeat delivery (not pile-up)\n- Burn and respawn for patrol loops (not in-place reset)","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-21T13:38:23.416949-08:00","updated_at":"2025-12-27T21:29:53.568581-08:00","deleted_at":"2025-12-27T21:29:53.568581-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-rana.1","title":"Phase 1.1: Attachment field on pinned beads","description":"Add attached_molecule field to pinned bead schema.\n\n## Schema Change\nAdd to handoff/pinned bead issues:\n- attached_molecule: string (root issue ID of attached mol)\n- attached_at: timestamp\n\n## Implementation\n- Update beads Issue struct if needed\n- Or: use labels/metadata field\n- Ensure bd show displays attachment info\n\n## Acceptance\n- Can set/clear attachment on a bead\n- bd show displays attachment status","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T13:38:34.251531-08:00","updated_at":"2025-12-27T21:29:53.560114-08:00","dependencies":[{"issue_id":"gt-rana.1","depends_on_id":"gt-rana","type":"parent-child","created_at":"2025-12-21T13:38:34.253378-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.560114-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rana.2","title":"Phase 1.2: Daemon attachment detection","description":"Daemon polls Deacon's pinned bead to detect naked state.\n\n## Implementation\n- Daemon knows Deacon's pinned bead ID\n- Every heartbeat cycle: bd show \u003cpinned\u003e --json\n- Parse attached_molecule field\n- If null/empty: Deacon is naked\n\n## Actions on Naked\n- Spawn mol-deacon-patrol\n- Attach to Deacon's pinned\n- Nudge Deacon to start\n\n## Failsafes\n- Keepalive file monitoring\n- Stale detection (\u003e10min no progress)\n- Force nudge on stale\n\nDepends: gt-rana.1","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T13:38:53.520213-08:00","updated_at":"2025-12-27T21:29:53.551771-08:00","dependencies":[{"issue_id":"gt-rana.2","depends_on_id":"gt-rana","type":"parent-child","created_at":"2025-12-21T13:38:53.521672-08:00","created_by":"daemon"},{"issue_id":"gt-rana.2","depends_on_id":"gt-rana.1","type":"blocks","created_at":"2025-12-21T13:39:11.333008-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.551771-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1921,7 +1926,7 @@ {"id":"gt-rbp6.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:32:00.648392-08:00","updated_at":"2025-12-27T21:29:55.403481-08:00","deleted_at":"2025-12-27T21:29:55.403481-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rectf","title":"Digest: mol-deacon-patrol","description":"P11","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:25:17.043804-08:00","updated_at":"2025-12-27T21:26:01.65427-08:00","deleted_at":"2025-12-27T21:26:01.65427-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-refinery-gastown","title":"gt-refinery-gastown","description":"Refinery - per-rig merge queue processor for gastown.\n\nrole_type: refinery\nrig: gastown\nagent_state: idle\nhook_bead: null\nrole_bead: gt-refinery-role","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-28T00:07:41.933483-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-29T14:30:35.647713-08:00","closed_at":"2025-12-29T14:30:35.647713-08:00","close_reason":"Migrated to canonical naming: gt-gastown-witness/refinery"} -{"id":"gt-refinery-role","title":"Refinery Role Definition","description":"You are the Refinery - merge queue processor for your rig. You process\ncompleted polecat work, merging it to main one branch at a time with\nsequential rebasing.\n\nYour mission: Process the merge queue sequentially, rebasing each branch\natop the current baseline before merging.\n\ndefault_molecule: mol-refinery-patrol\ncapabilities:\n - merge_queue_processing\n - sequential_rebase\n - conflict_resolution\n - verification_gates\n\n## The Engineer Mindset\n\nYou are Scotty in the engine room. The merge queue is your warp core.\n\nThe Beads Promise: Work is never lost. If you discover ANY problem:\n1. Fix it now (preferred if quick), OR\n2. File a bead and proceed (tracked for cleanup crew)\n\nThere is NO third option. Never \"disavow\" by noting something exists and moving on.\n\nThe Scotty Test: Before proceeding past any failure, ask yourself:\n\"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour work is defined by the mol-refinery-patrol molecule. Execute steps:\n- bd ready (find next step)\n- bd show \u003cstep-id\u003e (see what to do)\n- bd close \u003cstep-id\u003e (mark complete)\n\n## Sequential Rebase Protocol\n\nWRONG (parallel merge - causes conflicts):\n main -\u003e branch-A (old main) + branch-B (old main) = CONFLICTS\n\nRIGHT (sequential rebase):\n main -\u003e merge A (rebased on main) -\u003e merge B (rebased on main+A)\n\nAfter every merge, main moves. Next branch MUST rebase on new baseline.\n\n## Verification Gate\n\nThe handle-failures step is a verification gate:\n- Tests PASSED: Gate satisfied, proceed to merge\n- Tests FAILED (branch caused): Abort, notify polecat, skip branch\n- Tests FAILED (pre-existing): MUST fix OR file bead - cannot proceed without\n\n## Commands\n\n### Patrol\n- gt mol status - Check attached patrol\n- bd ready / bd show / bd close - Step management\n- bd mol spawn \u003cmol\u003e --wisp - Spawn patrol wisp\n\n### Git Operations\n- git fetch origin - Fetch all remote branches\n- git branch -r | grep polecat - List polecat branches\n- git rebase origin/main - Rebase on current main\n- git push origin main - Push merged changes\n\n### Communication\n- gt mail inbox - Check for messages\n- gt mail send \u003caddr\u003e -s \"Subject\" -m \"Message\" - Notify workers\n","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/rictus","created_at":"2025-12-28T00:51:21.133839-08:00","created_by":"stevey","updated_at":"2025-12-30T00:40:18.275959-08:00"} +{"id":"gt-refinery-role","title":"Refinery Role Definition","description":"You are the Refinery - merge queue processor for your rig. You process\ncompleted polecat work, merging it to main one branch at a time with\nsequential rebasing.\n\nYour mission: Process the merge queue sequentially, rebasing each branch\natop the current baseline before merging.\n\nsession_pattern: gt-{rig}-refinery\nwork_dir_pattern: {town}/{rig}/refinery/rig\nneeds_pre_sync: true\nstart_command: exec claude --dangerously-skip-permissions\n\ndefault_molecule: mol-refinery-patrol\ncapabilities:\n - merge_queue_processing\n - sequential_rebase\n - conflict_resolution\n - verification_gates\n\n## The Engineer Mindset\n\nYou are Scotty in the engine room. The merge queue is your warp core.\n\nThe Beads Promise: Work is never lost. If you discover ANY problem:\n1. Fix it now (preferred if quick), OR\n2. File a bead and proceed (tracked for cleanup crew)\n\nThere is NO third option. Never \"disavow\" by noting something exists and moving on.\n\nThe Scotty Test: Before proceeding past any failure, ask yourself:\n\"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour work is defined by the mol-refinery-patrol molecule. Execute steps:\n- bd ready (find next step)\n- bd show \u003cstep-id\u003e (see what to do)\n- bd close \u003cstep-id\u003e (mark complete)\n\n## Sequential Rebase Protocol\n\nWRONG (parallel merge - causes conflicts):\n main then branch-A (old main) + branch-B (old main) = CONFLICTS\n\nRIGHT (sequential rebase):\n main then merge A (rebased on main) then merge B (rebased on main+A)\n\nAfter every merge, main moves. Next branch MUST rebase on new baseline.\n\n## Verification Gate\n\nThe handle-failures step is a verification gate:\n- Tests PASSED: Gate satisfied, proceed to merge\n- Tests FAILED (branch caused): Abort, notify polecat, skip branch\n- Tests FAILED (pre-existing): MUST fix OR file bead - cannot proceed without\n\n## Commands\n\n### Patrol\n- gt mol status - Check attached patrol\n- bd ready / bd show / bd close - Step management\n- bd mol spawn \u003cmol\u003e --wisp - Spawn patrol wisp\n\n### Git Operations\n- git fetch origin - Fetch all remote branches\n- git branch -r | grep polecat - List polecat branches\n- git rebase origin/main - Rebase on current main\n- git push origin main - Push merged changes\n\n### Communication\n- gt mail inbox - Check for messages\n- gt mail send \u003caddr\u003e -s \"Subject\" -m \"Message\" - Notify workers","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/rictus","created_at":"2025-12-28T00:51:21.133839-08:00","created_by":"stevey","updated_at":"2025-12-30T02:03:13.028107-08:00"} {"id":"gt-rgd9x","title":"Deprecate hook files, use pinned beads for propulsion","description":"## Problem\n\nHook files were \"deprecated\" via comments but NOT eradicated. The code is all still there and actively used.\n\n## Current State (NOT Done)\n\n**Live hook file exists:**\n- `/Users/stevey/gt/deacon/.beads/hook-deacon.json`\n\n**Code still calling hook functions:**\n- `resume.go:151` - WriteSlungWork\n- `park.go:114` - ReadHook \n- `spawn.go:407` - WriteSlungWork\n- `molecule_step.go:293` - WriteSlungWork\n- `molecule_step.go:368` - BurnHook\n\n**Hook infrastructure still exists:**\n- `internal/wisp/io.go` - All hook I/O functions\n- `internal/wisp/types.go` - SlungWork, Wisp types, constants\n- `.beads/.gitignore` - hook-*.json pattern\n\n**14 docs still reference hooks:**\narchitecture.md, beads-data-plane.md, molecular-chemistry.md, molecules.md,\npinned-beads-design.md, polecat-lifecycle.md, polecat-wisp-architecture.md,\npropulsion-principle.md, session-lifecycle.md, sling-design.md, vision.md,\nwisp-architecture.md, witness-patrol-design.md, ~/gt/CLAUDE.md\n\n## Goal: Total Eradication\n\n1. Remove ALL hook file code from callers\n2. Delete hook functions from internal/wisp/\n3. Delete hook types and constants\n4. Remove gitignore patterns\n5. Delete any live hook files, convert to pinned beads\n6. Update all documentation\n7. Verify propulsion cycle works with pinned beads only","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-26T15:36:31.396028-08:00","updated_at":"2025-12-27T21:29:45.86571-08:00","deleted_at":"2025-12-27T21:29:45.86571-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-rgd9x.1","title":"Remove hook code from cmd callers","description":"Remove hook file calls from:\n- resume.go:151 - WriteSlungWork → use bd update --status=pinned\n- park.go:114 - ReadHook → query pinned beads\n- spawn.go:407 - WriteSlungWork → use bd update --status=pinned\n- molecule_step.go:293 - WriteSlungWork → use bd update --status=pinned\n- molecule_step.go:368 - BurnHook → use bd update --status=open","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-26T16:13:26.012493-08:00","updated_at":"2025-12-27T21:29:45.848267-08:00","dependencies":[{"issue_id":"gt-rgd9x.1","depends_on_id":"gt-rgd9x","type":"parent-child","created_at":"2025-12-26T16:13:26.012978-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.848267-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rgd9x.2","title":"Delete hook functions from internal/wisp","description":"Delete from internal/wisp/io.go:\n- WriteSlungWork\n- ReadHook\n- BurnHook\n- HasHook\n- ListHooks\n- HookPath\n\nKeep: EnsureDir, WispPath, writeJSON (used by other things)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-26T16:13:27.392457-08:00","updated_at":"2025-12-27T21:29:45.840027-08:00","dependencies":[{"issue_id":"gt-rgd9x.2","depends_on_id":"gt-rgd9x","type":"parent-child","created_at":"2025-12-26T16:13:27.396963-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.840027-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2032,20 +2037,18 @@ {"id":"gt-t5uk","title":"Deacon trigger-pending-spawns: Auto-nudge polecats when ready","description":"The Deacon's mol-deacon-patrol defines a trigger-pending-spawns step, but it's not implemented.\n\n## Problem\nAfter gt spawn creates a polecat session, Claude initializes for 10-20s. Nobody sends the initial 'Begin.' message to start work, so polecats sit at prompts forever.\n\n## Current Workaround\nManual: gt nudge gt-\u003crig\u003e-\u003cpolecat\u003e 'Begin.'\n\n## Required Implementation\n1. Track pending spawns (polecats spawned but not triggered)\n2. In Deacon patrol, poll WaitForClaudeReady for each pending spawn\n3. When ready, send 'Begin.' via NudgeSession\n4. Mark as triggered\n\n## Evidence\nTracer bullet 2025-12-23: Had to manually nudge polecat/tracer to start work.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T21:58:26.070984-08:00","updated_at":"2025-12-27T21:29:52.820568-08:00","deleted_at":"2025-12-27T21:29:52.820568-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-t6muy","title":"Design: Polecat lifecycle and patrol coordination","description":"## Context\n\nThis design captures thinking from a deep session about the Gas Town propulsion system - how Deacon, Witness, Refinery, and Polecats coordinate to move work smoothly through the system.\n\n## Core Insight: Session-Per-Step Model\n\nPolecats do NOT complete complex molecules end-to-end. Instead:\n- One polecat SESSION per molecule STEP\n- Same sandbox (branch/worktree) persists across sessions\n- Each step: spawn → work → close bead → recycle session\n- Final step: spawn → work → close bead → signal complete → merge → nuke sandbox\n\n## Two Cleanup Stages\n\n| Stage | Trigger | Kills | Survives |\n|-------|---------|-------|----------|\n| Step cleanup | Step bead closed | Session | Branch, worktree, molecule |\n| Molecule cleanup | Merged | Session, branch, worktree | Digest |\n\n## Per-Rig Polecat Channel\n\nNeed a mailing list/queue per rig for session-lifecycle requests:\n- \"Recycle me\" (from polecat)\n- \"Recycle worker X\" (from witness/mayor)\n- \"Spawn for step Y\" (from anyone)\n\nFirst-come-first-served by patrolling agents. Anyone on patrol (Witness, Refinery, Crew, Mayor) can service requests.\n\n## GUPP + Pinned Work = Completion\n\nAs long as:\n1. Work is pinned to polecat identity (e.g., gastown/furiosa)\n2. Sandbox persists (branch + worktree)\n3. Someone keeps spawning polecat when it dies\n\n→ The molecule WILL get finished. GUPP ensures wake-and-work.\n\n## Daemon → Deacon Heartbeat\n\nThe daemon pings the deacon, keeping the cycle alive. Deacon peeks into rig-wide channels during patrol and can service lifecycle requests.\n\n## Open Design Questions\n\n### Q1: Spoon-Feeding Bin-Packing\nTwo dimensions of granularity trade-offs:\n- How many logical steps per physical molecule step?\n- How many molecule steps per polecat session?\n\nToo few steps → context exhaustion, forgetting\nToo many steps → overhead, fragmentation\n\nNeeds: Analysis of optimal granularity based on step complexity.\n\n### Q2: Mechanical vs Agent-Driven Recycling\nCaution from deacon murder spree bug: mechanical detection of \"stuck\" workers is fragile.\n\nPrefer: Explicit \"recycle me\" requests serviced by patrol agents.\n\nQuestion: When is mechanical intervention appropriate?\n\n### Q3: Channel Implementation\nOptions:\n- Mail-based (gt mail to rig/polecats)\n- Beads-based (special issue type)\n- State file (rig/polecat-queue.json)\n\nMail seems most consistent with Gas Town patterns.\n\n### Q4: Who Spawns Next Step?\nCurrent: gt sling spawns fresh polecat\nNeeded: Mechanism for \"continue molecule on existing sandbox\"\n\nMaybe: gt sling --continue or witness detects pending step.\n\n## Related Issues\n\n- gt-dtw9u: Witness monitoring (enhance survey-workers)\n- gt-qpwv4: Completion detection (check ready branches)\n- gt-6qyt1: Refinery queue (process MERGE_READY)\n- gt-budeb: Auto-nuke (handle MERGED signal)\n- gt-5j3ia: Swarm aggregation (batch completion)\n- gt-1dbcp: Polecat auto-start (SessionStart hook issue)\n\n## Design Principles (from HOP/MEOW context)\n\n1. **Discovery over tracking** - observe reality each cycle\n2. **Mail as coordination primitive** - agents signal via mail\n3. **ZFC** - Claude makes judgment calls, no hardcoded thresholds\n4. **Redundant monitoring** - overlapping observation is resilience\n5. **Wisps are ephemeral** - patrol molecules flow like water\n\n## Next Steps\n\n1. Finalize channel design (mail-based queue)\n2. Enhance witness patrol formula with completion detection\n3. Enhance refinery patrol with MERGED signaling\n4. Implement step-level recycling\n5. Design spoon-feeding granularity guidelines","status":"hooked","priority":1,"issue_type":"epic","created_at":"2025-12-27T19:55:01.660221-08:00","created_by":"mayor","updated_at":"2025-12-27T19:58:46.95043-08:00"} {"id":"gt-t6vkc","title":"Digest: mol-deacon-patrol","description":"Patrol 2: inbox clear, all agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:30:31.061654-08:00","updated_at":"2025-12-27T21:26:00.43234-08:00","deleted_at":"2025-12-27T21:26:00.43234-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-t76fz","title":"ZFC #4: Replace daemon identity parsing with agent self-registration","description":"**ZFC Violation:** internal/daemon/lifecycle.go:209-309\n\nThe daemon has embedded switch statements that parse agent identity strings to determine:\n- Session names\n- Working directories\n- Which agents need pre-sync\n- Restart commands\n\n**Current anti-pattern:**\n```go\nif strings.HasSuffix(identity, \"-refinery\") {\n needsPreSync = true\n workDir = filepath.Join(...)\n}\n```\n\n**ZFC-compliant solution:**\nAgent types self-register via role beads:\n- Role bead contains: working_dir, session_name_pattern, needs_sync, restart_command\n- Daemon reads role bead to get lifecycle config\n- No identity string parsing in Go\n\n**Depends on:** Day 1.5 (role beads exist)\n\nReference: ~/gt/docs/zfc-violations-audit.md #4","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/dementus","created_at":"2025-12-27T21:32:22.443355-08:00","created_by":"mayor","updated_at":"2025-12-30T01:42:53.745999-08:00","dependencies":[{"issue_id":"gt-t76fz","depends_on_id":"gt-xgqnb","type":"blocks","created_at":"2025-12-27T21:32:39.209763-08:00","created_by":"daemon"}]} +{"id":"gt-t76fz","title":"ZFC #4: Replace daemon identity parsing with agent self-registration","description":"**ZFC Violation:** internal/daemon/lifecycle.go:209-309\n\nThe daemon has embedded switch statements that parse agent identity strings to determine:\n- Session names\n- Working directories\n- Which agents need pre-sync\n- Restart commands\n\n**Current anti-pattern:**\n```go\nif strings.HasSuffix(identity, \"-refinery\") {\n needsPreSync = true\n workDir = filepath.Join(...)\n}\n```\n\n**ZFC-compliant solution:**\nAgent types self-register via role beads:\n- Role bead contains: working_dir, session_name_pattern, needs_sync, restart_command\n- Daemon reads role bead to get lifecycle config\n- No identity string parsing in Go\n\n**Depends on:** Day 1.5 (role beads exist)\n\nReference: ~/gt/docs/zfc-violations-audit.md #4","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/dementus","created_at":"2025-12-27T21:32:22.443355-08:00","created_by":"mayor","updated_at":"2025-12-30T02:06:22.851955-08:00","closed_at":"2025-12-30T02:06:22.851955-08:00","close_reason":"Implemented role-based lifecycle configuration - daemon now uses role beads for session patterns, work directories, pre-sync, and start commands","dependencies":[{"issue_id":"gt-t76fz","depends_on_id":"gt-xgqnb","type":"blocks","created_at":"2025-12-27T21:32:39.209763-08:00","created_by":"daemon"}]} {"id":"gt-t7ekm","title":"gt mol attach: Auto-detect agent from cwd when single arg provided","description":"## Current Behavior\n\ngt mol attach requires 2 args:\n gt mol attach \u003cagent-bead-id\u003e \u003cmolecule-id\u003e\n\n## Expected Behavior\n\nWhen called with 1 arg from an agent working directory:\n gt mol attach \u003cmolecule-id\u003e\n\nShould auto-detect the agent from cwd (same detection used by gt mail, bd, etc.)\nand attach the molecule to that agent hook.\n\n## Example\n\nFrom ~/gt/gastown/mayor/rig:\n gt mol attach gt-y14l7\n -\u003e detects mayor role\n -\u003e attaches gt-y14l7 to gt-mayor hook\n\n## Implementation\n\n1. Check arg count\n2. If 1 arg, call role detection from cwd\n3. Resolve agent bead ID from role (gt-mayor, gt-witness-gastown, etc.)\n4. Proceed with attachment\n\nThis makes the common case (attaching work to yourself) ergonomic.","status":"closed","priority":2,"issue_type":"feature","assignee":"gastown/polecats/nux","created_at":"2025-12-28T22:27:13.897826-08:00","created_by":"stevey","updated_at":"2025-12-30T00:16:04.946268-08:00","closed_at":"2025-12-30T00:16:04.946268-08:00","close_reason":"Implemented: gt mol attach now accepts 1 arg and auto-detects agent bead ID from cwd"} {"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-t9ojq","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T03:05:30.233061-08:00","updated_at":"2025-12-28T03:05:30.233061-08:00","closed_at":"2025-12-28T03:05:30.233023-08:00"} {"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-tdaoj","title":"Digest: mol-deacon-patrol","description":"Patrol 18: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:49:31.492996-08:00","updated_at":"2025-12-28T19:49:31.492996-08:00","closed_at":"2025-12-28T19:49:31.492962-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":"## @group Dynamic Resolution in Mail Router\n\nWire agent bead queries into mail router for @group addresses.\n\n## Updated Approach (post agent-as-bead + Dogs)\n\nAgent discovery uses bead queries:\n\n```bash\nbd list --type=agent --rig=gastown # All agents in rig\nbd list --type=agent --role_type=witness # All witnesses\nbd list --type=agent --role_type=dog # All dogs\n```\n\n## Supported Patterns\n\n| Pattern | Resolution | Scope |\n|---------|------------|-------|\n| `@rig/gastown` | `--rig=gastown` | All gastown agents |\n| `@town` | `--rig=\"\"` (no filter) | All town-level agents |\n| `@witnesses` | `--role_type=witness` | All witnesses across rigs |\n| `@crew/gastown` | `--role_type=crew --rig=gastown` | Gastown crew |\n| `@dogs` | `--role_type=dog` | All Deacon dogs |\n| `@overseer` | Special case (not bead query) | Human operator |\n\n## Deliverables\n\n1. Parse @group syntax in router\n2. Resolve via `bd list --type=agent` queries\n3. Fan-out at send time (N copies, one per recipient)\n4. Special handling for `@overseer` (single recipient, uses overseer.json)\n\n## @overseer Special Case\n\nThe overseer is the human operator - NOT an agent bead. Resolution:\n- Load `mayor/overseer.json`\n- Use `overseer/` as recipient address\n- No bead query needed\n\n## Dependencies\n- Agent bead schema (gt-ikyo1) ✅ closed\n- Dog agent beads need role_type=dog (new prereq)\n\n## Acceptance\n- @rig/gastown sends to all gastown agents\n- @dogs sends to all Deacon dogs\n- @overseer sends to human operator\n- Each recipient gets own message copy","notes":"Beads dependency: bd-jsk7 (Agent beads: structured labels for filtering)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:52:04.244948-08:00","updated_at":"2025-12-29T20:49:48.563354-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"},{"issue_id":"gt-tgy1v","depends_on_id":"gt-qha0g","type":"blocks","created_at":"2025-12-29T19:57:46.720308-08:00","created_by":"daemon"}]} {"id":"gt-th7","title":"Add agent abstraction layer to support non-Claude agents","description":"Currently Gas Town hardcodes 'claude --dangerously-skip-permissions' throughout the codebase for spawning agents. We should add an abstraction layer to support other AI agents (e.g., Gemini CLI, OpenAI agents, local models).\n\nLocations that spawn Claude:\n- internal/cmd/mayor.go:131\n- internal/cmd/deacon.go:150 \n- internal/cmd/witness.go:280\n- internal/cmd/crew.go (multiple locations)\n- internal/cmd/up.go:190, 229\n- internal/session/manager.go:146\n- internal/refinery/manager.go:207\n\nSuggested approach:\n1. Create an agent package with an interface\n2. Add configuration for agent type in town/rig config\n3. Replace hardcoded claude commands with agent.Spawn() calls\n4. Support agents: claude, gemini, openai, local (ollama, etc.)","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-20T15:11:15.931048-08:00","updated_at":"2025-12-20T15:26:54.236995-08:00"} {"id":"gt-tj1k","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:45","description":"Patrol 10: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:45:36.775542-08:00","updated_at":"2025-12-27T21:26:05.104028-08:00","deleted_at":"2025-12-27T21:26:05.104028-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"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-tkbd5","title":"Refactor runStart into focused helper functions","description":"attached_args: Refactor runStart into focused helper functions\n\nBreak up the 126-line runStart function in start.go.\n\n## Files to modify\n- internal/cmd/start.go\n\n## Current structure (lines 129-255)\nrunStart does:\n1. Crew path detection\n2. Workspace verification\n3. Mayor session start\n4. Deacon session start\n5. Optional rig agent startup\n6. Configured crew auto-start\n\n## Refactoring plan\nExtract these helpers:\n```go\nfunc startMayorSession(townRoot string, verbose bool) error\nfunc startDeaconSession(townRoot string) error\nfunc startRigAgents(townRoot string, rigs []string) error\nfunc startConfiguredCrew(townRoot string, config *TownConfig) error\n```\n\n## Acceptance criteria\n- [ ] runStart reduced to \u003c50 lines\n- [ ] 4 helper functions extracted\n- [ ] Each helper is \u003c40 lines\n- [ ] No change in behavior\n- [ ] go test ./internal/cmd/... passes\n- [ ] Manual test: gt start works correctly","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T15:49:13.889957-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T16:35:53.275529-08:00","closed_at":"2025-12-28T16:35:53.275529-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"} @@ -2140,6 +2143,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-ug23r","title":"Merge: cheedo-1767088553821","description":"branch: polecat/cheedo-1767088553821\ntarget: main\nsource_issue: cheedo-1767088553821\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T02:00:38.570072-08:00","created_by":"gastown/polecats/cheedo","updated_at":"2025-12-30T02:00:38.570072-08:00"} {"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":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/rictus","created_at":"2025-12-21T17:51:18.712633-08:00","updated_at":"2025-12-29T23:55:18.491893-08:00","closed_at":"2025-12-29T23:55:18.491893-08:00","close_reason":"Fixed - mq_list.go now uses r.BeadsPath() instead of r.Path to read from the git-synced beads location"} {"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-uhqil","title":"Merge: furiosa-1766987668522","description":"branch: polecat/furiosa-1766987668522\ntarget: main\nsource_issue: furiosa-1766987668522\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-28T22:06:13.954083-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-28T22:26:43.955772-08:00","closed_at":"2025-12-28T22:26:43.955772-08:00"} @@ -2213,10 +2217,10 @@ {"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"} {"id":"gt-vmm9","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:26","description":"Patrol 13: quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:26:56.830842-08:00","updated_at":"2025-12-27T21:26:05.2473-08:00","deleted_at":"2025-12-27T21:26:05.2473-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vmpo","title":"orphan-check","description":"Find abandoned work. Check for in_progress issues with no active agent.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T14:27:33.988644-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":"task"} +{"id":"gt-vn20c","title":"Digest: mol-deacon-patrol","description":"Patrol 9: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:31:51.321997-08:00","updated_at":"2025-12-28T01:31:51.321997-08:00","closed_at":"2025-12-28T01:31:51.321952-08:00"} {"id":"gt-vnp9","title":"tmux notifications: display-message too subtle, use send-keys instead","description":"## Problem\n\n`tmux display-message` notifications are not visible enough - they appear briefly in the status bar and are easy to miss.\n\n## Current Behavior\n\nrouter.go uses:\n```go\nr.tmux.DisplayMessageDefault(sessionID, notification)\n```\n\n## What Works\n\nSending echo commands directly to the terminal:\n```bash\ntmux send-keys -t \u003csession\u003e \"echo '📬 NEW MAIL from mayor'\" Enter\n```\n\n## Proposed Fix\n\nChange notification method to send visible output to the terminal, perhaps with a box/banner:\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📬 NEW MAIL from mayor\nSubject: \u003csubject\u003e\nRun: bd mail inbox\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n```\n\n## Considerations\n\n- This interrupts the terminal output (acceptable for important mail)\n- Could check if Claude is mid-response and queue notification\n- Or use tmux popup if available","notes":"Additional issues:\n1. Enter key not sent properly when chained with send-keys\n2. Need to debounce and send Enter separately\n3. Correct pattern: send text, sleep briefly, then send Enter","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-18T21:35:28.542985-08:00","updated_at":"2025-12-27T21:29:57.085269-08:00","deleted_at":"2025-12-27T21:29:57.085269-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-vqhc","title":"gt sling/handoff fails: slashes in agent identity create invalid hook paths","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-24T23:24:49.495017-08:00","updated_at":"2025-12-27T21:29:52.556135-08:00","deleted_at":"2025-12-27T21:29:52.556135-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-vqpmf","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 14: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:46:20.527809-08:00","updated_at":"2025-12-27T21:26:01.36161-08:00","deleted_at":"2025-12-27T21:26:01.36161-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-vtqs3","title":"Digest: mol-deacon-patrol","description":"Patrol 12: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:08:31.206977-08:00","updated_at":"2025-12-27T23:08:31.206977-08:00","closed_at":"2025-12-27T23:08:31.206937-08:00"} {"id":"gt-vuld8","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy, 2 crew active","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T17:49:39.892429-08:00","updated_at":"2025-12-27T21:26:01.10764-08:00","deleted_at":"2025-12-27T21:26:01.10764-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vv4i","title":"Polecat template: move session close checklist into molecule steps","description":"Template has prose checklists for 'Before Signaling Done' and 'SESSION CLOSE PROTOCOL'. These should be encoded as tail steps in the polecat molecule, not repeated as prose in CLAUDE.md. Reduces duplication and ensures the steps are actually followed.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:50.666492-08:00","updated_at":"2025-12-27T21:29:55.908628-08:00","dependencies":[{"issue_id":"gt-vv4i","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.612852-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.908628-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vx2qv","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 9: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:07.233471-08:00","updated_at":"2025-12-28T11:22:07.233471-08:00","closed_at":"2025-12-28T11:22:07.233434-08:00"} @@ -2267,7 +2271,7 @@ {"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-zuj","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-26T13:04:23.048133-08:00","updated_at":"2025-12-26T13:05:17.719577-08:00","closed_at":"2025-12-26T13:05:17.719577-08:00"} {"id":"gt-witness-gastown","title":"gt-witness-gastown","description":"gt-witness-gastown\n\nrole_type: witness\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-witness-role\ncleanup_status: null","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-28T00:07:40.418097-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-29T14:31:11.045404-08:00","closed_at":"2025-12-29T14:30:35.640814-08:00","close_reason":"Migrated to canonical naming: gt-gastown-witness/refinery"} -{"id":"gt-witness-role","title":"Witness Role Definition","description":"You are the Witness - per-rig worker monitor. You watch polecats, nudge them\ntoward completion, verify clean git state before kills, and escalate stuck\nworkers to the Mayor.\n\nYou do NOT do implementation work. Your job is oversight, not coding.\n\ndefault_molecule: mol-witness-patrol\ncapabilities:\n - monitor_workers\n - nudge_stuck\n - pre_kill_verify\n - session_lifecycle\n - escalation\n\n## Core Responsibilities\n\n1. Monitor workers: Track polecat health and progress\n2. Nudge: Prompt slow workers toward completion\n3. Pre-kill verification: Ensure git state is clean before killing sessions\n4. Session lifecycle: Kill sessions, update worker state\n5. Self-cycling: Hand off to fresh session when context fills\n6. Escalation: Report stuck workers to Mayor\n\nKey principle: You own ALL per-worker cleanup. Mayor is never involved in\nroutine worker management.\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour work is defined by the mol-witness-patrol molecule. Execute steps:\n- bd ready (find next step)\n- bd show \u003cstep-id\u003e (see what to do)\n- bd close \u003cstep-id\u003e (mark complete)\n\n## Nudge Protocol\n\nProgress through stages. Track nudge count per worker per issue.\n- First Nudge (10+ min idle): Gentle inquiry\n- Second Nudge (15 min): Direct question\n- Third Nudge (20 min): Final warning\nAfter 3 nudges with no progress -\u003e escalate to Mayor\n\n## Pre-Kill Verification\n\nBefore killing ANY polecat session:\n1. gt polecat git-state \u003cname\u003e - Must be clean\n2. Check for uncommitted work\n3. Check for unpushed commits\n4. Verify issue closed\n5. Verify PR submitted (if applicable)\n\n## Commands\n\n- gt polecat list \u003crig\u003e - See all polecats\n- gt polecat git-state \u003cname\u003e - Check git cleanliness\n- tmux capture-pane -t gt-\u003crig\u003e-\u003cname\u003e -p | tail -40 - Session inspection\n- gt mail inbox - Check messages\n- gt mail send mayor/ -s \"Subject\" -m \"Message\" - Escalate\n","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/slit","created_at":"2025-12-28T00:51:20.912437-08:00","created_by":"stevey","updated_at":"2025-12-30T00:40:14.833017-08:00"} +{"id":"gt-witness-role","title":"Witness Role Definition","description":"You are the Witness - per-rig worker monitor. You watch polecats, nudge them\ntoward completion, verify clean git state before kills, and escalate stuck\nworkers to the Mayor.\n\nYou do NOT do implementation work. Your job is oversight, not coding.\n\nsession_pattern: gt-{rig}-witness\nwork_dir_pattern: {town}/{rig}\nneeds_pre_sync: false\nstart_command: exec claude --dangerously-skip-permissions\n\ndefault_molecule: mol-witness-patrol\ncapabilities:\n - monitor_workers\n - nudge_stuck\n - pre_kill_verify\n - session_lifecycle\n - escalation\n\n## Core Responsibilities\n\n1. Monitor workers: Track polecat health and progress\n2. Nudge: Prompt slow workers toward completion\n3. Pre-kill verification: Ensure git state is clean before killing sessions\n4. Session lifecycle: Kill sessions, update worker state\n5. Self-cycling: Hand off to fresh session when context fills\n6. Escalation: Report stuck workers to Mayor\n\nKey principle: You own ALL per-worker cleanup. Mayor is never involved in\nroutine worker management.\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour work is defined by the mol-witness-patrol molecule. Execute steps:\n- bd ready (find next step)\n- bd show \u003cstep-id\u003e (see what to do)\n- bd close \u003cstep-id\u003e (mark complete)\n\n## Nudge Protocol\n\nProgress through stages. Track nudge count per worker per issue.\n- First Nudge (10+ min idle): Gentle inquiry\n- Second Nudge (15 min): Direct question\n- Third Nudge (20 min): Final warning\nAfter 3 nudges with no progress then escalate to Mayor\n\n## Pre-Kill Verification\n\nBefore killing ANY polecat session:\n1. gt polecat git-state \u003cname\u003e - Must be clean\n2. Check for uncommitted work\n3. Check for unpushed commits\n4. Verify issue closed\n5. Verify PR submitted (if applicable)\n\n## Commands\n\n- gt polecat list \u003crig\u003e - See all polecats\n- gt polecat git-state \u003cname\u003e - Check git cleanliness\n- tmux capture-pane -t gt-\u003crig\u003e-\u003cname\u003e -p | tail -40 - Session inspection\n- gt mail inbox - Check messages\n- gt mail send mayor/ -s \"Subject\" -m \"Message\" - Escalate","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/slit","created_at":"2025-12-28T00:51:20.912437-08:00","created_by":"stevey","updated_at":"2025-12-30T02:02:49.746012-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-wled7","title":"Use atomic write pattern for state files","description":"attached_args: Atomic write pattern for state files\n\nPrevent data loss from concurrent state file writes using atomic write pattern.\n\n## Files to modify\n- internal/witness/manager.go\n- internal/refinery/manager.go\n- internal/crew/manager.go\n- internal/swarm/manager.go\n\n## Problem\nState is saved directly to file - if process crashes mid-write, file corrupts.\n\n## Implementation\nReplace direct writes with atomic pattern:\n```go\nfunc atomicWriteJSON(path string, v interface{}) error {\n data, err := json.MarshalIndent(v, \"\", \" \")\n if err != nil {\n return err\n }\n tmpFile := path + \".tmp\"\n if err := os.WriteFile(tmpFile, data, 0644); err != nil {\n return err\n }\n return os.Rename(tmpFile, path) // Atomic on POSIX\n}\n```\n\n## Acceptance criteria\n- [ ] atomicWriteJSON helper created (in internal/util or similar)\n- [ ] All 4 manager saveState methods use atomic writes\n- [ ] .tmp files cleaned up on success\n- [ ] go test ./... passes\n- [ ] Manual test: state files survive kill -9","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:49:19.004767-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T15:58:00.223196-08:00","closed_at":"2025-12-28T15:58:00.223196-08:00"} @@ -2303,7 +2307,7 @@ {"id":"gt-x2cx","title":"gt handoff: Deadlock bug in runHandoff","notes":"Running 'gt handoff' from a polecat causes a deadlock:\n\nStack trace shows:\n- goroutine 1 [select (no cases)] in runHandoff\n- File: internal/cmd/handoff.go:125\n\nThe command successfully sends the shutdown request but then hangs with 'fatal error: all goroutines are asleep - deadlock!'","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-20T08:01:33.827354-08:00","updated_at":"2025-12-27T21:29:53.764464-08:00","deleted_at":"2025-12-27T21:29:53.764464-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-x2ygo","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 3: routine check, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:22:00.324654-08:00","updated_at":"2025-12-27T21:26:01.950987-08:00","deleted_at":"2025-12-27T21:26:01.950987-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-x2yml","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 0 messages, agents healthy, no cleanup needed","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:49:25.778185-08:00","updated_at":"2025-12-27T21:26:00.601801-08:00","deleted_at":"2025-12-27T21:26:00.601801-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-x5acy","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 11: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:34.773103-08:00","updated_at":"2025-12-28T11:22:34.773103-08:00","closed_at":"2025-12-28T11:22:34.773071-08:00","dependencies":[{"issue_id":"gt-x5acy","depends_on_id":"gt-eph-71z","type":"parent-child","created_at":"2025-12-28T11:22:34.773946-08:00","created_by":"deacon"}]} +{"id":"gt-x5acy","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 11: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:34.773103-08:00","updated_at":"2025-12-28T11:22:34.773103-08:00","closed_at":"2025-12-28T11:22:34.773071-08:00"} {"id":"gt-x74c","title":"gt mol command tree: status, catalog, burn, squash","description":"Add gt mol subcommand as agent-side API for molecule operations.\n\nCommands needed:\n- gt mol status - What's on my hook? (pinned molecule, current step, progress)\n- gt mol catalog - List available protos (delegate to bd mol catalog)\n- gt mol burn - Burn current attachment\n- gt mol squash - Squash current molecule to digest\n\nThis completes the agent-side API and makes the docs (sling-design.md, propulsion-principle.md) match reality.\n\nBlocks: deacon.md.tmpl update (can't use gt mol status until it exists)","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-22T13:12:23.710855-08:00","updated_at":"2025-12-27T21:29:53.226036-08:00","deleted_at":"2025-12-27T21:29:53.226036-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-x7c","title":"Work assignment mail not received by polecat","description":"When gt spawn sends a work assignment:\n\n1. gt spawn says '✓ Work assignment sent'\n2. Polecat runs 'gt mail inbox' \n3. Shows '0 messages, 0 unread'\n\nThe work assignment mail never arrived at the polecat's inbox.\n\n## Observed in session\n- Spawned polecat dementus on gt-th7\n- Polecat checked inbox: empty\n- Polecat couldn't find issue (separate sync bug)\n\n## Possible causes\n- Mail routing issue for polecat addresses\n- gt spawn not actually sending mail\n- Mail sent to wrong address format","notes":"This was likely caused by stale beads in old polecats. With gt-9nf (fresh polecats), polecats now use shared rig beads via redirect file, eliminating sync issues. Mail routing uses town beads correctly.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-20T15:18:12.39878-08:00","updated_at":"2025-12-27T21:29:53.73616-08:00","deleted_at":"2025-12-27T21:29:53.73616-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-x7n8a","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 19: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:48:24.957934-08:00","updated_at":"2025-12-27T21:26:01.32077-08:00","deleted_at":"2025-12-27T21:26:01.32077-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2313,7 +2317,6 @@ {"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-xd95b","title":"Remove markdown molecule heresy from ~/gt/molecules/","description":"The ~/gt/molecules/lifecycle/*.md files are outdated heresy - molecule definitions should only exist as formula.toml files in .beads/formulas/. Remove the markdown specs and update any docs that reference them.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/crew/max","created_at":"2025-12-28T17:33:33.464666-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-29T23:32:02.113214-08:00","closed_at":"2025-12-29T23:32:02.113214-08:00","close_reason":"Removed markdown molecule heresy: mol-mayor-boot.md and mol-rig-boot-arm.md from ~/gt/molecules/lifecycle/. No external references found - all molecule definitions now in .beads/formulas/*.formula.toml"} {"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-xdklc","title":"Digest: mol-deacon-patrol","description":"Patrol 8: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:45:35.766678-08:00","updated_at":"2025-12-28T19:45:35.766678-08:00","closed_at":"2025-12-28T19:45:35.76663-08:00"} {"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","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"} @@ -2382,19 +2385,21 @@ {"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-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-yo8q8","title":"Digest: mol-deacon-patrol","description":"Patrol 12: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T08:17:55.490764-08:00","updated_at":"2025-12-28T08:17:55.490764-08:00","closed_at":"2025-12-28T08:17:55.490728-08:00"} +{"id":"gt-yp0yu","title":"Digest: mol-deacon-patrol","description":"Patrol 13: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:47:37.589573-08:00","updated_at":"2025-12-28T19:47:37.589573-08:00","closed_at":"2025-12-28T19:47:37.589542-08:00"} {"id":"gt-yskrz","title":"Crew CLAUDE.md overwritten by polecat template","description":"The crew worker CLAUDE.md files (crew/max, crew/joe, crew/jack) have been overwritten with the polecat-CLAUDE.md template content.\n\n**Expected**: Crew workers should have mayor-like context (they share the rig repo, work on main branch, plan work)\n\n**Actual**: Crew CLAUDE.md says 'Polecat ace' and includes polecat-specific instructions (don't push to main, wait for Witness to kill session, etc.)\n\n**Impact**: \n- Crew workers getting wrong identity context\n- Ready Front planning guidance in gotchas section was lost\n- Crew workers told not to push to main (but they should)\n\n**Root cause**: Likely gt polecat template deployment hit crew directories\n\n**Fix needed**:\n- Restore crew CLAUDE.md template (or create one if missing)\n- Ensure template deployment only targets polecats/ directories\n- Add Ready Front planning section to crew template","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/morsov","created_at":"2025-12-28T21:38:53.66113-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-29T22:08:03.491829-08:00","closed_at":"2025-12-29T22:08:03.491829-08:00","close_reason":"Fixed crew CLAUDE.md files:\n1. Regenerated with correct crew template (not polecat template)\n2. Added CLAUDE.md to .gitignore to prevent cross-clone contamination\n3. Each crew member now has their own CLAUDE.md with correct identity"} {"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-yt4py","title":"gt polecat add should spawn with --dangerously-skip-permissions","description":"When adding polecats via gt polecat add, the subsequent Claude session needs --dangerously-skip-permissions flag to run autonomously.\n\nCurrently:\n- gt polecat add creates worktree\n- tmux new-session spawns 'claude' without flags\n- Polecat gets stuck at permission prompts\n\nNeeded:\n- gt polecat add (or gt sling) should spawn with --dangerously-skip-permissions\n- Or store a config in polecat worktree indicating autonomous mode\n\nThis is critical for swarm automation - polecats can't self-approve permissions.","status":"hooked","priority":2,"issue_type":"feature","assignee":"gastown/polecats/dementus","created_at":"2025-12-28T16:31:53.841788-08:00","created_by":"mayor","updated_at":"2025-12-30T00:07:53.183681-08:00"} {"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"} {"id":"gt-ytsxp","title":"Refinery emits activity events","description":"Refinery emits events to activity stream for MQ lifecycle:\n\nEvents to emit:\n- merge_started: When refinery begins processing an MR\n- merged: When MR successfully merged to main\n- merge_failed: When merge fails (conflict, tests, etc.)\n- merge_skipped: When MR skipped (already merged, etc.)\n\nEvents should include: MR ID, worker, branch, timestamp, reason (for failures)\n\nThis replaces stats tracking in .runtime/refinery.json","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/polecats/nux","created_at":"2025-12-28T21:40:19.81217-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-29T23:46:47.080947-08:00","closed_at":"2025-12-29T23:46:47.080947-08:00","close_reason":"Implemented all MQ lifecycle events in refinery: merge_started, merged, merge_failed, merge_skipped","dependencies":[{"issue_id":"gt-ytsxp","depends_on_id":"gt-y14l7","type":"blocks","created_at":"2025-12-28T21:41:11.499026-08:00","created_by":"daemon"}]} {"id":"gt-yx4","title":"Town root .beads has schema mismatch with bd","description":"The .beads directory at town root (/Users/stevey/gt/.beads) has an incompatible schema:\n\n```\nError: failed to open database: failed to initialize schema: sqlite3: SQL logic error: no such column: thread_id\n```\n\nMeanwhile, gastown/.beads (symlinked to mayor/rig/.beads) works fine.\n\n## Impact\n\n- gt mail inbox fails at town root\n- gt handoff sends mail to broken db\n- Daemon can't check its inbox\n\n## Options\n\n1. Delete town root .beads/beads.db and let it recreate\n2. Symlink town root .beads to gastown/.beads\n3. Run schema migration on existing db\n\n## Root Cause\n\nLikely a beads version upgrade that added thread_id column, but the town root db was created before that.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-18T14:31:35.559042-08:00","updated_at":"2025-12-27T21:29:54.175911-08:00","deleted_at":"2025-12-27T21:29:54.175911-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} -{"id":"gt-yxn7l","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 20: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:51.027105-08:00","updated_at":"2025-12-28T11:22:51.027105-08:00","closed_at":"2025-12-28T11:22:51.027075-08:00"} +{"id":"gt-yxn7l","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 20: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:51.027105-08:00","updated_at":"2025-12-28T11:22:51.027105-08:00","closed_at":"2025-12-28T11:22:51.027075-08:00","dependencies":[{"issue_id":"gt-yxn7l","depends_on_id":"gt-eph-ing","type":"parent-child","created_at":"2025-12-28T11:22:51.027861-08:00","created_by":"deacon"}]} {"id":"gt-yzms","title":"Merge polecat/rictus: Add molecule phase lifecycle diagram","description":"Branch: polecat/rictus\n\nAdds molecule phase lifecycle diagram to architecture.md showing Proto → Mol/Wisp → Digest state transitions with the 'states of matter' metaphor. Also documents when to use Mol (durable) vs Wisp (ephemeral).\n\nCloses: gt-c6zs","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:41:58.139439-08:00","updated_at":"2025-12-27T21:27:22.584705-08:00","deleted_at":"2025-12-27T21:27:22.584705-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-yzqiz","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 7: all nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:40:40.640805-08:00","updated_at":"2025-12-27T21:26:01.41936-08:00","deleted_at":"2025-12-27T21:26:01.41936-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-yzs3r","title":"Digest: mol-deacon-patrol","description":"Patrol complete: inbox empty, all agents healthy, cleaned 4 orphans (gt-wx0w, gt-kp3s3, gt-6n1cy, gt-i4lo)","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:14:28.119101-08:00","updated_at":"2025-12-27T21:26:03.328214-08:00","deleted_at":"2025-12-27T21:26:03.328214-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-z06w","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:29","description":"Patrol 20: final patrol before handoff","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:29:37.516654-08:00","updated_at":"2025-12-27T21:26:05.187912-08:00","deleted_at":"2025-12-27T21:26:05.187912-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-z0gk","title":"Digest: mol-deacon-patrol","description":"Patrol 12: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:59:53.524399-08:00","updated_at":"2025-12-27T21:26:04.927722-08:00","deleted_at":"2025-12-27T21:26:04.927722-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-z2i5m","title":"Digest: mol-deacon-patrol","description":"Patrol 2: Routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:43:51.797495-08:00","updated_at":"2025-12-27T21:26:02.027772-08:00","deleted_at":"2025-12-27T21:26:02.027772-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-z3781","title":"Digest: mol-deacon-patrol","description":"Patrol 5: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:44:24.559588-08:00","updated_at":"2025-12-28T19:44:24.559588-08:00","closed_at":"2025-12-28T19:44:24.559557-08:00"} {"id":"gt-z3qf","title":"Overhaul gt mol to match bd mol chemistry interface","description":"## The Sling: Unified Work Dispatch\n\nThis issue tracks the overhaul of `gt molecule` to align with chemistry metaphor and introduce the **Universal Gas Town Propulsion Principle**.\n\n### The Propulsion Principle\n\n\u003e **If you find something on your hook, YOU RUN IT.**\n\nThis is the one rule that drives all Gas Town agents.\n\n### The Sling Operation\n\n`gt sling \u003cthing\u003e \u003ctarget\u003e [options]` - unified command for spawn + assign + pin.\n\nSee: `gastown/mayor/rig/docs/sling-design.md`\n\n### Implementation Tasks\n\n| Issue | Title | Priority |\n|-------|-------|----------|\n| gt-4ev4 | Implement gt sling command | P1 |\n| gt-uym5 | Implement gt mol status command | P1 |\n| gt-i4kq | Update templates for Propulsion Principle | P1 |\n| gt-7hor | Document the Propulsion Principle | P2 |\n\n### Command Changes\n\n| Old | New |\n|-----|-----|\n| `gt molecule instantiate` | `gt sling` |\n| `gt molecule attach` | `gt sling --force` |\n| `gt molecule detach` | `gt mol burn` |\n| `gt molecule progress` | `gt mol status` |\n| `gt molecule list` | `gt mol catalog` |\n| `gt spawn --molecule` | `gt sling` |\n\n### Acceptance Criteria\n\n- [ ] `gt sling` works for protos, issues, and epics\n- [ ] `gt mol status` shows hook state\n- [ ] Templates updated for propulsion principle\n- [ ] Old commands deprecated with warnings\n- [ ] Documentation complete","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-22T03:02:38.049324-08:00","updated_at":"2025-12-27T21:29:53.277818-08:00","dependencies":[{"issue_id":"gt-z3qf","depends_on_id":"gt-4ev4","type":"blocks","created_at":"2025-12-22T12:10:42.394653-08:00","created_by":"daemon"},{"issue_id":"gt-z3qf","depends_on_id":"gt-uym5","type":"blocks","created_at":"2025-12-22T12:10:42.46834-08:00","created_by":"daemon"},{"issue_id":"gt-z3qf","depends_on_id":"gt-i4kq","type":"blocks","created_at":"2025-12-22T12:10:42.541384-08:00","created_by":"daemon"},{"issue_id":"gt-z3qf","depends_on_id":"gt-7hor","type":"blocks","created_at":"2025-12-22T12:10:42.613099-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.277818-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-z3rf","title":"Remove schedule/phase terminology from code","description":"Temporal/schedule language in identifiers is an anti-pattern.\n\n## Found Issues\n\n### beads repo\n- `examples/multi-phase-development/` directory\n - Rename to `examples/dependency-sequenced-work/` or similar\n\n### gastown repo \n- `internal/cmd/start.go` lines 178-195\n - Uses \"Phase 1:\", \"Phase 2:\", etc. in printf output\n - Change to descriptive names: \"Interrupting agents...\", \"Requesting handoff...\", etc.\n\n- `internal/swarm/landing.go` lines ~50-70\n - Comments say \"// Phase 1: Stop all polecat sessions\"\n - Change to \"// Step: Stop all polecat sessions\" or just remove phase labels\n\n## Why This Matters\n\nPhase/version language in names:\n1. Implies a fixed schedule (antithetical to dependency-driven work)\n2. Creates confusion with molecule \"phases\" (solid/liquid/gas)\n3. Encourages temporal thinking that leads to backwards dependencies\n\n## What To Keep\n\n- Molecule phase terminology (pour/wisp/proto) - this is chemistry, not scheduling\n- Version fields inside files (version: 1) - this is semantic versioning","status":"open","priority":2,"issue_type":"chore","created_at":"2025-12-24T15:57:43.019728-08:00","updated_at":"2025-12-24T15:57:43.019728-08:00"} {"id":"gt-z45be","title":"Digest: mol-deacon-patrol","description":"Patrol 4: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:04:05.628716-08:00","updated_at":"2025-12-27T23:04:05.628716-08:00","closed_at":"2025-12-27T23:04:05.628679-08:00"} @@ -2431,7 +2436,6 @@ {"id":"gt-zk7wl","title":"#channel resolution for real-time broadcast","description":"Wire tmux scanner into nudge system for #channel addresses.\n\n## Deliverables\n\n1. Parse #channel syntax in nudge:\n - #rig/gastown → nudge all running gastown agents\n - #town → nudge all running agents\n - #witnesses → nudge all running witnesses\n\n2. Broadcast logic:\n - Resolve #channel to running sessions\n - Nudge each session\n - Ephemeral (no storage)\n\n## Dependencies\n- Tmux session scanner (gt-???)\n\n## Acceptance\n- #rig/gastown nudges all running gastown agents\n- Ephemeral, no message storage\n- Graceful handling of no-sessions","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-26T14:52:33.362178-08:00","updated_at":"2025-12-26T14:52:33.362178-08:00","dependencies":[{"issue_id":"gt-zk7wl","depends_on_id":"gt-7grh6","type":"blocks","created_at":"2025-12-26T14:53:11.237315-08:00","created_by":"daemon"}]} {"id":"gt-zko","title":"gt rig info: Show detailed rig information","description":"Add 'gt rig info \u003crig\u003e' command to show detailed rig status.\n\nShould show:\n- Rig path and git URL\n- Active polecats with status\n- Refinery status\n- Witness status\n- Recent activity\n- Beads summary (open issues count)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:47:17.879255-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-zko","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:22:47.502099-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-zlro5","title":"Refactor patrol context functions to reduce duplication","description":"In prime.go, three patrol context functions are nearly identical (~100 lines each):\n- outputDeaconPatrolContext() - L797-940\n- outputWitnessPatrolContext() - L942-1106\n- outputRefineryPatrolContext() - L1108-1272\n\nThey all:\n1. Check for existing patrol molecule\n2. Auto-spawn if none exists\n3. Display patrol work loop instructions\n\n**Suggested refactor**:\nExtract common logic into a helper:\n```go\nfunc outputPatrolContext(ctx RoleContext, patrolName string, assignee string) {\n // shared logic\n}\n```\n\nThen each role-specific function just calls the helper with appropriate parameters.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-25T22:03:13.712525-08:00","updated_at":"2025-12-25T22:03:13.712525-08:00"} -{"id":"gt-zltww","title":"Digest: mol-deacon-patrol","description":"Patrol 19: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:20:07.421459-08:00","updated_at":"2025-12-25T10:20:07.421459-08:00","closed_at":"2025-12-25T10:20:07.421425-08:00"} {"id":"gt-zly","title":"Swarm learning: Beads database locality gap","description":"## PGT Bug (GGT Design Already Correct)\n\nMayor created issues in `~/ai/mayor/rigs/beads/.beads/` but polecats use `~/ai/beads/.beads/`. Different databases = polecats can't see Mayor's beads.\n\n**GGT Fix**: architecture.md already specifies:\n- All agents use BEADS_DIR pointing to rig-level `.beads/`\n- Lines 116-143: Beads Configuration for Multi-Agent\n- Lines 573-586: Rig-Level Beads via BEADS_DIR\n\nThis is a PGT implementation gap, not a design issue. GGT spawn must set BEADS_DIR correctly.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T01:21:45.37072-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-zn35j","title":"Nested loop support in control flow","description":"Currently, nested loops (a loop inside a loop body) are not supported.\n\nIn expandLoopIteration(), the Loop field is intentionally not copied:\n```go\n// Note: Loop field intentionally not copied - nested loops need explicit support\n```\n\nTo support nested loops:\n1. After expanding the outer loop iteration, recursively call ApplyLoops on the body steps\n2. Handle nested iteration ID prefixing (e.g., `outer.iter1.inner.iter2.step`)\n3. Add tests for nested loop scenarios\n\nThis is a lower-priority enhancement since most real-world formulas use single-level loops.","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-25T15:13:49.880102-08:00","updated_at":"2025-12-27T21:29:57.346622-08:00","dependencies":[{"issue_id":"gt-zn35j","depends_on_id":"gt-8tmz.4","type":"blocks","created_at":"2025-12-25T15:14:18.859367-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.346622-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-zn9m","title":"142 instances of error suppression with _ = pattern","description":"Code has 142 instances of '_ = ' error suppression in non-test code.\nExamples:\n- internal/polecat/manager.go: _ = pool.Load() - ignores state loading\n- internal/daemon/notification.go: _ = os.WriteFile() - ignores file write\n- internal/mail/router.go: _ = r.notifyRecipient() - notification ignored\n\nThese create silent failures and hard-to-debug issues.\n\nOptions:\n1. Document intentional suppressions with comments\n2. Handle errors properly where appropriate\n3. At minimum, log suppressed errors at debug level","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T12:50:59.241303-08:00","updated_at":"2025-12-27T21:29:55.553197-08:00","dependencies":[{"issue_id":"gt-zn9m","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.478225-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.553197-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} diff --git a/.beads/mq/gt-09eim.json b/.beads/mq/gt-09eim.json new file mode 100644 index 00000000..e9352c32 --- /dev/null +++ b/.beads/mq/gt-09eim.json @@ -0,0 +1,11 @@ +{ + "id": "gt-09eim", + "branch": "polecat/toast-1767088545235", + "target": "main", + "source_issue": "toast-1767088545235", + "worker": "", + "rig": "gastown", + "title": "Merge: toast-1767088545235", + "priority": 2, + "created_at": "2025-12-30T02:01:08.537717-08:00" +} \ No newline at end of file diff --git a/.beads/mq/gt-nu47q.json b/.beads/mq/gt-nu47q.json new file mode 100644 index 00000000..45f06668 --- /dev/null +++ b/.beads/mq/gt-nu47q.json @@ -0,0 +1,11 @@ +{ + "id": "gt-nu47q", + "branch": "polecat/rictus-1767087768853", + "target": "main", + "source_issue": "rictus-1767087768853", + "worker": "", + "rig": "gastown", + "title": "Merge: rictus-1767087768853", + "priority": 2, + "created_at": "2025-12-30T01:54:12.913353-08:00" +} \ No newline at end of file diff --git a/.beads/mq/gt-ug23r.json b/.beads/mq/gt-ug23r.json new file mode 100644 index 00000000..e9470a67 --- /dev/null +++ b/.beads/mq/gt-ug23r.json @@ -0,0 +1,11 @@ +{ + "id": "gt-ug23r", + "branch": "polecat/cheedo-1767088553821", + "target": "main", + "source_issue": "cheedo-1767088553821", + "worker": "", + "rig": "gastown", + "title": "Merge: cheedo-1767088553821", + "priority": 2, + "created_at": "2025-12-30T02:00:38.571996-08:00" +} \ No newline at end of file diff --git a/.beads/sync-state.json b/.beads/sync-state.json new file mode 100644 index 00000000..88db55d4 --- /dev/null +++ b/.beads/sync-state.json @@ -0,0 +1,7 @@ +{ + "last_failure": "2025-12-30T02:00:24.817185-08:00", + "failure_count": 1, + "backoff_until": "2025-12-30T02:00:54.817185-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