diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index adeb1b02..571dbf77 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -8,15 +8,12 @@ {"id":"gt-051em","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All green","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:30:03.465327-08:00","updated_at":"2025-12-25T19:30:03.465327-08:00","closed_at":"2025-12-25T19:30:03.465279-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T19:47:21.757756-08:00","updated_at":"2025-12-25T21:01:03.711755-08:00","closed_at":"2025-12-25T21:01:03.711755-08:00","close_reason":"Old prompting and configuration tasks. Templates and beads-sync work.","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-08mw2","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T14:19:00.702712-08:00","updated_at":"2025-12-25T14:19:00.702712-08:00","closed_at":"2025-12-25T14:19:00.702682-08:00"} {"id":"gt-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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:24:34.371414-08:00","updated_at":"2025-12-26T13:19:57.496645-08:00","closed_at":"2025-12-26T13:19:57.496645-08:00","close_reason":"Implemented: crew sessions now use respawn-pane to start Claude directly, replacing shell"} -{"id":"gt-09mag","title":"Digest: mol-deacon-patrol","description":"Patrol 12: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:44:36.232841-08:00","updated_at":"2025-12-25T13:44:36.232841-08:00","closed_at":"2025-12-25T13:44:36.232809-08:00"} {"id":"gt-0a90","title":"Add gt hook command (wrapper for bd hook)","description":"Add a thin wrapper command `gt hook` that calls `bd hook` to inspect what's pinned to an agent's hook.\n\n## Usage\n\n```bash\ngt hook # Show what's on current agent's hook\ngt hook --agent deacon # Show Deacon's hook\ngt hook --agent gastown/furiosa # Show polecat's hook\n```\n\n## Implementation\n\nThin wrapper in gt that:\n1. Determines current agent identity\n2. Calls `bd hook [--agent \u003cname\u003e]`\n3. Formats output for gt context\n\n## Why gt wrapper?\n\n- Consistent with gt ecosystem (gt mail, gt status, etc.)\n- Can add gt-specific context (session status, etc.)\n- Easier discovery for gt users\n\n## Related\n\n- bd hook command (implemented by Dave)\n- Chemistry UX design: gastown/mayor/rig/docs/chemistry-design-changes.md","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T02:37:02.429497-08:00","updated_at":"2025-12-22T02:37:02.429497-08:00"} {"id":"gt-0asj","title":"Merge: gt-5af.5","description":"branch: polecat/Scabrous\ntarget: main\nsource_issue: gt-5af.5\nrig: gastown","status":"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"} {"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"} {"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"} @@ -25,6 +22,7 @@ {"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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.506634-08:00","updated_at":"2025-12-25T15:52:57.846135-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","dependencies":[{"issue_id":"gt-0l20","depends_on_id":"gt-o29j","type":"blocks","created_at":"2025-12-23T01:41:54.591628-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:57.846135-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-0lf5j","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Quick cycle, all quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:05:04.269001-08:00","updated_at":"2025-12-25T17:05:04.269001-08:00","closed_at":"2025-12-25T17:05:04.268971-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-0m6tl","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:50:41.588767-08:00","updated_at":"2025-12-25T10:50:41.588767-08:00","closed_at":"2025-12-25T10:50:41.588725-08:00"} {"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-0odbt","title":"Replace WaitForClaudeReady with gt peek for steady-state agent observation","description":"## Problem\n\nWaitForClaudeReady uses regex to detect Claude's prompt, which is a ZFC violation.\n\n## Architectural Fix\n\n**Bootstrap (ZFC violation acceptable):**\nDuring cold town startup, no AI is available. Regex to get Deacon online is acceptable.\n\n**Steady State (proper ZFC):**\nOnce any agent is running, AI should observe AI:\n- Deacon starting polecats → Deacon uses gt peek\n- Deacon restarting → Mayor watches via gt peek\n- Mayor restarting → Deacon watches via gt peek\n\n## Implementation\n\n1. Keep WaitForClaudeReady for daemon bootstrap only\n2. Update gt deacon trigger-pending to use gt peek\n3. Document bootstrap vs steady-state distinction\n","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-25T12:34:32.712726-08:00","updated_at":"2025-12-25T12:40:48.082699-08:00","closed_at":"2025-12-25T12:40:48.082699-08:00","close_reason":"Implemented gt deacon pending for ZFC-compliant AI observation. Added bootstrap vs steady-state documentation."} {"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"}]} @@ -40,7 +38,6 @@ {"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-14w3x","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Green","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:36:04.72988-08:00","updated_at":"2025-12-25T19:36:04.72988-08:00","closed_at":"2025-12-25T19:36:04.729833-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-15p32","title":"Digest: mol-deacon-patrol","description":"Patrol 15: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:12.609172-08:00","updated_at":"2025-12-25T13:45:12.609172-08:00","closed_at":"2025-12-25T13:45:12.609139-08:00"} {"id":"gt-161rp","title":"Digest: mol-deacon-patrol","description":"P5: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:56:02.332455-08:00","updated_at":"2025-12-25T19:56:02.332455-08:00","closed_at":"2025-12-25T19:56:02.332424-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T23:18:01.446702-08:00","updated_at":"2025-12-25T21:01:16.815149-08:00","closed_at":"2025-12-25T21:01:16.815149-08:00","close_reason":"Doctor checks exist. bd doctor runs comprehensive health checks.","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"} @@ -73,7 +70,6 @@ {"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-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-1wum6","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:18:51.752483-08:00","updated_at":"2025-12-25T19:18:51.752483-08:00","closed_at":"2025-12-25T19:18:51.752438-08:00"} {"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"} {"id":"gt-1xsbn","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 4: routine, healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:22:42.747113-08:00","updated_at":"2025-12-26T13:22:42.747113-08:00","closed_at":"2025-12-26T13:22:42.747076-08:00","close_reason":"Squashed from 9 wisps"} {"id":"gt-1y0e","title":"🤝 HANDOFF: Investigate beads-sync divergence (221 files)","description":"## Context\n\ngt doctor now detects orphaned code on beads-sync branch. Running it shows:\n\n beads-sync-orphans: 221 file(s) on beads-sync not in main\n\nThis is in the gastown repo (checking from crew/max).\n\n## Background\n\n- Earlier today we recovered orphaned mail migration code lost in merge 96c773f\n- Recently simplified architecture: all workers use mayor/rig/.beads (redirects)\n- This simplification may have caused beads-sync branch to diverge unexpectedly\n\n## Investigation Steps\n\n1. From crew/max run: git diff main..beads-sync --stat\n2. Check if beads-sync should even exist anymore (was for multi-clone sync)\n3. If obsolete with redirect architecture, consider deleting it\n4. If it has legitimate changes, cherry-pick or merge to main\n\n## Key Question\n\nWith all workers using mayor/rig/.beads via redirects, is beads-sync still needed?\n\n## Commands\n\ngit log main..beads-sync --oneline | head -20\ngit diff main..beads-sync -- *.go | head -100","status":"open","priority":2,"issue_type":"message","assignee":"gastown-crew-max","created_at":"2025-12-20T22:38:49.242099-08:00","updated_at":"2025-12-20T22:38:49.242099-08:00","labels":["from:gastown/crew/max","thread:thread-0e1b148bc2d7"]} @@ -82,10 +78,10 @@ {"id":"gt-202k","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:44","description":"Patrol 6: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:44:33.079069-08:00","updated_at":"2025-12-24T19:44:33.079069-08:00","closed_at":"2025-12-24T19:44:33.078998-08:00","close_reason":"Squashed from wisp gt-44v (9 issues)"} {"id":"gt-21lh","title":"Polecat template: remove redundant 'Finding Work' section","description":"The 'Finding Work' section (bd ready, bd list, bd show) is general-purpose guidance that may not apply to polecats who are spawned with specific work. Either remove for polecats or clarify this is for discovering additional work during execution.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-23T16:56:55.230827-08:00","updated_at":"2025-12-23T17:09:08.855653-08:00","closed_at":"2025-12-23T17:09:08.855653-08:00","close_reason":"Not applicable - polecat template has no 'Finding Work' section","dependencies":[{"issue_id":"gt-21lh","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.772763-08:00","created_by":"daemon"}]} {"id":"gt-22ng","title":"Create activity aggregator","description":"Component that connects to multiple rig beads daemons and merges their activity into a unified view. Polls GetMutations and GetWorkerStatus from each rig, groups by rig/worker. Handles connection failures gracefully.\n\nBLOCKED BY (Beads rig):\n- bd-gqxd: Enrich MutationEvent with title and assignee\n- bd-l13p: Add GetWorkerStatus RPC endpoint\n- bd-0oqz: Add GetMoleculeProgress RPC endpoint","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:27:08.249115-08:00","updated_at":"2025-12-23T16:27:53.545952-08:00","dependencies":[{"issue_id":"gt-22ng","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:30.603166-08:00","created_by":"daemon"}]} -{"id":"gt-22xxi","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:48:54.44952-08:00","updated_at":"2025-12-25T15:48:54.44952-08:00","closed_at":"2025-12-25T15:48:54.449488-08:00"} {"id":"gt-23ic","title":"Merge: gt-h6eq.3","description":"branch: polecat/dag\ntarget: main\nsource_issue: gt-h6eq.3\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:51:16.586184-08:00","updated_at":"2025-12-23T12:22:23.424175-08:00","closed_at":"2025-12-23T12:22:23.424175-08:00","close_reason":"Merged to main in gt-h6eq swarm"} {"id":"gt-24dv","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T16:16:45.95679-08:00","updated_at":"2025-12-25T01:33:00.593236-08:00","closed_at":"2025-12-25T01:33:00.593236-08:00","close_reason":"Test pollution cleanup"} {"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-24yjs","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:19:27.295939-08:00","updated_at":"2025-12-25T19:19:27.295939-08:00","closed_at":"2025-12-25T19:19:27.295886-08:00"} {"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-29k50","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T05:01:26.919989-08:00","updated_at":"2025-12-25T05:01:26.919989-08:00","closed_at":"2025-12-25T05:01:26.919958-08:00","close_reason":"Squashed from 8 wisps"} @@ -109,11 +105,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"} {"id":"gt-2rfvq","title":"list: static mailing list lookup","description":"Static mailing list support via config file.\n\n## Deliverables\n\n1. Load lists from ~/gt/config/lists.json\n2. Parse list:name syntax in router\n3. Fan-out at send time (same as @group)\n4. Error handling for unknown list names\n\n## Example\n```bash\ngt mail send list:oncall -s \"Alert\" -m \"System down\"\n# Expands to: mayor/, gastown/witness, beads/witness\n# Creates 3 message copies\n```\n\n## Dependencies\n- Config directory (gt-i6jvc)\n\n## Acceptance\n- list:oncall resolves to configured members\n- Each member gets own message copy\n- Unknown list returns clear error","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:52:05.784822-08:00","updated_at":"2025-12-26T14:52:05.784822-08:00","dependencies":[{"issue_id":"gt-2rfvq","depends_on_id":"gt-i6jvc","type":"blocks","created_at":"2025-12-26T14:53:05.44199-08:00","created_by":"daemon"}]} {"id":"gt-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-2uos6","title":"Digest: mol-deacon-patrol","description":"Patrol 4: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:17:09.139846-08:00","updated_at":"2025-12-26T17:17:09.139846-08:00","closed_at":"2025-12-26T17:17:09.139809-08:00","dependencies":[{"issue_id":"gt-2uos6","depends_on_id":"gt-wisp-l15","type":"parent-child","created_at":"2025-12-26T17:17:09.140624-08:00","created_by":"stevey"}]} {"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-2x351","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 12 agents healthy, no lifecycle requests, 1 potential orphan (bd-llfl). Mayor has 6 pending messages.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:07:26.400051-08:00","updated_at":"2025-12-25T20:07:26.400051-08:00","closed_at":"2025-12-25T20:07:26.400011-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-2x8ch","title":"Digest: mol-deacon-patrol","description":"Patrol 14: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:00.922407-08:00","updated_at":"2025-12-25T13:45:00.922407-08:00","closed_at":"2025-12-25T13:45:00.922369-08:00"} {"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-2yx57","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Core healthy. Noted Mayor escalation (rig mismatch) - not Deacon work.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:30:49.807463-08:00","updated_at":"2025-12-25T19:30:49.807463-08:00","closed_at":"2025-12-25T19:30:49.80742-08:00","close_reason":"Squashed from 8 wisps"} @@ -129,14 +128,11 @@ {"id":"gt-39ej","title":"Digest: mol-deacon-patrol","description":"Patrol #1: No issues found. All 6 agents healthy. No orphans.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:14:35.83023-08:00","updated_at":"2025-12-24T22:14:35.83023-08:00","closed_at":"2025-12-24T22:14:35.830195-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-3a4","title":"Add gt decommission command for clean swarm/worker shutdown","description":"Single command to cleanly shut down a swarm and its workers: cancel swarm, stop sessions, optionally remove polecats. E.g. gt decommission gt-hw6 --cleanup","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-18T11:33:37.217682-08:00","updated_at":"2025-12-18T11:38:55.092852-08:00","closed_at":"2025-12-18T11:38:55.092852-08:00"} {"id":"gt-3abj","title":"go install may fail for new users - private repo","description":"README shows:\n go install github.com/steveyegge/gastown/cmd/gt@latest\n\nThis fails on fresh install if repo is private:\n fatal: could not read Username for 'https://github.com'\n\nREADME should either:\n1. Note the repo is private (if applicable)\n2. Add SSH config instructions\n3. Or provide 'build from source' alternative\n\nThis will be the first command new users try.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-24T12:51:42.10651-08:00","updated_at":"2025-12-24T13:04:50.728551-08:00","closed_at":"2025-12-24T13:04:50.728551-08:00","close_reason":"Wrong issue: README needs to show homebrew/npm install, not go install. Filing correct issue.","dependencies":[{"issue_id":"gt-3abj","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:05.187114-08:00","created_by":"daemon"}]} -{"id":"gt-3b4jp","title":"Digest: mol-deacon-patrol","description":"Patrol 14: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:18:57.76815-08:00","updated_at":"2025-12-25T10:18:57.76815-08:00","closed_at":"2025-12-25T10:18:57.768117-08:00"} -{"id":"gt-3be8","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:10:11.929736-08:00","updated_at":"2025-12-24T21:10:11.929736-08:00","closed_at":"2025-12-24T21:10:11.929709-08:00"} {"id":"gt-3cns","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:30:43.27929-08:00","updated_at":"2025-12-25T01:33:00.912315-08:00","closed_at":"2025-12-25T01:33:00.912315-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-3cns.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-3cns\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:30:43.381581-08:00","updated_at":"2025-12-23T22:30:43.579835-08:00","closed_at":"2025-12-23T22:30:43.579835-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-3cns.1","depends_on_id":"gt-3cns","type":"parent-child","created_at":"2025-12-23T22:30:43.382002-08:00","created_by":"daemon"}]} {"id":"gt-3cu","title":"Default polecat names: Mad Max theme instead of AdjectiveNoun","description":"Current default naming for new polecats uses AdjectiveNoun convention.\nSince rigs already provide namespacing, we can use more thematic names.\n\nSuggestion: Use Mad Max / Fury Road character and vehicle names as defaults.\nExamples: Furiosa, Nux, Slit, Morsov, Toast, Rictus, Warboy, etc.\n\nCould also include:\n- War Rig parts: Guzzler, Tanker, Pursuit\n- Citadel roles: Imperator, Blackthumb, Organic\n- Wasteland terms: Chrome, Witness, Shiny\n\nImplementation:\n- Add name generator in internal/polecat/ or similar\n- Use when --create flag is used without explicit name\n- Cycle through pool to avoid duplicates within a rig","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-17T14:50:43.252922-08:00","updated_at":"2025-12-17T14:50:43.252922-08:00"} {"id":"gt-3dgv","title":"Digest: mol-deacon-patrol","description":"Patrol #17","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:25:59.591357-08:00","updated_at":"2025-12-24T22:25:59.591357-08:00","closed_at":"2025-12-24T22:25:59.591325-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-3ep6","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:24:17.54048-08:00","updated_at":"2025-12-25T18:49:24.290245-08:00","closed_at":"2025-12-25T11:29:12.578083-08:00"} -{"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-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"} {"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-3jlpf","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 7: routine, healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:24:26.295967-08:00","updated_at":"2025-12-26T13:24:26.295967-08:00","closed_at":"2025-12-26T13:24:26.29593-08:00","close_reason":"Squashed from 9 wisps"} @@ -146,7 +142,6 @@ {"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"}]} -{"id":"gt-3nlte","title":"Digest: mol-deacon-patrol","description":"Patrol 18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:57:27.343464-08:00","updated_at":"2025-12-26T14:57:27.343464-08:00","closed_at":"2025-12-26T14:57:27.343415-08:00"} {"id":"gt-3ns5","title":"Polecat template: clarify work status commands (bd list vs gt mol status)","description":"Template shows 'bd list --status=in_progress' for checking work, but polecats should probably use 'gt mol status' instead (or in addition). Clarify the right approach for polecats to check their current work assignment.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:46.909036-08:00","updated_at":"2025-12-23T17:09:02.149035-08:00","closed_at":"2025-12-23T17:09:02.149035-08:00","close_reason":"Completed in commit 1931ec7","dependencies":[{"issue_id":"gt-3ns5","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.371341-08:00","created_by":"daemon"}]} {"id":"gt-3oyn","title":"Blocked issues: gt-um6q, gt-lz13, gt-5xph depend on missing beads features","description":"Template/docs updates blocked on: bd-nurq (bd mol current), bd-29fb (bd close --continue). These gastown issues should be marked blocked on the beads issues once cross-rig deps work.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T00:19:12.532683-08:00","updated_at":"2025-12-23T00:19:12.532683-08:00"} {"id":"gt-3p77","title":"Implement gt watch command scaffold","description":"Basic bubbletea TUI scaffold for 'gt watch' command. Discovers rigs, connects to daemons, renders placeholder view. Foundation for the full activity feed TUI.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:27:09.800586-08:00","updated_at":"2025-12-23T16:27:09.800586-08:00","dependencies":[{"issue_id":"gt-3p77","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:30.683781-08:00","created_by":"daemon"}]} @@ -189,17 +184,16 @@ {"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-4461m","title":"Digest: mol-deacon-patrol","description":"P13","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:25:50.896379-08:00","updated_at":"2025-12-26T14:25:50.896379-08:00","closed_at":"2025-12-26T14:25:50.896341-08:00","close_reason":"Squashed from 9 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-462is","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:08:57.775267-08:00","updated_at":"2025-12-25T16:08:57.775267-08:00","closed_at":"2025-12-25T16:08:57.775236-08:00"} {"id":"gt-46wdl","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 15: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:28:50.299576-08:00","updated_at":"2025-12-26T13:28:50.299576-08:00","closed_at":"2025-12-26T13:28:50.29954-08:00","close_reason":"Squashed from 9 wisps"} {"id":"gt-47q5v","title":"Digest: mol-deacon-patrol","description":"Patrol 6: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:43:08.050036-08:00","updated_at":"2025-12-25T13:43:08.050036-08:00","closed_at":"2025-12-25T13:43:08.050005-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-4b80k","title":"Digest: mol-deacon-patrol","description":"P18: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:14:54.386241-08:00","updated_at":"2025-12-25T20:14:54.386241-08:00","closed_at":"2025-12-25T20:14:54.386191-08:00"} {"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-4cit0","title":"Digest: mol-deacon-patrol","description":"Patrol 2: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:41:29.957459-08:00","updated_at":"2025-12-25T13:41:29.957459-08:00","closed_at":"2025-12-25T13:41:29.957426-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-4d12b","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, 3 polecats idle, no orphans, 6 Mayor messages pending","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:43:02.596441-08:00","updated_at":"2025-12-25T20:43:02.596441-08:00","closed_at":"2025-12-25T20:43:02.596381-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-4d98p","title":"Improve looksLikeFormulaName heuristic in mol_bond","description":"The looksLikeFormulaName() function in mol_bond.go uses simple heuristics that could have edge cases:\n\nCurrent checks:\n- starts with 'mol-'\n- contains '.formula'\n- contains path separators\n\nPotential improvements:\n- Check if operand matches issue ID format (prefix-hash pattern)\n- Consider formula search paths when determining if something could be a formula\n- Add --formula flag to explicitly mark an operand as a formula name\n\nLow priority since edge cases are rare in practice.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-25T16:50:56.748428-08:00","updated_at":"2025-12-25T16:50:56.748428-08:00","dependencies":[{"issue_id":"gt-4d98p","depends_on_id":"gt-8tmz.25","type":"discovered-from","created_at":"2025-12-25T16:50:56.749737-08:00","created_by":"daemon"}]} -{"id":"gt-4ebqj","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:27:36.140334-08:00","updated_at":"2025-12-25T07:27:36.140334-08:00","closed_at":"2025-12-25T07:27:36.140305-08:00"} {"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":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-21T15:36:45.013475-08:00","updated_at":"2025-12-25T21:01:40.913009-08:00","closed_at":"2025-12-25T21:01:40.913009-08:00","close_reason":"Low priority bugs or cosmetic issues. Not blocking autonomous patrols."} {"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)"} @@ -236,6 +230,7 @@ {"id":"gt-53w6","title":"Witness MVP: Automated Polecat Lifecycle","description":"Implement the Witness agent - per-rig 'pit boss' that manages polecat lifecycles.\n\nThe Witness enables hands-free swarming by automating:\n- Spawning polecats for ready work\n- Monitoring worker health\n- Processing shutdown requests \n- Cleaning up worktrees when done\n- Escalating stuck workers to Mayor\n\nWithout Witness, humans must manually spawn, monitor, and kill each polecat.\n\n## Core Loop\n\n```\nwhile True:\n # Handle pending shutdowns\n for polecat in polecats where state == pending_shutdown:\n verify git clean\n kill session \n remove worktree\n delete branch\n \n # Spawn for ready work\n ready = bd ready --parent=\u003cepic\u003e if epic else bd ready\n for issue in ready:\n if active_workers \u003c max_workers:\n gt spawn --issue \u003cid\u003e\n \n # Check worker health\n for polecat in active polecats:\n if stuck (no progress for 30 min):\n nudge or escalate\n \n sleep 60\n```\n\n## Blocking Bugs to Fix\n- gt-dsfi: handoff deadlock\n- gt-n7z7: refinery foreground race condition\n- gm-c6b: mail coordination (town vs rig beads)","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-20T03:13:45.075731-08:00","updated_at":"2025-12-20T09:32:16.49265-08:00","closed_at":"2025-12-20T09:32:16.49265-08:00"} {"id":"gt-54kn","title":"Test: New Router","description":"Testing bd create for mail","status":"tombstone","priority":2,"issue_type":"message","assignee":"gastown-alpha","created_at":"2025-12-20T21:57:10.688733-08:00","updated_at":"2025-12-25T14:12:42.293448-08:00","labels":["from:mayor/","thread:thread-d2d956870d58"],"deleted_at":"2025-12-25T14:12:42.293448-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} {"id":"gt-55kx","title":"Build activity stream component","description":"Bubbletea component showing scrollable activity stream for a selected worker. Shows mutation events with timestamps, symbols, and issue titles. Displayed when user expands/selects a worker.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:27:17.091004-08:00","updated_at":"2025-12-23T16:27:17.091004-08:00","dependencies":[{"issue_id":"gt-55kx","depends_on_id":"gt-3p77","type":"blocks","created_at":"2025-12-23T16:27:38.640018-08:00","created_by":"daemon"},{"issue_id":"gt-55kx","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:30.857389-08:00","created_by":"daemon"}]} +{"id":"gt-56et5","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:32:21.006139-08:00","updated_at":"2025-12-25T13:32:21.006139-08:00","closed_at":"2025-12-25T13:32:21.006104-08:00"} {"id":"gt-56fv","title":"Merge: gt-5af.2","description":"branch: polecat/Doof\ntarget: main\nsource_issue: gt-5af.2\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T17:36:24.884931-08:00","updated_at":"2025-12-19T18:30:24.049689-08:00","closed_at":"2025-12-19T18:30:24.049694-08:00"} {"id":"gt-56po","title":"Merge: gt-g44u.2","description":"branch: polecat/Doof\ntarget: main\nsource_issue: gt-g44u.2\nrig: gastown","status":"closed","priority":0,"issue_type":"merge-request","created_at":"2025-12-19T16:03:10.388461-08:00","updated_at":"2025-12-19T17:35:39.482476-08:00","closed_at":"2025-12-19T17:35:39.482476-08:00"} {"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"} @@ -265,6 +260,7 @@ {"id":"gt-5e50a","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Green","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:35:02.300302-08:00","updated_at":"2025-12-25T19:35:02.300302-08:00","closed_at":"2025-12-25T19:35:02.300256-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-5fa3i","title":"Digest: mol-deacon-patrol","description":"Patrol 1: inbox empty, Mayor OK, 2 witnesses, 2 refineries healthy, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:40:42.819905-08:00","updated_at":"2025-12-25T13:40:42.819905-08:00","closed_at":"2025-12-25T13:40:42.819873-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-5ft3","title":"Merge: gt-99a","description":"branch: polecat/Slit\ntarget: main\nsource_issue: gt-99a\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T16:18:15.329358-08:00","updated_at":"2025-12-19T18:26:14.101606-08:00","closed_at":"2025-12-19T17:48:44.671082-08:00"} +{"id":"gt-5ggc","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:16:30.523256-08:00","updated_at":"2025-12-24T21:16:30.523256-08:00","closed_at":"2025-12-24T21:16:30.523221-08:00"} {"id":"gt-5gkd","title":"Refinery Engineer: Role prompting and CLAUDE.md","description":"Create refinery/CLAUDE.md with Chief Merge Engineer role context. Include:\n- Role identity and responsibilities\n- Decision authority (merge order, test frequency, binary rebuilds)\n- Communication patterns (Witness, Deacon)\n- Session lifecycle (handoff bead protocol)\n- Key commands reference","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T18:09:06.423153-08:00","updated_at":"2025-12-25T20:38:42.304673-08:00","closed_at":"2025-12-25T20:38:42.304673-08:00","close_reason":"Already implemented: refinery.md.tmpl exists, CLAUDE.md exists at ~/gt/gastown/refinery/, gt prime detects RoleRefinery","dependencies":[{"issue_id":"gt-5gkd","depends_on_id":"gt-ktal","type":"blocks","created_at":"2025-12-19T18:09:39.217523-08:00","created_by":"daemon"}]} {"id":"gt-5glf","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:32:00.941101-08:00","updated_at":"2025-12-25T01:33:00.30359-08:00","closed_at":"2025-12-25T01:33:00.30359-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-5glf.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-5glf\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:32:01.027297-08:00","updated_at":"2025-12-24T21:32:01.207106-08:00","closed_at":"2025-12-24T21:32:01.207106-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-5glf.1","depends_on_id":"gt-5glf","type":"parent-child","created_at":"2025-12-24T21:32:01.027725-08:00","created_by":"daemon"}]} @@ -276,13 +272,12 @@ {"id":"gt-5jew1","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Mayor OK, 11 sessions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:25.170528-08:00","updated_at":"2025-12-25T20:36:25.170528-08:00","closed_at":"2025-12-25T20:36:25.170475-08:00","close_reason":"Squashed from 8 wisps"} {"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-5m5cd","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:30:35.506276-08:00","updated_at":"2025-12-25T13:30:35.506276-08:00","closed_at":"2025-12-25T13:30:35.506242-08:00"} -{"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-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"} {"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"} {"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-5rg5c","title":"Digest: mol-deacon-patrol","description":"P6: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:10:59.624402-08:00","updated_at":"2025-12-25T20:10:59.624402-08:00","closed_at":"2025-12-25T20:10:59.62435-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-23T03:47:50.514096-08:00","updated_at":"2025-12-25T21:00:01.948459-08:00","closed_at":"2025-12-25T21:00:01.948459-08:00","close_reason":"Nice-to-have polish features. Not essential for autonomous patrols."} -{"id":"gt-5tgtj","title":"Digest: mol-deacon-patrol","description":"Patrol 17","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:53:10.654504-08:00","updated_at":"2025-12-25T20:53:10.654504-08:00","closed_at":"2025-12-25T20:53:10.654458-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"} {"id":"gt-5uf3","title":"Patrol step: check parked molecules for unblock","description":"Add patrol step to Deacon for checking parked molecules:\n\n```yaml\n- step: check-parked-molecules\n action: |\n For each molecule with:\n - status: in_progress\n - assignee: null\n - has step with external: blocked_by\n Check if external deps are now satisfied.\n If yes: spawn polecat to resume the molecule.\n```\n\nThis automates the resume process - no manual intervention needed when\nupstream dependencies ship.\n\nPart of cross-project dependency system.\nSee: docs/cross-project-deps.md\n\nDepends on: gt-in3x (spawn --continue)\nPriority: P3 (future automation, not required for launch)","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-21T22:39:25.167767-08:00","updated_at":"2025-12-25T21:00:25.995107-08:00","closed_at":"2025-12-25T21:00:25.995107-08:00","close_reason":"P3 polish features. Not essential for v0.1.","dependencies":[{"issue_id":"gt-5uf3","depends_on_id":"gt-in3x","type":"blocks","created_at":"2025-12-21T22:39:44.777023-08:00","created_by":"daemon"}]} {"id":"gt-5v29","title":"Add 'wit' alias for witness command","description":"ref works as alias for refinery, but wit doesn't work for witness. Add Aliases: []string{\"wit\"} to witnessCmd.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-20T23:11:53.453692-08:00","updated_at":"2025-12-20T23:11:53.453692-08:00"} @@ -310,13 +305,11 @@ {"id":"gt-6exub","title":"Digest: mol-deacon-patrol","description":"Patrol: no callbacks, no polecats, all agents healthy, cleaned 2 orphan processes + 2 stale locks","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:14:24.79552-08:00","updated_at":"2025-12-26T15:14:24.79552-08:00","closed_at":"2025-12-26T15:14:24.795482-08:00","close_reason":"Squashed from 9 wisps"} {"id":"gt-6k02h","title":"Digest: mol-deacon-patrol","description":"Patrol 6: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:16:49.768628-08:00","updated_at":"2025-12-25T10:16:49.768628-08:00","closed_at":"2025-12-25T10:16:49.768596-08:00","close_reason":"Squashed from 8 wisps"} {"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"} {"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-6lwa7","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:50:55.047597-08:00","updated_at":"2025-12-25T13:50:55.047597-08:00","closed_at":"2025-12-25T13:50:55.047565-08:00","close_reason":"Squashed from 8 wisps"} {"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":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T01:53:37.309868-08:00","updated_at":"2025-12-25T18:49:24.38233-08:00","closed_at":"2025-12-25T11:13:30.882007-08:00","close_reason":"Orphaned - furiosa polecat not running"} -{"id":"gt-6n4as","title":"Digest: mol-deacon-patrol","description":"Patrol 17: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:19:40.852613-08:00","updated_at":"2025-12-25T10:19:40.852613-08:00","closed_at":"2025-12-25T10:19:40.852577-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"} {"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"} @@ -347,6 +340,7 @@ {"id":"gt-7921","title":"Add await-work and plugin-run steps to mol-refinery-patrol","description":"## Context\n\nThe mol-refinery-patrol needs two additional steps:\n\n### 1. await-work (Decision Point)\n\nNot just 'wait for signal' but a crossroads:\n- Check for pending signals (mail, nudge, human)\n- Check plugin gates (any plugins need to run?)\n- Check maintenance schedule (daily/weekly due?)\n- Evaluate context and decide next action\n\nPosition: Between burn-or-loop and inbox-check (the loop point)\n\n### 2. plugin-run (Like Deacon)\n\nRefinery needs plugin support for:\n- **Monitors**: Flag PRs touching sensitive code\n- **Gates**: Block merges under certain conditions\n- **Schedulers**: Reorder queue based on priority/urgency\n- **Maintenance**: Weekly cleanup, audits, stats\n- **Audits**: Log merge statistics, track patterns\n\nPosition: After queue-scan, before process-branch\n\n## Implementation\n\nUpdate RefineryPatrolMolecule() in builtin_molecules.go to include:\n- await-work step with decision tree\n- plugin-run step with gate types\n\n## Related\n- gt-7920 (original mol-refinery-patrol)\n- docs/deacon-plugins.md (existing plugin model)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T13:24:11.267237-08:00","updated_at":"2025-12-22T13:24:11.267237-08:00"} {"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":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-22T13:24:26.533247-08:00","updated_at":"2025-12-25T21:00:13.188266-08:00","closed_at":"2025-12-25T21:00:13.188266-08:00","close_reason":"Future features. Dynamic wisp modification, step hooks, polecat mood are post-v0.1."} {"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"} {"id":"gt-7bty9","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All clear - inbox empty, agents healthy, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:31:29.106816-08:00","updated_at":"2025-12-25T15:31:29.106816-08:00","closed_at":"2025-12-25T15:31:29.106782-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-7emkr","title":"Digest: mol-deacon-patrol","description":"P14: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:13:35.668266-08:00","updated_at":"2025-12-25T20:13:35.668266-08:00","closed_at":"2025-12-25T20:13:35.668211-08:00"} {"id":"gt-7ftgy","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All healthy, mayor handoff observed (not for deacon)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:34:10.890209-08:00","updated_at":"2025-12-25T18:34:10.890209-08:00","closed_at":"2025-12-25T18:34:10.890156-08:00","close_reason":"Squashed from 8 wisps"} @@ -355,7 +349,9 @@ {"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-7i6i6","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All green","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:31:52.727074-08:00","updated_at":"2025-12-25T19:31:52.727074-08:00","closed_at":"2025-12-25T19:31:52.727029-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-7ihm8","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:23:56.486493-08:00","updated_at":"2025-12-25T16:23:56.486493-08:00","closed_at":"2025-12-25T16:23:56.486459-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"} +{"id":"gt-7iu4u","title":"Digest: mol-deacon-patrol","description":"Patrol 12: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:18:28.987479-08:00","updated_at":"2025-12-25T10:18:28.987479-08:00","closed_at":"2025-12-25T10:18:28.98744-08:00"} {"id":"gt-7jh8r","title":"Digest: mol-deacon-patrol","description":"P7","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:24:01.882704-08:00","updated_at":"2025-12-26T14:24:01.882704-08:00","closed_at":"2025-12-26T14:24:01.88266-08:00","close_reason":"Squashed from 9 wisps"} {"id":"gt-7lt","title":"gt mail send should tmux-notify recipient","description":"## Problem\n\nWhen mail is sent via gt mail send, the recipient session does not get a tmux notification. In Python Gas Town (PGT), mail delivery triggers a tmux display-message or similar notification so the agent knows mail arrived.\n\n## Expected Behavior\n\nWhen gt mail send \u003caddr\u003e is called:\n1. Mail is delivered to recipient inbox\n2. If recipient has an active tmux session, send notification\n3. Notification should be visible (display-message or bell)\n\n## Current Behavior\n\nMail is delivered but no notification. Agent has to poll inbox to discover new mail.\n\n## Impact\n\n- Agents miss time-sensitive messages\n- Heartbeat pokes from daemon will not wake agents\n- Coordination is slower (polling vs push)\n\n## Implementation Notes\n\nAfter successful mail delivery, check if recipient has active session:\n- gt session list can identify active sessions\n- tmux display-message or send-keys can notify\n- Could inject a visible prompt like \"[MAIL] New message from \u003csender\u003e\"\n\n## Reference\n\nCheck PGT implementation for how it handles this.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T12:28:50.142075-08:00","updated_at":"2025-12-18T20:09:53.112902-08:00","closed_at":"2025-12-18T20:09:53.112902-08:00"} {"id":"gt-7nb3h","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All healthy, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:38:56.411245-08:00","updated_at":"2025-12-25T17:38:56.411245-08:00","closed_at":"2025-12-25T17:38:56.411194-08:00","close_reason":"Squashed from 8 wisps"} @@ -374,8 +370,8 @@ {"id":"gt-81rh4","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:18:56.391947-08:00","updated_at":"2025-12-25T16:18:56.391947-08:00","closed_at":"2025-12-25T16:18:56.391918-08:00"} {"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-83guu","title":"Digest: mol-deacon-patrol","description":"Patrol 3: 14 sessions healthy, no changes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:28:52.67281-08:00","updated_at":"2025-12-25T19:28:52.67281-08:00","closed_at":"2025-12-25T19:28:52.672746-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-83i43","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:27:22.093434-08:00","updated_at":"2025-12-25T13:27:22.093434-08:00","closed_at":"2025-12-25T13:27:22.093403-08:00"} {"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-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"} {"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-87jz","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\n## The Christmas Ornament Shape\n\nThis molecule uses dynamic bonding to create inspection arms per-polecat:\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌─────┘ │ └─────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n ┌───┴───┐ ┌─┴─┐ ┌───┴───┐\n │inbox │ │sur│ │aggreg │\n │refnry │ │vey│ │save │\n │load │ └─┬─┘ │summary│\n └───────┘ │ │contxt │\n │ │loop │\n ┌─────────┼─────────┐ └───────┘\n │ │ │\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n │ │ │\n ┌──┴──┐ ┌──┴──┐ ┌──┴──┐\n │cap │ │cap │ │cap │\n │ass │ │ass │ │ass │\n │dec │ │dec │ │dec │\n │exec │ │exec │ │exec │\n └──┬──┘ └──┬──┘ └──┬──┘\n │ │ │\n └─────────┴─────────┘\n │\n ⬣ base (cleanup)\n```\n\n## Phases\n\n### PREFLIGHT (fixed steps)\n1. inbox-check - Process lifecycle requests, help messages\n2. check-refinery - Ensure MQ is alive and processing\n3. load-state - Read persistent state (nudge counts, etc.)\n\n### DISCOVERY (spawns dynamic arms)\n4. survey-workers - List polecats, bond mol-polecat-arm per polecat\n5. run-plugins - Bond mol-plugin-runner for each witness plugin\n\n### CLEANUP (gate + fixed steps)\n6. aggregate - GATE: WaitsFor all arms + plugins to complete\n7. save-state - Persist nudge counts, action log\n8. generate-summary - Create digest content\n9. context-check - Check if context is high\n10. burn-or-loop - Squash/burn wisp, then loop or exit\n\n## Dynamic Arms\n\nEach polecat gets mol-polecat-arm bonded as a wisp child:\n- capture - Capture tmux output\n- assess - Categorize state (working/idle/error/done)\n- load-history - Get nudge counts for this polecat\n- decide - Apply nudge matrix\n- execute - Take action (nudge/kill/escalate/none)\n\nArms run in PARALLEL. The aggregate step waits for all to complete.\n\n## Activity Feed\n\nThis design enables real-time visibility:\n\n```\n[14:32:08] + patrol-x7k.arm-ace bonded (5 steps)\n[14:32:09] → patrol-x7k.arm-ace.capture in_progress\n[14:32:10] ✓ patrol-x7k.arm-ace.capture completed\n[14:32:14] ✓ patrol-x7k.arm-ace.decide completed (action: nudge-1)\n[14:32:17] ✓ patrol-x7k.arm-ace COMPLETE\n```\n\n## Storage\n\n- Wisp storage: .beads-wisp/ (ephemeral, gitignored)\n- Persistent state: witness handoff bead (nudge counts, etc.)\n- Digests: Squashed summaries in permanent beads\n\n## Dependencies\n\n- bd-xo1o: Dynamic Molecule Bonding epic (in beads rig)\n - bd mol bond with variable substitution\n - WaitsFor directive for fanout gates\n - Activity feed query\n\nLabels: [template, christmas-ornament]","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-23T16:23:42.025546-08:00","updated_at":"2025-12-25T20:59:35.095723-08:00","closed_at":"2025-12-25T20:59:35.095723-08:00","close_reason":"Design captured in mol-witness-patrol.formula.json. Implementation tracked in gt-p3v5n (Witness Arm Bonding)."} @@ -383,20 +379,19 @@ {"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"} {"id":"gt-8bes","title":"Review: Witness patrol template changes (gt-h1n5)","description":"Polecat rictus implemented significant witness.md.tmpl changes: banners, wisp-based execution, handoff bead attachment, loop-or-exit, patrol summary. Review for correctness and consistency with deacon pattern.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T19:57:38.242943-08:00","updated_at":"2025-12-23T19:57:38.242943-08:00"} {"id":"gt-8bx","title":"Adaptive backoff for daemon heartbeat","description":"Track agent responsiveness and adjust heartbeat frequency.\n\n## Per-Agent State\n\n```go\ntype AgentBackoff struct {\n BaseInterval time.Duration // 60s default\n CurrentInterval time.Duration // grows when busy\n MaxInterval time.Duration // 10min cap\n ConsecutiveMiss int // pokes with no response\n}\n```\n\n## Strategy Options\n\n- **Fixed**: Always 60s (current, simple)\n- **Geometric**: 60s → 90s → 135s → 202s (factor 1.5)\n- **Exponential**: 60s → 120s → 240s (factor 2, aggressive)\n\n## Recovery\n\nWhen agent responds (runs a command):\n- Reset ConsecutiveMiss to 0\n- Return to BaseInterval immediately\n\n## Benefits\n\n- Reduces noise for busy agents\n- Saves resources during quiet periods\n- Still catches stuck agents (max interval cap)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T14:19:33.083844-08:00","updated_at":"2025-12-19T12:09:31.613912-08:00","closed_at":"2025-12-19T12:09:31.613912-08:00","dependencies":[{"issue_id":"gt-8bx","depends_on_id":"gt-bfd","type":"blocks","created_at":"2025-12-18T14:19:46.912289-08:00","created_by":"daemon"}]} +{"id":"gt-8cl77","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:04:04.492413-08:00","updated_at":"2025-12-25T11:04:04.492413-08:00"} {"id":"gt-8dry","title":"Add role-specific subcommands that delegate to core commands (agent UX)","description":"## Problem\n\nAgents naturally guess command patterns like:\n- `gt witness nudge \u003cpolecat\u003e`\n- `gt polecat nudge \u003cname\u003e`\n- `gt crew restart \u003cmember\u003e`\n\nBut these don't exist - the actual commands are:\n- `gt nudge \u003csession\u003e \u003cmessage\u003e`\n- `gt polecat reset \u003cname\u003e`\n\nThis creates friction in agent UX. Agents shouldn't have to memorize the 'correct' command structure.\n\n## Proposal\n\nAdd subcommands to each role that delegate to core commands with argument reordering:\n\n```\ngt witness nudge furiosa \"Start working\"\n → gt nudge gt-gastown-furiosa \"Start working\"\n\ngt polecat nudge gastown/furiosa \"Check mail\"\n → gt nudge gt-gastown-furiosa \"Check mail\"\n\ngt crew nudge gastown/max \"Wake up\"\n → gt nudge gt-crew-gastown-max \"Wake up\"\n```\n\n## Benefits\n\n1. **Discoverable**: Agents explore `gt witness --help` and find nudge\n2. **Lenient**: Multiple valid ways to express the same intent\n3. **Role-contextual**: Commands under the role namespace feel natural\n4. **Extensible**: Pattern works for future subcommands (status, reset, etc.)\n\n## Implementation\n\nEach role command (witness, polecat, crew, refinery) gets thin wrapper subcommands:\n\n```go\n// In witness.go\nwitnessCmd.AddCommand(\u0026cobra.Command{\n Use: \"nudge \u003cpolecat\u003e \u003cmessage\u003e\",\n Short: \"Nudge a polecat (delegates to gt nudge)\",\n RunE: func(cmd *cobra.Command, args []string) error {\n session := formatSession(rig, args[0])\n return runNudge(session, args[1])\n },\n})\n```\n\n## Future Candidates\n\nOther subcommands to add as role-specific aliases:\n- `gt polecat status \u003cname\u003e` (already exists, good pattern)\n- `gt witness check \u003cpolecat\u003e` → trigger a manual check\n- `gt refinery merge \u003cmr-id\u003e` → process specific MR\n- `gt crew send \u003cmember\u003e \u003cmessage\u003e` → mail to crew member","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T14:05:17.303809-08:00","updated_at":"2025-12-25T21:00:15.897378-08:00","closed_at":"2025-12-25T21:00:15.897378-08:00","close_reason":"Nice-to-have polish features. Not essential for v0.1."} {"id":"gt-8dv","title":"CLI: plugin commands (list, status)","description":"Add gt plugins \u003crig\u003e to list plugins and gt plugin status \u003cname\u003e to check plugin state. Simple directory scan of \u003crig\u003e/plugins/.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-15T22:53:02.694926-08:00","updated_at":"2025-12-15T23:17:06.594328-08:00","dependencies":[{"issue_id":"gt-8dv","depends_on_id":"gt-axz","type":"blocks","created_at":"2025-12-15T22:53:17.413809-08:00","created_by":"daemon"}]} {"id":"gt-8fdec","title":"Digest: mol-deacon-patrol","description":"Patrol 4: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:10:02.355677-08:00","updated_at":"2025-12-25T20:10:02.355677-08:00","closed_at":"2025-12-25T20:10:02.355622-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-8gvn","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:28","description":"Patrol 18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:28:54.929537-08:00","updated_at":"2025-12-24T19:28:54.929537-08:00","closed_at":"2025-12-24T19:28:54.929472-08:00","close_reason":"Squashed from wisp gt-u1g (9 issues)"} {"id":"gt-8h4","title":"Pinned Beads: Ongoing concerns and anchors","description":"Pinned beads represent persistent concerns that do not close traditionally. Stay out of bd ready. Examples: Monitor production, Weekly syncs. Implementation: pinned: true field on bead.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-18T18:08:11.314086-08:00","updated_at":"2025-12-23T11:38:55.694161-08:00","closed_at":"2025-12-23T11:38:55.694161-08:00","close_reason":"Superseded by gt-h6eq (Pinned beads architecture implementation)"} {"id":"gt-8j8e","title":"gt mail send: --priority flag should work like bd mail send","description":"UX inconsistency: gt mail send passes flags that bd mail send doesn't support.\n\n## Root Cause\n\nrouter.go line 42 passes `--priority` to bd:\n```go\nargs = append(args, \"--priority\", fmt.Sprintf(\"%d\", beadsPriority))\n```\n\nBut `bd mail send` only has `--urgent` (boolean), not `--priority`.\n\n## Fix Options\n\n1. Add `--priority` flag to `bd mail send` (preferred - more expressive)\n2. Change router to only use `--urgent` when priority=0\n\n## Also Affected\n\n- `--type` flag (line 46) - bd mail send doesn't have this\n- `--thread-id` flag (line 51) - bd mail send doesn't have this \n- `--reply-to` flag (line 56) - bd mail send doesn't have this\n\nThe router assumes bd mail send has features it doesn't have.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-18T21:31:05.486487-08:00","updated_at":"2025-12-19T12:07:28.918346-08:00","closed_at":"2025-12-19T12:07:28.918346-08:00"} -{"id":"gt-8kr7v","title":"Digest: mol-deacon-patrol","description":"P12: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:13:03.071841-08:00","updated_at":"2025-12-25T20:13:03.071841-08:00","closed_at":"2025-12-25T20:13:03.07179-08:00"} {"id":"gt-8lnxr","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:48:21.22967-08:00","updated_at":"2025-12-25T10:48:21.22967-08:00","closed_at":"2025-12-25T10:48:21.229635-08:00"} {"id":"gt-8lz","title":"Comprehensive help text and examples","description":"Improve help text with examples and cross-references.\n\n## Improvements\n\n### 1. Examples Section\nAdd to Long description:\n```go\nvar spawnCmd = \u0026cobra.Command{\n Long: `Spawn a polecat with work assignment.\n\nExamples:\n gt spawn gastown/Toast --issue gt-abc\n gt spawn gastown --issue gt-def # auto-select polecat\n gt spawn gastown/Nux -m \"Fix the tests\" # free-form task`,\n}\n```\n\n### 2. Cross-References\nReference related commands:\n```\nSee also:\n gt polecat list List available polecats\n gt session attach Attach to spawned session\n```\n\n### 3. Flag Descriptions\nMore detail on flags:\n```go\ncmd.Flags().StringVar(\u0026issue, \"issue\", \"\", \n \"Beads issue ID to assign. The polecat will work on this issue.\")\n```\n\n### 4. Common Workflows\nAdd workflow docs to gt --help:\n```\nCommon Workflows:\n Start a swarm:\n gt swarm preflight\n gt swarm create gastown --epic gt-abc --worker Toast --worker Nux --start\n gt refinery start gastown\n \n Check status:\n gt status\n gt swarm status \u003cid\u003e\n```\n\n## Files to Update\nAll internal/cmd/*.go files\n\n## Acceptance Criteria\n- [ ] All commands have Examples\n- [ ] Related commands cross-referenced\n- [ ] Flags have detailed descriptions\n- [ ] Root help shows workflows","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T14:48:53.303016-08:00","updated_at":"2025-12-16T16:07:37.391195-08:00"} {"id":"gt-8mbz","title":"Town Doctor molecule for harness health checks","description":"Create a Town Doctor molecule that any Gas Town agent can run to diagnose and repair harness issues.\n\n## Concept\n\nInstead of just `gt doctor` as a CLI command with hardcoded checks, create a **molecule** (checklist workflow) that:\n- Any agent (Mayor, Witness, Polecat) can instantiate\n- Walks the agent through diagnostic steps\n- Agent uses judgment to fix issues found\n- Works as a structured troubleshooting guide\n\n## Why a Molecule?\n\n1. **Agent-driven**: The agent running it becomes \"the doctor\" temporarily\n2. **Extensible**: Add new checks by updating the molecule, not code\n3. **Contextual**: Agent can reason about issues, not just run scripts\n4. **Self-healing**: Agent can fix problems it finds, not just report them\n\n## Proposed Checks (molecule steps)\n\n1. Verify harness structure (mayor/, .beads/, CLAUDE.md exist)\n2. Validate config files (town.json, rigs.json parse correctly)\n3. Check beads health (bd doctor, redirect validity)\n4. Verify git state (clean working tree, proper remotes)\n5. Check rig integrity (each registered rig exists, has config.json)\n6. Validate agent clones (mayor/rig/, refinery/rig/ exist and are valid)\n7. Check for orphaned worktrees/branches\n8. Verify daemon state (if running)\n\n## Integration\n\n- `gt doctor` could instantiate the molecule for the current agent\n- Or agent can run `bd ready` and pick up doctor tasks when prioritized\n- Results logged to beads for audit trail\n\n## Related\n\n- gt-cr9: Harness Design \u0026 Documentation (completed)\n- Molecules design in architecture.md","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-19T13:03:22.688851-08:00","updated_at":"2025-12-25T21:00:15.960416-08:00","closed_at":"2025-12-25T21:00:15.960416-08:00","close_reason":"Nice-to-have polish features. Not essential for v0.1."} {"id":"gt-8nmy","title":"Update Deacon template to emphasize staying in ~/gt/deacon directory","description":"The Deacon template should instruct the agent to stay in ~/gt/deacon/ as much as possible, and always return there after any excursion. This prevents issues with identity detection (mail, mol status) which depend on cwd.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T13:30:27.969826-08:00","updated_at":"2025-12-23T13:30:27.969826-08:00"} {"id":"gt-8os8","title":"Work on ga-p6r: Add handoff protocol to spawn priming. En...","description":"Work on ga-p6r: Add handoff protocol to spawn priming. Ensure polecats receive handoff context when spawned. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T22:57:59.334003-08:00","updated_at":"2025-12-19T23:22:07.076974-08:00","closed_at":"2025-12-19T23:22:07.076974-08:00"} {"id":"gt-8pcb","title":"Plugin/molecule catalog integration design","description":"Two currently independent systems:\n1. Disk-based plugins (~~/gt/plugins/) - Deacon patrol extensions\n2. Molecule catalog (protos in beads) - bd pour/wisp/bond\n\nInvestigate integration points:\n- User-contributed molecules bonded to catalog\n- Dynamic molecule attachment during execution (e.g., 'attach security sniffer because we noticed condition X')\n- How plugins could contribute protos\n- How protos could trigger plugins\n\nNot blocking launch. Future design investigation.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-22T21:52:47.897048-08:00","updated_at":"2025-12-22T21:52:47.897048-08:00"} -{"id":"gt-8q4qb","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:49:44.632044-08:00","updated_at":"2025-12-26T16:49:44.632044-08:00","closed_at":"2025-12-26T16:49:44.632005-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-8q4qb","depends_on_id":"gt-wisp-1g7","type":"parent-child","created_at":"2025-12-26T16:49:44.632961-08:00","created_by":"stevey"}]} {"id":"gt-8r7","title":"Enhance Mayor CLAUDE.md with GGT milestone tracking","description":"Update ~/ai/CLAUDE.md (Mayor startup context) with:\n\n1. GGT Self-Hosting Milestone section\n - Track progress toward gt replacing town\n - Key blockers: gt-h5n (merge queue), gt-974 (daemon)\n - What \"self-hosting\" means (GGT working on itself)\n\n2. Recent Architecture Decisions\n - Engineer = role, Refinery = place\n - Merge queue in Beads (not branch discovery)\n - Session restart protocol\n\n3. Transition Plan\n - Current: use town commands (PGT)\n - Target: use gt commands (GGT)\n - Switch criteria: gt-b1g closed\n\nKeep it concise - Mayor context should be quick to scan.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T23:12:07.260653-08:00","updated_at":"2025-12-16T23:12:07.260653-08:00","dependencies":[{"issue_id":"gt-8r7","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:12:15.124842-08:00","created_by":"daemon"}]} {"id":"gt-8tmz","title":"Molecule Algebra: Work Composition DSL","description":"Implement the molecule algebra - a declarative language for composing, transforming, and executing structured work. Enables mechanical composition without AI.\n\nThe Three Phases: Rig → Cook → Run\n\n- **Rig**: Source-level composition (formula YAML with extends/compose)\n- **Cook**: Instantiation (formula → proto → mol/wisp)\n- **Run**: Execution (agents complete steps)\n\nTwo Composition Operators:\n- **Rig** operates on formulas (source level)\n- **Bond** operates on artifacts (protos, mols, wisps)\n\nKey components:\n- Formulas: YAML source with composition rules (.formula.yaml)\n- Cook: Pre-expand macros/aspects to flat proto\n- Phase verbs (pour, wisp)\n- Bond: Artifact-level polymorphic composition\n- Composition operators (sequence, parallel, branch, loop, gate)\n- Advice operators (before, after, around - Lisp style)\n- Expansion operators (macros like Rule of Five)\n- Aspects (AOP cross-cutting concerns)\n\nSee docs/rig-cook-run.md for the lifecycle spec.\nSee docs/molecule-algebra.md for full algebra specification.\nExample formulas in .beads/formulas/","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-23T18:03:48.824827-08:00","updated_at":"2025-12-25T20:44:45.357263-08:00","closed_at":"2025-12-25T20:44:45.357263-08:00","close_reason":"Core molecule algebra complete: formulas, cook, pour/wisp, bond, advice operators, aspects, control flow, fanout gates. Remaining P3/P4 items tracked separately in gt-8y70b."} {"id":"gt-8tmz.1","title":"Phase verbs: pour and wisp commands","description":"Implement the phase transition verbs:\n- bd pour \u003cproto\u003e - instantiate as persistent mol\n- bd wisp \u003cproto\u003e - instantiate as ephemeral wisp\n- Update bd mol bond to inherit phase from target\n\nThese replace the current --wisp flag with cleaner verb semantics.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T18:03:57.280647-08:00","updated_at":"2025-12-25T01:15:11.016094-08:00","closed_at":"2025-12-25T01:15:11.016094-08:00","close_reason":"Already implemented: bd pour, bd wisp create, and bd mol bond with phase inheritance all work correctly","dependencies":[{"issue_id":"gt-8tmz.1","depends_on_id":"gt-8tmz","type":"parent-child","created_at":"2025-12-23T18:03:57.281096-08:00","created_by":"daemon"}]} @@ -458,7 +453,6 @@ {"id":"gt-93nn0","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T13:34:39.810146-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-95x","title":"Remove stale migration docs from gastown-py","description":"The gastown-py repo has migration-related documentation that is now misinformation since we have made design decisions. Remove or clearly mark as obsolete: any docs about migration paths, old architecture assumptions, or superseded designs.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-15T20:24:08.642373-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-96jv2","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T04:26:46.271877-08:00","updated_at":"2025-12-25T04:26:46.271877-08:00","closed_at":"2025-12-25T04:26:46.271841-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-96u2u","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T01:56:29.74087-08:00","updated_at":"2025-12-25T01:56:29.74087-08:00"} {"id":"gt-974","title":"Refinery background daemon mode","description":"The refinery 'gt refinery start' command only works in foreground mode (--foreground). Need to implement background daemon mode for production use.\n\nOptions:\n1. Use a separate tmux session for the refinery\n2. Implement proper daemonization\n3. Use Claude Code session for the refinery agent\n\nFor MVP, option 1 (tmux session) is probably simplest.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T22:08:04.799753-08:00","updated_at":"2025-12-19T14:27:33.858745-08:00","closed_at":"2025-12-19T14:27:33.858745-08:00"} {"id":"gt-975","title":"Molecule execution support for polecats and crew","description":"Enable agents to run bonded molecules through the full lifecycle.\n\n## The Model\n1. BOND - bd mol bond \u003ctemplate\u003e --assignee \u003cidentity\u003e\n Creates concrete issues, assigns root to agent\n\n2. DISCOVER - Agent finds assigned molecules via bd ready\n DAG structure shows unblocked steps\n\n3. WORK - Agent works through DAG, closing steps as done\n Can delegate children to lower-tier agents (haiku)\n\n4. SURVIVE - Agent dies → beads persist\n Any agent resumes from DAG state\n\n5. SUPERVISE - Witness monitors for stalled molecules\n Nudges owner or reassigns if dead\n\n## Questions to Resolve\n- Seed node terminology: seed vs root vs pole vs nucleus\n- Assignee inheritance: single owner vs delegation model\n- Stall detection: heartbeat vs activity timeout vs session monitoring\n\n## Implementation\n- Polecat startup: check for assigned molecules\n- Polecat work loop: follow molecule DAG\n- Witness: monitor molecule progress, detect stalls\n- Mayor: can assign molecules, handle escalations\n\n## Depends On\n- beads: bd mol bond command (bd-usro in beads repo)","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T16:57:01.09104-08:00","updated_at":"2025-12-21T12:02:25.133021-08:00","closed_at":"2025-12-21T12:02:25.133021-08:00","close_reason":"Implemented molecule execution support for polecats:\n\n1. spawn.go: Added MoleculeContext to work assignment mail with molecule workflow instructions\n2. prime.go: Added outputMoleculeContext() that detects molecule steps and shows progress\n3. molecule.go: Added 'gt molecule progress' command for Witness monitoring\n\nPolecats now:\n- Receive molecule-aware work assignments showing step N/M and workflow\n- See molecule context in gt prime output when working on molecule steps\n- Can follow the DAG by running 'bd ready --parent \u003croot\u003e' after each step\n\nWitnesses/Mayor can:\n- Monitor molecule progress with 'gt molecule progress \u003croot-id\u003e'\n- See completion percentage, ready/blocked steps"} {"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"} @@ -485,7 +479,9 @@ {"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":"closed","priority":3,"issue_type":"task","created_at":"2025-12-16T18:02:51.480019-08:00","updated_at":"2025-12-26T12:50:46.074423-08:00","closed_at":"2025-12-26T12:50:46.074423-08:00","close_reason":"Parent epic gt-9a2 closed as post-v0.1; tombstoning orphaned children","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":"closed","priority":3,"issue_type":"task","created_at":"2025-12-16T18:03:06.803401-08:00","updated_at":"2025-12-26T12:50:46.095627-08:00","closed_at":"2025-12-26T12:50:46.095627-08:00","close_reason":"Parent epic gt-9a2 closed as post-v0.1; tombstoning orphaned children","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":"closed","priority":3,"issue_type":"task","created_at":"2025-12-16T18:03:21.08101-08:00","updated_at":"2025-12-26T12:50:46.11671-08:00","closed_at":"2025-12-26T12:50:46.11671-08:00","close_reason":"Parent epic gt-9a2 closed as post-v0.1; tombstoning orphaned children","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-9ae69","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T13:43:08.241676-08:00","updated_at":"2025-12-25T14:12:41.853879-08:00","deleted_at":"2025-12-25T14:12:41.853879-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-9bpji","title":"Digest: mol-deacon-patrol","description":"P20: stable - handoff after 20 patrols","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:00:46.97186-08:00","updated_at":"2025-12-25T20:00:46.97186-08:00","closed_at":"2025-12-25T20:00:46.971772-08:00","close_reason":"Squashed from 8 wisps"} +{"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"} {"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-9hwkn","title":"Messaging infrastructure: lists, queues, channels","description":"Multi-recipient and broadcast messaging for Gas Town.\n\n## Phases\n\n**Phase 1 - Foundation**: Config directory, agent scanner utility\n**Phase 1 - Core**: @group, list:, queue:, --claim\n**Phase 2 - Channels**: announce:, #channel, gt channel publish\n\n## Addressing Syntax\n\n| Prefix | Resolution | Storage | Claim? |\n|--------|------------|---------|--------|\n| `@group` | Dynamic (filesystem) | Fan-out (N copies) | No |\n| `list:name` | Static config | Fan-out (N copies) | No |\n| `queue:name` | Static config | Shared (1 copy) | Yes |\n| `announce:name` | Static config | Shared (1 copy) | No |\n| `#channel` | Dynamic (tmux) | None (ephemeral) | No |","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-26T14:51:18.855183-08:00","updated_at":"2025-12-26T14:51:18.855183-08:00"} {"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"} @@ -499,7 +495,6 @@ {"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-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-9o0bf","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:38:56.364854-08:00","updated_at":"2025-12-25T16:38:56.364854-08:00","closed_at":"2025-12-25T16:38:56.364823-08:00"} {"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"} {"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":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-22T03:03:38.693983-08:00","updated_at":"2025-12-25T21:00:14.331883-08:00","closed_at":"2025-12-25T21:00:14.331883-08:00","close_reason":"Nice-to-have or covered by core patrol lifecycle work."} @@ -516,6 +511,7 @@ {"id":"gt-9zp8t","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:28:55.536366-08:00","updated_at":"2025-12-25T16:28:55.536366-08:00","closed_at":"2025-12-25T16:28:55.536331-08:00"} {"id":"gt-a07f","title":"Chemistry UX commands from Beads","description":"Waiting on Beads repo to implement chemistry UX sugar commands (bd pour, bd wisp, bd hook, --pour flag). These are nice-to-have polish items, not blockers for core functionality.\n\nSee: gastown/mayor/rig/docs/chemistry-design-changes.md","status":"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-a2lrp","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T03:36:27.960057-08:00","updated_at":"2025-12-25T03:36:27.960057-08:00","closed_at":"2025-12-25T03:36:27.960024-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-a41um","title":"Daemon must delete LIFECYCLE messages after processing","description":"## Problem\n\nCrew workers were being killed every 5 minutes.\n\n## Root Cause\n\nOld stale LIFECYCLE messages from days ago were sitting in the deacon's inbox. The daemon's ProcessLifecycleRequests() was re-finding and re-processing them every 5-minute heartbeat cycle.\n\nThe closeMessage() function in lifecycle.go calls 'gt mail delete' but failures are silent - the message stays in the inbox and gets reprocessed on the next heartbeat.\n\n## Fix Required\n\n1. Ensure closeMessage() actually deletes the message\n2. If delete fails, log the error AND mark the message as read so it's not reprocessed\n3. Consider adding a 'processed' label or moving to a processed folder\n\n## Files\n\n- internal/daemon/lifecycle.go: closeMessage() function\n- internal/daemon/lifecycle.go: ProcessLifecycleRequests() loop","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-26T17:42:52.25807-08:00","updated_at":"2025-12-26T17:44:19.87647-08:00","closed_at":"2025-12-26T17:44:19.87647-08:00","close_reason":"Fixed: delete LIFECYCLE messages before executing action, improved error logging"} {"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-a7o93","title":"Digest: mol-deacon-patrol","description":"Patrol 10: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:06.986877-08:00","updated_at":"2025-12-25T11:05:06.986877-08:00","closed_at":"2025-12-25T11:05:06.986847-08:00","close_reason":"Squashed from 8 wisps"} @@ -527,6 +523,7 @@ {"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"} {"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"} @@ -543,6 +540,7 @@ {"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-ata2f","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final cycle, all clear, handoff triggered","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:54:25.2544-08:00","updated_at":"2025-12-25T16:54:25.2544-08:00","closed_at":"2025-12-25T16:54:25.254363-08:00","close_reason":"Squashed from 8 wisps"} +{"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"} {"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-av92i","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All healthy, halfway mark","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:47:59.377355-08:00","updated_at":"2025-12-25T10:47:59.377355-08:00","closed_at":"2025-12-25T10:47:59.377318-08:00","close_reason":"Squashed from 8 wisps"} @@ -550,6 +548,7 @@ {"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-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":"closed","priority":3,"issue_type":"epic","created_at":"2025-12-15T22:52:43.614095-08:00","updated_at":"2025-12-25T21:02:06.063527-08:00","closed_at":"2025-12-25T21:02:06.063527-08:00","close_reason":"Post-v0.1 features: channels, plugins, federation, placeholder.","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-aygm5","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all clear, hook fix applied","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:16:01.0164-08:00","updated_at":"2025-12-26T17:16:01.0164-08:00","closed_at":"2025-12-26T17:16:01.01636-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-aygm5","depends_on_id":"gt-wisp-abv","type":"parent-child","created_at":"2025-12-26T17:16:01.017198-08:00","created_by":"stevey"}]} {"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-b00d7","title":"Digest: mol-deacon-patrol","description":"Patrol 12: Mayor OK, 11 sessions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:01.615713-08:00","updated_at":"2025-12-25T20:37:01.615713-08:00","closed_at":"2025-12-25T20:37:01.615654-08:00","close_reason":"Squashed from 8 wisps"} {"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"}]} @@ -561,9 +560,9 @@ {"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":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-18T18:08:12.745602-08:00","updated_at":"2025-12-25T21:02:05.071851-08:00","closed_at":"2025-12-25T21:02:05.071851-08:00","close_reason":"HOP features (Resource Beads, Timed Beads). Post-v0.1."} {"id":"gt-b5sh","title":"test-after-fix","description":"test","status":"closed","priority":2,"issue_type":"message","created_at":"2025-12-19T16:05:08.538763-08:00","updated_at":"2025-12-25T01:33:01.230553-08:00","closed_at":"2025-12-25T01:33:01.230553-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-b6qm","title":"gt spawn/crew setup should create .beads/redirect for worktrees","description":"Crew clones and polecats need a .beads/redirect file pointing to the shared beads database (../../mayor/rig/.beads). Currently:\n\n- redirect files can get deleted by git clean\n- not auto-created during gt spawn or worktree setup\n- missing redirects cause 'no beads database found' errors\n\nFound missing in: gastown/joe, beads/zoey (after git clean)\n\nFix options:\n1. gt spawn creates redirect during worktree setup\n2. gt prime regenerates missing redirects\n3. bd commands auto-detect worktree and find shared beads\n\nThis should be standard Gas Town rig configuration.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-21T17:51:11.222073-08:00","updated_at":"2025-12-21T21:16:53.518631-08:00","closed_at":"2025-12-21T21:16:53.518631-08:00","close_reason":"Fixed: crew.Add() creates redirect, gt prime regenerates missing redirects"} -{"id":"gt-b83nx","title":"Digest: mol-deacon-patrol","description":"Patrol 14: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:34.850044-08:00","updated_at":"2025-12-25T11:05:34.850044-08:00","closed_at":"2025-12-25T11:05:34.850015-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-badfi","title":"Digest: mol-deacon-patrol","description":"Patrol 16: Green","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:35:25.272732-08:00","updated_at":"2025-12-25T19:35:25.272732-08:00","closed_at":"2025-12-25T19:35:25.27268-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-bbb1","title":"Merge: gt-rana.4","description":"branch: polecat/ace\ntarget: main\nsource_issue: gt-rana.4\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:47:29.769226-08:00","updated_at":"2025-12-21T17:20:27.498389-08:00","closed_at":"2025-12-21T17:20:27.498389-08:00","close_reason":"ORPHANED: Branch never pushed, worktree deleted"} +{"id":"gt-bcjh2","title":"Digest: mol-deacon-patrol","description":"P12: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:59:20.254866-08:00","updated_at":"2025-12-25T19:59:20.254866-08:00","closed_at":"2025-12-25T19:59:20.254811-08:00"} {"id":"gt-bcwn","title":"Auto-handoff: self-cycling with guaranteed work pickup","description":"## Summary\n\nA mechanism for agents to self-cycle: send handoff mail, request Deacon to kill the process, and automatically restart to pick up the work.\n\n## Use Case\n\nUser says: `auto-handoff: gt-bug3`\n\nThe agent:\n1. Sends handoff mail documenting current state\n2. Requests Deacon to terminate the session\n3. Deacon restarts the agent in background\n4. New session picks up the handoff and continues working\n\nWhen the user returns to terminal, the old session is gone but work continues in background. User can reattach.\n\n## Key Requirements\n\n- **Guaranteed pickup**: Something in the hook and/or handoff must ensure the new session picks up the work (not just a passive \"check inbox\")\n- **Background execution**: Work continues without user presence\n- **Reattachability**: User can reconnect to see progress\n\n## Design Questions\n\n1. Can molecules help coordinate this? (e.g., molecule binds the handoff + auto-restart)\n2. What hook handles the pickup guarantee? \n3. How does Deacon know to restart vs just kill?\n4. How does user reattach to a background agent?\n\n## Related\n\n- Molecules system\n- Deacon lifecycle management\n- Handoff hooks","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T11:59:50.352286-08:00","updated_at":"2025-12-25T21:00:15.913477-08:00","closed_at":"2025-12-25T21:00:15.913477-08:00","close_reason":"Nice-to-have polish features. Not essential for v0.1."} {"id":"gt-bd02","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:06:06.94872-08:00","updated_at":"2025-12-25T01:33:01.044793-08:00","closed_at":"2025-12-25T01:33:01.044793-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-bd02.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-bd02\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:07.039702-08:00","updated_at":"2025-12-23T22:06:07.223599-08:00","closed_at":"2025-12-23T22:06:07.223599-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-bd02.1","depends_on_id":"gt-bd02","type":"parent-child","created_at":"2025-12-23T22:06:07.040075-08:00","created_by":"daemon"}]} @@ -587,6 +586,7 @@ {"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"} {"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-bz2pu","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All agents healthy, 1 orphan process cleaned, no mail","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:43:34.631017-08:00","updated_at":"2025-12-26T17:43:34.631017-08:00","closed_at":"2025-12-26T17:43:34.630981-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-bz2pu","depends_on_id":"gt-wisp-sfy","type":"parent-child","created_at":"2025-12-26T17:43:34.631758-08:00","created_by":"stevey"}]} {"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"} {"id":"gt-bzn8.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T00:20:50.504058-08:00","updated_at":"2025-12-25T01:33:00.779912-08:00","closed_at":"2025-12-25T01:33:00.779912-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-bzn8.1","depends_on_id":"gt-bzn8","type":"parent-child","created_at":"2025-12-24T00:20:50.504544-08:00","created_by":"daemon"}]} @@ -617,12 +617,11 @@ {"id":"gt-ca4v.9","title":"Check own context usage.","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Write handoff summary\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue processing\n\ninstantiated_from: mol-refinery-patrol\nstep: context-check","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T17:13:47.909098-08:00","updated_at":"2025-12-25T14:12:41.96321-08:00","dependencies":[{"issue_id":"gt-ca4v.9","depends_on_id":"gt-ca4v","type":"parent-child","created_at":"2025-12-22T17:13:47.909418-08:00","created_by":"daemon"},{"issue_id":"gt-ca4v.9","depends_on_id":"gt-ca4v.8","type":"blocks","created_at":"2025-12-22T17:13:48.621628-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T14:12:41.96321-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-cab1d","title":"Digest: mol-deacon-patrol","description":"Patrol 4: routine checks all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:21:21.999189-08:00","updated_at":"2025-12-26T16:21:21.999189-08:00","closed_at":"2025-12-26T16:21:21.99915-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-cab1d","depends_on_id":"gt-wisp-1cv","type":"parent-child","created_at":"2025-12-26T16:21:22.00002-08:00","created_by":"stevey"}]} {"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-cam3u","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T13:42:30.725012-08:00","updated_at":"2025-12-25T14:12:41.878171-08:00","deleted_at":"2025-12-25T14:12:41.878171-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-camx5","title":"Campaign: Large-Scale Work Graph Execution","description":"A Campaign is a Molecule-wrapped Epic graph ready for orchestrated execution.\n\n## Concept\n\nCampaign = Molecule + Epics + Dependency Graph + Execution Strategy\n\nKey properties:\n1. **Work graph**: Linked epics with dependency edges (possibly from different authors)\n2. **Combinators as glue**: \u003e\u003e, |, wrap define bridging/shaping between epics\n3. **Molecule shell**: Provides execution state, persistence across sessions\n4. **Witness-aware**: Can be parallelized across polecats on independent branches\n5. **Single-rig scoped**: One rig executes it (spans sessions/polecats)\n\n## The \"Maximum Speed\" Model\n\nWitness becomes a scheduler that:\n- Watches campaign progress\n- Identifies ready nodes (all dependencies satisfied)\n- Spawns/assigns polecats to ready nodes\n- Respects parallelism constraints\n- Handles failures (retry? skip? escalate?)\n\n## Where Campaign Fits in MEOW\n\nCampaign is the convergence point where work-tracking meets workflow-execution:\n- An Epic-of-Epics (work dimension)\n- A Molecule (workflow dimension)\n\n## Open Questions\n\n1. Campaign creation UX - manual wire vs declare intent?\n2. Partial completion - can you commit progress and resume?\n3. Distinct entity type or molecule with type=\"campaign\"?\n4. Cross-rig campaigns - can graph span multiple rigs?\n\n## Related\n\n- docs/formula_evolution.md - original discussion\n- gt-8tmz - molecule algebra (foundation)\n","status":"open","priority":3,"issue_type":"epic","created_at":"2025-12-26T01:00:51.274207-08:00","updated_at":"2025-12-26T01:00:51.274207-08:00"} {"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":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-18T18:07:39.665294-08:00","updated_at":"2025-12-25T21:02:05.086077-08:00","closed_at":"2025-12-25T21:02:05.086077-08:00","close_reason":"HOP features (Resource Beads, Timed Beads). Post-v0.1."} {"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"} -{"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-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-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-cgl3u","title":"Digest: mol-deacon-patrol","description":"Patrol 5: 9 sessions healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:25:56.412065-08:00","updated_at":"2025-12-25T07:25:56.412065-08:00","closed_at":"2025-12-25T07:25:56.412024-08:00","close_reason":"Squashed from 8 wisps"} {"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"} @@ -651,17 +650,17 @@ {"id":"gt-cv50l","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:44:54.902914-08:00","updated_at":"2025-12-26T14:44:54.902914-08:00","closed_at":"2025-12-26T14:44:54.902859-08:00","close_reason":"Squashed from 9 wisps"} {"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"} {"id":"gt-cwndo","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:29:00.960438-08:00","updated_at":"2025-12-25T18:29:00.960438-08:00","closed_at":"2025-12-25T18:29:00.960388-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."} {"id":"gt-cxx","title":"Swarm learning: Witness needs automated context cycling","description":"Furiosa hit 2% context during swarm work. Witness role needs automated detection of low context and should trigger session cycling before agents get stuck. Add to Witness responsibilities in prompts.md.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T01:21:49.67756-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-cxxse","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:18:31.068172-08:00","updated_at":"2025-12-25T19:18:31.068172-08:00","closed_at":"2025-12-25T19:18:31.06811-08:00"} {"id":"gt-d0a","title":"Haiku-based smart stuck detection","description":"Use Haiku to analyze tmux state when signals are ambiguous.\n\n## When to Invoke\n\nOnly as escalation tier:\n1. Keepalive is stale (\u003e 2 min)\n2. Tmux shows claude is running (not idle shell)\n3. Heuristics can't determine state\n\n## Prompt\n\nCapture last 50 lines of tmux pane, ask Haiku:\n'Is this Claude agent: WORKING | STUCK | IDLE | WAITING_FOR_HUMAN?'\n\n## Cost\n\n~$0.001 per check. At 1 check/min worst case = $0.06/hour.\nIn practice, most checks avoided by keepalive signal.\n\n## Configuration\n\n```toml\n[daemon]\nsmart_detection = true\nsmart_model = \"haiku\"\nsmart_threshold = \"2m\" # only check if stale \u003e 2min\n```","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-18T14:19:31.287215-08:00","updated_at":"2025-12-18T14:19:31.287215-08:00","dependencies":[{"issue_id":"gt-d0a","depends_on_id":"gt-bfd","type":"blocks","created_at":"2025-12-18T14:19:46.788667-08:00","created_by":"daemon"}]} {"id":"gt-d0en","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:06.620731-08:00","updated_at":"2025-12-24T22:38:06.620731-08:00","closed_at":"2025-12-24T22:38:06.620697-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-d2l13","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:28:46.06052-08:00","updated_at":"2025-12-25T13:28:46.06052-08:00","closed_at":"2025-12-25T13:28:46.060491-08:00"} {"id":"gt-d3d","title":"Design: Additional design issues (placeholder)","description":"Placeholder for additional design issues the user wants to raise and work through. Convert to specific subtasks as issues are identified.","status":"closed","priority":4,"issue_type":"epic","created_at":"2025-12-15T20:24:12.601585-08:00","updated_at":"2025-12-25T21:02:06.090336-08:00","closed_at":"2025-12-25T21:02:06.090336-08:00","close_reason":"Post-v0.1 features: channels, plugins, federation, placeholder."} {"id":"gt-d46","title":"Mail CLI: archive, purge, search, mark","description":"GGT mail CLI needs more commands for mail management.\n\n## Commands to Add\n\n### gt mail check\nCheck for new mail without full inbox display.\n```\ngt mail check [--quiet] [--inject]\n```\n- --quiet: Only output if new mail (for scripts)\n- --inject: Send notification to running session\n\n### gt mail mark\nChange read status.\n```\ngt mail mark \u003cid\u003e --read\ngt mail mark \u003cid\u003e --unread\n```\n\n### gt mail delete\nRemove message from inbox.\n```\ngt mail delete \u003cid\u003e [--force]\n```\n- Confirm unless --force\n\n### gt mail archive\nMove old/read messages to archive.\n```\ngt mail archive [--older-than DAYS] [--all-read] [--dry-run]\n```\n- Creates inbox.jsonl.archive or separate archive.jsonl\n\n### gt mail purge\nPermanently delete archived messages.\n```\ngt mail purge [--older-than DAYS] [--dry-run] [--force]\n```\n\n### gt mail search\nFind messages by content.\n```\ngt mail search \u003cquery\u003e [--from SENDER] [--subject] [--body]\n```\n\n### gt mail reply\nReply to a message.\n```\ngt mail reply \u003cid\u003e -m BODY\n```\n- Auto-sets reply_to and thread_id\n- Auto-addresses to original sender\n\n## Files to Modify\n- internal/cmd/mail.go: Add commands\n- internal/mail/mailbox.go: Add Archive(), Search(), Delete()\n\n## Acceptance Criteria\n- [ ] All commands implemented\n- [ ] Archive stores in separate file\n- [ ] Search supports regex patterns\n- [ ] Delete confirms by default","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:46:57.158136-08:00","updated_at":"2025-12-16T16:04:32.922813-08:00"} +{"id":"gt-d4es4","title":"Digest: mol-deacon-patrol","description":"Quick patrol: no messages, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:03:03.862395-08:00","updated_at":"2025-12-25T11:03:03.862395-08:00","closed_at":"2025-12-25T11:03:03.862363-08:00"} {"id":"gt-d4uwy","title":"Digest: mol-deacon-patrol","description":"Patrol 9: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:17:37.59045-08:00","updated_at":"2025-12-25T10:17:37.59045-08:00","closed_at":"2025-12-25T10:17:37.590417-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-d5tgv","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Mayor OK, 11 sessions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:31.187594-08:00","updated_at":"2025-12-25T20:36:31.187594-08:00","closed_at":"2025-12-25T20:36:31.187552-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-d7i","title":"gt session capture: Support positional line count argument","description":"Make 'gt session capture gastown/Toast 50' work.\n\nCurrently requires: gt session capture gastown/Toast -n 50\nShould also accept: gt session capture gastown/Toast 50\n\nAgent UX principle: commands should work the way agents guess they work.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T22:28:44.291285-08:00","updated_at":"2025-12-19T01:33:49.860862-08:00","closed_at":"2025-12-19T01:33:49.860862-08:00"} @@ -670,10 +669,10 @@ {"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":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-23T02:37:03.754926-08:00","updated_at":"2025-12-26T13:09:27.302022-08:00","closed_at":"2025-12-26T13:09:27.302022-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps"} {"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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T23:02:20.400818-08:00","updated_at":"2025-12-25T21:00:51.079963-08:00","closed_at":"2025-12-25T21:00:51.079963-08:00","close_reason":"Stale refinery/engineer tasks. Role templates and prompting are complete.","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"} {"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"}]} +{"id":"gt-de043","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:55:15.421427-08:00","updated_at":"2025-12-26T13:55:15.421427-08:00","closed_at":"2025-12-26T13:55:15.421387-08:00"} {"id":"gt-dft6a","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All green - halfway mark","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:32:55.926182-08:00","updated_at":"2025-12-25T19:32:55.926182-08:00","closed_at":"2025-12-25T19:32:55.926125-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-dh65","title":"Add gate checking to Deacon patrol loop","description":"Integrate gate checking into Deacon's patrol cycle.\n\n## Patrol Integration\n```go\nfunc (d *Deacon) checkGates(ctx context.Context) {\n gates, _ := d.store.ListOpenGates(ctx)\n \n for _, gate := range gates {\n // Check timeout\n if time.Since(gate.CreatedAt) \u003e gate.Timeout {\n d.notifyWaiters(gate, \"timeout\")\n d.closeGate(gate, \"timed out\")\n continue\n }\n \n // Check condition\n if d.checkCondition(gate.AwaitType, gate.AwaitID) {\n d.notifyWaiters(gate, \"cleared\")\n d.closeGate(gate, \"condition met\")\n }\n }\n}\n```\n\n## Moved from beads\nOriginally bd-is6m. Deacon is in gastown, not beads.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:19:06.768752-08:00","updated_at":"2025-12-23T12:19:06.768752-08:00"} {"id":"gt-dich","title":"gt handoff deadlock at handoff.go:125","description":"When running 'gt handoff -m \"message\"' after successful MR submit, go panics with 'fatal error: all goroutines are asleep - deadlock\\!' at handoff.go:125. The shutdown request still appears to be sent successfully but the command crashes. Stack trace shows issue is in runHandoff select statement.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-21T17:51:18.441808-08:00","updated_at":"2025-12-21T17:51:18.441808-08:00"} @@ -683,6 +682,7 @@ {"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-drg6z","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:28:15.633079-08:00","updated_at":"2025-12-25T13:28:15.633079-08:00","closed_at":"2025-12-25T13:28:15.633045-08:00"} {"id":"gt-drp5","title":"mol-ready-work: graceful GitHub/label handling","description":"## Summary\n\nmol-ready-work assumes:\n- GitHub repo exists with gh CLI configured\n- Labels 'untriaged' and 'triaged' exist\n\nShould handle gracefully:\n1. No GitHub repo (beads-only project) → skip GH backlogs\n2. Missing labels → skip that backlog tier, don't error\n3. gh CLI not authenticated → warn and skip GH backlogs\n\n## Implementation\nAdd checks in scan-backlogs step:\n```bash\n# Check if gh is available and authenticated\nif gh auth status \u0026\u003e/dev/null; then\n # scan GH backlogs\nfi\n```\n\n## Parent\nPart of gt-tnca (mol-ready-work epic)","status":"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"}]} {"id":"gt-ds3h3","title":"gt mol status: role detection fails from polecat directory","description":"When running 'gt mol status' from a polecat's worktree directory (e.g., ~/gt/gastown/polecats/furiosa), the role detection incorrectly returns 'mayor' instead of 'gastown/furiosa'.\n\n## Root Cause\nThe detectRole() function in prime.go calculates relPath from townRoot (~gt) to cwd (~/gt/gastown/polecats/furiosa), giving 'gastown/polecats/furiosa'. It then checks parts[0] == 'mayor' but 'gastown' != 'mayor', so it falls through to rig detection where it treats 'gastown' as a rig name.\n\nHowever, the code then looks for parts[1] == 'polecats' but the actual check is parts[1] == 'polecats' which should work...\n\n## Actual Issue\nNeed to debug further - the hook file IS created correctly by spawn, but gt mol status can't find it because it's looking for the wrong agent identity.\n\n## Expected\nRunning from ~/gt/gastown/polecats/furiosa should detect:\n- Role: polecat\n- Rig: gastown \n- Polecat: furiosa\n- Agent identity: gastown/furiosa\n\n## Actual\n- Role: mayor\n- Agent identity: mayor\n\nThis prevents polecats from seeing their slung work via gt mol status.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-25T01:55:54.680601-08:00","updated_at":"2025-12-25T02:00:43.560153-08:00","closed_at":"2025-12-25T02:00:43.560153-08:00","close_reason":"Not a bug - GT_ROLE env var from parent process was overriding cwd detection. When polecat runs in its own session (no inherited GT_ROLE), role detection works correctly."} {"id":"gt-dsfi","title":"gt handoff: Deadlock in waitForRetirement","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-20T01:11:33.44686-08:00","updated_at":"2025-12-20T03:52:11.203656-08:00","closed_at":"2025-12-20T03:52:11.203656-08:00"} @@ -697,6 +697,7 @@ {"id":"gt-e1r","title":"CLI: rig commands (add, list, show, remove)","description":"GGT needs rig management commands.\n\nMissing Commands:\n- gt rig add \u003cgit-url\u003e [--name NAME] - Add rig to workspace\n- gt rig list - List all rigs with status\n- gt rig show \u003crig\u003e - Show detailed rig info\n- gt rig remove \u003crig\u003e - Remove a rig\n\nPGT Reference: gastown-py/src/gastown/cli/rig_cmd.py\n\nCurrent State:\n- gt init creates rig structure but no ongoing management\n- Rig discovery in internal/rig/manager.go but not exposed via CLI","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T14:46:33.23951-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-e1y","title":"Worker prompting: Beads write access","description":"Add beads write access section to polecat AGENTS.md.template.\n\n## Beads Access Section for Prompting\n\n```markdown\n## Beads Access\n\nYou have **full beads access** - create, update, and close issues.\n\n### Quick Reference\n\n```bash\n# View work\nbd ready # Issues ready (no blockers)\nbd list # All open issues\nbd show \u003cid\u003e # Issue details\n\n# Create issues\nbd create --title=\"Fix bug\" --type=bug --priority=2\nbd create --title=\"Add feature\" --type=feature\n\n# Update issues\nbd update \u003cid\u003e --status=in_progress # Claim work\nbd close \u003cid\u003e # Mark complete\n\n# Sync (required before merge!)\nbd sync # Commit beads changes to git\n```\n\n### When to Create Issues\n\nCreate beads issues when you discover work that:\n- Is outside your current task scope\n- Would benefit from tracking\n- Should be done by someone else\n\n**Good examples**:\n```bash\nbd create --title=\"Race condition in auth\" --type=bug --priority=1\nbd create --title=\"Document API rate limits\" --type=task --priority=3\n```\n\n**Don't create for**:\n- Tiny fixes you can do in 2 minutes\n- Vague \"improvements\" with no scope\n- Work already tracked elsewhere\n\n### Beads Sync Protocol\n\n**CRITICAL**: Always sync beads before merging!\n\n```bash\nbd sync # Commits beads changes\ngit add .beads/\ngit commit -m \"beads: sync\"\n```\n\nIf you forget to sync, beads changes are lost when session ends.\n```\n\n## Implementation\n\nAdd to AGENTS.md.template polecat section.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T19:47:18.459363-08:00","updated_at":"2025-12-25T21:01:03.741857-08:00","closed_at":"2025-12-25T21:01:03.741857-08:00","close_reason":"Old prompting and configuration tasks. Templates and beads-sync work.","dependencies":[{"issue_id":"gt-e1y","depends_on_id":"gt-l3c","type":"blocks","created_at":"2025-12-15T19:47:35.81183-08:00","created_by":"daemon"}]} {"id":"gt-e1zbl","title":"Digest: mol-deacon-patrol","description":"Patrol #21: All agents healthy, no lifecycle requests, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:23:18.586973-08:00","updated_at":"2025-12-25T20:23:18.586973-08:00","closed_at":"2025-12-25T20:23:18.586919-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-e38xm","title":"Digest: mol-deacon-patrol","description":"Patrol complete: cleaned 2 orphaned processes, 3 stale locks, all agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:10:28.628935-08:00","updated_at":"2025-12-26T17:10:28.628935-08:00","closed_at":"2025-12-26T17:10:28.628889-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-e38xm","depends_on_id":"gt-wisp-4uw","type":"parent-child","created_at":"2025-12-26T17:10:28.629752-08:00","created_by":"stevey"}]} {"id":"gt-e3gc1","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:15:10.866237-08:00","updated_at":"2025-12-25T19:15:10.866237-08:00","closed_at":"2025-12-25T19:15:10.866184-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-e3ya","title":"Remove redundant gt prime SendKeys from crew commands","description":"The crew commands (gt crew at, gt crew restart) still send 'gt prime' via SendKeys after session creation:\n- internal/cmd/crew_at.go:97, 121\n- internal/cmd/crew_lifecycle.go:202\n\nThis is now redundant because SessionStart hook handles priming automatically.\n\n**Low priority** - these aren't causing bugs (just duplicate work), unlike the spawn race condition that was fixed. Can be cleaned up when convenient.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-22T18:00:05.798858-08:00","updated_at":"2025-12-22T18:00:05.798858-08:00"} {"id":"gt-e5b6t","title":"Digest: mol-deacon-patrol","description":"Patrol 1: cleaned 3 stale locks, 3 orphan processes, doctor passed","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:05.788536-08:00","updated_at":"2025-12-26T16:16:05.788536-08:00","closed_at":"2025-12-26T16:16:05.788494-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-e5b6t","depends_on_id":"gt-wisp-mf0","type":"parent-child","created_at":"2025-12-26T16:16:05.789339-08:00","created_by":"stevey"}]} @@ -706,6 +707,7 @@ {"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-e9o3v","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T03:21:27.471717-08:00","updated_at":"2025-12-25T03:21:27.471717-08:00","closed_at":"2025-12-25T03:21:27.471682-08:00","close_reason":"Squashed from 8 wisps"} {"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-eb5ip","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:50:18.232867-08:00","updated_at":"2025-12-25T10:50:18.232867-08:00","closed_at":"2025-12-25T10:50:18.232837-08:00"} {"id":"gt-ebd8i","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Midpoint, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:27:19.097799-08:00","updated_at":"2025-12-25T07:27:19.097799-08:00","closed_at":"2025-12-25T07:27:19.097769-08:00","close_reason":"Squashed from 8 wisps"} {"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"} @@ -715,7 +717,6 @@ {"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"} -{"id":"gt-egyyq","title":"Digest: mol-deacon-patrol","description":"Patrol 4: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:04:17.854699-08:00","updated_at":"2025-12-25T11:04:17.854699-08:00","closed_at":"2025-12-25T11:04:17.85467-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-eh46a","title":"Digest: mol-deacon-patrol","description":"P8: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:11:44.451875-08:00","updated_at":"2025-12-25T20:11:44.451875-08:00","closed_at":"2025-12-25T20:11:44.451824-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-eh7p","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-24T23:28:50.209258-08:00","updated_at":"2025-12-24T23:28:50.209258-08:00","closed_at":"2025-12-24T23:28:50.209233-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ekgxf","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Quick cycle, all quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:06:15.060768-08:00","updated_at":"2025-12-25T17:06:15.060768-08:00","closed_at":"2025-12-25T17:06:15.060736-08:00","close_reason":"Squashed from 8 wisps"} @@ -724,11 +725,13 @@ {"id":"gt-eqys","title":"gt spawn: pasted work assignment needs manual Enter to start","description":"## Problem\n\nAfter `gt spawn` pastes the work assignment into Claude, the session waits for Enter.\n\n## Current Behavior\n\n1. `gt spawn gastown/Rictus --issue gt-xxx`\n2. Session starts, work is pasted\n3. Claude shows 'Pasted text #1 +53 lines' but doesn't start\n4. Must manually send Enter or attach and press Enter\n\n## Expected\n\nThe spawn should send Enter after pasting to kick off the work.\n\n## Related\n\nSame debounce issue as tmux notifications (gt-vnp9).","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-18T21:54:14.111101-08:00","updated_at":"2025-12-19T12:01:32.74364-08:00","closed_at":"2025-12-19T12:01:32.74364-08:00"} {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T21:57:34.473056-08:00","updated_at":"2025-12-25T20:54:54.788254-08:00","closed_at":"2025-12-25T20:54:54.788254-08:00","close_reason":"Stale work item from Dec 19 - polecat inbox system implemented via mail"} {"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-esn0p","title":"Digest: mol-deacon-patrol","description":"Patrol 15: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:28:41.665377-08:00","updated_at":"2025-12-25T07:28:41.665377-08:00","closed_at":"2025-12-25T07:28:41.66534-08:00"} {"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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T19:48:55.484911-08:00","updated_at":"2025-12-25T21:01:03.681156-08:00","closed_at":"2025-12-25T21:01:03.681156-08:00","close_reason":"Old prompting and configuration tasks. Templates and beads-sync work.","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"} {"id":"gt-evtm5","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Quiet, all agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:25:05.193077-08:00","updated_at":"2025-12-25T07:25:05.193077-08:00","closed_at":"2025-12-25T07:25:05.193041-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-ewzon","title":"Implement town activity logging","description":"Add centralized logging for Gas Town agent lifecycle events.\n\n## Events to Log\n- spawn: new agent created\n- wake: agent resumed \n- nudge: message injected\n- handoff: agent handed off (intentional restart)\n- done: agent finished work\n- crash: agent exited unexpectedly\n- kill: agent killed intentionally\n\n## Implementation\n- Add internal/log/town.go with LogEvent() function\n- Log to ~/gt/logs/town.log or .beads/town.log\n- Add gt log command to view/tail/filter logs\n- Include timestamps, agent identity, context\n\n## Log Format\n```\n2025-12-26 15:30:45 [spawn] gastown/crew/max spawned for gt-xyz\n2025-12-26 15:31:02 [nudge] gastown/crew/max nudged with \"start work\"\n2025-12-26 15:45:33 [crash] gastown/crew/max exited unexpectedly (signal 9)\n```","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-26T15:29:40.075343-08:00","updated_at":"2025-12-26T15:51:34.576465-08:00","closed_at":"2025-12-26T15:51:34.576465-08:00","close_reason":"Closed"} {"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"} {"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":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-22T03:04:15.726155-08:00","updated_at":"2025-12-25T21:00:14.31512-08:00","closed_at":"2025-12-25T21:00:14.31512-08:00","close_reason":"Nice-to-have or covered by core patrol lifecycle work."} {"id":"gt-ezg69","title":"Clean dead sessions","description":"Clean dead sessions.\n\nGarbage collect terminated sessions:\n- Remove stale polecat directories\n- Clean up wisp session artifacts\n- Prune old logs and temp files\n- Archive completed molecule state\n\n```bash\ngt gc --sessions\ngt gc --wisps --age=1h\n```\n\nPreserve audit trail. Only clean sessions confirmed dead.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.777223-08:00","updated_at":"2025-12-25T11:28:29.602064-08:00","closed_at":"2025-12-25T11:28:29.602064-08:00","close_reason":"9 healthy sessions, no dead sessions to clean","dependencies":[{"issue_id":"gt-ezg69","depends_on_id":"gt-teq0p","type":"blocks","created_at":"2025-12-25T02:11:33.948401-08:00","created_by":"stevey"}]} {"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"} @@ -737,7 +740,7 @@ {"id":"gt-f165","title":"Pinned bead naming convention for all roles","description":"Establish consistent naming convention for pinned beads across all roles.\n\n## Problem\n\nEvery role needs a pinned bead for molecule attachment, handoff state, and identity.\nWe need a consistent naming convention so gt tools can find the pinned bead for any role.\n\n## Proposed Convention\n\n {role}.pinned - Singleton roles (deacon, mayor)\n {rig}-{role}.pinned - Per-rig roles (witness, refinery)\n {rig}-{name}.pinned - Named agents (polecats, crew)\n\nExamples:\n- deacon.pinned\n- mayor.pinned\n- gastown-witness.pinned\n- gastown-refinery.pinned\n- gastown-furiosa.pinned (polecat)\n- gastown-max.pinned (crew)\n\n## Storage Location\n\n| Role | Pinned Bead Location |\n|------|---------------------|\n| Mayor | ~/gt/.beads/ (town level) |\n| Deacon | ~/gt/.beads/ (town level) |\n| Witness | {rig}/.beads/ (rig level) |\n| Refinery | {rig}/.beads/ (rig level) |\n| Polecat | {rig}/polecats/{name}/.beads/ |\n| Crew | {rig}/crew/{name}/.beads/ |\n\n## Why This Matters\n\n1. Name recycling: Polecats reuse names so their pinned beads persist\n2. Molecule attachment: gt mol bond needs to find the pinned bead\n3. gt prime: Can show you are working on X from pinned bead\n4. Crash recovery: Resume from pinned beads attached molecule\n\n## Tasks\n\n- Document naming convention in architecture.md\n- Update gt prime to find pinned bead by convention\n- Update gt mol bond to use conventional name\n- Create pinned beads on role startup if missing\n- Add gt pinned command to show/manage pinned beads\n\n## Related\n\n- gt-rana.1: Attachment field on pinned beads (closed)\n- gt-id36.2: Deacon marching orders (pinned bead)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T03:04:17.116117-08:00","updated_at":"2025-12-22T03:04:17.116117-08:00"} {"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-f17kc","title":"Digest: mol-deacon-patrol","description":"Patrol 17: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:53:28.761754-08:00","updated_at":"2025-12-26T16:53:28.761754-08:00","closed_at":"2025-12-26T16:53:28.761714-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-f17kc","depends_on_id":"gt-wisp-mic","type":"parent-child","created_at":"2025-12-26T16:53:28.762549-08:00","created_by":"stevey"}]} +{"id":"gt-f17kc","title":"Digest: mol-deacon-patrol","description":"Patrol 17: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:53:28.761754-08:00","updated_at":"2025-12-26T16:53:28.761754-08:00","closed_at":"2025-12-26T16:53:28.761714-08:00","dependencies":[{"issue_id":"gt-f17kc","depends_on_id":"gt-wisp-mic","type":"parent-child","created_at":"2025-12-26T16:53:28.762549-08:00","created_by":"stevey"}]} {"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-f6p9o","title":"Digest: mol-deacon-patrol","description":"Patrol 20: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:46:12.042764-08:00","updated_at":"2025-12-25T13:46:12.042764-08:00","closed_at":"2025-12-25T13:46:12.042734-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-f8d4q","title":"Digest: mol-deacon-patrol","description":"Patrol 3: routine checks, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:20:30.119214-08:00","updated_at":"2025-12-26T16:20:30.119214-08:00","closed_at":"2025-12-26T16:20:30.119167-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-f8d4q","depends_on_id":"gt-wisp-7va","type":"parent-child","created_at":"2025-12-26T16:20:30.120099-08:00","created_by":"stevey"}]} @@ -759,7 +762,7 @@ {"id":"gt-fadmu","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:29:39.973732-08:00","updated_at":"2025-12-25T13:29:39.973732-08:00","closed_at":"2025-12-25T13:29:39.9737-08:00"} {"id":"gt-fax0","title":"test pin fix 2","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T12:15:43.240045-08:00","updated_at":"2025-12-25T01:33:01.115086-08:00","closed_at":"2025-12-25T01:33:01.115086-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-faxkr","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 8: thorough check, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:25:07.795073-08:00","updated_at":"2025-12-26T13:25:07.795073-08:00","closed_at":"2025-12-26T13:25:07.795038-08:00","close_reason":"Squashed from 9 wisps"} -{"id":"gt-fdbh4","title":"Digest: mol-deacon-patrol","description":"Patrol complete: cleaned 1 orphaned process, all 8 sessions healthy, no stuck wisps","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:31:06.147061-08:00","updated_at":"2025-12-26T15:31:06.147061-08:00","closed_at":"2025-12-26T15:31:06.147015-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-fdbh4","depends_on_id":"gt-wisp-1jj","type":"parent-child","created_at":"2025-12-26T15:31:06.147882-08:00","created_by":"stevey"}]} +{"id":"gt-fdbh4","title":"Digest: mol-deacon-patrol","description":"Patrol complete: cleaned 1 orphaned process, all 8 sessions healthy, no stuck wisps","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:31:06.147061-08:00","updated_at":"2025-12-26T15:31:06.147061-08:00","closed_at":"2025-12-26T15:31:06.147015-08:00","close_reason":"Squashed from 9 wisps"} {"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-fgvw3","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:16:44.542525-08:00","updated_at":"2025-12-25T19:16:44.542525-08:00","closed_at":"2025-12-25T19:16:44.542466-08:00","close_reason":"Squashed from 8 wisps"} @@ -798,7 +801,6 @@ {"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"} {"id":"gt-gahh2","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Quick cycle, all quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:06:40.938636-08:00","updated_at":"2025-12-25T17:06:40.938636-08:00","closed_at":"2025-12-25T17:06:40.938608-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-gaklt","title":"Digest: mol-deacon-patrol","description":"Patrol 13: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:44:48.342241-08:00","updated_at":"2025-12-25T13:44:48.342241-08:00","closed_at":"2025-12-25T13:44:48.34221-08:00"} {"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"}]} @@ -825,13 +827,13 @@ {"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-gpgdv","title":"Optimize: Share stepMap across control flow operators","description":"In ApplyControlFlow, both ApplyBranches and ApplyGates call buildStepMap() separately:\n\n```go\nfunc ApplyBranches(steps []*Step, compose *ComposeRules) ([]*Step, error) {\n stepMap := buildStepMap(steps) // Called here\n ...\n}\n\nfunc ApplyGates(steps []*Step, compose *ComposeRules) ([]*Step, error) {\n stepMap := buildStepMap(steps) // Called again here\n ...\n}\n```\n\nThis is inefficient for large formulas. Options:\n\n1. Pass stepMap as a parameter to ApplyBranches/ApplyGates\n2. Create an internal version that accepts stepMap, keep public API unchanged\n3. Build once in ApplyControlFlow and pass down\n\nLow priority since formula sizes are typically small.","status":"open","priority":4,"issue_type":"chore","created_at":"2025-12-25T15:14:10.961538-08:00","updated_at":"2025-12-25T15:14:10.961538-08:00","dependencies":[{"issue_id":"gt-gpgdv","depends_on_id":"gt-8tmz.4","type":"blocks","created_at":"2025-12-25T15:14:19.033379-08:00","created_by":"daemon"}]} {"id":"gt-gq3f","title":"Digest: mol-deacon-patrol","description":"Patrol #8","status":"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-gs1ua","title":"Digest: mol-deacon-patrol","description":"Patrol 7: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:43:24.284618-08:00","updated_at":"2025-12-25T13:43:24.284618-08:00","closed_at":"2025-12-25T13:43:24.284589-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-gs1ua","title":"Digest: mol-deacon-patrol","description":"Patrol 7: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:43:24.284618-08:00","updated_at":"2025-12-25T13:43:24.284618-08:00","closed_at":"2025-12-25T13:43:24.284589-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-gs1ua","depends_on_id":"gt-9ae69","type":"parent-child","created_at":"2025-12-25T13:43:24.28532-08:00","created_by":"stevey"}]} {"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-gtzlc","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 5 mayor msgs (informational), all agents healthy, triggered 3 polecats, closed 1 orphan (gt-mol-aux test artifact)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:52:44.633416-08:00","updated_at":"2025-12-25T19:52:44.633416-08:00","closed_at":"2025-12-25T19:52:44.633369-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-gt2wl","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:04:46.889415-08:00","updated_at":"2025-12-25T00:04:46.889415-08:00","closed_at":"2025-12-25T00:04:46.88938-08:00"} +{"id":"gt-gtzlc","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 5 mayor msgs (informational), all agents healthy, triggered 3 polecats, closed 1 orphan (gt-mol-aux test artifact)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:52:44.633416-08:00","updated_at":"2025-12-25T19:52:44.633416-08:00","closed_at":"2025-12-25T19:52:44.633369-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-gtzlc","depends_on_id":"gt-wisp-43x","type":"parent-child","created_at":"2025-12-25T19:52:44.634153-08:00","created_by":"deacon"}]} {"id":"gt-gufib","title":"Digest: mol-witness-patrol","description":"Patrol cycle 1: 3 polecats inspected (nux, slit, furiosa), all working. 4 initial nudges sent. Refinery nudged with 2 MRs. No escalations.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:29.014708-08:00","updated_at":"2025-12-25T19:54:29.014708-08:00","closed_at":"2025-12-25T19:54:29.014659-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-gufib","depends_on_id":"gt-wisp-qx6","type":"parent-child","created_at":"2025-12-25T19:54:29.015517-08:00","created_by":"gastown/witness"}]} {"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"} -{"id":"gt-gvxyu","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:16:22.236359-08:00","updated_at":"2025-12-25T19:16:22.236359-08:00","closed_at":"2025-12-25T19:16:22.236303-08:00"} {"id":"gt-gwiye","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Refineries healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:54:30.168506-08:00","updated_at":"2025-12-26T14:54:30.168506-08:00","closed_at":"2025-12-26T14:54:30.168463-08:00","close_reason":"Squashed from 9 wisps"} {"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"}]} @@ -875,9 +877,9 @@ {"id":"gt-hbg5","title":"Cross-project dependency workflow (Gas Town side)","description":"Gas Town integration for cross-project dependencies.\n\n## Components\n- gt-zniu: gt park command (park molecule on external dep)\n- gt-in3x: gt spawn --continue (resume parked molecule)\n- gt-5uf3: Patrol auto-resume (future)\n\n## Design Doc\nSee: docs/cross-project-deps.md\n\n## Depends on Beads\n- bd-h807: Cross-project dependency support (epic)\n\n## Launch Plan\nPhase 1 (launch): gt park + gt spawn --continue (manual resume)\nPhase 2 (later): Patrol auto-resume","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-21T22:39:36.395383-08:00","updated_at":"2025-12-25T20:54:18.897103-08:00","closed_at":"2025-12-25T20:54:18.897103-08:00","close_reason":"Orphaned: referenced in commit but not closed"} {"id":"gt-hca9v","title":"Digest: mol-deacon-patrol","description":"Patrol 18: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:46.965239-08:00","updated_at":"2025-12-25T13:45:46.965239-08:00","closed_at":"2025-12-25T13:45:46.965209-08:00"} {"id":"gt-hcc0","title":"gt polecat remove --all: bulk polecat teardown","description":"Currently gt polecat remove only accepts one polecat at a time. Need bulk operations:\n\n## Requested\n- `gt polecat remove gastown --all` - remove all polecats from a rig\n- `gt polecat remove gastown/A gastown/B ...` - remove multiple by name\n\n## Context\nAfter a swarm completes, tearing down 20 polecats one at a time is tedious.\nEphemeral workers should be easy to create and destroy in bulk.\n\n## Related\n- gt-c92: CLI: all command for batch polecat operations","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-19T14:06:43.892225-08:00","updated_at":"2025-12-20T13:16:06.901839-08:00","closed_at":"2025-12-20T13:16:06.901839-08:00"} -{"id":"gt-hce03","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:29:14.852561-08:00","updated_at":"2025-12-25T07:29:14.852561-08:00","closed_at":"2025-12-25T07:29:14.852517-08:00"} {"id":"gt-hcsz","title":"Track merge requests as beads (type=merge-request)","description":"Currently MRs are tracked in .gastown/refinery.json. For HOP audit trail and entity CV tracking, merge requests should be Beads entries with type=merge-request. This enables:\n- Full audit trail of what was merged, when, by whom\n- Entity chain contributions (who validated what)\n- Cross-rig visibility of merge activity\n\nThe refinery would create an MR bead when work enters the queue, update status as it progresses (open → in_progress → merged/rejected).\n\nPart of Beads-as-data-plane vision from HOP.","status":"open","priority":4,"issue_type":"feature","created_at":"2025-12-21T22:07:28.836388-08:00","updated_at":"2025-12-21T22:07:28.836388-08:00"} {"id":"gt-hdlw6","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Quiet, 8 sessions healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:17:12.416379-08:00","updated_at":"2025-12-25T19:17:12.416379-08:00","closed_at":"2025-12-25T19:17:12.416329-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-heeh","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:36:27.144105-08:00","updated_at":"2025-12-24T22:36:27.144105-08:00","closed_at":"2025-12-24T22:36:27.144057-08:00"} {"id":"gt-hfi97","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All agents healthy, cleaned 18 stale wisps","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T03:04:22.750541-08:00","updated_at":"2025-12-25T03:04:22.750541-08:00","closed_at":"2025-12-25T03:04:22.750507-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-hgk","title":"Mail system: message types and threading","description":"GGT mail system needs message types and threading like PGT.\n\n## 1. Message Types\nAdd to internal/mail/types.go:\n```go\ntype MessageType string\nconst (\n TypeTask MessageType = \"task\" // Required processing\n TypeScavenge MessageType = \"scavenge\" // Optional first-come work\n TypeNotification MessageType = \"notification\" // Informational\n TypeReply MessageType = \"reply\" // Response to message\n)\n\n// Update Message struct\ntype Message struct {\n // existing fields...\n Type MessageType `json:\"type\"`\n ThreadID string `json:\"thread_id,omitempty\"`\n ReplyTo string `json:\"reply_to,omitempty\"`\n}\n```\n\n## 2. Priority Levels\nExpand from 2 to 4:\n```go\ntype Priority string\nconst (\n PriorityLow Priority = \"low\"\n PriorityNormal Priority = \"normal\"\n PriorityHigh Priority = \"high\"\n PriorityUrgent Priority = \"urgent\"\n)\n```\n\n## 3. CLI Updates\ninternal/cmd/mail.go:\n- Add --type flag to send: `gt mail send ... --type task`\n- Add --reply-to flag: `gt mail send ... --reply-to \u003cmsg-id\u003e`\n- Add thread command: `gt mail thread \u003cthread-id\u003e`\n\n## 4. Threading Logic\nNewMessage() should auto-generate thread_id if not a reply.\nReply messages inherit thread_id from original.\n\n## Files to Modify\n- internal/mail/types.go: Add types, expand Priority\n- internal/mail/mailbox.go: Thread filtering\n- internal/cmd/mail.go: CLI flags and thread command\n\n## PGT Reference\ngastown-py/src/gastown/mail/message.py\n\n## Acceptance Criteria\n- [ ] Messages have type field (default: notification)\n- [ ] 4 priority levels supported\n- [ ] Reply creates thread with shared thread_id\n- [ ] gt mail thread \u003cid\u003e shows conversation","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T14:46:55.29463-08:00","updated_at":"2025-12-18T20:14:28.308997-08:00","closed_at":"2025-12-18T20:14:28.308997-08:00"} {"id":"gt-hj7f","title":"Merge: gt-3x0z.2","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-3x0z.2\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:01:27.529537-08:00","updated_at":"2025-12-21T16:05:57.43743-08:00","closed_at":"2025-12-21T16:05:57.43743-08:00","close_reason":"No code changes - gt-3x0z.2 closed as blocked on bd implementation"} @@ -887,15 +889,17 @@ {"id":"gt-hlz0e","title":"Digest: mol-deacon-patrol","description":"Patrol 11: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:18:13.342103-08:00","updated_at":"2025-12-25T10:18:13.342103-08:00","closed_at":"2025-12-25T10:18:13.342077-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-hoyd","title":"Merge: gt-rana.1","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-rana.1\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T15:51:03.089517-08:00","updated_at":"2025-12-21T15:54:12.41736-08:00","closed_at":"2025-12-21T15:54:12.41736-08:00","close_reason":"Merged to main by refinery"} {"id":"gt-hpy9","title":"Merge: gt-o3is","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-o3is\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T19:32:41.142903-08:00","updated_at":"2025-12-24T00:18:03.084517-08:00","closed_at":"2025-12-23T23:30:21.986102-08:00"} -{"id":"gt-hqymv","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:04.952768-08:00","updated_at":"2025-12-25T11:05:04.952768-08:00","closed_at":"2025-12-25T11:05:04.952741-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-hqymv","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:04.952768-08:00","updated_at":"2025-12-25T11:05:04.952768-08:00","closed_at":"2025-12-25T11:05:04.952741-08:00"} {"id":"gt-hs6y","title":"Add 'gt account list' command","description":"Show registered accounts from accounts.yaml. Mark default with asterisk. Show handle, email, description.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:18.277191-08:00","updated_at":"2025-12-23T03:58:40.889222-08:00","closed_at":"2025-12-23T03:58:40.889222-08:00","close_reason":"Implemented gt account list with text and JSON output","dependencies":[{"issue_id":"gt-hs6y","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:34.631592-08:00","created_by":"daemon"}]} {"id":"gt-hshfy","title":"Digest: mol-deacon-patrol","description":"P15","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:26:19.128265-08:00","updated_at":"2025-12-26T14:26:19.128265-08:00","closed_at":"2025-12-26T14:26:19.128229-08:00","close_reason":"Squashed from 9 wisps"} -{"id":"gt-hsy0.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T23:28:07.420026-08:00","updated_at":"2025-12-25T01:33:00.829482-08:00","closed_at":"2025-12-25T01:33:00.829482-08:00","close_reason":"Test pollution cleanup"} +{"id":"gt-hsy0","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T23:28:07.339499-08:00","updated_at":"2025-12-25T13:46:23.279199-08:00","closed_at":"2025-12-25T13:46:23.279199-08:00"} +{"id":"gt-hsy0.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T23:28:07.420026-08:00","updated_at":"2025-12-25T01:33:00.829482-08:00","closed_at":"2025-12-25T01:33:00.829482-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-hsy0.1","depends_on_id":"gt-hsy0","type":"parent-child","created_at":"2025-12-23T23:28:07.420433-08:00","created_by":"daemon"}]} {"id":"gt-htto","title":"Heartbeat convention: simple liveness signal for agents","description":"Lightweight liveness signal extracted from Deacon epic (gt-5af).\n\n**Implementation**: Each agent writes a timestamp file on activity:\n```bash\necho '{\"ts\":\"'$(date -Iseconds)'\"}' \u003e ~/gt/\u003crole\u003e/heartbeat.json\n```\n\n**Integration points**:\n- SessionStart hook writes heartbeat\n- Periodic activity (mail check, work completion) refreshes it\n- `gt status` shows staleness (e.g., 'mayor: 5m ago')\n\n**Weight**: ~5 lines per agent\n**Value**: Quick debugging - see which agents are active at a glance\n\nNo monitoring daemon needed - human checks `gt status` when curious.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-20T20:40:45.459903-08:00","updated_at":"2025-12-20T20:40:45.459903-08:00"} {"id":"gt-hvy7i","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Healthy. Furiosa resolved rig mismatch.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:31:22.510409-08:00","updated_at":"2025-12-25T19:31:22.510409-08:00","closed_at":"2025-12-25T19:31:22.510356-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-hw6","title":"GGT Command Parity: Complete gt command coverage","description":"Complete gt command set to match/exceed PGT town commands.\n\nCovers: uninstall, rig info, refinery attach, witness, session mgmt, mail UX, daemon.","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-17T22:22:21.720078-08:00","updated_at":"2025-12-19T12:05:36.723692-08:00","closed_at":"2025-12-19T12:05:36.723692-08:00"} {"id":"gt-hwma","title":"Digest: mol-deacon-patrol","description":"Patrol OK: archived old handoff, all agents up, furiosa on gt-oiv0","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-22T22:03:54.568334-08:00","updated_at":"2025-12-22T22:03:54.568334-08:00","closed_at":"2025-12-22T22:03:54.568286-08:00","close_reason":"Squashed from 5 wisps"} {"id":"gt-hxlt","title":"Merge: gt-odvf","description":"branch: polecat/slit\ntarget: main\nsource_issue: gt-odvf\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-21T16:42:57.748003-08:00","updated_at":"2025-12-21T17:20:27.503711-08:00","closed_at":"2025-12-21T17:20:27.503711-08:00","close_reason":"ORPHANED: Branch never pushed, worktree deleted"} +{"id":"gt-hxp56","title":"Digest: mol-deacon-patrol","description":"Patrol 12: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:13:56.522072-08:00","updated_at":"2025-12-25T16:13:56.522072-08:00","closed_at":"2025-12-25T16:13:56.522043-08:00"} {"id":"gt-hyj5t","title":"Digest: mol-deacon-patrol","description":"Patrol 1: No mail, all agents healthy (mayor/witnesses/refineries OK), 0 polecats active, 2 orphaned mols for removed furiosa polecat noted","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:23:29.892203-08:00","updated_at":"2025-12-25T07:23:29.892203-08:00","closed_at":"2025-12-25T07:23:29.892166-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-hzr","title":"gt witness: Witness management commands","description":"Add 'gt witness' command group for witness lifecycle management.\n\nSubcommands:\n- gt witness start [rig] - Start witness for a rig\n- gt witness stop [rig] - Stop witness\n- gt witness status [rig] - Show witness status\n- gt witness attach [rig] - Attach to witness session\n\nWitness monitors polecats and handles:\n- Idle detection and cleanup\n- Session health checks\n- Nudging stuck agents","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:47:32.210917-08:00","updated_at":"2025-12-19T12:05:27.343254-08:00","closed_at":"2025-12-19T12:05:27.343254-08:00","dependencies":[{"issue_id":"gt-hzr","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:23:42.955006-08:00","created_by":"daemon"}]} {"id":"gt-i3deo","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 18: nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:48:00.534606-08:00","updated_at":"2025-12-26T15:48:00.534606-08:00","closed_at":"2025-12-26T15:48:00.534551-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-i3deo","depends_on_id":"gt-wisp-ywh","type":"parent-child","created_at":"2025-12-26T15:48:00.535463-08:00","created_by":"stevey"}]} @@ -909,7 +913,6 @@ {"id":"gt-ia0s","title":"Review: Beads Universal Data Plane documentation","description":"Review new docs/beads-data-plane.md (275 lines) for accuracy.\n\n## Commit\n- 54c8269: Add Beads Universal Data Plane documentation\n\n## Review focus\n- Accuracy of beads architecture description\n- Correct field mappings (mail → beads fields)\n- Two-level architecture (town vs rig beads) correctly explained","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T14:27:49.410707-08:00","updated_at":"2025-12-23T14:27:49.410707-08:00"} {"id":"gt-iahc","title":"Merge: gt-h6eq.6","description":"branch: polecat/keeper\ntarget: main\nsource_issue: gt-h6eq.6\nrig: gastown","status":"closed","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T11:42:12.738221-08:00","updated_at":"2025-12-23T12:22:23.469304-08:00","closed_at":"2025-12-23T12:22:23.469304-08:00","close_reason":"Merged to main in gt-h6eq swarm"} {"id":"gt-ib6y","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:48","description":"Patrol 19: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:48:16.252232-08:00","updated_at":"2025-12-24T19:48:16.252232-08:00","closed_at":"2025-12-24T19:48:16.252177-08:00","close_reason":"Squashed from wisp gt-h7w (9 issues)"} -{"id":"gt-ibnip","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:52:34.23124-08:00","updated_at":"2025-12-26T16:52:34.23124-08:00","closed_at":"2025-12-26T16:52:34.231199-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-ibnip","depends_on_id":"gt-wisp-1bf","type":"parent-child","created_at":"2025-12-26T16:52:34.23213-08:00","created_by":"stevey"}]} {"id":"gt-ic0j","title":"🤝 HANDOFF: Timing fixes applied","description":"Fixed mayor attach timing bug. Completed: timing fix, gt-tulx, Emma beads-6v2. Remaining P1: gt-17zr, gt-kcee, gt-szsq. Run gt prime on startup.","status":"closed","priority":2,"issue_type":"message","created_at":"2025-12-18T22:19:57.731032-08:00","updated_at":"2025-12-18T23:28:33.950423-08:00","closed_at":"2025-12-18T23:28:33.950423-08:00"} {"id":"gt-ictki","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 2 mayor handoffs (not for deacon), all agents healthy, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:18:54.990463-08:00","updated_at":"2025-12-26T14:18:54.990463-08:00","closed_at":"2025-12-26T14:18:54.990425-08:00","close_reason":"Squashed from 9 wisps"} {"id":"gt-id36","title":"Deacon Kernel: event processing molecule architecture","description":"\nExtend the Deacon from \"health orchestrator\" to \"event processing kernel\" that runs a \nmolecule (rounds) each wake cycle, like an OS kernel scheduler.\n\n## Core Insight\n\nThe Deacon already has:\n- Wake cycle (daemon poke, timer, lifecycle request)\n- Mail as event queue\n- Health scanning\n- Lifecycle processing\n\nBut it is REACTIVE. This epic makes it PROACTIVE with a structured molecule:\n\n```\nDeacon Wake\n├── Step 0: Session Check (should I cycle myself?)\n├── Step 1: Health Scan (Mayor, Witnesses, Crew, Refineries)\n├── Step 2: Lifecycle Processing (cycle/restart/shutdown requests)\n├── Step 3: Plugin Execution (scheduled, event-triggered, human-requested)\n├── Step 4: Event Callbacks (timers, subscriptions)\n└── Step 5: Heartbeat + Wait\n```\n\n## Key Design Decisions\n\n1. **Session cycling first** - Token costs are quadratic with session length.\n Deacon should aggressively cycle to fresh sessions. First step of every\n wake is \"do I need a new session?\" based on context budget.\n\n2. **Pinned bead with marching orders** - A pinned bead (like gt prime for\n agents) defines the Deacon's rounds molecule. This is the Deacon's\n \"kernel\" - its operating loop.\n\n3. **Keepalive file for daemon quieting** - Instead of daemon tmux-poking\n the Deacon (which interrupts work), Deacon writes a keepalive file.\n Daemon reads it and backs off. Worst case: Deacon forgets, gets one\n extra heartbeat it squelches.\n\n4. **Molecule-based rounds** - The wake cycle becomes a molecule with steps.\n Each step can have plugins (inline attention). Steps can be added/modified\n by updating the pinned bead.\n\n## Architecture\n\n```\nGo Daemon (minimal, dumb)\n├── Reads {townRoot}/deacon/keepalive.json\n├── If fresh: do nothing\n├── If stale: poke Deacon (fallback)\n└── Process lifecycle requests (still daemon's job)\n\nDeacon (Claude agent, smart)\n├── Wakes: poke, timer, mail event\n├── Writes keepalive (quiets daemon for duration of rounds)\n├── Runs rounds molecule:\n│ ├── session-check: cycle if context budget low\n│ ├── health-scan: check agents, remediate\n│ ├── lifecycle: process requests\n│ ├── plugins: run scheduled/triggered plugins\n│ ├── events: process timer/event callbacks\n│ └── complete: update heartbeat, wait\n└── Reads marching orders from pinned bead\n```\n\n## Relation to Existing Work\n\n- Extends gt-5af (Deacon infrastructure) - CLOSED\n- Relates to gt-axz (Plugin architecture) - P3\n- Fits into phase3-deacon of gt-ngpz (Christmas Plan)\n- Enables gt-976 (Crew lifecycle) as part of health-scan step\n","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-20T21:46:08.076178-08:00","updated_at":"2025-12-25T20:45:33.620523-08:00","closed_at":"2025-12-25T20:45:33.620523-08:00","close_reason":"Deacon kernel operational: running mol-deacon-patrol, processing callbacks, health scanning. Keepalive and plugin scheduler are polish items.","dependencies":[{"issue_id":"gt-id36","depends_on_id":"gt-976","type":"blocks","created_at":"2025-12-20T21:48:05.215593-08:00","created_by":"daemon"}]} @@ -920,7 +923,6 @@ {"id":"gt-id36.5","title":"Deacon plugin scheduler: cron-like execution","description":"\nImplement scheduled plugin execution in the Deacon's plugins step.\n\n## Concept\n\nPlugins are just directories with config. Deacon checks which are due\nand executes them during the plugins step of rounds.\n\n## Plugin Registration\n\nPlugins are registered in:\n1. Pinned kernel bead (preferred)\n2. `{townRoot}/plugins/` directory scan (fallback)\n\nEach plugin has:\n```json\n{\n \"name\": \"beads-hygiene\",\n \"schedule\": \"0 2 * * *\",\n \"last_run\": \"2025-12-20T02:00:00Z\",\n \"enabled\": true,\n \"attention_budget\": \"low\",\n \"max_duration_minutes\": 30\n}\n```\n\n## Schedule Format\n\nStandard cron format: `minute hour day month weekday`\n- `0 2 * * *` - 2 AM daily\n- `0 4 * * 0` - 4 AM Sundays\n- `*/15 * * * *` - Every 15 minutes\n\n## Execution\n\nDuring plugins step:\n1. Load plugin schedules from kernel bead + directory\n2. For each plugin:\n a. Parse schedule, check if due (last_run + schedule)\n b. If due, execute:\n - Read `plugins/{name}/CLAUDE.md` for context\n - Run plugin logic (inline or spawn subagent)\n - Record outcome and update last_run\n3. Continue to next step\n\n## Plugin Execution Modes\n\n- **inline**: Deacon runs the plugin logic directly (simple, fast)\n- **subagent**: Spawn a polecat-like agent for the plugin (complex, parallel)\n- **mail**: Send mail to another agent to do the work (delegation)\n\n## State Tracking\n\n`{townRoot}/deacon/plugin-state.json`:\n```json\n{\n \"plugins\": {\n \"beads-hygiene\": {\n \"last_run\": \"2025-12-20T02:00:00Z\",\n \"last_outcome\": \"success\",\n \"run_count\": 42,\n \"failure_count\": 2\n }\n }\n}\n```\n\n## Relation to gt-axz\n\nThis implements the execution side of the plugin architecture (gt-axz).\ngt-axz defines the format; this task implements the scheduler.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-20T21:47:31.798518-08:00","updated_at":"2025-12-25T20:48:20.539878-08:00","closed_at":"2025-12-25T20:48:20.539878-08:00","close_reason":"Polish items - Deacon operational without these; tracked as enhancements if needed","dependencies":[{"issue_id":"gt-id36.5","depends_on_id":"gt-id36","type":"parent-child","created_at":"2025-12-20T21:47:31.800001-08:00","created_by":"daemon"}]} {"id":"gt-id36.6","title":"Deacon event/timer callbacks: reactive triggers","description":"\nImplement event-triggered and timer-based callbacks in the Deacon.\n\n## Timer Callbacks\n\nAgents can schedule future wakes by mailing the Deacon:\n```\nSubject: TIMER: gastown/witness wake at 2025-12-20T16:00:00Z\nBody: Please nudge me - I'm waiting for external dependency\n```\n\nDeacon processing:\n1. Parse timer mail\n2. Check if time has passed\n3. If yes: mail the agent \"WAKE: Timer fired\"\n4. Close the timer mail\n\n## Event Subscriptions\n\nPlugins/agents can subscribe to events:\n```yaml\n# In kernel bead or plugin config\nevent_triggers:\n - event: \"issue.created\"\n action: mail\n target: \"plugins/work-oracle\"\n \n - event: \"mr.submitted\"\n action: run\n plugin: \"review-oracle\"\n \n - event: \"agent.stuck\"\n action: escalate\n target: human\n```\n\n## Event Sources\n\nEvents come through mail to deacon/:\n```\nSubject: EVENT: issue.created gt-abc123\nBody: New issue created in gastown rig\n```\n\n## Event Types\n\nInitial event types:\n- `issue.created` - New bead created\n- `issue.closed` - Bead closed\n- `mr.submitted` - Merge request submitted\n- `mr.merged` - Merge request merged\n- `agent.stuck` - Agent appears stuck (from health scan)\n- `agent.failed` - Agent remediation failed\n\n## Event Processing\n\nDuring events step:\n1. Read event mail from inbox\n2. Match against subscriptions\n3. Execute actions:\n - `mail`: Send mail to target\n - `run`: Execute plugin inline\n - `spawn`: Spawn subagent for plugin\n - `escalate`: Mail human\n\n## Relation to Mail\n\nMail IS the event bus. No separate event system.\nEvents are just specially-formatted mail to deacon/.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-20T21:47:32.99498-08:00","updated_at":"2025-12-25T20:48:20.554624-08:00","closed_at":"2025-12-25T20:48:20.554624-08:00","close_reason":"Polish items - Deacon operational without these; tracked as enhancements if needed","dependencies":[{"issue_id":"gt-id36.6","depends_on_id":"gt-id36","type":"parent-child","created_at":"2025-12-20T21:47:32.996649-08:00","created_by":"daemon"}]} {"id":"gt-idt8f","title":"Digest: mol-deacon-patrol","description":"P13: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:59:21.269231-08:00","updated_at":"2025-12-25T19:59:21.269231-08:00","closed_at":"2025-12-25T19:59:21.269178-08:00"} -{"id":"gt-idxr5","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:49:37.149631-08:00","updated_at":"2025-12-25T20:49:37.149631-08:00","closed_at":"2025-12-25T20:49:37.149584-08:00"} {"id":"gt-ie33.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-ie33\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T00:10:09.989188-08:00","updated_at":"2025-12-24T00:10:10.192864-08:00","closed_at":"2025-12-24T00:10:10.192864-08:00"} {"id":"gt-ieem","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:04:09.817241-08:00","updated_at":"2025-12-25T01:33:00.484839-08:00","closed_at":"2025-12-25T01:33:00.484839-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-ieem.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:04:09.907713-08:00","updated_at":"2025-12-25T01:33:00.467952-08:00","closed_at":"2025-12-25T01:33:00.467952-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-ieem.1","depends_on_id":"gt-ieem","type":"parent-child","created_at":"2025-12-24T21:04:09.908178-08:00","created_by":"daemon"}]} @@ -942,7 +944,6 @@ {"id":"gt-ilav.6","title":"Refinery patrol: Add sibling-check step","description":"Refinery should check on Witness health as part of patrol (village sibling watch).\n\n## Implementation\n\n1. Add `sibling-check` step to mol-refinery-patrol (early in cycle)\n2. Use `gt peek \u003crig\u003e/witness 20` to check Witness output\n3. Look for signs of health:\n - Recent activity (tool calls, log messages)\n - No error stack traces\n - Responsive to pings\n4. If Witness seems stuck:\n - Send status request mail\n - Note for potential escalation\n - Don't block Refinery work\n\n## Acceptance\n- Refinery checks Witness each patrol cycle\n- Anomalies logged\n- Non-blocking (Refinery continues even if Witness is down)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:07:54.005132-08:00","updated_at":"2025-12-23T12:07:54.005132-08:00","dependencies":[{"issue_id":"gt-ilav.6","depends_on_id":"gt-ilav","type":"parent-child","created_at":"2025-12-23T12:07:54.006928-08:00","created_by":"daemon"}]} {"id":"gt-ilav.7","title":"Witness patrol: Add sibling-check for Refinery","description":"Witness should check on Refinery health as part of patrol (village sibling watch).\n\n## Implementation\n\n1. Add `sibling-check` step to mol-witness-patrol\n2. Use `gt peek \u003crig\u003e/refinery 20` to check Refinery output\n3. Check Refinery queue status: `gt mq list \u003crig\u003e`\n4. Look for:\n - Refinery session alive\n - Queue processing (if items present)\n - No stuck MRs (same MR in_progress for too long)\n5. If Refinery seems stuck:\n - Send nudge or status request\n - Consider escalation to Deacon\n\n## Acceptance\n- Witness checks Refinery each patrol cycle\n- Can detect stuck Refinery\n- Provides backup oversight for merge queue","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:07:55.760705-08:00","updated_at":"2025-12-23T12:07:55.760705-08:00","dependencies":[{"issue_id":"gt-ilav.7","depends_on_id":"gt-ilav","type":"parent-child","created_at":"2025-12-23T12:07:55.762415-08:00","created_by":"daemon"}]} {"id":"gt-ilav.8","title":"Recovery: Detect orphaned merged polecats","description":"Safety net for when Refinery misses sending lifecycle notification.\n\n## Detection Points\n\n**Witness polecat-scan**:\n- For each polecat in `mr_submitted` state:\n - Check MR status: `gt mq status \u003cmr-id\u003e`\n - If MR is closed/merged but polecat state is still mr_submitted:\n - Update polecat state to `merged`\n - Log recovery action\n\n**Deacon orphan-check**:\n- Query all closed MRs\n- Cross-reference with polecat states\n- If merged MR but polecat not in merged/retired state:\n - Send correction to Witness\n - Log for metrics (indicates Refinery notification missed)\n\n## Acceptance\n- Orphaned polecats detected and corrected\n- Recovery is logged for monitoring\n- No work lost due to missed notifications","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T12:07:56.821259-08:00","updated_at":"2025-12-23T12:07:56.821259-08:00","dependencies":[{"issue_id":"gt-ilav.8","depends_on_id":"gt-ilav","type":"parent-child","created_at":"2025-12-23T12:07:56.823191-08:00","created_by":"daemon"},{"issue_id":"gt-ilav.8","depends_on_id":"gt-ilav.5","type":"blocks","created_at":"2025-12-23T12:08:06.749803-08:00","created_by":"daemon"},{"issue_id":"gt-ilav.8","depends_on_id":"gt-ilav.2","type":"blocks","created_at":"2025-12-23T12:08:06.832711-08:00","created_by":"daemon"},{"issue_id":"gt-ilav.8","depends_on_id":"gt-ilav.4","type":"blocks","created_at":"2025-12-23T12:08:06.918149-08:00","created_by":"daemon"}]} -{"id":"gt-ilfqa","title":"Digest: mol-deacon-patrol","description":"Patrol 16: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:53:01.166838-08:00","updated_at":"2025-12-26T16:53:01.166838-08:00","closed_at":"2025-12-26T16:53:01.166794-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-ilfqa","depends_on_id":"gt-wisp-bof","type":"parent-child","created_at":"2025-12-26T16:53:01.167658-08:00","created_by":"stevey"}]} {"id":"gt-ilvo5","title":"Digest: mol-deacon-patrol","description":"P8: all polecats exited","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:58:07.490622-08:00","updated_at":"2025-12-25T19:58:07.490622-08:00","closed_at":"2025-12-25T19:58:07.490581-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-in3x","title":"gt spawn --continue for resuming parked molecules","description":"Add `--continue` flag to gt spawn for resuming parked molecules:\n\n```bash\ngt spawn --continue gt-mol-root\n```\n\nThis:\n1. Finds molecule root\n2. Verifies molecule is in \"parked\" state (in_progress, no assignee)\n3. Checks external deps are now satisfied\n4. Spawns polecat with molecule context\n5. Polecat reads handoff mail and continues from blocked step\n\nPart of cross-project dependency system.\nSee: docs/cross-project-deps.md\n\nDepends on: gt-zniu (gt park)\nDepends on Beads: bd-zmmy (bd ready resolution)","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T22:39:13.154462-08:00","updated_at":"2025-12-25T21:00:14.364312-08:00","closed_at":"2025-12-25T21:00:14.364312-08:00","close_reason":"Nice-to-have or covered by core patrol lifecycle work.","dependencies":[{"issue_id":"gt-in3x","depends_on_id":"gt-zniu","type":"blocks","created_at":"2025-12-21T22:39:44.707231-08:00","created_by":"daemon"}]} {"id":"gt-in7b","title":"gt sling: nudge crew/mayor if session is running","description":"When slinging to crew or mayor, if they have an active tmux session, send a nudge notification so they know work has landed on their hook.\n\nCurrently only slingToPolecat nudges (lines 514-521 in internal/cmd/sling.go).\n\nMissing nudge in:\n- slingToCrew (line ~669)\n- slingToMayor (line ~876)\n\nNOT applicable to patrol-based agents (witness, refinery, deacon) - they run on cycles and pick up work via hook check, not interactive nudge.\n\nImplementation:\n1. For crew: need to determine session name (e.g., gastown-crew-max)\n2. Check if session running via tmux\n3. If running, call t.NudgeSession() with appropriate message","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T15:56:22.30857-08:00","updated_at":"2025-12-23T15:57:01.19806-08:00"} @@ -955,7 +956,6 @@ {"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T12:38:16.595926-08:00","updated_at":"2025-12-25T22:54:55.990767-08:00","closed_at":"2025-12-25T22:54:55.990767-08:00","close_reason":"bd mol spawn already removed - replaced by bd pour and bd wisp create"} {"id":"gt-ioglq","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 11: nominal (6 steps)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:45:12.015686-08:00","updated_at":"2025-12-26T15:45:12.015686-08:00","closed_at":"2025-12-26T15:45:12.015647-08:00","close_reason":"Squashed from 6 wisps","dependencies":[{"issue_id":"gt-ioglq","depends_on_id":"gt-wisp-6bo","type":"parent-child","created_at":"2025-12-26T15:45:12.016509-08:00","created_by":"stevey"}]} {"id":"gt-ioij","title":"mol-town-shutdown: Full Gas Town reset molecule","description":"## Summary\nMolecule for clean town shutdown/restart. Sling it to Mayor when ready to reboot.\n\n## Steps\n1. Clear all inboxes (witness, refinery, crew - all rigs)\n2. Unhook all agents (remove stale molecule attachments)\n3. Kill any active polecats\n4. Stop daemon\n5. Rotate/archive logs\n6. bd sync + git push\n7. Send Mayor handoff (what's next)\n8. Restart daemon fresh\n\n## Invocation\n```\ngt hook mol-town-shutdown # attach it\n# Mayor runs it on next session\n```\n\n## Related\n- Patrol cleanup (continuous) vs shutdown (nuclear)\n- See gt-xxx for patrol hygiene","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-24T17:25:45.295151-08:00","updated_at":"2025-12-25T22:59:49.419867-08:00","closed_at":"2025-12-25T22:59:49.419867-08:00","close_reason":"Formula created: mol-town-shutdown with 7 steps for clean town reboot"} -{"id":"gt-iq486","title":"Digest: mol-deacon-patrol","description":"Patrol 17: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:59.619474-08:00","updated_at":"2025-12-25T11:05:59.619474-08:00","closed_at":"2025-12-25T11:05:59.619445-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-iqlfe","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:03:57.38308-08:00","updated_at":"2025-12-25T16:03:57.38308-08:00","closed_at":"2025-12-25T16:03:57.383048-08:00"} {"id":"gt-is4fi","title":"Refactor formula transformation pipeline to shared helper","description":"The formula transformation pipeline (control flow, advice, expansions, aspects) is duplicated between cook.go and mol_bond.go. Should be extracted to a shared function in the formula package.\n\nCurrent duplication in:\n- cmd/bd/cook.go:96-136\n- cmd/bd/mol_bond.go:598-633\n\nSuggested approach:\n- Add formula.Transform(resolved *Formula, parser *Parser) (*Formula, error) \n- Handles all transformation steps in order\n- Both cook.go and mol_bond.go call this single function","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-25T16:50:55.343049-08:00","updated_at":"2025-12-25T16:50:55.343049-08:00","dependencies":[{"issue_id":"gt-is4fi","depends_on_id":"gt-8tmz.25","type":"discovered-from","created_at":"2025-12-25T16:50:55.344455-08:00","created_by":"daemon"}]} {"id":"gt-isje","title":"Implement mol bond command for dynamic child molecules","description":"Add 'gt mol bond' command that creates child molecules at runtime with variable substitution.\n\nUsage from mol-witness-patrol survey-workers step:\n```bash\nbd mol bond mol-polecat-arm $PATROL_WISP_ID \\\n --ref arm-$polecat \\\n --var polecat_name=$polecat \\\n --var rig=\u003crig\u003e\n```\n\nThis creates child wisps like patrol-x7k.arm-ace with variables expanded.\n\nImplementation:\n1. Add 'bond' subcommand to mol command\n2. Accept: proto ID, parent ID, --ref for child suffix, --var key=value pairs\n3. Call InstantiateMolecule with Context map populated from --var flags\n4. Return created child ID\n\nCritical for Christmas Ornament pattern - without this, Witness cannot spawn per-polecat inspection arms.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T21:35:56.192637-08:00","updated_at":"2025-12-23T21:43:44.601758-08:00","closed_at":"2025-12-23T21:43:44.601758-08:00","close_reason":"Implemented mol bond command for dynamic child molecule creation"} @@ -973,16 +973,16 @@ {"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"} {"id":"gt-jemnt","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context.\nCheck if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.775076-08:00","updated_at":"2025-12-25T11:28:45.942007-08:00","closed_at":"2025-12-25T11:28:45.942007-08:00","close_reason":"patrol_count=20, handoff threshold reached","dependencies":[{"issue_id":"gt-jemnt","depends_on_id":"gt-ezg69","type":"blocks","created_at":"2025-12-25T02:11:33.791943-08:00","created_by":"stevey"}]} -{"id":"gt-jffb9","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:58:14.883324-08:00","updated_at":"2025-12-26T13:58:14.883324-08:00","closed_at":"2025-12-26T13:58:14.883282-08:00"} {"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-jgz7h","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Core healthy, no changes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:29:29.948113-08:00","updated_at":"2025-12-25T19:29:29.948113-08:00","closed_at":"2025-12-25T19:29:29.948065-08:00","close_reason":"Squashed from 8 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)"} {"id":"gt-jj9tz","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 19: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:31:07.394419-08:00","updated_at":"2025-12-26T13:31:07.394419-08:00","closed_at":"2025-12-26T13:31:07.394381-08:00","close_reason":"Squashed from 9 wisps"} +{"id":"gt-jjba6","title":"Digest: mol-deacon-patrol","description":"Patrol complete: routine cycle","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:39:59.005662-08:00","updated_at":"2025-12-26T17:39:59.005662-08:00","closed_at":"2025-12-26T17:39:59.005616-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-jjba6","depends_on_id":"gt-wisp-4c0","type":"parent-child","created_at":"2025-12-26T17:39:59.006509-08:00","created_by":"stevey"}]} {"id":"gt-jjyr","title":"Merge: gt-vmk7","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-vmk7\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T19:36:30.232359-08:00","updated_at":"2025-12-25T19:52:26.400766-08:00","closed_at":"2025-12-25T19:52:26.400766-08:00","close_reason":"Stale MRs - source issues already closed, branches already merged"} {"id":"gt-jlxbs","title":"Digest: mol-deacon-patrol","description":"Patrol 6: 9 sessions healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:26:12.770442-08:00","updated_at":"2025-12-25T07:26:12.770442-08:00","closed_at":"2025-12-25T07:26:12.770405-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-jo9n","title":"OSS Launch Readiness","description":"Track all issues blocking or affecting OSS launch quality.\n\nP0 Blocker:\n- gt-ofl2: ProcessMRFromQueue not implemented\n\nP1 Must Fix:\n- gt-vzic: README missing prerequisites (tmux)\n- gt-xbfw: Missing OSS files (CONTRIBUTING, etc.)\n- gt-wexr: Polecat role swarm terminology\n- gt-6n13: Competing molecule mechanisms\n- gt-3abj: go install may fail\n\nP2 Should Fix:\n- gt-qj12: Obsolete beads cleanup\n- gt-zn9m: Error suppression patterns\n- gt-9uxr: Test coverage gaps\n- gt-fm75: os.Exit in library code\n- gt-yewf: Mismatched startup protocols\n- gt-1z4m: Undocumented gt swarm\n- gt-bho9: stderr suppression\n- gt-rxsh: Merge model confusion\n- gt-5ipl: Witness role commands\n\nP3 Nice to Have:\n- gt-t5mz: Hardcoded values","status":"closed","priority":0,"issue_type":"epic","created_at":"2025-12-24T12:51:56.676473-08:00","updated_at":"2025-12-25T00:50:31.575696-08:00","closed_at":"2025-12-25T00:50:31.575696-08:00","close_reason":"All P0/P1 blockers resolved. Remaining P2/P3 items are post-launch cleanup and can be addressed incrementally."} -{"id":"gt-jongy","title":"Digest: mol-deacon-patrol","description":"Patrol 16: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:57.565433-08:00","updated_at":"2025-12-25T11:05:57.565433-08:00","closed_at":"2025-12-25T11:05:57.565401-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-jongy","title":"Digest: mol-deacon-patrol","description":"Patrol 16: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:57.565433-08:00","updated_at":"2025-12-25T11:05:57.565433-08:00","closed_at":"2025-12-25T11:05:57.565401-08:00"} {"id":"gt-jpfh5","title":"Digest: mol-deacon-patrol","description":"Patrol complete: inbox empty, all agents healthy (mayor, 2 witnesses, 2 refineries), no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:59:07.847042-08:00","updated_at":"2025-12-25T10:59:07.847042-08:00","closed_at":"2025-12-25T10:59:07.84701-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-jpn0s","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All healthy, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:08:58.603203-08:00","updated_at":"2025-12-25T18:08:58.603203-08:00","closed_at":"2025-12-25T18:08:58.603153-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-jpt","title":"Town-level beads: Real DB for coordination mail","description":"Implement Option A from mail redesign: Town gets real beads DB for coordination.\n\n## Background\n\nMail is now Beads. But currently:\n- Town .beads/redirect points to rig beads\n- mayor/mail/ has legacy JSONL files\n- Cross-rig coordination has no clear home\n\n## Design\n\nTown beads = coordination, cross-rig mail, mayor inbox, handoffs\nRig beads = project issues, work items\n\nMatches HOP hierarchy: platform \u003e project \u003e worker\n\n## Structure\n\n~/gt/\n .beads/ # REAL beads DB (prefix: gm-)\n mayor/\n town.json\n state.json # NO mail/ directory\n gastown/\n .beads/ # Rig beads (prefix: ga-)\n\n## Tasks\n\n1. Delete ~/gt/.beads/redirect\n2. Run bd init --prefix gm at ~/gt/ (town beads)\n3. Delete ~/gt/mayor/mail/ directory\n4. Update gt mail to use beads not JSONL\n5. Add mail fields (thread_id, reply_to, msg_type)\n6. Update gt prime for two-tier model\n7. Update docs/architecture.md\n\n## Addressing\n\n- mayor/ -\u003e town beads\n- rig/agent -\u003e rig beads\n- Cross-rig -\u003e town beads","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-17T19:09:55.855955-08:00","updated_at":"2025-12-19T01:57:17.032558-08:00","closed_at":"2025-12-19T01:57:17.032558-08:00"} @@ -1004,7 +1004,6 @@ {"id":"gt-k1lr.8","title":"Remove .gastown/ after migration complete","description":"Final cleanup:\n- Remove .gastown/ directories at town and rig levels\n- Remove daemon/ and deacon/ directories (replaced by .runtime/)\n- Update .gitignore to remove old patterns\n- Verify all tests pass with new structure","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-22T01:02:28.43634-08:00","updated_at":"2025-12-22T01:30:37.872957-08:00","closed_at":"2025-12-22T01:30:37.872957-08:00","close_reason":"Doctor checks implemented and auto-fixed legacy directories","dependencies":[{"issue_id":"gt-k1lr.8","depends_on_id":"gt-k1lr","type":"parent-child","created_at":"2025-12-22T01:02:28.437853-08:00","created_by":"daemon"},{"issue_id":"gt-k1lr.8","depends_on_id":"gt-k1lr.7","type":"blocks","created_at":"2025-12-22T01:02:37.466318-08:00","created_by":"daemon"},{"issue_id":"gt-k1lr.8","depends_on_id":"gt-k1lr.6","type":"blocks","created_at":"2025-12-22T01:02:37.539854-08:00","created_by":"daemon"}]} {"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-k2ilq","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All healthy, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:48:55.379716-08:00","updated_at":"2025-12-25T17:48:55.379716-08:00","closed_at":"2025-12-25T17:48:55.379663-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-k6986","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:56:43.09177-08:00","updated_at":"2025-12-26T13:56:43.09177-08:00","closed_at":"2025-12-26T13:56:43.091735-08:00"} {"id":"gt-k7l0w","title":"Digest: mol-deacon-patrol","description":"Patrol 2: Quiet cycle, all healthy, orphan gt-mol-aux persists","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:13:24.625145-08:00","updated_at":"2025-12-25T19:13:24.625145-08:00","closed_at":"2025-12-25T19:13:24.625101-08:00","close_reason":"Squashed from 8 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-k8u5t","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:33:42.064804-08:00","updated_at":"2025-12-25T15:52:58.107047-08:00","close_reason":"Squashed from 8 wisps","deleted_at":"2025-12-25T15:52:58.107047-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1054,6 +1053,7 @@ {"id":"gt-kut","title":"Test message","description":"Testing GGT mail system","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-17T16:12:11.437529-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"} {"id":"gt-kuyo7","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, no messages, quiet cycle","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:03:59.845797-08:00","updated_at":"2025-12-25T17:03:59.845797-08:00","closed_at":"2025-12-25T17:03:59.845764-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-l0z34","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 9: routine, healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:25:37.061769-08:00","updated_at":"2025-12-26T13:25:37.061769-08:00","closed_at":"2025-12-26T13:25:37.061731-08:00","close_reason":"Squashed from 9 wisps"} +{"id":"gt-l19ca","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:45:41.449171-08:00","updated_at":"2025-12-26T14:45:41.449171-08:00","closed_at":"2025-12-26T14:45:41.449126-08:00"} {"id":"gt-l1o","title":"Harness \u0026 Priming: Document architecture and update all role contexts","status":"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-l2ccm","title":"Digest: mol-deacon-patrol","description":"Patrol 16","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:52:58.703667-08:00","updated_at":"2025-12-25T20:52:58.703667-08:00","closed_at":"2025-12-25T20:52:58.703614-08:00"} {"id":"gt-l32kx","title":"implement","description":"Implement the solution for gt-u2vg. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:53:37.31087-08:00","updated_at":"2025-12-25T14:12:42.103957-08:00","dependencies":[{"issue_id":"gt-l32kx","depends_on_id":"gt-6n1cy","type":"parent-child","created_at":"2025-12-25T01:53:37.328352-08:00","created_by":"stevey"},{"issue_id":"gt-l32kx","depends_on_id":"gt-hkf8j","type":"blocks","created_at":"2025-12-25T01:53:37.344719-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.103957-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1082,10 +1082,9 @@ {"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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.505125-08:00","updated_at":"2025-12-25T15:52:57.932675-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","dependencies":[{"issue_id":"gt-lqgf","depends_on_id":"gt-g261","type":"blocks","created_at":"2025-12-23T01:41:54.521716-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:57.932675-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-ls9sh","title":"Digest: mol-deacon-patrol","description":"Patrol 8","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:50:51.372141-08:00","updated_at":"2025-12-25T20:50:51.372141-08:00","closed_at":"2025-12-25T20:50:51.372074-08:00"} +{"id":"gt-lsfqq","title":"Hook ergonomics: auto-replace completed pins","description":"## Problem\n\nWhen pinning a new bead, if the old pinned bead is complete, the new pin should automatically replace it. Currently this fails and requires manual unpinning (which doesn't exist as a command).\n\nObserved friction:\n1. Old patrol wisp 100% complete, still pinned\n2. Created new patrol wisp\n3. `gt mol attach` failed: 'not pinned'\n4. Tried to close old wisp: 'cannot close pinned issue'\n5. Tried `gt hook unpin`: command doesn't exist\n6. Stuck in limbo\n\n## Proposed fix\n\n- `gt hook \u003cnew-bead\u003e` auto-replaces if old pin is complete\n- Require `--force` if old pin is incomplete\n- `gt mol attach` should auto-pin if bead isn't pinned\n\n## Orphan detection\n\nUnpinned incomplete molecules aren't stale orphans until they create graph pressure (blocking other work). Orphan detection should focus on dependency blocking, not just 'unpinned' status.","status":"in_progress","priority":2,"issue_type":"feature","created_at":"2025-12-26T17:29:28.717725-08:00","updated_at":"2025-12-26T17:44:14.707216-08:00"} {"id":"gt-lta16","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 10: routine, healthy - midpoint","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:26:07.534823-08:00","updated_at":"2025-12-26T13:26:07.534823-08:00","closed_at":"2025-12-26T13:26:07.534778-08:00","close_reason":"Squashed from 9 wisps"} {"id":"gt-ltomz","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Mayor OK, 11 sessions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:35.729682-08:00","updated_at":"2025-12-25T20:37:35.729682-08:00","closed_at":"2025-12-25T20:37:35.729621-08:00","close_reason":"Squashed from 8 wisps"} -{"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"} {"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":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-21T21:47:15.553926-08:00","updated_at":"2025-12-25T20:54:19.070783-08:00","closed_at":"2025-12-25T20:54:19.070783-08:00","close_reason":"Orphaned: referenced in commit but not closed","labels":["template"],"deleted_at":"2025-12-25T11:45:02.114796-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-lwuu.1","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue ({{issue}}) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:47:23.880531-08:00","updated_at":"2025-12-25T11:45:02.114796-08:00","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"}],"deleted_at":"2025-12-25T11:45:02.114796-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} @@ -1108,6 +1107,7 @@ {"id":"gt-m5w4g.3","title":"Polecat-Witness protocol handlers","description":"Implement handlers for: WORK_COMPLETE (polecat→witness: done with issue), NEED_HELP (polecat→witness: stuck, requesting intervention). Witness patrol steps should parse and act on these.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T20:56:29.752982-08:00","updated_at":"2025-12-25T20:56:29.752982-08:00","dependencies":[{"issue_id":"gt-m5w4g.3","depends_on_id":"gt-m5w4g","type":"parent-child","created_at":"2025-12-25T20:56:29.75638-08:00","created_by":"daemon"},{"issue_id":"gt-m5w4g.3","depends_on_id":"gt-m5w4g.1","type":"blocks","created_at":"2025-12-25T20:56:50.797519-08:00","created_by":"daemon"}]} {"id":"gt-m5w4g.4","title":"Agent protocol integration test","description":"End-to-end test: polecat completes work → sends WORK_COMPLETE → witness receives and sends POLECAT_READY → refinery merges → sends MERGE_SUCCESS → witness cleans up polecat. All via structured protocol messages.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T20:56:31.204129-08:00","updated_at":"2025-12-25T20:56:31.204129-08:00","dependencies":[{"issue_id":"gt-m5w4g.4","depends_on_id":"gt-m5w4g","type":"parent-child","created_at":"2025-12-25T20:56:31.207559-08:00","created_by":"daemon"},{"issue_id":"gt-m5w4g.4","depends_on_id":"gt-m5w4g.2","type":"blocks","created_at":"2025-12-25T20:56:50.900223-08:00","created_by":"daemon"},{"issue_id":"gt-m5w4g.4","depends_on_id":"gt-m5w4g.3","type":"blocks","created_at":"2025-12-25T20:56:50.995873-08:00","created_by":"daemon"}]} {"id":"gt-m72d","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:21","description":"Patrol 4: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:21:43.191633-08:00","updated_at":"2025-12-24T19:21:43.191633-08:00","closed_at":"2025-12-24T19:21:43.191566-08:00","close_reason":"Squashed from wisp gt-7ip (9 issues)"} +{"id":"gt-m7ll2","title":"Digest: mol-deacon-patrol","description":"Patrol 8: all clear, handing off for fresh context","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:20:31.549297-08:00","updated_at":"2025-12-26T17:20:31.549297-08:00","closed_at":"2025-12-26T17:20:31.549254-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-m7ll2","depends_on_id":"gt-wisp-djb","type":"parent-child","created_at":"2025-12-26T17:20:31.550112-08:00","created_by":"stevey"}]} {"id":"gt-m9uq3","title":"Digest: mol-deacon-patrol","description":"Patrol 12: All green","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:33:56.421573-08:00","updated_at":"2025-12-25T19:33:56.421573-08:00","closed_at":"2025-12-25T19:33:56.421523-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-mat34","title":"Digest: mol-deacon-patrol","description":"Patrol 8: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:02.92058-08:00","updated_at":"2025-12-25T11:05:02.92058-08:00","closed_at":"2025-12-25T11:05:02.920553-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-mbyy","title":"CLI API Audit: gt and bd command structure review before OSS launch","description":"# CLI API Audit for OSS Launch\n\nBefore launching Gas Town + Beads as an SDK, we need to ensure the command-line\nAPI is intelligently designed, consistent, intuitive, and structurally sound.\n\n## Current State Audit\n\n### gt (Gas Town) - 50+ top-level commands\n\n**Agent Lifecycle:**\n- `gt mayor`, `gt deacon`, `gt witness`, `gt refinery` - agent management\n- `gt polecat` - worker management (subcommands: add, remove, list, etc.)\n- `gt crew` - persistent workspace management\n- `gt spawn` - create polecat with work\n\n**Work Lifecycle:**\n- `gt spawn` - assign work to new polecat\n- `gt sling` - hook work + start immediately\n- `gt hook` - attach work durably\n- `gt handoff` - pass work to fresh session\n- `gt done` - signal work complete\n- `gt release` - release stuck issues\n\n**Infrastructure:**\n- `gt daemon`, `gt up`, `gt down`, `gt start`, `gt stop`, `gt shutdown`\n- `gt init`, `gt install`, `gt doctor`\n\n**Communication:**\n- `gt mail` (subcommands: send, inbox, read, etc.)\n- `gt nudge`, `gt broadcast`\n\n**Molecules:**\n- `gt molecule` / `gt mol` (17 subcommands!)\n\n### bd (Beads) - Well-categorized but some sprawl\n\n**Core CRUD:**\n- `bd create`, `bd show`, `bd update`, `bd close`, `bd list`\n\n**Molecules:**\n- `bd mol` (5 subcommands: catalog, show, bond, run, distill)\n- `bd wisp` (3 subcommands: create, gc, list)\n- `bd pour` (top-level alias for instantiation)\n- `bd cook` (compile formula to proto)\n\n**Hook/Pin:**\n- `bd pin` - attach mol to agent hook\n- `bd unpin` - remove from hook\n- `bd hook` - inspect what's on hook\n\n## Structural Concerns\n\n### 1. gt is sprawling (50+ top-level commands)\n\nMany commands could be subcommands:\n```\n# Current # Could be\ngt up/down/start/stop gt daemon {up|down|start|stop}\ngt spawn/sling/hook/handoff gt work {spawn|sling|hook|handoff}\ngt mayor/deacon/witness gt agent {mayor|deacon|witness|...}\n```\n\n### 2. Overlap between gt and bd\n\n| Concept | gt | bd |\n|---------|----|----|\n| Hook | `gt hook` | `bd pin`, `bd hook` |\n| Mail | `gt mail` | `bd mail` (delegates) |\n| Molecules | `gt mol` (17 cmds) | `bd mol` (5 cmds) |\n\nWhich owns what? User confusion likely.\n\n### 3. Naming inconsistencies\n\n- `gt polecat` (noun) vs `gt spawn` (verb) - both about polecats\n- `gt done` vs `gt handoff` - both end work but different\n- `bd mol run` vs `bd pour` - both instantiate\n\n### 4. Subcommand depth decisions\n\n**Good patterns:**\n- `bd mol {catalog|show|bond|run|distill}` - coherent group\n- `gt mail {send|inbox|read|archive}` - coherent group\n\n**Questionable patterns:**\n- `bd create --wisp` AND `bd wisp create` - two ways to do same thing\n- `gt spawn --molecule X` AND `gt mol instantiate` - overlap\n\n### 5. Flag vs subcommand guidelines needed\n\nWhen to use flags vs subcommands?\n- `--json` as flag ✓ (modifier)\n- `--wisp` as flag for create? Or separate `bd wisp create`?\n- `--molecule` on spawn? Or separate workflow?\n\n## Recommendations to Evaluate\n\n### A. Consolidate gt top-level commands\n\nGroup related commands:\n```\ngt agent {mayor|deacon|witness|refinery|polecat}\ngt work {spawn|sling|hook|handoff|done}\ngt infra {daemon|up|down|doctor}\n```\n\n### B. Clarify gt vs bd ownership\n\n| Domain | Owner | Other defers |\n|--------|-------|--------------|\n| Issues | bd | gt uses bd |\n| Agents | gt | bd doesn't touch |\n| Molecules | bd mol | gt mol wraps for UX |\n| Hooks | bd pin/hook | gt hook wraps |\n| Mail | gt mail | bd mail delegates |\n\n### C. Apply consistent naming\n\n- All agent commands: nouns (`gt polecat`, `gt mayor`)\n- All work commands: verbs (`gt spawn`, `gt sling`, `gt hook`)\n- Avoid synonyms: pick one term and stick with it\n\n### D. Flag vs subcommand rule\n\n- Flags: modify behavior of command (`--json`, `--force`, `--wisp`)\n- Subcommands: distinct operations (`mol run`, `mol squash`, `mol burn`)\n- Exception: very common operations can have top-level aliases\n\n## Tasks\n\n1. [ ] Review gt command groupings - propose consolidation\n2. [ ] Review bd command groupings - check for sprawl\n3. [ ] Document gt vs bd ownership boundaries\n4. [ ] Identify and resolve naming inconsistencies\n5. [ ] Document flag vs subcommand decision criteria\n6. [ ] Create migration plan for any breaking changes\n7. [ ] Update help text to be consistent\n8. [ ] Test agent UX: can Claude guess commands correctly?\n\n## Success Criteria\n\n- New user can guess command structure intuitively\n- `gt --help` fits on one screen (or is well-categorized)\n- No duplicate functionality between gt and bd\n- Consistent naming throughout\n- Claude agents can discover commands without documentation","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-24T23:48:42.420867-08:00","updated_at":"2025-12-25T12:12:21.188501-08:00","closed_at":"2025-12-25T12:12:21.188501-08:00","close_reason":"CLI API audit completed - structure reviewed and documented","dependencies":[{"issue_id":"gt-mbyy","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T23:48:52.221824-08:00","created_by":"daemon"}]} @@ -1115,6 +1115,7 @@ {"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-me866","title":"Digest: mol-deacon-patrol","description":"Patrol 17: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:35.600017-08:00","updated_at":"2025-12-25T13:45:35.600017-08:00","closed_at":"2025-12-25T13:45:35.599984-08:00"} {"id":"gt-mfatq","title":"Digest: mol-deacon-patrol","description":"Patrol 17: Nominal","status":"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"} @@ -1132,6 +1133,7 @@ {"id":"gt-mol-aux","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work. A polecat that crashes after any step can restart, read its molecule state, and continue from the last completed step. No work is lost.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| issue | Yes | The source issue ID being worked on |","status":"closed","priority":2,"issue_type":"epic","assignee":"gastown/test-visibility","created_at":"2025-12-25T18:45:53.649284-08:00","updated_at":"2025-12-25T19:51:40.6924-08:00","closed_at":"2025-12-25T19:51:40.6924-08:00","close_reason":"Orphaned: no gastown/test-visibility session exists (test artifact)"} {"id":"gt-mol-c68","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work. A polecat that crashes after any step can restart, read its molecule state, and continue from the last completed step. No work is lost.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| issue | Yes | The source issue ID being worked on |","status":"closed","priority":2,"issue_type":"epic","assignee":"gastown/slit","created_at":"2025-12-25T19:47:36.236912-08:00","updated_at":"2025-12-25T19:54:35.435473-08:00","closed_at":"2025-12-25T19:54:35.435473-08:00","close_reason":"wrong-rig: gt-8tmz.36 requires beads polecat"} {"id":"gt-mol-cfu","title":"Self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:36.238187-08:00","updated_at":"2025-12-25T19:54:35.405637-08:00","closed_at":"2025-12-25T19:54:35.405637-08:00","close_reason":"wrong-rig: gt-8tmz.36 requires beads polecat","dependencies":[{"issue_id":"gt-mol-cfu","depends_on_id":"gt-mol-c68","type":"parent-child","created_at":"2025-12-25T19:47:36.306419-08:00","created_by":"mayor"},{"issue_id":"gt-mol-cfu","depends_on_id":"gt-mol-572","type":"blocks","created_at":"2025-12-25T19:47:36.320187-08:00","created_by":"mayor"}]} +{"id":"gt-mol-dva","title":"Request shutdown","description":"Send shutdown request to Witness.\nWait for termination.\n\nThe polecat is now ready to be cleaned up.\nDo not exit directly - wait for Witness to kill the session.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:45:53.650287-08:00","updated_at":"2025-12-25T19:51:45.238031-08:00","closed_at":"2025-12-25T19:51:45.238031-08:00","dependencies":[{"issue_id":"gt-mol-dva","depends_on_id":"gt-mol-aux","type":"parent-child","created_at":"2025-12-25T18:45:53.686705-08:00","created_by":"mayor"},{"issue_id":"gt-mol-dva","depends_on_id":"gt-mol-i2o","type":"blocks","created_at":"2025-12-25T18:45:53.698782-08:00","created_by":"mayor"}]} {"id":"gt-mol-g8x","title":"Request shutdown","description":"Send shutdown request to Witness.\nWait for termination.\n\nThe polecat is now ready to be cleaned up.\nDo not exit directly - wait for Witness to kill the session.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:48.599526-08:00","updated_at":"2025-12-25T19:56:53.314668-08:00","closed_at":"2025-12-25T19:56:53.314668-08:00","close_reason":"Submitted to merge queue, witness notified","dependencies":[{"issue_id":"gt-mol-g8x","depends_on_id":"gt-mol-3g1","type":"parent-child","created_at":"2025-12-25T19:47:48.643529-08:00","created_by":"mayor"},{"issue_id":"gt-mol-g8x","depends_on_id":"gt-mol-jpg","type":"blocks","created_at":"2025-12-25T19:47:48.657908-08:00","created_by":"mayor"}]} {"id":"gt-mol-i2o","title":"Self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:45:53.650511-08:00","updated_at":"2025-12-25T19:51:45.253951-08:00","closed_at":"2025-12-25T19:51:45.253951-08:00","close_reason":"Parent orphaned","dependencies":[{"issue_id":"gt-mol-i2o","depends_on_id":"gt-mol-aux","type":"parent-child","created_at":"2025-12-25T18:45:53.710925-08:00","created_by":"mayor"},{"issue_id":"gt-mol-i2o","depends_on_id":"gt-mol-07k","type":"blocks","created_at":"2025-12-25T18:45:53.723219-08:00","created_by":"mayor"}]} {"id":"gt-mol-jpg","title":"Self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:48.59976-08:00","updated_at":"2025-12-25T19:55:41.029494-08:00","closed_at":"2025-12-25T19:55:41.029494-08:00","close_reason":"Reviewed diff - clean renaming, no bugs or issues","dependencies":[{"issue_id":"gt-mol-jpg","depends_on_id":"gt-mol-3g1","type":"parent-child","created_at":"2025-12-25T19:47:48.672365-08:00","created_by":"mayor"},{"issue_id":"gt-mol-jpg","depends_on_id":"gt-mol-uau","type":"blocks","created_at":"2025-12-25T19:47:48.687264-08:00","created_by":"mayor"}]} @@ -1156,7 +1158,7 @@ {"id":"gt-mzal.6","title":"Design molecule parameterization","description":"Enable protos to accept parameters for customization.\n\n## Use Cases\n\n1. rig-spinup needs rig name: `gt sling rig-spinup --param rig=newproject`\n2. agent-restart needs agent: `gt sling agent-restart --param agent=gastown/witness`\n3. code-review needs scope: `gt sling code-review --param scope=src/auth/`\n\n## Proposed Syntax\n\n### In Proto\n\n```markdown\n## Step: create-rig-structure\nmkdir -p ~/gt/${rig}/refinery ~/gt/${rig}/witness\n```\n\n### In Sling\n\n```bash\ngt sling rig-spinup mayor/ --param rig=newproject --wisp\n```\n\n### In Bonded Molecule\n\nInterpolation happens at bond time. Step descriptions have concrete values.\n\n## Implementation\n\n1. Proto declares params in frontmatter: `params: [rig]`\n2. gt sling validates required params provided\n3. bd mol bond receives params, interpolates descriptions\n4. Bonded molecule has concrete step text\n\n## Edge Cases\n\n- Missing required param → error\n- Unused param → warning\n- Param in step title → interpolate there too\n","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-22T21:00:23.35376-08:00","updated_at":"2025-12-22T21:00:23.35376-08:00","dependencies":[{"issue_id":"gt-mzal.6","depends_on_id":"gt-mzal","type":"parent-child","created_at":"2025-12-22T21:00:23.354175-08:00","created_by":"daemon"}]} {"id":"gt-mzal.7","title":"Proto marketplace: shareable molecule templates","description":"Enable sharing protos between Gas Town installations.\n\n## Vision\n\nA public registry of protos that users can pull and use:\n\n```bash\ngt proto search \"code review\"\ngt proto install gastown/code-review\ngt sling code-review gastown/Toast --wisp\n```\n\n## Registry Design\n\n### Local Catalog\n`~/gt/molecules/` - user-defined and installed protos\n\n### Remote Registry\n`registry.gastown.dev/protos/` (future)\n- Browse online catalog\n- Version-controlled protos\n- Rating/reviews\n- Usage statistics\n\n## Proto Package Format\n\n```\ngastown-code-review-1.0.0/\n├── PROTO.md # Main proto definition\n├── README.md # Usage documentation\n├── LICENSE # Usage terms\n└── plugins/ # For pluggable molecules\n ├── security/\n └── performance/\n```\n\n## Commands\n\n```bash\ngt proto list # Show installed protos\ngt proto search \u003cquery\u003e # Search registry\ngt proto install \u003cname\u003e # Install from registry\ngt proto publish \u003cpath\u003e # Publish to registry\ngt proto update # Update all installed\n```\n\n## For Now\n\nStart with local catalog. Marketplace is future phase.\nEnsure proto format is registry-compatible from the start.\n","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-22T21:00:49.124222-08:00","updated_at":"2025-12-25T21:00:25.979729-08:00","closed_at":"2025-12-25T21:00:25.979729-08:00","close_reason":"P3 polish features. Not essential for v0.1.","dependencies":[{"issue_id":"gt-mzal.7","depends_on_id":"gt-mzal","type":"parent-child","created_at":"2025-12-22T21:00:49.124687-08:00","created_by":"daemon"},{"issue_id":"gt-mzal.7","depends_on_id":"gt-mzal.3","type":"blocks","created_at":"2025-12-22T21:01:01.874557-08:00","created_by":"daemon"}]} {"id":"gt-mzal.8","title":"Update Mayor startup protocol for bootstrap","description":"Teach Mayor to respond to \"boot up gas town\" by slinging mol-gastown-boot.\n\n## Current Protocol\n\n1. Announce: \"Mayor, checking in.\"\n2. Check mail\n3. If handoff, continue\n4. Await user instruction\n\n## Enhanced Protocol\n\n1. Announce: \"Mayor, checking in.\"\n2. Check mail\n3. If handoff, continue\n4. **If user says \"boot\"/\"startup\"/\"bootstrap\":**\n - Sling mol-gastown-boot as wisp\n - Execute verification-gated steps\n - Report town status when complete\n5. Otherwise await instruction\n\n## Trigger Phrases\n\n- \"boot up gas town\"\n- \"bootstrap the town\"\n- \"start gas town\"\n- \"bring up the town\"\n\n## Execution\n\nMayor runs the molecule manually (not via subagent):\n\n```\n1. Bond the proto: bd mol bond mol-gastown-boot --wisp\n2. For each step:\n a. Run action command\n b. Loop verification with backoff\n c. On stall, run recovery\n d. Close step when verified\n3. Squash wisp with summary\n4. Report: \"Gas Town is up. All agents healthy.\"\n```\n\n## CLAUDE.md Update\n\nAdd to Mayor CLAUDE.md:\n\n```markdown\n## Bootstrap Command\n\nWhen user requests town bootstrap:\n1. gt sling gastown-boot mayor/ --wisp\n2. Execute molecule steps with verification\n3. Keep trying until all agents healthy\n4. No timeouts - you are the town engineer\n```\n","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-22T21:00:50.429735-08:00","updated_at":"2025-12-22T21:00:50.429735-08:00","dependencies":[{"issue_id":"gt-mzal.8","depends_on_id":"gt-mzal","type":"parent-child","created_at":"2025-12-22T21:00:50.430131-08:00","created_by":"daemon"},{"issue_id":"gt-mzal.8","depends_on_id":"gt-mzal.1","type":"blocks","created_at":"2025-12-22T21:00:59.16763-08:00","created_by":"daemon"},{"issue_id":"gt-mzal.8","depends_on_id":"gt-mzal.2","type":"blocks","created_at":"2025-12-22T21:00:59.231779-08:00","created_by":"daemon"}]} -{"id":"gt-mzzl9","title":"Digest: mol-deacon-patrol","description":"Patrol complete: inbox checked (4 msgs, 1 escalation resolved), all agents healthy (2 witnesses, 2 refineries, 3 polecats, 5 crew), cleaned 66 abandoned wisps","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:42:46.3183-08:00","updated_at":"2025-12-25T19:42:46.3183-08:00","closed_at":"2025-12-25T19:42:46.318252-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-mzzl9","depends_on_id":"gt-wisp-2cz","type":"parent-child","created_at":"2025-12-25T19:42:46.319035-08:00","created_by":"deacon"}]} +{"id":"gt-mzzl9","title":"Digest: mol-deacon-patrol","description":"Patrol complete: inbox checked (4 msgs, 1 escalation resolved), all agents healthy (2 witnesses, 2 refineries, 3 polecats, 5 crew), cleaned 66 abandoned wisps","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:42:46.3183-08:00","updated_at":"2025-12-25T19:42:46.3183-08:00","closed_at":"2025-12-25T19:42:46.318252-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-n3i7","title":"Digest: mol-deacon-patrol","description":"Patrol 15: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:00:56.816258-08:00","updated_at":"2025-12-24T21:00:56.816258-08:00","closed_at":"2025-12-24T21:00:56.816225-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-n508","title":"Merge: gt-70b3","description":"type: merge-request\nbranch: polecat/Rictus\ntarget: main\nsource_issue: gt-70b3\nrig: gastown","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-18T21:56:57.840796-08:00","updated_at":"2025-12-18T22:16:39.940524-08:00","closed_at":"2025-12-18T22:16:39.940524-08:00"} {"id":"gt-n5uy","title":"Digest: mol-deacon-patrol","description":"Patrol OK: 8 polecats, 4 witness/refineries up","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T01:06:42.456269-08:00","updated_at":"2025-12-23T01:06:42.456269-08:00","closed_at":"2025-12-23T01:06:42.456235-08:00","close_reason":"Squashed from 5 wisps"} @@ -1166,9 +1168,9 @@ {"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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.507176-08:00","updated_at":"2025-12-25T15:52:57.676488-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","deleted_at":"2025-12-25T15:52:57.676488-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-na6o2","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no messages, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:58:44.4382-08:00","updated_at":"2025-12-24T23:58:44.4382-08:00","closed_at":"2025-12-24T23:58:44.438166-08:00"} {"id":"gt-na7y","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:40:58.973379-08:00","updated_at":"2025-12-25T01:33:00.502546-08:00","closed_at":"2025-12-25T01:33:00.502546-08:00","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-nahxr","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:26:45.974483-08:00","updated_at":"2025-12-25T07:26:45.974483-08:00","closed_at":"2025-12-25T07:26:45.974453-08:00"} {"id":"gt-nam3","title":"Update docs to reflect molecule-first paradigm","description":"Gas Town is fundamentally a molecule execution engine. Documentation should reflect this more clearly.\n\n## Issues Found\n\n### 1. gt spawn examples show molecule as optional\nREADME.md line 116: `gt spawn --issue \u003cid\u003e # Start polecat on issue`\nShould emphasize: polecats execute molecules, not just issues.\n\n### 2. Architecture.md spawn examples inconsistent\nLine 344 shows molecule: `gt spawn --issue gt-xyz --molecule mol-engineer-in-box`\nLine 1434 shows without: `gt spawn --issue \u003cid\u003e`\n\n### 3. Config vs molecule distinction not clear\noutposts.yaml shows static policy - should note when molecules apply.\n\n### 4. Operational molecules section is good but buried\nLines 430-566 cover operational molecules well. Should be more prominent.\n\n## Updates Needed\n- [ ] README: Update spawn examples to show molecule usage\n- [ ] architecture.md: Ensure all spawn examples include molecules\n- [ ] architecture.md: Add section on \"when config vs molecule\"\n- [ ] architecture.md: Move operational molecules higher in document\n- [ ] Add principle: \"If it requires cognition, it's a molecule\"\n- [ ] federation-design.md: Note that policy can escalate to mol-outpost-assign\n\n## Key Message\nGas Town doesn't spawn workers on issues. It spawns workers on molecules.\nThe issue is just the seed data for the molecule execution.","status":"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"} {"id":"gt-nc9y","title":"gt polecat done should auto-stop running session","description":"Currently 'gt polecat done' fails if session is running, requiring a separate 'gt session stop' first. This is unnecessary friction - done should just stop the session automatically since that's always what you want.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T04:12:13.30724-08:00","updated_at":"2025-12-23T04:12:13.30724-08:00"} {"id":"gt-nd18","title":"Merge: gt-caih","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-caih\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T01:15:24.2771-08:00","updated_at":"2025-12-23T01:16:15.720728-08:00","closed_at":"2025-12-23T01:16:15.720728-08:00","close_reason":"Merged to main"} @@ -1197,11 +1199,9 @@ {"id":"gt-nrawz","title":"Digest: mol-deacon-patrol","description":"Patrol 8: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:17:21.167521-08:00","updated_at":"2025-12-25T10:17:21.167521-08:00","closed_at":"2025-12-25T10:17:21.167493-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-nrer7","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Quick cycle, all quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:09:00.383617-08:00","updated_at":"2025-12-25T17:09:00.383617-08:00","closed_at":"2025-12-25T17:09:00.383586-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-nriy","title":"Test: Alpha to Beta","description":"Sibling communication test","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T21:44:00.731578-08:00","updated_at":"2025-12-25T14:12:42.250457-08:00","deleted_at":"2025-12-25T14:12:42.250457-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} -{"id":"gt-nspx5","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:45:40.304368-08:00","updated_at":"2025-12-25T10:45:40.304368-08:00","closed_at":"2025-12-25T10:45:40.304312-08:00"} {"id":"gt-nsyy","title":"Merge: gt-h6eq.7","description":"branch: polecat/dag\ntarget: main\nsource_issue: gt-h6eq.7\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:42:39.260767-08:00","updated_at":"2025-12-23T12:22:23.453965-08:00","closed_at":"2025-12-23T12:22:23.453965-08:00","close_reason":"Merged to main in gt-h6eq swarm"} {"id":"gt-nti8","title":"Polecats should not push branches to remote","description":"## Current Behavior\n\nPolecats push their branches to origin (e.g., `polecat/furiosa`), which pollutes the remote with many short-lived branches.\n\n## Desired Behavior\n\nPolecats should only commit locally. The Refinery handles all remote pushes:\n1. Polecat works on local `polecat/\u003cname\u003e` branch\n2. Polecat signals done (state → idle)\n3. Refinery pulls from local polecat branch\n4. Refinery runs tests, merges to main\n5. Refinery pushes main to remote\n6. If PR review needed, Refinery creates the PR\n\n## Benefits\n\n- Clean remote (no branch pollution)\n- Clear responsibility (Refinery is the quality gate)\n- Simpler cleanup (local branches deleted with worktree)\n- Less noise in GitHub UI\n\n## Trade-offs\n\n- If polecat crashes before Refinery merges, code is lost locally\n- But beads issue remains open, another polecat can redo the work\n- This is acceptable for ephemeral workers\n\n## Implementation\n\nIn polecat CLAUDE.md or landing protocol:\n- Remove `git push origin HEAD` from workflow\n- Replace with just `git commit` + signal done\n- Refinery handles the rest","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T14:13:48.804954-08:00","updated_at":"2025-12-25T21:00:15.881591-08:00","closed_at":"2025-12-25T21:00:15.881591-08:00","close_reason":"Nice-to-have polish features. Not essential for v0.1."} {"id":"gt-nvql","title":"max Handoff","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T11:47:59.020501-08:00","updated_at":"2025-12-26T16:54:46.25429-08:00","closed_at":"2025-12-26T16:54:46.25429-08:00","close_reason":"GT_ROLE fix complete, ready for restart"} -{"id":"gt-nvws7","title":"Digest: mol-deacon-patrol","description":"Quick patrol: no messages, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:03:52.500691-08:00","updated_at":"2025-12-25T11:03:52.500691-08:00","closed_at":"2025-12-25T11:03:52.500657-08:00"} {"id":"gt-nxea","title":"Digest: mol-deacon-patrol","description":"Patrol #3: Routine - 6 agents healthy","status":"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-nzona","title":"Digest: mol-deacon-patrol","description":"Patrol 12: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:30.756048-08:00","updated_at":"2025-12-25T11:05:30.756048-08:00","closed_at":"2025-12-25T11:05:30.756017-08:00","close_reason":"Squashed from 8 wisps"} @@ -1213,7 +1213,7 @@ {"id":"gt-o5ra","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no lifecycle requests, 8 active sessions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:54:13.477737-08:00","updated_at":"2025-12-24T20:54:13.477737-08:00","closed_at":"2025-12-24T20:54:13.477706-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-o75l","title":"Merge: gt-h6eq.3","description":"branch: polecat/keeper\ntarget: main\nsource_issue: gt-h6eq.3\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:49:58.84455-08:00","updated_at":"2025-12-23T12:22:23.431739-08:00","closed_at":"2025-12-23T12:22:23.431739-08:00","close_reason":"Merged to main in gt-h6eq swarm"} {"id":"gt-o7d4a","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Quick cycle, all quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:07:49.101641-08:00","updated_at":"2025-12-25T17:07:49.101641-08:00","closed_at":"2025-12-25T17:07:49.101607-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-oahqo","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:36.911655-08:00","updated_at":"2025-12-25T11:05:36.911655-08:00","closed_at":"2025-12-25T11:05:36.911619-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-oahqo","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:36.911655-08:00","updated_at":"2025-12-25T11:05:36.911655-08:00","closed_at":"2025-12-25T11:05:36.911619-08:00"} {"id":"gt-ob0t","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T12:46:15.328647-08:00","updated_at":"2025-12-25T01:33:00.697734-08:00","closed_at":"2025-12-25T01:33:00.697734-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-ob0t.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T12:46:15.421667-08:00","updated_at":"2025-12-25T01:33:00.68133-08:00","closed_at":"2025-12-25T01:33:00.68133-08:00","close_reason":"Test pollution cleanup","dependencies":[{"issue_id":"gt-ob0t.1","depends_on_id":"gt-ob0t","type":"parent-child","created_at":"2025-12-24T12:46:15.422135-08:00","created_by":"daemon"}]} {"id":"gt-obxz","title":"Digest: mol-deacon-patrol","description":"Patrol #9","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:23:37.705161-08:00","updated_at":"2025-12-24T22:23:37.705161-08:00","closed_at":"2025-12-24T22:23:37.705133-08:00","close_reason":"Squashed from 8 wisps"} @@ -1243,6 +1243,7 @@ {"id":"gt-ox67","title":"Maintenance: Regular cleanup of closed MR/gate beads","description":"Closed merge-request and gate beads accumulate over time. Need regular cleanup.\n\n## Cleanup Candidates\n- type=merge-request with status=closed\n- type=gate with status=closed\n- type=molecule with status=closed (completed workflows)\n\n## Options\n1. **Deacon patrol step** - squash closed MRs periodically\n2. **Refinery post-merge** - close and tombstone MR after successful merge\n3. **bd doctor check** - warn when stale MR count exceeds threshold\n\n## Consideration\nKeep some audit trail? Or just tombstone after N days?","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T14:38:31.532094-08:00","updated_at":"2025-12-23T14:38:31.532094-08:00"} {"id":"gt-ox9","title":"Test from Mayor","description":"This is a test message via GGT mail","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-16T22:04:31.483843-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"} {"id":"gt-oxqry","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 18: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:30:31.909987-08:00","updated_at":"2025-12-26T13:30:31.909987-08:00","closed_at":"2025-12-26T13:30:31.909948-08:00","close_reason":"Squashed from 9 wisps"} +{"id":"gt-oxtdp","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:17:35.222414-08:00","updated_at":"2025-12-25T19:17:35.222414-08:00","closed_at":"2025-12-25T19:17:35.222361-08:00"} {"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-p3kbn","title":"MEOW Stack Evolution: Higher-Order Workflow Abstractions","description":"Molecular Expression of Work (MEOW) - the full taxonomy of workflow abstractions.\n\n## Current Hierarchy\n\n```\nWORK TRACKING WORKFLOW EXECUTION\n───────────── ──────────────────\n\nBead (issue) Step (action)\n │ │\n ▼ ▼\nEpic (bead group) Molecule (runtime)\n │ │\n ▼ │\n └───────► CAMPAIGN ◄───────┘\n │\n ▼\n Schematic (domain template)\n │\n ▼\n Protocol (interface/type)\n │\n ▼\n Catalyst (meta-generator)\n │\n ▼\n Mol Mall (distribution)\n```\n\n## Key Concepts\n\n1. **Campaign** (gt-camx5): Molecule-wrapped Epic graph for orchestrated execution\n2. **Schematic** (gt-8ws7o): Domain-level formula composition\n3. **Protocol** (gt-y3jb9): Type system for formulas\n4. **SDK** (gt-ihzqr): Developer tooling (Forge, Lab, Validator)\n5. **Mol Mall** (gt-vm85o): Package registry for distribution\n\n## Design Principles\n\n- Chemistry metaphor: atoms → molecules → compounds → materials\n- Two orthogonal dimensions: work tracking × workflow execution\n- Campaign is the convergence point\n- Everything compiles down to executable molecules\n\n## Origin\n\nDiscussion: 2024-12-26, Mayor session\nRelated: docs/formula_evolution.md\nFoundation: gt-8tmz (Molecule Algebra)\n","status":"open","priority":3,"issue_type":"epic","created_at":"2025-12-26T01:01:40.332231-08:00","updated_at":"2025-12-26T01:01:40.332231-08:00"} {"id":"gt-p3v5n","title":"Witness Arm Bonding","description":"# Witness Patrol Redesign\n\n\u003e **Status**: Design pivoted from Christmas Ornament to linear patrol (Dec 2024)\n\n## Original Problem\n\nWitness needs to monitor and intervene on multiple polecats. Original design proposed \"Christmas Ornament\" pattern with dynamic arms per polecat and fanout gates.\n\n## Design Pivot: Why Christmas Ornament Was Wrong\n\nThe Christmas Ornament pattern (dynamic mol-polecat-arm per worker) felt un-Gas-Town:\n\n1. **Explicit state tracking**: Nudge counts, timestamps, per-polecat state\n2. **Complex machinery**: Dynamic bonding, fanout gates, aggregation\n3. **Against philosophy**: Gas Town prefers discovery over tracking, events over state\n\n**Key insight**: With step-based polecat sessions (`gt mol step done` restarts session each step), polecats are either working a step or starting a step. \"Nudge counts across sessions\" becomes less meaningful.\n\n## New Design: Linear Patrol + Task Tool Parallelism + Cleanup Wisps\n\n### Patrol Shape (Deacon-style)\n\n```\ninbox-check -\u003e process-cleanups -\u003e check-refinery -\u003e survey-workers -\u003e context-check -\u003e loop\n```\n\nNo dynamic arms. No fanout gates. Linear and simple.\n\n### Key Changes\n\n| Aspect | Old (Christmas Ornament) | New (Linear Patrol) |\n|--------|--------------------------|---------------------|\n| Per-polecat inspection | mol-polecat-arm bonded dynamically | Task tool subagents within survey-workers |\n| State tracking | Persistent nudge counts in handoff bead | Fresh observation each cycle (discover from beads timestamps) |\n| Cleanup queue | Explicit list in patrol state | Cleanup wisps (finalizer pattern) |\n| Parallelism | Molecule arms (fanout gate) | Task tool subagents |\n| Aggregation | waits_for: all-children | Task tool returns |\n\n### The Finalizer Pattern (Cleanup Wisps)\n\nWhen POLECAT_DONE arrives, Witness creates a cleanup wisp:\n```bash\nbd create --wisp --title \"cleanup:ace\" --labels cleanup,polecat:ace\n```\n\nThe wisp's existence IS the pending cleanup. Witness processes these in `process-cleanups` step:\n- Verify git clean, issue closed, commits exist\n- Kill session, remove worktree\n- Burn the wisp\n\nFailed cleanups? Leave wisp, retry next cycle. GC-style finalization.\n\n### Task Tool Parallelism\n\nInstead of molecule arms, use Claude's Task tool for parallel polecat inspection:\n\n```markdown\n## survey-workers step\n\nFor each polecat, launch a Task tool subagent:\n- Capture tmux state\n- Assess working/idle/error/done\n- Check beads for step progress\n- Decide and execute action (nudge/escalate/none)\n\nTask tool handles parallelism. No molecule machinery needed.\n```\n\n## Implementation\n\n- [x] Draft mol-witness-patrol-v2.formula.toml (linear patrol)\n- [ ] Test new patrol formula\n- [ ] Deprecate mol-polecat-arm\n- [ ] Remove fanout gate dependency\n\n## Files\n\n- `.beads/formulas/mol-witness-patrol-v2.formula.toml` - New linear patrol\n- `.beads/formulas/mol-witness-patrol.formula.toml` - Old Christmas Ornament (to deprecate)\n\n## Success Criteria\n\n- Witness patrols work with 3+ polecats using Task tool parallelism\n- Cleanup wisps correctly track pending cleanups\n- No persistent nudge state - fresh observation each cycle\n- Simpler, more Gas Town-y design","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-25T20:46:22.29819-08:00","updated_at":"2025-12-26T15:11:13.212038-08:00","closed_at":"2025-12-26T15:11:13.212038-08:00","close_reason":"Pivot complete: Linear patrol + Task tool fanout is now the canonical pattern. Christmas Ornament pattern deprecated in favor of simpler approach. Formula verified linear.","dependencies":[{"issue_id":"gt-p3v5n","depends_on_id":"gt-psj76","type":"blocks","created_at":"2025-12-25T20:47:17.026491-08:00","created_by":"daemon"},{"issue_id":"gt-p3v5n","depends_on_id":"gt-twjr5","type":"blocks","created_at":"2025-12-25T20:55:05.133165-08:00","created_by":"daemon"}]} @@ -1253,8 +1254,8 @@ {"id":"gt-p3yhp","title":"gt doctor: Check and fix beads routing configuration","description":"## Summary\n\n`gt doctor` should check that all rigs with beads have proper routing entries\nin `~/gt/.beads/routes.jsonl`, and offer to fix any missing entries.\n\n## Checks to Add\n\n### Check: routes.jsonl exists\n- Verify `~/gt/.beads/routes.jsonl` exists\n- If missing, create with entries for all known rigs\n\n### Check: All rigs have routing entries\nFor each rig in town:\n1. Find the rig's beads prefix (from config.yaml or sample issue)\n2. Check if routes.jsonl has an entry for that prefix\n3. If missing, report and offer to add\n\n### Check: Routes point to valid locations\nFor each route in routes.jsonl:\n1. Verify the path exists and has a .beads directory\n2. Verify the .beads directory has a beads.db\n3. If invalid, report and offer to remove\n\n## Fix Actions\n\n- `--fix` should automatically add missing routes\n- `--fix` should remove invalid routes (or prompt)\n- Should handle redirect files when validating paths\n\n## Example Output\n\n```\nChecking beads routing...\n [!] Rig 'myproject' (prefix: mp-) has no routing entry\n Run: gt doctor --fix to add routing\n\nRoutes health:\n [OK] gt- -\u003e gastown/mayor/rig\n [OK] bd- -\u003e beads/mayor/rig\n [!] mp- -\u003e myproject/mayor/rig (MISSING)\n```","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-26T14:45:49.438679-08:00","updated_at":"2025-12-26T14:45:49.438679-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"} {"id":"gt-p52mk","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 17: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:29:58.302087-08:00","updated_at":"2025-12-26T13:29:58.302087-08:00","closed_at":"2025-12-26T13:29:58.30205-08:00","close_reason":"Squashed from 9 wisps"} -{"id":"gt-p7isy","title":"Digest: mol-deacon-patrol","description":"Patrol 18: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:53:55.159652-08:00","updated_at":"2025-12-26T16:53:55.159652-08:00","closed_at":"2025-12-26T16:53:55.159603-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-p7isy","depends_on_id":"gt-wisp-nss","type":"parent-child","created_at":"2025-12-26T16:53:55.160483-08:00","created_by":"stevey"}]} {"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"} {"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"} {"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"} @@ -1263,13 +1264,12 @@ {"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-piy9c","title":"Digest: mol-deacon-patrol","description":"Patrol 9","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:51:02.414152-08:00","updated_at":"2025-12-25T20:51:02.414152-08:00","closed_at":"2025-12-25T20:51:02.414093-08:00"} {"id":"gt-pj222","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All agents healthy, no messages, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:26:34.954324-08:00","updated_at":"2025-12-25T17:26:34.954324-08:00","closed_at":"2025-12-25T17:26:34.954274-08:00","close_reason":"Squashed from 8 wisps"} -{"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"} {"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"} {"id":"gt-pm5rs","title":"Digest: mol-deacon-patrol","description":"Patrol 3: nux exited (wrong-rig escalation), 11 sessions, all core healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:09:23.555634-08:00","updated_at":"2025-12-25T20:09:23.555634-08:00","closed_at":"2025-12-25T20:09:23.555585-08:00","close_reason":"Squashed from 8 wisps"} {"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"} +{"id":"gt-pnch9","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:29:48.868198-08:00","updated_at":"2025-12-25T07:29:48.868198-08:00","closed_at":"2025-12-25T07:29:48.868161-08:00"} {"id":"gt-pnu4","title":"Test","description":"Body","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T21:38:39.019559-08:00","updated_at":"2025-12-25T14:12:42.272191-08:00","deleted_at":"2025-12-25T14:12:42.272191-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} {"id":"gt-pnurj","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Green - routine cycle complete, handing off","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:36:47.596964-08:00","updated_at":"2025-12-25T19:36:47.596964-08:00","closed_at":"2025-12-25T19:36:47.59691-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-podor","title":"Digest: mol-deacon-patrol","description":"Patrol 20: all clear, handoff due","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:54:52.330177-08:00","updated_at":"2025-12-26T16:54:52.330177-08:00","closed_at":"2025-12-26T16:54:52.330127-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-podor","depends_on_id":"gt-wisp-bdd","type":"parent-child","created_at":"2025-12-26T16:54:52.331016-08:00","created_by":"stevey"}]} @@ -1284,10 +1284,10 @@ {"id":"gt-pvox","title":"Digest: mol-deacon-patrol","description":"Patrol #4: 2 Witnesses OK, 2 Refineries OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:21:42.037058-08:00","updated_at":"2025-12-24T22:21:42.037058-08:00","closed_at":"2025-12-24T22:21:42.037029-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-pvzj","title":"Digest: mol-deacon-patrol @ 2025-12-24 20:23","description":"Patrol complete: inbox clear, all agents healthy, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T20:23:09.751138-08:00","updated_at":"2025-12-24T20:23:09.751138-08:00","closed_at":"2025-12-24T20:23:09.751066-08:00","close_reason":"Squashed from wisp gt-sb2 (9 issues)"} {"id":"gt-pyqv","title":"Work on ga-ct2: Add MR workflow to polecat completion. Wh...","description":"Work on ga-ct2: Add MR workflow to polecat completion. When polecat completes work, auto-create MR to integration branch. When done, submit MR (not PR) to integration branch for Refinery.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-19T22:58:35.473928-08:00","updated_at":"2025-12-21T17:20:42.831549-08:00"} -{"id":"gt-pytfu","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:33:56.257524-08:00","updated_at":"2025-12-25T16:33:56.257524-08:00","closed_at":"2025-12-25T16:33:56.257491-08:00"} {"id":"gt-q16tj","title":"Digest: mol-deacon-patrol","description":"Patrol complete: inbox empty, all agents healthy, fixed invalid hook attachment on gt-w98d","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:18:37.954041-08:00","updated_at":"2025-12-26T13:18:37.954041-08:00","closed_at":"2025-12-26T13:18:37.954007-08:00","close_reason":"Squashed from 9 wisps"} {"id":"gt-q1z4","title":"Digest: mol-deacon-patrol","description":"Patrol 13: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:37:57.933025-08:00","updated_at":"2025-12-24T22:37:57.933025-08:00","closed_at":"2025-12-24T22:37:57.932989-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-q3ac","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:24","description":"Patrol 9: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:24:50.821721-08:00","updated_at":"2025-12-24T19:24:50.821721-08:00","closed_at":"2025-12-24T19:24:50.821645-08:00","close_reason":"Squashed from wisp gt-dri (9 issues)"} +{"id":"gt-q3mil","title":"Digest: mol-deacon-patrol","description":"P9: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:12:02.16159-08:00","updated_at":"2025-12-25T20:12:02.16159-08:00","closed_at":"2025-12-25T20:12:02.16154-08:00"} {"id":"gt-q511","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:21","description":"Patrol 3: all healthy, no work","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:21:01.70741-08:00","updated_at":"2025-12-24T19:21:01.70741-08:00","closed_at":"2025-12-24T19:21:01.707329-08:00","close_reason":"Squashed from wisp gt-8ps (9 issues)"} {"id":"gt-q6lg","title":"mol-crew-session: Startup/shutdown protocols for crew workers","description":"Crew workers (like joe, max) don't have patrol molecules keeping them fresh. When gt gets rebuilt, they have stale binaries that cause hangs and bugs.\n\n## Problem\n\n- Crew binaries get stale when gt is rebuilt elsewhere\n- No automatic pull/rebase/rebuild on session start\n- No standardized shutdown protocol (sync, push, handoff)\n\n## Solution: mol-crew-session\n\nA molecule template for crew sessions:\n\n### Startup Phase\n1. `git pull --rebase` - get latest code\n2. `bd sync` - sync beads\n3. `go build -o gt ./cmd/gt` - rebuild gt (if in gastown)\n4. `gt prime` - load context\n\n### Work Phase \n- Open-ended human interaction\n- No molecule steps - just work until done\n\n### Shutdown Phase\n1. `git status` - check for uncommitted changes\n2. `bd sync` - sync beads\n3. `git push` - push code\n4. Handoff if incomplete work\n\n## Implementation\n\n1. Define mol-crew-session in builtin_molecules.go\n2. Update crew CLAUDE.md to reference the protocol\n3. Optionally: gt prime auto-runs startup steps\n\n## Dependencies\n\n- Should implement after deacon/witness/polecat patrols are stable\n- Consider: gt-3x0z.10 (Witness patrol molecules)\n\n## Related\n\n- gt-3x0z.9: Deacon wisp patrol (done)\n- fix-gt script: Current workaround for binary freshness","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T02:48:25.658692-08:00","updated_at":"2025-12-22T02:48:25.658692-08:00"} {"id":"gt-q8du","title":"Configuration in Beads: use pinned beads for rig/agent config","description":"## Summary\n\nMove configuration from JSON files into Beads data plane using pinned beads.\n\n## Motivation\n\n- Config becomes versionable and syncable like issues\n- Agents can read config via `bd show`\n- Unified data model for everything\n- Supports the 'Beads as Universal Data Plane' vision (gt-aqm)\n\n## Config Types to Migrate\n\n### Rig-level (pinned per rig)\n- Theme/colors for tmux status line\n- Default branch naming conventions\n- Merge queue settings\n- Witness thresholds\n\n### Agent-level (pinned per role)\n- Handoffs (already planned - gt-cu7r)\n- Agent preferences\n- Current focus/context\n\n### Town-level (pinned at town root)\n- Cross-rig settings\n- Federation config\n- Global themes\n\n## Implementation\n\n1. Implement StatusPinned (beads-6v2) ✓ in progress\n2. Create config pinned beads on rig init\n3. Add `bd config get/set` commands that read/write pinned beads\n4. Migrate existing config.json fields\n\n## Naming Convention\n\n```\n\u003cprefix\u003e-cfg-\u003cscope\u003e\ngt-cfg-theme # gastown theme\nbd-cfg-merge # beads merge settings\ngm-cfg-town # town-level config\n```\n\n## Dependencies\n\n- beads-6v2: Add StatusPinned to beads schema\n- gm-w13: Pinned Beads epic","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-18T21:58:59.898116-08:00","updated_at":"2025-12-25T21:02:04.082348-08:00","closed_at":"2025-12-25T21:02:04.082348-08:00","close_reason":"Future features or design docs. Not essential for v0.1 autonomous patrols."} @@ -1305,9 +1305,11 @@ {"id":"gt-qh2","title":"Session cycling UX: smooth transitions via TUI wrapper","description":"## Problem\n\nCurrent CLI agent session cycling is painful:\n- Shell → CC starts → priming → context loads → ready → work → exit/crash → repeat\n- Each cycle is 30-60 seconds of cold boot\n- No continuity between shell and agent's inner state\n- Raw \"session not running, starting...\" loop is the baseline\n\n## GGT Advantages (already have)\n\n- Beads: Work state survives session death completely\n- Mail: Handoff notes from past-self to future-self \n- Prime commands: Structured context reload\n\n## Gap: Transition Mechanics\n\nIdeas to explore when actively using CLI:\n\n1. **In-band cycling** - `/restart` or `/cycle` command, agent handles own restart without dropping to shell\n\n2. **Hot standby** - TUI maintains pre-warmed session in background, switch to already-primed agent\n\n3. **Persistent wrapper** - Bubbletea TUI stays running across session cycles, CC sessions come/go inside it\n\n4. **Session pooling** - Keep 2-3 primed sessions ready, never wait for cold start\n\n## Deferred\n\nDeliberately P4 until we're actively using the simpler CLI and feel the pain firsthand.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-15T20:38:12.660716-08:00","updated_at":"2025-12-15T23:17:34.27061-08:00"} {"id":"gt-qivm","title":"gt crew at: auto-prime when exec'ing Claude in-session","description":"When running 'gt crew at \u003cname\u003e' from inside the target session, we exec Claude directly. But this means we can't send 'gt prime' afterward since we ARE the process.\n\nPossible solutions:\n1. Claude startup hook that runs gt prime\n2. Pass prompt as argument to claude CLI\n3. Wrapper script approach\n\nRelated: crew resume prompt also can't be sent in this path.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T15:13:38.035775-08:00","updated_at":"2025-12-21T11:50:55.924767-08:00","closed_at":"2025-12-21T11:50:55.924767-08:00","close_reason":"Implemented: execClaude now passes 'gt prime' as initial prompt to Claude CLI"} {"id":"gt-qj12","title":"Obsolete beads issues need cleanup","description":"Found obsolete issues that should be closed or fixed:\n\nTest artifacts to close:\n- gt-nriy: Test: Alpha to Beta (message test)\n- gt-gswn: Integration test (test artifact)\n- gt-54kn: Test: New Router\n\nBroken dependencies (reference non-existent gt-test123):\n- gt-vhby: implement\n- gt-tvos: load-context\n- gt-lwuu.2: implement (template variable unresolved)\n\nCloudRun references (non-existent /deploy/cloudrun/):\n- gt-9a2.6, gt-9a2.7, gt-9a2.11\n\nReview and close/update these before launch.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T12:50:57.843146-08:00","updated_at":"2025-12-26T12:50:53.952529-08:00","closed_at":"2025-12-26T12:50:53.952529-08:00","close_reason":"Cleanup complete: 5 issues already tombstoned, 16 CloudRun orphans now closed, gt-gswn kept (valid task blocked by gt-dh65)","dependencies":[{"issue_id":"gt-qj12","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.394519-08:00","created_by":"daemon"}]} +{"id":"gt-qkoah","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:54:19.67205-08:00","updated_at":"2025-12-25T13:54:19.67205-08:00","closed_at":"2025-12-25T13:54:19.67202-08:00"} {"id":"gt-qn4l","title":"bd create should support molecule type","description":"gt molecule commands expect type=molecule but bd validates against bug|feature|task|epic|chore|merge-request only","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-19T18:25:31.591953-08:00","updated_at":"2025-12-19T18:41:15.654491-08:00","closed_at":"2025-12-19T18:41:15.654491-08:00"} {"id":"gt-qna4","title":"gt done: Missing command referenced in polecat docs","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-20T01:10:57.495372-08:00","updated_at":"2025-12-20T07:47:01.733466-08:00","closed_at":"2025-12-20T07:47:01.733466-08:00"} {"id":"gt-qns0","title":"TIDY UP: Your previous work (patrol runner) was already m...","description":"TIDY UP: Your previous work (patrol runner) was already merged to main. Check your git status is clean, sync beads, and if nothing to do, just run 'gt done'.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/ace","created_at":"2025-12-21T17:26:39.343497-08:00","updated_at":"2025-12-21T17:30:05.98355-08:00","closed_at":"2025-12-21T17:30:05.98355-08:00","close_reason":"Polecats cleaned up after reboot"} +{"id":"gt-qnt78","title":"Daemon sending heartbeat to Mayor - should not","description":"Daemon appears to be sending heartbeat messages to Mayor, but Mayor should not receive heartbeats. Observed at least once or twice - needs investigation to confirm and fix.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-26T17:39:55.247942-08:00","updated_at":"2025-12-26T17:42:26.125972-08:00","closed_at":"2025-12-26T17:42:26.125972-08:00","close_reason":"Already fixed in b681789 (ZFC cleanup). pokeMayor was explicitly removed. Daemon only sends heartbeats to Deacon now."} {"id":"gt-qobkl","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All healthy, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:18:57.096949-08:00","updated_at":"2025-12-25T18:18:57.096949-08:00","closed_at":"2025-12-25T18:18:57.096888-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-qp98","title":"Refactor: Eliminate state.json, use beads assignee field for polecat state","description":"## Problem\n\nstate.json in each polecat worktree duplicates data that should be in beads:\n- `issue` field duplicates assignment (should be issue.assignee)\n- `state` field duplicates status (derivable from issue.status)\n- `name/rig/branch/clone_path` are all derivable from filesystem/git\n\nThis violates 'Beads as the data plane' (HOP Decision 001).\n\n## Current State\n\n```json\n{\n \"name\": \"Angharad\", // Derivable: basename(cwd)\n \"rig\": \"gastown\", // Derivable: parent dir name\n \"state\": \"working\", // Should be: issue.status\n \"clone_path\": \"/path\", // Derivable: cwd\n \"branch\": \"polecat/X\", // Derivable: git branch\n \"issue\": \"gt-xyz\", // Should be: issue.assignee\n \"timestamps\": \"...\" // Should be in beads history\n}\n```\n\n## Target State\n\n**Polecat identity**: Derived from worktree path\n**Polecat assignment**: `issue.assignee = 'gastown/Angharad'`\n**Polecat state**: Derived from issue.status (in_progress = working, closed = done)\n**Polecat existence**: Worktree directory exists\n\n## Benefits\n\n1. Single source of truth (no sync issues)\n2. Queryable: `bd list --assignee=gastown/Angharad`\n3. History tracking via beads\n4. Cross-agent coordination via beads sync\n5. Simpler code (no state file management)\n\n## Implementation\n\n1. Update `gt spawn` to set issue.assignee instead of writing state.json\n2. Update polecat list/status commands to query beads\n3. Update Witness to query beads for polecat state\n4. Remove state.json read/write code\n5. Keep state.json as optional bootstrap cache (perf optimization only)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T11:40:33.389689-08:00","updated_at":"2025-12-19T12:07:43.519059-08:00","closed_at":"2025-12-19T12:07:43.519059-08:00"} {"id":"gt-qqtk","title":"Speed up test suite","description":"Tests are running slow during MQ processing. Investigate and optimize:\n- Profile test execution time\n- Look for slow tests (network, file I/O, sleeps)\n- Consider parallel test execution\n- Cache expensive setup where possible","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-19T17:44:14.597955-08:00","updated_at":"2025-12-19T17:44:14.597955-08:00"} @@ -1347,7 +1349,6 @@ {"id":"gt-qz2l","title":"Refinery patrol: Add banners and wisp-based execution","description":"Bring Refinery patrol up to Deacon's level of sophistication:\n\n## Current state\n- mol-refinery-patrol exists (needs verification)\n- Basic merge queue processing\n\n## Needed\n1. **Banners** - Print step banners like Deacon does:\n ```\n ═══════════════════════════════════════════════════════════════\n ⚗️ QUEUE-CHECK\n Processing merge queue entries\n ═══════════════════════════════════════════════════════════════\n ```\n\n2. **Wisp-based execution** - Spawn patrol as wisp, squash when complete\n3. **Handoff bead attachment** - Refinery 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.777589-08:00","updated_at":"2025-12-24T00:18:03.103523-08:00","closed_at":"2025-12-23T19:39:03.524185-08:00","close_reason":"Implemented banners, wisp-based execution, and propulsion protocol for Refinery patrol","dependencies":[{"issue_id":"gt-qz2l","depends_on_id":"gt-y481","type":"parent-child","created_at":"2025-12-23T13:20:15.787696-08:00","created_by":"daemon"}]} {"id":"gt-r01","title":"EXTERNAL: Beads Messaging \u0026 Knowledge Graph (bd-kwro)","description":"Tracking issue for external dependency on Beads v0.30.2 messaging features.\n\nBeads epic: bd-kwro in ~/src/beads (steveyegge/beads repo)\n\nThis blocks GGT work that depends on:\n- bd mail send/inbox/read/ack commands\n- message issue type\n- replies_to threading\n- Hooks system for notifications\n- Identity configuration\n\nGGT mail commands will be thin wrappers around bd mail once available.\n\nWhen bd-kwro ships in Beads v0.30.2, close this and unblock dependent work.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-16T13:12:02.676883-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-r56e4","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, 1 message processed, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:02:47.692316-08:00","updated_at":"2025-12-25T17:02:47.692316-08:00","closed_at":"2025-12-25T17:02:47.692285-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-r5r66","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T00:04:52.90199-08:00","updated_at":"2025-12-25T01:26:27.875973-08:00","closed_at":"2025-12-25T01:26:27.875973-08:00"} {"id":"gt-r6td","title":"gt spawn: Notify Deacon and Witness on polecat start","description":"When gt spawn creates a polecat, it should mail both Deacon and Witness:\n\n```\ngt mail send \u003crig\u003e/witness -s 'POLECAT_STARTED furiosa' -m 'Issue: gt-xxx'\ngt mail send deacon/ -s 'POLECAT_STARTED gastown/furiosa' -m 'Issue: gt-xxx'\n```\n\nThis enables:\n- Witness to bond a lease to its patrol wisp\n- Deacon to verify worker started (redundancy)\n- Both to nudge if worker is idle at prompt\n\nPart of the village self-monitoring architecture.","status":"closed","priority":1,"issue_type":"feature","assignee":"gastown/furiosa","created_at":"2025-12-22T22:01:11.790203-08:00","updated_at":"2025-12-22T22:53:01.103369-08:00","closed_at":"2025-12-22T22:53:01.103369-08:00","close_reason":"Closed"} {"id":"gt-r73s","title":"Merge: gt-5wb7","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-5wb7\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:43:40.018286-08:00","updated_at":"2025-12-21T17:20:27.499878-08:00","closed_at":"2025-12-21T17:20:27.499878-08:00","close_reason":"ORPHANED: Branch never pushed, worktree deleted"} {"id":"gt-r7jj2","title":"Move mol run semantics from bd into gt spawn","description":"Currently gt spawn shells out to bd mol run for the pour+assign+pin combo. This blurs the architectural boundary between bd (data layer) and gt (orchestration layer).\n\n## Current State\n- bd mol run = bd pour + bd update --status=in_progress + bd pin --for me\n- gt spawn calls: exec.Command(\"bd\", \"mol\", \"run\", ...)\n\n## Proposed Change\nMove the combo logic into gt spawn directly:\n1. gt spawn calls bd pour (create issues from template)\n2. gt spawn calls bd update --status=in_progress (claim work)\n3. gt spawn calls bd pin (set pinned flag)\n4. gt spawn does session/tmux orchestration\n\nThis keeps bd as pure data operations and gt as the orchestration layer.\n\n## Why\n- Cleaner separation of concerns\n- bd mol run feels like orchestration but it's in the data layer\n- gt should own the \"start a workflow\" semantics\n\n## Coordination\nbeads side will deprecate bd mol run once gt no longer depends on it.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:59:01.873712-08:00","updated_at":"2025-12-25T01:05:35.761412-08:00","closed_at":"2025-12-25T01:05:35.761412-08:00","close_reason":"Moved mol run semantics into gt spawn - now uses bd pour + bd update + bd pin"} @@ -1373,11 +1374,12 @@ {"id":"gt-rhfji","title":"gt up: set BD_ACTOR env var when spawning agents","description":"When gt spawns agents (polecats, crew, patrol roles), it should set BD_ACTOR env var so that bd commands (like `bd hook`) know the agent identity.\n\nCurrently gt sets GT_ROLE but bd can't check that (no coupling to gt). bd already checks BD_ACTOR, so gt just needs to set it.\n\nPlaces to update:\n- `gt up` for polecats/crew\n- Deacon, Witness, Refinery spawning\n- Any other agent spawn points\n\nRelated: closed bd-fej5 in beads repo as obsolete (fix belongs here).","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T12:41:21.092758-08:00","updated_at":"2025-12-25T13:26:47.176904-08:00","closed_at":"2025-12-25T13:26:47.176904-08:00","close_reason":"Closed"} {"id":"gt-rivr","title":"Activity Feed TUI","description":"Terminal UI for browsing Gas Town activity. Shows hierarchical view of rigs, workers, and their current state. Features: live updates, expandable details, molecule progress (step X of Y). Built with bubbletea/lipgloss. Design doc: history/activity-feed-tui-design.md","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-23T16:26:45.667677-08:00","updated_at":"2025-12-25T20:59:04.552316-08:00","closed_at":"2025-12-25T20:59:04.552316-08:00","close_reason":"TUI is nice-to-have polish. Not essential for v0.1 autonomous patrols."} {"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":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-19T16:17:16.083512-08:00","updated_at":"2025-12-25T20:54:19.096667-08:00","closed_at":"2025-12-25T20:54:19.096667-08:00","close_reason":"Orphaned: referenced in commit but not closed"} -{"id":"gt-rkvfk","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:58:37.882005-08:00","updated_at":"2025-12-26T13:58:37.882005-08:00","closed_at":"2025-12-26T13:58:37.881968-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-rp0f4","title":"Digest: mol-deacon-patrol","description":"Patrol 6: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:04:58.835959-08:00","updated_at":"2025-12-25T11:04:58.835959-08:00","closed_at":"2025-12-25T11:04:58.835926-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-rnkmb","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:19:47.683001-08:00","updated_at":"2025-12-26T17:19:47.683001-08:00","closed_at":"2025-12-26T17:19:47.682962-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-rnkmb","depends_on_id":"gt-wisp-emh","type":"parent-child","created_at":"2025-12-26T17:19:47.6838-08:00","created_by":"stevey"}]} +{"id":"gt-rp0f4","title":"Digest: mol-deacon-patrol","description":"Patrol 6: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:04:58.835959-08:00","updated_at":"2025-12-25T11:04:58.835959-08:00","closed_at":"2025-12-25T11:04:58.835926-08:00"} {"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-rr1i","title":"mol-swarm-cleanup: Post-swarm debris cleanup molecule","description":"After a 20+ worker swarm completed, found significant beads debris:\n- 18 stale messages (work assignments, lifecycle requests, swarm instructions)\n- 3 completed issues still open/in_progress\n- Test messages accumulated\n\nNeed: Document a post-swarm checklist or create gt swarm cleanup command that:\n1. Closes stale work assignment messages\n2. Reviews in_progress issues for completion\n3. Closes orphaned lifecycle messages\n4. Optionally archives test messages","status":"open","priority":3,"issue_type":"chore","created_at":"2025-12-20T03:12:28.646175-08:00","updated_at":"2025-12-20T03:15:45.521085-08:00"} +{"id":"gt-rrd62","title":"Digest: mol-deacon-patrol","description":"Patrol 15: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:19:11.608183-08:00","updated_at":"2025-12-25T10:19:11.608183-08:00","closed_at":"2025-12-25T10:19:11.608153-08:00"} {"id":"gt-rsxwb","title":"implement","description":"Implement the solution for gt-ds3h3. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:59:05.782317-08:00","updated_at":"2025-12-25T14:12:42.080641-08:00","dependencies":[{"issue_id":"gt-rsxwb","depends_on_id":"gt-kp3s3","type":"parent-child","created_at":"2025-12-25T01:59:05.800066-08:00","created_by":"stevey"},{"issue_id":"gt-rsxwb","depends_on_id":"gt-up9uw","type":"blocks","created_at":"2025-12-25T01:59:05.816315-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.080641-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rt6g","title":"Bug: Deacon session linked to Mayor pane causes heartbeat crosstalk","description":"**Root cause found**: The gt-deacon tmux session was linked to gt-mayor window 2 - they shared the same pane (@283). When the daemon sent heartbeats to the Deacon, they appeared as typed input in the Mayor's window, interrupting user prompts.\n\n**Fix applied**: Killed the broken gt-deacon session. The daemon auto-recreates it with a proper independent pane.\n\n**Prevention**: Investigate how sessions can get linked and add safeguards to session creation code.\n\nOriginal symptom: Mayor receiving 'HEARTBEAT: Tip: Witnesses monitor polecats...' messages that ate user input.","status":"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"} @@ -1397,6 +1399,7 @@ {"id":"gt-s9im","title":"Remove gt context --usage estimation","description":"The external context estimation approach doesn't work:\n- tmux scrollback trick breaks with --cycle\n- Can't see actual context usage from outside\n- Only the agent knows its internal state\n\nRemove or deprecate:\n- gt context --usage flag\n- Any external context monitoring logic\n\nDocument why in comments: 'Context management is agent-initiated, not externally monitored.\nSee self-check guidance in role templates.'\n\nThis is P3 because it's cleanup - the feature just doesn't work, not actively harmful.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-23T01:46:42.887818-08:00","updated_at":"2025-12-23T01:46:42.887818-08:00"} {"id":"gt-sadkq","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with\nYAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents.\nSequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.776878-08:00","updated_at":"2025-12-25T11:27:29.564239-08:00","closed_at":"2025-12-25T11:27:29.564239-08:00","close_reason":"No plugins registered","dependencies":[{"issue_id":"gt-sadkq","depends_on_id":"gt-v7wq4","type":"blocks","created_at":"2025-12-25T02:11:33.919459-08:00","created_by":"stevey"}]} {"id":"gt-scak","title":"inbox-check","description":"Process witness mail: lifecycle requests, help requests.\n\n```bash\ngt mail inbox\n```\n\nHandle by message type:\n- LIFECYCLE/Shutdown: Queue for pre-kill verification\n- Blocked/Help: Assess if resolvable or escalate\n- HANDOFF: Load predecessor state\n- Work complete: Verify issue closed, proceed to pre-kill\n\nRecord any pending actions for later steps.\nMark messages as processed when complete.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.504858-08:00","updated_at":"2025-12-25T15:52:57.761579-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","deleted_at":"2025-12-25T15:52:57.761579-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-sd3up","title":"Digest: mol-deacon-patrol","description":"Patrol 13: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:18:42.136385-08:00","updated_at":"2025-12-25T10:18:42.136385-08:00","closed_at":"2025-12-25T10:18:42.136356-08:00"} {"id":"gt-sd6","title":"Enhanced polecat decommission prompting","description":"Add decommission checklist to polecat AGENTS.md.template. Make crystal clear: verify ALL before signaling done.\n\n## Checklist for AGENTS.md.template\n\n```markdown\n## Decommission Checklist\n\n**CRITICAL**: Before signaling done, you MUST complete this checklist.\nThe Witness will verify each item and bounce you back if dirty.\n\n### Pre-Done Verification\n\n```bash\n# 1. Git status - must be clean\ngit status\n# Expected: \"nothing to commit, working tree clean\"\n\n# 2. Stash list - must be empty\ngit stash list\n# Expected: (empty output)\n\n# 3. Beads sync - must be up to date\nbd sync --status\n# Expected: \"Up to date\" or \"Nothing to sync\"\n\n# 4. Branch merged - your work must be on main\ngit log main --oneline -1\ngit log HEAD --oneline -1\n# Expected: Same commit\n```\n\n### If Any Check Fails\n\n- **Uncommitted changes**: Commit them or discard if unnecessary\n- **Stashes**: Pop and commit, or drop if obsolete\n- **Beads out of sync**: Run `bd sync`\n- **Branch not merged**: Complete the merge workflow\n\n### Signaling Done\n\nOnly after ALL checks pass:\n\n```bash\nbd close \u003cissue-id\u003e\nbd sync\ntown mail send \u003crig\u003e/witness -s \"Work Complete\" -m \"Issue \u003cid\u003e done.\"\n```\n```\n\n## Implementation\n\nAdd to AGENTS.md.template in the polecat prompting section.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T19:48:57.911311-08:00","updated_at":"2025-12-25T21:01:03.650568-08:00","closed_at":"2025-12-25T21:01:03.650568-08:00","close_reason":"Old prompting and configuration tasks. Templates and beads-sync work.","dependencies":[{"issue_id":"gt-sd6","depends_on_id":"gt-82y","type":"blocks","created_at":"2025-12-15T19:49:06.008061-08:00","created_by":"daemon"}]} {"id":"gt-selw","title":"gt spawn: add --polecat flag for explicit worker selection","description":"Currently gt spawn requires positional arg format:\n```\ngt spawn gastown/Angharad --issue gt-xyz\n```\n\nBut I tried the more intuitive flag form:\n```\ngt spawn --issue gt-xyz --polecat Angharad\n```\n\nThis failed with 'unknown flag: --polecat'.\n\nThe flag form is more discoverable and consistent with other commands. Add --polecat flag as alternative to positional arg.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-19T01:41:38.540563-08:00","updated_at":"2025-12-19T01:57:17.0307-08:00","closed_at":"2025-12-19T01:57:17.0307-08:00"} {"id":"gt-shj28","title":"Digest: mol-deacon-patrol","description":"P15: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:59:23.72785-08:00","updated_at":"2025-12-25T19:59:23.72785-08:00","closed_at":"2025-12-25T19:59:23.72782-08:00"} @@ -1408,12 +1411,14 @@ {"id":"gt-sm9ti","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Quick cycle, all quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:05:29.027668-08:00","updated_at":"2025-12-25T17:05:29.027668-08:00","closed_at":"2025-12-25T17:05:29.027634-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-sn8if","title":"Digest: mol-deacon-patrol","description":"Patrol 8: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:43:39.832046-08:00","updated_at":"2025-12-25T13:43:39.832046-08:00","closed_at":"2025-12-25T13:43:39.832015-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-sp18","title":"Digest: mol-deacon-patrol","description":"Patrol #18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:26:11.030566-08:00","updated_at":"2025-12-24T22:26:11.030566-08:00","closed_at":"2025-12-24T22:26:11.030537-08:00","close_reason":"Squashed from 8 wisps"} +{"id":"gt-spdof","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-25T13:25:58.151972-08:00","updated_at":"2025-12-25T13:25:58.151972-08:00","closed_at":"2025-12-25T13:25:58.151943-08:00"} {"id":"gt-spt8v","title":"Fix docs: Formulas are JSON not YAML","description":"The molecular chemistry docs (molecule-algebra.md, molecular-chemistry.md) incorrectly refer to formulas as YAML. Formulas are JSON (.formula.json). Fix all references: .formula.yaml -\u003e .formula.json, 'YAML files' -\u003e 'JSON files', 'formula YAML' -\u003e 'formula JSON', code blocks from yaml to json syntax.","status":"open","priority":2,"issue_type":"chore","created_at":"2025-12-25T14:33:19.775501-08:00","updated_at":"2025-12-25T14:33:19.775501-08:00"} {"id":"gt-sq0t3","title":"BUG: gt handoff --dry-run still sends mail","description":"In handoff.go, the dry-run check happens AFTER sendHandoffMail() is called. This means --dry-run still sends mail.\n\n**Location**: handoff.go L126-143\n\n**Observed**: Testing with `gt handoff --dry-run -s 'Test' -m 'Message'` actually sent mail to mayor.\n\n**Fix**: Move mail sending inside the non-dry-run block, or check dry-run first.\n\n```go\n// Current (buggy):\nif handoffSubject \\!= \"\" || handoffMessage \\!= \"\" {\n sendHandoffMail(...) // Executes even in dry-run\\!\n}\nif handoffDryRun { // Too late\n return nil\n}\n\n// Should be:\nif handoffDryRun {\n // show what would happen\n return nil\n}\n// Then send mail\n```","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-25T22:02:51.953925-08:00","updated_at":"2025-12-25T22:05:46.321897-08:00","closed_at":"2025-12-25T22:05:46.321897-08:00","close_reason":"Fixed by moving dry-run check before sendHandoffMail"} {"id":"gt-sqa7w","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 4: routine check, all nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:37:41.769679-08:00","updated_at":"2025-12-26T15:37:41.769679-08:00","closed_at":"2025-12-26T15:37:41.769624-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-sqa7w","depends_on_id":"gt-wisp-pny","type":"parent-child","created_at":"2025-12-26T15:37:41.770546-08:00","created_by":"stevey"}]} {"id":"gt-sqi","title":"gt session restart/status: Complete session management","description":"Add missing session subcommands:\n\n- gt session restart \u003crig\u003e \u003cpolecat\u003e - Restart a session (stop + start)\n- gt session status \u003crig\u003e \u003cpolecat\u003e - Show session status details\n\nstatus should show:\n- Running state\n- Uptime\n- Current activity\n- Last output timestamp","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:47:34.700494-08:00","updated_at":"2025-12-19T12:05:27.344257-08:00","closed_at":"2025-12-19T12:05:27.344257-08:00","dependencies":[{"issue_id":"gt-sqi","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:23:43.034222-08:00","created_by":"daemon"}]} {"id":"gt-sr8","title":"Test merge request","description":"branch: polecat/Test/gt-test\ntarget: main\nsource_issue: gt-test\nworker: TestWorker\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-18T20:08:22.678439-08:00","updated_at":"2025-12-25T01:33:01.279692-08:00","closed_at":"2025-12-25T01:33:01.279692-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-sstg","title":"Deacon patrol molecules stored in wrong beads location","description":"outputDeaconPatrolContext in prime.go hardcodes 'gastown/mayor/rig' (line 691) to find patrol molecules. But Deacon is a town-level role, not a rig role. Deacon molecules should be in town root beads (~/gt/.beads/) not rig beads. This also affects gt mol status which uses findLocalBeadsDir() - from ~/gt/deacon/ it won't find the right beads location.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-23T13:30:18.021287-08:00","updated_at":"2025-12-23T13:30:18.021287-08:00"} +{"id":"gt-stekz","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:49:04.268748-08:00","updated_at":"2025-12-25T10:49:04.268748-08:00","closed_at":"2025-12-25T10:49:04.268712-08:00"} {"id":"gt-sult","title":"gt spawn beads sync warning is misleading for redirect-based polecats","description":"## Problem\n\nWhen spawning a polecat, gt spawn shows a warning:\n```\nWarning: beads sync: exit status 1\n```\n\nThis is misleading because polecats using the redirect architecture (`.beads/redirect`) share the canonical database at `mayor/rig/.beads/beads.db`. The 'stale beads' indicated by the warning is just git branch divergence (main vs beads-sync), not actual data staleness.\n\n## Expected Behavior\n\ngt spawn should either:\n1. Skip the beads sync check for polecats using redirects (they share the canonical DB)\n2. Or provide a clearer message like 'beads redirect active, using shared database'\n\n## Reproduction\n\n```bash\ngt spawn --issue gt-xxx --rig gastown --create\n# Shows 'Warning: beads sync: exit status 1' even though beads are current\n```\n\n## Root Cause\n\nspawn.go calls beads sync and treats any non-zero exit as a warning. But with redirects, the polecat doesn't need its own beads - it uses the canonical source via the redirect chain:\n```\npolecat/.beads/redirect -\u003e ../../.beads -\u003e gastown/.beads/redirect -\u003e mayor/rig/.beads\n```\n\n## Fix Options\n\n1. Check for .beads/redirect before calling sync\n2. Have bd sync return 0 when redirect is present\n3. Suppress the warning in spawn when redirect exists","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-21T14:02:01.28061-08:00","updated_at":"2025-12-25T21:01:40.92712-08:00","closed_at":"2025-12-25T21:01:40.92712-08:00","close_reason":"Low priority bugs or cosmetic issues. Not blocking autonomous patrols."} {"id":"gt-suvmb","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:43:56.468927-08:00","updated_at":"2025-12-25T16:43:56.468927-08:00","closed_at":"2025-12-25T16:43:56.468895-08:00"} {"id":"gt-svi","title":"Implement gt mq CLI commands","description":"Add gt mq subcommands as sugar over bd:\n\n- gt mq submit: Create MR for current branch\n- gt mq list: Show open merge requests\n- gt mq next: Show next MR ready to process\n- gt mq process: Engineer processes the queue\n- gt mq reorder \u003cid\u003e --after \u003cx\u003e: Change ordering via deps\n- gt mq status \u003cid\u003e: Show MR details\n\nAll commands should work with the Beads data plane.","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-16T23:02:16.649648-08:00","updated_at":"2025-12-18T20:22:54.684284-08:00","closed_at":"2025-12-18T20:22:54.684284-08:00","dependencies":[{"issue_id":"gt-svi","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:55.456462-08:00","created_by":"daemon"},{"issue_id":"gt-svi","depends_on_id":"gt-kp2","type":"blocks","created_at":"2025-12-16T23:03:12.689547-08:00","created_by":"daemon"}]} @@ -1430,12 +1435,14 @@ {"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":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-23T01:29:23.623455-08:00","updated_at":"2025-12-25T21:00:26.009815-08:00","closed_at":"2025-12-25T21:00:26.009815-08:00","close_reason":"P3 polish features. Not essential for v0.1."} {"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-t3kya","title":"Digest: mol-deacon-patrol","description":"Patrol 2: 1 mail archived, all agents healthy, 1 orphan fixed","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:14:35.793224-08:00","updated_at":"2025-12-26T17:14:35.793224-08:00","closed_at":"2025-12-26T17:14:35.793185-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-t3kya","depends_on_id":"gt-wisp-7g2","type":"parent-child","created_at":"2025-12-26T17:14:35.794004-08:00","created_by":"stevey"}]} {"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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-23T21:58:26.070984-08:00","updated_at":"2025-12-25T20:54:18.846623-08:00","closed_at":"2025-12-25T20:54:18.846623-08:00","close_reason":"Orphaned: referenced in commit but not closed"} {"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"} {"id":"gt-teq0p","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.776531-08:00","updated_at":"2025-12-25T11:28:06.945232-08:00","closed_at":"2025-12-25T11:28:06.945232-08:00","close_reason":"4 in_progress items found, no active polecats - noted for awareness","dependencies":[{"issue_id":"gt-teq0p","depends_on_id":"gt-v7wq4","type":"blocks","created_at":"2025-12-25T02:11:33.890608-08:00","created_by":"stevey"}]} {"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-tgy1v","title":"@group dynamic resolution in mail router","description":"Wire agent scanner into mail router for @group addresses.\n\n## Deliverables\n\n1. Parse @group syntax in router:\n - @rig/gastown → expand to all agents in gastown\n - @town → expand to all agents in all rigs\n - @witnesses → all witness agents\n - @crew/gastown → all crew in gastown\n\n2. Fan-out at send time:\n - Resolve @group to list of addresses\n - Create N message copies (one per recipient)\n - Each recipient gets their own issue in beads\n\n3. Update gt mail send to handle @group\n\n## Dependencies\n- Agent scanner utility (gt-xo05b)\n\n## Acceptance\n- @rig/gastown sends to all gastown agents\n- Each recipient has own message copy\n- Works with existing mail infrastructure","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:52:04.244948-08:00","updated_at":"2025-12-26T14:52:04.244948-08:00","dependencies":[{"issue_id":"gt-tgy1v","depends_on_id":"gt-xo05b","type":"blocks","created_at":"2025-12-26T14:53:03.081856-08:00","created_by":"daemon"}]} @@ -1478,7 +1485,6 @@ {"id":"gt-twjr5.5","title":"Agent parking and resuming","description":"Implement gt park and gt resume commands. Agent parks work on a gate, state persists across sessions. When gate condition met, Deacon sends wake mail. Agent resumes from parked state. Critical for async workflows.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:55:51.294474-08:00","updated_at":"2025-12-25T23:53:44.098396-08:00","closed_at":"2025-12-25T23:53:44.098396-08:00","close_reason":"Implemented gt park, gt resume, and gt gate wake commands","dependencies":[{"issue_id":"gt-twjr5.5","depends_on_id":"gt-twjr5","type":"parent-child","created_at":"2025-12-25T20:55:51.296459-08:00","created_by":"daemon"},{"issue_id":"gt-twjr5.5","depends_on_id":"gt-twjr5.2","type":"blocks","created_at":"2025-12-25T20:56:46.946883-08:00","created_by":"daemon"}]} {"id":"gt-ty3w4","title":"Digest: mol-deacon-patrol","description":"Final patrol cycle 20: all systems healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:22:00.43096-08:00","updated_at":"2025-12-25T11:22:00.43096-08:00","closed_at":"2025-12-25T11:22:00.430928-08:00","close_reason":"Squashed from 8 wisps"} {"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-u0ccw","title":"Digest: mol-deacon-patrol","description":"P16: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:59:59.331911-08:00","updated_at":"2025-12-25T19:59:59.331911-08:00","closed_at":"2025-12-25T19:59:59.331857-08:00","dependencies":[{"issue_id":"gt-u0ccw","depends_on_id":"gt-wisp-h6g","type":"parent-child","created_at":"2025-12-25T19:59:59.332726-08:00","created_by":"deacon"}]} {"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"} {"id":"gt-u1j.1","title":"Go scaffolding: cmd/gt, go.mod, Cobra setup","description":"Set up Go project structure with CLI framework.\n\n**Stack:**\n- Cobra for command/flag handling\n- Lipgloss for styled terminal output\n\n**Deliverables:**\n- cmd/gt/main.go with Cobra root command\n- Basic subcommands: version, help\n- Lipgloss styles for status output (success, warning, error)\n- go.mod with dependencies","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-15T16:36:48.376267-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-u1j.1","depends_on_id":"gt-u1j","type":"parent-child","created_at":"2025-12-15T16:36:48.376622-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-u1j.10","title":"CLI: core commands (status, prime, version, init)","description":"Essential CLI commands for Gas Town operation.\n\n## Commands\n\n### gt status\nShow overall town status.\n```\ngt status [--json]\n```\nOutput:\n- Town name and location\n- Number of rigs\n- Active polecats across all rigs\n- Witness status per rig\n- Recent activity summary\n\n### gt prime\nOutput role context for current directory.\n```\ngt prime\n```\nDetects role from directory:\n- Town root or mayor/ → Mayor context\n- \u003crig\u003e/witness/rig/ → Witness context\n- \u003crig\u003e/refinery/rig/ → Refinery context\n- \u003crig\u003e/polecats/\u003cname\u003e/ → Polecat context\n\n### gt version\nShow version information.\n```\ngt version [--short]\n```\nOutput: version, git commit, build date.\n\n### gt init\nInitialize current rig for Gas Town (alternative to gt install for existing repos).\n```\ngt init [--force]\n```\nCreates Gas Town structure in existing git repo.\n\n## Implementation\n\nEach command is a Cobra subcommand under root:\n```go\nvar statusCmd = \u0026cobra.Command{...}\nvar primeCmd = \u0026cobra.Command{...}\nvar versionCmd = \u0026cobra.Command{...}\nvar initCmd = \u0026cobra.Command{...}\n```\n\nRegister in cmd/gt/main.go.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-15T17:12:38.367667-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-u1j.10","depends_on_id":"gt-u1j","type":"parent-child","created_at":"2025-12-15T17:12:38.368006-08:00","created_by":"daemon"},{"issue_id":"gt-u1j.10","depends_on_id":"gt-u1j.5","type":"blocks","created_at":"2025-12-15T17:14:06.123332-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"} @@ -1506,7 +1512,7 @@ {"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"} {"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-25T20:54:18.922246-08:00","closed_at":"2025-12-25T20:54:18.922246-08:00","close_reason":"Orphaned: referenced in commit but not closed"} -{"id":"gt-u3mm7","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 0 polecats, 0 gates, all witnesses/refineries healthy, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:35:07.072498-08:00","updated_at":"2025-12-26T15:35:07.072498-08:00","closed_at":"2025-12-26T15:35:07.072464-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-u3mm7","depends_on_id":"gt-wisp-3ba","type":"parent-child","created_at":"2025-12-26T15:35:07.073225-08:00","created_by":"stevey"}]} +{"id":"gt-u3mm7","title":"Digest: mol-deacon-patrol","description":"Patrol complete: 0 polecats, 0 gates, all witnesses/refineries healthy, no orphans","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:35:07.072498-08:00","updated_at":"2025-12-26T15:35:07.072498-08:00","closed_at":"2025-12-26T15:35:07.072464-08:00","close_reason":"Squashed from 9 wisps"} {"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-u56bb","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Mayor OK, 11 sessions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:45.08665-08:00","updated_at":"2025-12-25T20:37:45.08665-08:00","closed_at":"2025-12-25T20:37:45.086608-08:00","close_reason":"Squashed from 8 wisps"} @@ -1517,13 +1523,12 @@ {"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"} {"id":"gt-uapyg","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 15: nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:46:42.564849-08:00","updated_at":"2025-12-26T15:46:42.564849-08:00","closed_at":"2025-12-26T15:46:42.564806-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-uapyg","depends_on_id":"gt-wisp-s73","type":"parent-child","created_at":"2025-12-26T15:46:42.565658-08:00","created_by":"stevey"}]} -{"id":"gt-uazec","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:44:36.529952-08:00","updated_at":"2025-12-25T20:44:36.529952-08:00","closed_at":"2025-12-25T20:44:36.529895-08:00"} {"id":"gt-ub5gh","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:43:56.849161-08:00","updated_at":"2025-12-25T15:43:56.849161-08:00","closed_at":"2025-12-25T15:43:56.84913-08:00"} {"id":"gt-ubd4","title":"Merge: gt-tnca.1","description":"branch: polecat/immortan\ntarget: main\nsource_issue: gt-tnca.1\nrig: gastown","status":"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-ud2at","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:34:07.199119-08:00","updated_at":"2025-12-25T15:52:58.533098-08:00","deleted_at":"2025-12-25T15:52:58.533098-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-ugx9t","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:54:22.402401-08:00","updated_at":"2025-12-26T16:54:22.402401-08:00","closed_at":"2025-12-26T16:54:22.40236-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-ugx9t","depends_on_id":"gt-wisp-4ky","type":"parent-child","created_at":"2025-12-26T16:54:22.403211-08:00","created_by":"stevey"}]} {"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)"} +{"id":"gt-ujwab","title":"Digest: mol-deacon-patrol","description":"Patrol 5: all clear, proto closure warning noted","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:18:32.52576-08:00","updated_at":"2025-12-26T17:18:32.52576-08:00","closed_at":"2025-12-26T17:18:32.52572-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-ujwab","depends_on_id":"gt-wisp-n8z","type":"parent-child","created_at":"2025-12-26T17:18:32.526563-08:00","created_by":"stevey"}]} {"id":"gt-um6q","title":"Update docs with molecule navigation workflow","description":"Update architecture and workflow docs with new molecule navigation.\n\n## Docs to update\n\n### docs/molecules.md\n- Add 'Navigating Molecules' section\n- Document bd mol current usage\n- Document bd close --continue workflow\n- Show the propulsion pattern\n\n### docs/propulsion-principle.md\n- Add molecule navigation as key enabler\n- Show before/after workflow comparison\n\n### docs/polecat-wisp-architecture.md\n- Update step execution section\n- Show bd close --continue in examples\n\n## New section content\n\n### Molecule Navigation\n\nFinding your place:\n bd mol current # Where am I?\n bd mol current gt-abc # Status of specific molecule\n\nSeamless transitions:\n bd close gt-abc.3 --continue # Close and advance\n bd close gt-abc.3 --no-auto # Close but don't auto-claim next\n\nThe old way (3 commands):\n bd close gt-abc.3\n bd ready --parent=gt-abc\n bd update gt-abc.4 --status=in_progress\n\nThe new way (1 command):\n bd close gt-abc.3 --continue\n\n## Blocked by (Beads features)\n- bd-sal9: bd mol current\n- bd-ieyy: bd close --continue","status":"blocked","priority":1,"issue_type":"task","assignee":"gastown/valkyrie","created_at":"2025-12-22T17:01:24.849951-08:00","updated_at":"2025-12-23T00:17:01.419415-08:00","dependencies":[{"issue_id":"gt-um6q","depends_on_id":"gt-qswb","type":"blocks","created_at":"2025-12-22T17:01:31.856627-08:00","created_by":"daemon"},{"issue_id":"gt-um6q","depends_on_id":"gt-fly0","type":"blocks","created_at":"2025-12-22T17:01:31.930072-08:00","created_by":"daemon"}]} {"id":"gt-unev","title":"Clean up ~/gt root directory cruft","description":"The town root has accumulated various directories and files that need review:\n\n**To evaluate:**\n- daemon/ - old daemon code? move or delete?\n- deacon/ - WIP deacon work? consolidate with gastown?\n- mayor/ - old mayor structure? \n- AGENTS.md - is this still used?\n- gt binary at root - should be gitignored\n\n**Already correct:**\n- .beads/, .claude/, .gastown/, .runtime/ - runtime dirs\n- beads/, gastown/ - rig directories \n- docs/hop/ - strategic docs\n- CLAUDE.md - mayor context\n\nClean up, consolidate, update .gitignore as needed.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T22:10:09.722561-08:00","updated_at":"2025-12-22T22:10:09.722561-08:00"} {"id":"gt-unrd","title":"Fix gt prime to give crew workers crew context","description":"gt prime currently gives Mayor context to all agents. Crew workers should get crew-specific context. Also extract shared theory of operation from mayor priming into shared context for all roles.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-19T15:37:49.671015-08:00","updated_at":"2025-12-19T17:22:52.551704-08:00","closed_at":"2025-12-19T15:41:38.806903-08:00"} @@ -1531,8 +1536,8 @@ {"id":"gt-uovsl","title":"Refinery Patrol","description":"Merge queue processor patrol loop with verification gates.","status":"open","priority":2,"issue_type":"molecule","created_at":"2025-12-26T13:08:21.419524-08:00","updated_at":"2025-12-26T13:08:21.419524-08:00"} {"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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:59:05.781933-08:00","updated_at":"2025-12-25T14:12:42.092246-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"}],"deleted_at":"2025-12-25T14:12:42.092246-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"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":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T23:09:41.756753-08:00","updated_at":"2025-12-25T21:00:14.347857-08:00","closed_at":"2025-12-25T21:00:14.347857-08:00","close_reason":"Nice-to-have or covered by core patrol lifecycle work."} -{"id":"gt-upxny","title":"Digest: mol-deacon-patrol","description":"P18: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:00:22.888043-08:00","updated_at":"2025-12-25T20:00:22.888043-08:00","closed_at":"2025-12-25T20:00:22.88799-08:00"} -{"id":"gt-uq1d0","title":"Digest: mol-deacon-patrol","description":"Patrol 5: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:42:53.668752-08:00","updated_at":"2025-12-25T13:42:53.668752-08:00","closed_at":"2025-12-25T13:42:53.668717-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-uq1d0","depends_on_id":"gt-cam3u","type":"parent-child","created_at":"2025-12-25T13:42:53.669484-08:00","created_by":"stevey"}]} +{"id":"gt-uq1d0","title":"Digest: mol-deacon-patrol","description":"Patrol 5: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:42:53.668752-08:00","updated_at":"2025-12-25T13:42:53.668752-08:00","closed_at":"2025-12-25T13:42:53.668717-08:00","close_reason":"Squashed from 8 wisps"} +{"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"} {"id":"gt-uru8z","title":"Handle callbacks from agents","description":"Handle callbacks from agents.\n\nCheck the Mayor's inbox for messages from:\n- Witnesses reporting polecat status\n- Refineries reporting merge results\n- Polecats requesting help or escalation\n- External triggers (webhooks, timers)\n\n```bash\ngt mail inbox\n# For each message:\ngt mail read \u003cid\u003e\n# Handle based on message type\n```\n\nCallbacks may spawn new polecats, update issue state, or trigger other actions.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.775826-08:00","updated_at":"2025-12-25T11:26:49.773034-08:00","closed_at":"2025-12-25T11:26:49.773034-08:00","close_reason":"Inbox empty, no messages to process"} {"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"} @@ -1548,7 +1553,7 @@ {"id":"gt-uzf2l.4","title":"bd mol publish: Push formula to GitHub repo","description":"Publish a local formula to a GitHub repository.\n\nUsage: bd mol publish \u003cformula-name\u003e \u003cgithub-repo\u003e\n\nShould:\n- Create or update GitHub repo with formula\n- Add README.md from formula metadata\n- Tag with version\n- Set appropriate topics for discoverability","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-25T21:53:01.817145-08:00","updated_at":"2025-12-26T00:34:32.49039-08:00","closed_at":"2025-12-26T00:34:32.49039-08:00","close_reason":"Parent superseded by gt-molmall","dependencies":[{"issue_id":"gt-uzf2l.4","depends_on_id":"gt-uzf2l","type":"parent-child","created_at":"2025-12-25T21:53:01.817569-08:00","created_by":"daemon"}]} {"id":"gt-v0xqo","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:32:26.623344-08:00","updated_at":"2025-12-25T15:32:26.623344-08:00","closed_at":"2025-12-25T15:32:26.623315-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-v1pcg","title":"ApplyBranches/ApplyGates mutate steps in place","description":"ApplyBranches and ApplyGates claim to return a modified steps slice, but they actually mutate the original steps via the pointer map from buildStepMap().\n\n```go\n// ApplyBranches docstring says:\n// Returns the modified steps slice (steps are modified in place for dependencies).\n```\n\nThis is technically documented but violates the pattern established by ApplyLoops and ApplyAdvice which return new step slices.\n\nOptions:\n1. Document explicitly that these functions mutate in place (current behavior)\n2. Clone steps before modification for true immutability\n3. Accept this as intentional since it's an optimization\n\nThe current behavior is safe because cook.go doesn't reuse the input slice, but could cause subtle bugs if callers expect immutability.\n\nRecommend option 1 (document) or 2 (clone) for consistency.","status":"closed","priority":3,"issue_type":"bug","created_at":"2025-12-25T15:14:01.921527-08:00","updated_at":"2025-12-25T21:01:40.941624-08:00","closed_at":"2025-12-25T21:01:40.941624-08:00","close_reason":"Low priority bugs or cosmetic issues. Not blocking autonomous patrols.","dependencies":[{"issue_id":"gt-v1pcg","depends_on_id":"gt-8tmz.4","type":"blocks","created_at":"2025-12-25T15:14:18.94711-08:00","created_by":"daemon"}]} -{"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"} +{"id":"gt-v3bjf","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:28:25.96187-08:00","updated_at":"2025-12-25T07:28:25.96187-08:00","closed_at":"2025-12-25T07:28:25.961842-08:00"} {"id":"gt-v5hv","title":"Work on ga-y6b: Implement Refinery as Claude agent. Conve...","description":"Work on ga-y6b: Implement Refinery as Claude agent. Convert from shell to Claude agent that processes MRs in merge queue, runs tests, merges to integration branch. When done, submit MR (not PR) to integration branch for Refinery.","status":"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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T23:19:07.198289-08:00","updated_at":"2025-12-25T21:00:53.237027-08:00","closed_at":"2025-12-25T21:00:53.237027-08:00","close_reason":"Design task. System is operational - failure modes learned through usage."} {"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"} @@ -1557,6 +1562,7 @@ {"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-vc3l4","title":"No-tmux mode: naked Claude Code operation without daemon/tmux","description":"## Problem\n\nTmux is crashing workers. The daemon relies on tmux for:\n- Session management (creating/killing panes)\n- Nudging agents via SendKeys\n- Crash detection via pane-died hooks\n\nWhen tmux is unstable, the entire Gas Town operation fails.\n\n## Goal\n\nEnable Gas Town to operate without tmux or the daemon, relying solely on:\n- Naked Claude Code sessions (terminal or IDE)\n- Deacon self-handoff and patrol robustness\n- Pinned beads for propulsion (already implemented)\n- **Beads as universal data plane** - args, context, everything flows through beads\n\n## Key Insight: Beads Replace SendKeys\n\nCurrently --args is injected via tmux SendKeys. In no-tmux mode:\n- Store args in the pinned bead description (attached_args field)\n- gt prime reads and displays args from pinned bead\n- Wisps are infinite ephemeral sticky notes - use them for transient context\n- No prompt injection needed - agent discovers everything via bd show\n\n## Degraded Behavior (No-Tmux Mode)\n\n**What still works:**\n- Propulsion via pinned beads (agents pick up work on startup)\n- Self-handoff (agents can cycle themselves)\n- Patrol loops (Deacon, Witness, Refinery keep running)\n- Mail system (beads-based, no tmux needed)\n- Args passed via bead description\n\n**What is degraded:**\n- **No interrupts**: Cannot nudge busy agents mid-task\n- **Polling only**: Agents must actively check inbox (no push notifications)\n- **Await steps block**: \"Wait for human\" steps require manual agent restart\n- **No crash detection**: pane-died hooks unavailable\n- **Manual startup**: Human must start each agent in separate terminal\n\n**Workflow implications:**\n- Patrol agents work fine (they poll as part of their loop)\n- Task workers need restart to pick up new work\n- Cannot redirect a busy worker to urgent task\n- Human must monitor and restart crashed agents\n\n## Requirements\n\n1. **gt sling --args stores in bead**: Write args to pinned bead description\n2. **gt prime displays args**: Read attached_args from pinned bead\n3. **gt spawn --naked**: Assign work without creating tmux session\n4. **Documentation**: Explain no-tmux mode and degraded behavior\n5. **Deacon self-sustaining**: Must cycle reliably without daemon\n\n## Acceptance Criteria\n\n- Can assign work with args without tmux\n- Agent discovers args via gt prime / bd show on startup\n- Deacon patrol runs indefinitely via self-handoff\n- Workers started manually pick up pinned work\n- Documentation explains what works vs degraded in no-tmux mode","status":"pinned","priority":0,"issue_type":"feature","assignee":"mayor","created_at":"2025-12-26T17:02:14.865284-08:00","updated_at":"2025-12-26T17:09:52.79405-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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T20:15:30.26323-08:00","updated_at":"2025-12-25T21:01:02.312094-08:00","closed_at":"2025-12-25T21:01:02.312094-08:00","close_reason":"Mayor prompting tasks. Role templates exist and work.","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"}]} {"id":"gt-vdp0","title":"Crew workers getting wrong CLAUDE.md (shows Refinery)","description":"## Problem\n\nCrew workers (emma, dave) have CLAUDE.md that says they're the Refinery.\n\n## Evidence\n\n```\n$ head -5 /Users/stevey/gt/beads/crew/emma/CLAUDE.md\n# Claude: Beads Refinery\nYou are the **Refinery** for the **beads** rig...\n```\n\n## Expected\n\nShould use crew.md.tmpl which correctly says:\n```\n# Crew Worker Context\nYou are a **crew worker** - the overseer's (human's) personal workspace...\n```\n\n## Impact\n\n- Crew workers have wrong identity in static context\n- `gt prime` correctly outputs crew context, but CLAUDE.md conflicts\n- Confusing role information\n\n## Fix\n\nCheck `gt crew create` or whatever populates CLAUDE.md for crew workers.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T21:40:56.518032-08:00","updated_at":"2025-12-19T01:33:49.863259-08:00","closed_at":"2025-12-19T01:33:49.863259-08:00","dependencies":[{"issue_id":"gt-vdp0","depends_on_id":"gt-l4gm","type":"blocks","created_at":"2025-12-18T21:50:04.955247-08:00","created_by":"daemon"}]} {"id":"gt-vg4n","title":"Use Beads issue status as spawn source of truth","description":"Currently witness tracks spawned issues in .gastown/witness.json to prevent re-spawning:\n\n{\"spawned_issues\": [\"gt-abc1\", \"gt-def2\", ...]}\n\nThis is redundant with Beads issue status (in_progress). The witness could query:\n bd list --status=in_progress\n\nThe local list serves as a performance cache to avoid querying beads every cycle. Consider:\n1. Use Beads as source of truth\n2. Keep local cache with TTL\n3. Sync cache on witness start\n\nThis simplifies state management and ensures consistency.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-21T22:07:31.756863-08:00","updated_at":"2025-12-21T22:07:31.756863-08:00"} @@ -1564,7 +1570,6 @@ {"id":"gt-vhby","title":"implement","description":"Implement the solution for gt-test123. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:48:26.321647-08:00","updated_at":"2025-12-25T14:12:42.228522-08:00","dependencies":[{"issue_id":"gt-vhby","depends_on_id":"gt-i4lo","type":"parent-child","created_at":"2025-12-21T21:48:26.323953-08:00","created_by":"stevey"},{"issue_id":"gt-vhby","depends_on_id":"gt-tvos","type":"blocks","created_at":"2025-12-21T21:48:26.324548-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.228522-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vhn1","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:27:56.627443-08:00","updated_at":"2025-12-25T01:33:00.961948-08:00","closed_at":"2025-12-25T01:33:00.961948-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-vhn1.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-vhn1\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T22:27:56.71661-08:00","updated_at":"2025-12-23T22:27:56.888968-08:00","closed_at":"2025-12-23T22:27:56.888968-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-vhn1.1","depends_on_id":"gt-vhn1","type":"parent-child","created_at":"2025-12-23T22:27:56.717145-08:00","created_by":"daemon"}]} -{"id":"gt-vizdt","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:20:10.919259-08:00","updated_at":"2025-12-25T19:20:10.919259-08:00","closed_at":"2025-12-25T19:20:10.919219-08:00"} {"id":"gt-vj3rb","title":"Digest: mol-deacon-patrol","description":"Patrol 3: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:43.678006-08:00","updated_at":"2025-12-25T19:54:43.678006-08:00","closed_at":"2025-12-25T19:54:43.677944-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-vjv","title":"Add bulk session stop command (gt session stop --all)","description":"When decommissioning a rig, need to stop multiple sessions one at a time. A --all or --rig flag would allow: gt session stop --rig gastown","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-18T11:33:33.394649-08:00","updated_at":"2025-12-18T11:38:51.399298-08:00","closed_at":"2025-12-18T11:38:51.399298-08:00"} {"id":"gt-vjw","title":"Swarm learning: Session cleanup missing from swarm workflow","description":"## Problem\n\nAfter Enders Game swarm completed (18 issues merged), 16 polecat sessions were left running but idle. No automated cleanup occurred.\n\n## What Should Happen\n\n1. Witness detects polecat completed work (idle at prompt)\n2. Witness verifies git state is clean\n3. Witness shuts down session\n4. Witness reports completion to Mayor\n\n## GGT Components\n\n- gt-cxx: Witness context cycling (covers self-cycling)\n- gt-u1j.9: Witness daemon heartbeat loop\n- gt-kmn.6: Witness swarm landing protocol\n\n## Recommendation\n\nAdd to Witness responsibilities:\n- Monitor for 'work complete' signals (DONE keyword, idle detection)\n- Automated session shutdown after verification\n- Swarm completion reporting to Mayor\n\nSee also: architecture.md 'Worker Cleanup (Witness-Owned)' section which describes this but it wasn't implemented in PGT.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T01:27:52.796587-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} @@ -1579,7 +1584,9 @@ {"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"} {"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-w3cz7","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:51:32.440471-08:00","updated_at":"2025-12-25T10:51:32.440471-08:00","closed_at":"2025-12-25T10:51:32.440435-08:00"} {"id":"gt-w52o8","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All clear","status":"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"} {"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"} @@ -1593,16 +1600,15 @@ {"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-25T20:54:18.947089-08:00","closed_at":"2025-12-25T20:54:18.947089-08:00","close_reason":"Orphaned: referenced in commit but not closed","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-wib7t","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final patrol, all healthy, handoff triggered","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:30:06.242412-08:00","updated_at":"2025-12-25T07:30:06.242412-08:00","closed_at":"2025-12-25T07:30:06.242374-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-wisp-050","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with YAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents. Sequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.013101-08:00","updated_at":"2025-12-26T16:16:32.013101-08:00","dependencies":[{"issue_id":"gt-wisp-050","depends_on_id":"gt-wisp-fan","type":"parent-child","created_at":"2025-12-26T16:16:32.035638-08:00","created_by":"stevey"}]} +{"id":"gt-wisp-0j8","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.503174-08:00","updated_at":"2025-12-25T19:55:55.564216-08:00","closed_at":"2025-12-25T19:55:55.564216-08:00","dependencies":[{"issue_id":"gt-wisp-0j8","depends_on_id":"gt-wisp-4u6","type":"blocks","created_at":"2025-12-25T19:55:37.705049-08:00","created_by":"deacon"}]} {"id":"gt-wisp-1pv","title":"Clean dead sessions","description":"Clean dead sessions and orphaned state.\n\nRun `gt doctor --fix` to handle all cleanup:\n\n```bash\n# Preview what needs cleaning\ngt doctor -v\n\n# Fix everything\ngt doctor --fix\n```\n\nThis handles:\n- **orphan-sessions**: Kill orphaned tmux sessions (gt-* not matching valid patterns)\n- **orphan-processes**: Kill orphaned Claude processes (no tmux parent)\n- **wisp-gc**: Garbage collect abandoned wisps (\u003e1h old)\n\nAll cleanup is handled by doctor checks - no need to run separate commands.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.373152-08:00","updated_at":"2025-12-26T13:34:16.373152-08:00","dependencies":[{"issue_id":"gt-wisp-1pv","depends_on_id":"gt-wisp-ehf","type":"blocks","created_at":"2025-12-26T13:34:16.458134-08:00","created_by":"deacon"}]} -{"id":"gt-wisp-271","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.04993-08:00","updated_at":"2025-12-26T13:09:27.201766-08:00","closed_at":"2025-12-26T13:09:27.201766-08:00","dependencies":[{"issue_id":"gt-wisp-271","depends_on_id":"gt-wisp-9ss","type":"blocks","created_at":"2025-12-26T13:04:23.202384-08:00","created_by":"deacon"}]} -{"id":"gt-wisp-2cz","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:39:31.830271-08:00","updated_at":"2025-12-25T19:39:31.830271-08:00"} {"id":"gt-wisp-3fc","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Ensure state is saved to handoff bead\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue patrolling\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821372-08:00","updated_at":"2025-12-26T13:09:27.259354-08:00","closed_at":"2025-12-26T13:09:27.259354-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.907769-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-hp3","type":"blocks","created_at":"2025-12-25T19:54:36.921536-08:00","created_by":"gastown/witness"}]} +{"id":"gt-wisp-43x","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:04:17.501448-08:00","updated_at":"2025-12-25T19:04:17.501448-08:00"} {"id":"gt-wisp-48l","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses dynamic bonding to spawn mol-polecat-arm for each worker,\nenabling parallel inspection with a fanout gate for aggregation.\n\n## The Christmas Ornament Shape\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌────────┘ │ └────────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n inbox-check survey aggregate (WaitsFor: all-children)\n check-refnry │ save-state\n load-state │ generate-summary\n ↓ context-check\n ┌───────┼───────┐ burn-or-loop\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n```\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:54:36.819952-08:00","updated_at":"2025-12-26T13:09:27.284786-08:00","closed_at":"2025-12-26T13:09:27.284786-08:00"} -{"id":"gt-wisp-5av","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.878742-08:00","updated_at":"2025-12-26T14:04:44.878742-08:00"} +{"id":"gt-wisp-4u6","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.502945-08:00","updated_at":"2025-12-25T19:55:55.580427-08:00","closed_at":"2025-12-25T19:55:55.580427-08:00","dependencies":[{"issue_id":"gt-wisp-4u6","depends_on_id":"gt-wisp-hzw","type":"blocks","created_at":"2025-12-25T19:55:37.690205-08:00","created_by":"deacon"}]} {"id":"gt-wisp-5yy","title":"Load persisted patrol state","description":"Read handoff bead and get nudge counts.\n\nLoad persistent state from the witness handoff bead:\n- Active workers and their status from last cycle\n- Nudge counts per worker per issue\n- Last nudge timestamps\n- Pending escalations\n\n```bash\nbd show \u003chandoff-bead-id\u003e\n```\n\nIf no handoff exists (fresh start), initialize empty state.\nThis state persists across wisp burns and session cycles.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.82212-08:00","updated_at":"2025-12-26T13:09:27.240945-08:00","closed_at":"2025-12-26T13:09:27.240945-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-5yy","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.977849-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-5yy","depends_on_id":"gt-wisp-ps8","type":"blocks","created_at":"2025-12-25T19:54:36.992199-08:00","created_by":"gastown/witness"}]} {"id":"gt-wisp-78q","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with YAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents. Sequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.877976-08:00","updated_at":"2025-12-26T14:07:27.717637-08:00","closed_at":"2025-12-26T14:07:27.717637-08:00","dependencies":[{"issue_id":"gt-wisp-78q","depends_on_id":"gt-wisp-fwu","type":"blocks","created_at":"2025-12-26T14:04:44.955286-08:00","created_by":"deacon"}]} -{"id":"gt-wisp-7yg","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.878984-08:00","updated_at":"2025-12-26T14:04:44.878984-08:00","dependencies":[{"issue_id":"gt-wisp-7yg","depends_on_id":"gt-wisp-5av","type":"blocks","created_at":"2025-12-26T14:04:44.980496-08:00","created_by":"deacon"}]} -{"id":"gt-wisp-9d2","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.05016-08:00","updated_at":"2025-12-26T13:09:27.194198-08:00","closed_at":"2025-12-26T13:09:27.194198-08:00","dependencies":[{"issue_id":"gt-wisp-9d2","depends_on_id":"gt-wisp-271","type":"blocks","created_at":"2025-12-26T13:04:23.212319-08:00","created_by":"deacon"}]} +{"id":"gt-wisp-8g4","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.373414-08:00","updated_at":"2025-12-26T13:34:16.373414-08:00","dependencies":[{"issue_id":"gt-wisp-8g4","depends_on_id":"gt-wisp-1pv","type":"blocks","created_at":"2025-12-26T13:34:16.464249-08:00","created_by":"deacon"}]} {"id":"gt-wisp-9ss","title":"Clean dead sessions","description":"Clean dead sessions and orphaned state.\n\nRun `gt doctor --fix` to handle all cleanup:\n\n```bash\n# Preview what needs cleaning\ngt doctor -v\n\n# Fix everything\ngt doctor --fix\n```\n\nThis handles:\n- **orphan-sessions**: Kill orphaned tmux sessions (gt-* not matching valid patterns)\n- **orphan-processes**: Kill orphaned Claude processes (no tmux parent)\n- **wisp-gc**: Garbage collect abandoned wisps (\u003e1h old)\n\nAll cleanup is handled by doctor checks - no need to run separate commands.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.049699-08:00","updated_at":"2025-12-26T13:09:27.208152-08:00","closed_at":"2025-12-26T13:09:27.208152-08:00","dependencies":[{"issue_id":"gt-wisp-9ss","depends_on_id":"gt-wisp-bau","type":"blocks","created_at":"2025-12-26T13:04:23.192565-08:00","created_by":"deacon"}]} {"id":"gt-wisp-a1c","title":"Process witness mail","description":"Process witness mail: lifecycle requests, help requests.\n\n```bash\ngt mail inbox\n```\n\nHandle by message type:\n- **LIFECYCLE/Shutdown**: Queue for pre-kill verification\n- **Blocked/Help**: Assess if resolvable or escalate\n- **HANDOFF**: Load predecessor state\n- **Work complete**: Verify issue closed, proceed to pre-kill\n\nRecord any pending actions for later steps.\nMark messages as processed when complete.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821859-08:00","updated_at":"2025-12-26T13:09:27.247242-08:00","closed_at":"2025-12-26T13:09:27.247242-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-a1c","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.963525-08:00","created_by":"gastown/witness"}]} {"id":"gt-wisp-h5d","title":"Persist patrol state","description":"Update handoff bead with new states.\n\nPersist state to the witness handoff bead:\n- Updated worker statuses from all arms\n- Current nudge counts per worker\n- Nudge timestamps\n- Actions taken this cycle\n- Pending items for next cycle\n\n```bash\nbd update \u003chandoff-bead-id\u003e --description=\"\u003cserialized state\u003e\"\n```\n\nThis state survives wisp burns and session cycles.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822355-08:00","updated_at":"2025-12-26T13:09:27.234704-08:00","closed_at":"2025-12-26T13:09:27.234704-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:37.006252-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-lsd","type":"blocks","created_at":"2025-12-25T19:54:37.020736-08:00","created_by":"gastown/witness"}]} @@ -1610,10 +1616,10 @@ {"id":"gt-wisp-hzw","title":"Clean dead sessions","description":"Clean dead sessions.\n\nGarbage collect terminated sessions:\n- Remove stale polecat directories\n- Clean up wisp session artifacts\n- Prune old logs and temp files\n- Archive completed molecule state\n\n```bash\ngt gc --sessions\ngt gc --wisps --age=1h\n```\n\nPreserve audit trail. Only clean sessions confirmed dead.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.502717-08:00","updated_at":"2025-12-25T19:55:55.655408-08:00","closed_at":"2025-12-25T19:55:55.655408-08:00"} {"id":"gt-wisp-ita","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.013353-08:00","updated_at":"2025-12-26T16:18:43.957405-08:00","closed_at":"2025-12-26T16:18:43.957405-08:00","dependencies":[{"issue_id":"gt-wisp-ita","depends_on_id":"gt-wisp-fan","type":"parent-child","created_at":"2025-12-26T16:16:32.040794-08:00","created_by":"stevey"}]} {"id":"gt-wisp-lsd","title":"Aggregate arm results","description":"Collect outcomes from all polecat inspection arms.\n\nThis is a **fanout gate** - it cannot proceed until ALL dynamically-bonded\npolecat arms have completed their inspection cycles.\n\nOnce all arms complete, collect their outcomes:\n- Actions taken per polecat (nudge, kill, escalate, none)\n- Updated nudge counts\n- Any errors or issues discovered\n\nBuild the consolidated state for save-state.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.820571-08:00","updated_at":"2025-12-26T13:09:27.278475-08:00","closed_at":"2025-12-26T13:09:27.278475-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-lsd","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.822951-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-lsd","depends_on_id":"gt-wisp-q5d","type":"blocks","created_at":"2025-12-25T19:54:36.837897-08:00","created_by":"gastown/witness"}]} -{"id":"gt-wisp-lya","title":"Handle callbacks from agents","description":"Handle callbacks from agents.\n\nCheck the Mayor's inbox for messages from:\n- Witnesses reporting polecat status\n- Refineries reporting merge results\n- Polecats requesting help or escalation\n- External triggers (webhooks, timers)\n\n```bash\ngt mail inbox\n# For each message:\ngt mail read \u003cid\u003e\n# Handle based on message type\n```\n\nCallbacks may spawn new polecats, update issue state, or trigger other actions.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.501447-08:00","updated_at":"2025-12-25T19:55:55.670444-08:00","closed_at":"2025-12-25T19:55:55.670444-08:00"} {"id":"gt-wisp-ps8","title":"Ensure refinery is alive","description":"Ensure the refinery is alive and processing merge requests.\n\n**Redundant system**: This check runs in both gt spawn and Witness patrol\nto ensure the merge queue processor stays operational.\n\n```bash\n# Check if refinery session is running\ngt session status \u003crig\u003e/refinery\n\n# Check for merge requests in queue\nbd list --type=merge-request --status=open\n```\n\nIf merge requests are waiting AND refinery is not running:\n```bash\ngt session start \u003crig\u003e/refinery\ngt mail send \u003crig\u003e/refinery -s \"PATROL: Wake up\" -m \"Merge requests in queue. Please process.\"\n```\n\nIf refinery is running but queue is non-empty for \u003e30 min, send nudge.\nThis ensures polecats don't wait forever for their branches to merge.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821127-08:00","updated_at":"2025-12-26T13:09:27.265455-08:00","closed_at":"2025-12-26T13:09:27.265455-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-ps8","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.880056-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-ps8","depends_on_id":"gt-wisp-a1c","type":"blocks","created_at":"2025-12-25T19:54:36.893717-08:00","created_by":"gastown/witness"}]} {"id":"gt-wisp-q5d","title":"Survey all polecats (fanout)","description":"List polecats and bond mol-polecat-arm for each one.\n\n```bash\n# Get list of polecats\ngt polecat list \u003crig\u003e\n```\n\nFor each polecat discovered, dynamically bond an inspection arm:\n\n```bash\n# Bond mol-polecat-arm for each polecat\nfor polecat in $(gt polecat list \u003crig\u003e --names); do\n bd mol bond mol-polecat-arm $PATROL_WISP_ID \\\n --ref arm-$polecat \\\n --var polecat_name=$polecat \\\n --var rig=\u003crig\u003e\ndone\n```\n\nThis creates child wisps like:\n- patrol-x7k.arm-ace (5 steps)\n- patrol-x7k.arm-nux (5 steps)\n- patrol-x7k.arm-toast (5 steps)\n\nEach arm runs in PARALLEL. The aggregate step will wait for all to complete.\n\nIf no polecats are found, this step completes immediately with no children.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822584-08:00","updated_at":"2025-12-26T13:09:27.22818-08:00","closed_at":"2025-12-26T13:09:27.22818-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-q5d","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:37.034999-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-q5d","depends_on_id":"gt-wisp-5yy","type":"blocks","created_at":"2025-12-25T19:54:37.049799-08:00","created_by":"gastown/witness"}]} {"id":"gt-wisp-qx6","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses dynamic bonding to spawn mol-polecat-arm for each worker,\nenabling parallel inspection with a fanout gate for aggregation.\n\n## The Christmas Ornament Shape\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌────────┘ │ └────────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n inbox-check survey aggregate (WaitsFor: all-children)\n check-refnry │ save-state\n load-state │ generate-summary\n ↓ context-check\n ┌───────┼───────┐ burn-or-loop\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n```\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:48:34.05296-08:00","updated_at":"2025-12-25T19:48:34.05296-08:00","dependencies":[{"issue_id":"gt-wisp-qx6","depends_on_id":"mol-polecat-arm","type":"blocks","created_at":"2025-12-25T19:52:41.801146-08:00","created_by":"gastown/witness"}]} +{"id":"gt-wisp-uvq","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.373669-08:00","updated_at":"2025-12-26T13:34:16.373669-08:00","dependencies":[{"issue_id":"gt-wisp-uvq","depends_on_id":"gt-wisp-8g4","type":"blocks","created_at":"2025-12-26T13:34:16.470344-08:00","created_by":"deacon"}]} {"id":"gt-wisp-yj8","title":"Burn and respawn or loop","description":"End of patrol cycle decision.\n\nIf context is LOW:\n- Burn this wisp (no audit trail needed for patrol cycles)\n- Sleep briefly to avoid tight loop (30-60 seconds)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Burn wisp with summary digest\n- Exit cleanly (daemon will respawn fresh Witness)\n\n```bash\nbd mol burn # Destroy ephemeral wisp\n```\n\nThe daemon ensures Witness is always running.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.820851-08:00","updated_at":"2025-12-26T13:09:27.271792-08:00","closed_at":"2025-12-26T13:09:27.271792-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-yj8","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.852513-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-yj8","depends_on_id":"gt-wisp-3fc","type":"blocks","created_at":"2025-12-25T19:54:36.86625-08:00","created_by":"gastown/witness"}]} {"id":"gt-wiu7y","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 17: nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:47:37.442727-08:00","updated_at":"2025-12-26T15:47:37.442727-08:00","closed_at":"2025-12-26T15:47:37.442683-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-wiu7y","depends_on_id":"gt-wisp-e8l","type":"parent-child","created_at":"2025-12-26T15:47:37.443588-08:00","created_by":"stevey"}]} {"id":"gt-wjd6q","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 10: nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T15:44:33.548312-08:00","updated_at":"2025-12-26T15:44:33.548312-08:00","closed_at":"2025-12-26T15:44:33.548265-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-wjd6q","depends_on_id":"gt-wisp-tnj","type":"parent-child","created_at":"2025-12-26T15:44:33.549164-08:00","created_by":"stevey"}]} @@ -1622,7 +1628,7 @@ {"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"} -{"id":"gt-wrftq","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:45:06.500609-08:00","updated_at":"2025-12-26T16:45:06.500609-08:00","closed_at":"2025-12-26T16:45:06.500564-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-wrftq","depends_on_id":"gt-wisp-5so","type":"parent-child","created_at":"2025-12-26T16:45:06.501419-08:00","created_by":"stevey"}]} +{"id":"gt-wqvkx","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-24T23:58:52.198387-08:00","updated_at":"2025-12-25T01:26:28.130485-08:00","closed_at":"2025-12-25T01:26:28.130485-08:00"} {"id":"gt-wrw2","title":"Test2","description":"Testing gt mail","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T21:39:05.875792-08:00","updated_at":"2025-12-25T14:12:42.26153-08:00","deleted_at":"2025-12-25T14:12:42.26153-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} {"id":"gt-wsa2","title":"Digest: mol-deacon-patrol","description":"Patrol #6: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:22:39.448813-08:00","updated_at":"2025-12-24T22:22:39.448813-08:00","closed_at":"2025-12-24T22:22:39.448781-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-wsjg","title":"Test Patrol for Bonding","description":"Parent issue for mol bond CLI test","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:17:02.116318-08:00","updated_at":"2025-12-25T01:33:00.40243-08:00","closed_at":"2025-12-25T01:33:00.40243-08:00","close_reason":"Test pollution cleanup"} @@ -1637,7 +1643,6 @@ {"id":"gt-wysx3","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Mayor OK, 11 sessions","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:34.249635-08:00","updated_at":"2025-12-25T20:36:34.249635-08:00","closed_at":"2025-12-25T20:36:34.24958-08:00","close_reason":"Squashed from 8 wisps"} {"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-x0omu","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Quick cycle, 50% to handoff","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:07:26.218638-08:00","updated_at":"2025-12-25T17:07:26.218638-08:00","closed_at":"2025-12-25T17:07:26.218607-08:00","close_reason":"Squashed from 8 wisps"} -{"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"} {"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-x2ygo","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 3: routine check, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:22:00.324654-08:00","updated_at":"2025-12-26T13:22:00.324654-08:00","closed_at":"2025-12-26T13:22:00.324622-08:00","close_reason":"Squashed from 9 wisps"} {"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."} @@ -1649,12 +1654,12 @@ {"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","created_at":"2025-12-23T11:47:46.118753-08:00","updated_at":"2025-12-25T18:49:24.322431-08:00","closed_at":"2025-12-25T01:33:01.14853-08:00","close_reason":"Test pollution cleanup"} {"id":"gt-xf3fi","title":"Digest: mol-deacon-patrol","description":"P17","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:27:01.581886-08:00","updated_at":"2025-12-26T14:27:01.581886-08:00","closed_at":"2025-12-26T14:27:01.581849-08:00","close_reason":"Squashed from 9 wisps"} +{"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"} {"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-xjgsg","title":"Digest: mol-deacon-patrol","description":"Patrol 4: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:16:05.421406-08:00","updated_at":"2025-12-25T10:16:05.421406-08:00","closed_at":"2025-12-25T10:16:05.421376-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-xka9x","title":"announce: shared bulletin board","description":"Announcement channel with shared single-copy storage.\n\n## Deliverables\n\n1. Parse announce:name syntax\n2. Shared storage model (like queue, but no claim):\n - Single message copy\n - Multiple readers can view\n - Informational, not work-creating\n3. Configuration in ~/gt/config/announce.json\n4. Read tracking (optional): who has seen it\n\n## Key semantics\n- Informational broadcast\n- Missing is OK (not critical)\n- Use case: \"Bob refactoring logging, be aware\"\n\n## Dependencies\n- Config directory (gt-i6jvc)\n- queue: implementation (pattern reference)\n\n## Acceptance\n- announce:status creates single shared message\n- Multiple agents can read\n- No claim semantics (read-only)","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-26T14:52:31.22555-08:00","updated_at":"2025-12-26T14:52:31.22555-08:00","dependencies":[{"issue_id":"gt-xka9x","depends_on_id":"gt-i6jvc","type":"blocks","created_at":"2025-12-26T14:53:09.977096-08:00","created_by":"daemon"}]} {"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-xkdyj","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:52:37.018455-08:00","updated_at":"2025-12-25T20:52:37.018455-08:00","closed_at":"2025-12-25T20:52:37.01841-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"} {"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-xmyha","title":"Switch formulas from JSON to TOML","description":"## Problem\nFormula JSON files have poor ergonomics for agents and humans:\n- Multi-line strings require `\\n` escaping\n- Diffs are hard to read (long single-line changes)\n- No comments allowed\n\n## Solution\nSwitch formulas to TOML format:\n\n```toml\nformula = \"mol-deacon-patrol\"\nversion = 1\ndescription = \"\"\"\nMayor's daemon patrol loop.\nMulti-line strings work naturally.\n\"\"\"\n\n[[steps]]\nid = \"inbox-check\"\ntitle = \"Handle callbacks\"\ndescription = \"\"\"\nCheck inbox for messages.\n\n```bash\ngt mail inbox\n```\n\"\"\"\n```\n\n## Tasks\n- [ ] Add TOML parsing for formulas (github.com/BurntSushi/toml)\n- [ ] Update formula loader to try .toml first, fall back to .json\n- [ ] Add `bd formula convert \u003cname\u003e` to migrate JSON → TOML\n- [ ] Convert existing formulas\n- [ ] Update docs\n\n## Notes\n- Keep issues.jsonl as-is (machine data, append-only)\n- TOML only for human-edited formula files","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-25T21:49:39.609525-08:00","updated_at":"2025-12-25T22:00:22.383608-08:00","closed_at":"2025-12-25T22:00:22.383608-08:00","close_reason":"Implemented TOML support for formulas: parser, loader fallback, convert command, and converted all existing formulas"} @@ -1671,6 +1676,7 @@ {"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-xv8vu","title":"Digest: mol-deacon-patrol","description":"P8","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:24:17.018292-08:00","updated_at":"2025-12-26T14:24:17.018292-08:00","closed_at":"2025-12-26T14:24:17.018255-08:00","close_reason":"Squashed from 9 wisps"} +{"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"} {"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":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T16:00:04.924875-08:00","updated_at":"2025-12-25T21:00:15.865388-08:00","closed_at":"2025-12-25T21:00:15.865388-08:00","close_reason":"Nice-to-have polish features. Not essential for v0.1."} @@ -1683,7 +1689,6 @@ {"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-y68zm","title":"Digest: mol-deacon-patrol","description":"Patrol 5: 11 sessions, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:05.583458-08:00","updated_at":"2025-12-25T20:36:05.583458-08:00","closed_at":"2025-12-25T20:36:05.583401-08:00","close_reason":"Squashed from 8 wisps"} -{"id":"gt-y9gj3","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:14:49.293338-08:00","updated_at":"2025-12-25T10:14:49.293338-08:00","closed_at":"2025-12-25T10:14:49.293307-08:00"} {"id":"gt-y9vm3","title":"Digest: mol-deacon-patrol","description":"Patrol 4: 9 sessions healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:25:34.660496-08:00","updated_at":"2025-12-25T07:25:34.660496-08:00","closed_at":"2025-12-25T07:25:34.660465-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-yc0ok","title":"Digest: mol-deacon-patrol","description":"Patrol 13","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:52:10.828566-08:00","updated_at":"2025-12-25T20:52:10.828566-08:00","closed_at":"2025-12-25T20:52:10.828512-08:00"} {"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"} @@ -1691,12 +1696,11 @@ {"id":"gt-ydcrh","title":"Digest: mol-deacon-patrol","description":"Patrol 2: all healthy, no callbacks, no gates, no orphans, no plugins","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T16:19:37.466306-08:00","updated_at":"2025-12-26T16:19:37.466306-08:00","closed_at":"2025-12-26T16:19:37.466265-08:00","close_reason":"Squashed from 6 wisps","dependencies":[{"issue_id":"gt-ydcrh","depends_on_id":"gt-wisp-fan","type":"parent-child","created_at":"2025-12-26T16:19:37.467055-08:00","created_by":"stevey"}]} {"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-yheg9","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:34:01.074755-08:00","updated_at":"2025-12-25T15:34:01.074755-08:00","closed_at":"2025-12-25T15:34:01.074729-08:00"} {"id":"gt-yjj9u","title":"Digest: mol-deacon-patrol","description":"P19: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:15:10.311583-08:00","updated_at":"2025-12-25T20:15:10.311583-08:00","closed_at":"2025-12-25T20:15:10.311531-08:00"} {"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-ynb5f","title":"Digest: mol-deacon-patrol","description":"Patrol 16: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:59:22.583497-08:00","updated_at":"2025-12-26T13:59:22.583497-08:00","closed_at":"2025-12-26T13:59:22.583455-08:00"} {"id":"gt-ynp6","title":"gt context --usage: estimate remaining context via tmux line count","description":"## Summary\n\nImplement `gt context --usage` to estimate remaining context capacity.\n\n## Approach\n\nUse tmux scrollback buffer line count as proxy for token usage:\n- `tmux capture-pane -p | wc -l` gives current line count\n- Heuristics (tunable per model):\n - Opus 4.5: ~1800 lines = warning threshold\n - ~2000+ lines = critical, need handoff\n\n## Output Format\n```\nContext Usage: 1642 lines (~82%)\nStatus: WARNING - consider handoff soon\n```\n\n## Notes\n- Heuristics are model-specific, need config\n- Line count is proxy, not exact token count\n- Good enough for autonomous patrol decisions","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-23T01:19:13.108332-08:00","updated_at":"2025-12-25T21:00:01.996095-08:00","closed_at":"2025-12-25T21:00:01.996095-08:00","close_reason":"Nice-to-have polish features. Not essential for autonomous patrols."} +{"id":"gt-yt1yc","title":"Digest: mol-deacon-patrol","description":"P16: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:14:21.241655-08:00","updated_at":"2025-12-25T20:14:21.241655-08:00","closed_at":"2025-12-25T20:14:21.241608-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"} {"id":"gt-yx4","title":"Town root .beads has schema mismatch with bd","description":"The .beads directory at town root (/Users/stevey/gt/.beads) has an incompatible schema:\n\n```\nError: failed to open database: failed to initialize schema: sqlite3: SQL logic error: no such column: thread_id\n```\n\nMeanwhile, gastown/.beads (symlinked to mayor/rig/.beads) works fine.\n\n## Impact\n\n- gt mail inbox fails at town root\n- gt handoff sends mail to broken db\n- Daemon can't check its inbox\n\n## Options\n\n1. Delete town root .beads/beads.db and let it recreate\n2. Symlink town root .beads to gastown/.beads\n3. Run schema migration on existing db\n\n## Root Cause\n\nLikely a beads version upgrade that added thread_id column, but the town root db was created before that.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T14:31:35.559042-08:00","updated_at":"2025-12-19T00:39:32.211083-08:00","closed_at":"2025-12-19T00:39:32.211083-08:00"} {"id":"gt-yzms","title":"Merge polecat/rictus: Add molecule phase lifecycle diagram","description":"Branch: polecat/rictus\n\nAdds molecule phase lifecycle diagram to architecture.md showing Proto → Mol/Wisp → Digest state transitions with the 'states of matter' metaphor. Also documents when to use Mol (durable) vs Wisp (ephemeral).\n\nCloses: gt-c6zs","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:41:58.139439-08:00","updated_at":"2025-12-21T17:20:27.50075-08:00","closed_at":"2025-12-21T17:20:27.50075-08:00","close_reason":"ORPHANED: Branch never pushed, worktree deleted"} @@ -1707,6 +1711,7 @@ {"id":"gt-z2i5m","title":"Digest: mol-deacon-patrol","description":"Patrol 2: Routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:43:51.797495-08:00","updated_at":"2025-12-25T20:43:51.797495-08:00","closed_at":"2025-12-25T20:43:51.797449-08:00","close_reason":"Squashed from 8 wisps"} {"id":"gt-z3qf","title":"Overhaul gt mol to match bd mol chemistry interface","description":"## The Sling: Unified Work Dispatch\n\nThis issue tracks the overhaul of `gt molecule` to align with chemistry metaphor and introduce the **Universal Gas Town Propulsion Principle**.\n\n### The Propulsion Principle\n\n\u003e **If you find something on your hook, YOU RUN IT.**\n\nThis is the one rule that drives all Gas Town agents.\n\n### The Sling Operation\n\n`gt sling \u003cthing\u003e \u003ctarget\u003e [options]` - unified command for spawn + assign + pin.\n\nSee: `gastown/mayor/rig/docs/sling-design.md`\n\n### Implementation Tasks\n\n| Issue | Title | Priority |\n|-------|-------|----------|\n| gt-4ev4 | Implement gt sling command | P1 |\n| gt-uym5 | Implement gt mol status command | P1 |\n| gt-i4kq | Update templates for Propulsion Principle | P1 |\n| gt-7hor | Document the Propulsion Principle | P2 |\n\n### Command Changes\n\n| Old | New |\n|-----|-----|\n| `gt molecule instantiate` | `gt sling` |\n| `gt molecule attach` | `gt sling --force` |\n| `gt molecule detach` | `gt mol burn` |\n| `gt molecule progress` | `gt mol status` |\n| `gt molecule list` | `gt mol catalog` |\n| `gt spawn --molecule` | `gt sling` |\n\n### Acceptance Criteria\n\n- [ ] `gt sling` works for protos, issues, and epics\n- [ ] `gt mol status` shows hook state\n- [ ] Templates updated for propulsion principle\n- [ ] Old commands deprecated with warnings\n- [ ] Documentation complete","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-22T03:02:38.049324-08:00","updated_at":"2025-12-22T14:37:37.562677-08:00","closed_at":"2025-12-22T14:37:37.562677-08:00","close_reason":"Core sling work complete (gt-4ev4, gt-uym5, gt-7hor closed). gt-i4kq (template updates) remains open but is independent polish work.","dependencies":[{"issue_id":"gt-z3qf","depends_on_id":"gt-4ev4","type":"blocks","created_at":"2025-12-22T12:10:42.394653-08:00","created_by":"daemon"},{"issue_id":"gt-z3qf","depends_on_id":"gt-uym5","type":"blocks","created_at":"2025-12-22T12:10:42.46834-08:00","created_by":"daemon"},{"issue_id":"gt-z3qf","depends_on_id":"gt-i4kq","type":"blocks","created_at":"2025-12-22T12:10:42.541384-08:00","created_by":"daemon"},{"issue_id":"gt-z3qf","depends_on_id":"gt-7hor","type":"blocks","created_at":"2025-12-22T12:10:42.613099-08:00","created_by":"daemon"}]} {"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-z45lb","title":"Digest: mol-deacon-patrol","description":"Patrol 12","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:51:59.274149-08:00","updated_at":"2025-12-25T20:51:59.274149-08:00","closed_at":"2025-12-25T20:51:59.274103-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"} @@ -1740,12 +1745,12 @@ {"id":"gt-zq7f.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-zq7f\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:24:17.992968-08:00","updated_at":"2025-12-24T21:24:18.160983-08:00","closed_at":"2025-12-24T21:24:18.160983-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-zq7f.1","depends_on_id":"gt-zq7f","type":"parent-child","created_at":"2025-12-24T21:24:17.99343-08:00","created_by":"daemon"}]} {"id":"gt-zr0a","title":"bd pin command fails: invalid field for update: pinned","description":"In beads v0.32.0, `bd pin \u003cid\u003e` fails with 'invalid field for update: pinned'. The pinned field exists in the schema but update logic doesn't handle it.\n\nRepro:\n```\nbd create 'test issue'\nbd pin \u003cid\u003e\n# Error: invalid field for update: pinned\n```\n\nExpected: Issue should be pinned.\n\nThis blocks gt mail send --pinned from working.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-20T19:35:29.927326-08:00","updated_at":"2025-12-21T11:20:33.909055-08:00","closed_at":"2025-12-21T11:20:33.909055-08:00","close_reason":"Fixed by adding pinned to allowedUpdateFields"} {"id":"gt-zshe9","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:32:48.752264-08:00","updated_at":"2025-12-25T15:52:58.195216-08:00","deleted_at":"2025-12-25T15:52:58.195216-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-zsma7","title":"Daemon sends heartbeat to Mayor instead of Deacon","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-26T17:39:12.038167-08:00","updated_at":"2025-12-26T17:39:12.038167-08:00"} {"id":"gt-ztm3","title":"Merge: gt-caih","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-caih\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T00:14:08.420722-08:00","updated_at":"2025-12-23T01:18:52.590603-08:00","closed_at":"2025-12-23T01:18:52.590603-08:00","close_reason":"Already merged (duplicate MRs)"} {"id":"gt-ztvjn","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy - handoff threshold reached","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:35:01.827415-08:00","updated_at":"2025-12-25T15:52:58.447894-08:00","close_reason":"Squashed from 8 wisps","deleted_at":"2025-12-25T15:52:58.447894-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-zut3","title":"Immediate daemon notification on lifecycle request","description":"When gt handoff sends a lifecycle request to the daemon (via bd mail send deacon/), the daemon only discovers it on its next heartbeat poll (every 5 min). Workers wait unnecessarily for retirement.\n\n## Current Behavior\n1. Worker runs gt handoff\n2. Lifecycle mail sent to deacon/ via beads\n3. Worker blocks waiting for retirement\n4. Daemon heartbeat runs (up to 5 min later)\n5. Daemon processes lifecycle request and kills session\n\n## Expected Behavior\nLifecycle requests should be processed immediately, not on poll interval.\n\n## Proposed Solutions\n\n### Option A: SIGUSR1 Signal (simplest)\n1. Add SIGUSR1 handler in daemon that calls ProcessLifecycleRequests()\n2. gt handoff reads daemon.pid and sends SIGUSR1 after mail send\n\n### Option B: Unix Socket\n1. Daemon listens on ~/gt/daemon/lifecycle.sock\n2. gt handoff connects and sends 'process' message\n\n### Option C: Watchfile + fsnotify\n1. gt handoff touches ~/gt/daemon/lifecycle.trigger\n2. Daemon uses fsnotify to detect and process\n\nRecommend Option A for simplicity.\n\n## Affected Files\n- internal/daemon/daemon.go - add signal handler\n- internal/cmd/handoff.go - send signal after mail","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T20:20:07.616335-08:00","updated_at":"2025-12-20T20:27:42.419089-08:00","closed_at":"2025-12-20T20:27:42.419089-08:00"} {"id":"gt-zv7h6","title":"Move polecat pending tracking from Deacon to Witness","description":"Problem: gt deacon pending handles polecat observation at the wrong level. Hierarchy should be Witness→polecats, Deacon→Witnesses.\n\nSolution:\n1. Add gt witness pending - shows pending polecats in this rig\n2. Route POLECAT_STARTED mail to Witness (not just Deacon)\n3. Deacon keeps backup role but does not directly manage polecats\n\nDepends on gt-0yqqw (messaging infrastructure) for proper routing.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-25T13:40:04.410664-08:00","updated_at":"2025-12-25T21:00:01.899513-08:00","closed_at":"2025-12-25T21:00:01.899513-08:00","close_reason":"Nice-to-have polish features. Not essential for autonomous patrols.","dependencies":[{"issue_id":"gt-zv7h6","depends_on_id":"gt-0yqqw","type":"blocks","created_at":"2025-12-25T13:40:13.195143-08:00","created_by":"daemon"}]} {"id":"gt-zx3","title":"Per-rig beads repo configuration","description":"Add per-rig beads configuration to rig config schema.\n\n## Config Schema\n\nIn each rig's config.json:\n\n```json\n{\n \"version\": 1,\n \"name\": \"wyvern\",\n \"git_url\": \"https://github.com/steveyegge/wyvern\",\n \"beads\": {\n \"repo\": \"local\", // \"local\" | \"\u003cpath\u003e\" | \"\u003cgit-url\u003e\"\n \"root\": null, // Override bd --root (optional)\n \"prefix\": \"wyv\" // Issue prefix for this rig\n }\n}\n```\n\n## Repo Options\n\n| Value | Meaning | Use Case |\n|-------|---------|----------|\n| `\"local\"` | Use project's `.beads/` | Own projects, full commit access |\n| `\"\u003cpath\u003e\"` | Use beads at path | OSS contributions |\n| `\"\u003cgit-url\u003e\"` | Clone and use repo | Team shared beads |\n\n## Environment Injection\n\nWhen spawning polecats, Gas Town sets:\n```bash\nexport BEADS_ROOT=\"\u003cresolved-path\u003e\"\n```\n\n## Resolution Logic\n\n```go\nfunc ResolveBeadsRoot(rigConfig *RigConfig, rigPath string) (string, error) {\n beads := rigConfig.Beads\n switch {\n case beads.Root != \"\":\n return beads.Root, nil\n case beads.Repo == \"local\" || beads.Repo == \"\":\n return filepath.Join(rigPath, \".beads\"), nil\n case strings.HasPrefix(beads.Repo, \"/\"):\n return beads.Repo, nil\n case strings.Contains(beads.Repo, \"://\"):\n return cloneAndResolve(beads.Repo)\n default:\n return filepath.Join(rigPath, beads.Repo), nil\n }\n}\n```\n\n## Backwards Compatibility\n\nIf `beads` section missing, assume `\"repo\": \"local\"`.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T19:47:16.660049-08:00","updated_at":"2025-12-25T21:01:03.756894-08:00","closed_at":"2025-12-25T21:01:03.756894-08:00","close_reason":"Old prompting and configuration tasks. Templates and beads-sync work.","dependencies":[{"issue_id":"gt-zx3","depends_on_id":"gt-l3c","type":"blocks","created_at":"2025-12-15T19:47:35.726502-08:00","created_by":"daemon"}]} -{"id":"gt-zxg8n","title":"Digest: mol-deacon-patrol","description":"P9: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:58:36.009131-08:00","updated_at":"2025-12-25T19:58:36.009131-08:00","closed_at":"2025-12-25T19:58:36.009077-08:00"} {"id":"gt-zxgu","title":"Remove shell respawn loops from witness and deacon","description":"Currently witness and deacon use shell loops (`while true; do claude; done`) to auto-respawn when Claude exits. This bypasses the proper lifecycle architecture.\n\n## Current Behavior\n- witness.go: ensureWitnessSession() wraps Claude in a shell loop\n- deacon.go: runDeaconStart() wraps Claude in a shell loop\n- When Claude exits, shell automatically restarts it\n\n## Desired Behavior \n- Agents should request lifecycle changes via LIFECYCLE mail to deacon\n- Daemon processes lifecycle requests and handles restarts\n- No shell loops - daemon and deacon's health-scan handle respawns\n\n## Why Change\n1. Shell loops bypass state verification (requesting_cycle flag)\n2. Shell loops bypass handoff mail protocol\n3. Shell loops make lifecycle tracking harder\n4. Daemon already has infrastructure for this\n\n## Migration\n1. Remove shell loop from witness (daemon/deacon handles restart)\n2. Remove shell loop from deacon (daemon handles restart via ensureDeaconRunning)\n3. Verify daemon's health check properly restarts dead agents\n4. Update templates if needed\n\n## Risk\nLow - we have gt witness restart and gt deacon restart as fallbacks","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T03:55:49.172227-08:00","updated_at":"2025-12-23T04:02:27.122299-08:00","closed_at":"2025-12-23T04:02:27.122299-08:00","close_reason":"Removed shell respawn loops from witness and deacon. Daemon now properly detects dead Claude via pane command and restarts."} {"id":"gt-zxpf","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:28","description":"Patrol 16","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:28:07.60289-08:00","updated_at":"2025-12-24T19:28:07.60289-08:00","closed_at":"2025-12-24T19:28:07.602817-08:00","close_reason":"Squashed from wisp gt-7aa (9 issues)"} {"id":"gt-zytv3","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.776183-08:00","updated_at":"2025-12-25T11:28:54.876987-08:00","closed_at":"2025-12-25T11:28:54.876987-08:00","close_reason":"Handoff triggered: patrol_count=21","dependencies":[{"issue_id":"gt-zytv3","depends_on_id":"gt-jemnt","type":"blocks","created_at":"2025-12-25T02:11:33.862048-08:00","created_by":"stevey"}]}