bd sync: 2025-12-28 12:46:53

This commit is contained in:
Steve Yegge
2025-12-28 12:46:53 -08:00
parent c564bfd736
commit 43ef530e95
2 changed files with 37 additions and 15 deletions

View File

@@ -13,6 +13,7 @@
{"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-09hq0","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:05:21.881552-08:00","updated_at":"2025-12-25T00:05:21.881552-08:00","closed_at":"2025-12-25T00:05:21.881524-08:00"}
{"id":"gt-09i4","title":"Unify tmux session lifecycle: prefer exec-over-shell pattern","description":"## Context\n\nWhen `gt crew at` is run from INSIDE the target session, it uses `execClaude()` which\nreplaces the shell with Claude directly. This is actually preferable behavior:\n- Cleaner exit (no intermediate shell prompt)\n- More reliable for programmatic worker recycling\n- Better UX for humans\n\nBut currently this only happens accidentally when you run `gt crew at` while already\nin the session at a shell prompt.\n\n## Current behavior\n\n1. Session created: `tmux new-session` starts with shell\n2. Claude started via `send-keys` → shell spawns claude as child\n3. Exit claude → return to shell → exit shell → session ends\n\nWith exec path (only if already in session):\n1. `execClaude()` replaces shell with claude\n2. Exit claude → session ends (no intermediate shell)\n\n## Desired behavior\n\nConsider making exec-the-shell the DEFAULT for all crew/persistent sessions:\n- Spawn session with shell\n- Wait for ready\n- Use `respawn-pane -k` with claude command (kills shell, starts claude directly)\n\nThis gives the cleaner lifecycle without requiring the user to be inside the session.\n\n## Related\n\nPart of tmux control plane unification - ability to manage workers from any session.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T14:24:34.371414-08:00","updated_at":"2025-12-27T21:29:55.492782-08:00","deleted_at":"2025-12-27T21:29:55.492782-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-09mag","title":"Digest: mol-deacon-patrol","description":"Patrol 12: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:44:36.232841-08:00","updated_at":"2025-12-25T13:44:36.232841-08:00","closed_at":"2025-12-25T13:44:36.232809-08:00"}
{"id":"gt-0a90","title":"Add gt hook command (wrapper for bd hook)","description":"Add a thin wrapper command `gt hook` that calls `bd hook` to inspect what's pinned to an agent's hook.\n\n## Usage\n\n```bash\ngt hook # Show what's on current agent's hook\ngt hook --agent deacon # Show Deacon's hook\ngt hook --agent gastown/furiosa # Show polecat's hook\n```\n\n## Implementation\n\nThin wrapper in gt that:\n1. Determines current agent identity\n2. Calls `bd hook [--agent \u003cname\u003e]`\n3. Formats output for gt context\n\n## Why gt wrapper?\n\n- Consistent with gt ecosystem (gt mail, gt status, etc.)\n- Can add gt-specific context (session status, etc.)\n- Easier discovery for gt users\n\n## Related\n\n- bd hook command (implemented by Dave)\n- Chemistry UX design: gastown/mayor/rig/docs/chemistry-design-changes.md","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T02:37:02.429497-08:00","updated_at":"2025-12-22T02:37:02.429497-08:00"}
{"id":"gt-0asj","title":"Merge: gt-5af.5","description":"branch: polecat/Scabrous\ntarget: main\nsource_issue: gt-5af.5\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T17:50:25.227909-08:00","updated_at":"2025-12-27T21:27:22.700495-08:00","deleted_at":"2025-12-27T21:27:22.700495-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
{"id":"gt-0atys","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Nominal - halfway point","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:50:19.218794-08:00","updated_at":"2025-12-27T21:26:04.148881-08:00","deleted_at":"2025-12-27T21:26:04.148881-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -37,7 +38,6 @@
{"id":"gt-0pdhj","title":"Remove all hardcoded gastown dependencies from gt codebase","description":"The Go codebase should not have hardcoded dependencies on gastown (the rig name).\n\nFound in prime.go outputDeaconPatrolContext() - FIXED in this session.\n\nOther potential issues to audit:\n- Check all patrol context functions (Witness, Refinery) for similar patterns\n- Ensure rig-specific paths are derived from context, not hardcoded\n- Test with a different rig name to verify\n\nThe principle: Gas Town should work with any rig name, not just gastown.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:21:50.570904-08:00","updated_at":"2025-12-28T01:24:59.010519-08:00","closed_at":"2025-12-28T01:24:59.010519-08:00","close_reason":"Audit complete: no hardcoded gastown dependencies in runtime logic. Patrol contexts use ctx.Rig dynamically. Help examples use gastown as concrete example (acceptable). Legacy doctor check for .gastown/ dirs is correct migration behavior."}
{"id":"gt-0pl","title":"Polecat CLAUDE.md: configure auto-approve for bd and gt commands","description":"Polecats get stuck waiting for bash command approval when running\nbd and gt commands. Need to configure Claude Code to auto-approve these.\n\nOptions:\n1. Add allowedTools to polecat CLAUDE.md\n2. Configure .claude/settings.json in polecat directory\n3. Use --dangerously-skip-permissions flag (not recommended)\n\nShould auto-approve:\n- bd (beads commands)\n- gt (gastown commands)\n- go build/test\n- git status/add/commit/push\n\nShould still require approval:\n- rm -rf\n- Arbitrary commands outside project\n\nRelated to polecat prompting (gt-e1y, gt-sd6).","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T14:10:27.611612-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-0qki","title":"Refinery-Witness communication protocol","description":"Define mail protocol between Refinery and Witness:\n\nFROM Witness → Refinery:\n- 'Polecat ready': polecat X completed work, ready for merge\n- 'Rework complete': polecat Y finished requested rework\n\nFROM Refinery → Witness:\n- 'Merge success': polecat X merged, can be cleaned up\n- 'Merge failed': polecat X needs rework on \u003creason\u003e\n- 'Rework request': please have a polecat rebase X on current main\n\nImplement as structured mail with parseable format.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T18:09:27.451344-08:00","updated_at":"2025-12-27T21:29:56.941251-08:00","dependencies":[{"issue_id":"gt-0qki","depends_on_id":"gt-ktal","type":"blocks","created_at":"2025-12-19T18:09:39.58445-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.941251-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-0ruq9","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T01:26:31.701543-08:00","updated_at":"2025-12-25T01:26:31.701543-08:00"}
{"id":"gt-0s99","title":"submit-merge","description":"Submit to merge queue. Create branch if needed.\nVerify CI passes.\n\ngt done # Signal work ready for merge queue\n\nIf there are CI failures, fix them before proceeding.\n\nDepends: rebase-main","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:48:26.322452-08:00","updated_at":"2025-12-25T14:12:42.195231-08:00","dependencies":[{"issue_id":"gt-0s99","depends_on_id":"gt-i4lo","type":"parent-child","created_at":"2025-12-21T21:48:26.329069-08:00","created_by":"stevey"},{"issue_id":"gt-0s99","depends_on_id":"gt-bf95","type":"blocks","created_at":"2025-12-21T21:48:26.329601-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.195231-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-0sf2","title":"Add gt rig rename command","description":"Allow renaming a rig after creation. Similar to gt crew rename, this should:\n\n- Update the directory name\n- Update mayor/rigs.json entry\n- Update the rig's config.json\n- Handle running agents gracefully (require shutdown first or --force)\n\nUse case: User creates a rig, later wants to change its name for better organization.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-23T04:46:41.988492-08:00","updated_at":"2025-12-27T21:29:56.134098-08:00","deleted_at":"2025-12-27T21:29:56.134098-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-0skyg","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize.\nThe spawn command returns immediately without waiting. This step finds spawned\npolecats that are now ready and sends them a trigger to start working.\n\n```bash\n# For each rig with polecats\nfor rig in gastown beads; do\n gt polecats $rig\n # For each working polecat, check if Claude is ready\n # Use tmux capture-pane to look for \"\u003e \" prompt\ndone\n```\n\nFor each ready polecat that hasn't been triggered yet:\n1. Send \"Begin.\" to trigger UserPromptSubmit hook\n2. The hook injects mail, polecat sees its assignment\n3. Mark polecat as triggered in state\n\nUse WaitForClaudeReady from tmux package (polls for \"\u003e \" prompt).\nTimeout: 60 seconds per polecat. If not ready, try again next cycle.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.777565-08:00","updated_at":"2025-12-27T21:29:55.249011-08:00","dependencies":[{"issue_id":"gt-0skyg","depends_on_id":"gt-uru8z","type":"blocks","created_at":"2025-12-25T02:11:33.977731-08:00","created_by":"stevey"}],"deleted_at":"2025-12-27T21:29:55.249011-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -71,7 +71,6 @@
{"id":"gt-1f51t","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 6: routine, healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:23:52.631309-08:00","updated_at":"2025-12-27T21:26:01.924968-08:00","deleted_at":"2025-12-27T21:26:01.924968-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-1fl","title":"gt crew restart command","description":"Add a 'gt crew restart' command that kills the tmux session and restarts fresh. Useful when a crew member gets confused or needs a clean slate.\n\nShould:\n- Kill existing tmux session if running\n- Start fresh session with claude\n- Run gt prime to reinitialize context\n\nAlias: gt crew rs","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T19:47:32.131386-08:00","updated_at":"2025-12-27T21:29:57.261152-08:00","deleted_at":"2025-12-27T21:29:57.261152-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-1fqwd","title":"Digest: mol-deacon-patrol","description":"Patrol 2 complete: all healthy, no issues","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:58:51.246552-08:00","updated_at":"2025-12-27T21:26:00.677765-08:00","deleted_at":"2025-12-27T21:26:00.677765-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-1g351","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:51:04.158534-08:00","updated_at":"2025-12-25T10:51:04.158534-08:00","closed_at":"2025-12-25T10:51:04.158502-08:00"}
{"id":"gt-1gbf","title":"Digest: mol-deacon-patrol","description":"Patrol #5: Routine - 6 sessions healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:22:06.354723-08:00","updated_at":"2025-12-27T21:26:04.793249-08:00","deleted_at":"2025-12-27T21:26:04.793249-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-1gy","title":"gt mail read: Support numeric indices for message ID","description":"Allow 'gt mail read 1' to read the first message in inbox.\n\nCurrent behavior requires full message ID like 'msg-abc123'.\nShould support:\n- Numeric index: 'gt mail read 1' reads first/newest message\n- Partial ID match: 'gt mail read abc' matches 'msg-abc123'\n\nThis is a UX improvement - agents frequently type 'gt mail read 1'.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:49:54.60582-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-1gy","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:22:47.658947-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"gt-1i8r","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy - Mayor OK, 2 witnesses, 2 refineries, 0 polecats, 8 sessions, no callbacks","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:44:43.300311-08:00","updated_at":"2025-12-27T21:26:04.227139-08:00","deleted_at":"2025-12-27T21:26:04.227139-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -82,6 +81,7 @@
{"id":"gt-1ky","title":"CLI: workspace commands (init, add, list)","description":"GGT needs workspace management commands beyond install.\n\n## Commands (beyond gt-f9x.3 install)\n\n### gt workspace list\nList all rigs in current workspace.\n```\ngt workspace list [--json]\n```\nEssentially `gt rig list` but framed as workspace view.\n\n### gt workspace add\nAdd existing rig to workspace (alternative to gt rig add).\n```\ngt workspace add \u003cgit-url\u003e [--name NAME]\n```\n\n### gt onboard\nInteractive first-time setup wizard.\n```\ngt onboard\n```\n- Prompts for workspace location\n- Creates structure via gt install\n- Offers to add first rig\n\n## Note\nMay be redundant with gt-f9x.3 (install) and gt-u1j.16 (rig commands).\nConsider if this is needed or should be closed as covered by those.\n\n## PGT Reference\ngastown-py/src/gastown/cli/workspace_cmd.py","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:47:38.070203-08:00","updated_at":"2025-12-16T16:03:49.715667-08:00"}
{"id":"gt-1l7h","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:47","description":"Patrol 16: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:47:28.476069-08:00","updated_at":"2025-12-27T21:26:05.062875-08:00","deleted_at":"2025-12-27T21:26:05.062875-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"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","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-1lvog","depends_on_id":"gt-eph-vfn","type":"parent-child","created_at":"2025-12-28T11:22:37.103249-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"}
@@ -89,6 +89,7 @@
{"id":"gt-1su","title":"Spawn inject: Enter not submitted after multiline paste","description":"When gt spawn injects a multiline context (85+ lines), Claude Code shows \n'[Pasted text #1 +85 lines]' but the prompt is not submitted.\n\nThe tmux SendKeys function does include 'Enter' but it appears to not work\nfor long pasted text:\n\n```go\nfunc (t *Tmux) SendKeys(session, keys string) error {\n _, err := t.run(\"send-keys\", \"-t\", session, keys, \"Enter\")\n return err\n}\n```\n\nPossible fixes:\n1. Use tmux paste-buffer instead of send-keys for long text\n2. Send Enter separately after the text\n3. Use bracketed paste mode correctly\n\nReproduction:\n```bash\ngt spawn gastown/Nux --issue gt-u1j.13 --create\n# Session shows pasted text but waits at prompt\n```","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-17T14:09:20.774203-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
{"id":"gt-1tqy","title":"Digest: mol-deacon-patrol","description":"Patrol 15","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:24.121681-08:00","updated_at":"2025-12-24T23:10:24.121681-08:00","closed_at":"2025-12-24T23:10:24.121649-08:00"}
{"id":"gt-1u9","title":"Interactive prompts for destructive operations","description":"Add interactive confirmations for destructive operations.\n\n## Operations Needing Confirmation\n- `gt swarm cancel` - Cancels active swarm\n- `gt swarm land --force` - Force landing\n- `gt polecat decommission` - Removes polecat\n- `gt rig remove` - Removes rig\n- `gt stop --all` - Stops all sessions\n- `gt mail purge` - Permanently deletes mail\n\n## Implementation Options\n\n### Option 1: promptui library\n```go\nimport \"github.com/manifoldco/promptui\"\n\nprompt := promptui.Prompt{\n Label: \"Delete polecat Toast\",\n IsConfirm: true,\n}\nresult, err := prompt.Run()\n```\n\n### Option 2: Simple stdin\n```go\nfunc confirm(prompt string) bool {\n fmt.Printf(\"%s [y/N]: \", prompt)\n var response string\n fmt.Scanln(\u0026response)\n return strings.ToLower(response) == \"y\"\n}\n```\n\n## Bypass Flags\nAll confirmations skippable with --force or --yes:\n```go\nif !force \u0026\u0026 !confirm(\"Really cancel swarm?\") {\n return nil\n}\n```\n\n## Acceptance Criteria\n- [ ] Destructive ops prompt by default\n- [ ] --force or --yes bypasses\n- [ ] Clear prompt text explaining action\n- [ ] Non-interactive mode (piped input) auto-fails","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T14:48:51.551594-08:00","updated_at":"2025-12-16T16:06:54.283696-08:00"}
{"id":"gt-1uhmj","title":"Agent-centric dashboard view (gt dashboard)","description":"New command showing role tree with recent activity per agent.\n\n## Output format\n```\ngastown/\n 🎩 mayor [10:30] Dispatched gt-xyz → Toast\n 👁 witness [10:28] Nudged polecat-3 (idle 5m) \n 🏭 refinery [10:25] Merged PR #123\n 👷 crew/\n joe [10:22] ✓ Completed gt-95j13\n max [10:18] → Working on gt-s6r44\n 😺 polecats/\n Toast [10:30] Received gt-xyz, starting...\n```\n\n## Features\n- Shows all agents organized by role\n- Most recent 1-2 activity entries per agent\n- Live updates with --follow flag\n- Filters: --rig, --role\n\n## Data source\n- Reads from ~/gt/.feed.jsonl (curated feed)\n- Groups events by actor\n- Shows latest per agent\n\nPart of epic gt-u7dxq","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T12:46:38.812289-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T12:46:38.812289-08:00","dependencies":[{"issue_id":"gt-1uhmj","depends_on_id":"gt-38doh","type":"blocks","created_at":"2025-12-28T12:46:47.3704-08:00","created_by":"daemon"}]}
{"id":"gt-1wc1l","title":"Digest: mol-deacon-patrol","description":"Patrol 18: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:17:51.280971-08:00","updated_at":"2025-12-27T21:26:00.954722-08:00","deleted_at":"2025-12-27T21:26:00.954722-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-1wmw","title":"E2E Test: Verify mol-polecat-work spawn","description":"Simple test task for Phase 5 E2E validation","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-24T22:53:38.996878-08:00","updated_at":"2025-12-27T21:29:52.564408-08:00","deleted_at":"2025-12-27T21:29:52.564408-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-1wum6","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:18:51.752483-08:00","updated_at":"2025-12-27T21:26:02.683328-08:00","deleted_at":"2025-12-27T21:26:02.683328-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -128,7 +129,6 @@
{"id":"gt-2k4f.2","title":"working","description":"Actively working. Monitor for stuck.\n\nThe polecat is processing its assigned issue ({{issue}}).\nMonitor via peek. Watch for:\n- Progress on commits\n- Status updates in beads\n- SHUTDOWN mail when done\n\nWait for SHUTDOWN signal from the polecat.\nVariables: {{polecat}}, {{issue}}","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T23:43:42.77616-08:00","updated_at":"2025-12-25T11:45:02.114796-08:00","dependencies":[{"issue_id":"gt-2k4f.2","depends_on_id":"gt-2k4f","type":"parent-child","created_at":"2025-12-22T23:43:42.778213-08:00","created_by":"daemon"},{"issue_id":"gt-2k4f.2","depends_on_id":"gt-2k4f.1","type":"blocks","created_at":"2025-12-22T23:43:55.78046-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T11:45:02.114796-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"gt-2k4f.3","title":"done","description":"Exit received. Ready for cleanup.\n\nThe polecat has completed its work and sent SHUTDOWN.\nPerform cleanup:\n```bash\ngt session kill {{polecat}}\ngt worktree prune {{polecat}}\n```\n\nUpdate beads state and close the lease.\nVariables: {{polecat}}, {{issue}}","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T23:43:44.676322-08:00","updated_at":"2025-12-25T11:45:02.114796-08:00","dependencies":[{"issue_id":"gt-2k4f.3","depends_on_id":"gt-2k4f","type":"parent-child","created_at":"2025-12-22T23:43:44.676783-08:00","created_by":"daemon"},{"issue_id":"gt-2k4f.3","depends_on_id":"gt-2k4f.2","type":"blocks","created_at":"2025-12-22T23:43:55.898358-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T11:45:02.114796-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"gt-2kz","title":"CLI: cleanup commands for stale state","description":"Cleanup commands for recovering from stale state.\n\n## Commands\n\n### gt cleanup \u003cpolecat\u003e\nClean stale state for specific polecat.\n```\ngt cleanup \u003crig\u003e/\u003cpolecat\u003e [--dry-run]\n```\n\nActions:\n- Remove orphaned state.json if clone missing\n- Clear stale session references\n- Reset stuck state (working → idle after timeout)\n\n### gt cleanup --all\nClean all polecats in workspace.\n```\ngt cleanup --all [--dry-run]\n```\n\n## Implementation\n```go\nfunc CleanupPolecat(rigName, polecatName string, dryRun bool) (*CleanupResult, error)\n\ntype CleanupResult struct {\n OrphanedStateRemoved bool\n SessionsCleared int\n StateReset bool\n Warnings []string\n}\n```\n\n## Overlap with Doctor\n- Doctor diagnoses and offers --fix\n- Cleanup is more aggressive state recovery\n- Consider merging into doctor --fix\n\n## New File\ninternal/cmd/cleanup.go\n\n## Acceptance Criteria\n- [ ] Removes orphaned state files\n- [ ] Clears stale session refs\n- [ ] --dry-run shows what would happen\n- [ ] Reports all actions taken","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T14:48:31.944982-08:00","updated_at":"2025-12-16T16:07:12.430696-08:00"}
{"id":"gt-2l8r8","title":"Digest: mol-deacon-patrol","description":"Patrol 7: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:40:39.193113-08:00","updated_at":"2025-12-26T18:40:39.193113-08:00","closed_at":"2025-12-26T18:40:39.19307-08:00"}
{"id":"gt-2mut4","title":"Digest: mol-deacon-patrol","description":"P14","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:26:05.355961-08:00","updated_at":"2025-12-27T21:26:01.626427-08:00","deleted_at":"2025-12-27T21:26:01.626427-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-2n3f","title":"Merge conflicts: Buzzard/mq-status, Dementus/harness-docs","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-19T12:08:07.486349-08:00","updated_at":"2025-12-27T21:29:54.042016-08:00","deleted_at":"2025-12-27T21:29:54.042016-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-2n6z","title":"Inconsistent error wrapping patterns","description":"Error handling is inconsistent across the codebase:\n\n1. Some functions use fmt.Errorf with %w for wrapping, others don't\n2. return nil, nil patterns (40+ occurrences) sometimes represent 'not found' and sometimes 'error but continue' - should use sentinel errors\n3. Some places return nil for errors when they should propagate them\n\nExamples of nil,nil that might need review:\n- internal/git/git.go:272, 308\n- internal/crew/manager.go:227\n- internal/witness/manager.go:517, 523, 530, 775\n- internal/beads/beads.go:225, 492","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-21T21:35:25.451396-08:00","updated_at":"2025-12-27T21:29:57.891394-08:00","deleted_at":"2025-12-27T21:29:57.891394-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -158,6 +158,7 @@
{"id":"gt-35s","title":"Architecture: beads config and direct landing docs","description":"Added to architecture.md:\n- Beads multi-agent configuration table (daemon, worktree, sync-branch)\n- ASCII directory layout for non-mermaid rendering\n- Direct landing workflow (bypass merge queue)\n- Design decisions 9 and 10 for direct landing and daemon awareness\n- CLI commands for gt land","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T00:29:52.395906-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"gt-35x","title":"Plugin: plan-oracle (work decomposition)","description":"Plugin that helps decompose epics/issues into sub-tasks. Analyzes scope, identifies dependencies, estimates complexity for parallelization, creates beads for sub-tasks with dependency links.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-15T22:53:05.772986-08:00","updated_at":"2025-12-15T23:17:06.423894-08:00","dependencies":[{"issue_id":"gt-35x","depends_on_id":"gt-axz","type":"blocks","created_at":"2025-12-15T22:53:17.587726-08:00","created_by":"daemon"}]}
{"id":"gt-361qj","title":"Standardize wisp creation syntax across role templates","description":"## Task\n\nRole templates use inconsistent syntax for creating wisps.\n\n## Current State\n\n**Deacon template:**\n```bash\nbd mol wisp create mol-deacon-patrol\nbd update \u003cwisp-id\u003e --status=pinned --assignee=deacon\n```\n\n**Witness template (BROKEN - see gt-xxx):**\n```bash\nbd mol wisp mol-witness-patrol --assignee={{ .RigName }}/witness\n```\n\n## Recommended Pattern\n\nAll patrol roles should use the same two-step pattern:\n```bash\nbd mol wisp create mol-\u003crole\u003e-patrol\nbd update \u003cwisp-id\u003e --status=pinned --assignee=\u003cidentity\u003e\n```\n\nOr we should add `--assignee` flag to `bd mol wisp` (file in beads repo if preferred).\n\n## Templates to Update\n\n- witness.md.tmpl (broken, needs immediate fix)\n- Verify consistency in refinery.md.tmpl if it also creates wisps\n\n## Related\n\nThis is a consistency task; the witness template bug is tracked separately as P0.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T17:12:37.726636-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-27T21:29:54.687993-08:00","close_reason":"Fixed - witness template now matches deacon pattern","deleted_at":"2025-12-27T21:29:54.687993-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-38doh","title":"Feed daemon: curate raw events into user-facing feed","description":"Goroutine in gt daemon that transforms raw events into curated activity feed.\n\n## Input\n- Tails ~/gt/.events.jsonl (raw events from gt, bd, agents)\n\n## Output \n- Writes ~/gt/.feed.jsonl (curated, user-facing)\n\n## Processing\n1. Filter by visibility tag (drop audit-only events)\n2. Dedupe repeated updates (5 molecule updates → \"agent active\")\n3. Aggregate related events (3 issues closed → \"batch complete\")\n4. Future: AI summarization via haiku for complex activity\n\n## Integration\n- Runs as goroutine in existing gt daemon\n- Starts when daemon starts\n- Graceful shutdown on daemon stop\n\nPart of epic gt-u7dxq","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T12:46:37.816384-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T12:46:37.816384-08:00","dependencies":[{"issue_id":"gt-38doh","depends_on_id":"gt-7aw1m","type":"blocks","created_at":"2025-12-28T12:46:47.342014-08:00","created_by":"daemon"}]}
{"id":"gt-39cb3","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, no lifecycle requests, cleaned 3 abandoned wisps","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:33:20.837523-08:00","updated_at":"2025-12-27T21:26:02.196074-08:00","deleted_at":"2025-12-27T21:26:02.196074-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-39ej","title":"Digest: mol-deacon-patrol","description":"Patrol #1: No issues found. All 6 agents healthy. No orphans.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:14:35.83023-08:00","updated_at":"2025-12-27T21:26:04.828115-08:00","deleted_at":"2025-12-27T21:26:04.828115-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-39ttg","title":"Day 2.1: Daemon reads agent bead state field","description":"Daemon queries agent beads for state instead of inferring from PID/tmux.\n\nChange getAgentState() to:\n1. Look up agent bead by ID (gt-mayor, gt-witness, etc.)\n2. Read state field (idle|running|stuck|stopped)\n3. Trust the value\n\nParent: gt-d0jqp","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T20:57:55.813003-08:00","created_by":"mayor","updated_at":"2025-12-28T01:34:43.212173-08:00","closed_at":"2025-12-28T01:34:43.212173-08:00","close_reason":"Implemented getAgentBeadState() and integrated into daemon. ensureDeaconRunning now checks agent bead state first (ZFC compliant). Dependent tasks gt-psuw7 (remove tmux) and gt-2hzl4 (timeout fallback) remain for full migration.","dependencies":[{"issue_id":"gt-39ttg","depends_on_id":"gt-lisj6","type":"blocks","created_at":"2025-12-27T21:00:31.823241-08:00","created_by":"daemon"}]}
@@ -185,6 +186,7 @@
{"id":"gt-3pm0f","title":"gt feed: Activity feed command with tmux-aware modes","description":"## Context\n\n`bd activity` exists and works well for streaming beads mutation events. However:\n- It's not discoverable via `gt` (the agent coordination CLI)\n- No tmux-aware behavior for when Gas Town is running in tmux\n- The planned TUI (gt-rivr) was tombstoned - need a simpler approach\n\n## Requirements\n\n### Without tmux (standalone mode)\n- `gt feed` streams activity to stdout (like `bd activity --follow`)\n- Supports filtering by rig, time window, event type\n- Works in any terminal\n\n### With tmux (integrated mode)\n- Could open/attach to a dedicated activity pane\n- Or provide a way to send feed to a specific pane\n- Integrate with existing gt tmux session management\n\n## Design Questions\n\n1. **Command name**: `gt feed` vs `gt activity` vs `gt watch`?\n2. **Tmux integration**: Dedicated pane? Split? Popup?\n3. **Cross-rig aggregation**: Merge events from multiple rig daemons?\n4. **Filtering UX**: By rig, by molecule, by event type?\n\n## Implementation Options\n\n**Phase 1: Simple wrapper**\n- `gt feed` shells out to `bd activity --follow`\n- Add `--rig` flag for filtering\n- Works identically with/without tmux\n\n**Phase 2: Tmux-aware**\n- Detect if running in gt tmux session\n- Offer to open in dedicated pane\n- `gt feed --pane` to force pane mode\n\n**Phase 3: Cross-rig** (if needed)\n- Aggregate from multiple rig daemons\n- Unified activity stream across town\n\n## Related\n\n- gt-rivr (tombstoned) - Original TUI epic\n- gt-22ng - Activity aggregator (blocked)\n- bd activity command - The underlying implementation\n","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-28T09:34:48.026886-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T09:59:40.364918-08:00","closed_at":"2025-12-28T09:59:40.364918-08:00","close_reason":"Phase 1 and 2 complete. Phase 3 (cross-rig) deferred.","comments":[{"id":2,"issue_id":"gt-3pm0f","author":"gastown/crew/joe","text":"## Design Decisions\n\n**Command name**: `gt feed` - concise, 'activity feed' metaphor is familiar\n\n**Tmux integration**: Dedicated window approach (not splits/popups)\n- `gt feed` - streams to stdout (standalone mode)\n- `gt feed --window` - creates/attaches to 'feed' window in rig's tmux session\n- Fits buffer-list mental model: feed is another window to C-b n/p cycle through\n\n**Next**: Implement Phase 1 (simple wrapper) then add --window flag","created_at":"2025-12-28T17:43:04Z"},{"id":3,"issue_id":"gt-3pm0f","author":"gastown/crew/joe","text":"Phase 1 complete: gt feed command implemented and pushed.\n\nFeatures:\n- `gt feed` streams in follow mode by default\n- `gt feed --no-follow` for one-shot display\n- `gt feed --rig \u003cname\u003e` to target specific rig's beads\n- All bd activity flags passed through (--since, --mol, --type, --limit)\n\nCommit: f8fc01e\n\nNext: Phase 2 (--window for tmux integration)","created_at":"2025-12-28T17:46:56Z"},{"id":4,"issue_id":"gt-3pm0f","author":"gastown/crew/joe","text":"Phase 2 complete: --window flag for tmux integration\n\nFeatures:\n- `gt feed --window` / `gt feed -w` creates dedicated 'feed' window\n- If window exists, switches to it (idempotent)\n- Always uses --follow mode in window (persistent stream)\n- Users cycle to/from feed with C-b n/p\n\nCommits:\n- f8fc01e: Phase 1 (basic wrapper)\n- 012ff44: Phase 2 (tmux window)\n\nTested in tmux - feed window created and streaming.\n\nRemaining: Phase 3 (cross-rig aggregation) if needed - deferring for now.","created_at":"2025-12-28T17:59:33Z"}]}
{"id":"gt-3pp","title":"Support numeric shortcuts in mail read (e.g., 'mail read 1')","description":"When inbox shows numbered messages like:\n* 1. gm-19b29031... 2025-12-16 mayor Subject...\n* 2. gm-19b26d51... 2025-12-16 Subject...\n\nUsers should be able to run 'gt mail read 1' instead of needing the full message ID 'gt mail read gm-19b29031f6a172206'.\n\nImplementation:\n- Track inbox message order in display\n- Map numeric indices to actual message IDs\n- Accept both numeric shortcuts and full IDs in 'mail read' command","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-16T13:15:07.857939-08:00","updated_at":"2025-12-27T21:29:57.313593-08:00","deleted_at":"2025-12-27T21:29:57.313593-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-3rquk","title":"Day 3.0: Document mail protocol contracts","description":"Document the formal mail protocol for Gas Town agent coordination.\n\nMail Types:\n\n**POLECAT_DONE** (polecat → witness)\n```\nSubject: POLECAT_DONE: \u003cname\u003e\nBody: {\"issue\": \"gt-xyz\", \"status\": \"complete|failed\", \"notes\": \"...\"}\n```\n\n**MERGE_READY** (witness → refinery)\n```\nSubject: MERGE_READY: \u003cbranch\u003e\nBody: {\"worker\": \"nux\", \"issue\": \"gt-xyz\", \"branch\": \"polecat/nux/gt-xyz\"}\n```\n\n**MERGED** (refinery → witness)\n```\nSubject: MERGED: \u003cbranch\u003e\nBody: {\"issue\": \"gt-xyz\", \"sha\": \"abc123\", \"worker\": \"nux\"}\n```\n\n**LIFECYCLE:Shutdown/Cycle/Restart** (agent → deacon/)\n```\nSubject: LIFECYCLE:Shutdown\nBody: {\"action\": \"shutdown\"}\n```\n\n**HELP** (polecat → witness → mayor)\n```\nSubject: HELP: \u003cbrief\u003e\nBody: {\"issue\": \"gt-xyz\", \"problem\": \"...\", \"context\": \"...\"}\n```\n\nCreate: docs/mail-protocol.md","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T22:02:11.619888-08:00","created_by":"mayor","updated_at":"2025-12-27T23:18:47.276607-08:00","closed_at":"2025-12-27T23:18:47.276607-08:00","close_reason":"Duplicate of P1 beads gt-5v8ls and gt-k294l","dependencies":[{"issue_id":"gt-3rquk","depends_on_id":"gt-qpoxz","type":"blocks","created_at":"2025-12-27T22:02:45.294244-08:00","created_by":"daemon"}]}
{"id":"gt-3sd3a","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 13: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:35.93998-08:00","updated_at":"2025-12-28T11:22:35.93998-08:00","closed_at":"2025-12-28T11:22:35.939949-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-3sd3a","depends_on_id":"gt-eph-ey6","type":"parent-child","created_at":"2025-12-28T11:22:35.940792-08:00","created_by":"deacon"}]}
{"id":"gt-3suf","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T22:51:29.540692-08:00","updated_at":"2025-12-27T21:29:55.662443-08:00","deleted_at":"2025-12-27T21:29:55.662443-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-3tcdb","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 6: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:40:03.230009-08:00","updated_at":"2025-12-27T21:26:01.42769-08:00","deleted_at":"2025-12-27T21:26:01.42769-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-3tssq.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-3tssq\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:57:47.407091-08:00","updated_at":"2025-12-27T21:29:55.360003-08:00","deleted_at":"2025-12-27T21:29:55.360003-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -229,6 +231,7 @@
{"id":"gt-462is","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:08:57.775267-08:00","updated_at":"2025-12-25T16:08:57.775267-08:00","closed_at":"2025-12-25T16:08:57.775236-08:00"}
{"id":"gt-469ab","title":"Digest: mol-deacon-patrol","description":"Patrol 17","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T20:05:59.2436-08:00","updated_at":"2025-12-27T21:26:00.644225-08:00","deleted_at":"2025-12-27T21:26:00.644225-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-46wdl","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 15: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:28:50.299576-08:00","updated_at":"2025-12-27T21:26:01.846206-08:00","deleted_at":"2025-12-27T21:26:01.846206-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-47bv4","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T00:01:56.197923-08:00","updated_at":"2025-12-25T01:26:28.028602-08:00","closed_at":"2025-12-25T01:26:28.028602-08:00"}
{"id":"gt-47q5v","title":"Digest: mol-deacon-patrol","description":"Patrol 6: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:43:08.050036-08:00","updated_at":"2025-12-27T21:26:03.238825-08:00","deleted_at":"2025-12-27T21:26:03.238825-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-47tq","title":"gt spawn should use bd mol run for molecule attachment","description":"Simplify Gas Town to use bd mol run for work tracking.\n\n## Key Insight\nTwo distinct mechanisms, not duplicative:\n\n| Mechanism | Purpose | Query |\n|-----------|---------|-------|\n| **Pinned molecule** (bd mol run) | What am I working on? | `bd list --pinned --assignee=me` |\n| **Handoff mail** | Context notes for restart | `gt mail read` (self-addressed) |\n\nThe handoff is just **mail to yourself** - optional context notes.\nThe molecule is **the actual work** - required state.\n\n## Current State (Overengineered)\nGas Town has custom attachment system:\n- Permanent \"Foo Handoff\" pinned beads per identity\n- AttachMolecule(pinnedBeadID, moleculeID) \n- Attachment fields parsed from description\n- Separate from beads pinning\n\n## New Model (Simplified)\nUse bd mol run directly:\n\n```bash\n# Spawn polecat with molecule\nbd mol run mol-polecat-work --var issue=gt-xyz\n# This: spawns, assigns to caller, pins root, sets in_progress\n```\n\nQuery current work:\n```bash\nbd list --pinned --assignee=gastown/furiosa --status=in_progress\n```\n\nHandoff context (when needed):\n```bash\ngt mail send gastown/furiosa -s \"Context notes\" -m \"Was on step 4...\"\n```\n\n## Changes Required\n\n### Remove from Gas Town\n- AttachMolecule() / DetachMolecule()\n- AttachmentFields struct and parsing\n- GetAttachment() / SetAttachmentFields()\n- Permanent pinned handoff beads per identity\n- Daemon attachment detection (checkDeaconAttachment)\n\n### Update gt spawn\n```go\n// Old: custom molecule instantiation + attachment\n// New: just call bd mol run\ncmd := exec.Command(\"bd\", \"mol\", \"run\", protoID, \"--var\", \"issue=\"+issueID)\n```\n\n### Update gt prime / agent context\n```go\n// Old: find handoff bead, parse attachment\n// New: query for pinned molecule\ncmd := exec.Command(\"bd\", \"list\", \"--pinned\", \"--assignee=\"+identity, \"--status=in_progress\", \"--json\")\n```\n\n### Update documentation\n- Remove handoff bead attachment docs\n- Clarify: handoff = mail, molecule = work\n- Update CLAUDE.md templates\n\n## Benefits\n1. One system for work tracking (beads)\n2. Simpler Gas Town code\n3. bd mol squash works naturally\n4. Handoff is just mail (already works)\n\n## Related\n- gt-3x0z: Wisp Molecule Integration\n- gt-rana: Patrol System\n- gt-lek6: gt rig reset --stale\n- gt-ay1r: gt molecule current","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-21T21:34:21.808261-08:00","updated_at":"2025-12-27T21:29:53.367026-08:00","deleted_at":"2025-12-27T21:29:53.367026-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-480b","title":"Improve test coverage in low-coverage packages","description":"Several packages have low test coverage:\n- internal/cmd: 6.8%\n- internal/mail: 3.6%\n- internal/daemon: 12.1%\n- internal/doctor: 14.5%\n- internal/refinery: 20.6%\n- internal/session: 27.8%\n- internal/git: 28.8%\n\nPriority should be given to mail, cmd, and daemon packages which handle critical functionality.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:34:47.807929-08:00","updated_at":"2025-12-27T21:29:56.478961-08:00","deleted_at":"2025-12-27T21:29:56.478961-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -279,7 +282,6 @@
{"id":"gt-4xuea","title":"Digest: mol-deacon-patrol","description":"Patrol 16: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:10:43.514883-08:00","updated_at":"2025-12-27T23:10:43.514883-08:00","closed_at":"2025-12-27T23:10:43.514849-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-4xuea","depends_on_id":"gt-eph-eje","type":"parent-child","created_at":"2025-12-27T23:10:43.515705-08:00","created_by":"deacon"}]}
{"id":"gt-4z54b","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:47:58.060935-08:00","updated_at":"2025-12-27T21:26:04.193847-08:00","deleted_at":"2025-12-27T21:26:04.193847-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-4z7j","title":"Test patrol queue feature","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-23T16:17:34.358185-08:00","updated_at":"2025-12-27T21:29:57.472767-08:00","deleted_at":"2025-12-27T21:29:57.472767-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-51du8","title":"Digest: mol-deacon-patrol","description":"Patrol 14","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:56:15.377977-08:00","updated_at":"2025-12-26T14:56:15.377977-08:00","closed_at":"2025-12-26T14:56:15.377937-08:00"}
{"id":"gt-51ghh","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T08:21:00.943043-08:00","updated_at":"2025-12-28T08:21:00.943043-08:00","closed_at":"2025-12-28T08:21:00.94301-08:00","close_reason":"Squashed from 9 wisps"}
{"id":"gt-51x","title":"Fix golangci-lint errcheck warnings (~160 issues)","description":"Running golangci-lint shows ~160 errcheck warnings for unchecked error returns.\n\nCommon patterns:\n- t.SetEnvironment() return values\n- os.WriteFile(), os.RemoveAll() \n- MarkFlagRequired() on cobra commands\n- Various manager methods\n\nRun: golangci-lint run ./...\n\nCould batch fix with:\n1. Add explicit _ = for intentionally ignored errors\n2. Handle errors properly where they matter\n3. Consider adding //nolint:errcheck for cobra flag setup","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T15:02:39.807659-08:00","updated_at":"2025-12-27T21:29:57.296988-08:00","deleted_at":"2025-12-27T21:29:57.296988-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-52fw","title":"Digest: mol-deacon-patrol","description":"Patrol: 2 completions (valkyrie gt-yd98 MQ, scrotus gt-mzal.1 boot proto). 8 polecats working.","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T00:32:25.162966-08:00","updated_at":"2025-12-27T21:26:05.413683-08:00","deleted_at":"2025-12-27T21:26:05.413683-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -319,6 +321,7 @@
{"id":"gt-5bjgq","title":"Digest: mol-deacon-patrol","description":"Patrol 19","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:57:47.79199-08:00","updated_at":"2025-12-26T14:57:47.79199-08:00","closed_at":"2025-12-26T14:57:47.791943-08:00"}
{"id":"gt-5c0lp","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:41:28.721109-08:00","updated_at":"2025-12-27T21:26:00.287373-08:00","deleted_at":"2025-12-27T21:26:00.287373-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-5cql0","title":"Day 5.2: Fix integration issues","description":"Address any issues found in Day 5.1:\n- Debug failures\n- Fix edge cases\n- Retry integration test\n- Document remaining gaps\n\nThis is buffer time for reality.\n\nParent: gt-oki8p","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-27T20:57:58.914212-08:00","created_by":"mayor","updated_at":"2025-12-27T20:57:58.914212-08:00","dependencies":[{"issue_id":"gt-5cql0","depends_on_id":"gt-j0gx2","type":"blocks","created_at":"2025-12-27T20:58:31.859106-08:00","created_by":"daemon"},{"issue_id":"gt-5cql0","depends_on_id":"gt-oki8p","type":"parent-child","created_at":"2025-12-27T20:58:39.644301-08:00","created_by":"daemon"},{"issue_id":"gt-5cql0","depends_on_id":"gt-liftoff","type":"blocks","created_at":"2025-12-27T21:43:12.603927-08:00","created_by":"daemon"}]}
{"id":"gt-5dpq6","title":"Digest: mol-deacon-patrol","description":"Patrol 12: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:57:52.344136-08:00","updated_at":"2025-12-26T13:57:52.344136-08:00","closed_at":"2025-12-26T13:57:52.344101-08:00"}
{"id":"gt-5e50a","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:35:02.300302-08:00","updated_at":"2025-12-27T21:26:02.51926-08:00","deleted_at":"2025-12-27T21:26:02.51926-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-5eegv","title":"Day 2.3: Agent writes state on lifecycle events","description":"Agents update their bead state using bd agent state command:\n- On startup: bd agent state gt-\u003crole\u003e running\n- On shutdown: bd agent state gt-\u003crole\u003e stopped\n- On stuck: bd agent state gt-\u003crole\u003e stuck\n\nState is self-reported, not inferred.\n\nImplementation: Wire up agent lifecycle hooks (SessionStart, SessionEnd, health checks) to call bd agent state.\n\nParent: gt-d0jqp","status":"closed","priority":1,"issue_type":"task","assignee":"mayor","created_at":"2025-12-27T20:58:05.269312-08:00","created_by":"mayor","updated_at":"2025-12-28T02:05:51.429595-08:00","closed_at":"2025-12-28T02:05:51.429595-08:00","close_reason":"Implemented in gt prime: calls bd agent state on startup (running) and handoff (stopped). State wired through reportAgentState function.","dependencies":[{"issue_id":"gt-5eegv","depends_on_id":"gt-39ttg","type":"blocks","created_at":"2025-12-27T20:58:44.375633-08:00","created_by":"daemon"}]}
{"id":"gt-5fa3i","title":"Digest: mol-deacon-patrol","description":"Patrol 1: inbox empty, Mayor OK, 2 witnesses, 2 refineries healthy, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:40:42.819905-08:00","updated_at":"2025-12-27T21:26:03.271225-08:00","deleted_at":"2025-12-27T21:26:03.271225-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -425,7 +428,7 @@
{"id":"gt-7923","title":"gt rig add / gt doctor: patrol awareness and wiring","description":"## Problem\n\nWhen a rig is installed or audited, we need to ensure all built-in patrols and role hooks are properly wired up.\n\n## gt rig add Changes\n\nWhen adding a rig, automatically:\n\n1. **Create patrol molecules** for each role:\n - mol-deacon-patrol (town-level)\n - mol-witness-patrol (per-rig)\n - mol-refinery-patrol (per-rig)\n\n2. **Set up hooks** that trigger patrols:\n - Deacon: daemon timer / heartbeat\n - Witness: daemon timer / polecat lifecycle events\n - Refinery: MR submission events / daemon timer\n\n3. **Configure daemon** to manage these patrols:\n - Register patrol molecules in daemon config\n - Set up respawn behavior for each role\n\n4. **Create plugin directories**:\n - ~/gt/plugins/ (town-level)\n - \u003crig\u003e/plugins/ (rig-level, if needed)\n\n## gt doctor Changes\n\nAdd patrol health checks:\n\n### patrol-molecules-exist\n- Verify mol-deacon-patrol, mol-witness-patrol, mol-refinery-patrol exist\n- Check they parse correctly (valid steps, dependencies)\n\n### patrol-hooks-wired\n- Verify hooks trigger patrol execution\n- Check daemon is configured to manage patrols\n\n### patrol-not-stuck\n- Detect wisps that have been in-progress too long\n- Flag orphaned patrol molecules (no active session)\n\n### patrol-plugins-accessible\n- Verify plugin directories exist and are readable\n- Check plugin frontmatter parses correctly\n\n### patrol-roles-have-prompts\n- Verify prompts/roles/*.md exist for each role\n- Check they reference the correct patrol molecule\n\n## Auto-fix\n\ngt doctor --fix can:\n- Create missing patrol molecules\n- Wire up missing hooks\n- Create plugin directories\n- NOT restart stuck patrols (needs human decision)\n\n## Related\n- gt-7920 (mol-refinery-patrol)\n- gt-7921 (await-work and plugin-run)\n- docs/wisp-architecture.md","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-22T13:24:43.158379-08:00","updated_at":"2025-12-27T21:29:53.200531-08:00","deleted_at":"2025-12-27T21:29:53.200531-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-79jxg","title":"Bug: bd update --parent doesn't persist","description":"The --parent flag on bd update reports success but doesn't persist the parent field.\n\n**Confirmed behavior:**\n```bash\nbd update gt-9kp3t --parent=gt-d0jqp --no-daemon -v\n# Output: ✓ Updated issue: gt-9kp3t\n\nbd show gt-9kp3t --json | jq '.[0].parent'\n# Returns: null\n\ngrep gt-9kp3t .beads/issues.jsonl | head -1 | jq '.parent'\n# Returns: null (field not present)\n```\n\n**Root cause hypothesis:**\nThe update handler processes the --parent flag but either:\n1. Doesn't write it to the Issue struct\n2. Doesn't include it in the JSONL export\n3. The field name doesn't match what export expects\n\n**Files to check:**\n- cmd/bd/show.go:638-640 (flag handling)\n- cmd/bd/show.go:810-814 (reparenting logic)\n- internal/rpc/server_issues_epics.go (RPC handler)\n- internal/rpc/protocol.go (UpdateArgs.Parent field)\n\nRelated: bd-cj2e (the original feature implementation)","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-27T22:40:33.744301-08:00","created_by":"mayor","updated_at":"2025-12-27T23:32:31.903138-08:00","closed_at":"2025-12-27T23:32:31.903138-08:00","close_reason":"Not a bug - parent stored in dependencies[] per Decision 004. bd show display could add computed .parent field for convenience."}
{"id":"gt-7asd","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:35:39.123943-08:00","updated_at":"2025-12-27T21:26:04.650909-08:00","deleted_at":"2025-12-27T21:26:04.650909-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-7aw1m","title":"Instrument gt commands to appear in activity feed","description":"gt commands should be visible in the activity feed, showing what agents and\nhumans are doing in the system.\n\nExamples:\n [10:30:15] 🔧 gt sling gt-xyz gastown/Toast · @mayor\n [10:30:20] 📬 gt mail send · gastown/witness → gastown/refinery\n [10:30:25] 🔄 gt crew cycle joe · @human\n\nImplementation options:\n1. gt commands write to a separate activity log that bd activity reads\n2. gt commands create ephemeral \"activity\" entries in beads\n3. Shared activity journal file that both gt and bd contribute to\n\nPart of epic gt-u7dxq","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T11:02:16.207055-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T11:02:16.207055-08:00"}
{"id":"gt-7aw1m","title":"Instrument gt commands to appear in activity feed","description":"## Architecture: Two-tier event system\n\n```\n┌─────────────┐ ┌─────────────┐ ┌─────────────┐\n│ gt commands │ │ bd mutations│ │ agent output│\n└──────┬──────┘ └──────┬──────┘ └──────┬──────┘\n └────────────────┼────────────────┘\n ▼\n ~/gt/.events.jsonl (raw, audit)\n │\n ┌─────────────────┐\n │ Feed daemon │ ← goroutine in gt daemon\n │ - filters │\n │ - aggregates │\n │ - AI curates │\n └────────┬────────┘\n ▼\n ~/gt/.feed.jsonl (curated, user-facing)\n```\n\n## Event format\n\n```json\n{\n \"ts\": \"2025-12-28T10:30:15Z\",\n \"source\": \"gt\",\n \"type\": \"sling\",\n \"actor\": \"mayor\",\n \"payload\": {\"bead\": \"gt-xyz\", \"target\": \"gastown/Toast\"},\n \"visibility\": \"feed\"\n}\n```\n\nVisibility: `audit` | `feed` | `both`\n\n## Implementation phases\n\n1. **Event logging** - gt commands write to ~/gt/.events.jsonl\n2. **Feed daemon** - goroutine in gt daemon tails events, writes curated feed\n3. **Feed readers** - gt feed, gt dashboard read from .feed.jsonl\n4. **AI curation** - future: haiku summarization for complex activity\n\nPart of epic gt-u7dxq","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T11:02:16.207055-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T12:46:20.256083-08:00"}
{"id":"gt-7bty9","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All clear - inbox empty, agents healthy, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T15:31:29.106816-08:00","updated_at":"2025-12-27T21:26:03.12439-08:00","deleted_at":"2025-12-27T21:26:03.12439-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-7einb","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:58:57.715007-08:00","updated_at":"2025-12-25T15:58:57.715007-08:00","closed_at":"2025-12-25T15:58:57.714972-08:00"}
{"id":"gt-7emkr","title":"Digest: mol-deacon-patrol","description":"P14: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:13:35.668266-08:00","updated_at":"2025-12-25T20:13:35.668266-08:00","closed_at":"2025-12-25T20:13:35.668211-08:00"}
@@ -434,7 +437,6 @@
{"id":"gt-7gno","title":"Digest: mol-deacon-patrol","description":"Patrol #18: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:35:15.310522-08:00","updated_at":"2025-12-27T21:26:04.252071-08:00","deleted_at":"2025-12-27T21:26:04.252071-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-7grh6","title":"Tmux session scanner for running agents","description":"Scan tmux for running Gas Town agent sessions.\n\n## Deliverables\n\n1. Function: ScanRunningSessions() -\u003e []AgentAddr\n - Parse tmux list-sessions\n - Filter for Gas Town session naming pattern\n - Return addresses of running agents\n\n2. Function: ScanRigSessions(rig) -\u003e []AgentAddr\n - Filter running sessions by rig prefix\n\n3. Alias resolution:\n - #rig/gastown → running sessions in gastown\n - #town → all running Gas Town sessions\n - #witnesses → running witness sessions\n\n## Location\ninternal/discovery/tmux.go\n\n## Acceptance\n- Scanner finds running sessions\n- Correctly parses session names to addresses\n- Handles no-sessions case gracefully","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-26T14:52:32.408394-08:00","updated_at":"2025-12-26T14:52:32.408394-08:00"}
{"id":"gt-7hor","title":"Document the Propulsion Principle","description":"Write canonical documentation for the Universal Gas Town Propulsion Principle.\n\nLocation: gastown/mayor/rig/docs/propulsion-principle.md\n\nContent:\n- The One Rule (hook has work → work happens)\n- Why it works (stateless agents, molecule-driven)\n- The sling lifecycle diagram\n- Agent startup protocol\n- Examples and anti-patterns\n\nThis is foundational theory-of-operation documentation.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T03:17:47.790012-08:00","updated_at":"2025-12-27T21:29:56.362057-08:00","deleted_at":"2025-12-27T21:29:56.362057-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-7huqu","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T14:13:59.546891-08:00","updated_at":"2025-12-25T14:13:59.546891-08:00","closed_at":"2025-12-25T14:13:59.54686-08:00"}
{"id":"gt-7hz3","title":"Merge: gt-92l","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-92l\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T16:31:37.716367-08:00","updated_at":"2025-12-27T21:27:22.938439-08:00","deleted_at":"2025-12-27T21:27:22.938439-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
{"id":"gt-7i6i6","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:31:52.727074-08:00","updated_at":"2025-12-27T21:26:02.577294-08:00","deleted_at":"2025-12-27T21:26:02.577294-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-7iek","title":"context-check","description":"Assess own context usage. If high, prepare for handoff.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T17:51:45.43771-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","dependencies":[{"issue_id":"gt-7iek","depends_on_id":"gt-hbnz","type":"parent-child","created_at":"2025-12-21T17:51:45.442974-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
@@ -454,7 +456,6 @@
{"id":"gt-7sqi","title":"Refactor: Extract common manager creation boilerplate","description":"Five nearly identical functions exist for creating managers:\n- getPolecatManager (polecat.go:241)\n- getSessionManager (session.go:183)\n- getCrewManager (crew_helpers.go:44)\n- getRefineryManager (refinery.go:116)\n- getWitnessManager (witness.go:102)\n\nAll follow the same pattern: find workspace, load config, get rig, create manager. Should extract to a common helper that takes a factory function.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:34:30.495275-08:00","updated_at":"2025-12-27T21:29:56.487369-08:00","deleted_at":"2025-12-27T21:29:56.487369-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-7tmh","title":"mol-deacon-patrol","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nDeacon patrol molecule template. Label: template","status":"tombstone","priority":4,"issue_type":"epic","created_at":"2025-12-23T13:03:21.516072-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"}
{"id":"gt-7tt8","title":"Default crew name should be something better than 'main'","description":"When creating a new rig, the default crew worker name is 'main'. This is confusing since:\n\n1. 'main' is also the git branch name\n2. It doesn't convey that this is the user's personal workspace\n3. Crew names should feel more personal/distinct\n\nConsider alternatives like:\n- 'home' - the user's home base\n- 'desk' - their personal desk\n- 'joe/max/etc' - actual name-based defaults\n- Let user pick during rig init","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-21T16:46:51.049367-08:00","updated_at":"2025-12-21T16:46:59.133599-08:00"}
{"id":"gt-7ucrr","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:58:58.140323-08:00","updated_at":"2025-12-26T13:58:58.140323-08:00","closed_at":"2025-12-26T13:58:58.140272-08:00"}
{"id":"gt-7uhts","title":"Day 3.4: Refinery processes MERGE_READY mail","description":"Refinery patrol handles merge requests:\n1. Check inbox for MERGE_READY messages\n2. For each, verify branch exists\n3. Run merge checks (tests, lint)\n4. If passing, merge to main\n5. Send MERGED signal back\n\nParent: gt-hwka3","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:05.510472-08:00","created_by":"mayor","updated_at":"2025-12-28T09:56:42.672932-08:00","closed_at":"2025-12-28T09:56:42.672932-08:00","close_reason":"Refinery patrol formula updated to process MERGE_READY and send MERGED","dependencies":[{"issue_id":"gt-7uhts","depends_on_id":"gt-hwka3","type":"parent-child","created_at":"2025-12-27T20:58:48.873689-08:00","created_by":"daemon"},{"issue_id":"gt-7uhts","depends_on_id":"gt-u6siy","type":"blocks","created_at":"2025-12-27T20:59:00.772533-08:00","created_by":"daemon"},{"issue_id":"gt-7uhts","depends_on_id":"gt-6qyt1","type":"relates-to","created_at":"2025-12-27T20:59:09.685061-08:00","created_by":"daemon"},{"issue_id":"gt-7uhts","depends_on_id":"gt-k294l","type":"blocks","created_at":"2025-12-27T23:17:28.282401-08:00","created_by":"daemon"}]}
{"id":"gt-7uo17","title":"Digest: mol-deacon-patrol","description":"Patrol complete: no callbacks, all agents healthy, no orphans, doctor 24/28","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T06:06:07.673288-08:00","updated_at":"2025-12-28T06:06:07.673288-08:00","closed_at":"2025-12-28T06:06:07.673251-08:00","close_reason":"Squashed from 9 wisps"}
{"id":"gt-7wcf","title":"README: Update Install section for homebrew/npm","description":"README currently shows:\n go install github.com/steveyegge/gastown/cmd/gt@latest\n\nBut users will install via homebrew or npm. Update to show:\n brew install gastown\n # or\n npm install -g @anthropic/gastown\n\nAlso add prerequisites section (tmux, Claude Code CLI).","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-24T13:04:51.751097-08:00","updated_at":"2025-12-27T21:29:52.630314-08:00","dependencies":[{"issue_id":"gt-7wcf","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T13:05:00.100253-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.630314-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -616,7 +617,6 @@
{"id":"gt-9o9s","title":"gt mail inbox shows wrong identity when run from deacon directory","description":"When running 'gt mail inbox' from ~/gt/deacon/, it shows 'Inbox: mayor/' instead of 'Inbox: deacon/'. The role detection works (deacon checks in correctly), but mail identity detection is broken.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-23T13:29:11.801311-08:00","updated_at":"2025-12-23T13:29:11.801311-08:00"}
{"id":"gt-9ojgy","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:48:38.058041-08:00","updated_at":"2025-12-27T21:26:04.185508-08:00","deleted_at":"2025-12-27T21:26:04.185508-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-9pyg","title":"Deacon tmux status bar: heartbeat timing and patrol state","description":"## Problem\n\nThe deacon shows patrol output but lacks real-time observability:\n- No indication of when last heartbeat occurred\n- No indication of when next heartbeat is scheduled\n- No visibility into current patrol step\n\n## Desired Behavior\n\nThe tmux status bar for gt-deacon should show:\n\n```\n⛪ Deacon | ❤️ 2m ago | ⏰ 3m | 📍 health-scan (3/7)\n```\n\nComponents:\n- **Role icon**: ⛪ (deacon identity)\n- **Last heartbeat**: ❤️ 2m ago (time since last heartbeat file update)\n- **Next heartbeat**: ⏰ 3m (time until daemon would poke)\n- **Current step**: 📍 health-scan (3/7) (current patrol atom, step N of M)\n\n## Implementation\n\n1. **Read heartbeat.json** for last update time\n2. **Calculate next poke** based on daemon interval (default 5m)\n3. **Read current wisp** from .beads-wisp/ to get patrol progress\n4. **Update tmux status** periodically or on state change\n\nOptions:\n- tmux status-right with shell script\n- gt deacon status --tmux for formatted output\n- Hook into patrol step completion\n\n## Related\n\n- gt-id36: Deacon Kernel epic\n- gt-3x0z: Wisp Molecule Integration","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-22T03:03:38.693983-08:00","updated_at":"2025-12-27T21:29:56.387158-08:00","deleted_at":"2025-12-27T21:29:56.387158-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-9qhc4","title":"Digest: mol-deacon-patrol","description":"Patrol 11","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:51:46.955388-08:00","updated_at":"2025-12-25T20:51:46.955388-08:00","closed_at":"2025-12-25T20:51:46.95534-08:00"}
{"id":"gt-9r4sk","title":"Digest: mol-deacon-patrol","description":"Patrol 20: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:06:05.822838-08:00","updated_at":"2025-12-27T21:26:03.339464-08:00","deleted_at":"2025-12-27T21:26:03.339464-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-9rmm","title":"Merge: gt-a95","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-a95\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:53.973816-08:00","updated_at":"2025-12-19T19:13:27.736445-08:00","closed_at":"2025-12-19T17:48:09.608699-08:00"}
{"id":"gt-9s6rh","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:00:05.490551-08:00","updated_at":"2025-12-27T21:26:01.76229-08:00","deleted_at":"2025-12-27T21:26:01.76229-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -636,6 +636,7 @@
{"id":"gt-a3hxa","title":"Digest: mol-deacon-patrol","description":"Patrol 14: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:34:31.219589-08:00","updated_at":"2025-12-28T01:34:31.219589-08:00","closed_at":"2025-12-28T01:34:31.219538-08:00","close_reason":"Squashed from 9 wisps"}
{"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","close_reason":"Squashed from 9 wisps"}
{"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","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-a4la6","depends_on_id":"gt-eph-5mc","type":"parent-child","created_at":"2025-12-28T11:16:17.349315-08:00","created_by":"deacon"}]}
{"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"}
{"id":"gt-a6dy","title":"Merge: gt-0ei3","description":"branch: polecat/capable\ntarget: main\nsource_issue: gt-0ei3\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T09:28:33.182299-08:00","updated_at":"2025-12-27T21:27:22.66747-08:00","deleted_at":"2025-12-27T21:27:22.66747-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
{"id":"gt-a7o93","title":"Digest: mol-deacon-patrol","description":"Patrol 10: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:06.986877-08:00","updated_at":"2025-12-27T21:26:03.413316-08:00","deleted_at":"2025-12-27T21:26:03.413316-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -720,6 +721,7 @@
{"id":"gt-bj5hl","title":"Digest: mol-deacon-patrol","description":"Patrol 8: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T08:16:08.324143-08:00","updated_at":"2025-12-28T08:16:08.324143-08:00","closed_at":"2025-12-28T08:16:08.324106-08:00","close_reason":"Squashed from 9 wisps"}
{"id":"gt-bj6f","title":"gt prime: Refinery context detection and output","description":"Update gt prime to detect Refinery role:\n- Detect from directory: refinery/rig/ = Refinery\n- Show handoff bead reference\n- Show merge queue status\n- Show polecat branches with unmerged commits\n- Show last actions summary","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-19T18:09:09.31791-08:00","updated_at":"2025-12-27T21:29:53.907293-08:00","dependencies":[{"issue_id":"gt-bj6f","depends_on_id":"gt-ktal","type":"blocks","created_at":"2025-12-19T18:09:39.462238-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.907293-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-bjft","title":"gt spawn should auto-start refinery/witness if not running","description":"When spawning a polecat, the infrastructure (refinery, witness) should already be running.\n\n## Current Behavior\nspawn.go only:1. Assigns issue to polecat2. Sends work mail3. Starts polecat session\n\nThe refinery and witness must be started separately.\n\n## Expected Behavior (per user feedback)\nWhen spawning a polecat, if the rig's refinery or witness is not running, auto-start them.\n\n## Options\n\n### Option A: spawn auto-starts infrastructure\nCheck if refinery/witness running before spawn, start if not.\n\n### Option B: gt swarm start \u003crig\u003e command\nExplicit command that:\n1. Starts refinery\n2. Starts witness\n3. Optionally spawns polecats on bd ready issues\n\n### Option C: gt rig start \u003crig\u003e\nSimilar to Option B but as rig lifecycle command.\n\n## Related\n- gt-n7z7: refinery --foreground race condition bug\n- gt-u1j.18: witness CLI commands","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-20T00:58:10.146332-08:00","updated_at":"2025-12-27T21:29:56.864406-08:00","deleted_at":"2025-12-27T21:29:56.864406-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-bmcxx","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 2: All healthy. No callbacks, orphans, or gates.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:18:38.161883-08:00","updated_at":"2025-12-28T11:18:38.161883-08:00","closed_at":"2025-12-28T11:18:38.161848-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-bmcxx","depends_on_id":"gt-eph-e9r","type":"parent-child","created_at":"2025-12-28T11:18:38.162709-08:00","created_by":"deacon"}]}
{"id":"gt-bmjw","title":"gt polecat add: should handle existing branch gracefully","description":"## Problem\n\n`gt polecat add gastown Nux` fails if the branch `polecat/Nux` already exists.\n\n## Current Behavior\n\n```\nfatal: a branch named 'polecat/Nux' already exists\n```\n\n## Expected Behavior\n\nShould either:\n1. Reuse the existing branch\n2. Or prompt to delete/recreate\n3. Or auto-suffix: polecat/Nux-2\n\n## Context\n\nBranch may exist from previous polecat that was removed but branch wasn't cleaned up.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-18T21:52:09.361672-08:00","updated_at":"2025-12-27T21:29:57.068569-08:00","deleted_at":"2025-12-27T21:29:57.068569-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"}
{"id":"gt-bnch","title":"Human escalation: notify overseer when self-heal fails","description":"Lightweight escalation extracted from Deacon epic (gt-5af).\n\n**Implementation**: Config in town.json or similar:\n```yaml\nescalation:\n contact: steve@example.com # or slack webhook\n triggers:\n - daemon_cant_restart\n - session_missing_5min\n```\n\n**Trigger points**:\n- Go daemon can't restart a session after N attempts\n- Agent detects it's stuck and can't recover\n- Witness can't reach polecat\n\n**Mechanism**: \n- Simple: `gt mail send --human` already exists\n- Enhanced: email/slack via external script\n\n**Weight**: Small config + one code path in daemon\n**Value**: High for unattended operation - human gets notified instead of silent failure","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-20T20:40:46.661514-08:00","updated_at":"2025-12-20T20:40:46.661514-08:00"}
{"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"}
@@ -793,6 +795,7 @@
{"id":"gt-cik.8","title":"Crew worker CLAUDE.md prompting","description":"Create CLAUDE.md template for crew workers:\n- Explain crew worker role (overseer's personal workspace)\n- Include mail-to-self handoff instructions\n- Document gt crew refresh for context cycling\n- Explain no witness monitoring (user-managed)\n- Include beads usage if BEADS_DIR configured","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T16:48:12.108074-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-cik.8","depends_on_id":"gt-cik","type":"parent-child","created_at":"2025-12-16T16:48:12.109654-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-cik.9","title":"Complete gt crew commands (list, attach, remove, refresh, status)","description":"Add remaining crew subcommands to internal/cmd/crew.go:\n\n1. gt crew list - List crew workspaces with status\n2. gt crew at/attach - Start tmux session in crew workspace \n3. gt crew remove - Remove crew workspace (with safety checks)\n4. gt crew refresh - Context cycling with mail-to-self handoff\n5. gt crew status - Show detailed workspace status\n\nBuild on existing crew add implementation in internal/cmd/crew.go.\nReference closed issues gt-cik.3-7 for original requirements.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T20:53:25.564877-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-cik.9","depends_on_id":"gt-cik","type":"parent-child","created_at":"2025-12-16T20:53:25.566962-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-cjb","title":"Witness updates: Remove issue filing proxy","description":"Update Witness prompting to remove issue filing proxy, since polecats now have direct beads access.\n\n## Remove from Witness Prompting\n\nThe following is NO LONGER Witness responsibility:\n- Processing polecat 'file issue' mail requests\n- Creating issues on behalf of polecats\n- Forwarding issue creation requests\n\n## Add: Legacy Request Handling\n\nIf Witness receives an old-style 'please file issue' request:\n\n1. Respond with update:\n town inject \u003cpolecat\u003e \"UPDATE: You have direct beads access now. Use bd create to file issues yourself.\"\n\n2. Do not file the issue - let the polecat learn the new workflow.\n\n## Keep in Witness Prompting\n\n- Monitoring polecat progress\n- Nudge protocol\n- Pre-kill verification\n- Session lifecycle management","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-15T19:47:19.921561-08:00","updated_at":"2025-12-27T21:29:54.607008-08:00","dependencies":[{"issue_id":"gt-cjb","depends_on_id":"gt-l3c","type":"blocks","created_at":"2025-12-15T19:47:35.896691-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.607008-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-clbz6","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 14: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:36.51872-08:00","updated_at":"2025-12-28T11:22:36.51872-08:00","closed_at":"2025-12-28T11:22:36.518686-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-clbz6","depends_on_id":"gt-eph-ckj","type":"parent-child","created_at":"2025-12-28T11:22:36.519576-08:00","created_by":"deacon"}]}
{"id":"gt-cnt","title":"Swarm cleanup: delete merged polecat branches and reset state","description":"After a swarm completes and branches are merged, leftover state remains:\n\n## Current Problem\n\n1. **Remote branches not deleted** - polecat/* branches stay on origin after merge\n2. **Polecat clones not reset** - still on old branch with completed work\n3. **No cleanup command** - manual cleanup required\n\n## Observed After Swarm\n\nRemote branches still present:\n- origin/polecat/Morsov\n- origin/polecat/Nux \n- origin/polecat/Rictus\n- origin/polecat/Slit\n- origin/polecat/Toast\n\n## Proposed Solution\n\nAdd cleanup commands:\n\n1. gt swarm cleanup \u003cswarm-id\u003e - Clean up after swarm completion\n - Delete remote polecat branches that were merged\n - Reset polecat clones to main\n - Clear issue assignments\n \n2. gt polecat reset \u003crig\u003e/\u003cpolecat\u003e - Reset single polecat\n - git checkout main \u0026\u0026 git pull\n - Delete local polecat branch\n - Clear current issue assignment\n\n3. Auto-cleanup option on gt session stop --cleanup\n\n## Manual Cleanup For Now\n\ngit push origin --delete polecat/Nux polecat/Toast ...\ncd polecats/Nux \u0026\u0026 git checkout main \u0026\u0026 git pull","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T15:09:08.739193-08:00","updated_at":"2025-12-27T21:29:54.287498-08:00","deleted_at":"2025-12-27T21:29:54.287498-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-cp2s","title":"mol-polecat-lease: Semaphore proto for tracking polecat lifecycle","description":"Define a small proto for tracking a single polecat in the Witness patrol wisp:\n\n```markdown\n## Molecule: polecat-lease\nSemaphore tracking a single polecat's lifecycle.\nVars: {{polecat}}, {{issue}}\n\n## Step: boot\nSpawned. Verify it starts working.\ngt peek {{polecat}} - if idle, gt nudge.\nTimeout: 60s before escalation.\n\n## Step: working\nActively working. Monitor for stuck.\nWait for SHUTDOWN mail.\nNeeds: boot\n\n## Step: done\nExit received. Ready for cleanup.\nKill session, prune worktree.\nNeeds: working\n```\n\nUsed by Witness: bd mol bond mol-polecat-lease wisp-patrol --var polecat=X","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T22:01:18.257848-08:00","updated_at":"2025-12-27T21:29:53.091372-08:00","deleted_at":"2025-12-27T21:29:53.091372-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-cpm2","title":"Automatic spawn for ready work","description":"Auto-spawn polecats for ready work:\n\nWhen Witness has capacity (active_workers \u003c max_workers):\n1. Query bd ready for unblocked issues\n2. Filter to rig-appropriate work (by prefix or epic)\n3. For each ready issue up to capacity:\n - gt spawn --issue \u003cid\u003e\n - Track that we spawned for this issue\n\nConfiguration (in rig config.json):\n- max_workers: 4 (default)\n- spawn_delay: 5s between spawns\n- auto_spawn: true/false\n\nThis enables 'fire and forget' swarming:\n- Mayor creates epic with children\n- Mayor tells Witness to work epic\n- Witness spawns polecats automatically\n- Witness cleans up as they complete","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-20T03:14:24.724136-08:00","updated_at":"2025-12-27T21:29:53.798185-08:00","dependencies":[{"issue_id":"gt-cpm2","depends_on_id":"gt-53w6","type":"parent-child","created_at":"2025-12-20T03:14:37.365334-08:00","created_by":"daemon"},{"issue_id":"gt-cpm2","depends_on_id":"gt-mxyj","type":"blocks","created_at":"2025-12-20T03:14:38.957826-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.798185-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -801,7 +804,7 @@
{"id":"gt-cr9","title":"Harness Design \u0026 Documentation","description":"The harness (Gas Town installation directory) needs design cleanup, documentation, and tooling.\n\n## Current Problems\n\n1. **Shared harness confusion**: ~/ai is shared by PGT and GGT with overlapping structures\n - PGT uses ~/ai/mayor/ as town-level Mayor home\n - GGT Mayor works in ~/ai/mayor/rigs/gastown/\n - ~/ai/gastown/ has both .gastown/ (PGT) and mayor/ (git clone)\n\n2. **Beads redirect**: ~/ai/.beads/redirect → mayor/rigs/gastown/.beads\n - This is specific to GGT's decentralized structure\n - Should be documented as an example\n\n3. **architecture.md**: Verify rig-level mayor/rig/ is shown correctly\n\n4. **No harness creation tooling**: Users must manually set up\n\n## Proposed Work\n\n- Document what a harness IS (installation directory)\n- Create harness creation command or template repo\n- Update architecture.md if needed \n- Create example harness configuration for docs\n- Resolve PGT/GGT sharing issue","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-17T17:15:08.769961-08:00","updated_at":"2025-12-27T21:29:54.253374-08:00","deleted_at":"2025-12-27T21:29:54.253374-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
{"id":"gt-crew-gastown-jack","title":"Crew worker jack in gastown - human-managed persistent workspace.","description":"Crew worker jack in gastown - human-managed persistent workspace.\n\nrole_type: crew\nrig: gastown\nagent_state: idle\nhook_bead: null\nrole_bead: gt-crew-gastown-jack-role","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-28T10:06:26.487688-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T10:06:26.487688-08:00"}
{"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","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-28T10:04:05.03443-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T10:39:07.285566-08:00"}
{"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","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-28T09:51:58.720059-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T10:18:35.223343-08:00"}
{"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","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-28T09:51:58.720059-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T11:03:54.19596-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","close_reason":"Squashed from 9 wisps"}
{"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-csmlp","title":"Digest: mol-deacon-patrol","description":"Patrol 6: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:40:07.959422-08:00","updated_at":"2025-12-26T18:40:07.959422-08:00","closed_at":"2025-12-26T18:40:07.959369-08:00"}
@@ -903,6 +906,7 @@
{"id":"gt-et72q","title":"Witness template uses non-existent --assignee flag on bd mol wisp","description":"## Bug\n\nThe witness.md.tmpl template uses an invalid flag:\n\n```\nbd mol wisp mol-witness-patrol --assignee={{ .RigName }}/witness\n```\n\nBut `bd mol wisp` does NOT support the `--assignee` flag (only `--dry-run`, `--var`, and global flags).\n\n## Location\n\n`internal/templates/roles/witness.md.tmpl:142`\n\n## Fix\n\nUse the two-step pattern like the deacon template does:\n\n```bash\nbd mol wisp create mol-witness-patrol\nbd update \u003cwisp-id\u003e --status=pinned --assignee={{ .RigName }}/witness\n```\n\n## Impact\n\nWitness agents following the template will get a CLI error when trying to create patrol wisps.","status":"tombstone","priority":0,"issue_type":"bug","assignee":"mayor","created_at":"2025-12-27T17:12:33.852118-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-27T21:29:45.166788-08:00","close_reason":"Already fixed - template now uses correct two-step pattern","deleted_at":"2025-12-27T21:29:45.166788-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"}
{"id":"gt-eu9","title":"Witness session cycling and handoff","description":"Add session cycling and handoff protocol to Witness CLAUDE.md template.\n\n## Session Cycling Protocol\n\n```markdown\n## Session Cycling\n\nYour context will fill over long swarms. Proactively cycle when:\n- Running for many hours\n- Losing track of which workers you've checked\n- Responses getting slower\n- About to start complex operation\n\n### Handoff Protocol\n\n1. **Capture current state**:\n```bash\ntown list . # Worker states\ntown all beads # Pending verifications \ntown inbox # Unprocessed messages\n```\n\n2. **Compose handoff note**:\n```\n[HANDOFF_TYPE]: witness_cycle\n[TIMESTAMP]: \u003cnow\u003e\n[RIG]: \u003crig\u003e\n\n## Active Workers\n\u003clist workers and status\u003e\n\n## Pending Verifications\n\u003cworkers signaled done but not verified\u003e\n\n## Recent Actions\n\u003clast 3-5 actions\u003e\n\n## Warnings/Notes\n\u003canything next session should know\u003e\n\n## Next Steps\n\u003cwhat should happen next\u003e\n```\n\n3. **Send handoff**:\n```bash\ntown mail send \u003crig\u003e/witness -s \"Session Handoff\" -m \"\u003cnote\u003e\"\n```\n\n4. **Exit cleanly**: End session, daemon spawns fresh one.\n\n### On Fresh Session Start\n\n1. Check for handoff: `town inbox | grep \"Session Handoff\"`\n2. If found, read it and resume from handoff state\n3. If not found, do full status check\n```\n\n## Implementation\n\nAdd to WITNESS_CLAUDE.md template.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-15T19:48:55.484911-08:00","updated_at":"2025-12-27T21:29:54.581131-08:00","dependencies":[{"issue_id":"gt-eu9","depends_on_id":"gt-82y","type":"blocks","created_at":"2025-12-15T19:49:05.846443-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.581131-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-euiap","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy (Mayor, 2 Witnesses, 2 Refineries), no callbacks, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:44:09.814515-08:00","updated_at":"2025-12-27T21:26:03.853852-08:00","deleted_at":"2025-12-27T21:26:03.853852-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-euqqj","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 7: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:21:49.632344-08:00","updated_at":"2025-12-28T11:21:49.632344-08:00","closed_at":"2025-12-28T11:21:49.632309-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-euqqj","depends_on_id":"gt-eph-91k","type":"parent-child","created_at":"2025-12-28T11:21:49.633179-08:00","created_by":"deacon"}]}
{"id":"gt-evtm5","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Quiet, all agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T07:25:05.193077-08:00","updated_at":"2025-12-27T21:26:03.668491-08:00","deleted_at":"2025-12-27T21:26:03.668491-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-ewzon","title":"Implement town activity logging","description":"Add centralized logging for Gas Town agent lifecycle events.\n\n## Events to Log\n- spawn: new agent created\n- wake: agent resumed \n- nudge: message injected\n- handoff: agent handed off (intentional restart)\n- done: agent finished work\n- crash: agent exited unexpectedly\n- kill: agent killed intentionally\n\n## Implementation\n- Add internal/log/town.go with LogEvent() function\n- Log to ~/gt/logs/town.log or .beads/town.log\n- Add gt log command to view/tail/filter logs\n- Include timestamps, agent identity, context\n\n## Log Format\n```\n2025-12-26 15:30:45 [spawn] gastown/crew/max spawned for gt-xyz\n2025-12-26 15:31:02 [nudge] gastown/crew/max nudged with \"start work\"\n2025-12-26 15:45:33 [crash] gastown/crew/max exited unexpectedly (signal 9)\n```","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-26T15:29:40.075343-08:00","updated_at":"2025-12-27T21:29:45.891222-08:00","deleted_at":"2025-12-27T21:29:45.891222-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-exoy0","title":"Digest: mol-deacon-patrol","description":"Patrol 9: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:14:48.35229-08:00","updated_at":"2025-12-27T21:26:01.031556-08:00","deleted_at":"2025-12-27T21:26:01.031556-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -937,6 +941,7 @@
{"id":"gt-f9x.7","title":"Connection interface: Protocol for local/remote ops","description":"Abstract interface for local vs remote (SSH) operations.\n\n## Concept\n\nEnable Gas Town to manage rigs on remote machines via SSH. The Connection interface abstracts whether operations happen locally or remotely.\n\n## Interface\n\n```go\ntype Connection interface {\n // Identification\n Name() string\n IsLocal() bool\n\n // File operations\n ReadFile(path string) ([]byte, error)\n WriteFile(path string, data []byte, perm os.FileMode) error\n MkdirAll(path string, perm os.FileMode) error\n Remove(path string) error\n Stat(path string) (os.FileInfo, error)\n Glob(pattern string) ([]string, error)\n\n // Command execution\n Exec(cmd string, args ...string) ([]byte, error)\n ExecDir(dir, cmd string, args ...string) ([]byte, error)\n\n // Tmux (for session management)\n TmuxNewSession(name, dir string) error\n TmuxKillSession(name string) error\n TmuxSendKeys(session, keys string) error\n TmuxCapturePane(session string, lines int) (string, error)\n}\n```\n\n## Implementations\n\n- LocalConnection (gt-f9x.8): Direct file/exec operations\n- SSHConnection (future): Operations via SSH\n\n## Usage\n\n```go\nfunc NewRigManager(conn Connection, ...) *RigManager\n\n// Operations work the same regardless of connection type\nrm.DiscoverRigs() // uses conn.Glob, conn.ReadFile\n```\n\n## Design Notes\n\n- Connection obtained from MachineRegistry (gt-f9x.9)\n- Default is always local\n- SSH connection requires machine config (host, key, user)","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-15T16:37:07.764838-08:00","updated_at":"2025-12-15T23:17:18.465919-08:00","dependencies":[{"issue_id":"gt-f9x.7","depends_on_id":"gt-f9x","type":"parent-child","created_at":"2025-12-15T16:37:07.765169-08:00","created_by":"daemon"}]}
{"id":"gt-f9x.8","title":"LocalConnection: Local file/exec/tmux operations","description":"LocalConnection implementation for local machine operations.\n\n## Implementation\n\n```go\ntype LocalConnection struct {\n tmux *Tmux\n}\n\nfunc NewLocalConnection() *LocalConnection\n\nfunc (c *LocalConnection) Name() string { return \"local\" }\nfunc (c *LocalConnection) IsLocal() bool { return true }\n```\n\n## File Operations\n\nDirect passthrough to os package:\n```go\nfunc (c *LocalConnection) ReadFile(path string) ([]byte, error) {\n return os.ReadFile(path)\n}\n// etc.\n```\n\n## Command Execution\n\nUses exec.Command:\n```go\nfunc (c *LocalConnection) Exec(cmd string, args ...string) ([]byte, error) {\n return exec.Command(cmd, args...).Output()\n}\n```\n\n## Tmux\n\nDelegates to Tmux wrapper:\n```go\nfunc (c *LocalConnection) TmuxNewSession(name, dir string) error {\n return c.tmux.NewSession(name, dir)\n}\n```\n\n## Notes\n\nStraightforward implementation - this is the \"baseline\" connection that SSHConnection will mirror remotely.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-15T16:37:19.879102-08:00","updated_at":"2025-12-15T23:17:18.556669-08:00","dependencies":[{"issue_id":"gt-f9x.8","depends_on_id":"gt-f9x","type":"parent-child","created_at":"2025-12-15T16:37:19.879451-08:00","created_by":"daemon"},{"issue_id":"gt-f9x.8","depends_on_id":"gt-f9x.7","type":"blocks","created_at":"2025-12-15T16:37:36.087392-08:00","created_by":"daemon"}]}
{"id":"gt-f9x.9","title":"Machine registry: Store and manage machine configs","description":"Registry for managing remote machines in federation.\n\n## Data Model\n\n```go\ntype Machine struct {\n Name string `json:\"name\"`\n Type string `json:\"type\"` // \"local\", \"ssh\", \"gcp\"\n Host string `json:\"host\"` // for ssh: user@host\n KeyPath string `json:\"key_path\"` // SSH key path\n TownPath string `json:\"town_path\"` // Path to town on remote\n}\n```\n\n## Interface\n\n```go\ntype MachineRegistry struct {\n path string // config/federation.json\n machines map[string]*Machine\n}\n\nfunc NewMachineRegistry(configPath string) *MachineRegistry\nfunc (r *MachineRegistry) Get(name string) (*Machine, error)\nfunc (r *MachineRegistry) Add(m *Machine) error\nfunc (r *MachineRegistry) Remove(name string) error\nfunc (r *MachineRegistry) List() []*Machine\nfunc (r *MachineRegistry) Connection(name string) (Connection, error)\n```\n\n## Storage\n\nfederation.json in config/:\n```json\n{\n \"version\": 1,\n \"machines\": {\n \"local\": {\"type\": \"local\"},\n \"gcp-vm-1\": {\n \"type\": \"ssh\",\n \"host\": \"user@10.0.0.1\",\n \"key_path\": \"~/.ssh/gcp_key\",\n \"town_path\": \"/home/user/ai\"\n }\n }\n}\n```\n\n## Connection Factory\n\n```go\nfunc (r *MachineRegistry) Connection(name string) (Connection, error) {\n m := r.machines[name]\n switch m.Type {\n case \"local\":\n return NewLocalConnection(), nil\n case \"ssh\":\n return NewSSHConnection(m.Host, m.KeyPath), nil\n }\n}\n```","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-15T16:37:21.968099-08:00","updated_at":"2025-12-15T23:17:18.644857-08:00","dependencies":[{"issue_id":"gt-f9x.9","depends_on_id":"gt-f9x","type":"parent-child","created_at":"2025-12-15T16:37:21.968442-08:00","created_by":"daemon"},{"issue_id":"gt-f9x.9","depends_on_id":"gt-f9x.7","type":"blocks","created_at":"2025-12-15T16:37:36.174052-08:00","created_by":"daemon"}]}
{"id":"gt-fadmu","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:29:39.973732-08:00","updated_at":"2025-12-25T13:29:39.973732-08:00","closed_at":"2025-12-25T13:29:39.9737-08:00"}
{"id":"gt-fakv9","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:02:21.444838-08:00","updated_at":"2025-12-27T21:26:00.457397-08:00","deleted_at":"2025-12-27T21:26:00.457397-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-fax0","title":"test pin fix 2","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T12:15:43.240045-08:00","updated_at":"2025-12-27T21:29:56.010469-08:00","deleted_at":"2025-12-27T21:29:56.010469-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-faxkr","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 8: thorough check, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:25:07.795073-08:00","updated_at":"2025-12-27T21:26:01.907031-08:00","deleted_at":"2025-12-27T21:26:01.907031-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1010,6 +1015,7 @@
{"id":"gt-glisw","title":"Ephemeral patrol molecules leaking into beads","description":"## Problem\n\nEphemeral patrol orchestration molecules (e.g., mol-deacon-patrol, wisp step issues) keep appearing in bd ready output in gastown beads.\n\nThese are ephemeral/wisp issues that should:\n1. Never be synced to the beads-sync branch\n2. Live only in .beads-wisp/ (ephemeral storage)\n3. Be squashed to digests, not persisted as regular beads\n\n## Examples found\n\n- gt-wisp-6ue: mol-deacon-patrol\n- gt-pacdm: mol-deacon-patrol \n- gt-wisp-mpm: Check own context limit\n- gt-wisp-lkc: Clean dead sessions\n\n## Investigation needed\n\n1. Where are these being created? (gt mol bond? manual bd create?)\n2. Why are they using the gt- prefix instead of staying ephemeral?\n3. Is the wisp storage (.beads-wisp/) being used correctly?\n4. Is bd sync accidentally picking up ephemeral issues?\n\n## Expected behavior\n\nPatrol molecules and their steps should be ephemeral and never appear in bd ready or bd list.\n\nMoved from bd-exy3.","status":"tombstone","priority":1,"issue_type":"bug","assignee":"gastown/crew/joe","created_at":"2025-12-27T19:18:04.448597-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-27T21:29:45.715281-08:00","close_reason":"Fixed: closed historical leaked patrol molecules (gt-k0poi, gt-wisp-oe4). Current wisp system is working correctly - new wisps use gt-eph-* prefix and ephemeral=true.","comments":[{"id":1,"issue_id":"gt-glisw","author":"gastown/crew/joe","text":"## Investigation Results\n\n### Root Cause\nHistorical patrol molecules were created BEFORE the ephemeral/wisp system was properly implemented. These old molecules:\n1. Had `ephemeral=0` (not marked as ephemeral)\n2. Used `gt-` prefix instead of `gt-eph-` prefix\n3. Were exported to JSONL and synced via git\n\n### Current State\nThe wisp system is NOW working correctly:\n- New wisps use `gt-eph-*` prefix\n- Have `ephemeral=1` set in database\n- Are excluded from JSONL export (sync_export.go lines 63-73)\n- Do not appear in `bd ready` or `bd list`\n\n### Actions Taken\n1. Closed leaked patrol molecules: `gt-k0poi`, `gt-wisp-oe4`\n2. Verified the current wisp system creates issues correctly with ephemeral=true\n3. Confirmed export filtering works (tested with `bd mol wisp mol-deacon-patrol`)\n\n### No Code Changes Needed\nThe system is working as designed. This was a historical data issue from before the ephemeral system was fully implemented.","created_at":"2025-12-28T03:27:22Z"}],"deleted_at":"2025-12-27T21:29:45.715281-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"}
{"id":"gt-glwd","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\n[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-24T21:50:24.723492-08:00","updated_at":"2025-12-27T21:29:57.800368-08:00","deleted_at":"2025-12-27T21:29:57.800368-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-glzm","title":"Digest: mol-deacon-patrol","description":"Patrol: 4 msgs (2 blocked on bd mol current, 2 handoffs). 11 polecats, 18 sessions. Swarm in progress.","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T00:23:09.331459-08:00","updated_at":"2025-12-27T21:26:05.424623-08:00","deleted_at":"2025-12-27T21:26:05.424623-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-gmcfm","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 18: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:49.827708-08:00","updated_at":"2025-12-28T11:22:49.827708-08:00","closed_at":"2025-12-28T11:22:49.827674-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-gmcfm","depends_on_id":"gt-eph-z5h","type":"parent-child","created_at":"2025-12-28T11:22:49.828535-08:00","created_by":"deacon"}]}
{"id":"gt-gmqe","title":"Refinery needs branch visibility: Convert to worktree or push branches","description":"The refinery cannot see polecat branches because it is a separate clone, not a worktree.\n\n## Problem\n- Polecats are worktrees of mayor/rig (correct, per gt-4u5z)\n- Refinery is still a separate clone at refinery/rig (not converted)\n- Polecat branches are local to mayor/rig, invisible to refinery\n\n## Decision (2025-12-25)\n**Use a shared bare repo as the single git source of truth.**\n\n```\ngastown/\n├── .repo.git/ ← Bare repo (no working tree, invisible base)\n├── mayor/rig/ ← Worktree (human workspace)\n├── polecats/\n│ └── Toast/ ← Worktree on polecat/Toast\n├── refinery/rig/ ← Worktree on main (can see all branches!)\n└── crew/max/ ← Worktree or separate clone (TBD)\n```\n\n**Why bare repo:**\n- No working directory to accidentally work in\n- Standard git pattern (how servers work)\n- All worktrees share branch visibility\n- Refinery on main can merge polecat branches directly\n\n## Implementation\n1. Create `.repo.git` as bare clone\n2. Convert refinery to worktree of .repo.git on main\n3. Convert polecats to worktrees of .repo.git\n4. Optionally convert mayor/rig (or keep as worktree)\n5. Update gt rig init for new rigs\n6. Write migration for existing rigs\n\n## Evidence\nTracer bullet 2025-12-23: Refinery could not see polecat/tracer until pushed to origin.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T21:58:27.414179-08:00","updated_at":"2025-12-27T21:29:52.812382-08:00","deleted_at":"2025-12-27T21:29:52.812382-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-godo","title":"Digest: mol-deacon-patrol","description":"Patrol 16: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:01:17.323252-08:00","updated_at":"2025-12-27T21:26:04.894446-08:00","deleted_at":"2025-12-27T21:26:04.894446-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-gox90","title":"Digest: mol-deacon-patrol","description":"Patrol 18: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:06:01.664845-08:00","updated_at":"2025-12-27T21:26:03.356041-08:00","deleted_at":"2025-12-27T21:26:03.356041-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1017,6 +1023,7 @@
{"id":"gt-gpgdv","title":"Optimize: Share stepMap across control flow operators","description":"In ApplyControlFlow, both ApplyBranches and ApplyGates call buildStepMap() separately:\n\n```go\nfunc ApplyBranches(steps []*Step, compose *ComposeRules) ([]*Step, error) {\n stepMap := buildStepMap(steps) // Called here\n ...\n}\n\nfunc ApplyGates(steps []*Step, compose *ComposeRules) ([]*Step, error) {\n stepMap := buildStepMap(steps) // Called again here\n ...\n}\n```\n\nThis is inefficient for large formulas. Options:\n\n1. Pass stepMap as a parameter to ApplyBranches/ApplyGates\n2. Create an internal version that accepts stepMap, keep public API unchanged\n3. Build once in ApplyControlFlow and pass down\n\nLow priority since formula sizes are typically small.","status":"open","priority":4,"issue_type":"chore","created_at":"2025-12-25T15:14:10.961538-08:00","updated_at":"2025-12-25T15:14:10.961538-08:00","dependencies":[{"issue_id":"gt-gpgdv","depends_on_id":"gt-8tmz.4","type":"blocks","created_at":"2025-12-25T15:14:19.033379-08:00","created_by":"daemon"}]}
{"id":"gt-gq3f","title":"Digest: mol-deacon-patrol","description":"Patrol #8","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:23:23.407978-08:00","updated_at":"2025-12-27T21:26:04.768154-08:00","deleted_at":"2025-12-27T21:26:04.768154-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-gs1ua","title":"Digest: mol-deacon-patrol","description":"Patrol 7: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:43:24.284618-08:00","updated_at":"2025-12-27T21:26:03.230655-08:00","deleted_at":"2025-12-27T21:26:03.230655-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-gsjfz","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 8: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:21:58.343607-08:00","updated_at":"2025-12-28T11:21:58.343607-08:00","closed_at":"2025-12-28T11:21:58.343574-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-gsjfz","depends_on_id":"gt-eph-9mt","type":"parent-child","created_at":"2025-12-28T11:21:58.344549-08:00","created_by":"deacon"}]}
{"id":"gt-gswn","title":"Integration test: agent waits for CI via gate","description":"End-to-end test of the gate workflow.\n\n## Test Scenario\n1. Agent creates gate: bd gate create --await gh:run:123 --timeout 5m --notify beads/dave\n2. Agent writes handoff and exits\n3. Deacon patrol checks gate condition\n4. (Mock) GitHub run completes\n5. Deacon notifies waiter and closes gate\n6. New agent session reads mail and resumes\n\n## Test Requirements\n- Mock GitHub API responses\n- Test timeout path\n- Test multiple waiters\n- Verify mail notifications sent\n\n## Moved from beads\nOriginally bd-rl5t. Tests Deacon patrol which is in gastown.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:23:56.582834-08:00","updated_at":"2025-12-23T12:23:56.582834-08:00","dependencies":[{"issue_id":"gt-gswn","depends_on_id":"gt-dh65","type":"blocks","created_at":"2025-12-23T12:24:01.787444-08:00","created_by":"stevey"}]}
{"id":"gt-gt2wl","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:04:46.889415-08:00","updated_at":"2025-12-25T00:04:46.889415-08:00","closed_at":"2025-12-25T00:04:46.88938-08:00"}
{"id":"gt-gtzlc","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 5 mayor msgs (informational), all agents healthy, triggered 3 polecats, closed 1 orphan (gt-mol-aux test artifact)","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:52:44.633416-08:00","updated_at":"2025-12-27T21:26:02.458373-08:00","deleted_at":"2025-12-27T21:26:02.458373-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1107,6 +1114,7 @@
{"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","close_reason":"Implemented: reportAgentState now creates agent beads on first prime for all roles including crew"}
{"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-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","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-i11mk","depends_on_id":"gt-eph-pm6","type":"parent-child","created_at":"2025-12-28T11:22:50.417643-08:00","created_by":"deacon"}]}
{"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"}
{"id":"gt-i4i2","title":"Update deacon.md.tmpl with correct molecule commands","description":"The deacon prompt references commands that don't exist:\n- gt mol bond → should be bd mol run or gt mol arm\n- gt mol status → needs gt mol command tree first\n\nUpdate after gt mol command tree is implemented.\n\nDepends on: gt mol command tree issue","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T13:12:26.401739-08:00","updated_at":"2025-12-27T21:29:53.209031-08:00","dependencies":[{"issue_id":"gt-i4i2","depends_on_id":"gt-x74c","type":"blocks","created_at":"2025-12-22T13:12:35.69774-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.209031-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-i4kq","title":"Update templates for Propulsion Principle","description":"Overhaul agent prompts to embody the Universal Gas Town Propulsion Principle:\n\n\u003e If you find something on your hook, YOU RUN IT.\n\nTemplates to update:\n- [ ] deacon.md.tmpl - Check hook first, no decision logic\n- [ ] polecat.md.tmpl - Propulsion startup, follow molecule\n- [ ] witness.md.tmpl - Sling wisps when spawning agents\n- [ ] refinery.md.tmpl - Accept slung epics\n\nKey changes:\n1. Remove 'should I run this?' decision points\n2. Add 'check your hook' as step 1 of startup\n3. Make molecule-following the default mode\n4. Simplify - agents don't think, they execute","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T03:17:46.464968-08:00","updated_at":"2025-12-27T21:29:53.251839-08:00","dependencies":[{"issue_id":"gt-i4kq","depends_on_id":"gt-4ev4","type":"blocks","created_at":"2025-12-22T12:10:42.245621-08:00","created_by":"daemon"},{"issue_id":"gt-i4kq","depends_on_id":"gt-uym5","type":"blocks","created_at":"2025-12-22T12:10:42.320803-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.251839-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1224,6 +1232,7 @@
{"id":"gt-ju1s7","title":"Digest: mol-deacon-patrol","description":"Patrol 11: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:36:50.154198-08:00","updated_at":"2025-12-27T21:26:00.35684-08:00","deleted_at":"2025-12-27T21:26:00.35684-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-jv8mb","title":"Digest: mol-deacon-patrol","description":"Patrol 14: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:16:28.809707-08:00","updated_at":"2025-12-27T21:26:00.988852-08:00","deleted_at":"2025-12-27T21:26:00.988852-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-jvr3","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-test - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-21T22:04:43.420231-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"}
{"id":"gt-jyzrs","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 12: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:35.34827-08:00","updated_at":"2025-12-28T11:22:35.34827-08:00","closed_at":"2025-12-28T11:22:35.348237-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-jyzrs","depends_on_id":"gt-eph-0no","type":"parent-child","created_at":"2025-12-28T11:22:35.34914-08:00","created_by":"deacon"}]}
{"id":"gt-jz82w","title":"Digest: mol-deacon-patrol","description":"Patrol 14: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:35:01.073875-08:00","updated_at":"2025-12-27T21:26:00.743535-08:00","deleted_at":"2025-12-27T21:26:00.743535-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-jzot","title":"gt done: Notify Witness with exit outcome","description":"When polecat runs gt done, it should send mail to Witness:\n\n```\ngt mail send \u003crig\u003e/witness -s 'POLECAT_DONE \u003cname\u003e' -m 'Exit: COMPLETED\nIssue: \u003cissue-id\u003e\nMR: \u003cmr-id\u003e\nBranch: \u003cbranch\u003e'\n```\n\nExit types:\n- COMPLETED: Work done, MR submitted\n- ESCALATED: Hit blocker, needs human\n- DEFERRED: Work paused, issue still open\n\nThis enables Witness patrol to:\n1. See completion in inbox-check step\n2. Verify git state is clean\n3. Kill session and prune worktree\n4. Close the polecat lease in its patrol wisp\n\nPaired with gt-r6td (spawn notification) - together they bracket polecat lifecycle.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T22:31:31.266716-08:00","updated_at":"2025-12-27T21:29:53.082733-08:00","deleted_at":"2025-12-27T21:29:53.082733-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-k08o","title":"test pin fix","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T12:14:47.293815-08:00","updated_at":"2025-12-27T21:29:56.018698-08:00","deleted_at":"2025-12-27T21:29:56.018698-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1285,6 +1294,7 @@
{"id":"gt-kmv99","title":"Digest: mol-deacon-patrol","description":"Patrol 16: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:32.607007-08:00","updated_at":"2025-12-27T21:26:02.081585-08:00","deleted_at":"2025-12-27T21:26:02.081585-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-kndf","title":"Digest: mol-deacon-patrol","description":"Patrol 19: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:02:19.530366-08:00","updated_at":"2025-12-27T21:26:04.869611-08:00","deleted_at":"2025-12-27T21:26:04.869611-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-ko73c","title":"Digest: mol-deacon-patrol","description":"P9","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:24:32.507404-08:00","updated_at":"2025-12-27T21:26:01.671325-08:00","deleted_at":"2025-12-27T21:26:01.671325-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-koja9","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 17: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:49.243562-08:00","updated_at":"2025-12-28T11:22:49.243562-08:00","closed_at":"2025-12-28T11:22:49.243529-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-koja9","depends_on_id":"gt-eph-ks4","type":"parent-child","created_at":"2025-12-28T11:22:49.244363-08:00","created_by":"deacon"}]}
{"id":"gt-kp2","title":"Add merge-request type to Beads schema","description":"Define the merge-request bead type with fields:\n- branch: source branch (e.g., polecat/Nux/gt-xxx)\n- target_branch: destination (main or integration/xxx)\n- source_issue: the work being merged (gt-xxx)\n- worker: who did the work\n- rig: which rig\n- merge_commit: (filled on close) SHA of merge commit\n- close_reason: (filled on close) success/failure details\n\nThis may require beads schema changes or just convention.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-16T23:02:14.471248-08:00","updated_at":"2025-12-27T21:29:45.673918-08:00","dependencies":[{"issue_id":"gt-kp2","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:55.338148-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.673918-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-kp3s3","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- gt-ds3h3 - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T01:59:05.781319-08:00","updated_at":"2025-12-27T21:29:55.325758-08:00","deleted_at":"2025-12-27T21:29:55.325758-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
{"id":"gt-kqwpb","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All healthy, no issues","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:53:25.592462-08:00","updated_at":"2025-12-27T21:26:01.778644-08:00","deleted_at":"2025-12-27T21:26:01.778644-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1300,7 +1310,6 @@
{"id":"gt-kxw7x","title":"Digest: mol-deacon-patrol","description":"Patrol 16: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:00:34.661476-08:00","updated_at":"2025-12-27T21:26:00.482697-08:00","deleted_at":"2025-12-27T21:26:00.482697-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-l0z34","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 9: routine, healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:25:37.061769-08:00","updated_at":"2025-12-27T21:26:01.898256-08:00","deleted_at":"2025-12-27T21:26:01.898256-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-l1o","title":"Harness \u0026 Priming: Document architecture and update all role contexts","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-17T16:42:29.314113-08:00","updated_at":"2025-12-27T21:29:54.270631-08:00","deleted_at":"2025-12-27T21:29:54.270631-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
{"id":"gt-l31lv","title":"Digest: mol-deacon-patrol","description":"Patrol 16","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T20:05:43.517199-08:00","updated_at":"2025-12-26T20:05:43.517199-08:00","closed_at":"2025-12-26T20:05:43.517142-08:00"}
{"id":"gt-l32kx","title":"implement","description":"Implement the solution for gt-u2vg. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:53:37.31087-08:00","updated_at":"2025-12-25T14:12:42.103957-08:00","dependencies":[{"issue_id":"gt-l32kx","depends_on_id":"gt-6n1cy","type":"parent-child","created_at":"2025-12-25T01:53:37.328352-08:00","created_by":"stevey"},{"issue_id":"gt-l32kx","depends_on_id":"gt-hkf8j","type":"blocks","created_at":"2025-12-25T01:53:37.344719-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.103957-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-l3c","title":"Design: Polecat Beads write access","description":"Design for granting polecats direct beads write access.\n\n## Background\n\nWith Beads v0.30.0 tombstone-based rearchitecture, we have solid multi-agent support. Reversing the original read-only decision.\n\n## Benefits\n\n- Simplifies architecture (no mail-based issue filing proxy)\n- Empowers polecats to file discovered work\n- Beads handles work-disavowal\n\n## Complications\n\nFor OSS projects where you cannot commit to project .beads/, need per-rig beads repo configuration.\n\n## Subtasks (implementation)\n\n- gt-zx3: Per-rig beads configuration schema\n- gt-e1y: Worker prompting updates for beads access\n- gt-cjb: Witness proxy removal\n- gt-082: Beads sync in decommission checklist\n\n**Design complete.** Each subtask has full specification in its description.","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-15T19:37:42.191734-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"}
{"id":"gt-l3gfn","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:29:32.029593-08:00","updated_at":"2025-12-25T07:29:32.029593-08:00","closed_at":"2025-12-25T07:29:32.029556-08:00"}
@@ -1365,7 +1374,6 @@
{"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"}
@@ -1418,6 +1426,7 @@
{"id":"gt-mr432","title":"Digest: mol-deacon-patrol","description":"Patrol 10: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:42:19.234818-08:00","updated_at":"2025-12-27T21:26:00.887861-08:00","deleted_at":"2025-12-27T21:26:00.887861-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-mtj4","title":"Digest: mol-deacon-patrol","description":"Patrol 11: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:59:34.040451-08:00","updated_at":"2025-12-27T21:26:04.935865-08:00","deleted_at":"2025-12-27T21:26:04.935865-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-mwiuk","title":"gt nudge doesn't work with crew addresses","description":"## Bug\n\n`gt nudge beads/crew/dave \"message\"` fails because it uses the polecat session manager which produces wrong session names.\n\n## Expected\nSession name: `gt-beads-crew-dave` (hyphen)\n\n## Actual \nSession name: `gt-beads-crew/dave` (slash, from polecat manager)\n\n## Root Cause\n\nIn nudge.go line 46-57, parseAddress returns polecatName=`crew/dave`, then SessionName keeps the slash.\n\n## Fix\n\nDetect `crew/` prefix and use crewSessionName() instead.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-26T15:43:41.099431-08:00","updated_at":"2025-12-27T21:29:45.856721-08:00","deleted_at":"2025-12-27T21:29:45.856721-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"}
{"id":"gt-mwpcq","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 3: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:19:40.396361-08:00","updated_at":"2025-12-28T11:19:40.396361-08:00","closed_at":"2025-12-28T11:19:40.396326-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-mwpcq","depends_on_id":"gt-eph-dll","type":"parent-child","created_at":"2025-12-28T11:19:40.397201-08:00","created_by":"deacon"}]}
{"id":"gt-mx6s","title":"Witness patrol wisp with polecat leases","description":"Witness should maintain a rolling patrol wisp that tracks active polecats:\n\n```\nwisp-witness-patrol\n├── lease: furiosa (boot → working → done)\n├── lease: nux (working)\n└── lease: slit (done, closed)\n```\n\nWhen POLECAT_STARTED arrives:\n- bd mol bond mol-polecat-lease wisp-patrol --var polecat=X\n\nPatrol loop iterates leases:\n- gt peek $polecat\n- If idle: gt nudge\n- If shutdown received: close lease\n\nWhen all leases closed:\n- bd mol squash wisp-xxx --summary='N polecats processed'\n\nRequires mol-polecat-lease proto definition.","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-22T22:01:13.640901-08:00","updated_at":"2025-12-27T21:29:53.099772-08:00","dependencies":[{"issue_id":"gt-mx6s","depends_on_id":"gt-cp2s","type":"blocks","created_at":"2025-12-22T22:31:40.126113-08:00","created_by":"daemon"},{"issue_id":"gt-mx6s","depends_on_id":"gt-83k0","type":"blocks","created_at":"2025-12-22T22:31:40.204487-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.099772-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-mxxpl","title":"Digest: mol-deacon-patrol","description":"Patrol 2: archived stale Mayor handoffs, all agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:20:50.046144-08:00","updated_at":"2025-12-27T21:26:01.720963-08:00","deleted_at":"2025-12-27T21:26:01.720963-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-mxyj","title":"Witness session startup (gt witness start)","description":"Implement gt witness start \u003crig\u003e\n\nShould:\n1. Verify rig exists and has witness/ directory\n2. Check for existing witness session (don't double-start)\n3. Create tmux session: gt-\u003crig\u003e-witness\n4. Start Claude Code with --dangerously-skip-permissions\n5. Send gt prime to load context\n6. Send startup prompt\n\nSimilar pattern to refinery startup in internal/refinery/manager.go","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-20T03:14:20.38027-08:00","updated_at":"2025-12-27T21:29:53.82338-08:00","dependencies":[{"issue_id":"gt-mxyj","depends_on_id":"gt-53w6","type":"parent-child","created_at":"2025-12-20T03:14:37.170879-08:00","created_by":"daemon"},{"issue_id":"gt-mxyj","depends_on_id":"gt-ni6a","type":"blocks","created_at":"2025-12-20T03:14:38.764636-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.82338-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1435,6 +1444,7 @@
{"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","close_reason":"Squashed from 9 wisps"}
{"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","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-n4vz7","depends_on_id":"gt-eph-abd","type":"parent-child","created_at":"2025-12-28T11:20:57.159809-08:00","created_by":"deacon"}]}
{"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","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-n5u8i","depends_on_id":"gt-eph-pxk","type":"parent-child","created_at":"2025-12-27T23:06:24.92794-08:00","created_by":"deacon"}]}
{"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"}
@@ -1561,6 +1571,7 @@
{"id":"gt-pio","title":"Plugin: merge-oracle (merge queue analysis)","description":"Example plugin that analyzes changesets before Refinery processes them. Builds overlap graph, classifies disjointness (parallel-safe vs needs-sequencing), uses LLM for semantic complexity, identifies high-risk patterns. Based on merge-orchestration proposal. See docs/architecture.md.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-15T22:53:04.027073-08:00","updated_at":"2025-12-15T23:17:06.507108-08:00","dependencies":[{"issue_id":"gt-pio","depends_on_id":"gt-axz","type":"blocks","created_at":"2025-12-15T22:53:17.507459-08:00","created_by":"daemon"}]}
{"id":"gt-piy9c","title":"Digest: mol-deacon-patrol","description":"Patrol 9","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:51:02.414152-08:00","updated_at":"2025-12-25T20:51:02.414152-08:00","closed_at":"2025-12-25T20:51:02.414093-08:00"}
{"id":"gt-pj222","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All agents healthy, no messages, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:26:34.954324-08:00","updated_at":"2025-12-27T21:26:02.934026-08:00","deleted_at":"2025-12-27T21:26:02.934026-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-pkm69","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 10: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:14.872507-08:00","updated_at":"2025-12-28T11:22:14.872507-08:00","closed_at":"2025-12-28T11:22:14.872464-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-pkm69","depends_on_id":"gt-eph-1bl","type":"parent-child","created_at":"2025-12-28T11:22:14.87339-08:00","created_by":"deacon"}]}
{"id":"gt-plcg","title":"Add --account flag to gt spawn and gt crew attach","description":"Add --account=\u003chandle\u003e flag. Precedence: GT_ACCOUNT env \u003e --account flag \u003e default from config.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:23.832188-08:00","updated_at":"2025-12-27T21:29:56.15928-08:00","dependencies":[{"issue_id":"gt-plcg","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:34.984336-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.15928-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-pln0","title":"Digest: mol-deacon-patrol","description":"Patrol 6: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:57:32.057118-08:00","updated_at":"2025-12-27T21:26:04.977001-08:00","deleted_at":"2025-12-27T21:26:04.977001-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-pm5rs","title":"Digest: mol-deacon-patrol","description":"Patrol 3: nux exited (wrong-rig escalation), 11 sessions, all core healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:09:23.555634-08:00","updated_at":"2025-12-27T21:26:02.318996-08:00","deleted_at":"2025-12-27T21:26:02.318996-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1714,6 +1725,7 @@
{"id":"gt-ry8","title":"HOP: Entity chain tracking for agents","description":"Track work history per-entity (CV chains). See ~/ai/stevey-gastown/hop/decisions/002-entity-chains.md for design. Post-v0.1 work.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-17T01:00:41.347764-08:00","updated_at":"2025-12-17T01:00:41.347764-08:00"}
{"id":"gt-ryz8u","title":"Digest: mol-deacon-patrol","description":"Patrol 2: inbox empty, all agents healthy, fixed 1 orphan process","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:33:22.412072-08:00","updated_at":"2025-12-27T21:26:00.929431-08:00","deleted_at":"2025-12-27T21:26:00.929431-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-rzimf","title":"test","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-28T00:07:02.72402-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T00:13:37.296433-08:00"}
{"id":"gt-s0nba","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 6: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:21:26.271445-08:00","updated_at":"2025-12-28T11:21:26.271445-08:00","closed_at":"2025-12-28T11:21:26.271411-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-s0nba","depends_on_id":"gt-eph-0em","type":"parent-child","created_at":"2025-12-28T11:21:26.272349-08:00","created_by":"deacon"}]}
{"id":"gt-s148","title":"Clean up stale children on deacon handoff bead","description":"The deacon handoff bead hq-8r8 has 7 stale children (hq-8r8.1 through hq-8r8.7) from a previous patrol that got incorrectly parented. These should be cleaned up.\n\nThe handoff bead should only contain the attached_molecule reference, not instantiated steps.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T13:16:52.273025-08:00","updated_at":"2025-12-23T13:16:52.273025-08:00"}
{"id":"gt-s18k","title":"Witness patrol: stale MR queue detection needs state tracking","description":"The mol-witness-patrol check-refinery step says 'if queue is non-empty for \u003e30 min, send nudge' but doesn't explain how to track when the queue first became non-empty.\n\n## Problem\nThe Witness needs to persist:\n- When MR queue first became non-empty\n- Previous queue state for comparison\n\nWithout this, the Witness can't detect stale queues.\n\n## Solution\nAdd to witness handoff bead:\n- mr_queue_nonempty_since: timestamp\n- Update in save-state step\n- Check in check-refinery step","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:02:38.497753-08:00","updated_at":"2025-12-23T01:02:38.497753-08:00","dependencies":[{"issue_id":"gt-s18k","depends_on_id":"gt-bjft","type":"blocks","created_at":"2025-12-23T01:03:12.026206-08:00","created_by":"daemon"}]}
{"id":"gt-s31zw","title":"Digest: mol-deacon-patrol","description":"Patrol 2: Quick scan, all healthy, no work","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:43:30.599994-08:00","updated_at":"2025-12-27T21:26:01.560854-08:00","deleted_at":"2025-12-27T21:26:01.560854-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1742,6 +1754,7 @@
{"id":"gt-slo","title":"Fix TestHasPolecat test failure","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-17T17:30:19.474356-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-sm9ti","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Quick cycle, all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:05:29.027668-08:00","updated_at":"2025-12-27T21:26:03.017334-08:00","deleted_at":"2025-12-27T21:26:03.017334-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-sn8if","title":"Digest: mol-deacon-patrol","description":"Patrol 8: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:43:39.832046-08:00","updated_at":"2025-12-27T21:26:03.222694-08:00","deleted_at":"2025-12-27T21:26:03.222694-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-sob9x","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 16: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:48.666655-08:00","updated_at":"2025-12-28T11:22:48.666655-08:00","closed_at":"2025-12-28T11:22:48.666623-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-sob9x","depends_on_id":"gt-eph-9e2","type":"parent-child","created_at":"2025-12-28T11:22:48.667527-08:00","created_by":"deacon"}]}
{"id":"gt-sp18","title":"Digest: mol-deacon-patrol","description":"Patrol #18","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:26:11.030566-08:00","updated_at":"2025-12-27T21:26:04.683985-08:00","deleted_at":"2025-12-27T21:26:04.683985-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-spdof","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no messages, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:25:58.151972-08:00","updated_at":"2025-12-27T21:26:03.303882-08:00","deleted_at":"2025-12-27T21:26:03.303882-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-spt8v","title":"Fix docs: Formulas are JSON not YAML","description":"The molecular chemistry docs (molecule-algebra.md, molecular-chemistry.md) incorrectly refer to formulas as YAML. Formulas are JSON (.formula.json). Fix all references: .formula.yaml -\u003e .formula.json, 'YAML files' -\u003e 'JSON files', 'formula YAML' -\u003e 'formula JSON', code blocks from yaml to json syntax.","status":"tombstone","priority":2,"issue_type":"chore","created_at":"2025-12-25T14:33:19.775501-08:00","updated_at":"2025-12-27T21:29:55.189761-08:00","deleted_at":"2025-12-27T21:29:55.189761-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"chore"}
@@ -1866,7 +1879,7 @@
{"id":"gt-u56bb","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:45.08665-08:00","updated_at":"2025-12-27T21:26:02.044341-08:00","deleted_at":"2025-12-27T21:26:02.044341-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-u6nri","title":"Wire up created_by field for beads issues","description":"## Goal\nAdd actor/creator attribution to beads issues created by gastown.\n\n## Done\n- Added CreatedBy field to Issue struct\n- Added Actor field to CreateOptions\n- Pass --actor to bd create\n\n## Remaining\n1. Add ActorString() method to RoleInfo\n2. Update beads.Create() callers to pass Actor\n3. Update direct bd create exec calls to add --actor\n\n## Context\nBeads GH #748 added created_by field. Gastown needs to populate it.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:22:56.217959-08:00","updated_at":"2025-12-27T21:29:54.730971-08:00","deleted_at":"2025-12-27T21:29:54.730971-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-u6siy","title":"Day 3.3: Witness sends MERGE_READY to refinery","description":"When polecat completes work:\n1. Witness detects completion (hook_bead closed, state=stopped)\n2. Witness sends mail to refinery: MERGE_READY\n3. Mail includes branch name and work bead ID\n\nParent: gt-hwka3","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:04.438294-08:00","created_by":"mayor","updated_at":"2025-12-28T09:51:24.398745-08:00","closed_at":"2025-12-28T09:51:24.398745-08:00","close_reason":"Implemented MERGE_READY flow in witness patrol formula","dependencies":[{"issue_id":"gt-u6siy","depends_on_id":"gt-hwka3","type":"parent-child","created_at":"2025-12-27T20:58:47.941899-08:00","created_by":"daemon"},{"issue_id":"gt-u6siy","depends_on_id":"gt-gizsv","type":"blocks","created_at":"2025-12-27T20:58:59.577532-08:00","created_by":"daemon"},{"issue_id":"gt-u6siy","depends_on_id":"gt-qpwv4","type":"relates-to","created_at":"2025-12-27T20:59:10.640353-08:00","created_by":"daemon"},{"issue_id":"gt-u6siy","depends_on_id":"gt-k294l","type":"blocks","created_at":"2025-12-27T23:17:28.250458-08:00","created_by":"daemon"}]}
{"id":"gt-u7dxq","title":"Activity feed improvements","description":"Make the activity feed (bd activity / gt feed) more useful and comprehensive.\n\n## Goals\n\n1. **Cleaner output formatting** - Remove noise, show relevant actors\n2. **Instrument gt commands** - Show gt command activity in the feed\n\n## Success Criteria\n\n- Feed is scannable at a glance\n- Agent session molecule churn is filtered or minimized \n- Actor shown only when not obvious from context\n- gt commands appear in the activity stream","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-28T11:01:43.337499-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T11:01:43.337499-08:00","dependencies":[{"issue_id":"gt-u7dxq","depends_on_id":"gt-sb6m4","type":"blocks","created_at":"2025-12-28T11:02:43.136872-08:00","created_by":"daemon"},{"issue_id":"gt-u7dxq","depends_on_id":"gt-zc6ma","type":"blocks","created_at":"2025-12-28T11:02:43.165368-08:00","created_by":"daemon"},{"issue_id":"gt-u7dxq","depends_on_id":"gt-1ydd9","type":"blocks","created_at":"2025-12-28T11:02:43.194997-08:00","created_by":"daemon"},{"issue_id":"gt-u7dxq","depends_on_id":"gt-7aw1m","type":"blocks","created_at":"2025-12-28T11:02:43.224956-08:00","created_by":"daemon"}]}
{"id":"gt-u7dxq","title":"Activity feed improvements","description":"Make the activity feed (bd activity / gt feed) more useful and comprehensive.\n\n## Goals\n\n1. **Cleaner output formatting** - Remove noise, show relevant actors\n2. **Instrument gt commands** - Show gt command activity in the feed\n\n## Success Criteria\n\n- Feed is scannable at a glance\n- Agent session molecule churn is filtered or minimized \n- Actor shown only when not obvious from context\n- gt commands appear in the activity stream","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-28T11:01:43.337499-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-28T11:01:43.337499-08:00","dependencies":[{"issue_id":"gt-u7dxq","depends_on_id":"gt-sb6m4","type":"blocks","created_at":"2025-12-28T11:02:43.136872-08:00","created_by":"daemon"},{"issue_id":"gt-u7dxq","depends_on_id":"gt-zc6ma","type":"blocks","created_at":"2025-12-28T11:02:43.165368-08:00","created_by":"daemon"},{"issue_id":"gt-u7dxq","depends_on_id":"gt-1ydd9","type":"blocks","created_at":"2025-12-28T11:02:43.194997-08:00","created_by":"daemon"},{"issue_id":"gt-u7dxq","depends_on_id":"gt-7aw1m","type":"blocks","created_at":"2025-12-28T11:02:43.224956-08:00","created_by":"daemon"},{"issue_id":"gt-u7dxq","depends_on_id":"gt-38doh","type":"blocks","created_at":"2025-12-28T12:46:47.283782-08:00","created_by":"daemon"},{"issue_id":"gt-u7dxq","depends_on_id":"gt-1uhmj","type":"blocks","created_at":"2025-12-28T12:46:47.313034-08:00","created_by":"daemon"}]}
{"id":"gt-u818","title":"Witness Plugin System","description":"Patrol extensions via molecule bonding.\n\n## Core Insight\n\nPlugins ARE molecules. No separate format needed.\n\n## How It Works\n\n```\nmol-witness-patrol\n │\n ├── survey-workers\n │\n ├── plugin-run ←── bonds registered plugin molecules\n │ │\n │ ├── mol-mood-check (if registered)\n │ ├── mol-security-scan (if registered)\n │ └── mol-custom-X (user-installed)\n │\n └── aggregate (WaitsFor: all-children)\n```\n\n## Plugin Molecule Structure\n\nA plugin is just a molecule proto with specific labels:\n\n```json\n{\n \"id\": \"mol-mood-check\",\n \"title\": \"Polecat Mood Check\",\n \"description\": \"Assess polecat emotional state from output. Vars: {{polecat_name}}, {{captured_output}}\",\n \"labels\": [\"template\", \"plugin\", \"witness\", \"tier:haiku\"],\n \"issue_type\": \"task\"\n}\n```\n\nLabels encode metadata:\n- `plugin` - marks as bondable plugin\n- `witness` / `deacon` / `refinery` - which patrol can use it\n- `tier:haiku` / `tier:sonnet` - model tier hint\n\n## Registration\n\nPlugins registered in rig config or molecules.jsonl:\n\n```bash\n# Install from Mol Mall\nbd mol install mol-mood-check\n\n# Or add to ~/.beads/molecules.jsonl manually\n```\n\n## Execution\n\nThe `plugin-run` step in patrol:\n\n```bash\n# For each registered plugin molecule matching this patrol:\nbd mol bond mol-mood-check $PATROL_WISP \\\n --ref mood-{{polecat_name}} \\\n --var polecat_name=$POLECAT \\\n --var captured_output=\"$OUTPUT\"\n```\n\n## CLI\n\n- `bd mol list --label plugin` - List available plugins\n- `bd mol install \u003cid\u003e` - Install from Mol Mall\n- `gt patrol plugins \u003crole\u003e` - Show plugins for a patrol role\n\n## Benefits\n\n- No YAML schema to maintain\n- No separate plugin loading code\n- Plugins are versioned, synced, auditable (they are beads)\n- Distribution via Mol Mall (molecules.jsonl registry)\n- Same {{var}} substitution as all molecules","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-21T16:16:53.886931-08:00","updated_at":"2025-12-27T21:29:53.451435-08:00","deleted_at":"2025-12-27T21:29:53.451435-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-u82","title":"Design: Mayor session cycling and handoff","description":"Design for Mayor session cycling and structured handoff.\n\n## Overview\n\nMayor coordinates across all rigs and runs for extended periods. Needs session cycling pattern with structured handoff notes.\n\n## Key Elements\n\n1. Session cycling recognition (when to cycle)\n2. Handoff note format (structured state capture)\n3. Handoff delivery (mail to self)\n4. Fresh session startup (reading and resuming)\n\n## Subtasks (implementation)\n\n- gt-g2d: Mayor session cycling prompting\n- gt-sye: Mayor startup protocol prompting\n- gt-vci: Mayor handoff mail template\n- gt-1le: town handoff command (optional, P2)\n\n**Design complete.** Each subtask has full specification in its description.","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-15T20:03:16.125725-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"}
{"id":"gt-u8df5","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 13: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:45:59.223504-08:00","updated_at":"2025-12-27T21:26:01.369774-08:00","deleted_at":"2025-12-27T21:26:01.369774-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1948,6 +1961,7 @@
{"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","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-vtqs3","depends_on_id":"gt-eph-252","type":"parent-child","created_at":"2025-12-27T23:08:31.207814-08:00","created_by":"deacon"}]}
{"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","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-vx2qv","depends_on_id":"gt-eph-cl6","type":"parent-child","created_at":"2025-12-28T11:22:07.234345-08:00","created_by":"deacon"}]}
{"id":"gt-vz151","title":"Add crew auto-start config to gt start","description":"gt start needs a config file to specify:\n- Which crew members auto-start per rig\n- Which rigs to auto-start (instead of requiring --all or --rigs flags)\n\nRequested defaults:\n- beads rig: dave\n- gastown rig: max, joe\n\nThis would allow 'gt start' to bring up the configured crew without manual flags.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-26T19:41:47.241478-08:00","updated_at":"2025-12-27T21:29:54.722339-08:00","deleted_at":"2025-12-27T21:29:54.722339-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-vz2xs","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Halfway check, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:33:04.470774-08:00","updated_at":"2025-12-27T21:26:03.894642-08:00","deleted_at":"2025-12-27T21:26:03.894642-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-vzic","title":"README missing prerequisites section (tmux required)","description":"The README.md does not mention that tmux is required.\nAll agent sessions use tmux, but fresh users have no way to know this.\n\nAdd prerequisites section:\n- Go 1.23+\n- Git\n- tmux (required for agent sessions)\n- Claude Code CLI (for agents)","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-24T12:50:28.988771-08:00","updated_at":"2025-12-27T21:29:52.671896-08:00","dependencies":[{"issue_id":"gt-vzic","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:04.860313-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.671896-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"}
@@ -1972,6 +1986,7 @@
{"id":"gt-wib7t","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final patrol, all healthy, handoff triggered","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T07:30:06.242412-08:00","updated_at":"2025-12-27T21:26:03.609649-08:00","deleted_at":"2025-12-27T21:26:03.609649-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-050","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with YAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents. Sequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.013101-08:00","updated_at":"2025-12-27T21:29:54.80869-08:00","deleted_at":"2025-12-27T21:29:54.80869-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-0ca","title":"Evaluate pending async gates","description":"Evaluate pending async gates.\n\nGates are async coordination primitives that block until conditions are met.\nThe Deacon is responsible for monitoring gates and closing them when ready.\n\n**Timer gates** (await_type: timer):\nCheck if elapsed time since creation exceeds the timeout duration.\n\n```bash\n# List all open gates\nbd gate list --json\n\n# For each timer gate, check if elapsed:\n# - CreatedAt + Timeout \u003c Now → gate is ready to close\n# - Close with: bd gate close \u003cid\u003e --reason \"Timer elapsed\"\n```\n\n**GitHub gates** (await_type: gh:run, gh:pr) - handled in separate step.\n\n**Human/Mail gates** - require external input, skip here.\n\nAfter closing a gate, the Waiters field contains mail addresses to notify.\nSend a brief notification to each waiter that the gate has cleared.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.877467-08:00","updated_at":"2025-12-27T21:29:54.860673-08:00","deleted_at":"2025-12-27T21:29:54.860673-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-0j8","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-25T19:55:37.503174-08:00","updated_at":"2025-12-25T19:55:55.564216-08:00","closed_at":"2025-12-25T19:55:55.564216-08:00"}
{"id":"gt-wisp-271","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.04993-08:00","updated_at":"2025-12-26T13:09:27.201766-08:00","closed_at":"2025-12-26T13:09:27.201766-08:00","dependencies":[{"issue_id":"gt-wisp-271","depends_on_id":"gt-wisp-9ss","type":"blocks","created_at":"2025-12-26T13:04:23.202384-08:00","created_by":"deacon"}]}
{"id":"gt-wisp-3fc","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Ensure state is saved to handoff bead\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue patrolling\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821372-08:00","updated_at":"2025-12-27T21:29:55.036103-08:00","dependencies":[{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.907769-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-hp3","type":"blocks","created_at":"2025-12-25T19:54:36.921536-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.036103-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-48l","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses dynamic bonding to spawn mol-polecat-arm for each worker,\nenabling parallel inspection with a fanout gate for aggregation.\n\n## The Christmas Ornament Shape\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌────────┘ │ └────────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n inbox-check survey aggregate (WaitsFor: all-children)\n check-refnry │ save-state\n load-state │ generate-summary\n ↓ context-check\n ┌───────┼───────┐ burn-or-loop\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n```\n","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:54:36.819952-08:00","updated_at":"2025-12-27T21:26:02.441987-08:00","deleted_at":"2025-12-27T21:26:02.441987-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
@@ -1979,17 +1994,14 @@
{"id":"gt-wisp-646","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-26T13:04:23.04871-08:00","updated_at":"2025-12-26T13:06:05.44536-08:00","closed_at":"2025-12-26T13:06:05.44536-08:00","dependencies":[{"issue_id":"gt-wisp-646","depends_on_id":"gt-wisp-zuj","type":"blocks","created_at":"2025-12-26T13:04:23.144118-08:00","created_by":"deacon"}]}
{"id":"gt-wisp-78q","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-26T14:04:44.877976-08:00","updated_at":"2025-12-26T14:07:27.717637-08:00","closed_at":"2025-12-26T14:07:27.717637-08:00"}
{"id":"gt-wisp-7yg","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.878984-08:00","updated_at":"2025-12-27T21:29:54.852102-08:00","close_reason":"Orphan patrol step","deleted_at":"2025-12-27T21:29:54.852102-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-8cr","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize. The spawn command returns immediately without waiting. This step finds spawned polecats that are now ready and sends them a trigger to start working.\n\n**ZFC-Compliant Observation** (AI observes AI):\n\n```bash\n# View pending spawns with captured terminal output\ngt deacon pending\n```\n\nFor each pending session, analyze the captured output:\n- Look for Claude's prompt indicator \"\u003e \" at the start of a line\n- If prompt is visible, Claude is ready for input\n- Make the judgment call yourself - you're the AI observer\n\nFor each ready polecat:\n```bash\n# 1. Trigger the polecat\ngt nudge \u003csession\u003e \"Begin.\"\n\n# 2. Clear from pending list\ngt deacon pending \u003csession\u003e\n```\n\nThis triggers the UserPromptSubmit hook, which injects mail so the polecat sees its assignment.\n\n**Bootstrap mode** (daemon-only, no AI available):\nThe daemon uses `gt deacon trigger-pending` with regex detection. This ZFC violation is acceptable during cold startup when no AI agent is running yet.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.048419-08:00","updated_at":"2025-12-26T13:06:37.525763-08:00","closed_at":"2025-12-26T13:06:37.525763-08:00","dependencies":[{"issue_id":"gt-wisp-8cr","depends_on_id":"gt-wisp-zuj","type":"blocks","created_at":"2025-12-26T13:04:23.134381-08:00","created_by":"deacon"}]}
{"id":"gt-wisp-8g4","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.373414-08:00","updated_at":"2025-12-27T21:29:54.86914-08:00","deleted_at":"2025-12-27T21:29:54.86914-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-99t","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.014153-08:00","updated_at":"2025-12-26T20:07:45.150162-08:00","closed_at":"2025-12-26T20:07:45.150162-08:00","dependencies":[{"issue_id":"gt-wisp-99t","depends_on_id":"gt-wisp-mpm","type":"blocks","created_at":"2025-12-26T16:16:32.105946-08:00","created_by":"stevey"}]}
{"id":"gt-wisp-9hf","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize. The spawn command returns immediately without waiting. This step finds spawned polecats that are now ready and sends them a trigger to start working.\n\n**ZFC-Compliant Observation** (AI observes AI):\n\n```bash\n# View pending spawns with captured terminal output\ngt deacon pending\n```\n\nFor each pending session, analyze the captured output:\n- Look for Claude's prompt indicator \"\u003e \" at the start of a line\n- If prompt is visible, Claude is ready for input\n- Make the judgment call yourself - you're the AI observer\n\nFor each ready polecat:\n```bash\n# 1. Trigger the polecat\ngt nudge \u003csession\u003e \"Begin.\"\n\n# 2. Clear from pending list\ngt deacon pending \u003csession\u003e\n```\n\nThis triggers the UserPromptSubmit hook, which injects mail so the polecat sees its assignment.\n\n**Bootstrap mode** (daemon-only, no AI available):\nThe daemon uses `gt deacon trigger-pending` with regex detection. This ZFC violation is acceptable during cold startup when no AI agent is running yet.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.01231-08:00","updated_at":"2025-12-27T21:29:54.817167-08:00","deleted_at":"2025-12-27T21:29:54.817167-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-9ss","title":"Clean dead sessions","description":"Clean dead sessions and orphaned state.\n\nRun `gt doctor --fix` to handle all cleanup:\n\n```bash\n# Preview what needs cleaning\ngt doctor -v\n\n# Fix everything\ngt doctor --fix\n```\n\nThis handles:\n- **orphan-sessions**: Kill orphaned tmux sessions (gt-* not matching valid patterns)\n- **orphan-processes**: Kill orphaned Claude processes (no tmux parent)\n- **wisp-gc**: Garbage collect abandoned wisps (\u003e1h old)\n\nAll cleanup is handled by doctor checks - no need to run separate commands.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.049699-08:00","updated_at":"2025-12-26T13:09:27.208152-08:00","closed_at":"2025-12-26T13:09:27.208152-08:00","dependencies":[{"issue_id":"gt-wisp-9ss","depends_on_id":"gt-wisp-bau","type":"blocks","created_at":"2025-12-26T13:04:23.192565-08:00","created_by":"deacon"}]}
{"id":"gt-wisp-a1c","title":"Process witness mail","description":"Process witness mail: lifecycle requests, help requests.\n\n```bash\ngt mail inbox\n```\n\nHandle by message type:\n- **LIFECYCLE/Shutdown**: Queue for pre-kill verification\n- **Blocked/Help**: Assess if resolvable or escalate\n- **HANDOFF**: Load predecessor state\n- **Work complete**: Verify issue closed, proceed to pre-kill\n\nRecord any pending actions for later steps.\nMark messages as processed when complete.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821859-08:00","updated_at":"2025-12-27T21:29:55.019343-08:00","dependencies":[{"issue_id":"gt-wisp-a1c","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.963525-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.019343-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-bau","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-26T13:04:23.049463-08:00","updated_at":"2025-12-26T13:07:41.952917-08:00","closed_at":"2025-12-26T13:07:41.952917-08:00","dependencies":[{"issue_id":"gt-wisp-bau","depends_on_id":"gt-wisp-u84","type":"blocks","created_at":"2025-12-26T13:04:23.182848-08:00","created_by":"deacon"}]}
{"id":"gt-wisp-bol","title":"Check Witness and Refinery health","description":"Check Witness and Refinery health for each rig.\n\n**ZFC Principle**: You (Claude) make the judgment call about what is \"stuck\" or \"unresponsive\" - there are no hardcoded thresholds in Go. Read the signals, consider context, and decide.\n\nFor each rig, run:\n```bash\ngt witness status \u003crig\u003e\ngt refinery status \u003crig\u003e\n```\n\n**Signals to assess:**\n\n| Component | Healthy Signals | Concerning Signals |\n|-----------|-----------------|-------------------|\n| Witness | State: running, recent activity | State: not running, no heartbeat |\n| Refinery | State: running, queue processing | Queue stuck, merge failures |\n\n**Tracking unresponsive cycles:**\n\nMaintain in your patrol state (persisted across cycles):\n```\nhealth_state:\n \u003crig\u003e:\n witness:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n refinery:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n```\n\n**Decision matrix** (you decide the thresholds based on context):\n\n| Cycles Unresponsive | Suggested Action |\n|---------------------|------------------|\n| 1-2 | Note it, check again next cycle |\n| 3-4 | Attempt restart: gt witness restart \u003crig\u003e |\n| 5+ | Escalate to Mayor with context |\n\n**Restart commands:**\n```bash\ngt witness restart \u003crig\u003e\ngt refinery restart \u003crig\u003e\n```\n\n**Escalation:**\n```bash\ngt mail send mayor/ -s \"Health: \u003crig\u003e \u003ccomponent\u003e unresponsive\" \\\n -m \"Component has been unresponsive for N cycles. Restart attempts failed.\n Last healthy: \u003ctimestamp\u003e\n Error signals: \u003cdetails\u003e\"\n```\n\nReset unresponsive_cycles to 0 when component responds normally.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.501992-08:00","updated_at":"2025-12-25T19:55:55.596967-08:00","closed_at":"2025-12-25T19:55:55.596967-08:00","dependencies":[{"issue_id":"gt-wisp-bol","depends_on_id":"gt-wisp-eju","type":"blocks","created_at":"2025-12-25T19:55:37.631303-08:00","created_by":"deacon"}]}
{"id":"gt-wisp-cz5","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-26T16:16:32.012846-08:00","updated_at":"2025-12-26T16:18:17.168113-08:00","closed_at":"2025-12-26T16:18:17.168113-08:00","dependencies":[{"issue_id":"gt-wisp-cz5","depends_on_id":"gt-wisp-9hf","type":"blocks","created_at":"2025-12-26T16:16:32.071988-08:00","created_by":"stevey"}]}
{"id":"gt-wisp-eju","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize. The spawn command returns immediately without waiting. This step finds spawned polecats that are now ready and sends them a trigger to start working.\n\n**ZFC-Compliant Observation** (AI observes AI):\n\n```bash\n# View pending spawns with captured terminal output\ngt deacon pending\n```\n\nFor each pending session, analyze the captured output:\n- Look for Claude's prompt indicator \"\u003e \" at the start of a line\n- If prompt is visible, Claude is ready for input\n- Make the judgment call yourself - you're the AI observer\n\nFor each ready polecat:\n```bash\n# 1. Trigger the polecat\ngt nudge \u003csession\u003e \"Begin.\"\n\n# 2. Clear from pending list\ngt deacon pending \u003csession\u003e\n```\n\nThis triggers the UserPromptSubmit hook, which injects mail so the polecat sees its assignment.\n\n**Bootstrap mode** (daemon-only, no AI available):\nThe daemon uses `gt deacon trigger-pending` with regex detection. This ZFC violation is acceptable during cold startup when no AI agent is running yet.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.501716-08:00","updated_at":"2025-12-25T19:55:55.613364-08:00","closed_at":"2025-12-25T19:55:55.613364-08:00","dependencies":[{"issue_id":"gt-wisp-eju","depends_on_id":"gt-wisp-lya","type":"blocks","created_at":"2025-12-25T19:55:37.617246-08:00","created_by":"deacon"}]}
{"id":"gt-wisp-fnm","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-26T15:39:49.992066-08:00","updated_at":"2025-12-26T15:40:02.9979-08:00","closed_at":"2025-12-26T15:40:02.9979-08:00"}
{"id":"gt-wisp-h5d","title":"Persist patrol state","description":"Update handoff bead with new states.\n\nPersist state to the witness handoff bead:\n- Updated worker statuses from all arms\n- Current nudge counts per worker\n- Nudge timestamps\n- Actions taken this cycle\n- Pending items for next cycle\n\n```bash\nbd update \u003chandoff-bead-id\u003e --description=\"\u003cserialized state\u003e\"\n```\n\nThis state survives wisp burns and session cycles.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822355-08:00","updated_at":"2025-12-27T21:29:55.002586-08:00","dependencies":[{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:37.006252-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-lsd","type":"blocks","created_at":"2025-12-25T19:54:37.020736-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.002586-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-hp3","title":"Generate handoff summary","description":"Summarize this patrol cycle for digest.\n\nInclude:\n- Workers inspected (count, names)\n- Nudges sent (count, to whom)\n- Sessions killed (count, names)\n- Escalations (count, issues)\n- Issues found (brief descriptions)\n- Actions pending for next cycle\n\nThis becomes the digest when the patrol wisp is squashed.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821607-08:00","updated_at":"2025-12-27T21:29:55.027795-08:00","dependencies":[{"issue_id":"gt-wisp-hp3","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.93569-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-hp3","depends_on_id":"gt-wisp-h5d","type":"blocks","created_at":"2025-12-25T19:54:36.949594-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.027795-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-wisp-hzw","title":"Clean dead sessions","description":"Clean dead sessions.\n\nGarbage collect terminated sessions:\n- Remove stale polecat directories\n- Clean up wisp session artifacts\n- Prune old logs and temp files\n- Archive completed molecule state\n\n```bash\ngt gc --sessions\ngt gc --wisps --age=1h\n```\n\nPreserve audit trail. Only clean sessions confirmed dead.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.502717-08:00","updated_at":"2025-12-27T21:29:54.969003-08:00","dependencies":[{"issue_id":"gt-wisp-hzw","depends_on_id":"gt-wisp-nna","type":"blocks","created_at":"2025-12-25T19:55:37.675362-08:00","created_by":"deacon"}],"deleted_at":"2025-12-27T21:29:54.969003-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -2040,6 +2052,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","close_reason":"Squashed from 9 wisps","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-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"}
@@ -2115,6 +2128,7 @@
{"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-ywfjn","title":"Digest: mol-deacon-patrol","description":"Patrol 10: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:07:27.55403-08:00","updated_at":"2025-12-27T23:07:27.55403-08:00","closed_at":"2025-12-27T23:07:27.553999-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-ywfjn","depends_on_id":"gt-eph-1r4","type":"parent-child","created_at":"2025-12-27T23:07:27.554812-08:00","created_by":"deacon"}]}
{"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","close_reason":"Squashed from 9 wisps","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"}
@@ -2130,6 +2144,7 @@
{"id":"gt-z5q73","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:50:30.49576-08:00","updated_at":"2025-12-25T20:50:30.49576-08:00","closed_at":"2025-12-25T20:50:30.495714-08:00"}
{"id":"gt-z6a5","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:43","description":"Patrol 3: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:43:12.75587-08:00","updated_at":"2025-12-27T21:26:05.162706-08:00","deleted_at":"2025-12-27T21:26:05.162706-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-z6exe","title":"Digest: mol-deacon-patrol","description":"Patrol 6: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:30:22.944508-08:00","updated_at":"2025-12-28T01:30:22.944508-08:00","closed_at":"2025-12-28T01:30:22.944475-08:00","close_reason":"Squashed from 9 wisps"}
{"id":"gt-z722q","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 4: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:20:18.680202-08:00","updated_at":"2025-12-28T11:20:18.680202-08:00","closed_at":"2025-12-28T11:20:18.680167-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-z722q","depends_on_id":"gt-eph-200","type":"parent-child","created_at":"2025-12-28T11:20:18.681013-08:00","created_by":"deacon"}]}
{"id":"gt-z7hwn","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:15:32.191569-08:00","updated_at":"2025-12-27T21:26:02.740518-08:00","deleted_at":"2025-12-27T21:26:02.740518-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-z7v0b","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All healthy.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T03:07:12.046971-08:00","updated_at":"2025-12-28T03:07:12.046971-08:00","closed_at":"2025-12-28T03:07:12.046934-08:00","close_reason":"Squashed from 9 wisps"}
{"id":"gt-z80br","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Routine, witnesses/refineries healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:49:11.210041-08:00","updated_at":"2025-12-27T21:26:02.019378-08:00","deleted_at":"2025-12-27T21:26:02.019378-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}