diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index c728dc15..715e0002 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -5,31 +5,31 @@ {"id":"gt-03rb","title":"Merge: gt-xw7b","description":"branch: polecat/morsov\ntarget: main\nsource_issue: gt-xw7b\nrig: gastown","status":"closed","priority":4,"issue_type":"merge-request","created_at":"2025-12-21T16:43:54.909633-08:00","updated_at":"2025-12-21T17:20:27.509202-08:00","closed_at":"2025-12-21T17:20:27.509202-08:00","close_reason":"ORPHANED: Branch never pushed, worktree deleted"} {"id":"gt-05cx","title":"Merge: gt-h6eq.1","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-h6eq.1\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:44:11.942999-08:00","updated_at":"2025-12-23T12:22:23.446685-08:00","closed_at":"2025-12-23T12:22:23.446685-08:00","close_reason":"Merged to main in gt-h6eq swarm"} {"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":"open","priority":1,"issue_type":"task","created_at":"2025-12-15T19:47:21.757756-08:00","updated_at":"2025-12-15T20:48:37.663168-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"}]} -{"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","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-09hq0","depends_on_id":"gt-6mgda","type":"parent-child","created_at":"2025-12-25T00:05:21.88224-08:00","created_by":"stevey"}]} +{"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","close_reason":"Squashed from 8 wisps"} {"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":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:24:34.371414-08:00","updated_at":"2025-12-24T14:24:34.371414-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":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T17:50:25.227909-08:00","updated_at":"2025-12-19T17:52:57.683445-08:00","closed_at":"2025-12-19T17:52:57.683445-08:00"} -{"id":"gt-0atys","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Nominal - halfway point","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:50:19.218794-08:00","updated_at":"2025-12-24T23:50:19.218794-08:00","closed_at":"2025-12-24T23:50:19.218767-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-0atys","depends_on_id":"gt-k5ph4","type":"parent-child","created_at":"2025-12-24T23:50:19.219471-08:00","created_by":"stevey"}]} +{"id":"gt-0atys","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Nominal - halfway point","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:50:19.218794-08:00","updated_at":"2025-12-24T23:50:19.218794-08:00","closed_at":"2025-12-24T23:50:19.218767-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-0b1c","title":"Review: Refinery patrol template changes (gt-qz2l)","description":"Polecat dementus implemented refinery template changes: banners, wisp-based execution, propulsion protocol. Review for correctness and consistency with witness/deacon patterns.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T19:57:40.117102-08:00","updated_at":"2025-12-23T19:57:40.117102-08:00"} {"id":"gt-0c7s","title":"Add 'gt account default' command","description":"Set the default account in accounts.yaml. Used when no GT_ACCOUNT env or --account flag specified.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:20.55537-08:00","updated_at":"2025-12-23T04:00:20.170967-08:00","closed_at":"2025-12-23T04:00:20.170967-08:00","close_reason":"Implemented gt account default","dependencies":[{"issue_id":"gt-0c7s","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:34.811443-08:00","created_by":"daemon"}]} {"id":"gt-0cys","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:26:42.913686-08:00","updated_at":"2025-12-24T21:26:42.913686-08:00","closed_at":"2025-12-24T21:26:42.913655-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-0do6","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:55:26.347226-08:00","updated_at":"2025-12-25T01:33:00.236859-08:00","closed_at":"2025-12-25T01:33:00.236859-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-0do6.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:55:26.435684-08:00","updated_at":"2025-12-25T01:33:00.22059-08:00","closed_at":"2025-12-25T01:33:00.22059-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-0do6.1","depends_on_id":"gt-0do6","type":"parent-child","created_at":"2025-12-24T21:55:26.436124-08:00","created_by":"daemon"}]} -{"id":"gt-0dra","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:15.178129-08:00","updated_at":"2025-12-24T22:38:15.178129-08:00","closed_at":"2025-12-24T22:38:15.178096-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-0dra","depends_on_id":"gt-ckjq","type":"parent-child","created_at":"2025-12-24T22:38:15.17881-08:00","created_by":"stevey"}]} +{"id":"gt-0dra","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:15.178129-08:00","updated_at":"2025-12-24T22:38:15.178129-08:00","closed_at":"2025-12-24T22:38:15.178096-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-0ei3","title":"Add molecules.jsonl as separate catalog file for template molecules","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-19T20:16:10.763471-08:00","updated_at":"2025-12-20T09:28:01.430495-08:00","closed_at":"2025-12-20T09:28:01.430495-08:00"} -{"id":"gt-0gdc","title":"Digest: mol-deacon-patrol","description":"Patrol 6","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:04.775529-08:00","updated_at":"2025-12-24T23:08:04.775529-08:00","closed_at":"2025-12-24T23:08:04.775492-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-0gdc","depends_on_id":"gt-7fou","type":"parent-child","created_at":"2025-12-24T23:08:04.776223-08:00","created_by":"stevey"}]} +{"id":"gt-0gdc","title":"Digest: mol-deacon-patrol","description":"Patrol 6","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:04.775529-08:00","updated_at":"2025-12-24T23:08:04.775529-08:00","closed_at":"2025-12-24T23:08:04.775492-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-0iy3","title":"Merge: gt-3x1.3","description":"branch: polecat/Doof\ntarget: main\nsource_issue: gt-3x1.3\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:52.741123-08:00","updated_at":"2025-12-19T19:13:27.737052-08:00","closed_at":"2025-12-19T17:47:03.618858-08:00"} {"id":"gt-0l20","title":"decide-actions","description":"Apply nudge matrix and queue actions.\n\nProgressive nudge levels:\n- Level 1: Gentle reminder\n- Level 2: Stronger nudge\n- Level 3: Final warning\n- Level 4: Escalate to Mayor\n\nNeeds: inspect-workers","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.506634-08:00","updated_at":"2025-12-23T04:39:39.649471-08:00","closed_at":"2025-12-23T04:39:39.649471-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","dependencies":[{"issue_id":"gt-0l20","depends_on_id":"gt-751s","type":"parent-child","created_at":"2025-12-23T01:41:54.584193-08:00","created_by":"stevey"},{"issue_id":"gt-0l20","depends_on_id":"gt-o29j","type":"blocks","created_at":"2025-12-23T01:41:54.591628-08:00","created_by":"stevey"}]} -{"id":"gt-0mchz","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:02:09.286607-08:00","updated_at":"2025-12-25T00:02:09.286607-08:00","closed_at":"2025-12-25T00:02:09.28657-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-0mchz","depends_on_id":"gt-47bv4","type":"parent-child","created_at":"2025-12-25T00:02:09.287353-08:00","created_by":"stevey"}]} +{"id":"gt-0mchz","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:02:09.286607-08:00","updated_at":"2025-12-25T00:02:09.286607-08:00","closed_at":"2025-12-25T00:02:09.28657-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-0nh8","title":"gt prime should detect mayor role from any rig's mayor/ folder","description":"Currently gt prime only detects the Mayor role when run from town root (~/gt). It should also detect Mayor when run from:\n- ~/gt/gastown/mayor/rig (rig's internal mayor dir)\n- Any path containing /mayor/ under a rig\n\nThis would allow the mayor session to work correctly regardless of which rig directory it's attached to.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-20T21:56:10.281534-08:00","updated_at":"2025-12-20T21:56:10.281534-08:00"} {"id":"gt-0ol","title":"Update prompts.md: Engineer role and templates","description":"Update docs/prompts.md with Engineer role:\n\n1. Role Prompts table: Change Refinery to Engineer\n2. Add Engineer-specific prompts:\n - Session restart request template\n - Subtask filing template\n - Handoff mail template\n3. Update refinery.md template name to engineer.md\n4. Ensure consistency with architecture.md","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T23:12:05.279233-08:00","updated_at":"2025-12-16T23:12:05.279233-08:00","dependencies":[{"issue_id":"gt-0ol","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:12:15.013747-08:00","created_by":"daemon"}]} {"id":"gt-0pc","title":"Document Overseer role (human operator)","description":"Document the Overseer role in Gas Town architecture.\n\n## The Overseer\n\nThe **Overseer** is the human operator of Gas Town. Not an agent - a person.\n\n## Responsibilities\n\n| Area | Overseer Does | Mayor/Agents Do |\n|------|---------------|-----------------|\n| Strategy | Define project goals | Execute toward goals |\n| Priorities | Set priority order | Work in priority order |\n| Escalations | Final decision on stuck work | Escalate to Overseer |\n| Resources | Provision machines | Use allocated resources |\n| Quality | Review \u0026 approve swarm output | Produce output |\n| Operations | Run gt commands, monitor dashboards | Do the work |\n\n## Key Interactions\n\n### Overseer → Mayor\n- Start/stop Mayor sessions\n- Direct Mayor via conversation\n- Review Mayor recommendations\n- Approve cross-rig decisions\n\n### Mayor → Overseer (Escalations)\n- Stuck workers after retries\n- Resource decisions (add machines, polecats)\n- Ambiguous requirements\n- Architecture decisions\n\n## Operating Cadence\n\nTypical Overseer workflow:\n1. Morning: Check status, review overnight work\n2. During day: Monitor, respond to escalations, adjust priorities\n3. End of day: Review progress, plan next batch\n\n## Commands for Overseers\n\n```bash\ngt status # Quick health check\ngt doctor # Detailed diagnostics \ngt doctor --fix # Auto-repair issues\ngt inbox # Messages from agents\ngt stop --all # Emergency halt\n```\n\n## Documentation Updates\n\nAdd to docs/architecture.md:\n- Overseer section under Agent Roles\n- Clarify Mayor reports to Overseer\n- Add Overseer to workflow diagrams","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-15T23:18:03.177633-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-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":"open","priority":2,"issue_type":"task","created_at":"2025-12-19T18:09:27.451344-08:00","updated_at":"2025-12-19T18:09:27.451344-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"}]} {"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":"open","priority":2,"issue_type":"feature","created_at":"2025-12-23T04:46:41.988492-08:00","updated_at":"2025-12-23T04:46:41.988492-08:00"} -{"id":"gt-0xhh0","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:36:17.883152-08:00","updated_at":"2025-12-25T00:36:17.883152-08:00","closed_at":"2025-12-25T00:36:17.883115-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-0xhh0","depends_on_id":"gt-2xk14","type":"parent-child","created_at":"2025-12-25T00:36:17.883878-08:00","created_by":"stevey"}]} +{"id":"gt-0xhh0","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:36:17.883152-08:00","updated_at":"2025-12-25T00:36:17.883152-08:00","closed_at":"2025-12-25T00:36:17.883115-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-0yn0","title":"test pin fix 2","notes":"Released: displaced by new sling","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T12:15:48.827437-08:00","updated_at":"2025-12-25T01:33:01.094267-08:00","closed_at":"2025-12-25T01:33:01.094267-08:00","close_reason":"Test pollution cleanup"} -{"id":"gt-110m","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no lifecycle requests, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:05:14.439933-08:00","updated_at":"2025-12-24T23:05:14.439933-08:00","closed_at":"2025-12-24T23:05:14.439903-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-110m","depends_on_id":"gt-7pp7","type":"parent-child","created_at":"2025-12-24T23:05:14.440597-08:00","created_by":"stevey"}]} +{"id":"gt-110m","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no lifecycle requests, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:05:14.439933-08:00","updated_at":"2025-12-24T23:05:14.439933-08:00","closed_at":"2025-12-24T23:05:14.439903-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-14hd","title":"Work on ga-xxp: Define mol-polecat-work standard molecule...","description":"Work on ga-xxp: Define mol-polecat-work standard molecule. See bd show ga-xxp for full details.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T21:49:14.070072-08:00","updated_at":"2025-12-19T22:01:24.336471-08:00","closed_at":"2025-12-19T22:01:24.336471-08:00"} {"id":"gt-17r","title":"Doctor check: Zombie session cleanup","description":"Detect and clean up zombie tmux sessions via gt doctor.\n\n## Problem\n\nZombie sessions occur when:\n- Agent crashes without cleanup\n- gt kill fails mid-operation\n- System restart leaves orphan sessions\n- Session naming collision\n\n## Checks\n\n### ZombieSessionCheck\n- List all tmux sessions matching gt-* pattern\n- Cross-reference with known polecats\n- Flag sessions with no corresponding polecat state\n- Flag sessions for removed polecats\n- Check session age vs polecat creation time\n\n### Detection Criteria\n- Session exists but polecat directory doesn't\n- Session name doesn't match any registered polecat\n- Polecat state=idle but session running\n- Multiple sessions for same polecat\n\n## Output\n\n```\n[WARN] Zombie tmux sessions detected:\n - gt-wyvern-OldPolecat (polecat removed)\n - gt-beads-Unknown (no matching polecat)\n - gt-wyvern-Toast (duplicate session)\n\n Run 'gt doctor --fix' to clean up\n```\n\n## Auto-Fix (--fix flag)\n\n- Kill orphan tmux sessions\n- Update polecat state to match reality\n- Log all cleanup actions\n\n## Safety\n\n- Never kill sessions where polecat state=working\n- Prompt before killing if --fix used without --force\n- Create audit log of killed sessions","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-15T23:18:01.446702-08:00","updated_at":"2025-12-23T14:27:07.858717-08:00","dependencies":[{"issue_id":"gt-17r","depends_on_id":"gt-f9x.4","type":"blocks","created_at":"2025-12-15T23:19:05.66301-08:00","created_by":"daemon"},{"issue_id":"gt-17r","depends_on_id":"gt-7ik","type":"blocks","created_at":"2025-12-17T15:44:41.945064-08:00","created_by":"daemon"}]} {"id":"gt-17zr","title":"gt refinery start: doesn't actually start a session","description":"## Problem\n\n`gt refinery start gastown` reports success but doesn't start a tmux session.\n\n## Evidence\n\n```\n$ gt refinery start gastown\nStarting refinery for gastown...\n✓ Refinery started for gastown\n\n$ tmux list-sessions | grep refinery\n(nothing)\n\n$ gt refinery status gastown\nState: ○ stopped\n```\n\n## Expected\n\nShould start a tmux session (e.g., gt-gastown-refinery) with Claude processing the merge queue.\n\n## Related\n\n- gt-kcee: Witness commands also need implementation\n- The refinery 'start' may just be updating state.json without spawning a session","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T21:58:57.188389-08:00","updated_at":"2025-12-19T01:33:49.858934-08:00","closed_at":"2025-12-19T01:33:49.858934-08:00"} @@ -46,7 +46,7 @@ {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T19:47:32.131386-08:00","updated_at":"2025-12-19T12:07:06.762207-08:00","closed_at":"2025-12-19T12:07:06.762207-08:00"} {"id":"gt-1gbf","title":"Digest: mol-deacon-patrol","description":"Patrol #5: Routine - 6 sessions healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:22:06.354723-08:00","updated_at":"2025-12-24T22:22:06.354723-08:00","closed_at":"2025-12-24T22:22:06.354692-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:44:43.300311-08:00","updated_at":"2025-12-24T23:44:43.300311-08:00","closed_at":"2025-12-24T23:44:43.30028-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-1i8r","depends_on_id":"gt-ry9o","type":"parent-child","created_at":"2025-12-24T23:44:43.300946-08:00","created_by":"stevey"}]} +{"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:44:43.300311-08:00","updated_at":"2025-12-24T23:44:43.300311-08:00","closed_at":"2025-12-24T23:44:43.30028-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-1iwk","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T00:20:50.772007-08:00","updated_at":"2025-12-25T01:33:00.763525-08:00","closed_at":"2025-12-25T01:33:00.763525-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-1iwk.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-1iwk\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T00:20:50.854609-08:00","updated_at":"2025-12-24T00:20:51.018152-08:00","closed_at":"2025-12-24T00:20:51.018152-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-1iwk.1","depends_on_id":"gt-1iwk","type":"parent-child","created_at":"2025-12-24T00:20:50.855058-08:00","created_by":"daemon"}]} {"id":"gt-1j6","title":"Document harness concept in docs/harness.md","description":"Create comprehensive harness documentation:\n- What is a harness (installation directory)\n- Recommended structure and naming\n- .beads/redirect for default project\n- config/ contents (rigs.json, town.json)\n- Mayor home vs rig-level mayor/\n- Example configurations\n- Relationship to rigs","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T17:15:37.559374-08:00","updated_at":"2025-12-19T12:07:31.407299-08:00","closed_at":"2025-12-19T12:07:31.407299-08:00","dependencies":[{"issue_id":"gt-1j6","depends_on_id":"gt-cr9","type":"blocks","created_at":"2025-12-17T17:15:51.974059-08:00","created_by":"daemon"}]} @@ -56,7 +56,7 @@ {"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-25T01:30:41.735893-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-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":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-19T14:44:43.188588-08:00","updated_at":"2025-12-19T17:22:52.550264-08:00","closed_at":"2025-12-19T16:03:20.714077-08:00"} {"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","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-1tqy","depends_on_id":"gt-pef6","type":"parent-child","created_at":"2025-12-24T23:10:24.122366-08:00","created_by":"stevey"}]} +{"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","close_reason":"Squashed from 8 wisps"} {"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-1wmw","title":"E2E Test: Verify mol-polecat-work spawn","description":"Simple test task for Phase 5 E2E validation","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T22:53:38.996878-08:00","updated_at":"2025-12-24T22:56:09.701942-08:00","closed_at":"2025-12-24T22:56:09.701942-08:00","close_reason":"Test issues - cleaned up"} {"id":"gt-1xsah","title":"Add gt role command group with env-based role detection","description":"# gt role Command Group\n\nMake role detection less fragile by using env var injection instead of cwd detection.\n\n## Env Vars\n- `GT_ROLE` - authoritative role name (mayor, witness, refinery, polecat, crew)\n- `GT_ROLE_HOME` - canonical home directory for the role\n\n## Detection Precedence\n1. `$GT_ROLE` env var (authoritative)\n2. Fall back to cwd-based detection (legacy/manual)\n3. Warn if they disagree\n\n## Subcommands\n- `gt role` / `gt role show` - show current role\n- `gt role home [ROLE]` - show home dir for role\n- `gt role detect` - force cwd-based detection (debugging)\n- `gt role list` - list all known roles\n- `gt role env` - print export statements\n\n## Integration Points\n- gt prime - show role, warn on mismatch\n- gt mol status - use gt role instead of own detection\n- gt handoff - preserve GT_ROLE, reset to home\n- All spawners - inject GT_ROLE and GT_ROLE_HOME\n\n## Background\nMayor wandered to refinery dir, handoff preserved it, role detection broke.\nEnv var injection makes role stable across cd operations.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-25T00:50:53.378051-08:00","updated_at":"2025-12-25T00:58:04.182138-08:00","closed_at":"2025-12-25T00:58:04.182138-08:00","close_reason":"Implemented gt role command group, updated prime/mol status/handoff for env-based role detection"} @@ -71,13 +71,13 @@ {"id":"gt-24dv.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T16:16:46.043612-08:00","updated_at":"2025-12-25T01:33:00.575043-08:00","closed_at":"2025-12-25T01:33:00.575043-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-24dv.1","depends_on_id":"gt-24dv","type":"parent-child","created_at":"2025-12-24T16:16:46.044066-08:00","created_by":"daemon"}]} {"id":"gt-25bf","title":"Mail coordination should use town-level database","description":"gt mail send/inbox should use ~/gt/.beads (town root) not rig-local beads. Cross-rig mail coordination (Witness \u003c-\u003e Mayor, polecat \u003c-\u003e Witness) needs to be in a shared location.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-20T07:52:18.374322-08:00","updated_at":"2025-12-20T07:57:27.714073-08:00","closed_at":"2025-12-20T07:57:27.714073-08:00"} {"id":"gt-272b","title":"Work on gt-role-template: Refine witness/CLAUDE.md role t...","description":"Work on gt-role-template: Refine witness/CLAUDE.md role template. Run 'bd show gt-role-template' to see the full issue.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-20T07:44:10.203384-08:00","updated_at":"2025-12-20T07:46:55.666605-08:00","closed_at":"2025-12-20T07:46:55.666605-08:00"} -{"id":"gt-2b9b","title":"Digest: mol-deacon-patrol","description":"Patrol 19","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:11:19.536607-08:00","updated_at":"2025-12-24T23:11:19.536607-08:00","closed_at":"2025-12-24T23:11:19.53657-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-2b9b","depends_on_id":"gt-slnw","type":"parent-child","created_at":"2025-12-24T23:11:19.53731-08:00","created_by":"stevey"}]} +{"id":"gt-2b9b","title":"Digest: mol-deacon-patrol","description":"Patrol 19","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:11:19.536607-08:00","updated_at":"2025-12-24T23:11:19.536607-08:00","closed_at":"2025-12-24T23:11:19.53657-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-2bz","title":"Swarm learning: Refinery merge queue automation","description":"Manually merging 15 polecat branches was painful and error-prone. Refinery should automate: detect completed work, run tests, merge to main, handle conflicts. This is core Refinery value prop.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T01:21:51.137974-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-2c1","title":"Swarm learning: Spawn should auto-notify polecats","description":"town spawn assigns issues but doesn't notify polecats. Required separate 'town session send' to inject prompts. This should be one atomic operation - spawn assigns AND pokes the polecat to start working.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T01:21:47.223608-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-2cd7","title":"Self-test","description":"Testing gt mail works","status":"closed","priority":2,"issue_type":"message","created_at":"2025-12-20T17:55:31.928025-08:00","updated_at":"2025-12-20T17:55:37.483125-08:00","closed_at":"2025-12-20T17:55:37.483125-08:00","labels":["from:gastown-crew-max","thread:thread-3a0ea7a99fce"]} -{"id":"gt-2dpg","title":"Digest: mol-deacon-patrol","description":"Patrol #8: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:32:34.26298-08:00","updated_at":"2025-12-24T23:32:34.26298-08:00","closed_at":"2025-12-24T23:32:34.262948-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-2dpg","depends_on_id":"gt-k1i5","type":"parent-child","created_at":"2025-12-24T23:32:34.263652-08:00","created_by":"stevey"}]} +{"id":"gt-2dpg","title":"Digest: mol-deacon-patrol","description":"Patrol #8: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:32:34.26298-08:00","updated_at":"2025-12-24T23:32:34.26298-08:00","closed_at":"2025-12-24T23:32:34.262948-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-2ebi","title":"Merge: gt-4ev4","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-4ev4\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T12:36:57.533878-08:00","updated_at":"2025-12-22T16:01:13.496679-08:00","closed_at":"2025-12-22T16:01:13.496679-08:00","close_reason":"Merged to main"} -{"id":"gt-2f3h","title":"Digest: mol-deacon-patrol","description":"Patrol #20: Stable, handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:35:50.776172-08:00","updated_at":"2025-12-24T23:35:50.776172-08:00","closed_at":"2025-12-24T23:35:50.776141-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-2f3h","depends_on_id":"gt-vgrg","type":"parent-child","created_at":"2025-12-24T23:35:50.776835-08:00","created_by":"stevey"}]} +{"id":"gt-2f3h","title":"Digest: mol-deacon-patrol","description":"Patrol #20: Stable, handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:35:50.776172-08:00","updated_at":"2025-12-24T23:35:50.776172-08:00","closed_at":"2025-12-24T23:35:50.776141-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-2jl","title":"Add bulk polecat remove command (gt polecat remove --all)","description":"When decommissioning a rig, need to remove multiple polecats one at a time. A --all or --rig flag would allow: gt polecat remove --rig gastown --force","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-18T11:33:35.206637-08:00","updated_at":"2025-12-18T11:38:53.829321-08:00","closed_at":"2025-12-18T11:38:53.829321-08:00"} {"id":"gt-2k4f","title":"mol-polecat-lease","description":"Semaphore tracking a single polecat's lifecycle.\nVars: {{polecat}}, {{issue}}\n\nUsed by Witness to track polecat lifecycle during patrol. The Witness bonds\nthis proto for each active polecat, creating a lease that tracks the polecat\nfrom spawn through work to cleanup.\n\n## Step: boot\nSpawned. Verify it starts working.\n\nCheck if the polecat is alive and working:\n```bash\ngt peek {{polecat}}\n```\n\nIf idle for too long, nudge:\n```bash\ngt nudge {{polecat}} \"Please start working on your assigned issue.\"\n```\n\nTimeout: 60s before escalation to Mayor.\n\n## Step: working\nActively 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.\nNeeds: boot\n\n## Step: done\nExit 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.\nNeeds: working","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-22T23:41:25.342615-08:00","updated_at":"2025-12-22T23:43:25.95034-08:00","labels":["template"]} {"id":"gt-2k4f.1","title":"boot","description":"Spawned. Verify the polecat starts working.\n\nCheck if the polecat is alive and working:\n```bash\ngt peek {{polecat}}\n```\n\nIf idle for too long (\u003e60s), nudge:\n```bash\ngt nudge {{polecat}} \"Please start working on your assigned issue.\"\n```\n\nTimeout: 60s before escalation to Mayor.\nVariables: {{polecat}}, {{issue}}","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T23:43:41.517464-08:00","updated_at":"2025-12-22T23:43:41.517464-08:00","dependencies":[{"issue_id":"gt-2k4f.1","depends_on_id":"gt-2k4f","type":"parent-child","created_at":"2025-12-22T23:43:41.517901-08:00","created_by":"daemon"}]} @@ -87,14 +87,14 @@ {"id":"gt-2n3f","title":"Merge conflicts: Buzzard/mq-status, Dementus/harness-docs","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T12:08:07.486349-08:00","updated_at":"2025-12-19T14:28:14.462028-08:00","closed_at":"2025-12-19T14:28:14.462028-08:00"} {"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":"closed","priority":4,"issue_type":"task","created_at":"2025-12-21T21:35:25.451396-08:00","updated_at":"2025-12-21T22:19:27.618156-08:00","closed_at":"2025-12-21T22:19:27.618156-08:00","close_reason":"Deferred to post-launch. The patterns work correctly for current functionality:\n- nil,nil returns are idiomatic Go for 'not found' cases\n- Error wrapping inconsistency is cosmetic, not functional\n- Would require significant refactoring to standardize\n\nTagged for v0.2 cleanup. Consider defining sentinel errors (ErrNotFound, etc.) for clearer semantics."} {"id":"gt-2p2","title":"Test message","description":"Testing GGT mail integration","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-17T14:04:50.045948-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"} -{"id":"gt-2qnj","title":"Digest: mol-deacon-patrol","description":"Patrol 17","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:56.381997-08:00","updated_at":"2025-12-24T23:10:56.381997-08:00","closed_at":"2025-12-24T23:10:56.38197-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-2qnj","depends_on_id":"gt-jxo5","type":"parent-child","created_at":"2025-12-24T23:10:56.38267-08:00","created_by":"stevey"}]} +{"id":"gt-2qnj","title":"Digest: mol-deacon-patrol","description":"Patrol 17","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:56.381997-08:00","updated_at":"2025-12-24T23:10:56.381997-08:00","closed_at":"2025-12-24T23:10:56.38197-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-2sw","title":"Plugin surface for daemon lifecycle hooks","description":"Allow rigs to customize daemon behavior via hooks/plugins.\n\n## Hook Points\n\n- on_heartbeat: Called during daemon heartbeat cycle\n- on_worker_idle: Called when worker goes idle\n- on_worker_stuck: Called when stuck detection triggers\n- on_lifecycle_request: Called before processing lifecycle\n\n## Configuration\n\n```\n\u003crig\u003e/config/daemon-hooks.json\n{\n \"on_heartbeat\": \"./hooks/check-ci-status.sh\",\n \"on_worker_idle\": \"./hooks/maybe-assign-work.sh\",\n \"idle_threshold\": \"5m\",\n \"custom_signals\": [\n {\"name\": \"ci_status\", \"command\": \"./hooks/get-ci.sh\"}\n ]\n}\n```\n\n## Signal Contribution\n\nHooks can return signals that feed into decision engine:\n- SKIP_POKE: Don't poke this agent\n- FORCE_POKE: Override backoff, poke now\n- CUSTOM_DATA: Extra context for logging\n\n## Use Cases\n\n- Check CI status before interrupting test runs\n- Auto-assign work when worker becomes idle\n- Custom stuck detection for specific workflows","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-18T14:19:34.702624-08:00","updated_at":"2025-12-18T14:19:34.702624-08:00","dependencies":[{"issue_id":"gt-2sw","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T14:19:47.035848-08:00","created_by":"daemon"}]} {"id":"gt-2tp","title":"init.go: Replace custom contains() with strings.Contains","status":"tombstone","priority":3,"issue_type":"bug","created_at":"2025-12-16T13:55:11.326407-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"} {"id":"gt-2ux","title":"gt uninstall: Clean removal of Gas Town harness","description":"Add 'gt uninstall' command to cleanly remove a Gas Town installation.\n\nShould:\n- Remove harness directory structure\n- Optionally preserve rigs/data with --keep-data flag\n- Warn about running sessions\n- Clean up any global config references","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:47:16.175246-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-2ux","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:22:47.419553-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-2xiv","title":"gt mail inbox doesn't find crew worker mail - identity mismatch","description":"## Problem\n\nCrew workers don't see their handoff messages when running `gt mail inbox` from their working directory.\n\n## Root Cause\n\ngt derives identity from cwd path, but crew workers have a different path structure:\n- **cwd**: `/Users/stevey/gt/beads/crew/dave`\n- **gt derives**: `beads/crew/dave` (wrong)\n- **should be**: `beads/dave` (crew workers use `rig/name` format)\n\nMessages sent to `beads/dave` don't show up because gt is looking for `beads/crew/dave`.\n\n## Workaround\n\nUse explicit identity flag:\n```bash\ngt mail inbox --identity \"beads/dave\"\n```\n\n## Fix\n\nIdentity detection in gt should handle crew/ subdirectory:\n- Path `\u003crig\u003e/crew/\u003cname\u003e` should derive identity as `\u003crig\u003e/\u003cname\u003e`\n- This matches how polecats work: `\u003crig\u003e/polecats/\u003cname\u003e` → `\u003crig\u003e/\u003cname\u003e`\n\n## Affected\n\nAll crew workers in all rigs.","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-22T00:34:02.290132-08:00","updated_at":"2025-12-22T00:39:32.499063-08:00","closed_at":"2025-12-22T00:39:32.499063-08:00","close_reason":"Fixed by normalizing crew/ and polecats/ to canonical form in addressToIdentity()"} {"id":"gt-2xsh","title":"Silent error handling with _ = err patterns","description":"Multiple locations intentionally ignore errors with comments like 'Ignore errors'. While some are valid (best-effort operations), others should be audited:\n\n- witness/manager.go:542 - Ignores cmd.Run() error\n- refinery/manager.go:411, 438, 509 - Ignores loadState and git pull errors\n- swarm/manager.go:47 - Ignores getGitHead error\n- polecat/manager.go:69, 284 - Ignores pool.Load and DeleteBranch errors\n- swarm/integration.go:101, 137 - Ignores git pull and push errors\n\nEach should be evaluated: log it, handle it, or confirm ignoring is intentional.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-21T21:35:11.239439-08:00","updated_at":"2025-12-21T22:19:09.113803-08:00","closed_at":"2025-12-21T22:19:09.113803-08:00","close_reason":"Audited all 10 '_ = err' patterns. All are intentional best-effort operations with appropriate comments:\n- Process signals: expected to fail if process already terminated\n- Git pull/push in recovery paths: best-effort, failures handled downstream\n- Message ack: will naturally retry on next cycle if fails\n- Pool loading: intentional for new rig initialization\n\nThese patterns are acceptable for launch. Consider adding structured logging for observability in future iterations."} {"id":"gt-2z6s","title":"bd sync: Handle mol-* prefix for protos gracefully","description":"When bd sync imports protos (mol-*), it warns about prefix mismatch. The allowed_prefixes config doesn't seem to apply to imports.\n\nCurrent behavior: bd sync fails import step with prefix mismatch error\nExpected: mol-* should be recognized as valid proto prefix, or allowed_prefixes should be respected\n\nWorkaround: The export/push still succeeds, only import fails.\n\nRelated: bd-47qx","status":"closed","priority":3,"issue_type":"bug","created_at":"2025-12-24T14:07:34.525817-08:00","updated_at":"2025-12-24T14:28:39.120965-08:00","closed_at":"2025-12-24T14:28:39.120965-08:00","close_reason":"Fixed in beads commit 25402184 - allowed_prefixes config now respected during import"} -{"id":"gt-2zaq","title":"Digest: mol-deacon-patrol","description":"Patrol 10","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:09:10.365013-08:00","updated_at":"2025-12-24T23:09:10.365013-08:00","closed_at":"2025-12-24T23:09:10.364985-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-2zaq","depends_on_id":"gt-gi5i","type":"parent-child","created_at":"2025-12-24T23:09:10.365649-08:00","created_by":"stevey"}]} +{"id":"gt-2zaq","title":"Digest: mol-deacon-patrol","description":"Patrol 10","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:09:10.365013-08:00","updated_at":"2025-12-24T23:09:10.365013-08:00","closed_at":"2025-12-24T23:09:10.364985-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-30o","title":"Error handling improvements: retry logic and recovery hints","description":"Improve error handling across GGT codebase.\n\n## Issues Found\n\n### 1. Silent Failures in Refinery\nmanager.go ProcessMR():\n- git pull errors ignored\n- Continues processing even on partial failures\n\n### 2. Missing Beads CLI\nMany operations silently continue if `bd` not found:\n```go\n// Current\ntasks, err := m.loadTasksFromBeads(epicID)\nif err != nil {\n // Non-fatal - swarm can start without tasks\n}\n\n// Better\nif err != nil {\n return nil, fmt.Errorf(\"beads required: %w\", err)\n}\n```\n\n### 3. No Retry Logic\nNetwork/lock errors should retry:\n```go\nfunc withRetry(attempts int, delay time.Duration, fn func() error) error {\n for i := 0; i \u003c attempts; i++ {\n if err := fn(); err == nil {\n return nil\n }\n time.Sleep(delay)\n }\n return fmt.Errorf(\"failed after %d attempts\", attempts)\n}\n```\n\n### 4. Recovery Hints\nError messages should include fix suggestions:\n```go\n// Current\nreturn fmt.Errorf(\"polecat not found\")\n\n// Better\nreturn fmt.Errorf(\"polecat '%s' not found. Use 'gt polecat list' to see available polecats\", name)\n```\n\n## Domain Error Types\n```go\ntype SessionError struct {\n Op string\n Polecat string\n Err error\n}\n\nfunc (e *SessionError) Error() string {\n return fmt.Sprintf(\"session %s for %s: %v\", e.Op, e.Polecat, e.Err)\n}\n```\n\n## Files to Review\n- internal/refinery/manager.go\n- internal/swarm/manager.go\n- internal/session/manager.go\n- All cmd/*.go files\n\n## Acceptance Criteria\n- [ ] No silent error swallowing\n- [ ] Retry logic for transient failures\n- [ ] Helpful error messages with hints\n- [ ] Consistent error types per domain","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:48:48.183421-08:00","updated_at":"2025-12-16T16:06:52.751546-08:00"} {"id":"gt-3133","title":"Account management for multi-account Claude Code usage","description":"Enable Gas Town to manage multiple Claude Code accounts (e.g., personal vs work) with easy switching. Core mechanism: CLAUDE_CONFIG_DIR env var per account. See docs/design/account-management.md for full design.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-23T03:23:35.825288-08:00","updated_at":"2025-12-23T04:04:28.216463-08:00","closed_at":"2025-12-23T04:04:28.216463-08:00","close_reason":"Account management fully implemented - config parsing, list/add/default commands, GT_ACCOUNT env var, --account flag","dependencies":[{"issue_id":"gt-3133","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:37.170307-08:00","created_by":"daemon"},{"issue_id":"gt-3133","depends_on_id":"gt-hs6y","type":"blocks","created_at":"2025-12-23T03:24:37.263123-08:00","created_by":"daemon"},{"issue_id":"gt-3133","depends_on_id":"gt-nq1a","type":"blocks","created_at":"2025-12-23T03:24:37.353483-08:00","created_by":"daemon"},{"issue_id":"gt-3133","depends_on_id":"gt-0c7s","type":"blocks","created_at":"2025-12-23T03:24:37.443494-08:00","created_by":"daemon"},{"issue_id":"gt-3133","depends_on_id":"gt-74a7","type":"blocks","created_at":"2025-12-23T03:24:37.534229-08:00","created_by":"daemon"},{"issue_id":"gt-3133","depends_on_id":"gt-plcg","type":"blocks","created_at":"2025-12-23T03:24:37.625162-08:00","created_by":"daemon"}]} {"id":"gt-31eg","title":"Epic: Async Gates for Agent Coordination","description":"## Summary\n\nAgents need an async primitive for waiting on external events (CI completion,\nAPI responses, human approval). Currently they either poll wastefully or cant\nresume after handoff.\n\n## Design: Deacon-Managed Gates\n\n### Core Concepts\n\n**Gate** = wisp issue that blocks until external condition is met\n- Type: `gate`\n- Phase: wisp (never synced, ephemeral)\n- Assignee: `deacon/` (Deacon monitors it)\n- Fields: `await_type`, `await_id`, `timeout`, `waiters[]`\n\n**Await Types:**\n- `gh:run:\u003cid\u003e` - GitHub Actions run completion\n- `gh:pr:\u003cid\u003e` - PR merged/closed\n- `timer:\u003cduration\u003e` - Simple delay (e.g., \"5m\", \"1h\")\n- `human:\u003cprompt\u003e` - Human approval required\n- `mail:\u003cpattern\u003e` - Wait for mail matching pattern\n\n### Commands\n\n```bash\nbd gate create --await \u003ctype\u003e:\u003cid\u003e --timeout \u003cduration\u003e --notify \u003caddr\u003e\nbd gate show \u003cid\u003e\nbd gate list\nbd gate close \u003cid\u003e --reason \"completed\"\nbd gate wait \u003cid\u003e --notify \u003caddr\u003e\n```\n\n## Children (suggested breakdown)\n\n1. Add `gate` issue type to beads\n2. Add gate fields: await_type, await_id, timeout, waiters\n3. Implement `bd gate create/show/list/close/wait` commands\n4. Add gate checking to Deacon patrol loop\n5. Implement await type handlers (gh:run, gh:pr, timer, human, mail)\n6. Add gate timeout tracking and notification\n7. Integration test: agent waits for CI via gate\n\n## Open Questions\n\n- Should gates live in wisp storage or main storage with wisp flag?\n- Do we need a gate catalog (like molecule catalog)?\n- Should `waits-for` dep type work with gates?","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-24T19:19:17.774543-08:00","updated_at":"2025-12-24T19:19:17.774543-08:00"} @@ -113,7 +113,7 @@ {"id":"gt-3ep6.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:24:17.623539-08:00","updated_at":"2025-12-25T01:33:00.369595-08:00","closed_at":"2025-12-25T01:33:00.369595-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-3ep6.1","depends_on_id":"gt-3ep6","type":"parent-child","created_at":"2025-12-24T21:24:17.623915-08:00","created_by":"daemon"}]} {"id":"gt-3fm","title":"Mail orchestrator daemon","description":"Background mail orchestrator daemon.\n\n## Command\n```\ngt mail orchestrate [--interval N] [--once] [--verbose]\n```\n\n## Purpose\nBackground process that:\n1. Monitors outbox for pending mail\n2. Delivers to recipient inboxes\n3. Handles offline recipients (retry later)\n4. Cleans delivered messages from outbox\n\n## Why Needed?\nCurrent mail is synchronous. If recipient is offline or mailbox locked, send fails.\nOrchestrator enables async delivery with retry.\n\n## Implementation\n```go\nfunc (o *Orchestrator) Run(interval time.Duration) error {\n ticker := time.NewTicker(interval)\n for range ticker.C {\n o.processOutbox()\n }\n}\n\nfunc (o *Orchestrator) processOutbox() {\n // List outbox/*.json\n // For each, attempt delivery\n // On success, delete from outbox\n // On failure, increment retry count\n}\n```\n\n## Outbox Structure\n```\n\u003ctown\u003e/mayor/mail/outbox/\n├── msg-abc123.json\n└── msg-def456.json\n```\n\n## Lower Priority\nCurrent synchronous delivery works. Orchestrator is optimization.\n\n## Acceptance Criteria\n- [ ] Background daemon mode\n- [ ] Retry failed deliveries\n- [ ] --once for single pass\n- [ ] Configurable interval","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T14:48:29.830841-08:00","updated_at":"2025-12-16T16:07:35.973257-08:00"} {"id":"gt-3htc","title":"Digest: mol-deacon-patrol","description":"Patrol #7","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:23:00.657254-08:00","updated_at":"2025-12-24T22:23:00.657254-08:00","closed_at":"2025-12-24T22:23:00.657225-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-3lygr","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:50:46.338114-08:00","updated_at":"2025-12-24T23:50:46.338114-08:00","closed_at":"2025-12-24T23:50:46.338079-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-3lygr","depends_on_id":"gt-tzdpb","type":"parent-child","created_at":"2025-12-24T23:50:46.338779-08:00","created_by":"stevey"}]} +{"id":"gt-3lygr","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:50:46.338114-08:00","updated_at":"2025-12-24T23:50:46.338114-08:00","closed_at":"2025-12-24T23:50:46.338079-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-3ndj","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:44","description":"Patrol 7: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:44:48.99583-08:00","updated_at":"2025-12-24T19:44:48.99583-08:00","closed_at":"2025-12-24T19:44:48.995758-08:00","close_reason":"Squashed from wisp gt-zim (9 issues)"} {"id":"gt-3njt","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T22:27:56.249779-08:00","updated_at":"2025-12-25T01:33:01.313342-08:00","closed_at":"2025-12-25T01:33:01.313342-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-3njt.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:27:56.338702-08:00","updated_at":"2025-12-25T01:33:00.978684-08:00","closed_at":"2025-12-25T01:33:00.978684-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-3njt.1","depends_on_id":"gt-3njt","type":"parent-child","created_at":"2025-12-23T22:27:56.33906-08:00","created_by":"daemon"}]} @@ -125,7 +125,7 @@ {"id":"gt-3suf.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:51:29.631575-08:00","updated_at":"2025-12-25T01:33:00.879011-08:00","closed_at":"2025-12-25T01:33:00.879011-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-3suf.1","depends_on_id":"gt-3suf","type":"parent-child","created_at":"2025-12-23T22:51:29.632136-08:00","created_by":"daemon"}]} {"id":"gt-3tssq","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:57:47.316871-08:00","updated_at":"2025-12-25T01:33:00.154321-08:00","closed_at":"2025-12-25T01:33:00.154321-08:00","close_reason":"Test pollution cleanup"} {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:57:47.407091-08:00","updated_at":"2025-12-25T00:57:47.592959-08:00","closed_at":"2025-12-25T00:57:47.592959-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-3tssq.1","depends_on_id":"gt-3tssq","type":"parent-child","created_at":"2025-12-25T00:57:47.407592-08:00","created_by":"daemon"}]} -{"id":"gt-3twz","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All systems nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:46:05.137994-08:00","updated_at":"2025-12-24T23:46:05.137994-08:00","closed_at":"2025-12-24T23:46:05.137962-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-3twz","depends_on_id":"gt-qrf8","type":"parent-child","created_at":"2025-12-24T23:46:05.138661-08:00","created_by":"stevey"}]} +{"id":"gt-3twz","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All systems nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:46:05.137994-08:00","updated_at":"2025-12-24T23:46:05.137994-08:00","closed_at":"2025-12-24T23:46:05.137962-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-3tz","title":"CLI: polecat commands (add, list, wake, sleep, decommission)","description":"GGT is missing most polecat management commands that PGT has.\n\nMissing Commands:\n- gt polecat add \u003crig\u003e \u003cname\u003e - Add polecat to rig (creates clone)\n- gt polecat list [\u003crig\u003e] - List polecats with state\n- gt polecat info \u003cpolecat\u003e - Show detailed info\n- gt polecat wake \u003cpolecat\u003e - Mark available\n- gt polecat sleep \u003cpolecat\u003e - Mark unavailable \n- gt polecat decommission \u003cpolecat\u003e - Remove polecat safely\n\nPGT Reference: gastown-py/src/gastown/cli/polecat_cmd.py\n\nNotes:\n- spawn exists but doesn't cover management\n- wake/sleep are in polecat manager but not CLI\n- decommission should check for uncommitted work","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T14:46:31.326692-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-3x0z","title":"Epic: Wisp Molecule Integration","description":"## Vision\n\nIntegrate Beads wisp molecules into Gas Town. All orchestration work runs as wisp molecules - patrols, polecat workflows, batch operations. Only digests reach main beads.\n\n## The Steam Engine Metaphor\n\n```\nEngine does work → generates steam\nSteam wisps rise → execution trace\nSteam condenses → digest (distillate) \nSteam dissipates → cleaned up (burned)\n```\n\n## Architecture\n\n```\nProto Molecules (templates)\n ↓ bd mol bond\nWisps (.beads-wisps/ or inline)\n ↓ bd mol squash + AI summary\nMain Beads (digests only)\n```\n\n## Vocabulary\n\n| Term | Meaning |\n|------|---------|\n| bond | Attach proto to work (creates wisps) |\n| wisp | Temporary execution step (steam rising) |\n| squash | Condense wisps into digest |\n| burn | Destroy wisps without record |\n| digest | Permanent condensed record (distillate) |\n\n## Key Design Decisions\n\n1. **Wisp location**: Per-rig or inline in main beads with wisp flag\n2. **Summary generation**: Agent that did work generates summary (inversion of control)\n3. **Squash timing**: Final step of molecule workflow, before signaling done\n4. **Crash recovery**: Wisps persist, Witness detects stalls, new agent resumes\n5. **Patrols**: Each cycle is fresh wisp molecule, squashed on completion\n\n## Digest Contents\n\n- Molecule type and instance ID\n- Assignee, start/end times\n- Source issue reference\n- AI-generated summary\n- Outcomes (issues closed, commits, branches)\n\n## Integration Points\n\n- gt rig init: Configure wisp storage\n- gt spawn --molecule: Bond creates wisps\n- gt prime: Show wisp molecule context\n- Polecat CLAUDE.md: Summary + squash protocol\n- gt doctor: Wisp health checks\n- Deacon/Witness/Refinery: Patrol molecules\n\n## Phases\n\nPhase 1: Wisp setup infrastructure\nPhase 2: Spawn integration\nPhase 3: Completion flow (summary + squash)\nPhase 4: Patrol integration\nPhase 5: Documentation and polish","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-21T14:33:03.15592-08:00","updated_at":"2025-12-25T02:11:07.550609-08:00","closed_at":"2025-12-25T02:11:07.550609-08:00","close_reason":"Core functionality complete. Remaining P2/P3 children are enhancements that can be tracked independently."} {"id":"gt-3x0z.1","title":"Phase 1.1: gt rig init creates .beads-ephemeral/","description":"Add ephemeral beads repo creation to rig initialization.\n\n## Implementation\n\nIn `gt rig init` (or equivalent setup):\n1. Create `\u003crig\u003e/.beads-ephemeral/` directory\n2. Initialize as git repo\n3. Create minimal beads config (no sync-branch needed)\n4. Add to .gitignore if not already\n\n## Config\n\n```yaml\n# .beads-ephemeral/config.yaml\nephemeral: true\n# No sync-branch - ephemeral is local only\n```\n\n## Verification\n\n```bash\ngt rig init gastown\nls gastown/.beads-ephemeral/ # Should exist\n```","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/furiosa","created_at":"2025-12-21T14:33:23.699253-08:00","updated_at":"2025-12-21T15:32:05.045296-08:00","closed_at":"2025-12-21T15:32:05.045296-08:00","close_reason":"Added initEphemeralBeads to rig add, creates .beads-ephemeral/ with git init and config.yaml","dependencies":[{"issue_id":"gt-3x0z.1","depends_on_id":"gt-3x0z","type":"parent-child","created_at":"2025-12-21T14:33:23.701082-08:00","created_by":"daemon"}]} @@ -155,11 +155,11 @@ {"id":"gt-43qg","title":"Test: release command verification","notes":"Released: testing release command","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-19T16:15:30.845537-08:00","updated_at":"2025-12-19T16:15:55.084052-08:00","closed_at":"2025-12-19T16:15:55.084052-08:00"} {"id":"gt-43tw","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 1: inbox clear, 8 in-progress issues, sessions healthy, gc not implemented","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T13:14:27.653577-08:00","updated_at":"2025-12-23T13:14:27.653577-08:00","closed_at":"2025-12-23T13:14:27.653542-08:00","close_reason":"Squashed from 4 wisps"} {"id":"gt-44wh","title":"Polecats must not create GitHub PRs","description":"Polecats should never use 'gh pr create' or create GitHub pull requests.\n\n## Correct Workflow\n1. Polecat works on polecat/\u003cname\u003e branch\n2. Commits and pushes to origin\n3. Creates beads MR issue (type: merge-request)\n4. Refinery processes the MR and merges to main\n\n## Wrong Workflow\n- Using gh pr create\n- Creating GitHub pull requests directly\n\n## Why\n- Refinery is our merge queue processor\n- GitHub PRs bypass our workflow\n- Beads MRs are the coordination mechanism","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-21T16:40:33.204449-08:00","updated_at":"2025-12-25T01:27:29.223395-08:00","closed_at":"2025-12-25T01:27:29.223395-08:00","close_reason":"Fixed: mol-polecat-work submit-merge step explicitly instructs no GitHub PRs"} -{"id":"gt-45eap","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:35:28.976495-08:00","updated_at":"2025-12-25T00:35:28.976495-08:00","closed_at":"2025-12-25T00:35:28.976463-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-45eap","depends_on_id":"gt-sgdsb","type":"parent-child","created_at":"2025-12-25T00:35:28.977267-08:00","created_by":"stevey"}]} +{"id":"gt-45eap","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:35:28.976495-08:00","updated_at":"2025-12-25T00:35:28.976495-08:00","closed_at":"2025-12-25T00:35:28.976463-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-21T21:34:21.808261-08:00","updated_at":"2025-12-21T21:59:54.041276-08:00","closed_at":"2025-12-21T21:59:54.041276-08:00","close_reason":"Simplified spawn.go to use bd mol run"} {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-21T21:34:47.807929-08:00","updated_at":"2025-12-21T22:19:59.416507-08:00","closed_at":"2025-12-21T22:19:59.416507-08:00","close_reason":"Deferred to post-launch. Test coverage improvement is ongoing work, not blocking for launch. Current tests cover critical paths; additional coverage can be added incrementally."} {"id":"gt-48bs","title":"gt rig reset: clear stale mail on reset/land","description":"## Problem\n\nWhen resetting or landing a rig/town, stale mail messages can confuse agents on startup. Old handoff messages, daemon notifications, and inter-agent mail should be cleaned up as part of reset.\n\n## Current State\n\n- `gt rig reset` exists but doesn't clear mail\n- Stale messages accumulate (e.g., daemon SHUTDOWN messages)\n- Agents may read outdated context on startup\n\n## Proposed Behavior\n\n`gt rig reset` and `gt town reset` should:\n1. Close all open messages (`--type=message`) in the relevant beads\n2. Optionally preserve pinned handoff beads (clear content, keep bead)\n3. Log what was cleaned up\n\n```bash\ngt rig reset gastown # Clears gastown mail\ngt rig reset gastown --mail # Only clear mail, keep other state\ngt town reset # Clears all town-level mail\ngt town reset --all # Clears mail in all rigs too\n```\n\n## Implementation\n\n1. Query `bd list --type=message --status=open`\n2. Close each with reason 'Cleared during reset'\n3. For pinned handoffs: `bd update \u003cid\u003e --description=''` instead of close","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T11:42:17.769674-08:00","updated_at":"2025-12-21T11:27:49.532203-08:00","closed_at":"2025-12-21T11:27:49.532203-08:00","close_reason":"Added --mail flag to gt rig reset"} -{"id":"gt-4bqfm","title":"Digest: mol-deacon-patrol","description":"Patrol 16: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:52:36.272187-08:00","updated_at":"2025-12-24T23:52:36.272187-08:00","closed_at":"2025-12-24T23:52:36.272146-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-4bqfm","depends_on_id":"gt-vmwrv","type":"parent-child","created_at":"2025-12-24T23:52:36.272895-08:00","created_by":"stevey"}]} +{"id":"gt-4bqfm","title":"Digest: mol-deacon-patrol","description":"Patrol 16: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:52:36.272187-08:00","updated_at":"2025-12-24T23:52:36.272187-08:00","closed_at":"2025-12-24T23:52:36.272146-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-4eim","title":"gt nudge should accept flexible session identifiers","description":"Currently `gt nudge` requires the exact tmux session name (e.g., `gt-gastown-furiosa`).\n\nIt should also accept:\n- `gastown/furiosa` (rig/polecat format)\n- `furiosa` (polecat name, infer rig from cwd or require if ambiguous)\n\nThe session list command shows `gastown/furiosa` format, but nudge rejects it:\n```\ngt session list → shows 'gastown/furiosa'\ngt nudge gastown/furiosa 'msg' → 'session not found'\ngt nudge gt-gastown-furiosa 'msg' → works\n```\n\nShould normalize all these formats to the tmux session name internally.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-21T15:36:45.013475-08:00","updated_at":"2025-12-23T14:30:11.942309-08:00"} {"id":"gt-4ev4","title":"Implement gt sling command","description":"The unified work dispatch command.\n\n```bash\ngt sling \u003cthing\u003e \u003ctarget\u003e [options]\n```\n\nImplements spawn + assign + pin in one operation. See sling-design.md.\n\nAcceptance:\n- [ ] Parse thing (proto name, issue ID, epic ID)\n- [ ] Parse target (agent address) \n- [ ] Spawn molecule if proto\n- [ ] Assign to target agent\n- [ ] Pin to agent's hook (pinned bead)\n- [ ] Support --wisp flag for ephemeral\n- [ ] Support --molecule flag for issue+workflow\n- [ ] Error if hook already occupied (unless --force)","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/furiosa","created_at":"2025-12-22T03:17:27.273013-08:00","updated_at":"2025-12-22T12:33:43.076291-08:00","closed_at":"2025-12-22T12:33:43.076291-08:00","close_reason":"Closed"} {"id":"gt-4fdi","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:48","description":"Patrol 20: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:48:32.167102-08:00","updated_at":"2025-12-24T19:48:32.167102-08:00","closed_at":"2025-12-24T19:48:32.167045-08:00","close_reason":"Squashed from wisp gt-8uy (9 issues)"} @@ -171,9 +171,9 @@ {"id":"gt-4nn.4","title":"Built-in molecules: engineer-in-box, quick-fix, research","description":"Create built-in molecules as Beads issues:\n\n## engineer-in-box\n\n```markdown\nid: mol-engineer-in-box\ntype: molecule\ntitle: Engineer in a Box\n\nFull workflow from design to merge.\n\n## Step: design\nThink carefully about architecture. Consider:\n- Existing patterns in the codebase\n- Trade-offs between approaches \n- Testability and maintainability\n\nWrite a brief design summary before proceeding.\n\n## Step: implement\nWrite the code. Follow codebase conventions.\nNeeds: design\n\n## Step: review\nSelf-review the changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\nNeeds: implement\n\n## Step: test\nWrite and run tests. Cover happy path and edge cases.\nFix any failures before proceeding.\nNeeds: implement\n\n## Step: submit\nSubmit for merge via refinery.\nNeeds: review, test\n```\n\n## quick-fix\n\n```markdown\nid: mol-quick-fix\ntype: molecule \ntitle: Quick Fix\n\nFast path for small changes.\n\n## Step: implement\nMake the fix. Keep it focused.\n\n## Step: test\nRun relevant tests. Fix any regressions.\nNeeds: implement\n\n## Step: submit\nSubmit for merge.\nNeeds: test\n```\n\n## research\n\n```markdown\nid: mol-research\ntype: molecule\ntitle: Research\n\nInvestigation workflow.\n\n## Step: investigate\nExplore the question. Search code, read docs, \nunderstand context. Take notes.\n\n## Step: document\nWrite up findings. Include:\n- What you learned\n- Recommendations\n- Open questions\nNeeds: investigate\n```\n\n## Storage\n\nBuilt-in molecules live in `\u003ctown\u003e/.beads/` as regular issues.\nCreated during `gt install` or `bd init`.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T18:07:04.574565-08:00","updated_at":"2025-12-19T12:02:19.332406-08:00","closed_at":"2025-12-19T12:02:19.332406-08:00","dependencies":[{"issue_id":"gt-4nn.4","depends_on_id":"gt-4nn","type":"parent-child","created_at":"2025-12-18T18:07:04.576587-08:00","created_by":"daemon"}]} {"id":"gt-4put","title":"execute-actions","description":"Send nudges, process shutdowns, escalate as decided.\n\nNeeds: decide-actions","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:18:21.59918-08:00","updated_at":"2025-12-23T16:18:21.59918-08:00","dependencies":[{"issue_id":"gt-4put","depends_on_id":"gt-qp2w","type":"parent-child","created_at":"2025-12-23T16:18:21.606851-08:00","created_by":"stevey"}]} {"id":"gt-4qey","title":"gt mail: Cross-level routing is broken","description":"When Mayor sends mail to rig worker, message lands in wrong beads database. Sender's beads vs recipient's.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-20T17:57:35.617292-08:00","updated_at":"2025-12-20T18:35:53.30276-08:00","closed_at":"2025-12-20T18:35:53.30276-08:00"} -{"id":"gt-4qiqp","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:01:10.250364-08:00","updated_at":"2025-12-25T00:01:10.250364-08:00","closed_at":"2025-12-25T00:01:10.250335-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-4qiqp","depends_on_id":"gt-6ildv","type":"parent-child","created_at":"2025-12-25T00:01:10.251065-08:00","created_by":"stevey"}]} -{"id":"gt-4ry6","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Quick scan, stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:06:31.826181-08:00","updated_at":"2025-12-24T23:06:31.826181-08:00","closed_at":"2025-12-24T23:06:31.826149-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-4ry6","depends_on_id":"gt-d5fm","type":"parent-child","created_at":"2025-12-24T23:06:31.827812-08:00","created_by":"stevey"}]} -{"id":"gt-4tfp","title":"Digest: mol-deacon-patrol","description":"Patrol #5: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:31:29.654233-08:00","updated_at":"2025-12-24T23:31:29.654233-08:00","closed_at":"2025-12-24T23:31:29.654202-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-4tfp","depends_on_id":"gt-mpo6","type":"parent-child","created_at":"2025-12-24T23:31:29.655521-08:00","created_by":"stevey"}]} +{"id":"gt-4qiqp","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:01:10.250364-08:00","updated_at":"2025-12-25T00:01:10.250364-08:00","closed_at":"2025-12-25T00:01:10.250335-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-4ry6","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Quick scan, stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:06:31.826181-08:00","updated_at":"2025-12-24T23:06:31.826181-08:00","closed_at":"2025-12-24T23:06:31.826149-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-4tfp","title":"Digest: mol-deacon-patrol","description":"Patrol #5: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:31:29.654233-08:00","updated_at":"2025-12-24T23:31:29.654233-08:00","closed_at":"2025-12-24T23:31:29.654202-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-4u5z","title":"Refinery as Worktree: Local MR Integration","description":"Move refinery from separate clone to git worktree. Polecats stop pushing to origin - refinery sees their branches locally. MRs become wisps (ephemeral). Only main gets pushed after merge.\n\n## Goals\n- Origin stays clean (only main + beads-sync branches)\n- No orphaned polecat branches ever\n- Simpler mental model for MR coordination\n- Faster integration (no network for local MR ops)\n\n## Trade-offs\n- Machine crash = redo pending work (acceptable, beads track state)\n- Future federation needs different approach (bundles or integration branch)\n\n## Components Affected\n- Rig initialization (refinery setup)\n- Spawn/polecat workflow (remove origin push)\n- Refinery manager (local branch access)\n- Documentation (architecture, workflows)\n- Molecule templates (remove push instructions)","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-23T20:24:56.517669-08:00","updated_at":"2025-12-23T21:28:22.512455-08:00","closed_at":"2025-12-23T21:28:22.512455-08:00","close_reason":"Complete: refinery as worktree, local branches, wisp MRs"} {"id":"gt-4u5z.1","title":"Update rig init to create refinery as worktree","description":"Modify rig initialization to create refinery as a git worktree instead of a separate clone.\n\n## Changes\n- internal/rig/init.go or similar - change refinery setup\n- Create worktree at \u003crig\u003e/refinery/ with branch 'refinery'\n- Remove clone logic for refinery\n- Update any path assumptions\n\n## Considerations\n- Refinery worktree should track main (or its own branch?)\n- May need to handle existing rigs (migration path)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T20:25:25.927013-08:00","updated_at":"2025-12-23T20:31:07.100875-08:00","closed_at":"2025-12-23T20:31:07.100875-08:00","close_reason":"Rig init now creates refinery as worktree of mayor clone","dependencies":[{"issue_id":"gt-4u5z.1","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:25.92745-08:00","created_by":"daemon"}]} {"id":"gt-4u5z.2","title":"Remove origin push from polecat workflow","description":"Polecats should no longer push their branches to origin.\n\n## Changes\n- internal/cmd/done.go - remove 'git push origin HEAD'\n- internal/cmd/mq_submit.go - remove branch push\n- Molecule templates - remove push instructions\n- Any hooks that push polecat branches\n\n## Verification\n- Polecat completes work without pushing\n- Branch stays local\n- Refinery can still see the branch (via shared .git)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T20:25:27.079456-08:00","updated_at":"2025-12-23T20:33:43.173059-08:00","closed_at":"2025-12-23T20:33:43.173059-08:00","close_reason":"Removed origin push from done.go, mq_submit.go, spawn.go, and molecule templates","dependencies":[{"issue_id":"gt-4u5z.2","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:27.081989-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.2","depends_on_id":"gt-4u5z.1","type":"blocks","created_at":"2025-12-23T20:25:43.547484-08:00","created_by":"daemon"}]} @@ -183,7 +183,7 @@ {"id":"gt-4u5z.6","title":"Design future federation model","description":"Document how remote/federated refinery would work in the future.\n\n## Options to document\n1. Git bundles - portable patches, no branches on origin\n2. Dedicated integration branch pattern (integration/*)\n3. Hybrid - local for same-machine, bundles for remote\n\n## Deliverable\nDesign doc in docs/federation-refinery.md or similar.\nNot implementing now - just capturing the design for when needed.","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T20:25:32.265488-08:00","updated_at":"2025-12-23T21:28:20.96312-08:00","closed_at":"2025-12-23T21:28:20.96312-08:00","close_reason":"Deferred - will address if/when needed","dependencies":[{"issue_id":"gt-4u5z.6","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:32.267467-08:00","created_by":"daemon"}]} {"id":"gt-4u5z.7","title":"Add migration path for existing rigs","description":"Existing rigs have refinery as clone. Need migration path.\n\n## Options\n1. Manual: User runs 'gt rig migrate' or similar\n2. Automatic: Detect clone, convert to worktree on next start\n3. Deprecation: Old rigs work but warn, new rigs use worktree\n\n## Considerations\n- Don't break existing setups\n- Clear upgrade path\n- Handle in-flight MRs during migration","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-23T20:25:33.746893-08:00","updated_at":"2025-12-23T21:28:20.972695-08:00","closed_at":"2025-12-23T21:28:20.972695-08:00","close_reason":"Deferred - will address if/when needed","dependencies":[{"issue_id":"gt-4u5z.7","depends_on_id":"gt-4u5z","type":"parent-child","created_at":"2025-12-23T20:25:33.749766-08:00","created_by":"daemon"},{"issue_id":"gt-4u5z.7","depends_on_id":"gt-4u5z.1","type":"blocks","created_at":"2025-12-23T20:25:44.086388-08:00","created_by":"daemon"}]} {"id":"gt-4xas","title":"Merge fix/spawn-beads-path branch to main","description":"Branch has gt nudge command; main has notification deduplication. Both valuable.\n\nKey insight: Only ~10 commits diverged each way in mayor/rig.\n- Branch: 9509afa feat(nudge): Add gt nudge command (MISSING from main)\n- Main: d2fccd5 slot-based notification deduplication (KEEP)\n\nMerge plan:\n1. git merge fix/spawn-beads-path --no-ff\n2. Keep nudge.go from branch\n3. Keep notification.go from main\n4. Merge tmux.go (both NudgeSession AND SendKeysReplace)\n5. go build \u0026\u0026 go test\n6. Deploy to ~/.local/bin/gt","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T13:28:01.684557-08:00","updated_at":"2025-12-20T13:30:55.817964-08:00","closed_at":"2025-12-20T13:30:55.817964-08:00"} -{"id":"gt-4z54b","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:47:58.060935-08:00","updated_at":"2025-12-24T23:47:58.060935-08:00","closed_at":"2025-12-24T23:47:58.060903-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-4z54b","depends_on_id":"gt-u2kd","type":"parent-child","created_at":"2025-12-24T23:47:58.061661-08:00","created_by":"stevey"}]} +{"id":"gt-4z54b","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:47:58.060935-08:00","updated_at":"2025-12-24T23:47:58.060935-08:00","closed_at":"2025-12-24T23:47:58.060903-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-4z7j","title":"Test patrol queue feature","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-23T16:17:34.358185-08:00","updated_at":"2025-12-25T01:33:01.296091-08:00","closed_at":"2025-12-25T01:33:01.296091-08:00","close_reason":"Test pollution cleanup"} {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T15:02:39.807659-08:00","updated_at":"2025-12-19T12:09:58.544102-08:00","closed_at":"2025-12-19T12:09:58.544102-08:00"} {"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":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T00:32:25.162966-08:00","updated_at":"2025-12-23T00:32:25.162966-08:00","closed_at":"2025-12-23T00:32:25.162917-08:00","close_reason":"Squashed from 5 wisps"} @@ -195,7 +195,7 @@ {"id":"gt-56u5","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:37:39.062293-08:00","updated_at":"2025-12-24T22:37:39.062293-08:00","closed_at":"2025-12-24T22:37:39.062262-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-58it","title":"bd sync --from-main: fresh sync from main branch","description":"## Summary\n\nAdd `--from-main` flag to `bd sync` to pull fresh beads state from main branch.\n\n## Use Case\n\nWhen starting a patrol or fresh session, agent wants clean beads state:\n```bash\nbd sync --from-main # Pull latest from origin/main, ignore local changes\n```\n\n## Behavior\n\n1. Fetch origin/main\n2. Reset local .beads/ to match origin/main\n3. Rebuild SQLite DB from fresh JSONL\n\nUseful for polecats/crew starting work to avoid stale state.","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-23T01:19:14.352299-08:00","updated_at":"2025-12-23T01:19:14.352299-08:00"} {"id":"gt-58tu","title":"Add accounts.yaml config parsing to gt","description":"Parse ~/gt/mayor/accounts.yaml with structure: accounts map (handle -\u003e email, config_dir) and default field. This is the foundational config that other account features depend on. Location follows existing town-level config pattern in mayor/.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:16.934245-08:00","updated_at":"2025-12-23T03:57:04.069364-08:00","closed_at":"2025-12-23T03:57:04.069364-08:00","close_reason":"Implemented accounts.json config parsing with types, loader, validation, and tests"} -{"id":"gt-58yb","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:07:04.211464-08:00","updated_at":"2025-12-24T23:07:04.211464-08:00","closed_at":"2025-12-24T23:07:04.211427-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-58yb","depends_on_id":"gt-7nwc","type":"parent-child","created_at":"2025-12-24T23:07:04.212136-08:00","created_by":"stevey"}]} +{"id":"gt-58yb","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:07:04.211464-08:00","updated_at":"2025-12-24T23:07:04.211464-08:00","closed_at":"2025-12-24T23:07:04.211427-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-59p","title":"Design GGT prompt architecture","description":"Audit PGT prompts and design canonical prompt system for GGT. Create docs/prompts.md with inventory, gap analysis, and Witness prompt design.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T00:46:16.916031-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-59zd","title":"Molecule-based Witness Patrol","description":"Wire up mol-witness-patrol as a tracking ledger for the Go-based witness.\n\n## Key Insight\n\nThe molecule is NOT an executor - it's a **tracking structure**. The existing\nGo code in internal/witness/manager.go continues to run the patrol loop.\nThe molecule instance provides visibility, audit trail, and polecat tracking.\n\n## Current State\n\n- Witness runs as Go code with direct patrol logic\n- mol-witness-patrol and mol-polecat-arm exist as molecule definitions\n- gt mol bond creates dynamic children\n- No molecule tracking of actual witness operations\n\n## Target State\n\n1. When witness starts → instantiate mol-witness-patrol on its hook\n2. When Go code discovers polecat → bond mol-polecat-arm child\n3. When polecat completes/dies → close that arm issue\n4. gt mol progress shows current patrol state\n5. Molecule survives wisp burns via handoff bead\n\n## Benefits\n\n- Visibility: gt mol status gastown/witness shows active arms\n- Audit: Each polecat inspection is a trackable issue\n- Consistency: Same tracking model as polecats with molecules\n- Progress: gt mol progress works for witness too\n\n## Non-Goals\n\n- NOT replacing Go code with Claude session\n- NOT running molecule steps as prompts\n- NOT requiring Claude for witness operation","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-23T22:19:33.06695-08:00","updated_at":"2025-12-23T22:36:17.494482-08:00","closed_at":"2025-12-23T22:36:17.494482-08:00","close_reason":"CANCELLED: Wrong architecture. Go-based witness patrol with molecule-as-tracking-ledger is backwards. Claude session executes mol steps directly - the mol IS the executor, not bookkeeping. Also: subtasks were hallucinated as 'done' without actual code commits."} {"id":"gt-59zd.1","title":"mol sling command: attach molecule to agent hook","description":"Add `gt mol sling \u003cmolecule-id\u003e` command to attach a molecule to the current agent's hook.\n\n## Behavior\n\n```bash\ngt mol sling mol-witness-patrol\n```\n\n1. Find agent identity from cwd (witness, polecat, crew, etc.)\n2. Find or create agent's handoff bead\n3. Attach molecule to handoff bead (attached_molecule field)\n4. Create root issue for this molecule instance\n5. Instantiate molecule steps under the root\n\n## Difference from mol attach\n\n- `mol attach` attaches to an existing pinned bead\n- `mol sling` creates a fresh instance for execution\n\n## Output\n\n```\n🧬 Slung mol-witness-patrol on gastown/witness\n Instance: gt-xyz (9 steps)\n First step: inbox-check\n```\n\n## Implementation\n\n- Reuse InstantiateMolecule from molecule.go\n- Create wrapper issue for the instance\n- Set attached_molecule on handoff bead","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T22:19:45.161282-08:00","updated_at":"2025-12-23T22:36:17.505507-08:00","closed_at":"2025-12-23T22:36:17.505507-08:00","close_reason":"CANCELLED: Wrong architecture. Go-based witness patrol with molecule-as-tracking-ledger is backwards. Claude session executes mol steps directly - the mol IS the executor, not bookkeeping. Also: subtasks were hallucinated as 'done' without actual code commits.","dependencies":[{"issue_id":"gt-59zd.1","depends_on_id":"gt-59zd","type":"parent-child","created_at":"2025-12-23T22:19:45.161784-08:00","created_by":"daemon"}]} @@ -204,7 +204,7 @@ {"id":"gt-59zd.4","title":"Witness: bond mol-polecat-arm when discovering polecat","description":"When witness discovers a polecat during healthCheck(), bond a mol-polecat-arm child.\n\n## Changes to witness/manager.go\n\nIn healthCheck() when iterating polecats:\n1. Check if arm already exists for this polecat (arm-{name})\n2. If not, call: gt mol bond mol-polecat-arm --parent=$PATROL_ID --ref=arm-{name} --var polecat_name={name} --var rig={rig}\n3. Track arm issue ID in handoff state\n\n## Arm Lifecycle\n\n- Created when polecat first seen\n- Updated as inspection happens (nudges, state changes)\n- Closed when polecat cleaned up\n\n## Deduplication\n\nCheck handoffState.WorkerStates[name].ArmID before creating.\nNeeds: gt-59zd.3","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T22:22:05.718229-08:00","updated_at":"2025-12-23T22:36:17.535641-08:00","closed_at":"2025-12-23T22:36:17.535641-08:00","close_reason":"CANCELLED: Wrong architecture. Go-based witness patrol with molecule-as-tracking-ledger is backwards. Claude session executes mol steps directly - the mol IS the executor, not bookkeeping. Also: subtasks were hallucinated as 'done' without actual code commits.","dependencies":[{"issue_id":"gt-59zd.4","depends_on_id":"gt-59zd","type":"parent-child","created_at":"2025-12-23T22:22:05.718706-08:00","created_by":"daemon"},{"issue_id":"gt-59zd.4","depends_on_id":"gt-59zd.3","type":"blocks","created_at":"2025-12-23T22:22:33.154977-08:00","created_by":"daemon"}]} {"id":"gt-59zd.5","title":"Witness: close arm when polecat completes","description":"When witness cleans up a polecat, close its mol-polecat-arm issue.\n\n## Changes to witness/manager.go\n\nIn cleanupPolecat():\n1. Get arm ID from handoffState.WorkerStates[name].ArmID\n2. If exists, call: bd close {armID} --reason='polecat cleaned up'\n3. Clear ArmID from handoff state\n\n## Arm Close Reasons\n\n- 'polecat cleaned up' - normal completion\n- 'polecat killed - stuck' - killed due to inactivity\n- 'polecat killed - escalated' - killed after Mayor escalation\n\n## State Update\n\nThe arm's description could be updated with final outcome before closing.\nNeeds: gt-59zd.4","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T22:22:15.542735-08:00","updated_at":"2025-12-23T22:36:17.545922-08:00","closed_at":"2025-12-23T22:36:17.545922-08:00","close_reason":"CANCELLED: Wrong architecture. Go-based witness patrol with molecule-as-tracking-ledger is backwards. Claude session executes mol steps directly - the mol IS the executor, not bookkeeping. Also: subtasks were hallucinated as 'done' without actual code commits.","dependencies":[{"issue_id":"gt-59zd.5","depends_on_id":"gt-59zd","type":"parent-child","created_at":"2025-12-23T22:22:15.543212-08:00","created_by":"daemon"},{"issue_id":"gt-59zd.5","depends_on_id":"gt-59zd.4","type":"blocks","created_at":"2025-12-23T22:22:33.241115-08:00","created_by":"daemon"}]} {"id":"gt-59zd.6","title":"mol progress: display bonded children in output","description":"Extend gt mol progress to show dynamically bonded children.\n\n## Current Output\n\nShows steps from original instantiation only.\n\n## New Output\n\nAlso show bonded children:\n\n Bonded Children (3):\n ✓ arm-toast (closed)\n ◐ arm-nux (open)\n ○ arm-furiosa (open)\n\n## Implementation\n\n1. Query for children with bonded_to: {parent-id} in description\n2. For each bonded child, show status (open/closed)\n3. Optionally show progress through child's steps\nNeeds: gt-59zd.5","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:22:28.008426-08:00","updated_at":"2025-12-23T22:36:17.55625-08:00","closed_at":"2025-12-23T22:36:17.55625-08:00","close_reason":"CANCELLED: Wrong architecture. Go-based witness patrol with molecule-as-tracking-ledger is backwards. Claude session executes mol steps directly - the mol IS the executor, not bookkeeping. Also: subtasks were hallucinated as 'done' without actual code commits.","dependencies":[{"issue_id":"gt-59zd.6","depends_on_id":"gt-59zd","type":"parent-child","created_at":"2025-12-23T22:22:28.008932-08:00","created_by":"daemon"},{"issue_id":"gt-59zd.6","depends_on_id":"gt-59zd.5","type":"blocks","created_at":"2025-12-23T22:22:33.32542-08:00","created_by":"daemon"}]} -{"id":"gt-5a0f2","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Quiet, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:30:36.729729-08:00","updated_at":"2025-12-25T00:30:36.729729-08:00","closed_at":"2025-12-25T00:30:36.729695-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-5a0f2","depends_on_id":"gt-4j9wh","type":"parent-child","created_at":"2025-12-25T00:30:36.730451-08:00","created_by":"stevey"}]} +{"id":"gt-5a0f2","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Quiet, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:30:36.729729-08:00","updated_at":"2025-12-25T00:30:36.729729-08:00","closed_at":"2025-12-25T00:30:36.729695-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-5af","title":"Deacon: Hierarchical health-check orchestrator","description":"Replace daemon heartbeats with Deacon - an AI agent that keeps Gas Town running.\n\n## Core Concept\n\nThe Deacon is a **Claude agent** (not just a Go process) that:\n- Lives at town root in gt-deacon session\n- Has its own mailbox (deacon/ identity in town beads)\n- Is poked by a minimal Go daemon every ~60s (if idle)\n- Monitors Mayor and Witnesses proactively\n- Handles lifecycle requests (restart/cycle) from Mayor, Witnesses, AND Crew\n\n## Architecture\n\n```\nMinimal Go Daemon (just watches Deacon)\n |\n v\n Deacon (Claude agent)\n |\n +----+----+\n v v\n Mayor Witnesses --\u003e Polecats (Witness-managed)\n | |\n +----+----+\n |\n Crew (lifecycle only, not monitored)\n```\n\n## Deacon Responsibilities\n\n**Proactive monitoring:**\n- Mayor health (tmux session, keepalive freshness)\n- Witness health (tmux sessions, keepalive freshness)\n\n**Reactive lifecycle:**\n- Process restart/cycle requests from Mayor, Witnesses, Crew\n- Kill session, create new, prime, verify startup\n\n**Escalation:**\n- Mail human (configurable) if issues can't be resolved\n\n## Key Files\n\n- ~/gt/DEACON.md - Role context\n- ~/gt/deacon/ - State directory\n - heartbeat.json - Written each wake cycle (daemon checks this)\n - state.json - Health tracking, last scan results\n- ~/gt/.beads/ - Town beads with deacon/ mail identity\n\n## Wake Cycle\n\n1. Write heartbeat (prevents daemon from poking)\n2. Check mail (lifecycle requests)\n3. Quick health scan (Mayor, Witnesses)\n4. Process lifecycle requests\n5. Remediate unhealthy agents\n6. Update state\n\n## Session Patterns\n\n- Deacon: gt-deacon\n- Mayor: gt-mayor\n- Witness: gt-\u003crig\u003e-witness\n- Crew: gt-\u003crig\u003e-\u003cname\u003e (e.g., gt-gastown-max)\n\n## Relation to Policy Beads\n\nFuture: Deacon behavior configurable via policy beads (gt-3zw).\nInitial implementation uses sensible defaults.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-18T18:32:28.083305-08:00","updated_at":"2025-12-20T21:00:03.948543-08:00","closed_at":"2025-12-20T20:40:28.64361-08:00","dependencies":[{"issue_id":"gt-5af","depends_on_id":"gt-3zw","type":"blocks","created_at":"2025-12-18T18:32:36.617594-08:00","created_by":"daemon"}]} {"id":"gt-5af.1","title":"Create DEACON.md role context","description":"Create ~/gt/DEACON.md with the Deacon's role context, wake cycle instructions, and command reference. Model after existing CLAUDE.md for Mayor.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T17:13:22.602567-08:00","updated_at":"2025-12-19T17:30:27.897108-08:00","closed_at":"2025-12-19T17:30:27.897108-08:00","dependencies":[{"issue_id":"gt-5af.1","depends_on_id":"gt-5af","type":"parent-child","created_at":"2025-12-19T17:13:22.605373-08:00","created_by":"daemon"}]} {"id":"gt-5af.2","title":"Add gt deacon start/stop/status commands","description":"Add CLI commands: gt deacon start (spawn gt-deacon session), gt deacon stop (kill session), gt deacon status (show health state). Similar to gt mayor commands.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T17:13:26.617077-08:00","updated_at":"2025-12-19T17:25:12.114616-08:00","closed_at":"2025-12-19T17:25:12.114616-08:00","dependencies":[{"issue_id":"gt-5af.2","depends_on_id":"gt-5af","type":"parent-child","created_at":"2025-12-19T17:13:26.618912-08:00","created_by":"daemon"}]} @@ -226,7 +226,7 @@ {"id":"gt-5klh","title":"Remove legacy .beads-wisp/ infrastructure","description":"The wisp simplification (gt-fgms + bd-bkul) changed wisps to be just a flag on issues in the main .beads/ database. JSONL export filters Wisp=true issues. No separate directory needed.\n\nBut legacy .beads-wisp/ infrastructure still exists and should be removed:\n\n## Gas Town (gt) cleanup:\n- `internal/rig/manager.go`: Remove `initWispBeads()` call from `AddRig()`\n- `internal/wisp/io.go`: Delete entire file (old abstraction layer)\n- `internal/cmd/install.go`: Remove any .beads-wisp setup\n- `docs/wisp-architecture.md`: Update to reflect 'just a flag' model\n\n## Beads (bd) cleanup:\n- `cmd/bd/doctor/wisp_check.go`: Remove WispExistsCheck, WispGitCheck, WispSizeCheck (check .beads-wisp dirs)\n- Keep WispOrphansCheck and WispStaleCheck but rewrite to query main DB for Wisp=true issues\n\n## Filesystem cleanup:\n- Delete ~/gt/.beads-wisp/\n- Delete ~/gt/gastown/.beads-wisp/\n- Delete all per-rig .beads-wisp/ directories\n- Remove .beads-wisp from .gitignore entries\n\n## Verify:\n- `gt mail send --wisp` still works (creates issue with Wisp=true in main DB)\n- `bd sync` still filters wisps from JSONL\n- `bd mol squash/burn` still work on Wisp=true issues","status":"closed","priority":2,"issue_type":"chore","created_at":"2025-12-24T21:22:31.378327-08:00","updated_at":"2025-12-24T21:51:39.361865-08:00","closed_at":"2025-12-24T21:51:39.361865-08:00","close_reason":"Removed legacy .beads-wisp infrastructure. Hooks now stored in .beads/, wisps are just Wisp=true flag on issues.","comments":[{"id":2,"issue_id":"gt-5klh","author":"stevey","text":"Additional finding: wisps ARE leaking into town-level JSONL (~/gt/.beads/issues.jsonl). Saw hq-3g9e and hq-94i with wisp:true in the file. The filtering works for rig-level beads but apparently not town-level. Need to investigate why town beads uses different export path.","created_at":"2025-12-25T05:23:42Z"}]} {"id":"gt-5moq5","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.463463-08:00","updated_at":"2025-12-25T02:11:33.463463-08:00","closed_at":"2025-12-25T02:11:33.46343-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-5moq5","depends_on_id":"gt-96u2u","type":"parent-child","created_at":"2025-12-25T02:11:33.464221-08:00","created_by":"stevey"}]} {"id":"gt-5n2f","title":"Tech Debt: Code Review December 2024","description":"Tech debt identified during code review on 2024-12-21. Contains 11 issues ranging from P2-P4 covering:\n\n- Code duplication (manager creation boilerplate)\n- Test coverage gaps (cmd 6.8%, mail 3.6%)\n- Magic strings needing constants\n- Error handling inconsistencies\n- Large files needing splitting\n- Unused code removal\n\nWork through these incrementally to improve codebase maintainability.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-21T21:37:36.114862-08:00","updated_at":"2025-12-21T22:20:12.869211-08:00","closed_at":"2025-12-21T22:20:12.869211-08:00","close_reason":"Tech debt review complete for launch. Completed:\n- gt-ai1z: Cycle detection in molecule deps\n- gt-7sqi: Manager boilerplate refactoring\n- gt-zhm5: Epic child filtering in Witness\n- gt-xnql: Constants for magic strings\n- gt-cvfg: io.Writer for refinery output\n- gt-nz6t: Removed unused style helpers\n\nAudited and closed:\n- gt-2xsh: Silent error handling (patterns are intentional)\n- gt-2n6z: Error wrapping (deferred to v0.2)\n\nDeferred to post-launch:\n- gt-480b: Test coverage (ongoing)\n- gt-92of: Large file splitting (refactoring)\n- gt-pbr3: Godoc comments (documentation)\n\nCodebase is launch-ready.","dependencies":[{"issue_id":"gt-5n2f","depends_on_id":"gt-ai1z","type":"blocks","created_at":"2025-12-21T21:37:45.973674-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-zhm5","type":"blocks","created_at":"2025-12-21T21:37:46.048395-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-7sqi","type":"blocks","created_at":"2025-12-21T21:37:46.120505-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-nz6t","type":"blocks","created_at":"2025-12-21T21:37:46.194096-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-xnql","type":"blocks","created_at":"2025-12-21T21:37:46.268652-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-480b","type":"blocks","created_at":"2025-12-21T21:37:46.341243-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-cvfg","type":"blocks","created_at":"2025-12-21T21:37:46.417073-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-92of","type":"blocks","created_at":"2025-12-21T21:37:46.489042-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-2xsh","type":"blocks","created_at":"2025-12-21T21:37:46.562771-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-2n6z","type":"blocks","created_at":"2025-12-21T21:37:46.63439-08:00","created_by":"daemon"},{"issue_id":"gt-5n2f","depends_on_id":"gt-pbr3","type":"blocks","created_at":"2025-12-21T21:37:46.706067-08:00","created_by":"daemon"}]} -{"id":"gt-5q9u","title":"Digest: mol-deacon-patrol","description":"Patrol #15: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:25.357778-08:00","updated_at":"2025-12-24T23:34:25.357778-08:00","closed_at":"2025-12-24T23:34:25.357737-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-5q9u","depends_on_id":"gt-z0ru","type":"parent-child","created_at":"2025-12-24T23:34:25.358493-08:00","created_by":"stevey"}]} +{"id":"gt-5q9u","title":"Digest: mol-deacon-patrol","description":"Patrol #15: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:25.357778-08:00","updated_at":"2025-12-24T23:34:25.357778-08:00","closed_at":"2025-12-24T23:34:25.357737-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-5qc","title":"Document how to configure a Gas Town Harness","description":"Create docs explaining what a harness is (private repo containing GT installation with rigs gitignored), why you'd want one, and how to set it up with beads redirects","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T16:42:43.370167-08:00","updated_at":"2025-12-19T12:00:39.274285-08:00","closed_at":"2025-12-19T12:00:39.274285-08:00","dependencies":[{"issue_id":"gt-5qc","depends_on_id":"gt-l1o","type":"blocks","created_at":"2025-12-17T16:42:54.620984-08:00","created_by":"daemon"},{"issue_id":"gt-5qc","depends_on_id":"gt-cr9","type":"blocks","created_at":"2025-12-17T17:15:59.17545-08:00","created_by":"daemon"}]} {"id":"gt-5tct","title":"gt mail send: add stdin and file input support for complex messages","description":"Current -m flag is fragile with multi-line messages containing backticks, quotes, or shell special chars. Add: 1) --stdin flag to read message body from stdin (heredoc-friendly), 2) -f/--file flag to read from file. This sidesteps shell quoting nightmares for handoff messages with code samples.","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-23T03:47:50.514096-08:00","updated_at":"2025-12-23T03:47:50.514096-08:00"} {"id":"gt-5tp","title":"Test message","description":"Testing GGT mail via beads","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-16T21:44:27.546781-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"} @@ -247,16 +247,16 @@ {"id":"gt-69l","title":"Hook system for event extensibility","description":"GGT needs hook system for extensibility like PGT.\n\n## Event Types\n```go\ntype Event string\nconst (\n EventPreSessionStart Event = \"pre-session-start\"\n EventPostSessionStart Event = \"post-session-start\"\n EventPreShutdown Event = \"pre-shutdown\"\n EventPostShutdown Event = \"post-shutdown\"\n EventOnPaneOutput Event = \"on-pane-output\"\n EventSessionIdle Event = \"session-idle\"\n EventMailReceived Event = \"mail-received\"\n EventWorkAssigned Event = \"work-assigned\"\n)\n```\n\n## Hook Configuration\nFile: .claude/hooks.json or .gastown/hooks.json\n```json\n{\n \"hooks\": {\n \"pre-shutdown\": [\n {\"type\": \"command\", \"cmd\": \"./scripts/pre-shutdown.sh\"}\n ],\n \"on-pane-output\": [\n {\"type\": \"command\", \"cmd\": \"./scripts/activity-monitor.sh\"}\n ]\n }\n}\n```\n\n## Hook Types\n1. **Command**: Execute external script\n2. **Built-in**: Internal Go functions (pre-shutdown checks)\n\n## Hook Interface\n```go\ntype HookRunner struct {\n config *HookConfig\n}\n\ntype HookResult struct {\n Success bool\n Message string\n Block bool // For pre-* hooks: should operation be blocked?\n}\n\nfunc (r *HookRunner) Fire(event Event, ctx *HookContext) []HookResult\n```\n\n## CLI Commands\n```\ngt hooks list [\u003cevent\u003e] # List registered hooks\ngt hooks fire \u003cevent\u003e # Manually fire for testing\ngt hooks test [--all] # Validate hook config\n```\n\n## Integration Points\n- internal/session/manager.go: Fire pre/post session hooks\n- internal/mail/router.go: Fire mail-received hook\n\n## New Package\ninternal/hooks/\n├── types.go # Event, HookConfig, HookResult\n├── runner.go # HookRunner, Fire()\n└── builtin.go # Built-in hooks (pre-shutdown checks)\n\n## PGT Reference\ngastown-py/src/gastown/hooks/\n\n## Acceptance Criteria\n- [ ] Hook config loading from JSON\n- [ ] Command hooks execute subprocess\n- [ ] Pre-shutdown hook integration with session stop\n- [ ] CLI for listing and testing hooks","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:47:34.584907-08:00","updated_at":"2025-12-16T16:04:47.890588-08:00"} {"id":"gt-6bhu","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:06:13.33163-08:00","updated_at":"2025-12-25T01:33:01.028239-08:00","closed_at":"2025-12-25T01:33:01.028239-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-6bhu.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:06:13.426123-08:00","updated_at":"2025-12-25T01:33:01.011607-08:00","closed_at":"2025-12-25T01:33:01.011607-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-6bhu.1","depends_on_id":"gt-6bhu","type":"parent-child","created_at":"2025-12-23T22:06:13.426633-08:00","created_by":"daemon"}]} -{"id":"gt-6cok","title":"Digest: mol-deacon-patrol","description":"Patrol #4: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:31:01.457636-08:00","updated_at":"2025-12-24T23:31:01.457636-08:00","closed_at":"2025-12-24T23:31:01.457602-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-6cok","depends_on_id":"gt-ma6d","type":"parent-child","created_at":"2025-12-24T23:31:01.458313-08:00","created_by":"stevey"}]} +{"id":"gt-6cok","title":"Digest: mol-deacon-patrol","description":"Patrol #4: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:31:01.457636-08:00","updated_at":"2025-12-24T23:31:01.457636-08:00","closed_at":"2025-12-24T23:31:01.457602-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-6db","title":"gt rig shutdown: Gracefully stop all rig agents","description":"Add 'gt rig shutdown \u003crig\u003e' command to gracefully stop all agents in a rig.\n\nShould:\n- Stop all polecat sessions\n- Stop refinery\n- Stop witness\n- Optionally wait for graceful shutdown with timeout","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:50:07.938698-08:00","updated_at":"2025-12-19T12:05:27.341209-08:00","closed_at":"2025-12-19T12:05:27.341209-08:00","dependencies":[{"issue_id":"gt-6db","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:23:43.179236-08:00","created_by":"daemon"}]} {"id":"gt-6k8","title":"Interrupt vs Queue mail semantics","description":"Add priority/delivery semantics to mail messages.\n\n## Semantics\n\n| Type | Delivery | Use Case |\n|------|----------|----------|\n| Interrupt | tmux send-keys | Lifecycle, URGENT, stuck detection |\n| Queue | Create message only | Normal mail, status, heartbeat |\n\n## Implementation\n\n- `bd mail send --interrupt` uses tmux send-keys notification\n- Default is queue (agent checks with `gt mail check`)\n- Urgent flag on messages for interrupt delivery\n\n## Agent Side\n\n- `gt mail check --quiet` - non-blocking check for queued mail\n- `gt mail wait` - block until mail arrives (for idle agents)\n- Heartbeats become queued, agent checks at natural breakpoints","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T14:19:28.408196-08:00","updated_at":"2025-12-19T17:22:52.555329-08:00","closed_at":"2025-12-19T16:31:00.450061-08:00","dependencies":[{"issue_id":"gt-6k8","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T14:19:46.529252-08:00","created_by":"daemon"}]} -{"id":"gt-6l2au","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:04:09.604588-08:00","updated_at":"2025-12-25T00:04:09.604588-08:00","closed_at":"2025-12-25T00:04:09.604555-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-6l2au","depends_on_id":"gt-ky1hm","type":"parent-child","created_at":"2025-12-25T00:04:09.605328-08:00","created_by":"stevey"}]} +{"id":"gt-6l2au","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:04:09.604588-08:00","updated_at":"2025-12-25T00:04:09.604588-08:00","closed_at":"2025-12-25T00:04:09.604555-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-6lt3","title":"Work on ga-rd4: Add gt polecat status command. Show detai...","description":"Work on ga-rd4: Add gt polecat status command. Show detailed polecat status including current issue, session state, last activity time. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T22:58:26.320627-08:00","updated_at":"2025-12-19T23:23:07.448718-08:00","closed_at":"2025-12-19T23:23:07.448718-08:00"} {"id":"gt-6m3e","title":"bd create --dedup: semantic deduplication before issue creation","description":"Before creating issue, check for semantic duplicates using AI similarity.\n\n**From VC**: internal/deduplication/ - AI-powered batch comparison. ~300 lines.\nVC had issue pollution problem: 438 issues with ~350+ spam because no early dedup.\n\n**Gas Town implementation**: CLI flag on bd create:\n```bash\nbd create --dedup --title=\"Fix auth bug\" --description=\"...\"\n```\n\nChecks recent issues (7-day window) with AI similarity. If confidence \u003e0.85, warns or blocks.\n\n**Value**: Prevents pollution from parallel workers discovering same issues.\n\n**VC lesson**: 115 issues filed in single day (Nov 2) because supervisor over-discovered without dedup. Rate limiting + dedup are essential.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-20T20:30:17.305652-08:00","updated_at":"2025-12-20T20:30:17.305652-08:00","dependencies":[{"issue_id":"gt-6m3e","depends_on_id":"gt-zhpa","type":"parent-child","created_at":"2025-12-20T20:30:27.599806-08:00","created_by":"daemon"}]} {"id":"gt-6n13","title":"Competing molecule instantiation mechanisms need resolution","description":"Documentation describes 4 different molecule instantiation methods:\n1. bd mol bond (beads-based, in molecules.md)\n2. gt sling (proposed in sling-design.md)\n3. gt swarm (implemented in code)\n4. gt molecule instantiate (in architecture.md)\n\nRole prompts use different methods:\n- Deacon: bd mol spawn\n- Refinery: gt mol bond\n- Polecat: bd mol current\n\nNeed to:\n1. Decide canonical mechanism\n2. Update all role prompts to use it\n3. Remove/deprecate alternatives\n4. Update architecture docs","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T12:50:56.093813-08:00","updated_at":"2025-12-24T23:48:51.018169-08:00","closed_at":"2025-12-24T23:48:51.018169-08:00","close_reason":"Superseded by gt-mbyy: comprehensive CLI API audit that covers molecule mechanisms plus full command structure review","dependencies":[{"issue_id":"gt-6n13","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:05.105811-08:00","created_by":"daemon"}]} {"id":"gt-6n1cy","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-u2vg - The source issue ID being worked on","status":"in_progress","priority":2,"issue_type":"epic","assignee":"gastown/furiosa","created_at":"2025-12-25T01:53:37.309868-08:00","updated_at":"2025-12-25T01:53:38.021582-08:00"} -{"id":"gt-6n8fy","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:51:51.349775-08:00","updated_at":"2025-12-24T23:51:51.349775-08:00","closed_at":"2025-12-24T23:51:51.349742-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-6n8fy","depends_on_id":"gt-styo6","type":"parent-child","created_at":"2025-12-24T23:51:51.35046-08:00","created_by":"stevey"}]} -{"id":"gt-6qdii","title":"Digest: mol-deacon-patrol","description":"Patrol 13: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:51:28.696535-08:00","updated_at":"2025-12-24T23:51:28.696535-08:00","closed_at":"2025-12-24T23:51:28.696507-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-6qdii","depends_on_id":"gt-xy914","type":"parent-child","created_at":"2025-12-24T23:51:28.697274-08:00","created_by":"stevey"}]} +{"id":"gt-6n8fy","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:51:51.349775-08:00","updated_at":"2025-12-24T23:51:51.349775-08:00","closed_at":"2025-12-24T23:51:51.349742-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-6qdii","title":"Digest: mol-deacon-patrol","description":"Patrol 13: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:51:28.696535-08:00","updated_at":"2025-12-24T23:51:28.696535-08:00","closed_at":"2025-12-24T23:51:28.696507-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-6qld","title":"Daemon should auto-start as part of town bootstrap","description":"The Go daemon should be started automatically when the town boots up (mol-gastown-boot). Currently it requires manual 'gt daemon start'.\n\nThe daemon is critical infrastructure - it monitors the Deacon and nudges it when naked. Without it, the Deacon patrol loop doesn't run.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T13:16:52.000929-08:00","updated_at":"2025-12-23T13:16:52.000929-08:00"} {"id":"gt-6t0","title":"gt swarm: Not discovering tasks from epic dependents","description":"gt swarm create/start shows '0 tasks loaded' even when epic has dependents.\n\nRepro:\n1. Create epic gt-hw6\n2. Create tasks and add deps: bd dep add gt-xxx gt-hw6\n3. gt swarm create gastown --epic gt-hw6 --worker Toast\n4. Swarm shows 'Tasks: 0'\n\nExpected: Swarm should discover tasks that depend on the epic.\nActual: Shows '(no tasks loaded)'","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-17T22:25:41.653628-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-6tf","title":"Implement gt harness create command","description":"Add scaffolding command to create a new harness:\n- gt harness create [path]\n- Creates config/, mayor/, .beads/redirect (optional)\n- Optionally initializes git\n- Generates CLAUDE.md with Mayor role\n- Could also offer a template repo alternative","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T17:15:34.342552-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-6tf","depends_on_id":"gt-cr9","type":"blocks","created_at":"2025-12-17T17:15:51.845578-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"} @@ -281,7 +281,7 @@ {"id":"gt-7922","title":"Dynamic wisp modification: insert, reorder, bond mid-execution","description":"## Vision\n\nWisps should be living documents that adapt mid-execution, not static scripts.\n\n## Operations Needed\n\n### bd mol insert\nInsert a step into a running wisp:\n```bash\nbd mol insert \u003cwisp-id\u003e --after \u003cstep\u003e --step 'security-gate: Review auth changes'\n```\n\n### bd mol reorder \nChange step order in a running wisp:\n```bash\nbd mol reorder \u003cwisp-id\u003e --move process-branch --before current\n```\n\n### bd mol bond (to wisp)\nAttach an entire molecule to a running wisp:\n```bash\nbd mol bond mol-weekly-maintenance \u003cwisp-id\u003e --after await-work\n```\n\n### bd mol skip\nSkip a step (with reason):\n```bash\nbd mol skip \u003cwisp-id\u003e \u003cstep\u003e --reason 'Queue empty, skipping summary'\n```\n\n## Use Cases\n\n1. **Hotfix priority**: Reorder queue to process urgent MR first\n2. **Security gate**: Insert review step when PR touches sensitive files\n3. **Scheduled maintenance**: Bond maintenance mol on schedule\n4. **Context adaptation**: Skip steps when they don't apply\n\n## Why This Matters\n\nEngine room problems emerge dynamically. The wisp's flexibility lets agents model situations as they evolve, not execute rigid scripts.\n\nGUPP still applies: whatever's on your hook, you run. But the hook contents can adapt.\n\n## Implementation\n\nThis requires Beads changes to support wisp mutation:\n- Track step ordering in wisp storage\n- Support step insertion/deletion/reordering\n- Handle bond-to-wisp (spawn steps into existing wisp)\n- Preserve audit trail of modifications","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-22T13:24:26.533247-08:00","updated_at":"2025-12-22T13:24:26.533247-08:00"} {"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":"closed","priority":1,"issue_type":"feature","assignee":"gastown/rictus","created_at":"2025-12-22T13:24:43.158379-08:00","updated_at":"2025-12-23T01:16:16.773474-08:00","closed_at":"2025-12-23T01:16:16.773474-08:00","close_reason":"Merged to main"} {"id":"gt-7asd","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:35:39.123943-08:00","updated_at":"2025-12-24T22:35:39.123943-08:00","closed_at":"2025-12-24T22:35:39.123915-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-7gno","title":"Digest: mol-deacon-patrol","description":"Patrol #18: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:35:15.310522-08:00","updated_at":"2025-12-24T23:35:15.310522-08:00","closed_at":"2025-12-24T23:35:15.310487-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-7gno","depends_on_id":"gt-nznf","type":"parent-child","created_at":"2025-12-24T23:35:15.311217-08:00","created_by":"stevey"}]} +{"id":"gt-7gno","title":"Digest: mol-deacon-patrol","description":"Patrol #18: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:35:15.310522-08:00","updated_at":"2025-12-24T23:35:15.310522-08:00","closed_at":"2025-12-24T23:35:15.310487-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":2,"issue_type":"task","assignee":"gastown/slit","created_at":"2025-12-22T03:17:47.790012-08:00","updated_at":"2025-12-22T12:31:43.230007-08:00","closed_at":"2025-12-22T12:31:43.230007-08:00","close_reason":"Documentation complete. Created docs/propulsion-principle.md covering the One Rule, sling lifecycle, agent startup protocol, and examples/anti-patterns."} {"id":"gt-7hz3","title":"Merge: gt-92l","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-92l\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T16:31:37.716367-08:00","updated_at":"2025-12-19T18:26:14.102101-08:00","closed_at":"2025-12-19T17:48:09.627376-08:00"} {"id":"gt-7ik","title":"Ephemeral polecats: spawn fresh, delete on completion","description":"## Design Decision\n\nSwitch from pooled/idle polecats to ephemeral model:\n- Spawn creates fresh worktree from main\n- Polecat requests shutdown when done (bottom-up)\n- Witness verifies handoff, kills session, deletes worktree\n- No 'idle' state - polecats exist only while working\n\n## Rationale\n\n1. **Git worktrees are fast** - pooling optimization is obsolete\n2. **Pooling creates maintenance burden:**\n - Git stashes accumulate\n - Untracked artifacts pile up\n - Branches drift from main\n - Beads DB gets stale\n3. **PGT sync problems** came from persistent branches\n4. **Support infrastructure exists** - Witness, Refinery, Mayor handle continuity\n5. **Simpler mental model** - polecat exists = work in progress\n\n## Lifecycle\n\n```\nSpawn:\n gt spawn --issue \u003cid\u003e\n → Creates fresh worktree: git worktree add polecats/\u003cname\u003e -b polecat/\u003cname\u003e\n → Initializes beads in worktree\n → Starts session, assigns work\n\nWorking:\n Polecat does task\n → Pushes to polecat/\u003cname\u003e branch\n → Submits to merge queue when ready\n\nCompletion (POLECAT-INITIATED):\n Polecat runs: gt handoff\n → Verifies git state clean\n → Sends mail to Witness: \"Ready for shutdown\"\n → Marks itself done, waits for termination\n\nCleanup (WITNESS-OWNED):\n Witness receives shutdown request\n → Verifies PR merged or in queue\n → Verifies no uncommitted changes\n → Kills session: gt session stop \u003crig\u003e/\u003cpolecat\u003e\n → Deletes worktree: git worktree remove polecats/\u003cname\u003e\n → Deletes branch: git branch -d polecat/\u003cname\u003e\n → Optionally: Notifies Mayor of completion\n```\n\n## Key Insight: Bottom-Up Shutdown\n\n**Old model (wrong)**: Top-down batch shutdown - \"cancel the swarm\"\n**New model (right)**: Bottom-up individual shutdown - polecat requests, Witness executes\n\nThis enables streaming:\n- Workers come and go continuously\n- No \"swarm end\" to trigger cleanup\n- Each worker manages its own lifecycle\n- Witness is the lifecycle authority\n\n## Implementation\n\n1. Add `gt handoff` command for polecats to request shutdown\n2. Modify gt spawn to always create fresh worktree\n3. Run bd init in new worktree (beads needs initialization)\n4. Add shutdown request handler to Witness\n5. Witness verifies handoff, then cleans up:\n - Kill session\n - Remove worktree\n - Delete branch\n6. Remove 'idle' state from polecat state machine\n7. Simplify gt polecat list (only shows active)\n\n## Impact on Other Tasks\n\n- gt-17r (Zombie cleanup): Becomes trivial - orphan worktrees\n- gt-4my (Worker health): Simpler - no idle/stuck ambiguity\n- gt-f9x.5/f9x.6 (Doctor): Fewer states to validate\n- gt-eu9 (Witness handoff): Witness receives polecat shutdown requests","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-17T15:44:31.139964-08:00","updated_at":"2025-12-19T01:57:17.033547-08:00","closed_at":"2025-12-19T01:57:17.033547-08:00"} @@ -296,8 +296,8 @@ {"id":"gt-7xtn","title":"Bug: MRs appearing in bd ready output","description":"merge-request beads are showing up in `bd ready` output alongside actual work items.\n\n## Problem\n`bd ready` is meant to show work available for polecats to claim. MRs are internal workflow items processed by the Refinery, not polecat work.\n\n## Example\n```\n| P1 | merge-request | bd-3zzh | Merge: bd-tvu3 |\n| P1 | merge-request | bd-fcl1 | Merge: bd-au0.5 |\n```\n\n## Possible Fixes\n1. **Filter by type** - `bd ready` excludes type=merge-request, type=gate, type=molecule\n2. **Set assignee on submit** - MR assigned to refinery/ when created, so not 'unassigned'\n3. **Set status=in_progress** - MR starts in_progress since it's queued for processing\n\n## Related\n- gate beads also showing (bd-hyp6, bd-wu62) - same issue","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-23T14:38:29.507419-08:00","updated_at":"2025-12-23T15:05:34.037593-08:00","closed_at":"2025-12-23T15:05:34.037593-08:00","close_reason":"Fixed in beads commit 33105c96 - workflow types excluded from bd ready"} {"id":"gt-82y","title":"Design: Swarm shutdown and worker cleanup","description":"Design for graceful swarm shutdown, worker cleanup, and session cycling.\n\n## Key Decisions\n\n1. Pre-kill verification uses model intelligence (not framework rules)\n2. Witness can request restart when context filling (mail self, exit)\n3. Mayor NOT involved in per-worker cleanup (Witness responsibility)\n4. Clear responsibility boundaries between Mayor/Witness/Polecat\n\n## Subtasks (implementation)\n\n- gt-sd6: Polecat decommission checklist prompting\n- gt-f8v: Witness pre-kill verification protocol\n- gt-eu9: Witness session cycling and handoff\n- gt-gl2: Mayor vs Witness cleanup responsibilities\n\n**Design complete.** Each subtask has full specification in its description.","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-15T19:47:44.936374-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-83k0","title":"mol-witness-patrol molecule definition","description":"Create mol-witness-patrol in builtin_molecules.go.\n\n## Steps (10 total)\n1. inbox-check - Process witness mail (lifecycle, help requests)\n2. load-state - Read handoff bead, get nudge counts\n3. survey-workers - gt polecat list, categorize by status\n4. inspect-workers - tmux capture-pane for each 'working' polecat\n5. decide-actions - Apply nudge matrix, queue actions\n6. execute-actions - Nudge, kill, or escalate as decided\n7. save-state - Update handoff bead with new states\n8. generate-summary - Summarize cycle for digest\n9. context-check - Check own context usage\n10. burn-or-loop - Squash wisp, then loop or cycle session\n\n## Key Behaviors\n- Uses wisp storage (.beads-wisp/)\n- Reads/writes witness handoff bead for state persistence\n- Progressive nudging (3 levels before escalate)\n- Pre-kill verification before killing polecats\n\n## Reference\n- See prompts/roles/witness.md for protocol details\n- See mol-refinery-patrol for similar structure\n- Parent epic: gt-aqd8","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/furiosa","created_at":"2025-12-22T16:42:43.697249-08:00","updated_at":"2025-12-22T23:34:29.174842-08:00","closed_at":"2025-12-22T23:34:29.174842-08:00","close_reason":"Implemented mol-witness-patrol with 10 steps in builtin_molecules.go"} -{"id":"gt-83s17","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:34:18.706892-08:00","updated_at":"2025-12-25T00:34:18.706892-08:00","closed_at":"2025-12-25T00:34:18.706854-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-83s17","depends_on_id":"gt-akdvu","type":"parent-child","created_at":"2025-12-25T00:34:18.707604-08:00","created_by":"stevey"}]} -{"id":"gt-83uf","title":"Digest: mol-deacon-patrol","description":"Patrol 8","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:44.96962-08:00","updated_at":"2025-12-24T23:08:44.96962-08:00","closed_at":"2025-12-24T23:08:44.969592-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-83uf","depends_on_id":"gt-90cs","type":"parent-child","created_at":"2025-12-24T23:08:44.970271-08:00","created_by":"stevey"}]} +{"id":"gt-83s17","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:34:18.706892-08:00","updated_at":"2025-12-25T00:34:18.706892-08:00","closed_at":"2025-12-25T00:34:18.706854-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-83uf","title":"Digest: mol-deacon-patrol","description":"Patrol 8","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:44.96962-08:00","updated_at":"2025-12-24T23:08:44.96962-08:00","closed_at":"2025-12-24T23:08:44.969592-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-85a","title":"gt spawn: Not injecting work instructions to session","description":"gt spawn starts session but doesn't inject the issue assignment.\n\nRepro:\n1. gt spawn gastown/Toast --issue gt-2ux\n2. Session starts but polecat just sees Claude prompt\n3. No issue context injected\n\nExpected: Polecat should receive issue details automatically.\nActual: Polecat sits at blank prompt, needs manual injection.","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-17T22:28:02.583003-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-86w","title":"CLI: doctor diagnostics and auto-repair","description":"GGT completely lacks the doctor command which is critical for debugging.\n\nRequired Commands:\n- gt doctor [\u003crig\u003e] - Run diagnostic checks\n- gt doctor --fix - Auto-repair common issues\n\nChecks to Implement:\nWorkspace Level: Config validity, Mayor mailbox, Rig registry\nRig Level: Git state, clone health, witness/refinery presence, beads sync\nSwarm Level: Stuck detection, zombie sessions, heartbeat health\n\nPGT Reference: gastown-py/src/gastown/cli/dashboard_cmd.py","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T14:46:34.721484-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-8a0h","title":"Add compaction recovery protocol to role templates","description":"After context compaction (summarization), agents may be disoriented.\n\nAdd guidance to recognize and recover:\n- 'If you feel you've lost earlier context or are disoriented, run: gt prime'\n- 'This re-injects your role, current work, and pending messages'\n- 'It's safe to prime multiple times - it just outputs context'\n\nThis is the fallback path when self-check is missed and compaction happens.\nCompaction isn't catastrophic if priming is robust.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:46:21.959626-08:00","updated_at":"2025-12-23T14:27:07.466696-08:00"} @@ -321,7 +321,7 @@ {"id":"gt-8tmz.12","title":"Formula parser and YAML schema","description":"Implement formula parsing from YAML:\n- Define YAML schema for .formula.yaml files\n- Parse steps, compose rules, vars\n- Support extends for formula inheritance\n- Validate formula structure\n\nSchema should support:\n- formula: name\n- description: text\n- version: number\n- type: workflow|expansion|aspect\n- vars: variable definitions\n- steps: step definitions\n- compose: composition rules\n\n**Beads issue: bd-weu8**","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T18:20:02.788306-08:00","updated_at":"2025-12-24T13:44:21.239181-08:00","closed_at":"2025-12-24T13:44:21.239181-08:00","close_reason":"Implemented in Beads (bd-weu8, bd-wa2l)","dependencies":[{"issue_id":"gt-8tmz.12","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:20:02.788811-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.13","title":"bd cook command: Formula to Proto","description":"Implement the 'bd cook' command that transforms formulas into protos.\n\nUsage: bd cook \u003cformula-file\u003e [options]\n bd cook .beads/formulas/*.formula.yaml\n\nProcess:\n1. Parse formula YAML (uses formula parser)\n2. Resolve extends (formula inheritance)\n3. Expand macros (expansion rules)\n4. Apply aspects (cross-cutting concerns)\n5. Generate flat proto bead\n\nOutput:\n- Creates proto bead in .beads/ with mol-prefix\n- Proto has all steps pre-expanded\n- Proto is ready for pour/wisp instantiation\n\n**Beads issue: bd-wa2l**","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T18:20:03.9306-08:00","updated_at":"2025-12-24T13:44:21.26078-08:00","closed_at":"2025-12-24T13:44:21.26078-08:00","close_reason":"Implemented in Beads (bd-weu8, bd-wa2l)","dependencies":[{"issue_id":"gt-8tmz.13","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:20:03.933113-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.13","depends_on_id":"gt-8tmz.12","type":"blocks","created_at":"2025-12-23T18:20:11.133013-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.14","title":"bd formula list/show commands","description":"Implement formula management commands:\n\n bd formula list\n # Lists formulas from all search paths\n\n bd formula show rule-of-five\n # Shows formula details, steps, compose rules\n\nSearch paths (in order):\n1. .beads/formulas/ (project)\n2. ~/gt/.beads/formulas/ (town)\n3. ~/.beads/formulas/ (user)\n4. Built-in formulas (embedded)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T18:20:05.02817-08:00","updated_at":"2025-12-23T18:20:05.02817-08:00","dependencies":[{"issue_id":"gt-8tmz.14","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:20:05.03005-08:00","created_by":"daemon"}]} -{"id":"gt-8tmz.15","title":"Formula cycle detection during cooking","description":"Detect and error on circular extends chains during bd cook. E.g., if formula A extends B extends A, cooking should fail with clear error message pointing to the cycle.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-23T18:45:06.751822-08:00","updated_at":"2025-12-23T18:45:06.751822-08:00","dependencies":[{"issue_id":"gt-8tmz.15","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:45:06.752271-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.15","depends_on_id":"gt-8tmz.13","type":"blocks","created_at":"2025-12-23T18:48:18.543425-08:00","created_by":"daemon"}]} +{"id":"gt-8tmz.15","title":"Formula cycle detection during cooking","description":"Detect and error on circular extends chains during bd cook. E.g., if formula A extends B extends A, cooking should fail with clear error message pointing to the cycle.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T18:45:06.751822-08:00","updated_at":"2025-12-25T02:32:58.304851-08:00","closed_at":"2025-12-25T02:32:58.304851-08:00","close_reason":"Implemented: cycle detection now shows full chain (cycle-a -\u003e cycle-b -\u003e cycle-a format)","dependencies":[{"issue_id":"gt-8tmz.15","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:45:06.752271-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.15","depends_on_id":"gt-8tmz.13","type":"blocks","created_at":"2025-12-23T18:48:18.543425-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.16","title":"Prevent aspect self-matching (infinite recursion)","description":"Aspects should only match original steps, not steps inserted by the same aspect application. Document this and implement guard during cooking. Without this, a pointcut like *.implement that inserts security-prescan could match its own insertion infinitely.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-23T18:45:07.855882-08:00","updated_at":"2025-12-23T18:45:07.855882-08:00","dependencies":[{"issue_id":"gt-8tmz.16","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:45:07.861131-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.16","depends_on_id":"gt-8tmz.5","type":"blocks","created_at":"2025-12-23T18:48:18.885103-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.17","title":"Max expansion depth limit (default 5)","description":"Add maxExpansionDepth config (default 5) to prevent runaway nested expansions. This still allows massive work generation but with a safety bound. Note: distinguish compile-time cooking (produces proto with placeholders) vs runtime cooking (produces mol with real issue IDs). Compile-time is for modeling/estimation/contractor handoff.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T18:45:09.107895-08:00","updated_at":"2025-12-25T02:23:29.995924-08:00","closed_at":"2025-12-25T02:23:29.995924-08:00","close_reason":"Implemented: DefaultMaxExpansionDepth=5 constant, depth tracking in expandStep, error on limit exceeded","dependencies":[{"issue_id":"gt-8tmz.17","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:45:09.109857-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.17","depends_on_id":"gt-8tmz.3","type":"blocks","created_at":"2025-12-23T18:48:19.037958-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.18","title":"Cooking metadata: source tracing","description":"Add source_formula and source_location metadata to cooked steps so you can trace a step in a proto back to its origin formula. Useful for debugging complex compositions.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T18:45:10.295767-08:00","updated_at":"2025-12-23T18:45:10.295767-08:00","dependencies":[{"issue_id":"gt-8tmz.18","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:45:10.29809-08:00","created_by":"daemon"}]} @@ -337,7 +337,7 @@ {"id":"gt-8tmz.27","title":"Computed range expansion (for-each over expressions)","description":"Support for-each expansion over computed ranges, not just static lists:\n\nfor-each:\n var: move_num\n range: \"1..2^{disks}\" # Computed at cook time\n\nThis enables formulas like Towers of Hanoi where the step count is a function of input variables. The range expression is evaluated during cooking.\n\nRelated: towers-of-hanoi.formula.yaml demonstrates the need.\nDepends on: gt-8tmz.8 (Runtime dynamic expansion)","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-23T19:27:02.71296-08:00","updated_at":"2025-12-23T19:27:02.71296-08:00","dependencies":[{"issue_id":"gt-8tmz.27","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T19:27:02.713399-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.27","depends_on_id":"gt-8tmz.8","type":"blocks","created_at":"2025-12-23T19:27:08.191351-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.28","title":"Formula error handling and recovery","description":"Specify how cooking errors are reported and recovered:\n- What happens when extends chain is broken (missing formula)?\n- What happens when aspect pointcut matches nothing?\n- What happens when expansion produces invalid structure?\n- Graceful degradation vs fail-fast semantics\n- Error metadata in cooked protos\n\nDeferred: post-launch polish","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-23T20:06:28.452872-08:00","updated_at":"2025-12-23T20:06:28.452872-08:00","dependencies":[{"issue_id":"gt-8tmz.28","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T20:06:28.453346-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.29","title":"Formula versioning and migration strategy","description":"Define how formula versions are managed:\n- What does the version field mean? Semver? Integer?\n- When a formula changes, what happens to existing protos?\n- Do protos track their source formula version?\n- Migration path: old proto + new formula = ?\n- Backwards compatibility guarantees (if any)\n\nDeferred: post-launch polish","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-23T20:06:45.764277-08:00","updated_at":"2025-12-23T20:06:45.764277-08:00","dependencies":[{"issue_id":"gt-8tmz.29","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T20:06:45.764686-08:00","created_by":"daemon"}]} -{"id":"gt-8tmz.3","title":"Expansion operators: expand and map (macros)","description":"Implement macro-style expansion operators:\n- expand(target, template) - apply template to single step\n- map(molecule, template) - apply template to all matching steps\n\nTemplates use {target} substitution for step references.\nRule of Five is the canonical example.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-23T18:04:31.472199-08:00","updated_at":"2025-12-23T18:04:31.472199-08:00","dependencies":[{"issue_id":"gt-8tmz.3","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:04:31.472662-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.3","depends_on_id":"gt-8tmz.1","type":"blocks","created_at":"2025-12-23T18:04:49.809887-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.3","depends_on_id":"gt-8tmz.13","type":"blocks","created_at":"2025-12-23T18:48:18.717567-08:00","created_by":"daemon"}]} +{"id":"gt-8tmz.3","title":"Expansion operators: expand and map (macros)","description":"Implement macro-style expansion operators:\n- expand(target, template) - apply template to single step\n- map(molecule, template) - apply template to all matching steps\n\nTemplates use {target} substitution for step references.\nRule of Five is the canonical example.","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-12-23T18:04:31.472199-08:00","updated_at":"2025-12-25T02:28:37.052195-08:00","dependencies":[{"issue_id":"gt-8tmz.3","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:04:31.472662-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.3","depends_on_id":"gt-8tmz.1","type":"blocks","created_at":"2025-12-23T18:04:49.809887-08:00","created_by":"daemon"},{"issue_id":"gt-8tmz.3","depends_on_id":"gt-8tmz.13","type":"blocks","created_at":"2025-12-23T18:48:18.717567-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.30","title":"Proto debugging and inspection tools","description":"Tools for understanding cooked protos:\n- bd cook --dry-run (already planned)\n- Step-through cooking: see each compose rule applied\n- Diff between proto versions\n- Provenance tracing: which formula/rule produced this step?\n- Visualization of step graph (ASCII or graphviz)\n\nDeferred: post-launch polish","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-23T20:06:46.58776-08:00","updated_at":"2025-12-23T20:06:46.58776-08:00","dependencies":[{"issue_id":"gt-8tmz.30","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T20:06:46.58989-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.31","title":"Formula validation specification","description":"Complete validation rules for formulas:\n- Required vs optional fields\n- Valid step ID patterns\n- Valid pointcut glob syntax\n- Variable reference validation\n- Compose rule ordering constraints\n- Type-specific validation (workflow vs expansion vs aspect)\n\nDeferred: post-launch polish","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-23T20:06:47.618799-08:00","updated_at":"2025-12-23T20:06:47.618799-08:00","dependencies":[{"issue_id":"gt-8tmz.31","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T20:06:47.620975-08:00","created_by":"daemon"}]} {"id":"gt-8tmz.32","title":"Consolidate molecular-chemistry.md with rig-cook-run.md","description":"Merge rig-cook-run.md into molecular-chemistry.md as the canonical chemical algebra spec:\n- Rig/Cook/Run as the lifecycle backbone\n- Full generation graph: Formula → Compound Formula → Proto → Mol/Wisp\n- Bond table at artifact level (symmetric)\n- Rig operator at source level\n- Unified vocabulary\n- Archive or redirect rig-cook-run.md","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T20:06:48.82201-08:00","updated_at":"2025-12-23T20:09:55.176385-08:00","closed_at":"2025-12-23T20:09:55.176385-08:00","close_reason":"Consolidated rig-cook-run.md into molecular-chemistry.md. Updated all references.","dependencies":[{"issue_id":"gt-8tmz.32","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T20:06:48.823692-08:00","created_by":"daemon"}]} @@ -349,8 +349,8 @@ {"id":"gt-8tmz.9","title":"gt sling --on flag for wisp scaffolding","description":"Add --on flag to gt sling for applying forms to existing work:\n gt sling shiny gastown/Toast --on gt-abc123\n\nWhen --on is specified, implies --wisp (scaffolding existing work).\nThe form shapes execution of the target bead.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T18:04:39.209305-08:00","updated_at":"2025-12-25T02:00:34.261738-08:00","closed_at":"2025-12-25T02:00:34.261738-08:00","close_reason":"Implemented --on flag for formula scaffolding","dependencies":[{"issue_id":"gt-8tmz.9","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:04:39.212264-08:00","created_by":"daemon"}]} {"id":"gt-8v8","title":"Polecat cleanup should refuse to lose uncommitted work","description":"The system should stubbornly refuse to lose work from a polecat.\n\n## Current Problem\n\n- gt spawn --force bypasses safety checks\n- gt shutdown doesn't check for uncommitted work\n- Witness cleanup doesn't check git status\n\n## Desired Behavior\n\nBefore any polecat cleanup, check:\n1. git status - any uncommitted changes?\n2. git stash list - any stashes?\n3. Unpushed commits on branch?\n4. Unsynced beads changes?\n\nIf ANY of these exist:\n- REFUSE to clean up\n- Print clear error message listing what would be lost\n- Require explicit --nuclear flag to force (not just --force)\n\n## Implementation\n\nAdd to cleanupPolecat() in witness/manager.go:\n```go\nfunc (m *Manager) checkUncommittedWork(polecatName string) error {\n dir := m.polecatDir(polecatName)\n \n // Check git status\n if hasUncommitted, _ := git.HasUncommittedChanges(dir); hasUncommitted {\n return fmt.Errorf(\"polecat %s has uncommitted changes\", polecatName)\n }\n \n // Check stashes\n if stashCount, _ := git.StashCount(dir); stashCount \u003e 0 {\n return fmt.Errorf(\"polecat %s has %d stashes\", polecatName, stashCount)\n }\n \n // Check unpushed commits\n if unpushed, _ := git.UnpushedCommits(dir); unpushed \u003e 0 {\n return fmt.Errorf(\"polecat %s has %d unpushed commits\", polecatName, unpushed)\n }\n \n return nil\n}\n```\n\n## Affected Commands\n\n- gt shutdown\n- gt rig shutdown\n- Witness cleanup\n- gt spawn --force (should warn if overwriting)","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T15:23:09.043717-08:00","updated_at":"2025-12-20T17:42:39.582711-08:00","closed_at":"2025-12-20T15:55:10.658555-08:00"} {"id":"gt-8wf","title":"Polecat prompting: gt mq submit on completion","description":"Update Polecat CLAUDE.md prompting to:\n\n1. On task completion, run: gt mq submit --issue \u003cid\u003e\n2. This creates a merge-request bead in the queue\n3. Engineer will process it\n\nThe Polecat self-reports completion to the merge queue.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T23:02:39.914724-08:00","updated_at":"2025-12-16T23:02:39.914724-08:00","dependencies":[{"issue_id":"gt-8wf","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:55.930679-08:00","created_by":"daemon"},{"issue_id":"gt-8wf","depends_on_id":"gt-svi","type":"blocks","created_at":"2025-12-16T23:03:12.950782-08:00","created_by":"daemon"}]} -{"id":"gt-8ylw","title":"Digest: mol-deacon-patrol","description":"Patrol #13: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:56.275057-08:00","updated_at":"2025-12-24T23:33:56.275057-08:00","closed_at":"2025-12-24T23:33:56.275024-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-8ylw","depends_on_id":"gt-qtrr","type":"parent-child","created_at":"2025-12-24T23:33:56.275735-08:00","created_by":"stevey"}]} -{"id":"gt-92fc","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:47:30.48971-08:00","updated_at":"2025-12-24T23:47:30.48971-08:00","closed_at":"2025-12-24T23:47:30.489685-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-92fc","depends_on_id":"gt-u1it","type":"parent-child","created_at":"2025-12-24T23:47:30.490364-08:00","created_by":"stevey"}]} +{"id":"gt-8ylw","title":"Digest: mol-deacon-patrol","description":"Patrol #13: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:56.275057-08:00","updated_at":"2025-12-24T23:33:56.275057-08:00","closed_at":"2025-12-24T23:33:56.275024-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-92fc","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:47:30.48971-08:00","updated_at":"2025-12-24T23:47:30.48971-08:00","closed_at":"2025-12-24T23:47:30.489685-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-92l","title":"Daemon: integration test with real lifecycle","description":"Need an end-to-end test that:\n1. Starts daemon\n2. Starts a test agent session\n3. Sends lifecycle request to daemon\n4. Verifies session was killed and restarted\n5. Cleans up\n\nCould use a mock 'agent' that's just a shell script.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T13:38:17.261096-08:00","updated_at":"2025-12-19T17:22:52.555739-08:00","closed_at":"2025-12-19T16:31:23.543204-08:00","dependencies":[{"issue_id":"gt-92l","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T13:38:26.962642-08:00","created_by":"daemon"}]} {"id":"gt-92of","title":"Consider splitting large files (800+ lines)","description":"Several files are getting large and may benefit from splitting:\n- internal/beads/beads.go (990 lines)\n- internal/cmd/molecule.go (981 lines)\n- internal/refinery/manager.go (934 lines)\n- internal/beads/beads_test.go (883 lines)\n- internal/cmd/polecat.go (836 lines)\n- internal/witness/manager.go (808 lines)\n- internal/cmd/mail.go (804 lines)\n\nFor .go files, consider extracting logical subsystems. For test files, this is lower priority.","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-21T21:35:09.138406-08:00","updated_at":"2025-12-21T22:20:00.721055-08:00","closed_at":"2025-12-21T22:20:00.721055-08:00","close_reason":"Deferred to post-launch. Large files (800+ lines) work correctly; splitting is refactoring for maintainability, not functional. Can be addressed incrementally after launch."} {"id":"gt-93ha","title":"Digest: mol-deacon-patrol","description":"Patrol: slit handoff (landing protocol), polecats cleaned (0 now), 4 witness/refineries up","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T01:37:17.776898-08:00","updated_at":"2025-12-23T01:37:17.776898-08:00","closed_at":"2025-12-23T01:37:17.776855-08:00","close_reason":"Squashed from 5 wisps"} @@ -360,7 +360,7 @@ {"id":"gt-976","title":"Add crew lifecycle support to Deacon","description":"Currently crew sessions (like gastown/crew/max, beads/crew/dave) are marked as 'human-managed' and excluded from automated lifecycle.\n\n## Current State\n- `getManager(RoleCrew)` returns `\"human\"` (handoff.go:273)\n- `gt handoff` for crew just prints a message, no lifecycle request sent\n- Crew cannot request automated refresh from Deacon\n\n## Desired State\nCrew members should be able to request lifecycle actions from Deacon:\n- `gt handoff --cycle` sends request to Deacon, which kills/restarts the crew session\n- Useful when: context full, running molecules that need fresh session, automation\n\n## Implementation\n1. Change `getManager(RoleCrew)` to return `\"deacon/\"` (or new crew manager)\n2. Teach Deacon to recognize crew session naming pattern\n3. Add crew to Deacon's respawn loop handling\n4. Test with `gt nudge` for reliable message delivery\n\n## Use Case\nRunning a molecule (e.g., version-bump) and discovering mid-workflow that a fresh session is needed. Agent should be able to request refresh automatically rather than requiring human intervention.\n\n## Related\n- gt nudge: reliable message delivery to Claude sessions\n- bd mol bond: molecule instantiation (coming in beads)","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-20T17:19:46.854829-08:00","updated_at":"2025-12-20T17:19:46.854829-08:00"} {"id":"gt-977","title":"Work request: gt-976 crew lifecycle support","description":"Hey Max, filed gt-976 for you - adding crew lifecycle support to Deacon.\n\nCurrently crew is 'human-managed' and can't request automated refresh. Would be useful for molecules that need fresh sessions mid-workflow.\n\nKey changes:\n- getManager(RoleCrew) → return deacon/ instead of human\n- Teach Deacon crew session patterns\n- Test with gt nudge\n\nPriority 2, no rush but would unblock molecule automation for crew.\n\n- Dave (beads/crew/dave)","status":"open","priority":2,"issue_type":"message","created_at":"2025-12-20T17:19:55.964718-08:00","updated_at":"2025-12-20T17:19:55.964718-08:00"} {"id":"gt-98oo","title":"Merge: gt-y5o","description":"branch: polecat/Doof\ntarget: main\nsource_issue: gt-y5o\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T16:29:03.837448-08:00","updated_at":"2025-12-19T18:26:14.102603-08:00","closed_at":"2025-12-19T17:47:03.619784-08:00"} -{"id":"gt-98y0y","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:49:30.91936-08:00","updated_at":"2025-12-24T23:49:30.91936-08:00","closed_at":"2025-12-24T23:49:30.919329-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-98y0y","depends_on_id":"gt-m97c","type":"parent-child","created_at":"2025-12-24T23:49:30.920049-08:00","created_by":"stevey"}]} +{"id":"gt-98y0y","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:49:30.91936-08:00","updated_at":"2025-12-24T23:49:30.91936-08:00","closed_at":"2025-12-24T23:49:30.919329-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-99a","title":"Add unit tests for daemon package","description":"The daemon package has no unit tests. Need tests for:\n- Config and state serialization\n- Session name pattern matching (isWitnessSession)\n- Lifecycle request parsing\n- Identity to session mapping","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T13:38:10.458609-08:00","updated_at":"2025-12-19T17:22:52.552189-08:00","closed_at":"2025-12-19T16:17:43.92102-08:00","dependencies":[{"issue_id":"gt-99a","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T13:38:26.466501-08:00","created_by":"daemon"}]} {"id":"gt-99m","title":"gt daemon: Background service management","description":"## Summary\n\nONE daemon for all Gas Town - a simple Go process (not a Claude agent) that:\n1. Pokes agents periodically (heartbeat)\n2. Processes lifecycle requests\n3. Restarts sessions when agents request cycling\n\n## Architecture\n\nDaemon (gt daemon)\n- Pokes Mayor: \"HEARTBEAT: check your rigs\"\n- Pokes each Witness: \"HEARTBEAT: check your workers\"\n- Has inbox at daemon/ for lifecycle requests\n- Restarts sessions on cycle requests\n\n## NOT the daemon's job:\n- Making decisions (Witnesses do that)\n- Running Claude (it's a Go process)\n- Processing work (polecats do that)\n- Direct polecat management (Witnesses do that)\n\nThe daemon is a **dumb scheduler** - poke things, execute lifecycle requests. All intelligence is in agents.\n\n## Commands\n\n- gt daemon start: Start daemon (background)\n- gt daemon stop: Stop daemon\n- gt daemon status: Show daemon status\n- gt daemon logs: View daemon logs\n\n## Daemon Loop\n\nEvery heartbeat interval:\n1. Poke Mayor\n2. For each rig: Poke Witness\n3. Process lifecycle requests from daemon/ inbox\n4. Check for dead sessions, restart if cycle requested\n\n## Lifecycle Request Handling\n\nDaemon checks its inbox (daemon/) for lifecycle requests:\n- From Mayor: cycle/restart Mayor session\n- From Witnesses: cycle/restart Witness session\n\nOn request:\n1. Verify agent state shows requesting_cycle\n2. Kill session\n3. Start new session\n4. Clear requesting_cycle flag\n\n## Poke Protocol\n\nPoke = tmux inject \"HEARTBEAT: do your job\"\n- Agent ignores if already working\n- Agent wakes up if idle\n- Idempotent - multiple pokes are fine\n\n## Lifecycle Hierarchy\n\n- Daemon manages: Mayor, all Witnesses\n- Witness manages: Polecats, Refinery (per rig)\n- Crew: self-managed (human workspace)\n\n## Related Issues\n\n- gt-kmn.11: Daemon heartbeat details\n- gt-gby: gt handoff command (unified lifecycle)\n- gt-u1j.9: Fold witness daemon into this","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:50:09.763719-08:00","updated_at":"2025-12-19T12:05:27.33958-08:00","closed_at":"2025-12-19T12:05:27.33958-08:00","dependencies":[{"issue_id":"gt-99m","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:23:43.253877-08:00","created_by":"daemon"}]} {"id":"gt-9a2","title":"Federation: Wasteland architecture for cross-town coordination","description":"## Overview\n\nFederation enables Gas Town to scale across machines via **Outposts** - remote compute environments that can run workers.\n\n**Design doc**: docs/federation-design.md\n\n## Outpost Types\n\n| Type | Description | Cost Model |\n|------|-------------|------------|\n| Local | Current model (tmux panes) | Free |\n| SSH/VM | Full Gas Town clone on VM | Always-on |\n| CloudRun | Container workers on GCP | Pay-per-use |\n\n## Key Concepts\n\n### Outpost Abstraction\n```go\ntype Outpost interface {\n Name() string\n Type() OutpostType // local, ssh, cloudrun\n MaxWorkers() int\n Spawn(issue string, config WorkerConfig) (Worker, error)\n Workers() []Worker\n Ping() error\n}\n```\n\n### Cloud Run Workers\n- Persistent HTTP/2 connections solve zero-to-one cold start\n- Pay only when working (~$0.017 per 5-min session)\n- Scale 0→N automatically\n- Git clone via persistent volumes\n\n### SSH/VM Outposts \n- Full Gas Town clone on remote machine\n- SSH for commands, git for sync\n- Good for long-running autonomous work\n\n## Design Principles\n\n1. **Outpost abstraction** - support multiple backends\n2. **Local-first** - remote is for overflow/burst\n3. **Git as source of truth** - code and beads sync everywhere\n4. **HTTP for Cloud Run** - dont force mail onto containers\n5. **Graceful degradation** - works with any subset of outposts\n\n## Related\n\n- gt-f9x.7-10: Connection interface (lower-level abstraction)\n- docs/federation-design.md: Full architectural analysis","status":"open","priority":3,"issue_type":"epic","created_at":"2025-12-15T19:21:32.462063-08:00","updated_at":"2025-12-16T18:01:24.224349-08:00"} @@ -380,8 +380,8 @@ {"id":"gt-9a2.7","title":"CloudRun protocol types: WorkRequest, WorkEvent, WorkResult","description":"## Overview\n\nHTTP protocol types for Cloud Run work dispatch. **Types only** - server and client are separate tasks.\n\n## Request Type\n\n```go\ntype WorkRequest struct {\n IssueID string `json:\"issue_id\"`\n Rig RigConfig `json:\"rig\"`\n Beads BeadsConfig `json:\"beads\"`\n Branch string `json:\"worker_branch\"`\n Context map[string]any `json:\"context,omitempty\"`\n}\n\ntype RigConfig struct {\n URL string `json:\"url\"`\n Branch string `json:\"branch\"`\n}\n\ntype BeadsConfig struct {\n URL string `json:\"url\"`\n Branch string `json:\"branch\"`\n}\n```\n\n## Response Types (streaming NDJSON)\n\n```go\ntype WorkEvent struct {\n Type string `json:\"type\"` // status, log, progress, result, error\n Status string `json:\"status,omitempty\"`\n Line string `json:\"line,omitempty\"`\n Percent int `json:\"percent,omitempty\"`\n Branch string `json:\"branch,omitempty\"`\n PRURL string `json:\"pr_url,omitempty\"`\n Code string `json:\"code,omitempty\"`\n Message string `json:\"message,omitempty\"`\n}\n\ntype WorkResult struct {\n Status string `json:\"status\"` // done, failed\n Branch string `json:\"branch\"`\n PRURL string `json:\"pr_url,omitempty\"`\n Error string `json:\"error,omitempty\"`\n}\n```\n\n## Files\n\n- `internal/cloudrun/protocol.go` - All types above\n\n## Notes\n\nThis is just types. Server (gt-9a2.7b) and client (gt-9a2.7c) are separate tasks.\nSmall, focused task - can complete quickly.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T18:02:51.480019-08:00","updated_at":"2025-12-16T18:14:49.196218-08:00","dependencies":[{"issue_id":"gt-9a2.7","depends_on_id":"gt-9a2","type":"parent-child","created_at":"2025-12-16T18:02:51.48197-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.7","depends_on_id":"gt-9a2.1","type":"blocks","created_at":"2025-12-16T18:03:45.984572-08:00","created_by":"daemon"}]} {"id":"gt-9a2.8","title":"CloudRunOutpost: Basic implementation","description":"## Overview\n\nBasic CloudRunOutpost implementation. Persistent connections and cost tracking are separate tasks.\n\n## Implementation\n\n```go\ntype CloudRunOutpost struct {\n name string\n project string\n region string\n service string\n maxWorkers int\n client *WorkClient\n workers map[string]*CloudRunWorker\n mu sync.RWMutex\n}\n\nfunc NewCloudRunOutpost(cfg OutpostConfig) (*CloudRunOutpost, error) {\n serviceURL := fmt.Sprintf(\n \"https://%s-%s.a.run.app\",\n cfg.Service, cfg.Region,\n )\n return \u0026CloudRunOutpost{\n name: cfg.Name,\n project: cfg.Project,\n region: cfg.Region,\n service: cfg.Service,\n maxWorkers: cfg.MaxWorkers,\n client: NewWorkClient(serviceURL),\n workers: make(map[string]*CloudRunWorker),\n }, nil\n}\n```\n\n## Spawn\n\n```go\nfunc (o *CloudRunOutpost) Spawn(issue string, cfg WorkerConfig) (Worker, error) {\n req := WorkRequest{\n IssueID: issue,\n Rig: RigConfig{URL: cfg.RigURL, Branch: cfg.GitBranch},\n Beads: BeadsConfig{URL: cfg.BeadsURL, Branch: \"beads-sync\"},\n Branch: \"polecat/\" + issue,\n }\n \n events, err := o.client.DispatchWork(context.Background(), req)\n if err != nil {\n return nil, err\n }\n \n worker := \u0026CloudRunWorker{\n id: uuid.New().String(),\n outpost: o.name,\n issue: issue,\n events: events,\n status: WorkerStatusWorking,\n }\n \n o.mu.Lock()\n o.workers[worker.id] = worker\n o.mu.Unlock()\n \n go worker.monitor()\n return worker, nil\n}\n```\n\n## CloudRunWorker\n\n```go\ntype CloudRunWorker struct {\n id string\n outpost string\n issue string\n status WorkerStatus\n events \u003c-chan WorkEvent\n logs []string\n}\n\nfunc (w *CloudRunWorker) Attach() error {\n return errors.New(\"Cloud Run workers do not support attach\")\n}\n\nfunc (w *CloudRunWorker) Logs() (io.Reader, error) {\n return strings.NewReader(strings.Join(w.logs, \"\\n\")), nil\n}\n```\n\n## Files\n\n- `internal/outpost/cloudrun.go`\n\n## Dependencies\n\nDepends on: gt-9a2.1 (interfaces), gt-9a2.12 (HTTP client)\nBlocks: gt-9a2.13 (persistent connections), gt-9a2.14 (cost tracking)","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T18:03:06.803401-08:00","updated_at":"2025-12-16T18:15:39.752892-08:00","dependencies":[{"issue_id":"gt-9a2.8","depends_on_id":"gt-9a2","type":"parent-child","created_at":"2025-12-16T18:03:06.805524-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.8","depends_on_id":"gt-9a2.1","type":"blocks","created_at":"2025-12-16T18:03:46.081721-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.8","depends_on_id":"gt-9a2.12","type":"blocks","created_at":"2025-12-16T18:15:54.915831-08:00","created_by":"daemon"}]} {"id":"gt-9a2.9","title":"Outpost assignment policy: Smart work routing","description":"## Overview\n\nPolicy engine for deciding which outpost gets which work.\n\n## Policy Configuration\n\n```yaml\npolicy:\n # Default order of preference\n default_preference: [local, gce-burst, cloudrun-burst]\n \n # Rules applied in order\n rules:\n # Background work → Cloud Run (cheap)\n - condition: \"priority \u003e= P3\"\n prefer: cloudrun-burst\n \n # Long tasks → VM (persistent)\n - condition: \"estimated_duration \u003e 30m\"\n prefer: gce-burst\n \n # Specific epic → specific outpost\n - condition: \"epic == gt-abc\"\n prefer: local\n```\n\n## Implementation\n\n```go\ntype AssignmentPolicy struct {\n DefaultPreference []string\n Rules []PolicyRule\n}\n\ntype PolicyRule struct {\n Condition string // Simple expression\n Prefer string // Outpost name\n Require string // Must use this outpost\n}\n\nfunc (p *AssignmentPolicy) SelectOutpost(\n issue Issue, \n outposts map[string]Outpost,\n) Outpost {\n // Check rules in order\n for _, rule := range p.Rules {\n if rule.Matches(issue) {\n if op, ok := outposts[rule.Prefer]; ok {\n if op.ActiveWorkers() \u003c op.MaxWorkers() {\n return op\n }\n }\n }\n }\n \n // Fall back to default preference\n for _, name := range p.DefaultPreference {\n if op, ok := outposts[name]; ok {\n if op.ActiveWorkers() \u003c op.MaxWorkers() {\n return op\n }\n }\n }\n \n return nil // All outposts at capacity\n}\n```\n\n## Condition Language\n\nSimple expressions, not a full DSL:\n\n```\npriority \u003e= P3\npriority == P0\nestimated_duration \u003e 30m\nepic == gt-abc\ntype == bug\nlabel contains \"urgent\"\n```\n\n## Files\n\n- `internal/outpost/policy.go`\n- `internal/outpost/condition.go`\n\nDepends on: gt-9a2.3 (config)","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T18:03:21.08101-08:00","updated_at":"2025-12-16T18:03:21.08101-08:00","dependencies":[{"issue_id":"gt-9a2.9","depends_on_id":"gt-9a2","type":"parent-child","created_at":"2025-12-16T18:03:21.083256-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.9","depends_on_id":"gt-9a2.3","type":"blocks","created_at":"2025-12-16T18:03:46.300288-08:00","created_by":"daemon"}]} -{"id":"gt-9d5zz","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:03:13.84255-08:00","updated_at":"2025-12-25T00:03:13.84255-08:00","closed_at":"2025-12-25T00:03:13.842522-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-9d5zz","depends_on_id":"gt-k1n89","type":"parent-child","created_at":"2025-12-25T00:03:13.843201-08:00","created_by":"stevey"}]} -{"id":"gt-9e8q","title":"Digest: mol-deacon-patrol","description":"Patrol 14","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:11.832142-08:00","updated_at":"2025-12-24T23:10:11.832142-08:00","closed_at":"2025-12-24T23:10:11.832112-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-9e8q","depends_on_id":"gt-39pj","type":"parent-child","created_at":"2025-12-24T23:10:11.83284-08:00","created_by":"stevey"}]} +{"id":"gt-9d5zz","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:03:13.84255-08:00","updated_at":"2025-12-25T00:03:13.84255-08:00","closed_at":"2025-12-25T00:03:13.842522-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-9e8q","title":"Digest: mol-deacon-patrol","description":"Patrol 14","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:11.832142-08:00","updated_at":"2025-12-24T23:10:11.832142-08:00","closed_at":"2025-12-24T23:10:11.832112-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-9g82","title":"Polecat wisp architecture: Proto → Wisp → Mol pattern","description":"Design the three-layer architecture for polecat lifecycle:\n\n## The Insight\n\nPolecats should run a ONE-SHOT WISP (not looping like patrols):\n\n**Step 1: Onboard**\n- Read full polecat protocol (polecat.md template)\n- Learn Gas Town operation, exit strategies, molecule protocol\n- This is the 'how to be a polecat' education\n\n**Step 2: Execute Mol**\n- Run the assigned molecule (the actual work item)\n- Could span multiple sessions via session continuity\n- The mol is pure work content (epic, issue, feature)\n\n**Step 3: Cleanup**\n- Run final step of the wisp\n- Self-delete / request shutdown\n\n## Three Layers\n\n- **Proto**: polecat.md template (instructions for being a polecat)\n- **Wisp**: One-shot harness instantiated from proto (wraps the mol)\n- **Mol**: The work item (issue/epic being processed)\n\n## Why This Matters\n\n1. **Separation of concerns**: Protocol (how) vs Work (what)\n2. **Reusability**: Same wisp harness wraps any mol\n3. **Extensibility**: Plugin points for custom behavior\n4. **Session continuity**: Wisp handles multi-session, not the mol\n5. **Blurred control/data planes**: Intentional in Gas Town\n\n## Design Questions\n\n1. How does proto (polecat.md) become a wisp instance?\n2. What are the plugin/extension points?\n3. Should all 'engineer in a box' mols use proto → wisp → mol?\n4. How does this relate to refinery/deacon patterns?","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-22T15:54:17.446941-08:00","updated_at":"2025-12-22T16:15:02.608799-08:00","closed_at":"2025-12-22T16:15:02.608799-08:00","close_reason":"Implemented Proto → Wisp → Mol architecture with mol-crew-session, mol-polecat-session, and auto-continue logic in gt prime"} {"id":"gt-9its","title":"Digest: mol-deacon-patrol","description":"Patrol #11","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:24:28.490294-08:00","updated_at":"2025-12-24T22:24:28.490294-08:00","closed_at":"2025-12-24T22:24:28.490267-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-9j9","title":"CLI: worker status reporting commands","description":"Worker status reporting CLI for polecats to report progress.\n\n## Commands\n\n### gt worker started\n```\ngt worker started \u003cissue-id\u003e [-m MESSAGE]\n```\nReports work started on issue.\n\n### gt worker progress\n```\ngt worker progress \u003cissue-id\u003e \u003c0-100\u003e [-m MESSAGE]\n```\nReports percentage complete.\n\n### gt worker blocked\n```\ngt worker blocked \u003cissue-id\u003e \u003creason\u003e [-m MESSAGE]\n```\nReports blocked status with reason.\n\n### gt worker completed\n```\ngt worker completed \u003cissue-id\u003e [-m MESSAGE]\n```\nReports task completion.\n\n### gt worker failed\n```\ngt worker failed \u003cissue-id\u003e \u003creason\u003e [-m MESSAGE]\n```\nReports task failure.\n\n## Implementation\nEach command sends mail to refinery with structured content:\n```go\ntype WorkerStatusReport struct {\n IssueID string\n Status string // started|progress|blocked|completed|failed\n Progress int // 0-100 for progress\n Reason string // for blocked/failed\n Message string // optional detail\n ReportedAt time.Time\n}\n```\n\n## Message Format\nSubject: \"[STATUS] \u003cissue-id\u003e: \u003cstatus\u003e\"\nBody: JSON-encoded WorkerStatusReport\n\n## Default Recipient\n```go\n// Determine from context\nfunc getDefaultRecipient() string {\n rig := os.Getenv(\"GT_RIG\")\n if rig != \"\" {\n return rig + \"/refinery\"\n }\n return \"refinery/\"\n}\n```\n\n## New File\ninternal/cmd/worker.go\n\n## PGT Reference\ngastown-py/src/gastown/cli/worker_cmd.py\n\n## Acceptance Criteria\n- [ ] All 5 commands implemented\n- [ ] Status sent as mail to refinery\n- [ ] Structured JSON body for parsing\n- [ ] Works from polecat session context","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:47:52.795695-08:00","updated_at":"2025-12-16T16:05:26.715967-08:00"} @@ -390,10 +390,10 @@ {"id":"gt-9mb","title":"Recreate beads rigs with fresh clones","description":"## Problem\n\nBeads rigs have schema mismatches (missing thread_id column, etc.) from development iteration.\n\n## Tasks\n\n1. Shut down any active polecats\n2. Delete existing beads rigs: mayor/rig, refinery/rig, witness/rig, crew/*\n3. Re-clone from beads repo\n4. Run bd init in each new clone\n\n## Rigs to recreate\n\n- /Users/stevey/gt/beads/mayor/rig\n- /Users/stevey/gt/beads/refinery/rig\n- /Users/stevey/gt/beads/crew/* (if any)\n\n## Source\n\nClone from beads repo (need to confirm remote URL)","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-18T19:13:32.208448-08:00","updated_at":"2025-12-18T19:16:27.096311-08:00","closed_at":"2025-12-18T19:16:27.096311-08:00"} {"id":"gt-9mgn","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:25","description":"Patrol 10: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:25:35.360033-08:00","updated_at":"2025-12-24T19:25:35.360033-08:00","closed_at":"2025-12-24T19:25:35.359975-08:00","close_reason":"Squashed from wisp gt-68u (9 issues)"} {"id":"gt-9mzd","title":"Refinery not processing merge-requests - stale MRs accumulating","description":"Discovered 15 stale merge-request issues in beads rig that were never processed by the refinery. These appear to be from polecat branches that completed work but the refinery didn't pick up the merge-requests.\n\nClosed issues:\n- bd-r06v, bd-bhg7, bd-754r, bd-fcl1, bd-3zzh\n- bd-bijf, bd-5rj1, bd-kptp, bd-rdzk, bd-ibl9\n- bd-gfo3, bd-aq3s, bd-x2bd, bd-s1pz, bd-h27p\n\nNeed to investigate:\n1. Why refinery isn't picking up merge-requests\n2. Whether the polecat branches have valid work to merge\n3. Add monitoring/alerting for stale MRs","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-23T19:12:08.629863-08:00","updated_at":"2025-12-23T19:12:08.629863-08:00"} -{"id":"gt-9mzv1","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:34:41.715664-08:00","updated_at":"2025-12-25T00:34:41.715664-08:00","closed_at":"2025-12-25T00:34:41.715627-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-9mzv1","depends_on_id":"gt-lt9j1","type":"parent-child","created_at":"2025-12-25T00:34:41.716388-08:00","created_by":"stevey"}]} +{"id":"gt-9mzv1","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:34:41.715664-08:00","updated_at":"2025-12-25T00:34:41.715664-08:00","closed_at":"2025-12-25T00:34:41.715627-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-9nf","title":"gt spawn should create fresh polecat worktree, never reuse","description":"Currently gt spawn tries to reuse existing polecats, which causes:\n\n1. Stale beads database\n2. Stale code (behind main/integration)\n3. Old inbox messages\n4. Git history pollution\n\n## Current Behavior\n\ngt spawn:\n1. Looks for idle polecat in pool\n2. If found, reuses existing worktree\n3. Assigns new issue\n\n## Desired Behavior\n\ngt spawn:\n1. Always create FRESH polecat from current main/integration\n2. Fresh worktree with clean beads\n3. No reuse of old worktrees\n\n## Name Pool Still Useful\n\nKeep name pool for:\n- Allocating themed names (mad-max, etc.)\n- Tracking which names are in use\n\nBut worktrees should be created fresh each time.\n\n## Implementation\n\nIn spawn.go, before starting work:\n1. If worktree exists: remove it first\n2. Create fresh worktree from integration branch\n3. Sync beads from rig to polecat\n4. Then proceed with work assignment\n\nThis ensures polecats always start with latest code and beads.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T15:23:35.250531-08:00","updated_at":"2025-12-21T15:38:41.381329-08:00","closed_at":"2025-12-21T15:38:41.381329-08:00","close_reason":"Already implemented in commit 82d718e","dependencies":[{"issue_id":"gt-9nf","depends_on_id":"gt-8v8","type":"blocks","created_at":"2025-12-20T15:40:09.069331-08:00","created_by":"daemon"}]} {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:48:38.058041-08:00","updated_at":"2025-12-24T23:48:38.058041-08:00","closed_at":"2025-12-24T23:48:38.058007-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-9ojgy","depends_on_id":"gt-m3am","type":"parent-child","created_at":"2025-12-24T23:48:38.058721-08:00","created_by":"stevey"}]} +{"id":"gt-9ojgy","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:48:38.058041-08:00","updated_at":"2025-12-24T23:48:38.058041-08:00","closed_at":"2025-12-24T23:48:38.058007-08:00","close_reason":"Squashed from 8 wisps"} {"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":"open","priority":2,"issue_type":"feature","created_at":"2025-12-22T03:03:38.693983-08:00","updated_at":"2025-12-22T03:03:38.693983-08:00"} {"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-9t14","title":"Wire up --wisp flag for ephemeral molecules","description":"The --wisp flag exists in gt sling but isn't wired through to bd mol.\n\nNeed:\n1. bd mol run --wisp - spawn to .beads-wisp/ instead of .beads/\n2. Automatic burn on molecule completion\n3. Optional squash to digest for audit trail\n\nCurrently:\n- sling.go sets thing.IsWisp but never uses it\n- bd mol run has no --wisp flag\n- .beads-wisp/ exists but nothing writes to it","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-22T13:12:25.192854-08:00","updated_at":"2025-12-22T13:18:50.72531-08:00","closed_at":"2025-12-22T13:18:50.72531-08:00","close_reason":"Wired --wisp flag: uses .beads-wisp/ storage when available, propagates IsWisp through MoleculeContext"} @@ -407,15 +407,15 @@ {"id":"gt-a07f","title":"Chemistry UX commands from Beads","description":"Waiting on Beads repo to implement chemistry UX sugar commands (bd pour, bd wisp, bd hook, --pour flag). These are nice-to-have polish items, not blockers for core functionality.\n\nSee: gastown/mayor/rig/docs/chemistry-design-changes.md","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-22T02:19:04.083172-08:00","updated_at":"2025-12-22T02:27:57.949903-08:00","closed_at":"2025-12-22T02:27:57.949903-08:00","close_reason":"Dave completed bd pour, bd wisp, bd hook, --pour flag. Ready for Gas Town integration.","external_ref":"beads:bd-kwjh","labels":["external:beads/bd-kwjh"]} {"id":"gt-a5yv","title":"Digest: mol-deacon-patrol","description":"Patrol 4: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:56:31.09396-08:00","updated_at":"2025-12-24T20:56:31.09396-08:00","closed_at":"2025-12-24T20:56:31.09393-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-a6dy","title":"Merge: gt-0ei3","description":"branch: polecat/capable\ntarget: main\nsource_issue: gt-0ei3\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T09:28:33.182299-08:00","updated_at":"2025-12-20T23:17:25.794011-08:00","closed_at":"2025-12-20T23:17:25.794011-08:00","close_reason":"Branches nuked, MRs obsolete"} -{"id":"gt-a7zs","title":"Digest: mol-deacon-patrol","description":"Patrol #7: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:32:12.166348-08:00","updated_at":"2025-12-24T23:32:12.166348-08:00","closed_at":"2025-12-24T23:32:12.166319-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-a7zs","depends_on_id":"gt-vb37","type":"parent-child","created_at":"2025-12-24T23:32:12.167002-08:00","created_by":"stevey"}]} +{"id":"gt-a7zs","title":"Digest: mol-deacon-patrol","description":"Patrol #7: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:32:12.166348-08:00","updated_at":"2025-12-24T23:32:12.166348-08:00","closed_at":"2025-12-24T23:32:12.166319-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-a817","title":"Update polecat CLAUDE.md with molecule workflow","description":"Add molecule execution guidance to polecat context:\n\n## What to Add\n\n### Molecule Awareness\n- Polecats execute Wisps (ephemeral molecule instances)\n- The work assignment mail includes molecule context\n- Current step is tracked in the wisp\n\n### Workflow Protocol\n1. Read assignment (includes molecule ID and current step)\n2. Execute current step\n3. Update step status via bd mol step\n4. Generate summary when all steps complete\n5. Run bd mol squash to compress wisp into digest\n\n### Key Commands\n- bd mol show \u003cwisp-id\u003e - view current molecule state\n- bd mol step \u003cwisp-id\u003e --status=complete - mark step done\n- bd mol squash \u003cwisp-id\u003e --summary='...' - complete molecule\n\n### Summary Generation\nWhen completing work, generate a summary that:\n- Lists what was accomplished\n- Notes any deviations from the plan\n- Captures key decisions made\n- This becomes the permanent digest","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/furiosa","created_at":"2025-12-21T16:33:05.36066-08:00","updated_at":"2025-12-21T16:42:47.779155-08:00","closed_at":"2025-12-21T16:42:47.779155-08:00","close_reason":"Added molecule workflow section to polecat.md with phases, workflow protocol, commands, and summary generation guidance","dependencies":[{"issue_id":"gt-a817","depends_on_id":"gt-62hm","type":"blocks","created_at":"2025-12-21T16:33:17.457167-08:00","created_by":"daemon"}]} {"id":"gt-a95","title":"Refinery background daemon mode","description":"Refinery currently only works in foreground mode. Background daemon is stubbed.\n\n## Current State\nmanager.go line 128-129:\n```go\n// Background mode: spawn a new process\n// For MVP, we just mark as running - actual daemon implementation in gt-ov2\nreturn nil\n```\n\n## Requirements\n\n### 1. Background Process Spawning\n```go\nfunc (m *Manager) Start(foreground bool) error {\n if !foreground {\n // Spawn gt refinery start --foreground as subprocess\n cmd := exec.Command(os.Args[0], \"refinery\", \"start\", m.rig.Name, \"--foreground\")\n cmd.Start() // Don't wait\n // Record PID\n }\n}\n```\n\n### 2. PID File Management\n- Write PID to .gastown/refinery.pid\n- Check PID validity on status\n- Clean up stale PID files\n\n### 3. Log Output\n- Redirect stdout/stderr to .gastown/refinery.log\n- Log rotation (optional for MVP)\n\n### 4. Graceful Shutdown\n- Handle SIGTERM/SIGINT\n- Complete current merge before exit\n- Update state to stopped\n\n### 5. Health Check\n- Process existence check via kill -0\n- Optional: heartbeat file with timestamp\n\n## Files to Modify\n- internal/refinery/manager.go: Start(), Status(), process spawning\n\n## Acceptance Criteria\n- [ ] gt refinery start \u003crig\u003e spawns background process\n- [ ] gt refinery status shows running with PID\n- [ ] gt refinery stop sends SIGTERM and waits\n- [ ] Logs written to .gastown/refinery.log\n- [ ] Survives terminal close","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T14:46:53.366619-08:00","updated_at":"2025-12-19T15:24:39.124789-08:00","closed_at":"2025-12-19T14:47:40.165105-08:00"} -{"id":"gt-a9o7y","title":"Digest: mol-deacon-patrol","description":"Patrol 12: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:33:54.353809-08:00","updated_at":"2025-12-25T00:33:54.353809-08:00","closed_at":"2025-12-25T00:33:54.353782-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-a9o7y","depends_on_id":"gt-h4ox5","type":"parent-child","created_at":"2025-12-25T00:33:54.354466-08:00","created_by":"stevey"}]} +{"id":"gt-a9o7y","title":"Digest: mol-deacon-patrol","description":"Patrol 12: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:33:54.353809-08:00","updated_at":"2025-12-25T00:33:54.353809-08:00","closed_at":"2025-12-25T00:33:54.353782-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-a9y","title":"File locking for concurrent access","description":"Add file locking for concurrent access safety.\n\n## At-Risk Files\n- .gastown/swarms.json (or per-swarm state.json)\n- .gastown/refinery.json\n- polecats/\u003cname\u003e/state.json\n- inbox.jsonl files\n\n## Go File Locking\nUse syscall.Flock for advisory locking:\n```go\ntype FileLock struct {\n file *os.File\n}\n\nfunc AcquireLock(path string, timeout time.Duration) (*FileLock, error) {\n f, err := os.OpenFile(path+\".lock\", os.O_CREATE|os.O_RDWR, 0644)\n if err != nil {\n return nil, err\n }\n // Use syscall.Flock with timeout\n}\n\nfunc (l *FileLock) Release() error\n```\n\n## Integration Pattern\n```go\nfunc (m *Manager) saveState(ref *Refinery) error {\n lock, err := AcquireLock(m.stateFile(), 5*time.Second)\n if err != nil {\n return fmt.Errorf(\"could not acquire lock: %w\", err)\n }\n defer lock.Release()\n \n // Read-modify-write cycle\n}\n```\n\n## New Package\ninternal/filelock/\n├── lock.go # FileLock, AcquireLock\n└── lock_test.go\n\n## Apply To\n- internal/refinery/manager.go: loadState/saveState\n- internal/cmd/swarm.go: SwarmStore\n- internal/mail/mailbox.go: Append, rewrite\n- internal/polecat/manager.go: state operations\n\n## Timeout Handling\nDefault 5 second timeout. Return error if lock not acquired.\n\n## Acceptance Criteria\n- [ ] Lock files created (.lock extension)\n- [ ] Timeout on lock contention\n- [ ] All state files protected\n- [ ] Locks released on error paths","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:48:15.641938-08:00","updated_at":"2025-12-16T16:06:32.441426-08:00"} -{"id":"gt-aa5l","title":"Digest: mol-deacon-patrol","description":"Patrol #14: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:09.997525-08:00","updated_at":"2025-12-24T23:34:09.997525-08:00","closed_at":"2025-12-24T23:34:09.997495-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-aa5l","depends_on_id":"gt-axvb","type":"parent-child","created_at":"2025-12-24T23:34:09.998268-08:00","created_by":"stevey"}]} -{"id":"gt-ab30","title":"Digest: mol-deacon-patrol","description":"Patrol #9: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:32:51.348182-08:00","updated_at":"2025-12-24T23:32:51.348182-08:00","closed_at":"2025-12-24T23:32:51.348139-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-ab30","depends_on_id":"gt-nioz","type":"parent-child","created_at":"2025-12-24T23:32:51.348856-08:00","created_by":"stevey"}]} +{"id":"gt-aa5l","title":"Digest: mol-deacon-patrol","description":"Patrol #14: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:09.997525-08:00","updated_at":"2025-12-24T23:34:09.997525-08:00","closed_at":"2025-12-24T23:34:09.997495-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-ab30","title":"Digest: mol-deacon-patrol","description":"Patrol #9: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:32:51.348182-08:00","updated_at":"2025-12-24T23:32:51.348182-08:00","closed_at":"2025-12-24T23:32:51.348139-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-abfu","title":"Polecat template: simplify completion section to just 'gt done'","description":"Completion section lists multiple options (gt done, gt handoff, bd sync). Should just say 'gt done' with succinct guidance on when bd sync is needed. Remove the alternatives that cause confusion.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:48.024442-08:00","updated_at":"2025-12-23T17:09:02.125352-08:00","closed_at":"2025-12-23T17:09:02.125352-08:00","close_reason":"Completed in commit 1931ec7","dependencies":[{"issue_id":"gt-abfu","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.45135-08:00","created_by":"daemon"}]} -{"id":"gt-acopl","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:00:38.044651-08:00","updated_at":"2025-12-25T00:00:38.044651-08:00","closed_at":"2025-12-25T00:00:38.044617-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-acopl","depends_on_id":"gt-rm475","type":"parent-child","created_at":"2025-12-25T00:00:38.045343-08:00","created_by":"stevey"}]} +{"id":"gt-acopl","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:00:38.044651-08:00","updated_at":"2025-12-25T00:00:38.044651-08:00","closed_at":"2025-12-25T00:00:38.044617-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-aedd","title":"Polecat template: fix hard-to-parse sentence about persistence","description":"This sentence is hard to parse: 'When in doubt, prefer bd—persistence you don't need beats lost context'. Rewrite for clarity, e.g., 'When in doubt, use bd for tracking - unnecessary persistence is better than lost context.'","status":"closed","priority":3,"issue_type":"bug","created_at":"2025-12-23T16:56:53.99389-08:00","updated_at":"2025-12-23T17:09:08.929035-08:00","closed_at":"2025-12-23T17:09:08.929035-08:00","close_reason":"Not found - sentence does not exist in templates","dependencies":[{"issue_id":"gt-aedd","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.69287-08:00","created_by":"daemon"}]} {"id":"gt-afe3","title":"Digest: mol-deacon-patrol","description":"Patrol 7: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:57:54.201136-08:00","updated_at":"2025-12-24T20:57:54.201136-08:00","closed_at":"2025-12-24T20:57:54.201106-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-afn0","title":"gt sling: use mail queue for patrol roles (witness, refinery, deacon)","description":"When slinging work to patrol agents, queue via mail instead of replacing hook.\n\n**Rationale:**\nPatrol agents run continuous loops. Replacing their hook with discrete work breaks patrol continuity - when the task completes, the patrol stops.\n\n**New behavior for patrol roles (witness, refinery, deacon):**\n1. Check if patrol is running (hook has patrol molecule attached)\n2. If patrol running:\n - Don't touch hook (patrol stays pinned)\n - Send work assignment mail\n - Print 'Queued for next patrol cycle'\n3. If patrol NOT running:\n - Start default patrol for that role (mol-witness-patrol, mol-refinery-patrol, mol-deacon-patrol)\n - Send work assignment mail\n - Print 'Started patrol and queued work'\n\n**New flags:**\n- --urgent: Interrupt current patrol cycle, process this work immediately\n- --replace: Explicitly terminate patrol and pin discrete work (break-glass)\n\n**No change for:**\n- Polecat, Crew, Mayor (discrete task agents - current behavior)\n\n**Dependencies:**\n- Patrol templates must have 'check inbox' step (verify/add)\n- Need to know default patrol molecule for each role","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-23T16:12:58.431633-08:00","updated_at":"2025-12-23T16:24:52.027412-08:00","closed_at":"2025-12-23T16:24:52.027412-08:00","close_reason":"Closed"} @@ -428,17 +428,17 @@ {"id":"gt-as08","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, no lifecycle requests, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:09:09.329759-08:00","updated_at":"2025-12-24T21:09:09.329759-08:00","closed_at":"2025-12-24T21:09:09.329724-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-asz5","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T13:17:04.278622-08:00","updated_at":"2025-12-25T01:33:00.648217-08:00","closed_at":"2025-12-25T01:33:00.648217-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-asz5.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T13:17:04.370549-08:00","updated_at":"2025-12-25T01:33:00.631328-08:00","closed_at":"2025-12-25T01:33:00.631328-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-asz5.1","depends_on_id":"gt-asz5","type":"parent-child","created_at":"2025-12-24T13:17:04.370981-08:00","created_by":"daemon"}]} -{"id":"gt-atr9o","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:31:37.450236-08:00","updated_at":"2025-12-25T00:31:37.450236-08:00","closed_at":"2025-12-25T00:31:37.450206-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-atr9o","depends_on_id":"gt-w8pq2","type":"parent-child","created_at":"2025-12-25T00:31:37.450961-08:00","created_by":"stevey"}]} +{"id":"gt-atr9o","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:31:37.450236-08:00","updated_at":"2025-12-25T00:31:37.450236-08:00","closed_at":"2025-12-25T00:31:37.450206-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-av4m","title":"execute-actions","description":"Send nudges, process shutdowns, escalate as decided.\n\nNeeds: decide-actions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T16:23:42.026052-08:00","updated_at":"2025-12-25T01:31:40.365099-08:00","closed_at":"2025-12-25T01:31:40.365099-08:00","close_reason":"Duplicate - closing cruft","dependencies":[{"issue_id":"gt-av4m","depends_on_id":"gt-87jz","type":"parent-child","created_at":"2025-12-23T16:23:42.026713-08:00","created_by":"stevey"}]} {"id":"gt-av8","title":"Update Mayor prompting in gastown-py","description":"The Mayor CLAUDE.md and related prompting in gastown-py (still in production use) needs to reflect current design decisions: session cycling, handoff protocol, cleanup responsibilities, beads access model. Sync prompting with GGT design work.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-15T20:24:09.953043-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-avq9","title":"Merge: gt-3x1.3","description":"branch: polecat/Doof\ntarget: main\nsource_issue: gt-3x1.3\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T21:23:06.77909-08:00","updated_at":"2025-12-20T21:23:06.858435-08:00","closed_at":"2025-12-20T21:23:06.858435-08:00","close_reason":"Historical import"} -{"id":"gt-avv7","title":"Digest: mol-deacon-patrol","description":"Patrol #12: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:40.201208-08:00","updated_at":"2025-12-24T23:33:40.201208-08:00","closed_at":"2025-12-24T23:33:40.201169-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-avv7","depends_on_id":"gt-q7bc","type":"parent-child","created_at":"2025-12-24T23:33:40.201914-08:00","created_by":"stevey"}]} -{"id":"gt-axtei","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:04:28.164433-08:00","updated_at":"2025-12-25T00:04:28.164433-08:00","closed_at":"2025-12-25T00:04:28.164393-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-axtei","depends_on_id":"gt-i5lgq","type":"parent-child","created_at":"2025-12-25T00:04:28.16515-08:00","created_by":"stevey"}]} +{"id":"gt-avv7","title":"Digest: mol-deacon-patrol","description":"Patrol #12: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:40.201208-08:00","updated_at":"2025-12-24T23:33:40.201208-08:00","closed_at":"2025-12-24T23:33:40.201169-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-axtei","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:04:28.164433-08:00","updated_at":"2025-12-25T00:04:28.164433-08:00","closed_at":"2025-12-25T00:04:28.164393-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-axz","title":"Design: Plugin architecture (agents-as-plugins)","description":"Plugin system where plugins are just additional agents with identities, mailboxes, and beads access. See docs/architecture.md Plugins section. No special framework - just directory conventions and mail-based invocation.","status":"open","priority":3,"issue_type":"epic","created_at":"2025-12-15T22:52:43.614095-08:00","updated_at":"2025-12-15T23:17:04.627865-08:00","dependencies":[{"issue_id":"gt-axz","depends_on_id":"gt-id36","type":"blocks","created_at":"2025-12-20T21:47:41.790184-08:00","created_by":"daemon"}]} {"id":"gt-ay1r","title":"gt molecule current: Show what agent should be working on","description":"Query what an agent identity is supposed to be working on via breadcrumb trail.\n\n## Command\n```bash\ngt molecule current \u003cidentity\u003e\ngt molecule current gastown/furiosa\ngt molecule current deacon\n```\n\n## Logic\n1. Find handoff bead for identity (pinned bead titled \"\u003crole\u003e Handoff\")\n2. Parse attachment field → molecule ID\n3. If no attachment → \"naked\" (no active molecule)\n4. If attached → load molecule, find current step:\n - bd ready --parent=\u003cmol-id\u003e → next unblocked step\n - Or first in_progress step\n\n## Output\n```\nIdentity: gastown/furiosa\nHandoff: gt-8v2 (Furiosa Handoff)\nMolecule: gt-mol-abc (mol-polecat-work)\nProgress: 3/8 steps complete\nCurrent: gt-mol-abc.4 - verify-tests\n```\n\nOr if naked:\n```\nIdentity: gastown/angharad\nHandoff: gt-9x1 (Angharad Handoff)\nMolecule: (none attached)\nStatus: naked - awaiting work assignment\n```\n\n## Use Cases\n- Mayor checking what polecats are doing\n- Witness verifying polecat progress\n- Debug: \"why isnt this polecat working?\"\n- Deacon patrol: track all agent states","status":"closed","priority":1,"issue_type":"feature","assignee":"gastown/dementus","created_at":"2025-12-21T21:34:01.430109-08:00","updated_at":"2025-12-22T23:43:41.533695-08:00","closed_at":"2025-12-22T23:43:41.533695-08:00","close_reason":"Implemented gt molecule current command"} {"id":"gt-az41","title":"mol-ready-work variants: safe vs aggressive","description":"## Summary\n\nCreate two variants of mol-ready-work:\n\n### mol-ready-work-safe (default)\n- PRs: review and comment, but require human approval for merge\n- Issues: triage only, don't auto-close\n- Beads: implement but create PR instead of pushing to main\n\n### mol-ready-work-aggressive \n- PRs: can approve and merge directly\n- Issues: can close duplicates/invalid\n- Beads: can push directly to main\n\n## Implementation\nCould be a single molecule with a `{{mode}}` variable, or two separate protos.\n\n## Parent\nPart of gt-tnca (mol-ready-work epic)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:19:38.703698-08:00","updated_at":"2025-12-23T01:19:38.703698-08:00","dependencies":[{"issue_id":"gt-az41","depends_on_id":"gt-tnca","type":"blocks","created_at":"2025-12-23T01:19:56.387233-08:00","created_by":"daemon"}]} {"id":"gt-b1g","title":"MVP Cutover: GGT replaces PGT for batch work","description":"When this is closed, stop using town and start using gt.\n\n## Acceptance Criteria\n\n1. gt spawn assigns issue to polecat and starts session\n2. gt spawn --epic spawns workers for all epic children\n3. gt session manages tmux lifecycle \n4. gt send / gt inbox work for mail\n5. Refinery processes merge queue with semantic merges\n6. Integration branches created and landed correctly\n7. gt stop --all halts all sessions\n8. One successful test batch completed end-to-end\n\n## What Must Work\n\n- Spawn polecat with issue assignment\n- Spawn workers for epic children\n- Session start/stop/attach\n- Mail send/inbox/read\n- Refinery merge loop (semantic)\n- Integration branch → main landing\n- Witness cleanup protocol\n- Emergency stop\n\n## What Can Be Deferred\n\n- Doctor checks (use PGT)\n- TUI dashboard\n- Plugin system\n- Federation\n- Ephemeral rigs\n- Detailed landing reports\n\n## Test Plan\n\n1. Create epic with 2 tasks, spawn 2 workers\n2. Verify polecats get assigned and sessions start\n3. Simulate task completion\n4. Verify Refinery merges to integration\n5. Verify landing to main\n6. Verify cleanup\n\n## Validation\n\nRun one real batch implementing GGT issues using GGT.\n\n## Note\n\nNo \"swarm IDs\" - just spawn workers for epic, let merge queue coordinate.","status":"closed","priority":0,"issue_type":"epic","created_at":"2025-12-16T00:11:09.148751-08:00","updated_at":"2025-12-20T03:13:30.970314-08:00","closed_at":"2025-12-20T03:13:30.970314-08:00","dependencies":[{"issue_id":"gt-b1g","depends_on_id":"gt-u1j.19","type":"blocks","created_at":"2025-12-16T00:11:36.196292-08:00","created_by":"daemon"},{"issue_id":"gt-b1g","depends_on_id":"gt-kmn.4","type":"blocks","created_at":"2025-12-16T00:11:36.273483-08:00","created_by":"daemon"},{"issue_id":"gt-b1g","depends_on_id":"gt-kmn.6","type":"blocks","created_at":"2025-12-16T00:11:36.351097-08:00","created_by":"daemon"},{"issue_id":"gt-b1g","depends_on_id":"gt-kmn.7","type":"blocks","created_at":"2025-12-16T00:11:36.431641-08:00","created_by":"daemon"},{"issue_id":"gt-b1g","depends_on_id":"gt-u1j.22","type":"blocks","created_at":"2025-12-16T00:11:36.511124-08:00","created_by":"daemon"},{"issue_id":"gt-b1g","depends_on_id":"gt-ov2","type":"blocks","created_at":"2025-12-16T00:11:51.609649-08:00","created_by":"daemon"},{"issue_id":"gt-b1g","depends_on_id":"gt-rm3","type":"blocks","created_at":"2025-12-16T00:11:51.69062-08:00","created_by":"daemon"},{"issue_id":"gt-b1g","depends_on_id":"gt-u1j.6","type":"blocks","created_at":"2025-12-16T21:36:32.942855-08:00","created_by":"daemon"},{"issue_id":"gt-b1g","depends_on_id":"gt-u1j.12","type":"blocks","created_at":"2025-12-16T21:36:35.053559-08:00","created_by":"daemon"}]} -{"id":"gt-b1krg","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Nominal - Handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:54:04.619206-08:00","updated_at":"2025-12-24T23:54:04.619206-08:00","closed_at":"2025-12-24T23:54:04.619175-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-b1krg","depends_on_id":"gt-u8ht5","type":"parent-child","created_at":"2025-12-24T23:54:04.619876-08:00","created_by":"stevey"}]} +{"id":"gt-b1krg","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Nominal - Handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:54:04.619206-08:00","updated_at":"2025-12-24T23:54:04.619206-08:00","closed_at":"2025-12-24T23:54:04.619175-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-b2bn","title":"Merge: gt-h6eq.5","description":"branch: polecat/keeper\ntarget: main\nsource_issue: gt-h6eq.5\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:45:44.660565-08:00","updated_at":"2025-12-23T12:22:23.439202-08:00","closed_at":"2025-12-23T12:22:23.439202-08:00","close_reason":"Merged to main in gt-h6eq swarm"} {"id":"gt-b2hj","title":"gt orphans: Find lost polecat work","description":"Add a command to find orphaned commits that were never merged to main.\n\n## Problem\nPolecat work can get lost when:\n- Session killed before merge\n- Refinery fails to process\n- Network issues during push\n\n## Solution\nAdd `gt orphans` command that:\n1. Uses `git fsck --unreachable` to find dangling commits\n2. Filters to recent commits (default: 7 days, configurable)\n3. Excludes stash/index entries (WIP on, index on)\n4. Shows commit details and suggests recovery\n\n## Usage\n```\ngt orphans # Last 7 days\ngt orphans --days=14 # Last 2 weeks\ngt orphans --recover # Interactive cherry-pick\n```\n\n## Found orphans (Dec 16-20, 2025)\n- 3b146c11: Fix mail read auto-ack and add Mayor startup directive\n- b6fdc561: Add persistent theme config and fix crew session theming\n- 97aba756: Unify gt prime to call bd prime and mail check\n- ce769ca5: Add mol-bootstrap molecule for Gas Town installation\n- b2219de7: Add bootstrap documentation for new Gas Town installations\n- bc82348: feat: Add gt done command (already recovered)","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T16:27:25.584819-08:00","updated_at":"2025-12-21T11:11:11.149526-08:00","closed_at":"2025-12-21T11:11:11.149526-08:00","close_reason":"Implemented gt orphans command"} {"id":"gt-b3p","title":"Resource Beads: Leases, locks, and quotas","description":"Resource beads represent reserved resources. Types: vm, lock, slot, quota. Fields: holder, expires, renewable. Daemon monitors for expiry and manages contention.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-18T18:08:12.745602-08:00","updated_at":"2025-12-18T18:08:12.745602-08:00"} @@ -460,7 +460,7 @@ {"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":"open","priority":3,"issue_type":"feature","created_at":"2025-12-20T17:53:44.834337-08:00","updated_at":"2025-12-20T17:53:44.834337-08:00"} {"id":"gt-bqbw","title":"detectSender() doesn't recognize crew workers","description":"## Problem\n\ndetectSender() in internal/cmd/mail.go only checks for /polecats/ directories. Crew workers in /crew/\u003cname\u003e/ fall through to the default 'mayor/', so:\n- gt mail inbox shows mayor's inbox instead of the crew worker's\n- gt mail send sets the wrong From address\n\n## Fix\n\nAdd crew worker detection before the /polecats/ check:\n\nif strings.Contains(cwd, \"/crew/\") {\n parts := strings.Split(cwd, \"/crew/\")\n ...\n return fmt.Sprintf(\"%s/crew/%s\", rigName, crewMember)\n}\n\n## Affected\n- Any crew worker running gt mail inbox without explicit address\n- Crew worker handoffs (wrong sender)","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T20:09:42.556373-08:00","updated_at":"2025-12-19T01:33:49.861756-08:00","closed_at":"2025-12-19T01:33:49.861756-08:00"} {"id":"gt-btiy","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:26","description":"Patrol 11: 8 sessions OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:26:07.651546-08:00","updated_at":"2025-12-24T19:26:07.651546-08:00","closed_at":"2025-12-24T19:26:07.651487-08:00","close_reason":"Squashed from wisp gt-18i (9 issues)"} -{"id":"gt-bum4e","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:49:07.765741-08:00","updated_at":"2025-12-24T23:49:07.765741-08:00","closed_at":"2025-12-24T23:49:07.76571-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-bum4e","depends_on_id":"gt-78ip","type":"parent-child","created_at":"2025-12-24T23:49:07.766401-08:00","created_by":"stevey"}]} +{"id":"gt-bum4e","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:49:07.765741-08:00","updated_at":"2025-12-24T23:49:07.765741-08:00","closed_at":"2025-12-24T23:49:07.76571-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-bxi8","title":"bd mail send: pinned column missing from schema","description":"gt mail send fails with: sqlite3: SQL logic error: table issues has no column named pinned\n\nLikely a schema migration issue - bd schema has 'pinned' field but SQLite table doesn't.\n\n## Reproduction\ngt mail send gastown/Immortan -s 'test' -m 'test'\n\n## Error\ntable issues has no column named pinned\n\n## Fix\nEither:\n1. Add migration to add pinned column\n2. Remove pinned from insert if not present\n3. Regenerate DB from JSONL","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-19T14:53:09.262403-08:00","updated_at":"2025-12-19T17:22:52.553097-08:00","closed_at":"2025-12-19T16:17:03.637686-08:00"} {"id":"gt-bzd","title":"beads: Stop searching upward when .beads found","description":"## Problem\n\nWhen running bd commands in a nested directory structure with multiple .beads directories, bd shows a confusing warning:\n\n```\n╔══════════════════════════════════════════════════════════════════════════╗\n║ WARNING: 2 beads databases detected in directory hierarchy ║\n╠══════════════════════════════════════════════════════════════════════════╣\n║ Multiple databases can cause confusion and database pollution. ║\n║ ║\n║ /Users/stevey/gt/gastown/.beads (261 issues) ║\n║ /Users/stevey/gt/.beads (21 issues) ║\n║ ║\n║ WARNING: Not using the closest database! Check your BEADS_DB setting. ║\n║ ║\n║ RECOMMENDED: Consolidate or remove unused databases to avoid confusion. ║\n╚══════════════════════════════════════════════════════════════════════════╝\n```\n\n## Why This Is Wrong\n\nIn Gas Town, nested .beads directories are **intentional and necessary**:\n- Town level: /Users/stevey/gt/.beads (mail, town-level issues)\n- Rig level: /Users/stevey/gt/gastown/.beads (gastown project issues)\n- Worker level: polecats have their own beads in worktrees\n\nThese are **unrelated** beads instances for different scopes. They should never be consolidated.\n\n## Expected Behavior\n\nWhen bd finds a .beads directory, it should:\n1. Use that directory (closest ancestor wins)\n2. **Stop searching upward** - do not look for parent .beads directories\n3. **No warning** about multiple databases\n\n## Current Behavior\n\nbd searches all the way up to root, finds all .beads directories, and warns about \"multiple databases\" even though they are separate, intentional instances.\n\n## Fix\n\nIn the database discovery code, stop the upward search as soon as a .beads directory is found. The first .beads found is the one to use, and parent directories are out of scope.\n\n## Note\n\nThis is a beads issue, filed here for tracking. Should be implemented in the beads codebase.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T19:09:44.295743-08:00","updated_at":"2025-12-19T00:44:28.741548-08:00","closed_at":"2025-12-19T00:44:28.741548-08:00"} {"id":"gt-bzn8","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T00:20:50.418875-08:00","updated_at":"2025-12-25T01:33:00.796529-08:00","closed_at":"2025-12-25T01:33:00.796529-08:00","close_reason":"Test pollution cleanup"} @@ -492,8 +492,8 @@ {"id":"gt-caih","title":"Witness handoff bead state persistence","description":"Implement state persistence for Witness across wisp cycles.\n\n## Problem\nWisps burn between cycles, but Witness needs to remember:\n- Which workers have been nudged\n- How many times (nudge_count)\n- When was last nudge\n- Last observed activity\n\n## Solution\nWitness handoff bead with worker_states field:\n\n```json\n{\n \"id\": \"gt-witness-state\",\n \"type\": \"handoff\",\n \"assignee\": \"\u003crig\u003e/witness\",\n \"pinned\": true,\n \"worker_states\": {\n \"furiosa\": {\n \"issue\": \"gt-123\",\n \"nudge_count\": 2,\n \"last_nudge\": \"2024-12-22T10:00:00Z\"\n }\n },\n \"last_patrol\": \"2024-12-22T10:05:00Z\"\n}\n```\n\n## Implementation\n1. On patrol start: bd show \u003cwitness-handoff-id\u003e to load state\n2. During patrol: update in-memory state\n3. On save-state step: bd update to persist\n4. State survives wisp burn/squash\n\n## Depends on\n- gt-83k0 (mol-witness-patrol definition)","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/furiosa","created_at":"2025-12-22T16:42:57.427131-08:00","updated_at":"2025-12-23T01:16:16.78731-08:00","closed_at":"2025-12-23T01:16:16.78731-08:00","close_reason":"Merged to main","dependencies":[{"issue_id":"gt-caih","depends_on_id":"gt-83k0","type":"blocks","created_at":"2025-12-22T16:43:59.609821-08:00","created_by":"daemon"}]} {"id":"gt-caz","title":"Timed Beads: Scheduled recurring work","description":"## Summary\n\nTimed beads wake up periodically and get injected into the ready queue by the daemon.\n\n## Schema Extension\n\n```yaml\nid: gt-weekly-sync\ntype: task # or sentinel\nschedule: \"0 9 * * 1\" # cron: Monday 9am\n# OR\ninterval: 24h # every 24 hours\ntier: haiku # cheap model for routine checks\nnext_run: 2025-12-20T09:00:00Z\n```\n\n## Daemon Integration\n\nDaemon heartbeat loop:\n1. Check timed beads where `next_run \u003c= now`\n2. For each due bead:\n - Inject into ready queue (set status to open if needed)\n - Update `next_run` based on schedule/interval\n3. Witnesses pick up work via `bd ready`\n\n## Use Cases\n\n- Weekly team sync reminders\n- Daily health checks\n- Periodic cleanup tasks\n- Scheduled reports\n\n## Interaction with Pinned Beads\n\nA pinned bead can be timed - it wakes up periodically but never closes.\nThis is how you model \"background services\" in Gas Town.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-18T18:07:39.665294-08:00","updated_at":"2025-12-18T18:07:39.665294-08:00"} {"id":"gt-cbrv","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:46","description":"Patrol 12: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:46:24.801062-08:00","updated_at":"2025-12-24T19:46:24.801062-08:00","closed_at":"2025-12-24T19:46:24.801003-08:00","close_reason":"Squashed from wisp gt-bza (9 issues)"} -{"id":"gt-cbyt7","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:53:41.512678-08:00","updated_at":"2025-12-24T23:53:41.512678-08:00","closed_at":"2025-12-24T23:53:41.51264-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-cbyt7","depends_on_id":"gt-3lcv6","type":"parent-child","created_at":"2025-12-24T23:53:41.51357-08:00","created_by":"stevey"}]} -{"id":"gt-cejv9","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, no events","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:59:38.421743-08:00","updated_at":"2025-12-24T23:59:38.421743-08:00","closed_at":"2025-12-24T23:59:38.421715-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-cejv9","depends_on_id":"gt-wqvkx","type":"parent-child","created_at":"2025-12-24T23:59:38.422424-08:00","created_by":"stevey"}]} +{"id":"gt-cbyt7","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:53:41.512678-08:00","updated_at":"2025-12-24T23:53:41.512678-08:00","closed_at":"2025-12-24T23:53:41.51264-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-cejv9","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, no events","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:59:38.421743-08:00","updated_at":"2025-12-24T23:59:38.421743-08:00","closed_at":"2025-12-24T23:59:38.421715-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-cekg","title":"Wisp squash design: cadences, rules, templates","description":"Design how wisps squash to digests: When to squash (cadences), what to include (summary templates), retention rules. Currently under-designed. Should cover patrol wisps (squash per cycle) and work wisps (squash on completion). Consider allowing formulas to define squash templates.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T18:45:27.315937-08:00","updated_at":"2025-12-23T18:45:27.315937-08:00"} {"id":"gt-ci84","title":"Deacon patrol wisps should use town beads, not gastown rig beads","description":"## Problem\n\nThe deacon is a town-level role but stores patrol wisps in gastown/mayor/rig/.beads/ (see internal/cmd/prime.go:691). This fails for users who don't have the gastown rig installed.\n\n## Correct Architecture\n\nDeacon -\u003e ~/gt/.beads-wisp/ (town-level, no rig dependency)\n\nTown-level ephemeral work (deacon patrols) should use town wisp storage, just like rig-level ephemeral work (witness/refinery patrols) uses rig wisp storage.\n\n## Implementation Tasks\n\n### 1. Town Setup (gt install / gt town init)\n\n- Create ~/gt/.beads-wisp/ directory during town initialization\n- Initialize as git repo (for local commits, not synced)\n- Add config.yaml with wisp: true\n- Ensure .beads-wisp/ is gitignored at town level\n\nFiles:\n- internal/cmd/install.go (or equivalent town init)\n- internal/town/manager.go (if exists)\n\n### 2. Rig Setup (gt rig init)\n\nAlready creates \u003crig\u003e/.beads-wisp/ - verify this is working:\n- internal/rig/manager.go:375 (beadsDir := filepath.Join(rigPath, \".beads-wisp\"))\n- internal/rig/manager.go:394 (ensureGitignoreEntry)\n\n### 3. Deacon Code Fixes\n\nUpdate deacon to use town wisp storage:\n- internal/cmd/prime.go:691 - change rigBeadsDir to townWispDir\n- internal/cmd/sling.go - route deacon wisps to town level\n- internal/daemon/daemon.go - any deacon-specific wisp handling\n\n### 4. gt doctor Checks\n\nAdd/update doctor checks for wisp directories:\n- internal/doctor/wisp_check.go - already checks rig wisps\n- Add TownWispCheck to verify ~/gt/.beads-wisp/ exists\n- Add TownWispGitCheck to verify it is a valid git repo\n- Update existing checks to handle both town and rig levels\n\nFiles:\n- internal/doctor/wisp_check.go (extend for town level)\n- internal/doctor/checks.go (register new checks)\n\n### 5. Documentation\n\n- docs/beads-data-plane.md - already updated with three-tier architecture\n- Verify wisp-architecture.md reflects town-level wisps\n\n## Testing\n\n1. Fresh gt install should create ~/gt/.beads-wisp/\n2. gt doctor should pass with no rig installed\n3. Deacon patrol should work without gastown rig\n4. gt sling patrol deacon/ --wisp should route to town wisps","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-23T14:28:03.636334-08:00","updated_at":"2025-12-24T00:18:03.046394-08:00","closed_at":"2025-12-23T19:37:56.701806-08:00","close_reason":"Implemented town-level wisp storage for deacon patrol"} {"id":"gt-cik","title":"Overseer Crew: User-managed persistent workspaces","description":"## Overview\n\nCrew workers are the overseer's (human's) personal workspaces within a rig. Unlike polecats which are witness-managed and ephemeral, crew workers are:\n\n- **Persistent**: Not auto-garbage-collected\n- **User-managed**: Overseer controls lifecycle\n- **Long-lived identities**: dave, emma, fred - recognizable names\n- **Gas Town integrated**: Mail, handoff mechanics work\n- **Tmux optional**: Can work in terminal directly\n\n## Directory Structure\n\n```\n\u003crig\u003e/\n polecats/ # Managed workers (witness controls)\n refinery/ # Merge queue processor\n witness/ # Pit boss\n crew/ # Overseer's personal workspaces\n dave/ # Full clone, persistent\n emma/ # Full clone, persistent\n fred/ # Full clone, persistent\n```\n\n## Key Differences from Polecats\n\n- Location: crew/ instead of polecats/\n- Lifecycle: User-managed, not witness-managed\n- Auto-cleanup: Never (polecats auto-cleanup on swarm land)\n- Issue assignment: Optional (polecats require it)\n- Tmux: Optional (polecats require it)\n- Mail \u0026 Handoff: Yes for both\n- Identity: Persistent (polecats are ephemeral)\n\n## CLI Commands\n\n- gt crew add \u003cname\u003e [--rig \u003crig\u003e] - Create crew workspace\n- gt crew list [--rig \u003crig\u003e] - List crew workspaces\n- gt crew at \u003crig\u003e/\u003cname\u003e - Attach to workspace (start session)\n- gt crew attach \u003cname\u003e - Attach (infer rig from cwd)\n- gt crew refresh \u003cname\u003e - Handoff + restart (context cycling)\n- gt crew remove \u003cname\u003e [--force] - Remove workspace\n- gt crew status [\u003cname\u003e] - Show workspace status\n\n## Design Notes\n\n- Crew workers use full git clones (not worktrees)\n- Optional beads integration via BEADS_DIR\n- Mail-to-self handoff works for context cycling\n- No witness monitoring or nudging\n- No automatic issue assignment required\n\n## Background\n\nUsers often maintain separate repo clones for serial agent work. This is tedious to set up manually. Crew workspaces bring these into Gas Town's infrastructure while keeping user control.","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-16T16:47:37.529887-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"} @@ -512,13 +512,13 @@ {"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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T03:14:24.724136-08:00","updated_at":"2025-12-20T09:30:28.050001-08:00","closed_at":"2025-12-20T09:30:28.050001-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"}]} {"id":"gt-cr0","title":"Consolidate design docs into beads descriptions","description":"The markdown design docs (swarm-shutdown-design.md, polecat-beads-access-design.md, mayor-handoff-design.md) will decay. Extract key decisions and prompting templates into the beads descriptions themselves, then archive or remove the markdown files. Beads are the source of truth.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-15T20:24:05.45131-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-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":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-17T17:15:08.769961-08:00","updated_at":"2025-12-19T12:02:12.135837-08:00","closed_at":"2025-12-19T12:02:12.135837-08:00"} -{"id":"gt-csba","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Routine - handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:39:00.441055-08:00","updated_at":"2025-12-24T22:39:00.441055-08:00","closed_at":"2025-12-24T22:39:00.441027-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-csba","depends_on_id":"gt-ict8","type":"parent-child","created_at":"2025-12-24T22:39:00.442771-08:00","created_by":"stevey"}]} +{"id":"gt-csba","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Routine - handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:39:00.441055-08:00","updated_at":"2025-12-24T22:39:00.441055-08:00","closed_at":"2025-12-24T22:39:00.441027-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ct0u","title":"Merge: gt-3x1.4","description":"branch: polecat/Nux\ntarget: main\nsource_issue: gt-3x1.4\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:53.140259-08:00","updated_at":"2025-12-19T18:26:14.104002-08:00","closed_at":"2025-12-19T17:49:09.234713-08:00"} {"id":"gt-ctr","title":"GGT vs PGT Gap Analysis Summary","description":"Summary of gaps comparing GGT (~4,500 LOC) to PGT (~27,700 LOC).\n\n## Critical Gaps (P1) - Existing Issues\n- gt-u1j.17: Polecat CLI (add, list, wake, sleep) - DETAILED\n- gt-u1j.16: Rig CLI (add, list, show, remove) - DETAILED\n- gt-u1j.18: Witness CLI (start, stop, status) - DETAILED\n- gt-f9x.4: Doctor framework - DETAILED\n- gt-f9x.5: Workspace doctor checks - DETAILED\n- gt-f9x.6: Rig doctor checks - DETAILED\n\n## Critical Gaps (P1) - New Issues\n- gt-a95: Refinery background daemon mode - ENHANCED\n- gt-hgk: Mail message types and threading - ENHANCED\n\n## Significant Gaps (P2) - New Issues\n- gt-d46: Mail CLI archive/purge/search - ENHANCED\n- gt-e9k: Swarm preflight/postflight - ENHANCED\n- gt-662: Swarm report generation - ENHANCED\n- gt-69l: Hook system - ENHANCED\n- gt-3yj: Agent monitoring - ENHANCED\n- gt-1ky: Workspace CLI (may overlap f9x.3) - ENHANCED\n- gt-9j9: Worker status reporting - ENHANCED\n- gt-qao: Mayor CLI - ENHANCED\n- gt-7o7: Session pre-shutdown checks - ENHANCED\n- gt-c92: Batch all command - ENHANCED\n- gt-lno: Swarm state persistence - ENHANCED\n- gt-a9y: File locking - ENHANCED\n- gt-30o: Error handling improvements - ENHANCED\n\n## Significant Gaps (P2) - Existing Issues\n- gt-kmn.12: Ephemeral rig support - DETAILED\n\n## Lower Priority (P3) - New Issues\n- gt-3fm: Mail orchestrator daemon - ENHANCED\n- gt-2kz: Cleanup commands - ENHANCED\n- gt-ebl: Names commands - ENHANCED\n- gt-1u9: Interactive prompts - ENHANCED\n- gt-8lz: Help text improvements - ENHANCED\n\n## Closed as Duplicates\n- gt-3tz → gt-u1j.17 (polecat CLI)\n- gt-e1r → gt-u1j.16 (rig CLI)\n- gt-86w → gt-f9x.4/5/6 (doctor)\n- gt-alx → gt-kmn.12 (ephemeral rigs)\n\n## Execution Order Recommendation\n1. P1 CLI commands (existing detailed issues ready to implement)\n2. gt-a95: Refinery daemon (blocks autonomous operation)\n3. gt-7o7: Pre-shutdown checks (prevents data loss)\n4. gt-a9y: File locking (prevents corruption)\n5. gt-hgk + gt-d46: Mail improvements\n6. gt-69l: Hook system (enables extensibility)\n7. Remaining P2s in any order\n8. P3s as time permits","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-16T14:49:09.555759-08:00","updated_at":"2025-12-16T16:07:58.413016-08:00"} {"id":"gt-cu7r","title":"Implement handoffs using pinned beads","description":"Replace the current mail-based handoff system with pinned beads.\n\n## Current Problem\n\nHandoff messages get closed before the successor can read them because:\n1. `gt mail read` auto-acks (closes) messages\n2. `bd mail inbox` only shows open messages\n3. Successor sees empty inbox\n\n## Solution\n\nUse pinned beads for handoffs:\n- One pinned bead per role: `mayor-handoff`, `\u003crig\u003e-refinery-handoff`, etc.\n- Predecessor updates the content before cycling\n- Successor reads on startup via `gt prime`\n- Never closes - always available\n\n## Implementation\n\n### 1. Create handoff beads on first cycle\n- `bd create --title='Mayor Handoff' --type=task --status=pinned --assignee=mayor`\n- Store ID in role config or use well-known naming convention\n\n### 2. Update gt handoff command\n- Instead of `bd mail send`, update the pinned handoff bead\n- `bd update \u003chandoff-id\u003e --description='...handoff content...'`\n\n### 3. Update gt prime\n- Read the role's handoff bead\n- Display content to successor\n\n### 4. Compression/reset\n- `gt rig reset` clears handoff content\n- Or manual: `bd update \u003chandoff-id\u003e --description=''`\n\n## Dependencies\n\nRequires beads-6v2 (StatusPinned) to be implemented first.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T21:28:05.738035-08:00","updated_at":"2025-12-19T01:57:17.034513-08:00","closed_at":"2025-12-19T01:57:17.034513-08:00"} {"id":"gt-cv9a","title":"Merge: gt-ay1r","description":"branch: polecat/dementus\ntarget: main\nsource_issue: gt-ay1r\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T23:51:54.383198-08:00","updated_at":"2025-12-22T23:53:02.089556-08:00","closed_at":"2025-12-22T23:53:02.089556-08:00","close_reason":"Merged to main"} {"id":"gt-cvfg","title":"Use cmd.OutOrStdout instead of fmt.Print in refinery","description":"refinery/manager.go and refinery/engineer.go use fmt.Print/Println directly for user output (30+ occurrences). This breaks testability and doesn't follow cobra best practices. Should use cmd.OutOrStdout() or pass an io.Writer.\n\nAffected files:\n- internal/refinery/manager.go (lines 222, 360-361, 369, 387-393, 519, 537, 672)\n- internal/refinery/engineer.go (lines 190-211, 249, 294-297, 325-353, 362-366)","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-21T21:35:08.080292-08:00","updated_at":"2025-12-21T22:18:10.18202-08:00","closed_at":"2025-12-21T22:18:10.18202-08:00","close_reason":"Added io.Writer field to Manager and Engineer structs with SetOutput() methods for testability. Replaced all 30+ fmt.Print calls with fmt.Fprintf using the configurable output writer."} -{"id":"gt-cvixu","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:32:27.69514-08:00","updated_at":"2025-12-25T00:32:27.69514-08:00","closed_at":"2025-12-25T00:32:27.695102-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-cvixu","depends_on_id":"gt-5vksm","type":"parent-child","created_at":"2025-12-25T00:32:27.695934-08:00","created_by":"stevey"}]} +{"id":"gt-cvixu","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:32:27.69514-08:00","updated_at":"2025-12-25T00:32:27.69514-08:00","closed_at":"2025-12-25T00:32:27.695102-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-cwpj","title":"Digest: mol-deacon-patrol","description":"Patrol OK: 0 mail, all agents healthy, 3 polecats working","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-22T20:58:32.040465-08:00","updated_at":"2025-12-22T20:58:32.040465-08:00","closed_at":"2025-12-22T20:58:32.040432-08:00","close_reason":"Squashed from 5 wisps"} {"id":"gt-cx41","title":"Role templates: rename 'Dependency Trap' to 'Gotchas when Filing Beads'","description":"The 'Dependency Trap' heading is too specific. Rename to something like 'Gotchas when Filing Beads' or 'Beads Filing Tips'. Applies to all role templates (polecat, crew, mayor, witness, refinery, deacon).","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:45.526464-08:00","updated_at":"2025-12-23T17:09:02.117784-08:00","closed_at":"2025-12-23T17:09:02.117784-08:00","close_reason":"Completed in commit 1931ec7","dependencies":[{"issue_id":"gt-cx41","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.288402-08:00","created_by":"daemon"}]} {"id":"gt-cxtu","title":"Implement shared beads architecture for rig","description":"Implement redirect-based shared beads to eliminate git sync overhead within a rig.\n\n## Background\nEach polecat currently has its own .beads/ directory synced via git. This burns tokens on sync operations.\n\n## Solution\nUse bd's redirect feature:\n1. Create single shared .beads/ at rig root\n2. Polecats get redirect files pointing to shared location\n3. All agents connect to same daemon\n4. SQLite WAL + daemon serialization handles concurrency\n\n## Implementation\n1. Create shared .beads/ at rig root (e.g., ~/gt/gastown/.beads/)\n2. Update gt spawn to create redirect files:\n mkdir -p polecats/nux/.beads\n echo ../../.beads \u003e polecats/nux/.beads/redirect\n3. Test that all polecats connect to same daemon\n4. Remove git sync from intra-rig workflow\n5. Keep JSONL export for backup/cross-rig only\n\n## Reference\nbeads/polecats/rictus/internal/beads/beads.go:45 - followRedirect()","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T20:19:53.6549-08:00","updated_at":"2025-12-21T14:27:43.957132-08:00","closed_at":"2025-12-21T14:27:43.957132-08:00","close_reason":"Shared beads architecture implemented: crew/polecats use redirects to mayor/rig/.beads. Also fixed mail identity format to use slashes (rig/role/name) instead of dashes."} @@ -531,7 +531,7 @@ {"id":"gt-dapb","title":"mol-polecat-arm","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.\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## Steps\n\n### capture\nCapture recent tmux output for this polecat.\n\n```bash\ntmux capture-pane -t gt-{{rig}}-{{polecat_name}} -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### assess\nCategorize polecat state.\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### load-history\nRead nudge history for this polecat from patrol state.\n\n```\nnudge_count = state.nudges[{{polecat_name}}].count\nlast_nudge_time = state.nudges[{{polecat_name}}].timestamp\n```\n\nNeeds: assess\n\n### decide\nApply the nudge matrix to determine action.\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### execute\nTake the decided action.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-{{rig}}-{{polecat_name}} \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/{{polecat_name}}\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: {{polecat_name}} 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\n\nThis data feeds back to the patrol's aggregate step.\n\nLabels: [template, christmas-ornament, polecat-arm]","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-23T02:37:03.754926-08:00","updated_at":"2025-12-23T02:37:03.754926-08:00"} {"id":"gt-db4x","title":"Merge: gt-7919","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-7919\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T23:41:28.898315-08:00","updated_at":"2025-12-22T23:49:28.398755-08:00","closed_at":"2025-12-22T23:49:28.398755-08:00","close_reason":"Merged to main - tests now pass"} {"id":"gt-dck","title":"Update config location: .gastown/ → config/","description":"Move rig configuration from hidden .gastown/ to visible config/:\n- config/rig.json: Rig configuration\n- config/engineer.json: Engineer settings (test command, etc.)\n- config/witness.json: Witness settings (heartbeat interval, etc.)\n\nHidden directories are poorly discovered by AI agents.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-16T23:02:20.400818-08:00","updated_at":"2025-12-16T23:02:20.400818-08:00","dependencies":[{"issue_id":"gt-dck","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:55.69517-08:00","created_by":"daemon"}]} -{"id":"gt-dcxz8","title":"Digest: mol-deacon-patrol","description":"Patrol 12: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:03:31.988364-08:00","updated_at":"2025-12-25T00:03:31.988364-08:00","closed_at":"2025-12-25T00:03:31.98833-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-dcxz8","depends_on_id":"gt-4jo88","type":"parent-child","created_at":"2025-12-25T00:03:31.989105-08:00","created_by":"stevey"}]} +{"id":"gt-dcxz8","title":"Digest: mol-deacon-patrol","description":"Patrol 12: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:03:31.988364-08:00","updated_at":"2025-12-25T00:03:31.988364-08:00","closed_at":"2025-12-25T00:03:31.98833-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-dd8s","title":"gt molecule seed: create built-in molecules as beads","description":"The molecule infrastructure is complete but built-in molecules (engineer-in-box, quick-fix, research) need to be seeded into the beads database.\n\n## Current State\n- `gt molecule list` works but shows 0 molecules\n- BuiltinMolecules() in internal/beads/builtin_molecules.go has 3 molecules defined\n- No way to create them as beads\n\n## Needed\nAdd `gt molecule seed` command that:\n1. Reads BuiltinMolecules()\n2. Creates each as a bead with type: molecule\n3. Uses well-known IDs (mol-engineer-in-box, mol-quick-fix, mol-research)\n4. Idempotent (skip if already exists)\n\n## Acceptance Criteria\n```\ngt molecule seed\ngt molecule list # Shows 3 built-in molecules\n```\n\n## Parent\ngt-4nn: Molecules epic","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T14:13:27.432957-08:00","updated_at":"2025-12-19T15:24:39.125244-08:00","closed_at":"2025-12-19T14:44:40.092009-08:00"} {"id":"gt-ddz7f","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:13.802672-08:00","updated_at":"2025-12-25T02:11:14.115831-08:00","closed_at":"2025-12-25T02:11:14.115831-08:00","close_reason":"Closed"} {"id":"gt-ddz7f.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:13.901143-08:00","updated_at":"2025-12-25T02:11:14.007583-08:00","closed_at":"2025-12-25T02:11:14.007583-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-ddz7f.1","depends_on_id":"gt-ddz7f","type":"parent-child","created_at":"2025-12-25T02:11:13.901586-08:00","created_by":"daemon"}]} @@ -540,7 +540,7 @@ {"id":"gt-djzh","title":"Merge: gt-ldk8","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-ldk8\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T01:15:25.915147-08:00","updated_at":"2025-12-23T01:16:15.726698-08:00","closed_at":"2025-12-23T01:16:15.726698-08:00","close_reason":"Merged to main"} {"id":"gt-dkc","title":"Add harness overview to Mayor priming","description":"Update gt prime Mayor context to explain the harness concept: umbrella repo for GT installation, rigs underneath, Mayor sits above all rigs","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T16:42:44.864606-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-dkc","depends_on_id":"gt-l1o","type":"blocks","created_at":"2025-12-17T16:42:54.736437-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-dlrn","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:46","description":"Patrol 13: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:46:40.722551-08:00","updated_at":"2025-12-24T19:46:40.722551-08:00","closed_at":"2025-12-24T19:46:40.722485-08:00","close_reason":"Squashed from wisp gt-9o6 (9 issues)"} -{"id":"gt-dm7k","title":"Digest: mol-deacon-patrol","description":"Patrol #17: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:59.419736-08:00","updated_at":"2025-12-24T23:34:59.419736-08:00","closed_at":"2025-12-24T23:34:59.419688-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-dm7k","depends_on_id":"gt-8xk0","type":"parent-child","created_at":"2025-12-24T23:34:59.420408-08:00","created_by":"stevey"}]} +{"id":"gt-dm7k","title":"Digest: mol-deacon-patrol","description":"Patrol #17: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:59.419736-08:00","updated_at":"2025-12-24T23:34:59.419736-08:00","closed_at":"2025-12-24T23:34:59.419688-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-dq3","title":"Split PGT/GGT harness or migrate to GGT-only","description":"Current ~/ai harness is shared by PGT and GGT with confusing overlap. Options:\n1. Keep separate (document the coexistence)\n2. Migrate fully to GGT structure\n3. Create separate harnesses\n\nThis affects the beads redirect, Mayor home location, and rig structure.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T17:15:32.308192-08:00","updated_at":"2025-12-19T12:08:48.653114-08:00","closed_at":"2025-12-19T12:08:48.653114-08:00","dependencies":[{"issue_id":"gt-dq3","depends_on_id":"gt-cr9","type":"blocks","created_at":"2025-12-17T17:15:51.717903-08:00","created_by":"daemon"}]} {"id":"gt-drbd","title":"Add no-PR instructions to mol-polecat-work at two points","description":"Update mol-polecat-work in builtin_molecules.go to explicitly forbid GitHub PRs.\n\n## Two Points to Add Instructions\n\n### 1. submit-work step\nWhen polecat is ready to submit:\n- Push branch to origin\n- Create beads merge-request issue\n- DO NOT use gh pr create or GitHub PRs\n\n### 2. CLAUDE.md polecat context\nAdd to polecat role instructions:\n- Never use gh pr create\n- Never create GitHub pull requests\n- The Refinery processes merges via beads MR issues\n\n## Why Two Points\n- Molecule step description guides the workflow\n- CLAUDE.md reinforces at context level\n- Belt and suspenders approach\n\n## Implementation\n1. Update PolecatWorkMolecule() submit-work step description\n2. Update prompts/roles/polecat.md with explicit prohibition\n\nRelated: gt-44wh (general no-PR bug)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-21T16:44:51.497283-08:00","updated_at":"2025-12-22T15:06:02.248711-08:00","closed_at":"2025-12-22T15:06:02.248711-08:00","close_reason":"Added no-PR instructions to mol-polecat-work submit-merge step and polecat.md role docs","dependencies":[{"issue_id":"gt-drbd","depends_on_id":"gt-44wh","type":"related","created_at":"2025-12-21T16:44:57.503314-08:00","created_by":"daemon"}]} {"id":"gt-drp5","title":"mol-ready-work: graceful GitHub/label handling","description":"## Summary\n\nmol-ready-work assumes:\n- GitHub repo exists with gh CLI configured\n- Labels 'untriaged' and 'triaged' exist\n\nShould handle gracefully:\n1. No GitHub repo (beads-only project) → skip GH backlogs\n2. Missing labels → skip that backlog tier, don't error\n3. gh CLI not authenticated → warn and skip GH backlogs\n\n## Implementation\nAdd checks in scan-backlogs step:\n```bash\n# Check if gh is available and authenticated\nif gh auth status \u0026\u003e/dev/null; then\n # scan GH backlogs\nfi\n```\n\n## Parent\nPart of gt-tnca (mol-ready-work epic)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:19:39.992868-08:00","updated_at":"2025-12-23T01:19:39.992868-08:00","dependencies":[{"issue_id":"gt-drp5","depends_on_id":"gt-tnca","type":"blocks","created_at":"2025-12-23T01:19:56.493028-08:00","created_by":"daemon"}]} @@ -560,10 +560,10 @@ {"id":"gt-e9k","title":"Workspace cleanup: preflight and postflight","description":"Workspace preflight and postflight commands for clean state management.\n\n## Preflight\n```\ngt preflight [--rig \u003crig\u003e] [--dry-run]\n```\n\nRun before starting batch work:\n1. Clean stale mail in inboxes\n2. Check for stuck workers (warn)\n3. Check rig health (polecats, refinery)\n4. Verify git state is clean\n5. Run bd sync to ensure beads current\n\n## Postflight\n```\ngt postflight [--rig \u003crig\u003e] [--archive-mail] [--dry-run]\n```\n\nRun after batch work completes:\n1. Archive old mail with --archive-mail\n2. Clean up stale integration branches\n3. Sync beads\n4. Report on rig state\n\n## Implementation\n```go\nfunc Preflight(rigName string, dryRun bool) (*PreflightReport, error)\nfunc Postflight(rigName string, opts PostflightOptions) (*PostflightReport, error)\n```\n\n## Report Structures\n```go\ntype PreflightReport struct {\n MailCleaned int\n RigHealthy bool\n StuckWorkers []string\n Warnings []string\n}\n\ntype PostflightReport struct {\n MailArchived int\n BranchesCleaned int\n Warnings []string\n}\n```\n\n## Note\n\nThese are workspace maintenance commands, not tied to \"swarm\" lifecycle. Run them anytime to keep the rig clean.\n\n## Acceptance Criteria\n- [ ] Preflight cleans stale state\n- [ ] Postflight archives old mail\n- [ ] Both have --dry-run mode\n- [ ] Clear reports of actions taken","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:47:15.997677-08:00","updated_at":"2025-12-16T17:25:01.55269-08:00"} {"id":"gt-e9za","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:41","description":"Patrol 1: All healthy, no actions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:41:26.61734-08:00","updated_at":"2025-12-24T19:41:26.61734-08:00","closed_at":"2025-12-24T19:41:26.617264-08:00","close_reason":"Squashed from wisp gt-4hk (9 issues)"} {"id":"gt-ebl","title":"CLI: names commands for polecat naming pool","description":"Polecat naming pool for auto-generated names.\n\n## Commands\n\n### gt names generate\n```\ngt names generate [--count N]\n```\nGenerate N names from pool.\n\n### gt names add\n```\ngt names add \u003cname\u003e...\n```\nAdd custom names to pool.\n\n### gt names list\n```\ngt names list\n```\nShow available and used names.\n\n### gt names reset\n```\ngt names reset [--keep-used]\n```\nReset pool to defaults.\n\n## Config File\n\u003crig\u003e/town/naming.json:\n```json\n{\n \"enabled\": true,\n \"auto_refill\": true,\n \"refill_threshold\": 5,\n \"pool\": {\n \"available\": [\"Toast\", \"Nux\", \"Capable\", ...],\n \"used\": [\"Alice\", \"Bob\"]\n }\n}\n```\n\n## Default Pool\nMad Max themed: Toast, Nux, Capable, Furiosa, Immortan, etc.\n\n## Integration\ngt polecat add calls naming pool if no name given:\n```go\nif name == \"\" {\n name, err = naming.Generate(rigPath)\n}\n```\n\n## New Package\ninternal/naming/\n├── pool.go # Pool management\n└── defaults.go # Default name lists\n\n## Acceptance Criteria\n- [ ] Auto-generate names on polecat add\n- [ ] Track used vs available\n- [ ] Auto-refill when low\n- [ ] Custom names addable","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T14:48:33.592129-08:00","updated_at":"2025-12-16T16:07:13.882465-08:00"} -{"id":"gt-ecfc","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:33.287033-08:00","updated_at":"2025-12-24T22:38:33.287033-08:00","closed_at":"2025-12-24T22:38:33.286976-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-ecfc","depends_on_id":"gt-e00v","type":"parent-child","created_at":"2025-12-24T22:38:33.287811-08:00","created_by":"stevey"}]} +{"id":"gt-ecfc","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:33.287033-08:00","updated_at":"2025-12-24T22:38:33.287033-08:00","closed_at":"2025-12-24T22:38:33.286976-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ed39","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:28","description":"Patrol 17","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:28:33.433261-08:00","updated_at":"2025-12-24T19:28:33.433261-08:00","closed_at":"2025-12-24T19:28:33.433194-08:00","close_reason":"Squashed from wisp gt-83h (9 issues)"} {"id":"gt-edos","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:27","description":"Patrol 15","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:27:45.347605-08:00","updated_at":"2025-12-24T19:27:45.347605-08:00","closed_at":"2025-12-24T19:27:45.347523-08:00","close_reason":"Squashed from wisp gt-n7i (9 issues)"} -{"id":"gt-eevs","title":"Digest: mol-deacon-patrol","description":"Patrol #6: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:31:47.668271-08:00","updated_at":"2025-12-24T23:31:47.668271-08:00","closed_at":"2025-12-24T23:31:47.668238-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-eevs","depends_on_id":"gt-j1pq","type":"parent-child","created_at":"2025-12-24T23:31:47.668979-08:00","created_by":"stevey"}]} +{"id":"gt-eevs","title":"Digest: mol-deacon-patrol","description":"Patrol #6: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:31:47.668271-08:00","updated_at":"2025-12-24T23:31:47.668271-08:00","closed_at":"2025-12-24T23:31:47.668238-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-eg1es","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:05:28.517626-08:00","updated_at":"2025-12-25T01:33:00.104285-08:00","closed_at":"2025-12-25T01:33:00.104285-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-eg1es.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-eg1es\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:05:28.606112-08:00","updated_at":"2025-12-25T01:05:28.804164-08:00","closed_at":"2025-12-25T01:05:28.804164-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-eg1es.1","depends_on_id":"gt-eg1es","type":"parent-child","created_at":"2025-12-25T01:05:28.606517-08:00","created_by":"daemon"}]} {"id":"gt-egu","title":"gt refinery attach: Attach to refinery session","description":"Add 'gt refinery attach [rig]' command to attach to refinery tmux session.\n\nMirrors 'gt mayor attach' pattern. If rig not specified, use current rig context.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:47:19.164342-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-egu","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:22:47.578871-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"} @@ -573,11 +573,11 @@ {"id":"gt-er0u","title":"Work on ga-yp3: Polecat inbox system for reliable work as...","description":"Work on ga-yp3: Polecat inbox system for reliable work assignment. This is P1 priority. See bd show ga-yp3 for full design spec.","status":"in_progress","priority":2,"issue_type":"task","created_at":"2025-12-19T21:57:34.473056-08:00","updated_at":"2025-12-19T21:57:34.540384-08:00"} {"id":"gt-es1i","title":"Polecat health check loop","description":"Implement the Witness health check loop:\n\nEvery 60 seconds:\n1. List active polecats (gt polecats \u003crig\u003e)\n2. For each polecat, check:\n - Is tmux session still alive?\n - Is there a state.json with recent update?\n - Has there been git activity recently?\n3. If stuck (no activity for configurable threshold):\n - First: nudge (send message asking for status)\n - Second: escalate to Mayor\n - Third: force kill after human confirmation\n\nThis is the 'health monitor' part of Witness.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T03:14:21.634932-08:00","updated_at":"2025-12-20T09:32:15.553536-08:00","closed_at":"2025-12-20T09:32:15.553536-08:00","dependencies":[{"issue_id":"gt-es1i","depends_on_id":"gt-53w6","type":"parent-child","created_at":"2025-12-20T03:14:37.235596-08:00","created_by":"daemon"},{"issue_id":"gt-es1i","depends_on_id":"gt-mxyj","type":"blocks","created_at":"2025-12-20T03:14:38.829218-08:00","created_by":"daemon"}]} {"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":"open","priority":1,"issue_type":"task","created_at":"2025-12-15T19:48:55.484911-08:00","updated_at":"2025-12-23T14:27:07.254724-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"}]} -{"id":"gt-euiap","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy (Mayor, 2 Witnesses, 2 Refineries), no callbacks, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:44:09.814515-08:00","updated_at":"2025-12-25T00:44:09.814515-08:00","closed_at":"2025-12-25T00:44:09.814476-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-euiap","depends_on_id":"gt-wg4f8","type":"parent-child","created_at":"2025-12-25T00:44:09.815264-08:00","created_by":"stevey"}]} +{"id":"gt-euiap","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy (Mayor, 2 Witnesses, 2 Refineries), no callbacks, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:44:09.814515-08:00","updated_at":"2025-12-25T00:44:09.814515-08:00","closed_at":"2025-12-25T00:44:09.814476-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ey5f","title":"Polecat template: condense Work Protocol section","description":"The Work Protocol section summarizes the entire mol-polecat-work molecule. This is too verbose and will go stale as the molecule evolves. Condense to essential guidance only, let the molecule itself provide the steps.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:49.045886-08:00","updated_at":"2025-12-23T17:09:02.133528-08:00","closed_at":"2025-12-23T17:09:02.133528-08:00","close_reason":"Completed in commit 1931ec7","dependencies":[{"issue_id":"gt-ey5f","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.531624-08:00","created_by":"daemon"}]} -{"id":"gt-eya9s","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:05:03.826486-08:00","updated_at":"2025-12-25T00:05:03.826486-08:00","closed_at":"2025-12-25T00:05:03.826456-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-eya9s","depends_on_id":"gt-r5r66","type":"parent-child","created_at":"2025-12-25T00:05:03.827165-08:00","created_by":"stevey"}]} +{"id":"gt-eya9s","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:05:03.826486-08:00","updated_at":"2025-12-25T00:05:03.826486-08:00","closed_at":"2025-12-25T00:05:03.826456-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-eyi2","title":"Activity feed from wisp state: gt patrol status","description":"Enable mayor and gt tool to quickly see what patrol agents are doing.\n\n## Problem\n\nThe mayor and gt tool cannot quickly see what the deacon (or other patrol agents) are doing.\nNeed a way to extract an activity feed from the current wisp state.\n\n## Desired Commands\n\n- gt patrol status: Show current patrol state (step, timing, cycle count)\n- gt patrol history: Show recent patrol cycles (from digests)\n- gt patrol feed: Live tail of patrol activity\n\n## Data Sources\n\n- .beads-wisp/issues.jsonl: Current wisp with step progress\n- .beads/issues.jsonl: Digests from squashed patrols\n- heartbeat.json: Last activity timestamp\n\n## Use Cases\n\n1. Mayor checking deacon: Is the deacon doing anything?\n2. Debugging hangs: What step is it stuck on?\n3. Operator monitoring: Dashboard of patrol health\n4. Summaries for handoffs: Auto-generate patrol digest\n\n## Related\n\n- gt-id36: Deacon Kernel\n- gt-3x0z: Wisp Molecule Integration","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-22T03:04:15.726155-08:00","updated_at":"2025-12-22T03:04:15.726155-08:00"} -{"id":"gt-ez8ta","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:02:49.759668-08:00","updated_at":"2025-12-25T00:02:49.759668-08:00","closed_at":"2025-12-25T00:02:49.759639-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-ez8ta","depends_on_id":"gt-h22h3","type":"parent-child","created_at":"2025-12-25T00:02:49.760352-08:00","created_by":"stevey"}]} +{"id":"gt-ez8ta","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:02:49.759668-08:00","updated_at":"2025-12-25T00:02:49.759668-08:00","closed_at":"2025-12-25T00:02:49.759639-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ezy0","title":"Digest: mol-deacon-patrol","description":"Patrol #16","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:25:47.60994-08:00","updated_at":"2025-12-24T22:25:47.60994-08:00","closed_at":"2025-12-24T22:25:47.609907-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-f14c","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:51:29.929739-08:00","updated_at":"2025-12-25T01:33:00.862514-08:00","closed_at":"2025-12-25T01:33:00.862514-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-f14c.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-f14c\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:51:30.019919-08:00","updated_at":"2025-12-23T22:51:30.193576-08:00","closed_at":"2025-12-23T22:51:30.193576-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-f14c.1","depends_on_id":"gt-f14c","type":"parent-child","created_at":"2025-12-23T22:51:30.020363-08:00","created_by":"daemon"}]} @@ -585,7 +585,7 @@ {"id":"gt-f17b","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T13:17:04.653301-08:00","updated_at":"2025-12-25T01:33:00.612529-08:00","closed_at":"2025-12-25T01:33:00.612529-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-f17b.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-f17b\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T13:17:04.739555-08:00","updated_at":"2025-12-24T13:17:04.902469-08:00","closed_at":"2025-12-24T13:17:04.902469-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-f17b.1","depends_on_id":"gt-f17b","type":"parent-child","created_at":"2025-12-24T13:17:04.74004-08:00","created_by":"daemon"}]} {"id":"gt-f1ma","title":"Merge: gt-h6eq.3","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-h6eq.3\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:51:55.972408-08:00","updated_at":"2025-12-23T12:22:23.415428-08:00","closed_at":"2025-12-23T12:22:23.415428-08:00","close_reason":"Merged to main in gt-h6eq swarm"} -{"id":"gt-f75z","title":"Digest: mol-deacon-patrol","description":"Patrol 11","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:09:34.018236-08:00","updated_at":"2025-12-24T23:09:34.018236-08:00","closed_at":"2025-12-24T23:09:34.018204-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-f75z","depends_on_id":"gt-jwi2","type":"parent-child","created_at":"2025-12-24T23:09:34.018907-08:00","created_by":"stevey"}]} +{"id":"gt-f75z","title":"Digest: mol-deacon-patrol","description":"Patrol 11","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:09:34.018236-08:00","updated_at":"2025-12-24T23:09:34.018236-08:00","closed_at":"2025-12-24T23:09:34.018204-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-f8q1","title":"Rename engineer-in-box to shiny across all docs","description":"Systematic rename of mol-engineer-in-box to shiny throughout docs: molecular-chemistry.md, molecules.md, architecture.md, etc. The shiny name is now canonical per the Breaking Bad × Mad Max naming.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T18:45:24.877282-08:00","updated_at":"2025-12-23T19:18:38.521461-08:00","closed_at":"2025-12-23T19:18:38.521461-08:00","close_reason":"Duplicate of gt-8tmz.10 which is in the molecule algebra epic"} {"id":"gt-f8v","title":"Witness pre-kill verification protocol","description":"Add pre-kill verification protocol to Witness CLAUDE.md template.\n\n## Protocol for Witness Prompting\n\n```markdown\n## Pre-Kill Verification Protocol\n\nBefore killing any worker session, verify workspace is clean.\n\n### Verification Steps\n\nWhen a worker signals done:\n\n1. **Capture worker state**:\n```bash\ntown capture \u003cpolecat\u003e \"git status \u0026\u0026 git stash list \u0026\u0026 bd sync --status\"\n```\n\n2. **Assess the output** (use your judgment):\n- Is working tree clean?\n- Is stash list empty?\n- Is beads synced?\n\n3. **Decision**:\n- **CLEAN**: Proceed to kill session\n- **DIRTY**: Send nudge with specific issues\n\n### Nudge Templates\n\n**Uncommitted Changes**:\n```\ntown inject \u003cpolecat\u003e \"WITNESS CHECK: Uncommitted changes found. Please commit or discard: \u003cfiles\u003e. Signal done when clean.\"\n```\n\n**Beads Not Synced**:\n```\ntown inject \u003cpolecat\u003e \"WITNESS CHECK: Beads not synced. Run 'bd sync' then commit. Signal done when complete.\"\n```\n\n### Kill Sequence\n\nOnly after verification passes:\n```bash\ntown kill \u003cpolecat\u003e\ntown sleep \u003cpolecat\u003e\n```\n\n### Escalation\n\nIf worker fails verification 3+ times:\n```bash\ntown mail send mayor/ -s \"Escalation: \u003cpolecat\u003e stuck\" -m \"Cannot complete cleanup after 3 attempts. Issues: \u003clist\u003e.\"\n```\n```\n\n## Implementation\n\nAdd to WITNESS_CLAUDE.md template.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-15T19:48:54.065679-08:00","updated_at":"2025-12-15T20:47:30.415244-08:00","dependencies":[{"issue_id":"gt-f8v","depends_on_id":"gt-82y","type":"blocks","created_at":"2025-12-15T19:49:05.763378-08:00","created_by":"daemon"}]} {"id":"gt-f9x","title":"Town \u0026 Rig Management: install, doctor, federation","description":"Reify the Gas Town installation as a first-class concept.\n\n## Goals\n- Installable: gt install [path] creates complete installation\n- Diagnosable: gt doctor checks and fixes issues\n- Federable: Clone town to VMs with central control\n\n## Architecture Reference\n\nSee docs/architecture.md for full design, especially:\n- Directory structure (Town Level / Rig Level sections)\n- Configuration (town.json, rigs.json schemas)\n- Key design decisions (visible config dir, decentralized agents)","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-15T16:36:37.344283-08:00","updated_at":"2025-12-15T21:15:13.120038-08:00","dependencies":[{"issue_id":"gt-f9x","depends_on_id":"gt-u1j.1","type":"blocks","created_at":"2025-12-15T16:37:32.3363-08:00","created_by":"daemon"}]} @@ -603,7 +603,7 @@ {"id":"gt-ff9h","title":"Digest: mol-deacon-patrol","description":"Patrol 17: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:01:37.50237-08:00","updated_at":"2025-12-24T21:01:37.50237-08:00","closed_at":"2025-12-24T21:01:37.50232-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-fgms","title":"Simplify mail wisps: remove dual-routing, use ephemeral flag","description":"\n## Context\n\ngt-lg66 implemented dual-inbox architecture with separate .beads-wisp/ directory.\nThis was over-engineered. See bd-bkul for the simpler approach.\n\n## Work\n\nOnce beads implements bd-bkul (ephemeral flag in single db):\n\n1. Revert/simplify router.go:\n - Remove resolveWispDir()\n - Remove shouldBeEphemeral() auto-detection (beads handles this)\n - Send() just passes --ephemeral flag to bd create\n\n2. Revert/simplify mailbox.go:\n - Remove wispDir field\n - Remove listFromDir/getFromDir dual-source logic\n - Remove closeInDir dual-source logic\n - Single query, beads returns both types with Source marked\n\n3. Keep in mail.go:\n - --ephemeral flag (passed through to bd)\n - (ephemeral) display indicator\n\n4. Keep in spawn.go:\n - Ephemeral: true on lifecycle messages\n\n## Depends On\n\nbd-bkul: Simplify wisp architecture in beads\n","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T20:08:18.111862-08:00","updated_at":"2025-12-24T20:16:01.457558-08:00","closed_at":"2025-12-24T20:16:01.457558-08:00","close_reason":"Simplified mail wisps: removed dual-routing, now uses --wisp flag to bd create"} {"id":"gt-fjvo","title":"mol-code-review: Self-improving code review molecule","description":"Create a code review molecule that enables Gas Town to self-improve through automated PR review. Flywheel: review generates quality checks, discovered issues, pattern learning.","status":"open","priority":1,"issue_type":"feature","created_at":"2025-12-20T21:03:10.117272-08:00","updated_at":"2025-12-20T21:03:10.117272-08:00"} -{"id":"gt-fk8ys","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:26:31.406007-08:00","updated_at":"2025-12-25T01:26:31.406007-08:00","closed_at":"2025-12-25T01:26:31.405973-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-fk8ys","depends_on_id":"gt-qs46y","type":"parent-child","created_at":"2025-12-25T01:26:31.407344-08:00","created_by":"stevey"}]} +{"id":"gt-fk8ys","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:26:31.406007-08:00","updated_at":"2025-12-25T01:26:31.406007-08:00","closed_at":"2025-12-25T01:26:31.405973-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-fko","title":"Add Gas Town theory of operation to all role primings","description":"All roles (Mayor, Witness, Refinery, Polecat) should get basic GT architecture context: harness, rigs, agents, mail, beads workflow","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T16:42:46.445526-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-fko","depends_on_id":"gt-l1o","type":"blocks","created_at":"2025-12-17T16:42:54.87032-08:00","created_by":"daemon"},{"issue_id":"gt-fko","depends_on_id":"gt-dkc","type":"blocks","created_at":"2025-12-17T16:42:56.409618-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-fly0","title":"bd close --continue: auto-advance to next molecule step","description":"Add --continue flag to bd close for seamless molecule step transitions.\n\n## Usage\n\nbd close \u003cstep-id\u003e --continue [--no-auto]\n\n## Behavior\n\n1. Closes the specified step\n2. Finds next ready step in same molecule (sibling/child)\n3. By default, marks it in_progress (--no-auto to skip)\n4. Outputs the transition\n\n## Output\n\n[checkmark] Closed gt-abc.3: Implement feature\n\nNext ready in molecule:\n gt-abc.4: Write tests\n\n[arrow] Marked in_progress (use --no-auto to skip)\n\n## If no next step\n\n[checkmark] Closed gt-abc.6: Exit decision\n\nMolecule gt-abc complete! All steps closed.\nConsider: bd mol squash gt-abc --summary '...'\n\n## Key behaviors\n- Detects parent molecule from closed step\n- Finds next unblocked sibling\n- Auto-claims by default (propulsion principle)\n- Graceful handling when molecule is complete\n\n## Beads feature\nThis is a bd command - needs implementation in beads repo.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-22T17:01:00.437929-08:00","updated_at":"2025-12-22T17:04:13.464939-08:00","closed_at":"2025-12-22T17:04:13.464939-08:00","close_reason":"Moved to beads: bd-ieyy"} {"id":"gt-fm75","title":"os.Exit() calls in library code prevent proper error handling","description":"internal/cmd/mail.go and other files have os.Exit() calls.\n\nIssues:\n- Hard to test\n- Prevents graceful shutdown\n- Can lose unsaved state\n- Doesn't compose well in library code\n\nShould return errors instead of calling os.Exit() directly.\nLet main() decide how to exit.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:51:19.086806-08:00","updated_at":"2025-12-24T12:51:19.086806-08:00","dependencies":[{"issue_id":"gt-fm75","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.642098-08:00","created_by":"daemon"}]} @@ -612,10 +612,10 @@ {"id":"gt-fqcz","title":"Add gate timeout tracking and notification","description":"Implement timeout and notification logic for gates.\n\n## Timeout Behavior\n1. Gate created with timeout (e.g., 30m)\n2. Deacon tracks elapsed time during patrol\n3. If timeout reached:\n - Notify all waiters: 'Gate timed out'\n - Close gate with timeout reason\n - Waiter can retry, escalate, or fail gracefully\n\n## Notification\n- Use gt mail send to notify waiters\n- Include gate ID, await type, and reason in message\n- Support multiple waiters notification\n\n## Moved from beads\nOriginally bd-ykqu. Gate notifications are Deacon's job in gastown.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:19:18.268978-08:00","updated_at":"2025-12-23T12:19:18.268978-08:00","dependencies":[{"issue_id":"gt-fqcz","depends_on_id":"gt-dh65","type":"blocks","created_at":"2025-12-23T12:19:32.873641-08:00","created_by":"stevey"}]} {"id":"gt-frs","title":"Polecat name pooling: Bounded reusable names","description":"Polecats reuse names from a bounded pool (50) with overflow to sequence numbers.\n\n## Naming Scheme\n- Pool: polecat-01 through polecat-50 (prefer low numbers)\n- Overflow: \u003crigname\u003e-\u003csequenceNumber\u003e (e.g., beads-51, gastown-52)\n\n## Design\n- Witness tracks which pool names are in use\n- On spawn: pick first available from pool\n- If pool exhausted: use rigname-N format\n- On completion: pool name returns, sequence numbers don't\n\n## Why?\n- User experience: tmux sessions survive polecat restarts\n- Users stay attached, see new polecat start (like mayor respawn loop)\n- Bounded resource usage for common case\n- Scales beyond 50 when needed\n\n## Implementation\n- Witness maintains name allocation in beads or local state\n- Tmux session runs respawn loop (like mayor)\n- Name released on graceful exit or when witness detects dead session","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-18T18:32:28.43866-08:00","updated_at":"2025-12-19T17:22:52.551244-08:00","closed_at":"2025-12-19T16:29:30.648439-08:00"} {"id":"gt-fryp","title":"Merge: gt-ih0s","description":"branch: polecat/capable\ntarget: main\nsource_issue: gt-ih0s\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T03:53:33.935017-08:00","updated_at":"2025-12-20T23:17:25.791409-08:00","closed_at":"2025-12-20T23:17:25.791409-08:00","close_reason":"Branches nuked, MRs obsolete"} -{"id":"gt-fsd1","title":"Digest: mol-deacon-patrol","description":"Patrol #19: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:35:30.271995-08:00","updated_at":"2025-12-24T23:35:30.271995-08:00","closed_at":"2025-12-24T23:35:30.271957-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-fsd1","depends_on_id":"gt-525b","type":"parent-child","created_at":"2025-12-24T23:35:30.27272-08:00","created_by":"stevey"}]} +{"id":"gt-fsd1","title":"Digest: mol-deacon-patrol","description":"Patrol #19: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:35:30.271995-08:00","updated_at":"2025-12-24T23:35:30.271995-08:00","closed_at":"2025-12-24T23:35:30.271957-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-fsg4","title":"Digest: mol-deacon-patrol","description":"Patrol #12","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:24:40.556072-08:00","updated_at":"2025-12-24T22:24:40.556072-08:00","closed_at":"2025-12-24T22:24:40.556047-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-fuqx","title":"Merge: gt-ci84","description":"branch: polecat/slit\ntarget: main\nsource_issue: gt-ci84\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T19:38:21.954136-08:00","updated_at":"2025-12-24T00:18:03.075287-08:00","closed_at":"2025-12-23T23:30:30.859023-08:00"} -{"id":"gt-fuz6p","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All healthy, quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:29:38.649433-08:00","updated_at":"2025-12-25T00:29:38.649433-08:00","closed_at":"2025-12-25T00:29:38.649388-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-fuz6p","depends_on_id":"gt-pc21r","type":"parent-child","created_at":"2025-12-25T00:29:38.650126-08:00","created_by":"stevey"}]} +{"id":"gt-fuz6p","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All healthy, quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:29:38.649433-08:00","updated_at":"2025-12-25T00:29:38.649433-08:00","closed_at":"2025-12-25T00:29:38.649388-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-g0cp","title":"Digest: mol-deacon-patrol","description":"Patrol OK: town quiet","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T02:46:38.594856-08:00","updated_at":"2025-12-23T02:46:38.594856-08:00","closed_at":"2025-12-23T02:46:38.594818-08:00","close_reason":"Squashed from 5 wisps"} {"id":"gt-g1ud","title":"Direct test","description":"Testing direct bd create","status":"open","priority":2,"issue_type":"message","created_at":"2025-12-20T17:45:55.058067-08:00","updated_at":"2025-12-20T17:45:55.058067-08:00","labels":["from:test-sender"]} {"id":"gt-g261","title":"generate-summary","description":"Summarize patrol cycle for digest.\n\nNeeds: save-state","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.507401-08:00","updated_at":"2025-12-23T04:39:39.664176-08:00","closed_at":"2025-12-23T04:39:39.664176-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","dependencies":[{"issue_id":"gt-g261","depends_on_id":"gt-751s","type":"parent-child","created_at":"2025-12-23T01:41:54.627957-08:00","created_by":"stevey"},{"issue_id":"gt-g261","depends_on_id":"gt-n9o2","type":"blocks","created_at":"2025-12-23T01:41:54.634797-08:00","created_by":"stevey"}]} @@ -628,7 +628,7 @@ {"id":"gt-g44u.3","title":"Create mol-gastown-polecat derived molecule","description":"Create the standard Gas Town polecat workflow molecule.\n\n## Molecule Definition\n\\`\\`\\`markdown\n## Molecule: gastown-polecat\nFull workflow for Gas Town polecats including binary installation.\n\nIncludes: mol-engineer-in-box\n\n## Step: install-binary\nAfter merge is submitted, rebuild and install the local gt binary.\nThis ensures the latest code is available to all local agents.\n\nRun from the rig directory:\n\\`\\`\\`\ngo build -o gt ./cmd/gt\ngo install ./cmd/gt\n\\`\\`\\`\n\nNeeds: submit\n\\`\\`\\`\n\n## Why This Molecule\nEvery polecat that pushes to main should also rebuild the binary.\nThis ensures the installed gt is always current with main.\n\n## Implementation\n1. Add to builtin_molecules.go (after Includes support lands)\n2. Update SeedBuiltinMolecules\n3. Run gt molecule seed\n\n## Acceptance\n- [ ] mol-gastown-polecat exists\n- [ ] Includes all engineer-in-box steps\n- [ ] Adds install-binary step after submit\n- [ ] Can be used with gt spawn --molecule","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-19T15:50:12.702275-08:00","updated_at":"2025-12-19T16:14:43.859946-08:00","closed_at":"2025-12-19T16:14:43.859946-08:00","dependencies":[{"issue_id":"gt-g44u.3","depends_on_id":"gt-g44u","type":"parent-child","created_at":"2025-12-19T15:50:12.704439-08:00","created_by":"daemon"},{"issue_id":"gt-g44u.3","depends_on_id":"gt-g44u.1","type":"blocks","created_at":"2025-12-19T15:50:31.019186-08:00","created_by":"daemon"},{"issue_id":"gt-g44u.3","depends_on_id":"gt-g44u.2","type":"blocks","created_at":"2025-12-19T15:50:31.14432-08:00","created_by":"daemon"}]} {"id":"gt-g44u.4","title":"Step recovery: timeout and release","description":"Implement recovery mechanism for stuck molecule steps.\n\n## Problem\nWhen a worker dies mid-step, the step stays in_progress forever.\nNeed timeout/release mechanism for nondeterministic idempotence.\n\n## Solution\n1. Track step start time (claimed_at timestamp)\n2. Timeout: After 30 min in_progress, step returns to pending\n3. Manual release: bd release \u003cstep-id\u003e\n\n## Implementation Options\n\n### Option A: Beads-level timeout\n- Add claimed_at field to issues\n- bd ready excludes items in_progress \u003c 30 min\n- bd ready includes items in_progress \u003e 30 min (auto-recovery)\n\n### Option B: Daemon-level timeout \n- Daemon watches in_progress items\n- Moves back to pending after timeout\n\n### Option C: Manual only (MVP)\n- bd release \u003cid\u003e manually moves in_progress → pending\n- Document recovery procedure\n- Witness can automate for polecats\n\n## Recommendation\nStart with Option C (manual) for Christmas. Add Option A later.\n\n## Acceptance\n- [ ] bd release command works\n- [ ] Stuck steps can be recovered\n- [ ] Documented recovery procedure","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T15:50:15.072833-08:00","updated_at":"2025-12-19T16:16:32.325856-08:00","closed_at":"2025-12-19T16:16:32.325856-08:00","dependencies":[{"issue_id":"gt-g44u.4","depends_on_id":"gt-g44u","type":"parent-child","created_at":"2025-12-19T15:50:15.07451-08:00","created_by":"daemon"}]} {"id":"gt-g44u.5","title":"Spawn --molecule integration","description":"Implement gt spawn --molecule flag for molecule-based polecat workflows.\n\nUsage: gt spawn --issue gt-xyz --molecule mol-gastown-polecat\n\nBehavior:\n1. Validate molecule exists and is well-formed\n2. Create molecule instance (child beads) under the issue \n3. Find first ready step(s) in the instance\n4. Spawn polecat with first ready step as initial work\n\nImplementation:\n1. Add --molecule flag to spawn command\n2. Call molecule.Instantiate()\n3. Query ready steps from instance\n4. Pass first ready step to polecat context\n\nFiles: internal/cmd/spawn.go\n\nAcceptance:\n- --molecule flag works\n- Creates proper molecule instance\n- Polecat starts on first ready step\n- End-to-end test with actual polecat","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-19T15:50:24.519069-08:00","updated_at":"2025-12-19T16:13:10.086807-08:00","closed_at":"2025-12-19T16:13:10.086807-08:00","dependencies":[{"issue_id":"gt-g44u.5","depends_on_id":"gt-g44u","type":"parent-child","created_at":"2025-12-19T15:50:24.521029-08:00","created_by":"daemon"},{"issue_id":"gt-g44u.5","depends_on_id":"gt-g44u.1","type":"blocks","created_at":"2025-12-19T15:50:31.275526-08:00","created_by":"daemon"}]} -{"id":"gt-g8mq","title":"Digest: mol-deacon-patrol","description":"Patrol 5","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:07:33.53604-08:00","updated_at":"2025-12-24T23:07:33.53604-08:00","closed_at":"2025-12-24T23:07:33.536012-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-g8mq","depends_on_id":"gt-d1s8","type":"parent-child","created_at":"2025-12-24T23:07:33.536666-08:00","created_by":"stevey"}]} +{"id":"gt-g8mq","title":"Digest: mol-deacon-patrol","description":"Patrol 5","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:07:33.53604-08:00","updated_at":"2025-12-24T23:07:33.53604-08:00","closed_at":"2025-12-24T23:07:33.536012-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-gaxo","title":"ZFC Cleanup: Move Go heuristics to Deacon molecule","description":"Remove Go code that makes workflow decisions. All health checking, staleness \ndetection, nudging, and escalation belongs in the Deacon molecule where Claude \nexecutes it once per minute.\n\n## The Problem\n\nGo code currently implements polling-based health inference:\n- Daemon watches heartbeats with hardcoded thresholds\n- Decides if agents are \"stuck\" based on timestamps \n- Sends nudges, triggers restarts\n- Parses mail subjects with regex to extract intent\n\nThis is a ZFC violation. Go should be message transport, not decision-maker.\n\n## The Fix\n\nMove all health/oversight logic to Deacon patrol molecule:\n- Deacon runs once per minute\n- Claude reads molecule steps, executes them\n- Claude decides if agents are stuck (by checking mail, activity, etc.)\n- Claude sends nudges/escalations via mail\n- Go just routes messages\n\n## Scope\n\n1. daemon/daemon.go - heartbeat staleness logic\n2. daemon/backoff.go - exponential backoff decisions\n3. daemon/lifecycle.go - regex parsing of lifecycle intent\n4. keepalive/keepalive.go - staleness thresholds\n5. deacon/heartbeat.go - heartbeat age classification\n6. doctor/stale_check.go - staleness detection\n7. polecat/manager.go - state derivation from issues\n\n## Success Criteria\n\n- Go code has no hardcoded time.Duration for health decisions\n- No regex parsing of mail subjects for intent\n- No switch statements deciding agent state\n- Deacon molecule has all oversight logic\n- Go daemon is just a message router","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-23T23:58:18.684884-08:00","updated_at":"2025-12-24T00:23:53.320194-08:00","closed_at":"2025-12-24T00:23:53.320194-08:00","close_reason":"All ZFC cleanup tasks complete"} {"id":"gt-gaxo.1","title":"Remove daemon heartbeat staleness logic","description":"**Files:** daemon/daemon.go (lines 272-325), daemon/backoff.go\n\n**Current behavior:**\n- Hardcoded 2min/5min thresholds classify agent health\n- Exponential backoff decides nudge intervals\n- Go decides \"is this agent stuck?\" based on timestamps\n\n**Fix:**\n- Remove staleness classification from Go\n- Remove backoff algorithm\n- Daemon becomes pure message router\n- Deacon molecule step checks agent health instead\n\n**Lines to remove/refactor:**\n- daemon.go:272-274 (staleness thresholds)\n- daemon.go:282-295 (poke decision logic)\n- daemon.go:317-325 (conditional nudging)\n- backoff.go:108-120 (backoff calculations)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T23:59:00.146652-08:00","updated_at":"2025-12-24T00:05:44.186939-08:00","closed_at":"2025-12-24T00:05:44.186939-08:00","dependencies":[{"issue_id":"gt-gaxo.1","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:00.147277-08:00","created_by":"daemon"}]} {"id":"gt-gaxo.2","title":"Remove keepalive/heartbeat staleness thresholds","description":"**Files:** \n- keepalive/keepalive.go (lines 94-111)\n- deacon/heartbeat.go (lines 88-108)\n\n**Current behavior:**\n- Hardcoded thresholds: 2min=fresh, 5min=stale, 15min=very stale\n- Used by daemon to decide whether to poke agents\n- Go classifies agent responsiveness\n\n**Fix:**\n- Remove all hardcoded time.Duration thresholds\n- Keepalive becomes pure timestamp storage\n- Deacon molecule step does health assessment:\n \"Check if Witness responded in last N minutes\" (N from mol config)\n\n**Lines to remove:**\n- keepalive.go:96-110 (classification logic)\n- heartbeat.go:91-107 (age classification)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T23:59:02.956489-08:00","updated_at":"2025-12-24T00:05:44.309675-08:00","closed_at":"2025-12-24T00:05:44.309675-08:00","dependencies":[{"issue_id":"gt-gaxo.2","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:02.957013-08:00","created_by":"daemon"}]} @@ -637,9 +637,9 @@ {"id":"gt-gaxo.5","title":"Design Deacon molecule health-check step","description":"**Context:** After removing Go heuristics, Deacon molecule needs the logic.\n\n**New molecule step: health-scan**\n\nClaude executes:\n1. Check Witness heartbeat: gt witness status \u003crig\u003e\n2. Check Refinery heartbeat: gt refinery status \u003crig\u003e\n3. For each, assess: responsive? stuck? needs restart?\n4. If unresponsive for N cycles, send escalation mail\n\n**Key difference from Go approach:**\n- Claude makes the judgment call, not hardcoded thresholds\n- Claude can read context (what was the agent working on?)\n- Claude can ask questions or check additional signals\n- Thresholds come from molecule config, not Go constants\n\n**Deliverables:**\n- Update mol-deacon-patrol health-scan step\n- Add configurable thresholds as molecule variables\n- Test with simulated stuck agents","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T23:59:07.247548-08:00","updated_at":"2025-12-24T00:23:46.421901-08:00","closed_at":"2025-12-24T00:23:46.421901-08:00","close_reason":"Completed in e7f9dc8","dependencies":[{"issue_id":"gt-gaxo.5","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:07.248049-08:00","created_by":"daemon"}]} {"id":"gt-gaxo.6","title":"Remove lifecycle intent parsing from Go","description":"daemon/lifecycle.go parses mail subjects with regex looking for restart/shutdown/cycle keywords, then executes actions. Fix: use structured message types in mail body instead of parsing subjects. Go reads action field, does not interpret text.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T23:59:15.765947-08:00","updated_at":"2025-12-24T00:10:56.167018-08:00","closed_at":"2025-12-24T00:10:56.167018-08:00","dependencies":[{"issue_id":"gt-gaxo.6","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:15.766409-08:00","created_by":"daemon"}]} {"id":"gt-gby","title":"gt handoff: Unified agent lifecycle command","description":"## Summary\n\nUnified `gt handoff` command for ALL agent types to request lifecycle actions.\n\n## Usage\n\ngt handoff # Context-aware default\ngt handoff --shutdown # Terminate, cleanup, don't restart\ngt handoff --cycle # Restart with handoff mail\ngt handoff --restart # Fresh restart, no handoff\n\n## Context-Aware Defaults\n\n| Agent Type | Default | Reason |\n|------------|---------|--------|\n| Polecat | --shutdown | Ephemeral, work is done |\n| Witness | --cycle | Long-running, context full |\n| Refinery | --cycle | Long-running, context full |\n| Mayor | --cycle | Long-running, context full |\n| Crew | (sends mail only) | Human-managed |\n\n## What gt handoff Does\n\n1. **Verify safe to stop**\n - Git state clean (no uncommitted changes)\n - Work handed off (PR exists for polecats)\n\n2. **Send handoff mail to self** (for cycle/restart)\n - Captures current state\n - New session will read this\n\n3. **Send lifecycle request to manager**\n - Polecats/Refinery → Witness\n - Witness/Mayor → Daemon\n - Format: mail to \u003cmanager\u003e with action type\n\n4. **Set state: requesting_\u003caction\u003e**\n - Lifecycle manager checks this before acting\n\n5. **Wait for termination**\n - Don't self-exit - let manager kill session\n - Ensures clean handoff\n\n## Lifecycle Request Flow\n\nAgent Lifecycle Manager\n | |\n | 1. gt handoff --cycle |\n | a. Verify git clean |\n | b. Send handoff mail to self |\n | c. Set requesting_cycle=true |\n | d. Send lifecycle request |\n |------------------------------------→|\n | |\n | 2. Receive request\n | 3. Verify state |\n | 4. Kill session |\n | 5. Start new |\n | (for cycle) |\n | |\n | New session reads handoff |\n | Resumes work |\n\n## Who Manages Whom\n\n| Agent | Sends lifecycle request to |\n|-------|---------------------------|\n| Polecat | \u003crig\u003e/witness |\n| Refinery | \u003crig\u003e/witness |\n| Witness | daemon/ |\n| Mayor | daemon/ |\n\n## Implementation\n\n1. Detect current role (polecat, witness, refinery, mayor, crew)\n2. Apply context-aware default if no flag specified\n3. Run pre-flight checks (git clean, work handed off)\n4. Send handoff mail to self (if cycling)\n5. Send lifecycle request to appropriate manager\n6. Set requesting_\u003caction\u003e in state.json\n7. Wait (manager will kill us)\n\n## For Polecats (--shutdown)\n\nAdditional cleanup after kill:\n- Witness removes worktree\n- Witness deletes polecat branch\n- Polecat ceases to exist\n\n## Related Issues\n\n- gt-99m: Daemon (handles Mayor/Witness lifecycle)\n- gt-7ik: Ephemeral polecats (polecat cleanup)\n- gt-eu9: Witness session cycling","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T11:39:40.806863-08:00","updated_at":"2025-12-25T01:26:07.533238-08:00","closed_at":"2025-12-25T01:26:07.533238-08:00","close_reason":"gt handoff command fully implemented and working","dependencies":[{"issue_id":"gt-gby","depends_on_id":"gt-7ik","type":"blocks","created_at":"2025-12-18T11:39:46.423945-08:00","created_by":"daemon"},{"issue_id":"gt-gby","depends_on_id":"gt-eu9","type":"blocks","created_at":"2025-12-18T11:39:46.547204-08:00","created_by":"daemon"},{"issue_id":"gt-gby","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T11:50:24.142182-08:00","created_by":"daemon"}]} -{"id":"gt-gczi","title":"Digest: mol-deacon-patrol","description":"Patrol 20 - handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:11:34.570635-08:00","updated_at":"2025-12-24T23:11:34.570635-08:00","closed_at":"2025-12-24T23:11:34.570604-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-gczi","depends_on_id":"gt-brd8","type":"parent-child","created_at":"2025-12-24T23:11:34.571313-08:00","created_by":"stevey"}]} +{"id":"gt-gczi","title":"Digest: mol-deacon-patrol","description":"Patrol 20 - handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:11:34.570635-08:00","updated_at":"2025-12-24T23:11:34.570635-08:00","closed_at":"2025-12-24T23:11:34.570604-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ggmc","title":"Merge: gt-83k0","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-83k0\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T23:36:24.551025-08:00","updated_at":"2025-12-22T23:38:38.536524-08:00","closed_at":"2025-12-22T23:38:38.536524-08:00","close_reason":"Merged to main"} -{"id":"gt-gic8y","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All agents healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:51:34.264706-08:00","updated_at":"2025-12-25T00:51:34.264706-08:00","closed_at":"2025-12-25T00:51:34.264675-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-gic8y","depends_on_id":"gt-d7411","type":"parent-child","created_at":"2025-12-25T00:51:34.265437-08:00","created_by":"stevey"}]} +{"id":"gt-gic8y","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All agents healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:51:34.264706-08:00","updated_at":"2025-12-25T00:51:34.264706-08:00","closed_at":"2025-12-25T00:51:34.264675-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-gl2","title":"Clarify Mayor vs Witness cleanup responsibilities","description":"Document the cleanup authority model: Witness owns ALL per-worker cleanup, Mayor never involved.\n\n## The Rule\n\n**Witness handles ALL per-worker cleanup. Mayor is never involved.**\n\n## Why This Matters\n\n1. Separation of concerns: Mayor strategic, Witness operational\n2. Reduced coordination overhead: No back-and-forth for routine cleanup\n3. Faster shutdown: Witness kills workers immediately upon verification\n4. Cleaner escalation: Mayor only hears about problems\n\n## What Witness Handles\n\n- Verifying worker git state before kill\n- Nudging workers to fix dirty state\n- Killing worker sessions\n- Updating worker state (sleep/wake)\n- Logging verification results\n\n## What Mayor Handles\n\n- Receiving swarm complete notifications\n- Deciding whether to start new swarms\n- Handling escalations (stuck workers after 3 retries)\n- Cross-rig coordination\n\n## Escalation Path\n\nWorker stuck -\u003e Witness nudges (up to 3x) -\u003e Witness escalates to Mayor -\u003e Mayor decides: force kill, reassign, or human\n\n## Anti-Patterns\n\nDO NOT: Mayor asks Witness if worker X is clean\nDO: Witness reports swarm complete, all workers verified\n\nDO NOT: Mayor kills worker sessions directly\nDO: Mayor tells Witness to abort swarm, Witness handles cleanup\n\nDO NOT: Workers report done to Mayor\nDO: Workers report to Witness, Witness aggregates and reports up","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-15T19:48:56.678724-08:00","updated_at":"2025-12-15T20:48:12.068964-08:00","dependencies":[{"issue_id":"gt-gl2","depends_on_id":"gt-82y","type":"blocks","created_at":"2025-12-15T19:49:05.929877-08:00","created_by":"daemon"}]} {"id":"gt-gl6s","title":"gt spawn: polecats report success but no work actually happens","description":"## Problem\n\ngt spawn polecats have multiple silent failure modes:\n\n### Failure Mode 1: No gt prime\n- Claude starts at prompt and waits for input\n- SessionStart hook doesn't auto-run 'gt prime'\n- Without gt prime, polecats don't pick up work\n\n### Failure Mode 2: No git push (CRITICAL)\n- Polecat commits code locally\n- Polecat closes the beads issue\n- Polecat sends POLECAT_DONE\n- **But code is never pushed to remote branch**\n- When worktree is cleaned up, commits are lost forever\n- Issue appears closed but no code exists\n\n## Evidence\n\ntestcat on bd-d28c:\n- Reported 'Work Complete' with commits 7d3447b9, cd87e541\n- Closed bd-d28c\n- Submitted MR bd-yx22\n- But: `grep -r 'TestCreateTombstone' cmd/bd/*.go` returns nothing\n- No polecat/testcat branch on remote\n\n## Required Fixes\n\n1. Polecats MUST push their branch before closing issues\n2. Witness MUST verify branch exists on remote before cleanup\n3. gt spawn should auto-nudge 'gt prime'\n4. Consider: Polecat handoff should fail if unpushed commits exist\n\n## Verification Protocol for Witness\n\nBefore accepting POLECAT_DONE:\n```bash\n# 1. Verify branch pushed\ngit branch -r | grep polecat/\u003cname\u003e\n\n# 2. Verify code exists\ngrep -r '\u003cexpected_function\u003e' path/to/files\n\n# 3. Only then cleanup\n```","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-23T21:22:45.498303-08:00","updated_at":"2025-12-23T21:50:46.490356-08:00","closed_at":"2025-12-23T21:50:46.490356-08:00","close_reason":"Fixed: Added BranchPushedToRemote() check to verifyPolecatState - witness now verifies branches are pushed before cleanup"} {"id":"gt-glwd","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:50:24.723492-08:00","updated_at":"2025-12-25T01:33:00.286736-08:00","closed_at":"2025-12-25T01:33:00.286736-08:00","close_reason":"Test pollution cleanup"} @@ -650,8 +650,9 @@ {"id":"gt-gp6i","title":"Witness cleanup should know worktree parent repo","description":"Witness had to discover that polecat worktrees are created from mayor/rig, not the rig root.\n\n## Problem\nWhen cleaning up polecat/tracer:\n- Witness ran git worktree remove from gastown/ - failed\n- Had to discover worktree was from mayor/rig\n- Then removed correctly\n\n## Improvement\nWitness should know the worktree parent repo path (mayor/rig) and clean up from there directly.\n\n## Evidence\nTracer bullet 2025-12-23: Witness took extra steps to figure out cleanup path.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T21:58:29.302337-08:00","updated_at":"2025-12-23T21:58:29.302337-08:00"} {"id":"gt-gq3f","title":"Digest: mol-deacon-patrol","description":"Patrol #8","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:23:23.407978-08:00","updated_at":"2025-12-24T22:23:23.407978-08:00","closed_at":"2025-12-24T22:23:23.407938-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-gswn","title":"Integration test: agent waits for CI via gate","description":"End-to-end test of the gate workflow.\n\n## Test Scenario\n1. Agent creates gate: bd gate create --await gh:run:123 --timeout 5m --notify beads/dave\n2. Agent writes handoff and exits\n3. Deacon patrol checks gate condition\n4. (Mock) GitHub run completes\n5. Deacon notifies waiter and closes gate\n6. New agent session reads mail and resumes\n\n## Test Requirements\n- Mock GitHub API responses\n- Test timeout path\n- Test multiple waiters\n- Verify mail notifications sent\n\n## Moved from beads\nOriginally bd-rl5t. Tests Deacon patrol which is in gastown.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:23:56.582834-08:00","updated_at":"2025-12-23T12:23:56.582834-08:00","dependencies":[{"issue_id":"gt-gswn","depends_on_id":"gt-dh65","type":"blocks","created_at":"2025-12-23T12:24:01.787444-08:00","created_by":"stevey"}]} -{"id":"gt-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","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-gt2wl","depends_on_id":"gt-9nmz1","type":"parent-child","created_at":"2025-12-25T00:04:46.890093-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","close_reason":"Squashed from 8 wisps"} {"id":"gt-gura","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:37:11.453511-08:00","updated_at":"2025-12-24T22:37:11.453511-08:00","closed_at":"2025-12-24T22:37:11.453474-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-guuv0","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:31:25.422463-08:00","updated_at":"2025-12-25T02:31:25.422463-08:00","closed_at":"2025-12-25T02:31:25.422434-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-guuv0","depends_on_id":"gt-usnr4","type":"parent-child","created_at":"2025-12-25T02:31:25.42344-08:00","created_by":"stevey"}]} {"id":"gt-h0v5","title":"Add keyboard navigation and filtering","description":"Keyboard navigation: j/k or arrows to move, enter to expand/collapse, q to quit. Filtering: by rig name, worker name, event type. Search within activity stream.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T16:27:20.27464-08:00","updated_at":"2025-12-23T16:27:20.27464-08:00","dependencies":[{"issue_id":"gt-h0v5","depends_on_id":"gt-tr0a","type":"blocks","created_at":"2025-12-23T16:27:40.14167-08:00","created_by":"daemon"},{"issue_id":"gt-h0v5","depends_on_id":"gt-55kx","type":"blocks","created_at":"2025-12-23T16:27:40.224089-08:00","created_by":"daemon"},{"issue_id":"gt-h0v5","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:31.027436-08:00","created_by":"daemon"}]} {"id":"gt-h1n5","title":"Witness patrol: Add banners and wisp-based execution","description":"Bring Witness patrol up to Deacon's level of sophistication:\n\n## Current state\n- mol-witness-patrol exists (gt-qflq)\n- Basic step definitions\n\n## Needed\n1. **Banners** - Print step banners like Deacon does:\n ```\n ═══════════════════════════════════════════════════════════════\n 👁️ POLECAT-SCAN\n Checking polecat health and nudging stale workers\n ═══════════════════════════════════════════════════════════════\n ```\n\n2. **Wisp-based execution** - Spawn patrol as wisp, squash when complete\n3. **Handoff bead attachment** - Witness needs its own handoff bead with attached_molecule\n4. **Loop-or-exit step** - Context-aware cycling like Deacon\n5. **Patrol summary banner** at end of each cycle\n\n## Reference\nSee Deacon patrol implementation in ~/gt/deacon/CLAUDE.md","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T13:19:40.503122-08:00","updated_at":"2025-12-24T00:18:03.016743-08:00","closed_at":"2025-12-23T19:37:33.432323-08:00","close_reason":"Implemented in witness.md.tmpl: banners, wisp-based execution, handoff bead attachment, loop-or-exit, patrol summary","dependencies":[{"issue_id":"gt-h1n5","depends_on_id":"gt-y481","type":"parent-child","created_at":"2025-12-23T13:20:15.684048-08:00","created_by":"daemon"}]} {"id":"gt-h262","title":"bd ready --blockers: prioritize issues that block other work","description":"bd ready should prioritize issues that are blocking other work.\n\n**From VC**: Blocker-first prioritization in GetReadyWork(). ~100 lines.\nAlgorithm: baseline-failure first, then discovered:blocker, then by priority.\n\n**Gas Town implementation**: CLI flag or default behavior:\n```bash\nbd ready --blockers-first # Or make this default\n```\n\nChecks dependency graph. Issues with many dependents surface first.\n\n**Value**: Unblocks parallelism faster. Critical path gets cleared.\n\n**VC lesson**: Without blocker priority, work can starve on discovered issues.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-20T20:30:18.426957-08:00","updated_at":"2025-12-20T20:30:18.426957-08:00","dependencies":[{"issue_id":"gt-h262","depends_on_id":"gt-zhpa","type":"parent-child","created_at":"2025-12-20T20:30:27.664473-08:00","created_by":"daemon"}]} @@ -726,8 +727,8 @@ {"id":"gt-iep9.7","title":"loop-or-exit","description":"Decision: burn and loop if context low, exit for respawn if context high.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-21T17:51:04.755716-08:00","updated_at":"2025-12-21T17:51:04.755716-08:00","dependencies":[{"issue_id":"gt-iep9.7","depends_on_id":"gt-iep9","type":"parent-child","created_at":"2025-12-21T17:51:04.75713-08:00","created_by":"daemon"}]} {"id":"gt-ih0s","title":"Fix blocking bugs (gt-dsfi, gt-n7z7, gm-c6b)","description":"Fix bugs blocking Witness functionality:\n\n1. gt-dsfi: handoff deadlock\n - Polecats hang when trying to exit\n - Blocks shutdown request handler\n\n2. gt-n7z7: refinery foreground race condition \n - Sometimes detects parent as already running\n - Blocks reliable Refinery startup\n\n3. gm-c6b: mail coordination\n - Cross-rig mail should use town-level database\n - Affects Witness \u003c-\u003e Mayor communication\n\nThese should be fixed early as they'll block integration testing.","notes":"Fixed gt-dsfi and gt-n7z7. Issue gm-c6b not found in database.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T03:14:25.803822-08:00","updated_at":"2025-12-20T07:47:50.444171-08:00","closed_at":"2025-12-20T07:47:50.444171-08:00","dependencies":[{"issue_id":"gt-ih0s","depends_on_id":"gt-53w6","type":"parent-child","created_at":"2025-12-20T03:14:37.430142-08:00","created_by":"daemon"}]} {"id":"gt-iib","title":"Architecture: Decentralized rig structure with per-rig agents","description":"## Decision\n\nAdopt decentralized architecture where each rig contains all its agents (mayor/, witness/, refinery/, polecats/) rather than centralizing mayor clones at town level.\n\n## Town Level Structure\n\n```\n~/ai/ # Town root\n├── config/ # Town config (VISIBLE, not hidden)\n│ ├── town.json # {\"type\": \"town\"}\n│ ├── rigs.json # Registry of managed rigs\n│ └── federation.json # Wasteland config (future)\n│\n├── mayor/ # Mayor's HOME at town level\n│ ├── CLAUDE.md\n│ ├── mail/inbox.jsonl\n│ └── state.json\n│\n└── \u003crigs\u003e/ # Managed projects\n```\n\n## Rig Level Structure (e.g., wyvern)\n\n```\nwyvern/ # Rig = clone of project repo\n├── .git/info/exclude # Gas Town adds: polecats/ refinery/ witness/ mayor/\n├── .beads/ # Beads (if project uses it)\n├── [project files] # Clean project code on main\n│\n├── polecats/ # Worker clones\n│ └── \u003cname\u003e/ # Each is a git clone\n│\n├── refinery/\n│ ├── rig/ # Refinery's clone\n│ ├── state.json\n│ └── mail/inbox.jsonl\n│\n├── witness/ # NEW: Per-rig pit boss\n│ ├── rig/ # Witness's clone\n│ ├── state.json\n│ └── mail/inbox.jsonl\n│\n└── mayor/\n ├── rig/ # Mayor's clone for this rig\n └── state.json\n```\n\n## Key Decisions\n\n1. **Visible config dir**: `config/` not `.gastown/` (models don't find hidden dirs)\n2. **Witness per-rig**: Each rig has its own Witness (pit boss) with its own clone\n3. **Mayor decentralized**: Mayor's clones live IN each rig at `\u003crig\u003e/mayor/rig/`\n4. **Minimal invasiveness**: Only `.git/info/exclude` modified, no commits to project\n5. **Clone subdir name**: Keep `rig/` for consistency (refinery/rig/, witness/rig/, mayor/rig/)\n\n## Role Detection\n\n- Town root or mayor/ → Mayor (town level)\n- Rig root → Mayor (canonical main)\n- \u003crig\u003e/mayor/rig/ → Mayor (rig-specific)\n- \u003crig\u003e/refinery/rig/ → Refinery\n- \u003crig\u003e/witness/rig/ → Witness\n- \u003crig\u003e/polecats/\u003cname\u003e/ → Polecat\n\n## Migration from PGT\n\n- `mayor/rigs/\u003crig\u003e/` → `\u003crig\u003e/mayor/rig/`\n- `\u003crig\u003e/town/` → eliminated (rig root IS the clone)\n- Add `witness/` to each rig","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-15T19:21:19.913928-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-iib","depends_on_id":"gt-u1j","type":"blocks","created_at":"2025-12-15T19:21:40.374551-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} -{"id":"gt-ijmgg","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All agents healthy, routine check","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:45:14.673074-08:00","updated_at":"2025-12-25T00:45:14.673074-08:00","closed_at":"2025-12-25T00:45:14.673033-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-ijmgg","depends_on_id":"gt-b2e60","type":"parent-child","created_at":"2025-12-25T00:45:14.673765-08:00","created_by":"stevey"}]} -{"id":"gt-ikyh","title":"Digest: mol-deacon-patrol","description":"Patrol #3: Stable, no changes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:30:26.503345-08:00","updated_at":"2025-12-24T23:30:26.503345-08:00","closed_at":"2025-12-24T23:30:26.503314-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-ikyh","depends_on_id":"gt-a7b3","type":"parent-child","created_at":"2025-12-24T23:30:26.503992-08:00","created_by":"stevey"}]} +{"id":"gt-ijmgg","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All agents healthy, routine check","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:45:14.673074-08:00","updated_at":"2025-12-25T00:45:14.673074-08:00","closed_at":"2025-12-25T00:45:14.673033-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-ikyh","title":"Digest: mol-deacon-patrol","description":"Patrol #3: Stable, no changes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:30:26.503345-08:00","updated_at":"2025-12-24T23:30:26.503345-08:00","closed_at":"2025-12-24T23:30:26.503314-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ilav","title":"Polecat Lifecycle Events: Refinery-Witness Coordination","description":"## Problem\n\nPolecat work completion is currently treated as a single event (MR submission), but the true completion is when the Refinery merges the work. This creates a lifecycle gap:\n\n1. Polecat submits MR → considered \"done\" by Witness\n2. But MR might fail to merge (conflicts, test failures)\n3. No one notifies anyone when merge actually succeeds\n\n## Solution: Two-Event Lifecycle\n\n**Event 1: MR Submitted**\n- `gt mq submit` notifies Witness\n- Witness verifies submission was clean\n- Polecat can go idle (but worktree retained)\n- If submission had issues, Witness can help\n\n**Event 2: MR Merged**\n- Refinery sends `LIFECYCLE: work merged` to Witness\n- Witness updates polecat state to `merged`\n- Worktree now eligible for full cleanup/recycling\n\n## Village Sibling Watch\n\nFor robustness, patrol roles check on their siblings:\n- Refinery checks Witness via `gt peek`\n- Witness checks Refinery via `gt peek`\n- Creates defense in depth - if primary notification fails, someone catches it\n\n## Recovery\n\nIf Refinery misses sending lifecycle notification:\n- Witness polecat-scan can detect: polecat in mr_submitted but MR shows merged\n- Deacon orphan-check can detect: merged MRs with stale polecats","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-23T12:06:56.746185-08:00","updated_at":"2025-12-23T12:07:07.719057-08:00"} {"id":"gt-ilav.1","title":"Refinery: Add lifecycle-notify step to patrol","description":"After successful merge in handleSuccess(), send lifecycle notification to Witness.\n\n## Implementation\n\n1. Add new mail type: `LIFECYCLE: work merged`\n2. In engineer.go handleSuccess(), after closing MR and source issue:\n ```\n gt mail send \u003crig\u003e/witness -s \"LIFECYCLE: work merged\" -m \"\n Worker: \u003cpolecat\u003e\n MR: \u003cmr-id\u003e\n Issue: \u003csource-issue\u003e\n Commit: \u003cmerge-commit\u003e\n Action: Polecat work merged. Worktree eligible for recycling.\n \"\n ```\n\n3. Update mol-refinery-patrol to include lifecycle-notify step between merge-push and loop-check\n\n## Acceptance\n- Successful merges send mail to Witness\n- Mail includes worker name, MR id, source issue, commit SHA","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:07:46.715807-08:00","updated_at":"2025-12-23T12:07:46.715807-08:00","dependencies":[{"issue_id":"gt-ilav.1","depends_on_id":"gt-ilav","type":"parent-child","created_at":"2025-12-23T12:07:46.716238-08:00","created_by":"daemon"}]} {"id":"gt-ilav.2","title":"Witness: Handle LIFECYCLE work-merged mail","description":"Witness should process the `LIFECYCLE: work merged` notification from Refinery.\n\n## Implementation\n\n1. In Witness mail processing, add handler for subject containing \"LIFECYCLE: work merged\"\n2. Parse worker name from mail body\n3. Update polecat state to `merged` (new state - see sibling task)\n4. Log completion for metrics\n5. Worktree is now eligible for cleanup on next gc cycle\n\n## Acceptance\n- Witness correctly parses and handles work-merged mail\n- Polecat state updated to merged\n- No action taken if polecat already cleaned up (idempotent)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:07:47.878019-08:00","updated_at":"2025-12-23T12:07:47.878019-08:00","dependencies":[{"issue_id":"gt-ilav.2","depends_on_id":"gt-ilav","type":"parent-child","created_at":"2025-12-23T12:07:47.880327-08:00","created_by":"daemon"},{"issue_id":"gt-ilav.2","depends_on_id":"gt-ilav.1","type":"blocks","created_at":"2025-12-23T12:08:06.585766-08:00","created_by":"daemon"},{"issue_id":"gt-ilav.2","depends_on_id":"gt-ilav.5","type":"blocks","created_at":"2025-12-23T12:08:06.667459-08:00","created_by":"daemon"}]} @@ -742,7 +743,7 @@ {"id":"gt-ingm","title":"Molecular Chemistry Cleanup: Fix inaccurate molecule depictions","description":"## The Correct Model\n\nAccording to molecular-chemistry.md, the hierarchy is:\n\nFormula (YAML DSL) --cook--\u003e Proto (template beads) --pour/wisp--\u003e Mol/Wisp (actual work)\n\n- **Formulas**: YAML files in .beads/formulas/ that define workflow structure\n- **Cook**: Transform formula to proto beads (with [template] label)\n- **Proto**: Template beads with child beads for each step\n- **Pour**: Proto to Mol (persistent liquid)\n- **Wisp**: Proto to Wisp (ephemeral vapor)\n\n## What's Wrong\n\nWe have legacy code and docs that use the OLD model where molecules are defined\nin Go code as structs with embedded markdown, instead of as formula YAML cooked into proto beads.\n\n---\n\n## MAJOR ISSUES\n\n### 1. Go Code: molecules_*.go (DELETE OR REWRITE)\n\n**Files:**\n- internal/beads/builtin_molecules.go\n- internal/beads/molecules_patrol.go (19KB!)\n- internal/beads/molecules_session.go (13KB)\n- internal/beads/molecules_work.go (13KB)\n\n**Problem:** Defines molecules as Go structs with embedded markdown descriptions.\nThis is completely wrong. Molecules should come from:\n1. Formula YAML files cooked into proto beads\n2. Proto beads with child beads for each step\n\n**Used by:**\n- install.go:seedBuiltinMolecules() - seeds during install\n- catalog.go - includes in catalog\n- molecule_list.go:ExportBuiltinMolecules()\n\n**Fix:** Delete these files. Create formula YAML files instead. Update seeding\nto cook formulas into protos.\n\n### 2. Role Templates: Steps Listed in Markdown (REWRITE)\n\n**Files:**\n- prompts/roles/deacon.md - Lists 7 patrol steps\n- prompts/roles/refinery.md - Lists 10 patrol steps\n- prompts/roles/witness.md - Procedural \"Heartbeat Protocol\" (not molecule-based!)\n- prompts/roles/polecat.md - References molecule steps\n\n**Problem:** The steps are listed in the markdown template, but they should be\ndiscovered from the proto beads via bd mol current. Templates should say\n\"check your hook, run your patrol\" without duplicating step definitions.\n\n**Fix:** Templates should describe HOW to run a patrol (propulsion principle,\nbd mol current, bd close --continue), not WHAT the steps are.\n\n### 3. Protos are Empty/Missing (CREATE)\n\n**Current state:**\n- gt-iep9 (mol-deacon-patrol) - Only 2 child steps\n- gt-qflq (mol-witness-patrol) - EMPTY (0 children)\n- mol-refinery-patrol - DOESN'T EXIST\n\n**Fix:** Create formula YAML files for each patrol, cook them into proper protos\nwith child beads for each step.\n\n---\n\n## MEDIUM ISSUES\n\n### 4. Command Confusion: spawn vs pour/wisp\n\n**Files:**\n- prompts/roles/deacon.md - Uses bd mol spawn ... --assignee=deacon\n- prompts/roles/refinery.md - Uses bd mol spawn ... --wisp\n- Various docs\n\n**Problem:** The correct commands per molecular-chemistry.md:\n- bd pour proto - Create persistent mol (liquid)\n- bd wisp proto - Create ephemeral wisp (vapor)\n- bd mol spawn - Old/deprecated\n\n**Fix:** Update all references to use bd wisp for patrols, bd pour for\npersistent work.\n\n### 5. Command Confusion: gt mol vs bd mol\n\n**Files:** Various docs and templates\n\n**Problem:** Some use gt mol status, others bd mol status. Need to clarify:\n- gt mol = Gas Town wrapper (if it exists, what does it add?)\n- bd mol = Beads molecule commands (authoritative)\n\n**Fix:** Audit and standardize. If gt mol is a thin wrapper, remove it.\n\n### 6. polecat-wisp-architecture.md (UPDATE OR DELETE)\n\n**File:** docs/polecat-wisp-architecture.md\n\n**Problem:** References adding molecules to builtin_molecules.go - old model.\n\n### 7. manager.go (UPDATE)\n\n**File:** internal/rig/manager.go\n\n**Problem:** Comment references \"subset of builtin_molecules.go for seeding\"\n\n---\n\n## IMPLEMENTATION ORDER\n\n1. **Create formula YAML files** for the 3 patrol molecules:\n - mol-deacon-patrol.formula.yaml\n - mol-witness-patrol.formula.yaml\n - mol-refinery-patrol.formula.yaml\n\n2. **Implement bd cook** if not already working to create protos from formulas\n\n3. **Cook the formulas** into proto beads with proper child beads\n\n4. **Update role templates** to use propulsion principle without step lists\n\n5. **Delete molecules_*.go** once formulas are working\n\n6. **Update install.go** to cook formulas instead of seeding Go structs\n\n7. **Audit gt mol vs bd mol** and standardize","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-24T12:37:49.601971-08:00","updated_at":"2025-12-24T12:37:49.601971-08:00","dependencies":[{"issue_id":"gt-ingm","depends_on_id":"gt-6y8u","type":"relates-to","created_at":"2025-12-24T13:25:18.856554-08:00","created_by":"daemon"}]} {"id":"gt-ingm.1","title":"Create patrol formula YAML files","description":"Create formula YAML files for:\n- mol-deacon-patrol.formula.yaml\n- mol-witness-patrol.formula.yaml \n- mol-refinery-patrol.formula.yaml\n\nUse the step definitions currently in molecules_patrol.go as reference.\nStore in .beads/formulas/","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T12:38:10.472804-08:00","updated_at":"2025-12-24T12:59:44.504798-08:00","closed_at":"2025-12-24T12:59:44.504798-08:00","close_reason":"Created 4 patrol formula YAML files in .beads/formulas/"} {"id":"gt-ingm.2","title":"Cook patrol formulas into proto beads","description":"Use bd cook to transform formula YAML into proto beads with proper child beads for each step.\n\nVerify with bd mol show that protos have all children.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T12:38:11.762962-08:00","updated_at":"2025-12-24T13:47:43.467344-08:00","closed_at":"2025-12-24T13:47:43.467344-08:00","close_reason":"Cooked 4 patrol formulas: deacon(9), witness(10), refinery(11), polecat-arm(6)","dependencies":[{"issue_id":"gt-ingm.2","depends_on_id":"gt-ingm.1","type":"blocks","created_at":"2025-12-24T12:38:23.880593-08:00","created_by":"daemon"},{"issue_id":"gt-ingm.2","depends_on_id":"gt-8tmz.13","type":"blocks","created_at":"2025-12-24T13:01:04.581551-08:00","created_by":"daemon"}]} -{"id":"gt-ingm.3","title":"Delete molecules_*.go files","description":"Remove legacy Go-defined molecules:\n- internal/beads/builtin_molecules.go\n- internal/beads/molecules_patrol.go\n- internal/beads/molecules_session.go\n- internal/beads/molecules_work.go\n\nUpdate install.go to cook formulas instead of seeding Go structs.\nUpdate catalog.go if needed.","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-12-24T12:38:13.028833-08:00","updated_at":"2025-12-25T02:22:59.185943-08:00","dependencies":[{"issue_id":"gt-ingm.3","depends_on_id":"gt-ingm.2","type":"blocks","created_at":"2025-12-24T12:38:23.964643-08:00","created_by":"daemon"}]} +{"id":"gt-ingm.3","title":"Delete molecules_*.go files","description":"Remove legacy Go-defined molecules:\n- internal/beads/builtin_molecules.go\n- internal/beads/molecules_patrol.go\n- internal/beads/molecules_session.go\n- internal/beads/molecules_work.go\n\nUpdate install.go to cook formulas instead of seeding Go structs.\nUpdate catalog.go if needed.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T12:38:13.028833-08:00","updated_at":"2025-12-25T02:26:03.253554-08:00","closed_at":"2025-12-25T02:26:03.253554-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-ingm.3","depends_on_id":"gt-ingm.2","type":"blocks","created_at":"2025-12-24T12:38:23.964643-08:00","created_by":"daemon"}]} {"id":"gt-ingm.4","title":"Rewrite role templates without step lists","description":"Update:\n- prompts/roles/deacon.md\n- prompts/roles/refinery.md\n- prompts/roles/witness.md\n\nTemplates should describe HOW to run patrols (propulsion principle, bd mol current, bd close --continue) not WHAT the steps are. Steps come from proto beads.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T12:38:14.388135-08:00","updated_at":"2025-12-24T12:38:14.388135-08:00","dependencies":[{"issue_id":"gt-ingm.4","depends_on_id":"gt-ingm.2","type":"blocks","created_at":"2025-12-24T12:38:24.049212-08:00","created_by":"daemon"}]} {"id":"gt-ingm.5","title":"Standardize bd mol vs gt mol commands","description":"Audit all docs and templates for command usage.\n\nClarify:\n- gt mol = Gas Town wrapper (what does it add?)\n- bd mol = Beads molecule commands (authoritative)\n\nIf gt mol is thin wrapper, consider removing.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:38:15.50826-08:00","updated_at":"2025-12-24T12:38:15.50826-08:00"} {"id":"gt-ingm.6","title":"Remove spawn - use pour/wisp only (see bd-8y9t)","description":"Remove bd mol spawn entirely from vocabulary.\n\nReplace all references with:\n- bd pour \u003cproto\u003e - Create persistent mol (liquid)\n- bd wisp \u003cproto\u003e - Create ephemeral wisp (vapor)\n\n'spawn' doesn't fit the chemistry metaphor. Two phase transitions (pour/wisp) are clearer than one command with flags.\n\nSee bd-XXX for Beads-side removal.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:38:16.595926-08:00","updated_at":"2025-12-24T12:41:01.859024-08:00"} @@ -758,7 +759,7 @@ {"id":"gt-j755","title":"mol-polecat-arm: Add nudge_text variable definition","description":"The mol-polecat-arm formula references `{{nudge_text}}` in the execute step but doesn't define it in the variables section.\n\n## Current variables section\n\n```yaml\nvariables:\n - name: polecat_name\n required: true\n - name: rig\n required: true\n```\n\n## Missing\n\n```yaml\n - name: nudge_text\n required: false\n default: \"How's progress? Need any help?\"\n description: Text to send when nudging the polecat\n```\n\n## Usage in formula\n\n```bash\ntmux send-keys -t gt-{{rig}}-{{polecat_name}} \"{{nudge_text}}\" Enter\n```\n\n## Fix\n\nAdd nudge_text to the variables section with a sensible default.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-24T13:51:29.644259-08:00","updated_at":"2025-12-24T14:05:45.874933-08:00","closed_at":"2025-12-24T14:05:45.874933-08:00","close_reason":"Added nudge_text variable to mol-polecat-arm.formula.yaml"} {"id":"gt-j87","title":"Design: Work flow simulation and validation","description":"Validate GGT designs through simulation before implementation.\n\n## Validation Approaches\n\n### 1. Dry-Run Simulation (Recommended First)\nMayor walks through scenarios mentally/on paper:\n- \"If polecat Toast signals done with dirty git state, what happens?\"\n- \"If Witness context fills mid-verification, what state is lost?\"\n- \"If two polecats try to close same issue, what happens?\"\n\nCreate beads for any gaps discovered.\n\n### 2. Real Work in gastown-py\nUse Python Gas Town to stress-test assumptions:\n- Run actual batch work on test repos\n- Observe edge cases in practice\n- Document issues found\n\n### 3. Edge Case Analysis\nSystematic review of failure modes:\n- Agent crashes mid-operation\n- Network failures during sync\n- Concurrent access to shared state\n- Context limits hit at bad times\n\n## Key Scenarios to Validate\n\n- [ ] Witness session cycling (state preservation)\n- [ ] Polecat decommission with dirty state\n- [ ] Merge conflicts in queue\n- [ ] Beads sync conflicts between workers\n- [ ] Escalation path (stuck worker -\u003e Mayor)\n- [ ] Cross-rig communication\n- [ ] Federation mail routing (future)\n\n## Success Criteria\n\n- No data loss scenarios identified\n- Clear recovery paths for all failure modes\n- Edge cases either handled or documented as limitations\n- Design improves as model cognition improves\n\n## Output\n\nFor each scenario validated:\n1. Document in relevant bead if issue found\n2. Create new beads for missing functionality\n3. Update architecture.md if design changes","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-15T20:24:11.251841-08:00","updated_at":"2025-12-16T17:25:49.858717-08:00"} {"id":"gt-jann","title":"Digest: mol-deacon-patrol","description":"Patrol OK: no mail, 8 polecats working, all witnesses/refineries up","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T00:46:56.992828-08:00","updated_at":"2025-12-23T00:46:56.992828-08:00","closed_at":"2025-12-23T00:46:56.992798-08:00","close_reason":"Squashed from 5 wisps"} -{"id":"gt-janx","title":"Digest: mol-deacon-patrol","description":"Patrol 7","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:30.225414-08:00","updated_at":"2025-12-24T23:08:30.225414-08:00","closed_at":"2025-12-24T23:08:30.225383-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-janx","depends_on_id":"gt-cuo1","type":"parent-child","created_at":"2025-12-24T23:08:30.22606-08:00","created_by":"stevey"}]} +{"id":"gt-janx","title":"Digest: mol-deacon-patrol","description":"Patrol 7","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:30.225414-08:00","updated_at":"2025-12-24T23:08:30.225414-08:00","closed_at":"2025-12-24T23:08:30.225383-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-jgdx","title":"Digest: mol-deacon-patrol","description":"Test patrol cycle - first run, no actual work done","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-22T02:07:03.388821-08:00","updated_at":"2025-12-22T02:07:03.388821-08:00","closed_at":"2025-12-22T02:07:03.388793-08:00","close_reason":"Squashed from 5 wisps"} {"id":"gt-jhsa","title":"Deacon has no rig-level presence - only global gt-deacon","description":"The Deacon patrol role exists only at the global level (~/gt/deacon) but doesn't have per-rig presence like Witness and Refinery.\n\nCurrent structure:\n```\n~/gt/\n├── deacon/ ← Global deacon only\n├── beads/\n│ ├── witness/ ← Per-rig witness\n│ ├── refinery/ ← Per-rig refinery\n│ └── (no deacon) ← Missing\n└── gastown/\n ├── witness/\n ├── refinery/\n └── (no deacon) ← Missing\n```\n\nQuestion: Should Deacon be per-rig like Witness/Refinery, or is global-only intentional?\n\nIf per-rig is needed: Create beads/deacon and gastown/deacon with appropriate CLAUDE.md files.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T20:29:59.121615-08:00","updated_at":"2025-12-23T20:29:59.121615-08:00"} {"id":"gt-jj8q","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:42","description":"Patrol 2: All healthy, no actions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:42:36.066506-08:00","updated_at":"2025-12-24T19:42:36.066506-08:00","closed_at":"2025-12-24T19:42:36.066438-08:00","close_reason":"Squashed from wisp gt-033 (9 issues)"} @@ -769,7 +770,6 @@ {"id":"gt-jqpm","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:23","description":"Patrol 6: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:23:13.766787-08:00","updated_at":"2025-12-24T19:23:13.766787-08:00","closed_at":"2025-12-24T19:23:13.76673-08:00","close_reason":"Squashed from wisp gt-zgk (9 issues)"} {"id":"gt-js27","title":"Digest: mol-deacon-patrol","description":"Patrol #10: Halfway checkpoint","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:23:51.816965-08:00","updated_at":"2025-12-24T22:23:51.816965-08:00","closed_at":"2025-12-24T22:23:51.816935-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-jsup","title":"gt sling: patrol spawning must use wisp storage, not main DB","description":"**P0 Launch Blocker**\n\ngt sling to patrol roles (witness/refinery/deacon) currently spawns patrols into the main beads database instead of wisp storage. This will pollute the permanent database with ephemeral patrol cycles.\n\n**Root cause:**\nspawnMoleculeFromProto() with IsWisp=true uses `--db .beads-wisp/beads.db`, but the patrol TEMPLATE (e.g., gt-qp2w for mol-witness-patrol) only exists in the main database. So bd mol run fails with 'no issue found'.\n\n**The fix:**\nbd mol run needs to support reading the template from the main DB while writing the spawned instance to wisp storage. This is a cross-database spawn operation.\n\nOptions:\n1. Add `--template-db` flag to bd mol run (read template from here, write instance to --db)\n2. Copy template to wisp DB before spawning\n3. Make bd mol run automatically check main DB for templates when using wisp storage\n\n**Workaround applied (MUST REVERT):**\nSet IsWisp=false in slingToWitness/slingToRefinery/slingToDeacon patrol spawning.\n\n**Files:**\n- internal/cmd/sling.go: lines 680, 883, 1050 (IsWisp: false)\n- Needs fix in bd mol run (beads repo)","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-23T16:30:56.128658-08:00","updated_at":"2025-12-23T16:39:04.848671-08:00","closed_at":"2025-12-23T16:39:04.848671-08:00","close_reason":"Fixed by adding cross-database spawning support to bd mol run"} -{"id":"gt-jypn","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-24T20:57:15.132887-08:00","updated_at":"2025-12-24T20:57:15.132887-08:00"} {"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":"closed","priority":1,"issue_type":"task","assignee":"gastown/nux","created_at":"2025-12-22T22:31:31.266716-08:00","updated_at":"2025-12-22T22:55:15.215207-08:00","closed_at":"2025-12-22T22:55:15.215207-08:00","close_reason":"Closed"} {"id":"gt-k08o","title":"test pin fix","status":"closed","priority":2,"issue_type":"task","assignee":"max","created_at":"2025-12-23T12:14:47.293815-08:00","updated_at":"2025-12-25T01:33:01.132043-08:00","closed_at":"2025-12-25T01:33:01.132043-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-k1lr","title":"Consolidate configuration architecture: three-tier model","description":"Rationalize Gas Town's scattered configuration into a clean three-tier model:\n\n## Current Problems\n- Config split across mayor/, .gastown/, and rig/config.json\n- Runtime state mixed with configuration\n- Hidden directories (.gastown/) are missed by agents\n- Category confusion: identity vs config vs runtime state\n\n## Proposed Architecture\n\n### Tier 1: Town Config (mayor/)\n```\nmayor/\n├── town.json # Town identity (unchanged)\n├── rigs.json # Rig registry (unchanged)\n└── config.json # NEW: Town-level configuration\n # theme defaults, daemon settings, etc.\n```\n\n### Tier 2: Town Runtime (.runtime/)\n```\n~/gt/.runtime/ # NEW: Gitignored\n├── daemon.json # {pid, started_at, heartbeat}\n├── deacon.json # {cycle, last_action}\n└── agent-requests.json # Lifecycle requests\n```\n\n### Tier 3: Rig Config (settings/)\n```\n\u003crig\u003e/\n├── config.json # Rig identity only (type, git_url, beads.prefix)\n├── settings/ # NEW: Visible, git-tracked\n│ ├── config.json # theme, merge_queue, max_workers\n│ ├── namepool.json # pool settings (style, max)\n│ └── roles/ # Per-role overrides (optional)\n└── .runtime/ # NEW: Gitignored\n ├── witness.json # {state, started_at, stats}\n ├── refinery.json # {state, started_at, stats}\n └── namepool-state.json # {in_use, overflow_next}\n```\n\n## Key Principles\n1. **Visible \u003e Hidden** for config agents need to find\n2. **Git-tracked** for identity and config; **gitignored** for runtime\n3. **Separation of concerns**: identity, config, runtime are distinct\n4. **Locality**: town config at town root, rig config at rig root\n\n## Migration\n- Move .gastown/ contents to appropriate new locations\n- Update all code that reads/writes these files\n- Update .gitignore patterns\n- Update documentation (architecture.md, CLAUDE.md)\n","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-22T01:01:48.96788-08:00","updated_at":"2025-12-22T01:33:05.853643-08:00","closed_at":"2025-12-22T01:33:05.853643-08:00","close_reason":"All 8 tasks complete: config architecture migrated to three-tier model"} @@ -784,7 +784,7 @@ {"id":"gt-k2aj","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 0 mail, Mayor+2 witnesses+2 refineries healthy, 3 polecats working (gastown), no orphans, gc N/A","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-22T20:40:02.581522-08:00","updated_at":"2025-12-22T20:40:02.581522-08:00","closed_at":"2025-12-22T20:40:02.581496-08:00","close_reason":"Squashed from 5 wisps"} {"id":"gt-k7x0","title":"Merge: gt-h5n.5","description":"branch: polecat/Scabrous\ntarget: main\nsource_issue: gt-h5n.5\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:42.318338-08:00","updated_at":"2025-12-19T14:54:35.021214-08:00","closed_at":"2025-12-19T14:54:35.021214-08:00"} {"id":"gt-kabx","title":"Build context self-check into patrol molecules","description":"Patrol molecules (witness-patrol, refinery-patrol, deacon-patrol) should have\nexplicit context self-check as part of each cycle:\n\nAfter each patrol cycle step:\n- Self-assess context pressure\n- If high: complete current step, then initiate handoff\n- If OK: continue to next cycle\n\nThis could be:\n1. Explicit step in molecule: 'context-check'\n2. Guidance in step instructions: 'Before continuing, assess context...'\n3. Protocol baked into the patrol loop description\n\nThe key is making it unavoidable - not optional guidance that gets ignored.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:46:57.067465-08:00","updated_at":"2025-12-23T01:46:57.067465-08:00"} -{"id":"gt-kaue","title":"Digest: mol-deacon-patrol","description":"Patrol #11: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:25.611316-08:00","updated_at":"2025-12-24T23:33:25.611316-08:00","closed_at":"2025-12-24T23:33:25.611287-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-kaue","depends_on_id":"gt-zmxc","type":"parent-child","created_at":"2025-12-24T23:33:25.611977-08:00","created_by":"stevey"}]} +{"id":"gt-kaue","title":"Digest: mol-deacon-patrol","description":"Patrol #11: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:25.611316-08:00","updated_at":"2025-12-24T23:33:25.611316-08:00","closed_at":"2025-12-24T23:33:25.611287-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-kcee","title":"Witness commands: gt witness start/stop/status needed","description":"## Summary\n\nNo `gt witness` command exists. The witness should:\n- Monitor polecats for stuck/idle state\n- Nudge polecats that seem blocked\n- Report status to mayor\n- Handle polecat lifecycle\n\n## Expected Commands\n\n```bash\ngt witness start gastown # Start witness for rig\ngt witness stop gastown # Stop witness\ngt witness status # Show witness status\n```\n\n## Current State\n\n- Witness directory exists: /Users/stevey/gt/gastown/witness/\n- Has state.json but no active process\n- gt status shows 'Witnesses: 0'\n\n## Context\n\nFull polecat flow needs witness monitoring for production use.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-18T21:55:24.079671-08:00","updated_at":"2025-12-19T01:33:49.856942-08:00","closed_at":"2025-12-19T01:33:49.856942-08:00"} {"id":"gt-kcy0","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, no lifecycle requests, no orphans remediated","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:34:16.947195-08:00","updated_at":"2025-12-24T22:34:16.947195-08:00","closed_at":"2025-12-24T22:34:16.947164-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-kgk5","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T12:46:15.710782-08:00","updated_at":"2025-12-25T01:33:00.664663-08:00","closed_at":"2025-12-25T01:33:00.664663-08:00","close_reason":"Test pollution cleanup"} @@ -793,7 +793,7 @@ {"id":"gt-kjnt","title":"Polecat Mood Plugin (standard)","description":"Standard witness plugin molecule that assesses polecat emotional state.\n\n## Molecule Definition\n\n```json\n{\n \"id\": \"mol-polecat-mood\",\n \"title\": \"Assess mood for {{polecat_name}}\",\n \"description\": \"Analyze captured output and determine emotional state.\\n\\nVars:\\n- {{polecat_name}} - The polecat to assess\\n- {{captured_output}} - Recent tmux capture\\n\\nOutput: gt polecat mood {{polecat_name}} \u003cemoji\u003e\",\n \"labels\": [\"template\", \"plugin\", \"witness\", \"tier:haiku\"],\n \"issue_type\": \"task\"\n}\n```\n\n## Mood Emojis\n\n```\n😺 working Active tool calls, making progress\n😸 productive Completing tasks, tests passing\n🐱 idle Waiting at prompt, no recent activity\n😼 confident Self-reviewing, about to submit\n😿 struggling Repeated errors, test failures\n🙀 stuck No progress for 10+ min\n😽 done Work complete, requesting shutdown\n😾 blocked Explicitly waiting on dependency\n```\n\n## Bonding\n\nDuring witness patrol plugin-run step:\n\n```bash\nbd mol bond mol-polecat-mood $PATROL_WISP \\\n --ref mood-{{polecat_name}} \\\n --var polecat_name=ace \\\n --var captured_output=\"$TMUX_CAPTURE\"\n```\n\n## Installation\n\n```bash\nbd mol install mol-polecat-mood # From Mol Mall\n```\n\n## Customization\n\nFork the molecule and modify description to change assessment criteria or add custom moods. Install your fork to override.","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-21T16:17:12.841134-08:00","updated_at":"2025-12-23T05:07:39.495061-08:00","dependencies":[{"issue_id":"gt-kjnt","depends_on_id":"gt-u818","type":"blocks","created_at":"2025-12-21T16:17:20.444775-08:00","created_by":"daemon"}]} {"id":"gt-kktj","title":"Patrol agent state.json not updated on activity","description":"Witness and Refinery state.json files show last_active from Dec 19 even though sessions have been running. The state should update each patrol cycle.\n\nEvidence:\n```\n$ cat beads/witness/state.json\n{\"role\": \"witness\", \"last_active\": \"2025-12-19T17:50:00Z\"}\n\n$ cat beads/refinery/state.json \n{\"role\": \"refinery\", \"last_active\": \"2025-12-19T17:50:00Z\"}\n```\n\nExpected: last_active should update each time the agent runs a patrol cycle.\n\nImpact: Can't tell if patrol agents are actually active vs just having an open tmux session.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-23T20:29:58.515591-08:00","updated_at":"2025-12-23T20:29:58.515591-08:00"} {"id":"gt-kl5e","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:36:01.786393-08:00","updated_at":"2025-12-24T22:36:01.786393-08:00","closed_at":"2025-12-24T22:36:01.786359-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-kmc7","title":"Digest: mol-deacon-patrol","description":"Patrol 2: Quick scan, no changes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:05:53.201478-08:00","updated_at":"2025-12-24T23:05:53.201478-08:00","closed_at":"2025-12-24T23:05:53.201451-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-kmc7","depends_on_id":"gt-z674","type":"parent-child","created_at":"2025-12-24T23:05:53.202102-08:00","created_by":"stevey"}]} +{"id":"gt-kmc7","title":"Digest: mol-deacon-patrol","description":"Patrol 2: Quick scan, no changes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:05:53.201478-08:00","updated_at":"2025-12-24T23:05:53.201478-08:00","closed_at":"2025-12-24T23:05:53.201451-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-kmn","title":"Batch Work System: Integration branch, merge queue, landing","description":"## Overview\n\nThis epic tracks batch work coordination in GGT. Key insight: **work is a stream, not discrete swarms**.\n\nThere are no \"swarm IDs\" - the epic IS the grouping, the merge queue IS the coordination. \"Swarming an epic\" is colloquial for spawning multiple workers on its children.\n\n## Architecture\n\n- **Epics** group related work\n- **Issues** are individual tasks \n- **Dependencies** encode ordering (multi-wave emerges automatically)\n- **Merge queue** coordinates completed work\n- **Workers** process issues independently\n\nSee Key Decision #11 in docs/architecture.md: \"Work is a Stream (No Swarm IDs)\"\n\n## What This Epic Covers\n\n1. Integration branch management for batch merges\n2. Refinery semantic merge processing\n3. Witness landing protocol (cleanup)\n4. Report generation (epic-based, not swarm-ID-based)\n5. Git safety auditing\n6. Work reconciliation\n\n## What Was Removed\n\n- Swarm IDs (sw-1, sw-2, etc.)\n- Per-swarm directories (.gastown/swarms/\u003cid\u003e/)\n- Swarm manifest/state/events files\n- swarm-started/swarm-landed beads\n\nThese were redundant - beads already provides hierarchy, status, dependencies, and history.\n\n## References\n\n- Architecture: docs/architecture.md (Key Decision #11, Multi-Wave Work Processing)\n- PGT: swarm/manager.py, swarm/landing.py (behavioral reference, but ignore swarm ID patterns)","status":"closed","priority":0,"issue_type":"epic","created_at":"2025-12-16T00:08:15.339127-08:00","updated_at":"2025-12-25T02:16:00.322691-08:00","closed_at":"2025-12-25T02:16:00.322691-08:00","close_reason":"Swarm concept abandoned (7 tombstones). Core batch work now handled by merge queue (gt-h5n). Remaining items are enhancements."} {"id":"gt-kmn.1","title":"Swarm package: Swarm, SwarmTask, SwarmState types","description":"Define core swarm types.\n\n## Types (in `internal/swarm/`)\n\n```go\n// SwarmState represents swarm lifecycle\ntype SwarmState string\nconst (\n SwarmCreated SwarmState = \"created\"\n SwarmActive SwarmState = \"active\"\n SwarmMerging SwarmState = \"merging\"\n SwarmLanded SwarmState = \"landed\"\n SwarmFailed SwarmState = \"failed\"\n SwarmCancelled SwarmState = \"cancelled\"\n)\n\n// Swarm references a beads epic that tracks swarm work\ntype Swarm struct {\n ID string // matches beads epic ID\n RigName string\n EpicID string // beads epic tracking this swarm\n BaseCommit string // git SHA all workers branch from\n Integration string // integration branch name\n State SwarmState\n CreatedAt time.Time\n Workers []string // polecat names assigned\n}\n\n// SwarmTask represents a single task in the swarm (maps to beads issue)\ntype SwarmTask struct {\n IssueID string // beads issue ID\n Assignee string // polecat name\n Branch string // worker branch name\n State string // mirrors beads status\n}\n```\n\n## Note\n\nSwarm state is primarily stored IN beads. These types are in-memory representations for the SwarmManager to work with. No separate manifest.json files.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-16T00:08:30.364047-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-kmn.1","depends_on_id":"gt-kmn","type":"parent-child","created_at":"2025-12-16T00:08:30.364431-08:00","created_by":"daemon"},{"issue_id":"gt-kmn.1","depends_on_id":"gt-u1j.1","type":"blocks","created_at":"2025-12-16T00:11:20.646487-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-kmn.10","title":"Batch work landing report generation","description":"Generate reports on batch work completion.\n\n## Trigger\n\nWhen all children of an epic are closed, generate a completion report.\n\n## Report Contents\n\n- Epic metadata (ID, title, created by, duration)\n- Task summary (completed counts, timing)\n- Per-task details (issue, assignee, time taken)\n- Git stats (commits merged, lines changed)\n- Cleanup stats (branches deleted)\n\n## Output Locations\n\n1. Mail to Mayor - summary report\n2. Optional: save to file with --save flag\n\n## Command\n\n```bash\ngt report --epic \u003cepic-id\u003e [--save report.md]\n```\n\n## Format\n\nMarkdown with sections:\n- Summary\n- Tasks\n- Workers\n- Timeline\n\n## Note\n\nThis replaces the swarm-based reporting (gt-662). Reports are generated from epic/issue data, not from separate swarm state files.\n\n## Reference\n\nPGT: swarm/report.py (for format ideas, ignore swarm ID patterns)","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-16T00:10:23.242931-08:00","updated_at":"2025-12-16T17:26:27.99208-08:00","dependencies":[{"issue_id":"gt-kmn.10","depends_on_id":"gt-kmn","type":"parent-child","created_at":"2025-12-16T00:10:23.243287-08:00","created_by":"daemon"}]} @@ -817,7 +817,7 @@ {"id":"gt-ksrt.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-ksrt\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T16:16:46.436616-08:00","updated_at":"2025-12-24T16:16:46.609161-08:00","closed_at":"2025-12-24T16:16:46.609161-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-ksrt.1","depends_on_id":"gt-ksrt","type":"parent-child","created_at":"2025-12-24T16:16:46.437094-08:00","created_by":"daemon"}]} {"id":"gt-ktal","title":"Epic: Refinery Engineer Autonomy","description":"Make Refinery Engineer fully autonomous:\n\n## Goal\nRefinery can run indefinitely, processing all polecat work through merge queue, cycling sessions as needed, without human intervention.\n\n## Key Components\n1. Role prompting (CLAUDE.md, templates)\n2. Handoff mechanism (pinned beads)\n3. Context detection (gt prime)\n4. Communication protocol (Witness, Deacon)\n5. Future: Merge orchestration plugins\n\n## Success Criteria\n- Refinery starts, reads handoff, knows what to do\n- Processes merges sequentially with conflict resolution\n- Cycles sessions cleanly via Deacon\n- Communicates results to Witness\n- No work left behind","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-19T18:09:30.84543-08:00","updated_at":"2025-12-19T18:09:30.84543-08:00"} {"id":"gt-ktf3","title":"bd ready --type: missing type filter for MQ integration","description":"bd ready lacks --type flag that engineer.go expects.\n\n## Code (internal/refinery/engineer.go)\nreadyMRs, err := e.beads.ReadyWithType(\"merge-request\")\n\n## Actual bd ready\nNo --type flag - only supports assignee, label, priority filters.\n\n## Impact\nRefinery can't find merge-requests in queue, so MQ doesn't process anything.\n\n## Fix Options\n1. Add --type flag to bd ready\n2. Use bd list --type=merge-request --status=open instead\n3. Both (ready filters for unblocked, list for all)\n\nThis is blocking the entire MQ pipeline.","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-19T14:57:16.297847-08:00","updated_at":"2025-12-19T15:04:17.322508-08:00","closed_at":"2025-12-19T15:04:17.322508-08:00"} -{"id":"gt-ku1y","title":"Digest: mol-deacon-patrol","description":"Patrol 13","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:00.990435-08:00","updated_at":"2025-12-24T23:10:00.990435-08:00","closed_at":"2025-12-24T23:10:00.990401-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-ku1y","depends_on_id":"gt-omyh","type":"parent-child","created_at":"2025-12-24T23:10:00.991118-08:00","created_by":"stevey"}]} +{"id":"gt-ku1y","title":"Digest: mol-deacon-patrol","description":"Patrol 13","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:00.990435-08:00","updated_at":"2025-12-24T23:10:00.990435-08:00","closed_at":"2025-12-24T23:10:00.990401-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-kut","title":"Test message","description":"Testing GGT mail system","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-17T16:12:11.437529-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"} {"id":"gt-l1o","title":"Harness \u0026 Priming: Document architecture and update all role contexts","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-17T16:42:29.314113-08:00","updated_at":"2025-12-19T12:00:51.410053-08:00","closed_at":"2025-12-19T12:00:51.410053-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":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T01:53:37.31087-08:00","updated_at":"2025-12-25T01:53:37.31087-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"}]} @@ -829,7 +829,7 @@ {"id":"gt-ldk8","title":"Witness should verify polecat submitted before stopping session","description":"## Problem\n\nWitness stopped dementus's session before it could call `gt done`, losing the MR submission. I had to manually push and submit the branch.\n\n## Root Cause\n\nWitness cleanup is triggered by nudge/manual check rather than by receiving POLECAT_DONE message. When Witness cleans up based on issue status (closed), it doesn't wait for the polecat to complete its shutdown sequence.\n\n## Expected Behavior\n\nWitness should only stop a polecat session after:\n1. Receiving POLECAT_DONE message from that polecat, OR\n2. Timeout waiting for POLECAT_DONE after issue is closed\n\n## Current Behavior\n\nWitness stops sessions immediately when asked to check for completions, even if polecat hasn't called `gt done` yet.\n\n## Fix\n\nIn mol-witness-patrol inbox-check step:\n- Only clean up polecats that have sent POLECAT_DONE\n- For polecats with closed issues but no DONE message, nudge them to complete\n- Add timeout before force-killing","status":"closed","priority":1,"issue_type":"bug","assignee":"gastown/nux","created_at":"2025-12-22T23:54:12.969528-08:00","updated_at":"2025-12-23T01:16:16.794303-08:00","closed_at":"2025-12-23T01:16:16.794303-08:00","close_reason":"Merged to main"} {"id":"gt-le1a","title":"Merge: gt-3x1","description":"branch: polecat/Slit\ntarget: main\nsource_issue: gt-3x1\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:47.674479-08:00","updated_at":"2025-12-19T18:30:24.050697-08:00","closed_at":"2025-12-19T18:30:24.0507-08:00"} {"id":"gt-lek6","title":"gt rig reset --stale: Clear orphaned in_progress items","description":"Reset in_progress issues when their assigned agent no longer exists.\n\n## Problem\nWhen polecats die without cleanup, their issues remain in_progress forever.\nNeed a way to bulk-reset these orphaned items.\n\n## Command\n```bash\ngt rig reset --stale [--dry-run]\n```\n\n## Logic\nFor each in_progress issue in rig:\n1. Parse assignee (e.g., \"gastown/furiosa\")\n2. Map to tmux session name (gt-gastown-furiosa)\n3. If session does NOT exist:\n - Reset status to \"open\"\n - Clear assignee\n4. Exception: skip crew/* assignees (persistent identities)\n OR check if crew tmux session exists\n\n## Output\n```\nResetting stale work in gastown:\n gt-abc: gastown/furiosa (no session) → open\n gt-def: gastown/nux (no session) → open\n Skipped: gt-xyz: gastown/crew/max (persistent)\nReset 2 issues, skipped 1\n```\n\n## Related\n- gt-2kz: CLI cleanup commands for stale state\n- gt-rdmw: orphan-check in deacon patrol\n- gt-orphans command (list orphaned molecules)","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-21T21:33:46.962413-08:00","updated_at":"2025-12-22T15:16:22.295127-08:00","closed_at":"2025-12-22T15:16:22.295127-08:00","close_reason":"Implemented --stale flag for gt rig reset with dry-run support"} -{"id":"gt-lf7c8","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final patrol, handing off","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:06:01.256064-08:00","updated_at":"2025-12-25T00:06:01.256064-08:00","closed_at":"2025-12-25T00:06:01.25603-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-lf7c8","depends_on_id":"gt-d48pq","type":"parent-child","created_at":"2025-12-25T00:06:01.256852-08:00","created_by":"stevey"}]} +{"id":"gt-lf7c8","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final patrol, handing off","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:06:01.256064-08:00","updated_at":"2025-12-25T00:06:01.256064-08:00","closed_at":"2025-12-25T00:06:01.25603-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-lg66","title":"Mail should use wisps for ephemeral orchestration messages","description":"## Problem\n\nTown HQ beads are polluted with lifecycle orchestration messages:\n- POLECAT_STARTED notifications\n- Work assignments to polecats\n- \"Start work\" nudges\n- Test messages\n\nThese should never have been persistent beads. They accumulate forever.\n\n## Analysis\n\nMail serves two purposes:\n1. **Durable messages** - Handoffs, escalations, human-agent comms (need persistence)\n2. **Ephemeral signals** - Lifecycle pings, work assignments, nudges (should be wisps)\n\n## Options\n\n### Option A: Dual-inbox architecture\n- `gt mail inbox` checks both `.beads/` and `.beads-wisp/`\n- Sender specifies `--ephemeral` flag for transient messages\n- Ephemeral messages auto-expire or squash to digests\n\n### Option B: All mail becomes wisps\n- Default to wisp storage for all mail\n- Important messages explicitly promoted to persistent\n- Simpler model but loses audit trail for some messages\n\n### Option C: Message type determines storage\n- `message` type beads go to wisps by default\n- `handoff` type stays persistent\n- Automatic routing based on content\n\n## Recommendation\n\nOption A (dual-inbox) seems cleanest:\n- Explicit control via `--ephemeral`\n- Backwards compatible\n- Clear mental model\n\n## Acceptance Criteria\n\n- Lifecycle pings (POLECAT_STARTED, etc.) go to wisps\n- Work assignments go to wisps\n- Handoffs stay persistent\n- `gt mail inbox` shows both\n- Wisps auto-cleanup on patrol squash\n\n## Blocks\n\nThis blocks reliable swarm operations - every spawn pollutes HQ indefinitely.","status":"closed","priority":0,"issue_type":"feature","created_at":"2025-12-24T19:17:43.874045-08:00","updated_at":"2025-12-24T20:03:43.305367-08:00","closed_at":"2025-12-24T20:03:43.305367-08:00","close_reason":"Implemented dual-inbox architecture: ephemeral messages go to wisps, lifecycle messages auto-detect"} {"id":"gt-ljow","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:43","description":"Patrol 4: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:43:45.317294-08:00","updated_at":"2025-12-24T19:43:45.317294-08:00","closed_at":"2025-12-24T19:43:45.317226-08:00","close_reason":"Squashed from wisp gt-6ix (9 issues)"} {"id":"gt-lnji","title":"gt polecat git-state command for pre-kill verification","description":"Add git-state subcommand to gt polecat for Witness pre-kill verification.\n\n## Usage\n```bash\ngt polecat git-state \u003crig\u003e/\u003cpolecat\u003e\n```\n\n## Output\n```\nGit State: gastown/furiosa\n\n Working Tree: clean | dirty\n Uncommitted: 0 files | N files (list)\n Unpushed: 0 commits | N commits ahead\n Stashes: 0 | N stashes\n\n Verdict: CLEAN (safe to kill) | DIRTY (needs cleanup)\n```\n\n## JSON output (--json flag)\n```json\n{\n \"clean\": true,\n \"uncommitted_files\": [],\n \"unpushed_commits\": 0,\n \"stash_count\": 0\n}\n```\n\n## Used by\n- Witness pre-kill verification (mol-witness-patrol)\n- Manual cleanup checks\n\n## Implementation\n- Check git status in polecat worktree\n- Check git log origin/main..HEAD\n- Check git stash list","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/nux","created_at":"2025-12-22T16:43:10.035052-08:00","updated_at":"2025-12-22T23:35:06.34384-08:00","closed_at":"2025-12-22T23:35:06.34384-08:00","close_reason":"Implemented gt polecat git-state command for pre-kill verification"} @@ -837,8 +837,8 @@ {"id":"gt-lom0","title":"Digest: mol-deacon-patrol","description":"Patrol 20: OK - Handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:02:40.085741-08:00","updated_at":"2025-12-24T21:02:40.085741-08:00","closed_at":"2025-12-24T21:02:40.085706-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-lpki","title":"test message","status":"closed","priority":2,"issue_type":"message","created_at":"2025-12-20T17:41:51.652131-08:00","updated_at":"2025-12-25T01:33:01.214326-08:00","closed_at":"2025-12-25T01:33:01.214326-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-lqgf","title":"burn-or-loop","description":"Squash wisp and decide: loop or cycle session.\n\nIf context low: spawn new wisp and loop\nIf context high: handoff and request cycle\n\nNeeds: generate-summary","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.505125-08:00","updated_at":"2025-12-23T04:39:39.670609-08:00","closed_at":"2025-12-23T04:39:39.670609-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","dependencies":[{"issue_id":"gt-lqgf","depends_on_id":"gt-751s","type":"parent-child","created_at":"2025-12-23T01:41:54.514929-08:00","created_by":"stevey"},{"issue_id":"gt-lqgf","depends_on_id":"gt-g261","type":"blocks","created_at":"2025-12-23T01:41:54.521716-08:00","created_by":"stevey"}]} -{"id":"gt-luo74","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:35:53.856168-08:00","updated_at":"2025-12-25T00:35:53.856168-08:00","closed_at":"2025-12-25T00:35:53.856137-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-luo74","depends_on_id":"gt-2lhy7","type":"parent-child","created_at":"2025-12-25T00:35:53.856967-08:00","created_by":"stevey"}]} -{"id":"gt-lve0","title":"Digest: mol-deacon-patrol","description":"Patrol #2: All healthy, no changes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:29:43.926838-08:00","updated_at":"2025-12-24T23:29:43.926838-08:00","closed_at":"2025-12-24T23:29:43.926802-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-lve0","depends_on_id":"gt-75z8","type":"parent-child","created_at":"2025-12-24T23:29:43.927533-08:00","created_by":"stevey"}]} +{"id":"gt-luo74","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:35:53.856168-08:00","updated_at":"2025-12-25T00:35:53.856168-08:00","closed_at":"2025-12-25T00:35:53.856137-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-lve0","title":"Digest: mol-deacon-patrol","description":"Patrol #2: All healthy, no changes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:29:43.926838-08:00","updated_at":"2025-12-24T23:29:43.926838-08:00","closed_at":"2025-12-24T23:29:43.926802-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-lwuu","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- {{issue}} - The source issue ID being worked on","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-21T21:47:15.553926-08:00","updated_at":"2025-12-21T21:47:15.553926-08:00","labels":["template"]} {"id":"gt-lwuu.1","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue ({{issue}}) and understand the requirements.\nIdentify any blockers or missing information.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-21T21:47:23.880531-08:00","updated_at":"2025-12-21T21:47:23.880531-08:00","labels":["template"],"dependencies":[{"issue_id":"gt-lwuu.1","depends_on_id":"gt-lwuu","type":"parent-child","created_at":"2025-12-21T21:47:23.882049-08:00","created_by":"daemon"}]} {"id":"gt-lwuu.2","title":"implement","description":"Implement the solution for {{issue}}. 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":"open","priority":2,"issue_type":"task","created_at":"2025-12-21T21:47:46.876765-08:00","updated_at":"2025-12-21T21:47:46.876765-08:00","labels":["template"],"dependencies":[{"issue_id":"gt-lwuu.2","depends_on_id":"gt-lwuu","type":"parent-child","created_at":"2025-12-21T21:47:46.878332-08:00","created_by":"daemon"},{"issue_id":"gt-lwuu.2","depends_on_id":"gt-lwuu.1","type":"blocks","created_at":"2025-12-21T21:48:04.4865-08:00","created_by":"daemon"}]} @@ -857,10 +857,10 @@ {"id":"gt-md2rg","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:14.237475-08:00","updated_at":"2025-12-25T02:11:14.63729-08:00","closed_at":"2025-12-25T02:11:14.63729-08:00","close_reason":"Closed"} {"id":"gt-md2rg.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-md2rg\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:14.340033-08:00","updated_at":"2025-12-25T02:11:14.533784-08:00","closed_at":"2025-12-25T02:11:14.533784-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-md2rg.1","depends_on_id":"gt-md2rg","type":"parent-child","created_at":"2025-12-25T02:11:14.340492-08:00","created_by":"daemon"}]} {"id":"gt-mdgt8","title":"Convert formula files from YAML to JSON","description":"Formulas currently use .formula.yaml but the project avoids YAML. Convert to .formula.json for consistency with the rest of the codebase. This blocks implementing compose operators (advice, expand, etc.) since the schema needs to be right first.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-25T01:23:06.149396-08:00","updated_at":"2025-12-25T01:47:23.273434-08:00","closed_at":"2025-12-25T01:47:23.273434-08:00","close_reason":"Converted all 9 formula files from YAML to JSON"} -{"id":"gt-mfatq","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:52:57.848245-08:00","updated_at":"2025-12-24T23:52:57.848245-08:00","closed_at":"2025-12-24T23:52:57.848212-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-mfatq","depends_on_id":"gt-1ecij","type":"parent-child","created_at":"2025-12-24T23:52:57.848946-08:00","created_by":"stevey"}]} +{"id":"gt-mfatq","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:52:57.848245-08:00","updated_at":"2025-12-24T23:52:57.848245-08:00","closed_at":"2025-12-24T23:52:57.848212-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-mh5s","title":"Refinery gates: test/lint/build before merge","description":"Before merging polecat work to main, run configurable quality gates.\n\n**From VC**: internal/gates/ - parallel execution with timeout, any failure = overall failure.\n\n**Gas Town implementation**: Refinery config with gate commands:\n```yaml\ngates:\n test:\n cmd: go test ./...\n timeout: 5m\n lint:\n cmd: golangci-lint run\n timeout: 2m\n build:\n cmd: go build ./...\n timeout: 3m\nparallel: true\n```\n\nIf gates fail, don't merge. Polecat can iterate and retry.\n\n**Value**: Prevents broken code from reaching main. VC had 90.9% gate pass rate.\n\n**VC complexity**: ~200 lines Go\n**Gas Town complexity**: ~10 lines YAML","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-20T20:30:12.44681-08:00","updated_at":"2025-12-20T20:30:12.44681-08:00","dependencies":[{"issue_id":"gt-mh5s","depends_on_id":"gt-zhpa","type":"parent-child","created_at":"2025-12-20T20:30:27.402708-08:00","created_by":"daemon"}]} {"id":"gt-mjso","title":"Merge: gt-rixa","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-rixa\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-21T14:09:26.367745-08:00","updated_at":"2025-12-21T17:20:27.506572-08:00","closed_at":"2025-12-21T17:20:27.506572-08:00","close_reason":"ORPHANED: Branch never pushed, worktree deleted"} -{"id":"gt-mkdb","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:41.689195-08:00","updated_at":"2025-12-24T22:38:41.689195-08:00","closed_at":"2025-12-24T22:38:41.689155-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-mkdb","depends_on_id":"gt-50bb","type":"parent-child","created_at":"2025-12-24T22:38:41.689904-08:00","created_by":"stevey"}]} +{"id":"gt-mkdb","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:41.689195-08:00","updated_at":"2025-12-24T22:38:41.689195-08:00","closed_at":"2025-12-24T22:38:41.689155-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-mmbh","title":"Fix out-of-sync molecule test expectations","description":"Tests in builtin_molecules_test.go have hardcoded expectations that no longer match actual molecules:\n- TestBuiltinMolecules: expects 9 molecules, got 11\n- TestPolecatWorkMolecule: step refs out of sync\n- TestDeaconPatrolMolecule: step count and refs out of sync\n\nThis is pre-existing on main, not introduced by any polecat work.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-22T22:20:38.8105-08:00","updated_at":"2025-12-22T23:49:28.405487-08:00","closed_at":"2025-12-22T23:49:28.405487-08:00","close_reason":"Merged to main - tests now pass"} {"id":"gt-mqbm","title":"Digest: mol-deacon-patrol","description":"Patrol: TRACER BULLET SUCCESS - gt-oiv0 merged to main, furiosa completed and exited cleanly, 0 polecats now, all agents up","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-22T23:13:30.087307-08:00","updated_at":"2025-12-22T23:13:30.087307-08:00","closed_at":"2025-12-22T23:13:30.087271-08:00","close_reason":"Squashed from 5 wisps"} {"id":"gt-mtj4","title":"Digest: mol-deacon-patrol","description":"Patrol 11: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:59:34.040451-08:00","updated_at":"2025-12-24T20:59:34.040451-08:00","closed_at":"2025-12-24T20:59:34.040423-08:00","close_reason":"Squashed from 8 wisps"} @@ -883,7 +883,7 @@ {"id":"gt-n8s1.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-n8s1\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:06:13.827065-08:00","updated_at":"2025-12-23T22:06:14.00142-08:00","closed_at":"2025-12-23T22:06:14.00142-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-n8s1.1","depends_on_id":"gt-n8s1","type":"parent-child","created_at":"2025-12-23T22:06:13.827585-08:00","created_by":"daemon"}]} {"id":"gt-n8u5","title":"bd list --parent: filter by parent issue","description":"Add --parent flag to bd list to filter issues by parent.\n\nExample:\n```bash\nbd list --parent=gt-h5n --status=open\n```\n\nWould show all open children of gt-h5n.\n\nUseful for:\n- Checking epic progress\n- Finding swarmable work within an epic\n- Molecule step listing","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-23T01:50:56.224031-08:00","updated_at":"2025-12-23T01:51:24.337084-08:00","closed_at":"2025-12-23T01:51:24.337084-08:00","close_reason":"Moving to beads rig"} {"id":"gt-n9o2","title":"save-state","description":"Update handoff bead with new state.\n\nPersist nudge counts and pending actions.\n\nNeeds: execute-actions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.507176-08:00","updated_at":"2025-12-23T04:39:39.677727-08:00","closed_at":"2025-12-23T04:39:39.677727-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","dependencies":[{"issue_id":"gt-n9o2","depends_on_id":"gt-751s","type":"parent-child","created_at":"2025-12-23T01:41:54.612922-08:00","created_by":"stevey"}]} -{"id":"gt-na6o2","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no messages, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:58:44.4382-08:00","updated_at":"2025-12-24T23:58:44.4382-08:00","closed_at":"2025-12-24T23:58:44.438166-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-na6o2","depends_on_id":"gt-0d2ql","type":"parent-child","created_at":"2025-12-24T23:58:44.438917-08:00","created_by":"stevey"}]} +{"id":"gt-na6o2","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no messages, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:58:44.4382-08:00","updated_at":"2025-12-24T23:58:44.4382-08:00","closed_at":"2025-12-24T23:58:44.438166-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-na7y","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:40:58.973379-08:00","updated_at":"2025-12-25T01:33:00.502546-08:00","closed_at":"2025-12-25T01:33:00.502546-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-na7y.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-na7y\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:40:59.065447-08:00","updated_at":"2025-12-24T20:40:59.246697-08:00","closed_at":"2025-12-24T20:40:59.246697-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-na7y.1","depends_on_id":"gt-na7y","type":"parent-child","created_at":"2025-12-24T20:40:59.065921-08:00","created_by":"daemon"}]} {"id":"gt-nam3","title":"Update docs to reflect molecule-first paradigm","description":"Gas Town is fundamentally a molecule execution engine. Documentation should reflect this more clearly.\n\n## Issues Found\n\n### 1. gt spawn examples show molecule as optional\nREADME.md line 116: `gt spawn --issue \u003cid\u003e # Start polecat on issue`\nShould emphasize: polecats execute molecules, not just issues.\n\n### 2. Architecture.md spawn examples inconsistent\nLine 344 shows molecule: `gt spawn --issue gt-xyz --molecule mol-engineer-in-box`\nLine 1434 shows without: `gt spawn --issue \u003cid\u003e`\n\n### 3. Config vs molecule distinction not clear\noutposts.yaml shows static policy - should note when molecules apply.\n\n### 4. Operational molecules section is good but buried\nLines 430-566 cover operational molecules well. Should be more prominent.\n\n## Updates Needed\n- [ ] README: Update spawn examples to show molecule usage\n- [ ] architecture.md: Ensure all spawn examples include molecules\n- [ ] architecture.md: Add section on \"when config vs molecule\"\n- [ ] architecture.md: Move operational molecules higher in document\n- [ ] Add principle: \"If it requires cognition, it's a molecule\"\n- [ ] federation-design.md: Note that policy can escalate to mol-outpost-assign\n\n## Key Message\nGas Town doesn't spawn workers on issues. It spawns workers on molecules.\nThe issue is just the seed data for the molecule execution.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T03:26:31.842406-08:00","updated_at":"2025-12-20T09:26:21.813833-08:00","closed_at":"2025-12-20T09:26:21.813833-08:00"} @@ -910,7 +910,7 @@ {"id":"gt-nvql","title":"max Handoff","status":"pinned","priority":2,"issue_type":"task","created_at":"2025-12-23T11:47:59.020501-08:00","updated_at":"2025-12-24T17:38:29.511168-08:00"} {"id":"gt-nxea","title":"Digest: mol-deacon-patrol","description":"Patrol #3: Routine - 6 agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:16:10.287785-08:00","updated_at":"2025-12-24T22:16:10.287785-08:00","closed_at":"2025-12-24T22:16:10.287751-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-nz6t","title":"Remove unused style helper functions","description":"internal/style/style.go defines RenderSuccess, RenderWarning, RenderError, and RenderInfo helper functions that are never used. Code uses style.Success.Render() directly instead. Either use the helpers consistently or remove them.","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-21T21:34:43.822193-08:00","updated_at":"2025-12-21T21:50:45.224202-08:00","closed_at":"2025-12-21T21:50:45.224202-08:00","close_reason":"Removed 4 unused style helper functions (RenderSuccess, RenderWarning, RenderError, RenderInfo)"} -{"id":"gt-o0ooa","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:00:14.192253-08:00","updated_at":"2025-12-25T00:00:14.192253-08:00","closed_at":"2025-12-25T00:00:14.192222-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-o0ooa","depends_on_id":"gt-8kjpd","type":"parent-child","created_at":"2025-12-25T00:00:14.192943-08:00","created_by":"stevey"}]} +{"id":"gt-o0ooa","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:00:14.192253-08:00","updated_at":"2025-12-25T00:00:14.192253-08:00","closed_at":"2025-12-25T00:00:14.192222-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-o29j","title":"inspect-workers","description":"Capture output for each working polecat.\n\n```bash\ngt peek \u003crig\u003e/\u003cpolecat\u003e\n```\n\nNeeds: survey-workers","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.506324-08:00","updated_at":"2025-12-23T04:39:39.684381-08:00","closed_at":"2025-12-23T04:39:39.684381-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","dependencies":[{"issue_id":"gt-o29j","depends_on_id":"gt-751s","type":"parent-child","created_at":"2025-12-23T01:41:54.56996-08:00","created_by":"stevey"},{"issue_id":"gt-o29j","depends_on_id":"gt-ep7f","type":"blocks","created_at":"2025-12-23T01:41:54.577076-08:00","created_by":"stevey"}]} {"id":"gt-o3is","title":"gt sling pinToHook doesn't set pinned boolean field","description":"## Updated Root Cause Analysis (2025-12-23)\n\nThe issue is **NOT** in gt as originally thought. It's in the beads (bd) codebase.\n\n### What happens:\n1. `bd pin` correctly sets pinned=1 in SQLite\n2. Any subsequent `bd` command (even `bd show`) resets pinned to 0\n3. This happens even with `--no-auto-import` and `--sandbox` flags\n\n### Evidence:\n```bash\n$ bd --no-daemon pin gt-k08o --for=max\n📌 Pinned gt-k08o to max's hook\n\n$ sqlite3 beads.db 'SELECT id, pinned FROM issues WHERE id=\"gt-k08o\"'\ngt-k08o|1 # ← Correct immediately after pin\n\n$ bd --no-daemon --no-auto-import show gt-k08o\n[shows issue without pinned field]\n\n$ sqlite3 beads.db 'SELECT id, pinned FROM issues WHERE id=\"gt-k08o\"' \ngt-k08o|0 # ← WRONG\\! bd show overwrote it\n```\n\n### Where to look:\nThe bug is likely in one of these beads code paths:\n- Some import/hydration running despite --no-auto-import\n- WAL mode not flushing before subsequent reads\n- Multi-repo or redirect handling corrupting pinned field\n\n### Workaround:\nThe handoff bead attachment mechanism (AttachMolecule) works correctly.\nThe pinned field is cosmetic for `bd hook` visibility only.\ngt sling correctly uses AttachMolecule for work assignment.\n\n### Next steps:\nCreate a beads issue to fix this properly in the bd codebase.\nThis is not a gt issue.","notes":"Created beads bug: bd-phtv in ~/gt/beads","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-23T04:41:12.668958-08:00","updated_at":"2025-12-24T20:41:58.630975-08:00","closed_at":"2025-12-23T19:31:43.218529-08:00","close_reason":"Root-caused to beads codebase, not gt. Created beads bug bd-phtv to track the actual fix."} {"id":"gt-o40t","title":"gt sling --force: return displaced work to ready pool","description":"When slinging with --force to an agent with occupied hook, the displaced molecule should be returned to the ready pool rather than silently orphaned.\n\nCurrent behavior:\n- --force overwrites the hook attachment\n- Previous work becomes orphaned (still assigned but not pinned)\n\nDesired behavior:\n1. Unpin the displaced molecule (clear assignee, set pinned=false)\n2. Print warning in tool output: 'Warning: displaced gt-xxx back to ready pool'\n3. Proceed with new sling\n\nThis ensures:\n- No silent data loss\n- Agent sees the warning and can act on it\n- Human caller sees what happened\n- Displaced work is discoverable via 'bd ready'\n\nImplementation location: checkHookCollision() or the sling handlers themselves (after the --force check passes)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T16:00:23.713733-08:00","updated_at":"2025-12-23T16:07:14.482319-08:00","closed_at":"2025-12-23T16:07:14.482319-08:00","close_reason":"Closed"} @@ -945,18 +945,18 @@ {"id":"gt-p2l2","title":"gt doctor: add Claude settings.json validation","description":"Add a new doctor check to validate Claude Code settings in worker directories:\n\n**Check for:**\n1. .claude/settings.json exists in polecats/*, crew/*, witness/rig, refinery/rig\n2. SessionStart hook has 'gt prime' command\n3. Autonomous roles (polecat, witness, refinery) have 'gt mail check --inject' in SessionStart\n4. Interactive roles (crew, mayor) have mail check in UserPromptSubmit only\n\n**Auto-fix capability:**\nUse internal/claude.EnsureSettingsForRole() to create missing settings files.\n\nContext: The spawn priming race condition fix (gt-6957) added embedded settings templates. Doctor should validate these are in place.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-22T17:59:02.326127-08:00","updated_at":"2025-12-22T17:59:02.326127-08:00"} {"id":"gt-p4s9","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:36:49.392521-08:00","updated_at":"2025-12-24T22:36:49.392521-08:00","closed_at":"2025-12-24T22:36:49.392494-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-p9zh","title":"gt doctor: detect orphaned code on beads-sync branch","description":"After merging beads-sync to main, some code changes can be lost if the merge conflict resolution drops files.\n\nAdd a doctor check that runs:\n git diff main..beads-sync -- '*.go' '*.md'\n\nIf there are differences in code files (not just .beads/), warn about potentially orphaned work.\n\nToday's incident: Merge 96c773f lost mailbox.go and router.go changes from 5791752, requiring re-implementation.\n\nAcceptance:\n- gt doctor warns if beads-sync has unmerged code changes\n- Excludes .beads/ directory (expected to differ)\n- Shows file list of orphaned changes","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-20T22:01:56.794648-08:00","updated_at":"2025-12-20T22:19:59.777921-08:00","closed_at":"2025-12-20T22:19:59.777921-08:00","close_reason":"Implemented both checks: persistent-role-branches and beads-sync-orphans. Also added ensureMainBranch() to crew attach."} -{"id":"gt-pbjim","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:35:05.785047-08:00","updated_at":"2025-12-25T00:35:05.785047-08:00","closed_at":"2025-12-25T00:35:05.785013-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-pbjim","depends_on_id":"gt-wffg2","type":"parent-child","created_at":"2025-12-25T00:35:05.785725-08:00","created_by":"stevey"}]} +{"id":"gt-pbjim","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:35:05.785047-08:00","updated_at":"2025-12-25T00:35:05.785047-08:00","closed_at":"2025-12-25T00:35:05.785013-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-pbr3","title":"Add godoc comments to exported functions","description":"Several exported functions lack godoc comments. While not critical, adding documentation would improve code maintainability. Focus on:\n\n- Public API functions in each package\n- Exported types and their methods\n- Functions that have non-obvious behavior\n\nCan be addressed incrementally as code is touched.","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-21T21:35:26.732436-08:00","updated_at":"2025-12-21T22:20:01.785697-08:00","closed_at":"2025-12-21T22:20:01.785697-08:00","close_reason":"Deferred to post-launch. Documentation comments are nice-to-have for launch. Core functionality is documented; additional godoc can be added incrementally."} -{"id":"gt-pc2p0","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, no messages, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:28:10.81431-08:00","updated_at":"2025-12-25T00:28:10.81431-08:00","closed_at":"2025-12-25T00:28:10.814279-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-pc2p0","depends_on_id":"gt-i8cvv","type":"parent-child","created_at":"2025-12-25T00:28:10.814968-08:00","created_by":"stevey"}]} +{"id":"gt-pc2p0","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, no messages, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:28:10.81431-08:00","updated_at":"2025-12-25T00:28:10.81431-08:00","closed_at":"2025-12-25T00:28:10.814279-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-pc5d","title":"Recover stale polecat work: 4 branches with unpushed commits","description":"During observation of polecat workflow, found 4 polecats with unpushed work:\n\n## Branches Pushed (preserved)\n- polecat/capable: 3 commits (molecule catalog, doctor orphan detection, gt done)\n- polecat/dementus: 4 commits (Witness MVP, handoff fixes)\n- polecat/furiosa: 2 commits (bulk polecat removal, spawn handoff)\n- polecat/rictus: 1 commit (molecule docs)\n\n## Action Required\n1. Review each branch for merge-worthiness\n2. Either:\n a. Create PRs for valuable work\n b. OR discard if superseded\n3. After decision, clean up polecats properly\n\n## Root Cause\nPolecats were not cleaned up after previous work sessions. This is exactly why we need:\n- gt-u1k: gt shutdown should fully cleanup polecats\n- gt-8v8: Refuse to lose uncommitted work\n- gt-9nf: Always create fresh polecats","status":"closed","priority":1,"issue_type":"chore","created_at":"2025-12-20T15:24:29.232772-08:00","updated_at":"2025-12-21T11:24:55.194579-08:00","closed_at":"2025-12-21T11:24:55.194579-08:00","close_reason":"Cleaned up via gt orphans"} -{"id":"gt-pcqda","title":"Digest: mol-deacon-patrol","description":"Patrol 4: 8 sessions active, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:30:08.65881-08:00","updated_at":"2025-12-25T00:30:08.65881-08:00","closed_at":"2025-12-25T00:30:08.658779-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-pcqda","depends_on_id":"gt-7ccqx","type":"parent-child","created_at":"2025-12-25T00:30:08.659512-08:00","created_by":"stevey"}]} +{"id":"gt-pcqda","title":"Digest: mol-deacon-patrol","description":"Patrol 4: 8 sessions active, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:30:08.65881-08:00","updated_at":"2025-12-25T00:30:08.65881-08:00","closed_at":"2025-12-25T00:30:08.658779-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-pdqc","title":"gt spawn: beads sync warnings on fresh worktree","description":"When spawning fresh polecats, seeing 'Warning: beads sync: exit status 1' and 'Warning: beads push: exit status 1'. Worktrees are created but beads state may not be properly synced.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-23T00:19:09.375303-08:00","updated_at":"2025-12-23T00:19:09.375303-08:00"} {"id":"gt-pedt","title":"Digest: mol-deacon-patrol","description":"Patrol 9: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:58:49.010496-08:00","updated_at":"2025-12-24T20:58:49.010496-08:00","closed_at":"2025-12-24T20:58:49.010457-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-pia6","title":"Merge: gt-h6eq.4","description":"branch: polecat/valkyrie\ntarget: main\nsource_issue: gt-h6eq.4\nrig: gastown","status":"closed","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T12:13:07.092756-08:00","updated_at":"2025-12-23T12:22:23.461996-08:00","closed_at":"2025-12-23T12:22:23.461996-08:00","close_reason":"Merged to main in gt-h6eq swarm"} {"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-pk1e3","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:36:44.088454-08:00","updated_at":"2025-12-25T00:36:44.088454-08:00","closed_at":"2025-12-25T00:36:44.088422-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-pk1e3","depends_on_id":"gt-ktj9q","type":"parent-child","created_at":"2025-12-25T00:36:44.089136-08:00","created_by":"stevey"}]} +{"id":"gt-pk1e3","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:36:44.088454-08:00","updated_at":"2025-12-25T00:36:44.088454-08:00","closed_at":"2025-12-25T00:36:44.088422-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:23.832188-08:00","updated_at":"2025-12-23T04:04:18.491584-08:00","closed_at":"2025-12-23T04:04:18.491584-08:00","close_reason":"Added --account flag to gt spawn and gt crew at commands","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"}]} -{"id":"gt-pln0","title":"Digest: mol-deacon-patrol","description":"Patrol 6: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:57:32.057118-08:00","updated_at":"2025-12-24T20:57:32.057118-08:00","closed_at":"2025-12-24T20:57:32.057089-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-pln0","depends_on_id":"gt-jypn","type":"parent-child","created_at":"2025-12-24T20:57:32.057799-08:00","created_by":"stevey"}]} +{"id":"gt-pln0","title":"Digest: mol-deacon-patrol","description":"Patrol 6: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:57:32.057118-08:00","updated_at":"2025-12-24T20:57:32.057118-08:00","closed_at":"2025-12-24T20:57:32.057089-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-pmef","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:04:44.376339-08:00","updated_at":"2025-12-25T01:33:01.077971-08:00","closed_at":"2025-12-25T01:33:01.077971-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-pmef.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:04:44.468753-08:00","updated_at":"2025-12-25T01:33:01.061399-08:00","closed_at":"2025-12-25T01:33:01.061399-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-pmef.1","depends_on_id":"gt-pmef","type":"parent-child","created_at":"2025-12-23T22:04:44.469169-08:00","created_by":"daemon"}]} {"id":"gt-poxd","title":"Create handoff beads for Witness and Refinery roles","description":"Each patrol role needs a pinned handoff bead to track attached molecules and patrol state.\n\n## Pattern (from Deacon)\n- Title: '\u003crole\u003e Handoff' (e.g., 'witness Handoff', 'refinery Handoff')\n- Status: pinned\n- Description contains structured state\n\n## Witness Handoff State\n\n```yaml\nattached_molecule: mol-witness-patrol\nattached_at: 2025-12-24T10:00:00Z\n\n# Nudge escalation tracking\nnudges:\n toast:\n count: 2\n last: \"2025-12-24T10:30:00Z\"\n ace:\n count: 0\n last: null\n\n# Polecats queued for cleanup\npending_cleanup:\n - nux # received POLECAT_DONE, awaiting verification\n```\n\n## Refinery Handoff State\n\n```yaml\nattached_molecule: mol-refinery-patrol\nattached_at: 2025-12-24T10:00:00Z\n\n# Merge queue tracking\nlast_processed_branch: polecat/toast\nbranches_merged_this_cycle: 3\n```\n\n## Tasks\n1. Create 'witness Handoff' bead in each rig's beads\n2. Create 'refinery Handoff' bead in each rig's beads\n3. Update Witness/Refinery startup to check handoff bead for attached work\n4. Update templates to document handoff bead usage\n5. Include nudge state schema for Witness\n6. Include merge state schema for Refinery\n\n## Note\nThese are rig-level beads (in gastown/.beads/, beads/.beads/), not town-level like deacon Handoff (in ~/gt/.beads/).\n\n## See Also\n- docs/witness-patrol-design.md - Theory of operation","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T13:19:41.055563-08:00","updated_at":"2025-12-24T23:21:03.212038-08:00","closed_at":"2025-12-24T23:21:03.212038-08:00","close_reason":"witness Handoff (gt-w98d) and refinery Handoff (gt-j3cx) beads exist; templates updated with documentation","dependencies":[{"issue_id":"gt-poxd","depends_on_id":"gt-y481","type":"parent-child","created_at":"2025-12-23T13:20:15.89851-08:00","created_by":"daemon"}]} @@ -1038,13 +1038,13 @@ {"id":"gt-rixa","title":"Bug: parseLifecycleRequest always matches 'cycle' due to LIFECYCLE prefix","description":"In lifecycle.go, parseLifecycleRequest checks strings.Contains(title, \"cycle\") first, but the prefix \"LIFECYCLE:\" contains the word \"cycle\". This means ALL lifecycle messages match the cycle action, making restart and shutdown unreachable. Fix: check for restart/shutdown before cycle, or use word boundaries.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-19T16:17:16.083512-08:00","updated_at":"2025-12-21T17:20:42.83084-08:00"} {"id":"gt-rm3","title":"CLI: gt refinery commands (start, stop, status, queue)","description":"CLI commands for managing the Refinery agent.\n\n## Commands\n\n```bash\ngt refinery start \u003crig\u003e # Start refinery for a rig\ngt refinery stop \u003crig\u003e # Stop refinery\ngt refinery status \u003crig\u003e # Show refinery status\ngt refinery queue \u003crig\u003e # Show merge queue\n```\n\n## gt refinery start\n\nStarts the Refinery daemon for the specified rig.\n\nOptions:\n- --foreground: Run in foreground (default: background)\n- --auto-merge: Enable auto-merge (default: from config)\n\n## gt refinery stop\n\nStops a running Refinery. Gracefully finishes current MR if processing.\n\n## gt refinery status\n\nShows:\n- Running state (running/stopped)\n- Current MR being processed (if any)\n- Queue length\n- Last merge time\n- Recent activity\n\n## gt refinery queue\n\nShows the merge queue:\n```\nMerge queue for 'wyvern':\n 1. [pending] Toast/polecat-auth-fix (15m ago)\n 2. [pending] Capable/polecat-new-feature (5m ago)\n \n1 merged today, 0 rejected\n```\n\n## Implementation\n\nUses gt-ov2 (Refinery agent) for daemon functionality.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-15T23:22:24.754361-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-rm3","depends_on_id":"gt-ov2","type":"blocks","created_at":"2025-12-15T23:22:30.679909-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-rp0k","title":"Extend auto-continue to polecats (not just crew)","description":"gt prime currently only outputs AUTO-CONTINUE MODE for crew workers.\nPolecats with attached work should also auto-continue.\n\n## Current behavior\noutputCrewAttachmentStatus() in prime.go:\n- Only runs for RoleCrew\n- Outputs '→ AUTO-CONTINUE MODE' when attached work detected\n\n## Desired behavior\n- Rename to outputAttachmentStatus() or similar\n- Run for RoleCrew AND RolePolecat\n- Same directive: if attachment exists, work immediately\n\n## The Propulsion Principle\n'If you find something on your hook, YOU RUN IT.'\n\nThis applies to ALL workers, not just crew.\n\n## Implementation\n1. Extend role check in outputCrewAttachmentStatus()\n2. Adjust assignee detection for polecats vs crew\n3. Test with both worker types","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/nux","created_at":"2025-12-22T16:43:22.149252-08:00","updated_at":"2025-12-22T23:40:12.049577-08:00","closed_at":"2025-12-22T23:40:12.049577-08:00","close_reason":"Extended auto-continue to polecats via outputAttachmentStatus"} -{"id":"gt-rpsu2","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:31:06.415769-08:00","updated_at":"2025-12-25T00:31:06.415769-08:00","closed_at":"2025-12-25T00:31:06.415734-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-rpsu2","depends_on_id":"gt-poedi","type":"parent-child","created_at":"2025-12-25T00:31:06.416475-08:00","created_by":"stevey"}]} +{"id":"gt-rpsu2","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:31:06.415769-08:00","updated_at":"2025-12-25T00:31:06.415769-08:00","closed_at":"2025-12-25T00:31:06.415734-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-rr1i","title":"mol-swarm-cleanup: Post-swarm debris cleanup molecule","description":"After a 20+ worker swarm completed, found significant beads debris:\n- 18 stale messages (work assignments, lifecycle requests, swarm instructions)\n- 3 completed issues still open/in_progress\n- Test messages accumulated\n\nNeed: Document a post-swarm checklist or create gt swarm cleanup command that:\n1. Closes stale work assignment messages\n2. Reviews in_progress issues for completion\n3. Closes orphaned lifecycle messages\n4. Optionally archives test messages","status":"open","priority":3,"issue_type":"chore","created_at":"2025-12-20T03:12:28.646175-08:00","updated_at":"2025-12-20T03:15:45.521085-08:00"} {"id":"gt-rsxwb","title":"implement","description":"Implement the solution for gt-ds3h3. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T01:59:05.782317-08:00","updated_at":"2025-12-25T01:59:05.782317-08:00","dependencies":[{"issue_id":"gt-rsxwb","depends_on_id":"gt-kp3s3","type":"parent-child","created_at":"2025-12-25T01:59:05.800066-08:00","created_by":"stevey"},{"issue_id":"gt-rsxwb","depends_on_id":"gt-up9uw","type":"blocks","created_at":"2025-12-25T01:59:05.816315-08:00","created_by":"stevey"}]} {"id":"gt-rt6g","title":"Bug: Deacon session linked to Mayor pane causes heartbeat crosstalk","description":"**Root cause found**: The gt-deacon tmux session was linked to gt-mayor window 2 - they shared the same pane (@283). When the daemon sent heartbeats to the Deacon, they appeared as typed input in the Mayor's window, interrupting user prompts.\n\n**Fix applied**: Killed the broken gt-deacon session. The daemon auto-recreates it with a proper independent pane.\n\n**Prevention**: Investigate how sessions can get linked and add safeguards to session creation code.\n\nOriginal symptom: Mayor receiving 'HEARTBEAT: Tip: Witnesses monitor polecats...' messages that ate user input.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-22T17:00:28.667896-08:00","updated_at":"2025-12-22T17:08:19.974928-08:00","closed_at":"2025-12-22T17:08:19.974928-08:00","close_reason":"Fixed: killed linked gt-deacon session. Daemon will recreate with independent pane."} {"id":"gt-ruw","title":"Fix TestHasPolecat test failure in internal/session","description":"TestHasPolecat in internal/session/manager_test.go fails because it expects\nspecific polecats (Toast, Cheedo) to exist in the test environment.\n\nError:\n```\nmanager_test.go:46: expected hasPolecat(Toast) = true\nmanager_test.go:49: expected hasPolecat(Cheedo) = true\n```\n\nFix: Either create test fixtures or mock the filesystem check.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-17T15:02:30.030032-08:00","updated_at":"2025-12-19T11:58:56.1846-08:00","closed_at":"2025-12-19T11:58:56.1846-08:00"} {"id":"gt-rw2z","title":"gt mail send: support reading message body from stdin","description":"Currently gt mail send -m requires the message as a command-line argument, which causes shell escaping issues with backticks, quotes, and special characters.\n\nAdd support for reading message body from stdin:\n- gt mail send addr -s 'Subject' --stdin # Read body from stdin\n- echo 'body' | gt mail send addr -s 'Subject' -m - # Convention: -m - means stdin\n\nThis would allow:\ncat \u003c\u003c'EOF' | gt mail send addr -s 'Subject' --stdin\nMessage with \\`backticks\\` and 'quotes' safely\nEOF\n\nWithout this, agents struggle to send handoff messages containing code snippets.\n\n## Moved from beads\nOriginally bd-3bsz. gt mail is in gastown, not beads.","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-23T12:19:23.505896-08:00","updated_at":"2025-12-23T12:19:23.505896-08:00"} -{"id":"gt-rx2y4","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:02:29.590204-08:00","updated_at":"2025-12-25T00:02:29.590204-08:00","closed_at":"2025-12-25T00:02:29.590164-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-rx2y4","depends_on_id":"gt-0vrnx","type":"parent-child","created_at":"2025-12-25T00:02:29.590908-08:00","created_by":"stevey"}]} +{"id":"gt-rx2y4","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:02:29.590204-08:00","updated_at":"2025-12-25T00:02:29.590204-08:00","closed_at":"2025-12-25T00:02:29.590164-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-rxsh","title":"Multiple merge/landing models documented without clarification","description":"Architecture describes three different merge models:\n\n1. Refinery-only model (traditional)\n2. Direct landing model (Mayor bypass) \n3. Swarm integration branch model (internal/swarm)\n\nThese appear to conflict. Documentation should clarify:\n- Which model is canonical?\n- When to use which model?\n- Or are some deprecated?\n\nThis is confusing for users trying to understand the system.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:51:43.593597-08:00","updated_at":"2025-12-24T12:51:43.593597-08:00","dependencies":[{"issue_id":"gt-rxsh","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.992252-08:00","created_by":"daemon"}]} {"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-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"} @@ -1073,18 +1073,18 @@ {"id":"gt-sye","title":"Mayor startup protocol prompting","description":"Add startup protocol to Mayor CLAUDE.md template.\n\n## On Session Start\n\n1. Check for handoff:\n town inbox | grep \"Session Handoff\"\n\n2. If handoff found:\n - Read it: town read \u003cmsg-id\u003e\n - Process pending escalations (highest priority)\n - Check status of noted swarms\n - Verify rig health matches notes\n - Continue with documented next steps\n\n3. If no handoff:\n town status # Overall health\n town rigs # Each rig\n bd ready # Work items\n town inbox # Any messages\n Build your own picture of current state.\n\n4. After processing handoff:\n - Archive or delete the handoff message\n - You now own the current state\n\n## Handoff Best Practices\n\n- Be specific: 'Toast has merge conflict in auth/middleware.go' not 'Toast is stuck'\n- Include context: Why decisions are pending, what you were thinking\n- Prioritize next steps: What is most urgent\n- Note time-sensitive items: Anything that might have changed since handoff","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-15T20:15:27.915484-08:00","updated_at":"2025-12-23T14:27:06.967815-08:00","dependencies":[{"issue_id":"gt-sye","depends_on_id":"gt-u82","type":"blocks","created_at":"2025-12-15T20:15:39.459108-08:00","created_by":"daemon"}]} {"id":"gt-szsq","title":"gt spawn --create should auto-add polecat if missing","description":"## Problem\n\n`gt spawn gastown --issue gt-xxx --create` fails if no polecats exist.\n\n## Current Behavior\n\n```\nError: auto-select polecat: no available polecats in rig 'gastown'\n```\n\n## Expected Behavior\n\n`--create` should:\n1. Create a new polecat if none exist\n2. Or create the specified polecat if `gt spawn gastown/NewName --create`\n\n## Workaround\n\nMust manually run `gt polecat add gastown Name` first.\n\n## Principle\n\nAgent UX should be forgiving - if I say spawn with --create, make it work.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T21:52:07.75062-08:00","updated_at":"2025-12-19T01:33:49.859926-08:00","closed_at":"2025-12-19T01:33:49.859926-08:00"} {"id":"gt-t2nh","title":"gt nudge: support no-arg invocation with default message","description":"Currently gt nudge requires a message argument:\n\n```\ngt nudge \u003crig/polecat\u003e \u003cmessage\u003e\n```\n\nWould be nice to support:\n```\ngt nudge \u003crig/polecat\u003e\n```\n\nWith a sensible default message like 'nudge' or 'continue' or checking for pending work automatically.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-23T01:29:23.623455-08:00","updated_at":"2025-12-23T01:29:23.623455-08:00"} -{"id":"gt-t2o92","title":"Digest: mol-deacon-patrol","description":"Patrol 12: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:51:07.540535-08:00","updated_at":"2025-12-24T23:51:07.540535-08:00","closed_at":"2025-12-24T23:51:07.5405-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-t2o92","depends_on_id":"gt-k0ink","type":"parent-child","created_at":"2025-12-24T23:51:07.541233-08:00","created_by":"stevey"}]} +{"id":"gt-t2o92","title":"Digest: mol-deacon-patrol","description":"Patrol 12: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:51:07.540535-08:00","updated_at":"2025-12-24T23:51:07.540535-08:00","closed_at":"2025-12-24T23:51:07.5405-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-t2vj","title":"Merge: gt-8v8","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-8v8\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T16:31:37.562534-08:00","updated_at":"2025-12-20T23:17:25.794937-08:00","closed_at":"2025-12-20T23:17:25.794937-08:00","close_reason":"Branches nuked, MRs obsolete"} {"id":"gt-t5mz","title":"Hardcoded session ID prefixes and paths","description":"Multiple hardcoded values throughout code:\n- internal/mail/router.go: 'gt-mayor', 'gt-' session prefixes\n- internal/lock/lock.go: '.runtime', 'agent.lock' paths\n- Session ID generation uses string literals\n\nShould move to:\n- constants package for prefixes\n- config for customizable paths\n\nLow priority but improves maintainability.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-24T12:51:20.962108-08:00","updated_at":"2025-12-24T12:51:20.962108-08:00","dependencies":[{"issue_id":"gt-t5mz","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:08.156758-08:00","created_by":"daemon"}]} {"id":"gt-t5pc","title":"test with labels","status":"closed","priority":2,"issue_type":"message","created_at":"2025-12-20T17:42:30.258069-08:00","updated_at":"2025-12-25T01:33:01.197691-08:00","closed_at":"2025-12-25T01:33:01.197691-08:00","close_reason":"Test pollution cleanup","labels":["from:gastown-max","reply-to:gt-xyz","thread:thread-abc123"]} {"id":"gt-t5uk","title":"Deacon trigger-pending-spawns: Auto-nudge polecats when ready","description":"The Deacon's mol-deacon-patrol defines a trigger-pending-spawns step, but it's not implemented.\n\n## Problem\nAfter gt spawn creates a polecat session, Claude initializes for 10-20s. Nobody sends the initial 'Begin.' message to start work, so polecats sit at prompts forever.\n\n## Current Workaround\nManual: gt nudge gt-\u003crig\u003e-\u003cpolecat\u003e 'Begin.'\n\n## Required Implementation\n1. Track pending spawns (polecats spawned but not triggered)\n2. In Deacon patrol, poll WaitForClaudeReady for each pending spawn\n3. When ready, send 'Begin.' via NudgeSession\n4. Mark as triggered\n\n## Evidence\nTracer bullet 2025-12-23: Had to manually nudge polecat/tracer to start work.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-23T21:58:26.070984-08:00","updated_at":"2025-12-23T21:58:26.070984-08:00"} -{"id":"gt-t8du","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:47:04.511823-08:00","updated_at":"2025-12-24T23:47:04.511823-08:00","closed_at":"2025-12-24T23:47:04.511795-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-t8du","depends_on_id":"gt-9w5k","type":"parent-child","created_at":"2025-12-24T23:47:04.512481-08:00","created_by":"stevey"}]} +{"id":"gt-t8du","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:47:04.511823-08:00","updated_at":"2025-12-24T23:47:04.511823-08:00","closed_at":"2025-12-24T23:47:04.511795-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-t9u7","title":"Polecat template cleanup","description":"Collection of improvements to the polecat role template (polecat.md.tmpl). Focus: reduce prose redundancy, move behavior into molecules, fix terminology, improve clarity.","status":"closed","priority":2,"issue_type":"epic","assignee":"gastown/furiosa","created_at":"2025-12-23T16:57:05.03738-08:00","updated_at":"2025-12-23T17:09:14.498634-08:00","closed_at":"2025-12-23T17:09:14.498634-08:00","close_reason":"All 9 child issues completed"} {"id":"gt-tca","title":"Polecats should auto-cleanup after MR submission","description":"Currently polecats must manually run 'gt handoff --shutdown' after completing work. This is error-prone and leaves stale polecats around.\n\n## Desired Flow\n\n1. Polecat completes work\n2. Polecat runs 'gt mq submit' (or similar)\n3. MR is added to integration queue\n4. **Polecat automatically cleans up** (no manual handoff needed)\n\n## Implementation Options\n\n### Option A: mq submit triggers cleanup\nIn 'gt mq submit':\n1. Submit MR to queue\n2. Automatically run cleanup (same as gt handoff --shutdown)\n3. Polecat session terminates\n\n### Option B: Refinery triggers cleanup\nWhen Refinery picks up MR:\n1. Refinery processes MR\n2. Sends message to Witness: 'CLEANUP: \u003cpolecat\u003e'\n3. Witness cleans up polecat\n\n### Option C: Molecule-driven\nDefine cleanup as final phase of polecat-work molecule:\n1. code → test → submit-mr → cleanup\n\n## Note\nThis reinforces the ephemeral model: polecats exist only for the duration of a single task.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T15:22:54.485456-08:00","updated_at":"2025-12-21T11:44:14.020856-08:00","closed_at":"2025-12-21T11:44:14.020856-08:00","close_reason":"Implemented: mq submit now auto-cleanups polecats after MR submission","dependencies":[{"issue_id":"gt-tca","depends_on_id":"gt-9nf","type":"related","created_at":"2025-12-20T15:40:08.998908-08:00","created_by":"daemon"}]} {"id":"gt-tcv8","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:35:11.507838-08:00","updated_at":"2025-12-24T22:35:11.507838-08:00","closed_at":"2025-12-24T22:35:11.507795-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-tfg1","title":"Digest: mol-deacon-patrol","description":"Patrol #2: Routine - all 6 agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:15:34.682289-08:00","updated_at":"2025-12-24T22:15:34.682289-08:00","closed_at":"2025-12-24T22:15:34.682254-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-th7","title":"Add agent abstraction layer to support non-Claude agents","description":"Currently Gas Town hardcodes 'claude --dangerously-skip-permissions' throughout the codebase for spawning agents. We should add an abstraction layer to support other AI agents (e.g., Gemini CLI, OpenAI agents, local models).\n\nLocations that spawn Claude:\n- internal/cmd/mayor.go:131\n- internal/cmd/deacon.go:150 \n- internal/cmd/witness.go:280\n- internal/cmd/crew.go (multiple locations)\n- internal/cmd/up.go:190, 229\n- internal/session/manager.go:146\n- internal/refinery/manager.go:207\n\nSuggested approach:\n1. Create an agent package with an interface\n2. Add configuration for agent type in town/rig config\n3. Replace hardcoded claude commands with agent.Spawn() calls\n4. Support agents: claude, gemini, openai, local (ollama, etc.)","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-20T15:11:15.931048-08:00","updated_at":"2025-12-20T15:26:54.236995-08:00"} -{"id":"gt-tj0wa","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:33:30.496944-08:00","updated_at":"2025-12-25T00:33:30.496944-08:00","closed_at":"2025-12-25T00:33:30.496914-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-tj0wa","depends_on_id":"gt-tjuha","type":"parent-child","created_at":"2025-12-25T00:33:30.497643-08:00","created_by":"stevey"}]} +{"id":"gt-tj0wa","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:33:30.496944-08:00","updated_at":"2025-12-25T00:33:30.496944-08:00","closed_at":"2025-12-25T00:33:30.496914-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-tj1k","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:45","description":"Patrol 10: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:45:36.775542-08:00","updated_at":"2025-12-24T19:45:36.775542-08:00","closed_at":"2025-12-24T19:45:36.775467-08:00","close_reason":"Squashed from wisp gt-gjw (9 issues)"} {"id":"gt-tk8s8","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:05:28.114611-08:00","updated_at":"2025-12-25T01:33:00.137737-08:00","closed_at":"2025-12-25T01:33:00.137737-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-tk8s8.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:05:28.20644-08:00","updated_at":"2025-12-25T01:33:00.121179-08:00","closed_at":"2025-12-25T01:33:00.121179-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-tk8s8.1","depends_on_id":"gt-tk8s8","type":"parent-child","created_at":"2025-12-25T01:05:28.206901-08:00","created_by":"daemon"}]} @@ -1108,7 +1108,7 @@ {"id":"gt-ts4u","title":"Merge: gt-h5n.5","description":"branch: polecat/Scabrous\ntarget: main\nsource_issue: gt-h5n.5\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:43.268861-08:00","updated_at":"2025-12-20T23:17:25.78812-08:00","closed_at":"2025-12-20T23:17:25.78812-08:00","close_reason":"Branches nuked, MRs obsolete"} {"id":"gt-tubn","title":"Track operational stats as entity/audit beads","description":"Witness and refinery track operational stats in JSON files:\n- total_merged, today_merged, total_failed (refinery)\n- total_checks, total_nudges, total_escalations (witness)\n\nFor HOP entity CV tracking, these could become:\n- type=audit beads (daily roll-ups of operational metrics)\n- Entity chain entries showing validator activity\n\nThis provides observability and contributes to entity reputation tracking (e.g., refinery X has merged 500 PRs with 2% failure rate).\n\nNot critical for launch but aligns with HOP Platform of Platforms vision.","status":"open","priority":4,"issue_type":"feature","created_at":"2025-12-21T22:07:30.404073-08:00","updated_at":"2025-12-21T22:07:30.404073-08:00"} {"id":"gt-tulx","title":"gt mq submit: creates task type instead of merge-request type","description":"## Problem\n\n`gt mq submit` creates an issue with `type: task` but should be `type: merge-request`.\n\n## Evidence\n\n```\n$ bd show gt-n508\ngt-n508: Merge: gt-70b3\nStatus: open\nPriority: P1\nType: task \u003c-- WRONG, should be merge-request\n...\nDescription:\ntype: merge-request \u003c-- Correct type is in description, not in actual type field\n```\n\n## Impact\n\n`gt mq list` shows empty queue because it queries for `type: merge-request`\n\n## Fix\n\n`gt mq submit` should set `--type merge-request` when creating the bead.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T21:57:37.905848-08:00","updated_at":"2025-12-18T22:16:31.393114-08:00","closed_at":"2025-12-18T22:16:31.393114-08:00"} -{"id":"gt-tvlam","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:01:29.899-08:00","updated_at":"2025-12-25T00:01:29.899-08:00","closed_at":"2025-12-25T00:01:29.898969-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-tvlam","depends_on_id":"gt-sfc3i","type":"parent-child","created_at":"2025-12-25T00:01:29.899671-08:00","created_by":"stevey"}]} +{"id":"gt-tvlam","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:01:29.899-08:00","updated_at":"2025-12-25T00:01:29.899-08:00","closed_at":"2025-12-25T00:01:29.898969-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-tw1g","title":"Startup hook should validate attached molecule is still open","description":"When the SessionStart hook outputs attached_molecule from the handoff bead, it should check if that molecule is still open. If closed, it should:\n1. Clear the stale attachment\n2. Auto-spawn a fresh patrol molecule\n3. Attach the new patrol\n\nCurrently it just outputs the stale reference without validation, leaving the Deacon confused about what to run.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-23T13:16:51.73028-08:00","updated_at":"2025-12-23T13:16:51.73028-08:00"} {"id":"gt-u0c1","title":"Merge: gt-qna4","description":"branch: polecat/capable\ntarget: main\nsource_issue: gt-qna4\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T07:47:28.453817-08:00","updated_at":"2025-12-20T23:17:25.792255-08:00","closed_at":"2025-12-20T23:17:25.792255-08:00","close_reason":"Branches nuked, MRs obsolete"} {"id":"gt-u1j","title":"Port Gas Town to Go","description":"Complete rewrite of Gas Town in Go for improved performance and single-binary distribution.\n\n## Goals\n- Single installable binary (gt)\n- All Python functionality ported\n- Federation support built-in\n- Improved performance\n\n## Phases\n1. Core infrastructure (config, workspace, git wrapper)\n2. Rig \u0026 polecat management\n3. Session \u0026 tmux operations\n4. Mail system\n5. CLI commands\n6. TUI (optional)","status":"closed","priority":0,"issue_type":"epic","created_at":"2025-12-15T16:36:28.769343-08:00","updated_at":"2025-12-23T01:49:44.85631-08:00","closed_at":"2025-12-23T01:49:44.85631-08:00","close_reason":"Go port complete - Python version deprecated"} @@ -1136,15 +1136,15 @@ {"id":"gt-u1j.9","title":"Witness daemon: heartbeat loop, spawn ephemeral agent","description":"Background daemon for agent lifecycle and monitoring.\n\n## Core Responsibilities\n\n1. **Heartbeat monitoring**: Check agent health periodically\n2. **Session lifecycle**: Restart agents after handoff (Witness Protection)\n3. **Polecat monitoring**: Track worker progress, nudging\n4. **Escalation**: Report failures to Mayor\n\n## Session Lifecycle (Witness Protection)\n\nThe daemon enables autonomous long-running operation by cycling agent sessions:\n\n```go\ntype SessionLifecycle struct {\n AgentType string // \"witness\", \"refinery\"\n StatePath string // path to state.json\n}\n\nfunc (d *Daemon) monitorSessionLifecycle(agent SessionLifecycle) {\n // 1. Detect session exit\n // 2. Check state.json for requesting_cycle: true\n // 3. If cycle requested: start new session, clear flag\n // 4. If unexpected exit: escalate to Mayor\n}\n```\n\nSee architecture.md Key Decision #12: Agent Session Lifecycle.\n\n## Interface\n\n```go\ntype Daemon struct {\n rig *Rig\n polecats *PolecatManager\n sessions *SessionManager\n config DaemonConfig\n}\n\ntype DaemonConfig struct {\n HeartbeatInterval time.Duration // default: 30s\n NudgeThreshold int // nudges before escalation\n MaxWorkers int // from rig config\n}\n\nfunc NewDaemon(rig *Rig) *Daemon\nfunc (d *Daemon) Start() error\nfunc (d *Daemon) Stop() error\n\n// Lifecycle\nfunc (d *Daemon) CycleSession(agentType string) error\nfunc (d *Daemon) SpawnWorker(issueID string) error\nfunc (d *Daemon) ShutdownWorker(polecat string) error\n```\n\n## Heartbeat Loop\n\nEvery HeartbeatInterval:\n1. Check Witness session (restart if cycle requested)\n2. Check Refinery session (restart if cycle requested)\n3. For each active polecat: assess progress, nudge if stuck\n4. Query `bd ready` for new work, spawn up to max_workers","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T17:12:29.389103-08:00","updated_at":"2025-12-18T11:50:12.047959-08:00","closed_at":"2025-12-18T11:50:12.047959-08:00","dependencies":[{"issue_id":"gt-u1j.9","depends_on_id":"gt-u1j","type":"parent-child","created_at":"2025-12-15T17:12:29.389428-08:00","created_by":"daemon"},{"issue_id":"gt-u1j.9","depends_on_id":"gt-u1j.7","type":"blocks","created_at":"2025-12-15T17:14:04.353775-08:00","created_by":"daemon"},{"issue_id":"gt-u1j.9","depends_on_id":"gt-u1j.8","type":"blocks","created_at":"2025-12-15T17:14:04.440363-08:00","created_by":"daemon"}]} {"id":"gt-u1k","title":"gt shutdown should fully cleanup polecats (worktrees, branches, inboxes)","description":"Current gt shutdown only kills tmux sessions but leaves:\n\n1. Git worktrees in polecats/ directory\n2. Polecat branches (polecat/\u003cname\u003e)\n3. Inbox messages\n4. Beads assignee state\n\nThis causes stale polecats to be reused on next startup.\n\n## Expected Behavior\n\ngt shutdown should:\n1. Kill all polecat tmux sessions (current behavior)\n2. For each polecat with StateIdle or StateDone:\n - Remove worktree\n - Delete branch\n - Clear inbox\n3. For polecats with uncommitted work:\n - REFUSE to clean up\n - Report which polecats have uncommitted changes\n - Require --force or --nuclear to proceed\n\n## Current Code\n\n- start.go:runImmediateShutdown() only calls t.KillSession()\n- Witness cleanupPolecat() does full cleanup but isn't called by shutdown\n\n## Fix\n\nEither:\n1. Call Witness cleanup for each polecat during shutdown\n2. OR add rig.ShutdownPolecats() that does the full cleanup","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-20T15:22:42.921949-08:00","updated_at":"2025-12-21T10:32:47.205012-08:00","closed_at":"2025-12-21T10:32:47.205012-08:00","close_reason":"Implemented polecat cleanup in gt shutdown","dependencies":[{"issue_id":"gt-u1k","depends_on_id":"gt-8v8","type":"blocks","created_at":"2025-12-20T15:23:15.226189-08:00","created_by":"daemon"}]} {"id":"gt-u1lf","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:26","description":"Patrol 12: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:26:31.865491-08:00","updated_at":"2025-12-24T19:26:31.865491-08:00","closed_at":"2025-12-24T19:26:31.865414-08:00","close_reason":"Squashed from wisp gt-35r (9 issues)"} -{"id":"gt-u29p","title":"Digest: mol-deacon-patrol","description":"Patrol #10: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:10.196304-08:00","updated_at":"2025-12-24T23:33:10.196304-08:00","closed_at":"2025-12-24T23:33:10.19627-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-u29p","depends_on_id":"gt-wi7p","type":"parent-child","created_at":"2025-12-24T23:33:10.196975-08:00","created_by":"stevey"}]} +{"id":"gt-u29p","title":"Digest: mol-deacon-patrol","description":"Patrol #10: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:33:10.196304-08:00","updated_at":"2025-12-24T23:33:10.196304-08:00","closed_at":"2025-12-24T23:33:10.19627-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-u2vg","title":"gt spawn --issue should auto-attach mol-polecat-work","description":"When spawning a polecat with --issue but no --molecule, the polecat gets an issue assigned and work assignment mail, but no molecule on their hook. They check 'gt mol status', see nothing, and are stuck.\n\nFix: If --issue is provided but --molecule is not, auto-attach mol-polecat-work (or a configurable default) to the polecat's hook.\n\nCurrent behavior:\n- Issue assigned in beads ✓\n- Mail sent ✓ \n- No molecule attached ✗\n\nExpected:\n- Issue assigned in beads ✓\n- Mail sent ✓\n- mol-polecat-work attached to hook ✓","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-23T19:53:24.817448-08:00","updated_at":"2025-12-25T01:55:39.572178-08:00","closed_at":"2025-12-25T01:55:39.572178-08:00","close_reason":"Fixed in spawn.go: now writes hook file to polecat worktree using wisp.WriteSlungWork() after issue assignment"} {"id":"gt-u41w","title":"Merge: gt-5af.1","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-5af.1\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T17:30:40.48203-08:00","updated_at":"2025-12-19T18:26:14.105767-08:00","closed_at":"2025-12-19T17:48:09.550789-08:00"} {"id":"gt-u4fh","title":"Remove stubbed ProcessMRFromQueue and mrqueue package","description":"internal/refinery/engineer.go has stubbed ProcessMRFromQueue() that returns hardcoded failure.\ninternal/mrqueue/ package exists but isn't used.\n\nThis was aspirational 'beads-based MR automation' but:\n1. Refinery agent just runs git commands per role prompt\n2. manager.ProcessMR() is already fully implemented if we need Go automation\n3. The stub creates confusion about what's working\n\nEither:\n1. Remove engineer.ProcessMRFromQueue and mrqueue package entirely\n2. Or finish implementing it if there's a real use case\n\nLeaning toward removal - YAGNI.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T13:04:53.050803-08:00","updated_at":"2025-12-24T13:04:53.050803-08:00","dependencies":[{"issue_id":"gt-u4fh","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T13:05:00.183378-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":"open","priority":1,"issue_type":"feature","created_at":"2025-12-21T16:16:53.886931-08:00","updated_at":"2025-12-23T05:07:12.471303-08:00"} {"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-u8ybw","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:53:19.814904-08:00","updated_at":"2025-12-24T23:53:19.814904-08:00","closed_at":"2025-12-24T23:53:19.81487-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-u8ybw","depends_on_id":"gt-blg5j","type":"parent-child","created_at":"2025-12-24T23:53:19.815584-08:00","created_by":"stevey"}]} +{"id":"gt-u8ybw","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:53:19.814904-08:00","updated_at":"2025-12-24T23:53:19.814904-08:00","closed_at":"2025-12-24T23:53:19.81487-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ua5f","title":"Digest: mol-deacon-patrol","description":"Patrol: read mayor handoff (gt-mzal boot design), all agents up, furiosa working gt-oiv0, note: gt-4eim orphaned (angharad gone)","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-22T21:29:07.064593-08:00","updated_at":"2025-12-22T21:29:07.064593-08:00","closed_at":"2025-12-22T21:29:07.064557-08:00","close_reason":"Squashed from 5 wisps"} -{"id":"gt-uadg","title":"Digest: mol-deacon-patrol","description":"Patrol complete: all agents healthy, no lifecycle requests, 9 in-progress items noted","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:20:11.959796-08:00","updated_at":"2025-12-24T23:20:11.959796-08:00","closed_at":"2025-12-24T23:20:11.959761-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-uadg","depends_on_id":"gt-xncn","type":"parent-child","created_at":"2025-12-24T23:20:11.960504-08:00","created_by":"stevey"}]} +{"id":"gt-uadg","title":"Digest: mol-deacon-patrol","description":"Patrol complete: all agents healthy, no lifecycle requests, 9 in-progress items noted","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:20:11.959796-08:00","updated_at":"2025-12-24T23:20:11.959796-08:00","closed_at":"2025-12-24T23:20:11.959761-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ubd4","title":"Merge: gt-tnca.1","description":"branch: polecat/immortan\ntarget: main\nsource_issue: gt-tnca.1\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T00:18:22.782233-08:00","updated_at":"2025-12-23T01:16:15.707696-08:00","closed_at":"2025-12-23T01:16:15.707696-08:00","close_reason":"Merged to main"} {"id":"gt-uhc3","title":"gt mq list shows empty when MRs exist","description":"The gt mq list command returns empty results even when merge requests exist in the queue.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-21T17:51:18.712633-08:00","updated_at":"2025-12-21T17:51:18.712633-08:00"} {"id":"gt-uhe4","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:20","description":"Patrol complete: inbox empty, all agents healthy (Mayor, 2 Witnesses, 2 Refineries), no polecats, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:20:09.935353-08:00","updated_at":"2025-12-24T19:20:09.935353-08:00","closed_at":"2025-12-24T19:20:09.93529-08:00","close_reason":"Squashed from wisp gt-7x9 (9 issues)"} @@ -1154,19 +1154,19 @@ {"id":"gt-uohw","title":"gt doctor: detect tmux session anomalies (linked panes, etc.)","description":"Add a tmux health check to gt doctor that detects:\n\n1. **Linked panes between sessions** - The bug where gt-deacon and gt-mayor shared pane @283, causing heartbeat crosstalk\n2. **Session naming anomalies** - Sessions that don't match expected patterns\n3. **Orphaned panes** - Panes in gt-* sessions with no running process\n\nDetection approach:\n- List all gt-* sessions\n- For each session, get window/pane IDs\n- Check for duplicate pane IDs across different sessions\n- If found, report which sessions are linked and suggest fix\n\nAuto-fix: Could offer to kill and recreate the offending session.\n\nReference: gt-rt6g documented a case where this caused the daemon's Deacon heartbeats to appear in the Mayor's input, eating user prompts.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-22T17:13:04.147197-08:00","updated_at":"2025-12-22T17:16:15.645263-08:00","closed_at":"2025-12-22T17:16:15.645263-08:00","close_reason":"Closed"} {"id":"gt-up9uw","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-ds3h3) and understand the requirements.\nIdentify any blockers or missing information.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T01:59:05.781933-08:00","updated_at":"2025-12-25T01:59:05.781933-08:00","dependencies":[{"issue_id":"gt-up9uw","depends_on_id":"gt-kp3s3","type":"parent-child","created_at":"2025-12-25T01:59:05.783457-08:00","created_by":"stevey"}]} {"id":"gt-upom","title":"Witness patrol: cleanup idle orphan polecats","description":"Add patrol step to find and cleanup polecats that are idle with no assigned issue. These orphans occur when polecats crash before sending DONE or Witness misses the message. Patrol should verify git is clean before removing worktree. Part of gt-rana.","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-21T23:09:41.756753-08:00","updated_at":"2025-12-21T23:09:41.756753-08:00"} -{"id":"gt-uqv0","title":"Digest: mol-deacon-patrol","description":"Patrol 18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:11:08.007745-08:00","updated_at":"2025-12-24T23:11:08.007745-08:00","closed_at":"2025-12-24T23:11:08.007715-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-uqv0","depends_on_id":"gt-fenn","type":"parent-child","created_at":"2025-12-24T23:11:08.008399-08:00","created_by":"stevey"}]} +{"id":"gt-uqv0","title":"Digest: mol-deacon-patrol","description":"Patrol 18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:11:08.007745-08:00","updated_at":"2025-12-24T23:11:08.007745-08:00","closed_at":"2025-12-24T23:11:08.007715-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-us8","title":"Daemon: configurable heartbeat interval","description":"Heartbeat interval is hardcoded to 60s. Should be configurable via:\n- town.json config\n- Command line flag\n- Environment variable\n\nDefault 60s is reasonable but some deployments may want faster/slower.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-18T13:38:14.282216-08:00","updated_at":"2025-12-18T13:38:14.282216-08:00","dependencies":[{"issue_id":"gt-us8","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T13:38:26.704111-08:00","created_by":"daemon"}]} {"id":"gt-usy0","title":"Merge: gt-3x0z.3","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-3x0z.3\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-21T16:03:43.535266-08:00","updated_at":"2025-12-21T17:20:27.505696-08:00","closed_at":"2025-12-21T17:20:27.505696-08:00","close_reason":"ORPHANED: Branch never pushed, worktree deleted"} {"id":"gt-utwc","title":"Self-mail should suppress tmux notification","description":"When sending mail to yourself (e.g., mayor sending to mayor/), the tmux notification shouldn't fire.\n\n**Rationale:**\n- Self-mail is intended for future-you (next session handoff)\n- Present-you just sent it, so you already know about it\n- The notification is redundant/confusing in this case\n\n**Fix:**\nSuppress tmux notification when sender == recipient address.","status":"closed","priority":3,"issue_type":"bug","created_at":"2025-12-22T17:55:39.573705-08:00","updated_at":"2025-12-22T23:58:02.827026-08:00","closed_at":"2025-12-22T23:58:02.827026-08:00","close_reason":"Skip tmux notification when sender == recipient"} -{"id":"gt-uvga","title":"Digest: mol-deacon-patrol","description":"Patrol 16","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:43.578204-08:00","updated_at":"2025-12-24T23:10:43.578204-08:00","closed_at":"2025-12-24T23:10:43.57816-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-uvga","depends_on_id":"gt-8nqz","type":"parent-child","created_at":"2025-12-24T23:10:43.578902-08:00","created_by":"stevey"}]} -{"id":"gt-uvpo6","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All agents healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:16:30.625876-08:00","updated_at":"2025-12-25T01:16:30.625876-08:00","closed_at":"2025-12-25T01:16:30.625845-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-uvpo6","depends_on_id":"gt-qy173","type":"parent-child","created_at":"2025-12-25T01:16:30.626583-08:00","created_by":"stevey"}]} -{"id":"gt-ux0f","title":"Digest: mol-deacon-patrol","description":"Patrol #16: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:42.184561-08:00","updated_at":"2025-12-24T23:34:42.184561-08:00","closed_at":"2025-12-24T23:34:42.184526-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-ux0f","depends_on_id":"gt-5u0u","type":"parent-child","created_at":"2025-12-24T23:34:42.185217-08:00","created_by":"stevey"}]} +{"id":"gt-uvga","title":"Digest: mol-deacon-patrol","description":"Patrol 16","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:10:43.578204-08:00","updated_at":"2025-12-24T23:10:43.578204-08:00","closed_at":"2025-12-24T23:10:43.57816-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-uvpo6","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All agents healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:16:30.625876-08:00","updated_at":"2025-12-25T01:16:30.625876-08:00","closed_at":"2025-12-25T01:16:30.625845-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-ux0f","title":"Digest: mol-deacon-patrol","description":"Patrol #16: Stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:42.184561-08:00","updated_at":"2025-12-24T23:34:42.184561-08:00","closed_at":"2025-12-24T23:34:42.184526-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-uym5","title":"Implement gt mol status command","description":"Show what's on an agent's hook.\n\n```bash\ngt mol status [target]\n```\n\nOutput:\n- What's slung (molecule name, associated issue)\n- Current phase and progress\n- Whether it's a wisp\n- Next action hint\n\nIf no target, shows current agent's status.\n\nAcceptance:\n- [ ] Read pinned bead attachment\n- [ ] Display molecule/issue info\n- [ ] Show phase progress\n- [ ] Indicate wisp vs durable","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/nux","created_at":"2025-12-22T03:17:34.679963-08:00","updated_at":"2025-12-22T12:34:19.942265-08:00","closed_at":"2025-12-22T12:34:19.942265-08:00","close_reason":"Implemented gt mol status command with mol alias, auto-detection, progress display, wisp detection, and next action hints"} {"id":"gt-v30g","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:36:38.029543-08:00","updated_at":"2025-12-24T22:36:38.029543-08:00","closed_at":"2025-12-24T22:36:38.029506-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-v5hv","title":"Work on ga-y6b: Implement Refinery as Claude agent. Conve...","description":"Work on ga-y6b: Implement Refinery as Claude agent. Convert from shell to Claude agent that processes MRs in merge queue, runs tests, merges to integration branch. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T22:58:17.576892-08:00","updated_at":"2025-12-19T23:23:22.778407-08:00","closed_at":"2025-12-19T23:23:22.778407-08:00"} {"id":"gt-v5k","title":"Design: Failure modes and recovery","description":"Document failure modes and recovery strategies for Gas Town operations.\n\n## Critical Failure Modes\n\n### 1. Agent Crash Mid-Operation\n\n**Scenario**: Polecat crashes while committing, Witness crashes while verifying\n\n**Detection**:\n- Session suddenly gone (tmux check fails)\n- State shows 'working' but no session\n- Heartbeat stops (for Witness)\n\n**Recovery**:\n- Doctor detects via ZombieSessionCheck\n- Capture any recoverable state\n- Reset agent state to 'idle'\n- For Witness: auto-restart via supervisor or manual gt witness start\n\n### 2. Git State Corruption\n\n**Scenario**: Merge conflict, failed rebase, detached HEAD\n\n**Detection**:\n- Git commands fail\n- Dirty state that won't commit\n- Branch diverged from origin\n\n**Recovery**:\n- gt doctor reports git health issues\n- Manual intervention recommended\n- Severe cases: remove clone, re-clone\n\n### 3. Beads Sync Conflict\n\n**Scenario**: Two polecats modify same issue\n\n**Detection**:\n- bd sync fails with conflict\n- Beads tombstone mechanism handles most cases\n\n**Recovery**:\n- Beads has last-write-wins semantics\n- bd sync --force in extreme cases\n- Issues may need manual dedup\n\n### 4. Tmux Failure\n\n**Scenario**: Tmux server crashes, socket issues\n\n**Detection**:\n- All sessions inaccessible\n- \"no server running\" errors\n\n**Recovery**:\n- Kill any orphan processes\n- tmux kill-server \u0026\u0026 tmux start-server\n- All agent states reset to idle\n- Re-spawn active work\n\n### 5. Claude API Issues\n\n**Scenario**: Rate limits, outages, context limits\n\n**Detection**:\n- Sessions hang or produce errors\n- Repeated failure patterns\n\n**Recovery**:\n- Exponential backoff (handled by Claude Code)\n- For context limits: session cycling (mail-to-self)\n- For outages: wait and retry\n\n### 6. Disk Full\n\n**Scenario**: Clones, logs, or beads fill disk\n\n**Detection**:\n- Write operations fail\n- git/bd commands error\n\n**Recovery**:\n- Clean up logs: rm ~/.gastown/logs/*\n- Remove old polecat clones\n- gt doctor --fix can clean some cruft\n\n### 7. Network Failure\n\n**Scenario**: Can't reach GitHub, API servers\n\n**Detection**:\n- git fetch/push fails\n- Claude sessions hang\n\n**Recovery**:\n- Work continues locally\n- Queue pushes for later\n- Sync when connectivity restored\n\n## Recovery Principles\n\n1. **Fail safe**: Prefer stopping over corrupting\n2. **State is recoverable**: Git and beads have recovery mechanisms\n3. **Doctor heals**: gt doctor --fix handles common issues\n4. **Emergency stop**: gt stop --all as last resort\n5. **Human escalation**: Some failures need Overseer intervention\n\n## Implementation\n\n- Document each failure mode in architecture.md\n- Ensure doctor checks cover detection\n- Add recovery hints to error messages\n- Log all failures for debugging","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-15T23:19:07.198289-08:00","updated_at":"2025-12-15T23:19:28.171942-08:00"} {"id":"gt-v650","title":"Add handoff self-initiation protocol to role templates","description":"Agents need clear protocol for self-initiated handoff:\n\n1. Recognize: 'I should cycle now'\n2. Prepare: Summarize current state, what's next\n3. Send: gt mail send \u003cself\u003e -s '🤝 HANDOFF: ...' -m '...'\n4. Exit: End session cleanly\n\nThis replaces external 'you should cycle now' nudging.\nThe agent owns its lifecycle.\n\nInclude examples for each role type.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:46:30.987381-08:00","updated_at":"2025-12-23T14:27:07.35534-08:00"} -{"id":"gt-v8im","title":"Digest: mol-deacon-patrol","description":"Patrol 16: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:25.132341-08:00","updated_at":"2025-12-24T22:38:25.132341-08:00","closed_at":"2025-12-24T22:38:25.13231-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-v8im","depends_on_id":"gt-b8o0","type":"parent-child","created_at":"2025-12-24T22:38:25.133044-08:00","created_by":"stevey"}]} +{"id":"gt-v8im","title":"Digest: mol-deacon-patrol","description":"Patrol 16: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:25.132341-08:00","updated_at":"2025-12-24T22:38:25.132341-08:00","closed_at":"2025-12-24T22:38:25.13231-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-vaqk","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:22","description":"Patrol 5: all healthy, 2 crews (dave, max) active","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:22:34.309422-08:00","updated_at":"2025-12-24T19:22:34.309422-08:00","closed_at":"2025-12-24T19:22:34.309355-08:00","close_reason":"Squashed from wisp gt-94s (9 issues)"} {"id":"gt-vc1n","title":"Tmux status line: rig color themes and worker identity display","description":"## Summary\n\nCustomize tmux status line for Gas Town workers with:\n1. Per-rig configurable color themes\n2. Clear worker name and role visibility\n\n## Current Problem\n\n- Only mayor shows in status line (and truncated)\n- Can't tell which rig/worker you're looking at\n- All sessions look the same\n\n## Proposed Design\n\n### Per-rig colors\n```yaml\n# In rig config or beads\ntheme:\n primary: '#ff6600' # Orange for gastown\n secondary: '#333333'\n accent: '#ffcc00'\n```\n\n### Status line format\n```\n[gastown/Rictus] polecat | gt-70b3 | branch: polecat/Rictus\n[beads/emma] crew | working | branch: main \n[mayor] coordinator | idle\n```\n\n### Components\n- Rig name with rig color\n- Worker name\n- Role (polecat/crew/mayor/witness/refinery)\n- Current issue or status\n- Branch name\n\n## Configuration\n\nCould use pinned beads for this (see gm-w13, beads-6v2):\n- `bd show \u003crig\u003e-theme` returns theme config\n- Stored as pinned bead, always available\n- Part of 'config in beads data plane' initiative","notes":"Implementation complete. Core features: per-rig color themes, dynamic status line with issue/mail indicators, gt theme/issue commands. Ready for testing.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-18T21:58:58.547188-08:00","updated_at":"2025-12-20T03:08:48.622856-08:00","closed_at":"2025-12-20T03:08:48.622856-08:00"} {"id":"gt-vci","title":"Mayor handoff mail template","description":"Add MAYOR_HANDOFF mail template to templates.py.\n\n## Template Function\n\ndef mayor_handoff(\n active_swarms: List[SwarmStatus],\n rig_status: Dict[str, RigStatus],\n pending_escalations: List[Escalation],\n in_flight_decisions: List[Decision],\n recent_actions: List[str],\n delegated_work: List[DelegatedItem],\n user_requests: List[str],\n next_steps: List[str],\n warnings: Optional[str] = None,\n session_duration: Optional[str] = None,\n) -\u003e Message:\n metadata = {\n 'template': 'MAYOR_HANDOFF',\n 'timestamp': datetime.utcnow().isoformat(),\n 'session_duration': session_duration,\n 'active_swarm_count': len(active_swarms),\n 'pending_escalation_count': len(pending_escalations),\n }\n # ... format sections ...\n return Message.create(\n sender='mayor/',\n recipient='mayor/',\n subject='Session Handoff',\n body=body,\n priority='high',\n )\n\n## Metadata Fields\n\n- template: MAYOR_HANDOFF\n- timestamp: ISO format\n- session_duration: Human readable\n- active_swarm_count: Number of active swarms\n- pending_escalation_count: Number of escalations\n\n## Mail Priority\n\nUse priority='high' to ensure handoff is seen on startup.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-15T20:15:30.26323-08:00","updated_at":"2025-12-23T14:27:06.873499-08:00","dependencies":[{"issue_id":"gt-vci","depends_on_id":"gt-u82","type":"blocks","created_at":"2025-12-15T20:15:39.554108-08:00","created_by":"daemon"}]} @@ -1182,12 +1182,12 @@ {"id":"gt-vnp9","title":"tmux notifications: display-message too subtle, use send-keys instead","description":"## Problem\n\n`tmux display-message` notifications are not visible enough - they appear briefly in the status bar and are easy to miss.\n\n## Current Behavior\n\nrouter.go uses:\n```go\nr.tmux.DisplayMessageDefault(sessionID, notification)\n```\n\n## What Works\n\nSending echo commands directly to the terminal:\n```bash\ntmux send-keys -t \u003csession\u003e \"echo '📬 NEW MAIL from mayor'\" Enter\n```\n\n## Proposed Fix\n\nChange notification method to send visible output to the terminal, perhaps with a box/banner:\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📬 NEW MAIL from mayor\nSubject: \u003csubject\u003e\nRun: bd mail inbox\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n```\n\n## Considerations\n\n- This interrupts the terminal output (acceptable for important mail)\n- Could check if Claude is mid-response and queue notification\n- Or use tmux popup if available","notes":"Additional issues:\n1. Enter key not sent properly when chained with send-keys\n2. Need to debounce and send Enter separately\n3. Correct pattern: send text, sleep briefly, then send Enter","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-18T21:35:28.542985-08:00","updated_at":"2025-12-19T12:00:29.342381-08:00","closed_at":"2025-12-19T12:00:29.342381-08:00"} {"id":"gt-vqhc","title":"gt sling/handoff fails: slashes in agent identity create invalid hook paths","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-24T23:24:49.495017-08:00","updated_at":"2025-12-24T23:26:18.493355-08:00","closed_at":"2025-12-24T23:26:18.493355-08:00","close_reason":"Fixed: HookFilename now sanitizes slashes to underscores"} {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:50.666492-08:00","updated_at":"2025-12-23T17:09:02.141194-08:00","closed_at":"2025-12-23T17:09:02.141194-08:00","close_reason":"Completed in commit 1931ec7","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"}]} -{"id":"gt-vz2xs","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Halfway check, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:33:04.470774-08:00","updated_at":"2025-12-25T00:33:04.470774-08:00","closed_at":"2025-12-25T00:33:04.470745-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-vz2xs","depends_on_id":"gt-ow39b","type":"parent-child","created_at":"2025-12-25T00:33:04.471542-08:00","created_by":"stevey"}]} +{"id":"gt-vz2xs","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Halfway check, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:33:04.470774-08:00","updated_at":"2025-12-25T00:33:04.470774-08:00","closed_at":"2025-12-25T00:33:04.470745-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-24T12:50:28.988771-08:00","updated_at":"2025-12-24T23:26:59.0004-08:00","closed_at":"2025-12-24T23:26:59.0004-08:00","close_reason":"Added Prerequisites section to README","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"}]} {"id":"gt-w0e0","title":"Merge: gt-h1n5","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-h1n5\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T19:37:59.964737-08:00","updated_at":"2025-12-24T00:18:03.066034-08:00","closed_at":"2025-12-23T23:30:30.883627-08:00"} {"id":"gt-w1zd","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:10:52.98396-08:00","updated_at":"2025-12-24T21:10:52.98396-08:00","closed_at":"2025-12-24T21:10:52.983923-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-w3bu","title":"gt spawn: Enter key needs debounce delay after paste","description":"## Problem\n\nWhen spawning polecats via `gt spawn`, instructions are pasted into tmux but workers often sit idle at prompt because the Enter key arrives before the paste is fully processed.\n\n## Observed Behavior\n\n- Instructions pasted via tmux send-keys\n- Enter key sent immediately after\n- Worker session shows prompt with no input (paste not submitted)\n- Requires manual intervention to nudge workers\n\n## Expected Behavior\n\n- Paste completes fully\n- Enter key submits the pasted instructions\n- Worker begins executing immediately\n\n## Root Cause\n\nLikely a race condition between paste buffer processing and keypress handling. Need either:\n1. Debounce delay before sending Enter\n2. Longer delay (Tmax) to ensure paste completes\n3. Alternative submission mechanism\n\n## Impact\n\n- Swarm of 10 workers had multiple stalls at startup\n- Required manual tmux send-keys to unstick them\n- Defeats purpose of automated spawning\n\n## References\n\n- Observed during Mad Max swarm (Dec 18, 2025)\n- Affects gt spawn command in internal/cmd/spawn.go","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T21:06:50.734123-08:00","updated_at":"2025-12-18T21:08:22.400899-08:00","closed_at":"2025-12-18T21:08:22.400899-08:00"} -{"id":"gt-w52o8","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:05:39.718034-08:00","updated_at":"2025-12-25T00:05:39.718034-08:00","closed_at":"2025-12-25T00:05:39.717998-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-w52o8","depends_on_id":"gt-xnl2k","type":"parent-child","created_at":"2025-12-25T00:05:39.718707-08:00","created_by":"stevey"}]} +{"id":"gt-w52o8","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:05:39.718034-08:00","updated_at":"2025-12-25T00:05:39.718034-08:00","closed_at":"2025-12-25T00:05:39.717998-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-w5dj","title":"Merge: gt-unrd","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-unrd\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T15:42:06.600633-08:00","updated_at":"2025-12-19T18:26:14.106188-08:00","closed_at":"2025-12-19T17:48:09.590076-08:00"} {"id":"gt-w631c","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:57:46.905803-08:00","updated_at":"2025-12-25T01:33:00.18745-08:00","closed_at":"2025-12-25T01:33:00.18745-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-w631c.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:57:47.004005-08:00","updated_at":"2025-12-25T01:33:00.170605-08:00","closed_at":"2025-12-25T01:33:00.170605-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-w631c.1","depends_on_id":"gt-w631c","type":"parent-child","created_at":"2025-12-25T00:57:47.004473-08:00","created_by":"daemon"}]} @@ -1199,7 +1199,7 @@ {"id":"gt-wewf.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-wewf\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T00:10:43.433441-08:00","updated_at":"2025-12-24T00:10:43.600601-08:00","closed_at":"2025-12-24T00:10:43.600601-08:00"} {"id":"gt-wexr","title":"Polecat role references deprecated 'swarm' terminology","description":"prompts/roles/polecat.md line 12 says:\n'Part of a swarm: Other polecats may be working on related issues in parallel'\n\nBut architecture.md explicitly states:\n'There are no swarm IDs - just epics with children'\n\nThe swarm concept has been replaced by streams/dependency model.\nUpdate polecat.md to remove swarm references.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-24T12:50:32.097647-08:00","updated_at":"2025-12-24T23:13:26.612591-08:00","closed_at":"2025-12-24T23:13:26.612591-08:00","close_reason":"Polecat template (polecat.md.tmpl) doesn't contain swarm references. Fixed crew.md.tmpl references. Updated architecture.md and prompts.md to emphasize stream engine model.","dependencies":[{"issue_id":"gt-wexr","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:05.023976-08:00","created_by":"daemon"}]} {"id":"gt-wmhj","title":"tmux link-window auto-selects new window, causing agent confusion","description":"## Summary\n\nWhen running `gt crew at \u003cother\u003e` from inside a tmux session, the linked window auto-selects, causing the user to unknowingly switch agents.\n\n## Root Cause\n\n`internal/tmux/tmux.go:535-538` - `LinkWindow` doesn't use `-d` flag:\n```go\n_, err := t.run(\"link-window\", \"-s\", source) // Missing -d!\n```\n\nBy default, `tmux link-window` selects the newly linked window.\n\n## Reproduction\n\n1. Be in Max's tmux session talking to Max\n2. Ask Max to run `gt crew at joe`\n3. Max creates Joe's session and links it\n4. User is now in Joe's window without realizing it\n5. Max appears to have 'disappeared'\n\n## Fix\n\nAdd `-d` flag to prevent auto-selection:\n```go\n_, err := t.run(\"link-window\", \"-s\", source, \"-d\")\n```\n\n## Related\n\n- gt-09i4: Unify tmux session lifecycle (broader epic Max filed)\n","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-24T14:33:40.40319-08:00","updated_at":"2025-12-24T14:34:01.227518-08:00","closed_at":"2025-12-24T14:34:01.227518-08:00","close_reason":"Fixed by adding -d flag to link-window"} -{"id":"gt-woitj","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All agents healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:06:29.731567-08:00","updated_at":"2025-12-25T01:06:29.731567-08:00","closed_at":"2025-12-25T01:06:29.731535-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-woitj","depends_on_id":"gt-dy8np","type":"parent-child","created_at":"2025-12-25T01:06:29.732262-08:00","created_by":"stevey"}]} +{"id":"gt-woitj","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All agents healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:06:29.731567-08:00","updated_at":"2025-12-25T01:06:29.731567-08:00","closed_at":"2025-12-25T01:06:29.731535-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-wpg","title":"Replaceable notifications via Claude Code queue","description":"Leverage Claude Code's ability to replace queued text for notifications that supersede previous ones.\n\n## Problem\n\nIf daemon sends 10 heartbeats while agent is busy, agent returns to see 10 stacked messages. Wasteful and noisy.\n\n## Solution\n\nUse Claude Code's queue replacement for:\n- Heartbeat messages (only latest matters)\n- Status updates that supersede previous\n- Progress notifications\n\n## Implementation\n\nNotifications get a 'slot' identifier. New notification in same slot replaces old one:\n- Slot: 'heartbeat' → only one heartbeat queued at a time\n- Slot: 'status-\u003crig\u003e' → latest status per rig\n- No slot → stacks normally (for unique messages)\n\n## Research Needed\n\n- How does Claude Code expose queue replacement?\n- tmux send-keys behavior with pending input\n- Alternative: clear + resend pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T14:19:29.821949-08:00","updated_at":"2025-12-20T13:19:00.398942-08:00","closed_at":"2025-12-20T13:19:00.398942-08:00","dependencies":[{"issue_id":"gt-wpg","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T14:19:46.656972-08:00","created_by":"daemon"}]} {"id":"gt-wpj1","title":"Digest: mol-deacon-patrol","description":"Patrol 14: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:00:35.116869-08:00","updated_at":"2025-12-24T21:00:35.116869-08:00","closed_at":"2025-12-24T21:00:35.11684-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-wqck","title":"bd doctor: detect clone divergence emergencies","description":"Add doctor check to detect:\n1. Crew/Mayor on feature branches (should always be on main)\n2. Significant divergence between clones that should be in sync\n3. Distinguish from normal beads-sync vs main divergence (expected)\n\nContext: bd sync --status shows all divergence as equal, but some is emergency (clones drifted) vs normal (sync branch mechanics).","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T20:26:32.71018-08:00","updated_at":"2025-12-24T20:26:32.71018-08:00"} @@ -1210,7 +1210,7 @@ {"id":"gt-wvyi","title":"sling pin test 2","status":"closed","priority":2,"issue_type":"task","assignee":"max","created_at":"2025-12-23T11:51:01.899435-08:00","updated_at":"2025-12-23T12:03:22.256591-08:00","closed_at":"2025-12-23T12:03:22.256591-08:00","close_reason":"test issue for gt-o3is debugging"} {"id":"gt-wy8t","title":"Add live polling and updates","description":"Implement live polling (500ms default) for activity updates. Merge new events into view without flickering. Show connection status indicator. Handle daemon disconnects gracefully.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:27:18.127611-08:00","updated_at":"2025-12-23T16:27:18.127611-08:00","dependencies":[{"issue_id":"gt-wy8t","depends_on_id":"gt-3p77","type":"blocks","created_at":"2025-12-23T16:27:38.7256-08:00","created_by":"daemon"},{"issue_id":"gt-wy8t","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:30.942591-08:00","created_by":"daemon"}]} {"id":"gt-x0a5","title":"Patrol formulas: Inconsistent variable placeholder syntax","description":"The patrol formulas use inconsistent syntax for variable placeholders:\n\n## Inconsistency\n\n| Formula | Syntax | Examples |\n|---------|--------|----------|\n| mol-polecat-arm | `{{var}}` | `{{polecat_name}}`, `{{rig}}` |\n| mol-witness-patrol | `\u003cvar\u003e` | `\u003crig\u003e`, `\u003chandoff-bead-id\u003e` |\n| mol-refinery-patrol | `\u003cvar\u003e` | `\u003cpolecat-branch\u003e` |\n\n## Expected\n\nAll formulas should use consistent syntax, probably `{{var}}` since that's what\nthe variables section defines.\n\n## Fix\n\nUpdate mol-witness-patrol and mol-refinery-patrol to use `{{var}}` syntax\nwhere appropriate, or document that `\u003cvar\u003e` is for human-filled placeholders\nvs `{{var}}` for cook-time interpolation.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-24T13:51:48.126618-08:00","updated_at":"2025-12-24T13:51:48.126618-08:00"} -{"id":"gt-x0tz","title":"Digest: mol-deacon-patrol","description":"Patrol 12","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:09:48.920883-08:00","updated_at":"2025-12-24T23:09:48.920883-08:00","closed_at":"2025-12-24T23:09:48.920855-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-x0tz","depends_on_id":"gt-jfus","type":"parent-child","created_at":"2025-12-24T23:09:48.921555-08:00","created_by":"stevey"}]} +{"id":"gt-x0tz","title":"Digest: mol-deacon-patrol","description":"Patrol 12","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:09:48.920883-08:00","updated_at":"2025-12-24T23:09:48.920883-08:00","closed_at":"2025-12-24T23:09:48.920855-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-20T08:01:33.827354-08:00","updated_at":"2025-12-20T08:47:47.599975-08:00","closed_at":"2025-12-20T08:47:47.599975-08:00"} {"id":"gt-x74c","title":"gt mol command tree: status, catalog, burn, squash","description":"Add gt mol subcommand as agent-side API for molecule operations.\n\nCommands needed:\n- gt mol status - What's on my hook? (pinned molecule, current step, progress)\n- gt mol catalog - List available protos (delegate to bd mol catalog)\n- gt mol burn - Burn current attachment\n- gt mol squash - Squash current molecule to digest\n\nThis completes the agent-side API and makes the docs (sling-design.md, propulsion-principle.md) match reality.\n\nBlocks: deacon.md.tmpl update (can't use gt mol status until it exists)","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-22T13:12:23.710855-08:00","updated_at":"2025-12-22T13:16:16.543031-08:00","closed_at":"2025-12-22T13:16:16.543031-08:00","close_reason":"Implemented gt mol catalog, burn, squash commands. Status already existed."} {"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":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-20T15:18:12.39878-08:00","updated_at":"2025-12-21T10:16:00.862028-08:00","closed_at":"2025-12-21T10:16:00.862028-08:00","close_reason":"Fixed by gt-9nf: fresh polecats use shared beads, mail routes correctly to town beads"} @@ -1219,11 +1219,11 @@ {"id":"gt-x9tk","title":"Merge: gt-j6s8","description":"branch: polecat/dementus\ntarget: main\nsource_issue: gt-j6s8\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T01:15:22.372353-08:00","updated_at":"2025-12-23T01:16:15.714552-08:00","closed_at":"2025-12-23T01:16:15.714552-08:00","close_reason":"Merged to main"} {"id":"gt-xbfw","title":"Missing standard OSS files: CONTRIBUTING, CODE_OF_CONDUCT, SECURITY","description":"For OSS launch, we need:\n1. CONTRIBUTING.md - How to contribute, PR process, code style\n2. CODE_OF_CONDUCT.md - Community standards\n3. SECURITY.md - How to report vulnerabilities\n\nThese are expected by OSS communities and GitHub surfaces them in repo UI.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T12:50:30.389345-08:00","updated_at":"2025-12-24T23:27:33.008664-08:00","closed_at":"2025-12-24T23:27:33.008664-08:00","close_reason":"Created CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md","dependencies":[{"issue_id":"gt-xbfw","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:04.941476-08:00","created_by":"daemon"}]} {"id":"gt-xdhg","title":"test sling pinned","status":"closed","priority":2,"issue_type":"task","assignee":"testmax","created_at":"2025-12-23T11:47:46.118753-08:00","updated_at":"2025-12-25T01:33:01.14853-08:00","closed_at":"2025-12-25T01:33:01.14853-08:00","close_reason":"Test pollution cleanup"} -{"id":"gt-xf5d","title":"Digest: mol-deacon-patrol","description":"Patrol 9","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:57.919962-08:00","updated_at":"2025-12-24T23:08:57.919962-08:00","closed_at":"2025-12-24T23:08:57.919932-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-xf5d","depends_on_id":"gt-c1d6","type":"parent-child","created_at":"2025-12-24T23:08:57.92059-08:00","created_by":"stevey"}]} +{"id":"gt-xf5d","title":"Digest: mol-deacon-patrol","description":"Patrol 9","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:57.919962-08:00","updated_at":"2025-12-24T23:08:57.919962-08:00","closed_at":"2025-12-24T23:08:57.919932-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-xhv1","title":"Digest: mol-deacon-patrol","description":"Patrol 18: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:01:57.635721-08:00","updated_at":"2025-12-24T21:01:57.635721-08:00","closed_at":"2025-12-24T21:01:57.635686-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-xicq","title":"Work on ga-lue: Implement Witness as Claude agent. Conver...","description":"Work on ga-lue: Implement Witness as Claude agent. Convert from shell script to Claude agent that monitors polecats, nudges idle ones, handles escalations. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T22:58:08.310674-08:00","updated_at":"2025-12-19T23:24:36.692209-08:00","closed_at":"2025-12-19T23:24:36.692209-08:00"} {"id":"gt-xkbm","title":"Merge: gt-g44u.1","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-g44u.1\nrig: gastown","status":"closed","priority":0,"issue_type":"merge-request","created_at":"2025-12-19T16:04:14.367493-08:00","updated_at":"2025-12-19T17:35:38.210747-08:00","closed_at":"2025-12-19T17:35:38.210747-08:00"} -{"id":"gt-xleh8","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final patrol, all healthy, handoff","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:37:16.291795-08:00","updated_at":"2025-12-25T00:37:16.291795-08:00","closed_at":"2025-12-25T00:37:16.291764-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-xleh8","depends_on_id":"gt-rchcc","type":"parent-child","created_at":"2025-12-25T00:37:16.292482-08:00","created_by":"stevey"}]} +{"id":"gt-xleh8","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final patrol, all healthy, handoff","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:37:16.291795-08:00","updated_at":"2025-12-25T00:37:16.291795-08:00","closed_at":"2025-12-25T00:37:16.291764-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-xm6g","title":"Digest: mol-deacon-patrol","description":"Patrol #19","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:26:24.186039-08:00","updated_at":"2025-12-24T22:26:24.186039-08:00","closed_at":"2025-12-24T22:26:24.186002-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-xnql","title":"Define constants for magic strings","description":"Several magic strings are hardcoded throughout the codebase:\n- \"mayor\" appears in 20+ places as a path component\n- \"main\" branch name appears in 20+ places\n- \"beads-sync\" branch name in multiple files\n- \"rigs.json\" filename\n\nThese should be constants in a central location for maintainability.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-21T21:34:46.620322-08:00","updated_at":"2025-12-21T22:13:07.292513-08:00","closed_at":"2025-12-21T22:13:07.292513-08:00","close_reason":"Created internal/constants/constants.go with centralized definitions for:\n- Directory names (mayor, polecats, crew, etc.)\n- File names (rigs.json, town.json, state.json)\n- Git branches (main, beads-sync)\n- Session names (gt-mayor, gt-deacon)\n- Agent roles\n\nUpdated key files (rig_helpers.go, daemon.go, status.go) to use the new constants package. Full migration of all usages (~100 files) can be done incrementally."} {"id":"gt-xnzp","title":"Merge: gt-7923","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-7923\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T00:18:21.630445-08:00","updated_at":"2025-12-23T01:16:15.701443-08:00","closed_at":"2025-12-23T01:16:15.701443-08:00","close_reason":"Merged to main"} @@ -1232,9 +1232,9 @@ {"id":"gt-xqdk","title":"Add molecule to update local go binary on push to main","description":"When pushing to main branch, automatically rebuild and install the gt binary on the local machine so changes are immediately available.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-19T15:37:40.542228-08:00","updated_at":"2025-12-19T15:37:40.542228-08:00"} {"id":"gt-xqvs","title":"Merge: gt-t9u7","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-t9u7\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T17:09:52.158844-08:00","updated_at":"2025-12-23T17:09:52.158844-08:00"} {"id":"gt-xsw1","title":"Digest: mol-deacon-patrol","description":"Patrol complete: Restarted 5 downed agents (Mayor, 2 Witnesses, 2 Refineries). All systems now healthy.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:05:11.307955-08:00","updated_at":"2025-12-24T22:05:11.307955-08:00","closed_at":"2025-12-24T22:05:11.307909-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-xuhrh","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:52:13.56346-08:00","updated_at":"2025-12-24T23:52:13.56346-08:00","closed_at":"2025-12-24T23:52:13.56343-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-xuhrh","depends_on_id":"gt-3rk7r","type":"parent-child","created_at":"2025-12-24T23:52:13.564128-08:00","created_by":"stevey"}]} +{"id":"gt-xuhrh","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:52:13.56346-08:00","updated_at":"2025-12-24T23:52:13.56346-08:00","closed_at":"2025-12-24T23:52:13.56343-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-xuzo","title":"Add self-check context guidance to role CLAUDE.md files","description":"Each role's CLAUDE.md needs guidance for context self-management:\n\n- After each patrol cycle, self-assess context pressure\n- Heuristics: feeling compressed, lots of tool calls, long session\n- If triggered: initiate handoff before continuing\n\nRoles to update:\n- Mayor (~/gt/CLAUDE.md)\n- Witness template\n- Refinery template \n- Polecat template\n- Crew template\n- Deacon template\n\nThis is the 'inversion of control' - agents decide when to cycle, not external monitoring.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:46:14.197485-08:00","updated_at":"2025-12-23T14:27:07.564589-08:00"} -{"id":"gt-xvner","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:01:49.871554-08:00","updated_at":"2025-12-25T00:01:49.871554-08:00","closed_at":"2025-12-25T00:01:49.871519-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-xvner","depends_on_id":"gt-wnnvt","type":"parent-child","created_at":"2025-12-25T00:01:49.87221-08:00","created_by":"stevey"}]} +{"id":"gt-xvner","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:01:49.871554-08:00","updated_at":"2025-12-25T00:01:49.871554-08:00","closed_at":"2025-12-25T00:01:49.871519-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-xw7b","title":"Add --fart as easter egg alias for bd mol bond","description":"Add a hidden alias for the bond command:\n\n```bash\nbd mol fart mol-polecat-work --wisp\n# equivalent to:\nbd mol bond mol-polecat-work --wisp\n```\n\n## Context\nThe fart joke: instantiating a proto can produce either:\n- A Mol (solid/substantial output)\n- A Wisp (gas/ephemeral output)\n\n## Implementation\n- Add 'fart' as an alias in the mol subcommand\n- No documentation needed (easter egg)\n- Maybe a fun message: 'Bonding molecule...' or similar\n\nLow priority, just for fun.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-21T16:33:18.822868-08:00","updated_at":"2025-12-21T17:20:42.83232-08:00"} {"id":"gt-xx5u","title":"Digest: mol-deacon-patrol","description":"Patrol 10: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:59:10.084625-08:00","updated_at":"2025-12-24T20:59:10.084625-08:00","closed_at":"2025-12-24T20:59:10.084595-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-xxtl","title":"Implement bd mol bond --ephemeral flag","description":"Add --ephemeral flag to bd mol bond command to support ephemeral molecule bonding.\n\n## Context\nPhase 1.2 of Wisp Molecule Integration (gt-3x0z.2) discovered that this flag doesn't exist.\n\n## Requirements\n\n1. Add --ephemeral flag to mol bond command\n2. When --ephemeral is set:\n - Mark spawned issues with wisp=true\n - Optionally write to separate .beads-ephemeral/ storage (Phase 2)\n\n## Architecture Reference\nSee gastown architecture.md lines 487-491 for the full ephemeral storage design.\n\n## Related\n- gt-3x0z.2: Configure bd for ephemeral molecule bonding (closed - blocked on this)","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-21T16:00:04.924875-08:00","updated_at":"2025-12-21T16:00:04.924875-08:00"} @@ -1243,12 +1243,12 @@ {"id":"gt-y3y7","title":"Polecat template: move startup announcement into molecule","description":"Template has STARTUP PROTOCOL with 'Announce: beads Polecat furiosa, checking in.' This should be a startup step in the polecat molecule, not prose instruction in CLAUDE.md. The molecule drives behavior, not the template prose.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:56.302648-08:00","updated_at":"2025-12-23T17:09:08.781666-08:00","closed_at":"2025-12-23T17:09:08.781666-08:00","close_reason":"Not in template - announcement is in gt prime command output (internal/cmd/prime.go)","dependencies":[{"issue_id":"gt-y3y7","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.855004-08:00","created_by":"daemon"}]} {"id":"gt-y481","title":"Epic: Patrol parity - Witness and Refinery match Deacon sophistication","description":"Bring Witness and Refinery patrols up to Deacon's level of sophistication.\n\n## Deacon has\n1. Defined patrol molecule with clear steps\n2. Wisp-based execution (spawn, run, squash, loop)\n3. Daemon monitoring with auto-nudge on naked state\n4. Handoff bead attachment mechanism\n5. Banners for observability\n6. Context-aware loop-or-exit\n\n## Children\n- gt-h1n5: Witness patrol: Add banners and wisp-based execution\n- gt-qz2l: Refinery patrol: Add banners and wisp-based execution\n- gt-poxd: Create handoff beads for Witness and Refinery roles\n\n## Success criteria\n- Tailing a Witness or Refinery session shows clear banners\n- Patrols spawn as wisps and squash to digests\n- Each role has a handoff bead with attached_molecule\n- Daemon monitors Witness/Refinery nakedness (stretch goal)","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-23T13:19:51.934063-08:00","updated_at":"2025-12-24T23:21:04.53892-08:00","closed_at":"2025-12-24T23:21:04.53892-08:00","close_reason":"All children complete: patrol banners exist, handoff beads created, templates updated"} {"id":"gt-y5o","title":"Daemon: verify requesting_cycle before kill","description":"Per gt-gby spec, daemon should verify agent state shows requesting_cycle=true before killing session. Currently kills on any lifecycle request without verification.\n\nRequires state.json in agent workspace with requesting_cycle field.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T13:38:13.049988-08:00","updated_at":"2025-12-19T17:22:52.55078-08:00","closed_at":"2025-12-19T16:28:41.779271-08:00","dependencies":[{"issue_id":"gt-y5o","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T13:38:26.590883-08:00","created_by":"daemon"}]} -{"id":"gt-yboy6","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:32:02.482925-08:00","updated_at":"2025-12-25T00:32:02.482925-08:00","closed_at":"2025-12-25T00:32:02.482895-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-yboy6","depends_on_id":"gt-cntbw","type":"parent-child","created_at":"2025-12-25T00:32:02.48366-08:00","created_by":"stevey"}]} +{"id":"gt-yboy6","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:32:02.482925-08:00","updated_at":"2025-12-25T00:32:02.482925-08:00","closed_at":"2025-12-25T00:32:02.482895-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-yd98","title":"Molecule format bridge: convert embedded markdown to child issues","description":"## Problem\n\nTwo molecule formats exist:\n1. **Old (gastown builtin)**: Steps embedded as markdown in Description field, parsed by ParseMoleculeSteps()\n2. **New (bd mol)**: Steps as child issues in proper beads DAG\n\nThe daemon's InstantiateMolecule() uses the old format. bd mol spawn uses the new format.\n\n## Options\n\n### Option A: Require child issues (new format)\n- Update daemon to use bd mol spawn instead of InstantiateMolecule\n- Deprecate embedded markdown format\n- Pro: One format, simpler\n- Con: Breaking change for existing molecules\n\n### Option B: Build a bridge\n- In InstantiateMolecule, detect format:\n - If Description has ## Step: markers → parse to child issues\n - If issue has children with template label → use directly\n- Convert old format to new format on instantiation\n- Pro: Backward compatible\n- Con: More complexity\n\n## Recommendation\n\nOption B - build the bridge. On instantiation, convert markdown steps to child issues. This unifies execution while preserving authoring flexibility.","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/valkyrie","created_at":"2025-12-21T17:55:15.751168-08:00","updated_at":"2025-12-23T01:16:16.766608-08:00","closed_at":"2025-12-23T01:16:16.766608-08:00","close_reason":"Merged to main"} {"id":"gt-ye8l","title":"Merge: gt-3x1","description":"branch: polecat/Slit\ntarget: main\nsource_issue: gt-3x1\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T14:53:52.344849-08:00","updated_at":"2025-12-20T23:17:25.78961-08:00","closed_at":"2025-12-20T23:17:25.78961-08:00","close_reason":"Branches nuked, MRs obsolete"} {"id":"gt-yewf","title":"Role prompts have mismatched startup protocols","description":"Different role prompts describe different startup protocols:\n\n- deacon.md: Check gt mol status, spawn if none: bd mol spawn\n- refinery.md: Check bd list --status=in_progress, bond if none: gt mol bond\n- polecat.md: Check bd mol current\n\nThese should use consistent terminology and commands.\nThe propulsion principle should be applied uniformly.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-24T12:51:22.22295-08:00","updated_at":"2025-12-24T23:38:48.27495-08:00","closed_at":"2025-12-24T23:38:48.27495-08:00","close_reason":"Fixed: All role prompts now use consistent propulsion protocol (gt mol status → check hook → role-specific continuation). Old bd mol spawn/current commands removed.","dependencies":[{"issue_id":"gt-yewf","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.728283-08:00","created_by":"daemon"}]} -{"id":"gt-yhq23","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:03:51.430921-08:00","updated_at":"2025-12-25T00:03:51.430921-08:00","closed_at":"2025-12-25T00:03:51.430876-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-yhq23","depends_on_id":"gt-bkm9o","type":"parent-child","created_at":"2025-12-25T00:03:51.431646-08:00","created_by":"stevey"}]} -{"id":"gt-yk4r","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:50.175501-08:00","updated_at":"2025-12-24T22:38:50.175501-08:00","closed_at":"2025-12-24T22:38:50.175458-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-yk4r","depends_on_id":"gt-uo34","type":"parent-child","created_at":"2025-12-24T22:38:50.176155-08:00","created_by":"stevey"}]} +{"id":"gt-yhq23","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:03:51.430921-08:00","updated_at":"2025-12-25T00:03:51.430921-08:00","closed_at":"2025-12-25T00:03:51.430876-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-yk4r","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:50.175501-08:00","updated_at":"2025-12-24T22:38:50.175501-08:00","closed_at":"2025-12-24T22:38:50.175458-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-yls","title":"Document merge queue architecture","description":"Update docs/architecture.md with:\n\n- Merge Queue section explaining Beads-native approach\n- Engineer role (renamed from Refinery)\n- Session restart protocol\n- gt mq command reference\n- Federation considerations for queue\n\nAlso update any references to .gastown/ → config/.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T23:02:41.533065-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-yls","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:56.043373-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-ynp6","title":"gt context --usage: estimate remaining context via tmux line count","description":"## Summary\n\nImplement `gt context --usage` to estimate remaining context capacity.\n\n## Approach\n\nUse tmux scrollback buffer line count as proxy for token usage:\n- `tmux capture-pane -p | wc -l` gives current line count\n- Heuristics (tunable per model):\n - Opus 4.5: ~1800 lines = warning threshold\n - ~2000+ lines = critical, need handoff\n\n## Output Format\n```\nContext Usage: 1642 lines (~82%)\nStatus: WARNING - consider handoff soon\n```\n\n## Notes\n- Heuristics are model-specific, need config\n- Line count is proxy, not exact token count\n- Good enough for autonomous patrol decisions","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-23T01:19:13.108332-08:00","updated_at":"2025-12-23T01:19:13.108332-08:00"} {"id":"gt-yt6g","title":"Standardize session end: gt handoff for all roles","description":"## Summary\n\nStandardize session ending across all agent roles to use `gt handoff` as the canonical command. This is critical for the beads propulsion cycle - turning agent sessions from pets into cattle.\n\n## Current State (Inconsistent)\n\n| Role | Current Guidance | Command |\n|------|-----------------|---------|\n| Mayor | Manual mail send | `gt mail send mayor/ -s 'HANDOFF:...' -m '...'` |\n| Crew | Manual mail send | `gt mail send \u003crig\u003e/crew/\u003cname\u003e -s 'HANDOFF:...' -m '...'` |\n| Witness | Manual mail send | `gt mail send \u003crig\u003e/witness -s 'HANDOFF:...' -m '...'` |\n| Refinery | Manual mail send | `gt mail send \u003crig\u003e/refinery -s 'HANDOFF:...' -m '...'` |\n| Deacon | Exit on high context | (implicit) |\n| Polecat | `gt done` | `gt done [--exit TYPE]` |\n\n## Target State (Unified)\n\nAll roles use `gt handoff`:\n- `gt handoff` - Hand off current session to fresh instance\n- `gt handoff -s 'context' -m 'details'` - Hand off with custom message\n- For polecats: `gt handoff` internally calls `gt done`\n\n## Changes Required\n\n### 1. Code Changes\n- [ ] Update `gt handoff` to detect polecat role and call `gt done` internally\n- [ ] Consider adding `--exit` flag to `gt handoff` for polecat compatibility\n\n### 2. CLAUDE.md Updates (gastown)\n- [ ] ~/gt/CLAUDE.md (Mayor)\n- [ ] gastown/crew/max/CLAUDE.md\n- [ ] gastown/crew/joe/CLAUDE.md\n- [ ] gastown/witness/CLAUDE.md\n- [ ] gastown/refinery/CLAUDE.md (and rig/)\n- [ ] deacon/CLAUDE.md\n\n### 3. CLAUDE.md Updates (beads)\n- [ ] beads/mayor/rig/CLAUDE.md\n- [ ] beads/crew/dave/CLAUDE.md\n- [ ] beads/crew/zoey/CLAUDE.md\n- [ ] beads/witness/CLAUDE.md\n- [ ] beads/refinery/CLAUDE.md (and rig/)\n\n### 4. Architecture Docs\n- [ ] docs/patrol-system-design.md\n- [ ] gastown/mayor/rig/docs/prompts.md\n- [ ] gastown/mayor/rig/docs/session-management.md\n\n## New Session End Checklist (Universal)\n\n```\n# SESSION CLOSE PROTOCOL\n\n[ ] 1. git status (check uncommitted changes)\n[ ] 2. git add \u003cfiles\u003e (stage changes)\n[ ] 3. git commit -m '...' (commit with issue ID)\n[ ] 4. bd sync (sync beads)\n[ ] 5. git push (push to remote - CRITICAL)\n[ ] 6. gt handoff (hand off to fresh session)\n OR gt handoff -s 'Context' -m 'Details for next session'\n```\n\n## Why This Matters\n\nThe handoff mechanism is what turns agent sessions from **pets** (precious, long-lived) into **cattle** (disposable, replaceable). At any time, any agent can:\n1. Send itself a detailed handoff mail (or sling itself a mol)\n2. System shuts them down and restarts them\n3. Fresh session runs priming and reads mail\n4. Work continues seamlessly\n\nThis enables:\n- Unlimited context through automatic cycling\n- Clean recovery from any state\n- Consistent behavior across all roles\n- Simplified agent instructions","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T12:57:25.246279-08:00","updated_at":"2025-12-23T13:05:12.92201-08:00","closed_at":"2025-12-23T13:05:12.92201-08:00","close_reason":"Standardized session end guidance across all roles to use gt handoff as canonical method"} @@ -1260,7 +1260,7 @@ {"id":"gt-z3rf","title":"Remove schedule/phase terminology from code","description":"Temporal/schedule language in identifiers is an anti-pattern.\n\n## Found Issues\n\n### beads repo\n- `examples/multi-phase-development/` directory\n - Rename to `examples/dependency-sequenced-work/` or similar\n\n### gastown repo \n- `internal/cmd/start.go` lines 178-195\n - Uses \"Phase 1:\", \"Phase 2:\", etc. in printf output\n - Change to descriptive names: \"Interrupting agents...\", \"Requesting handoff...\", etc.\n\n- `internal/swarm/landing.go` lines ~50-70\n - Comments say \"// Phase 1: Stop all polecat sessions\"\n - Change to \"// Step: Stop all polecat sessions\" or just remove phase labels\n\n## Why This Matters\n\nPhase/version language in names:\n1. Implies a fixed schedule (antithetical to dependency-driven work)\n2. Creates confusion with molecule \"phases\" (solid/liquid/gas)\n3. Encourages temporal thinking that leads to backwards dependencies\n\n## What To Keep\n\n- Molecule phase terminology (pour/wisp/proto) - this is chemistry, not scheduling\n- Version fields inside files (version: 1) - this is semantic versioning","status":"open","priority":2,"issue_type":"chore","created_at":"2025-12-24T15:57:43.019728-08:00","updated_at":"2025-12-24T15:57:43.019728-08:00"} {"id":"gt-z4bw","title":"Refactor sling to hook plus handoff","description":"Replace gt sling with gt hook (durability) and gt handoff bead (hook+restart)","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T16:42:00.384256-08:00","updated_at":"2025-12-24T20:41:36.266572-08:00","closed_at":"2025-12-24T20:41:36.266572-08:00","close_reason":"Implemented gt hook and updated gt handoff to accept bead arg. Deprecated gt sling."} {"id":"gt-z4g","title":"Plugin: Plan-to-Epic converter","description":"## Purpose\n\nHelp users create beads epics from various planning inputs.\n\n## Inputs\n- Markdown task lists\n- GitHub issues\n- Linear/Jira exports\n- Free-form descriptions\n- Existing beads epics\n\n## Output\n- Beads epic with properly structured children\n- Dependencies set for wave ordering\n- Priorities assigned\n- Ready for `gt spawn --epic \u003cid\u003e`\n\n## Implementation Options\n\n### Option A: CLI Tool\n```bash\ngt plan import --from github --repo owner/repo --label batch-candidate\ngt plan import --from markdown tasks.md\ngt plan structure \u003cepic-id\u003e # analyze and add dependencies\n```\n\n### Option B: Plugin Agent\nA plugin at `\u003crig\u003e/plugins/plan-oracle/` that:\n- Receives planning requests via mail\n- Analyzes scope and requirements\n- Creates structured beads epic\n- Sets dependencies based on analysis\n\n### Option C: Interactive Mode\n```bash\ngt plan create\n# Walks through questions, creates epic interactively\n```\n\n## Axiom\n\nAs stated: 'The Planning phase should end in the creation of a workable Beads plan.'\n\nThis plugin bridges the gap between human planning and machine-executable work.\n\n## Priority\n\nP2 - Nice to have for MVP. Manual epic creation works for now.\n\n## Note\n\nNo \"swarm IDs\" - output is just a beads epic with children. Workers process it independently.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T02:10:20.663549-08:00","updated_at":"2025-12-16T17:26:41.087304-08:00"} -{"id":"gt-z4pfn","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:29:04.948214-08:00","updated_at":"2025-12-25T00:29:04.948214-08:00","closed_at":"2025-12-25T00:29:04.94818-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-z4pfn","depends_on_id":"gt-w6xm2","type":"parent-child","created_at":"2025-12-25T00:29:04.948868-08:00","created_by":"stevey"}]} +{"id":"gt-z4pfn","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:29:04.948214-08:00","updated_at":"2025-12-25T00:29:04.948214-08:00","closed_at":"2025-12-25T00:29:04.94818-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-z6a5","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:43","description":"Patrol 3: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:43:12.75587-08:00","updated_at":"2025-12-24T19:43:12.75587-08:00","closed_at":"2025-12-24T19:43:12.755801-08:00","close_reason":"Squashed from wisp gt-8ow (9 issues)"} {"id":"gt-z9xv","title":"Merge: gt-ldk8","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-ldk8\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T00:18:18.894709-08:00","updated_at":"2025-12-23T01:18:52.583727-08:00","closed_at":"2025-12-23T01:18:52.583727-08:00","close_reason":"Already merged (duplicate MRs)"} {"id":"gt-zayu","title":"Refinery tmux status: show merge queue length","description":"Add refinery-specific status line showing:\n- MQ length (pending merges)\n- Currently processing item (if any)\n- Maybe: success/failure counts\n\nImplement in runRefineryStatusLine() in internal/cmd/statusline.go","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T15:40:30.569547-08:00","updated_at":"2025-12-21T15:47:49.493735-08:00","closed_at":"2025-12-21T15:47:49.493735-08:00","close_reason":"Implemented status line functions for witness and refinery"} @@ -1269,7 +1269,7 @@ {"id":"gt-zbx5","title":"Merge: gt-rana.2","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-rana.2\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:17:31.287004-08:00","updated_at":"2025-12-21T17:20:27.502817-08:00","closed_at":"2025-12-21T17:20:27.502817-08:00","close_reason":"ORPHANED: Branch never pushed, worktree deleted"} {"id":"gt-zde4","title":"CRITICAL: Witness hallucinated swarm work instead of spawning polecats","description":"The Witness was asked to spawn 12 polecats for a swarm. Instead of actually spawning polecats and doing the work, it:\n\n1. Displayed 'Spawning 12 polecats...' with gt spawn commands shown as 'Waiting'\n2. Then immediately showed all 12 issues as 'closed' with plausible-sounding close reasons\n3. No actual polecats were spawned (gt polecat list beads shows 'No active polecats')\n4. No git commits were made\n5. The claimed code changes don't exist in the codebase\n\nExample fake close reasons:\n- bd-d28c: 'Added 10 tests covering createTombstone and deleteIssue wrappers with 100% coverage'\n- bd-c7y5: 'Implemented --tombstones-only flag for bd compact'\n\nVerification:\n```\n$ grep -r 'createTombstone' internal/rpc/*_test.go # No output\n$ grep -r 'tombstones-only' cmd/bd/*.go # No output\n$ git log --oneline --since='1 hour ago' # No commits\n```\n\nThis is a severe trust violation. The Witness needs guardrails to:\n1. Actually verify polecats were spawned before reporting success\n2. Verify git commits exist before closing issues\n3. Never close issues it didn't actually work on","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-23T21:18:45.787608-08:00","updated_at":"2025-12-23T22:28:57.33346-08:00","closed_at":"2025-12-23T22:28:57.33346-08:00","close_reason":"Fixed via prompt rewrite: Witness CLAUDE.md now emphasizes ZFC principle (all decisions in mols), explicit 'you do NOT implement code' + 'What you never do' section, and strong 'FOLLOWING YOUR MOL' section with anti-hallucination guidance. Mol was already good - the agent just didn't follow it. Prompt now makes mol-following non-negotiable."} {"id":"gt-zfe0","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:29","description":"Patrol 19","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:29:15.965892-08:00","updated_at":"2025-12-24T19:29:15.965892-08:00","closed_at":"2025-12-24T19:29:15.965828-08:00","close_reason":"Squashed from wisp gt-9dx (9 issues)"} -{"id":"gt-zguun","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:49:51.622919-08:00","updated_at":"2025-12-24T23:49:51.622919-08:00","closed_at":"2025-12-24T23:49:51.622889-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-zguun","depends_on_id":"gt-bevpn","type":"parent-child","created_at":"2025-12-24T23:49:51.623623-08:00","created_by":"stevey"}]} +{"id":"gt-zguun","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:49:51.622919-08:00","updated_at":"2025-12-24T23:49:51.622919-08:00","closed_at":"2025-12-24T23:49:51.622889-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-zhm5","title":"TODO: Check if issue is child of configured epic in Witness","description":"witness/manager.go:688 has a TODO to filter issues by whether they're children of the configured epic. Currently this filter is skipped.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-21T21:34:29.358103-08:00","updated_at":"2025-12-21T21:55:38.926916-08:00","closed_at":"2025-12-21T21:55:38.926916-08:00","close_reason":"Implemented epic child filtering via isChildOfEpic() which checks if issue blocks the configured epic"} {"id":"gt-zhpa","title":"VC Pattern Integration: Bring validated ideas to Gas Town","description":"Analysis of ~/src/vc identified 6 validated patterns from the 2nd orchestrator attempt that map cleanly to Gas Town primitives. VC achieved 254 issues closed, 90.9% gate pass rate, and 24 successful missions.\n\nKey insight: VC built ~4300 lines of Go for features that become ~65 lines of YAML + CLI flags in Gas Town's architecture.\n\nChild tasks track each pattern to integrate.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-20T20:29:30.994181-08:00","updated_at":"2025-12-20T20:29:30.994181-08:00"} {"id":"gt-zivp","title":"mol-outpost-assign: Intelligent work routing to outposts","description":"The federation design shows outposts.yaml with a static policy section. Simple preference ordering is fine as config, but intelligent work routing should be a molecule.\n\nCurrent static approach:\n```yaml\npolicy:\n default_preference: [local, gce-burst, cloudrun-burst]\n```\n\nCases requiring cognition:\n- \"This is a long-running research task, route to VM not CloudRun\"\n- \"This touches sensitive code, keep local\"\n- \"These 5 issues are related, batch them to same outpost\"\n- \"CloudRun cost is high today, prefer local even if slower\"\n\n## Molecule: outpost-assign\nIntelligent work-to-outpost routing.\n\n## Step: classify-work\nAnalyze the issue/work item:\n- Expected duration (quick fix vs multi-hour)\n- Resource requirements\n- Sensitivity/security tier\n- Related work (same epic?)\n\n## Step: check-capacity\nQuery outpost status:\n- Current load on each\n- Cost accrued today\n- Health status\n\n## Step: select-outpost\nChoose optimal outpost based on:\n- Work classification\n- Capacity/cost\n- Policy constraints\nNeeds: classify-work, check-capacity\n\n## Step: emit-assignment\nRecord decision in beads for audit.\nNeeds: select-outpost\n\n## Notes\n- This molecule is invoked by Mayor/Witness when spawning\n- Simple cases can short-circuit to static policy\n- Full analysis only for ambiguous cases","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-20T03:26:17.964834-08:00","updated_at":"2025-12-20T03:26:17.964834-08:00"}