bd sync: 2025-12-29 23:34:50

This commit is contained in:
Steve Yegge
2025-12-29 23:34:50 -08:00
parent 17f993a041
commit 5d3f500614

View File

@@ -285,7 +285,7 @@
{"id":"gt-4put","title":"execute-actions","description":"Send nudges, process shutdowns, escalate as decided.\n\nNeeds: decide-actions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T16:18:21.59918-08:00","updated_at":"2025-12-25T15:52:58.362049-08:00","deleted_at":"2025-12-25T15:52:58.362049-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-4qey","title":"gt mail: Cross-level routing is broken","description":"When Mayor sends mail to rig worker, message lands in wrong beads database. Sender's beads vs recipient's.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-20T17:57:35.617292-08:00","updated_at":"2025-12-27T21:29:53.652416-08:00","deleted_at":"2025-12-27T21:29:53.652416-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"}
{"id":"gt-4qiqp","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:01:10.250364-08:00","updated_at":"2025-12-27T21:26:04.034526-08:00","deleted_at":"2025-12-27T21:26:04.034526-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-4rgsf","title":"Merge: furiosa-1767075024945","description":"branch: polecat/furiosa-1767075024945\ntarget: main\nsource_issue: furiosa-1767075024945\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:13:52.986187-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-29T22:13:52.986187-08:00"}
{"id":"gt-4rgsf","title":"Merge: furiosa-1767075024945","description":"branch: polecat/furiosa-1767075024945\ntarget: main\nsource_issue: furiosa-1767075024945\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:13:52.986187-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-29T23:32:37.218051-08:00","closed_at":"2025-12-29T23:32:37.218051-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-4ry6","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Quick scan, stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:06:31.826181-08:00","updated_at":"2025-12-27T21:26:04.490888-08:00","deleted_at":"2025-12-27T21:26:04.490888-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-4tfp","title":"Digest: mol-deacon-patrol","description":"Patrol #5: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:31:29.654233-08:00","updated_at":"2025-12-27T21:26:04.359139-08:00","deleted_at":"2025-12-27T21:26:04.359139-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-4u5z","title":"Refinery as Worktree: Local MR Integration","description":"Move refinery from separate clone to git worktree. Polecats stop pushing to origin - refinery sees their branches locally. MRs become wisps (ephemeral). Only main gets pushed after merge.\n\n## Goals\n- Origin stays clean (only main + beads-sync branches)\n- No orphaned polecat branches ever\n- Simpler mental model for MR coordination\n- Faster integration (no network for local MR ops)\n\n## Trade-offs\n- Machine crash = redo pending work (acceptable, beads track state)\n- Future federation needs different approach (bundles or integration branch)\n\n## Components Affected\n- Rig initialization (refinery setup)\n- Spawn/polecat workflow (remove origin push)\n- Refinery manager (local branch access)\n- Documentation (architecture, workflows)\n- Molecule templates (remove push instructions)","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-23T20:24:56.517669-08:00","updated_at":"2025-12-27T21:29:55.753929-08:00","deleted_at":"2025-12-27T21:29:55.753929-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
@@ -379,7 +379,7 @@
{"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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T16:42:43.370167-08:00","updated_at":"2025-12-27T21:29:57.288589-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"}],"deleted_at":"2025-12-27T21:29:57.288589-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-5qkah","title":"Merge: nux-1766959759345","description":"branch: polecat/nux-1766959759345\ntarget: main\nsource_issue: nux-1766959759345\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-28T16:22:11.02241-08:00","created_by":"gastown/polecats/nux","updated_at":"2025-12-28T22:29:02.022819-08:00","closed_at":"2025-12-28T22:29:02.022819-08:00"}
{"id":"gt-5rg5c","title":"Digest: mol-deacon-patrol","description":"P6: stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:10:59.624402-08:00","updated_at":"2025-12-27T21:26:02.294341-08:00","deleted_at":"2025-12-27T21:26:02.294341-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-5rjtw","title":"Merge: valkyrie-1767074338488","description":"branch: polecat/valkyrie-1767074338488\ntarget: main\nsource_issue: valkyrie-1767074338488\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:03:51.278787-08:00","created_by":"gastown/polecats/valkyrie","updated_at":"2025-12-29T22:03:51.278787-08:00"}
{"id":"gt-5rjtw","title":"Merge: valkyrie-1767074338488","description":"branch: polecat/valkyrie-1767074338488\ntarget: main\nsource_issue: valkyrie-1767074338488\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:03:51.278787-08:00","created_by":"gastown/polecats/valkyrie","updated_at":"2025-12-29T23:32:37.262282-08:00","closed_at":"2025-12-29T23:32:37.262282-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"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":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-23T03:47:50.514096-08:00","updated_at":"2025-12-27T21:29:56.150954-08:00","deleted_at":"2025-12-27T21:29:56.150954-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"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":"tombstone","priority":3,"issue_type":"feature","created_at":"2025-12-21T22:39:25.167767-08:00","updated_at":"2025-12-27T21:29:57.555818-08:00","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"}],"deleted_at":"2025-12-27T21:29:57.555818-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
@@ -397,7 +397,7 @@
{"id":"gt-6337i","title":"Digest: mol-deacon-patrol","description":"Patrol 17: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:11:15.338659-08:00","updated_at":"2025-12-27T23:11:15.338659-08:00","closed_at":"2025-12-27T23:11:15.338621-08:00"}
{"id":"gt-659gx","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:49:17.60911-08:00","updated_at":"2025-12-26T17:49:17.60911-08:00","closed_at":"2025-12-26T17:49:17.609075-08:00"}
{"id":"gt-65a2","title":"Merge: gt-lnji","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-lnji\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T23:36:23.454776-08:00","updated_at":"2025-12-27T21:27:22.526724-08:00","deleted_at":"2025-12-27T21:27:22.526724-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
{"id":"gt-65gwa","title":"bd admin compact --older-than=0 ignores the flag, uses default 30 days","description":"When running bd admin compact --prune --older-than=0, the output says 'No expired tombstones to prune (TTL: 30 days)' - the flag value is ignored.","status":"hooked","priority":2,"issue_type":"bug","assignee":"gastown/polecats/dementus","created_at":"2025-12-28T22:38:10.95263-08:00","created_by":"stevey","updated_at":"2025-12-29T23:30:24.490889-08:00"}
{"id":"gt-65gwa","title":"bd admin compact --older-than=0 ignores the flag, uses default 30 days","description":"When running bd admin compact --prune --older-than=0, the output says 'No expired tombstones to prune (TTL: 30 days)' - the flag value is ignored.","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/dementus","created_at":"2025-12-28T22:38:10.95263-08:00","created_by":"stevey","updated_at":"2025-12-29T23:34:48.978317-08:00","closed_at":"2025-12-29T23:34:48.978317-08:00","close_reason":"Moved to bd-gigi - this is a beads bug, was filed in wrong rig (gastown). The fix needs to be made in the beads codebase at cmd/bd/compact_tombstone.go and cmd/bd/compact.go."}
{"id":"gt-662","title":"Swarm: report generation","description":"Generate markdown reports for completed swarms.\n\n## Command\n```\ngt swarm report \u003cswarm-id\u003e [--save \u003cfile\u003e]\n```\n\n## Report Content\n\n### Header\n- Swarm ID and title\n- Created/completed timestamps\n- Duration\n- Rig name\n\n### Task Summary\n| Task | Assignee | Status | Duration |\n|------|----------|--------|----------|\n| gt-xxx | Toast | merged | 15m |\n| gt-yyy | Nux | merged | 22m |\n\n### Worker Contributions\n- Commits per worker\n- Issues closed per worker\n- Lines changed (optional)\n\n### Timeline\n- Chronological events from events.jsonl\n- Key milestones (started, first merge, landing)\n\n### Issues Encountered\n- Conflicts resolved\n- Failed tasks (if any)\n- Escalations\n\n## Implementation\n```go\nfunc GenerateReport(swarmID string) (*SwarmReport, error)\nfunc (r *SwarmReport) ToMarkdown() string\n```\n\n## Storage\n- Save to \u003crig\u003e/.gastown/swarms/\u003cid\u003e/report.md\n- Or user-specified path with --save\n\n## PGT Reference\ngastown-py/src/gastown/swarm/manager.py generate_report()\n\n## Acceptance Criteria\n- [ ] Markdown report generated\n- [ ] Includes all sections above\n- [ ] Auto-saved to swarm directory\n- [ ] --save allows custom path","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T14:47:17.96767-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-68cxc","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:55:31.812922-08:00","updated_at":"2025-12-27T21:26:00.559046-08:00","deleted_at":"2025-12-27T21:26:00.559046-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-690z","title":"Test MR","description":"test","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-18T20:15:16.685471-08:00","updated_at":"2025-12-27T21:27:22.972427-08:00","deleted_at":"2025-12-27T21:27:22.972427-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
@@ -410,7 +410,7 @@
{"id":"gt-6cok","title":"Digest: mol-deacon-patrol","description":"Patrol #4: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:31:01.457636-08:00","updated_at":"2025-12-27T21:26:04.367448-08:00","deleted_at":"2025-12-27T21:26:04.367448-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-6db","title":"gt rig shutdown: Gracefully stop all rig agents","description":"Add 'gt rig shutdown \u003crig\u003e' command to gracefully stop all agents in a rig.\n\nShould:\n- Stop all polecat sessions\n- Stop refinery\n- Stop witness\n- Optionally wait for graceful shutdown with timeout","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T21:50:07.938698-08:00","updated_at":"2025-12-27T21:29:57.222574-08:00","dependencies":[{"issue_id":"gt-6db","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:23:43.179236-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.222574-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-6exub","title":"Digest: mol-deacon-patrol","description":"Patrol: no callbacks, no polecats, all agents healthy, cleaned 2 orphan processes + 2 stale locks","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:14:24.79552-08:00","updated_at":"2025-12-27T21:26:01.477672-08:00","deleted_at":"2025-12-27T21:26:01.477672-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-6jqx7","title":"Merge: ace-1767074385080","description":"attached_args: Code review this merge request\n\nbranch: polecat/ace-1767074385080\ntarget: main\nsource_issue: ace-1767074385080\nrig: gastown","status":"hooked","priority":2,"issue_type":"merge-request","assignee":"gastown/polecats/slit","created_at":"2025-12-29T22:06:01.818488-08:00","created_by":"gastown/polecats/ace","updated_at":"2025-12-29T22:08:32.67669-08:00"}
{"id":"gt-6jqx7","title":"Merge: ace-1767074385080","description":"attached_args: Code review this merge request\n\nbranch: polecat/ace-1767074385080\ntarget: main\nsource_issue: ace-1767074385080\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","assignee":"gastown/polecats/slit","created_at":"2025-12-29T22:06:01.818488-08:00","created_by":"gastown/polecats/ace","updated_at":"2025-12-29T23:34:33.884124-08:00","closed_at":"2025-12-29T23:34:33.884124-08:00","close_reason":"Code review APPROVED: Clean fix for gt-1clzd. Adds skipPane param to resolveTargetAgent, allowing --naked to bypass tmux pane lookup for terminated polecats."}
{"id":"gt-6k02h","title":"Digest: mol-deacon-patrol","description":"Patrol 6: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:16:49.768628-08:00","updated_at":"2025-12-27T21:26:03.576856-08:00","deleted_at":"2025-12-27T21:26:03.576856-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-18T14:19:28.408196-08:00","updated_at":"2025-12-27T21:29:57.168288-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"}],"deleted_at":"2025-12-27T21:29:57.168288-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"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"}
@@ -518,7 +518,7 @@
{"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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-18T14:19:33.083844-08:00","updated_at":"2025-12-27T21:29:57.151722-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"}],"deleted_at":"2025-12-27T21:29:57.151722-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-8cpjq","title":"Merge: toast-1767074978542","description":"branch: polecat/toast-1767074978542\ntarget: main\nsource_issue: toast-1767074978542\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:13:41.32716-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-29T22:13:41.32716-08:00"}
{"id":"gt-8cpjq","title":"Merge: toast-1767074978542","description":"branch: polecat/toast-1767074978542\ntarget: main\nsource_issue: toast-1767074978542\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:13:41.32716-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-29T23:32:37.226835-08:00","closed_at":"2025-12-29T23:32:37.226835-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-8dk07","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:26:44.693291-08:00","updated_at":"2025-12-27T21:26:03.295713-08:00","deleted_at":"2025-12-27T21:26:03.295713-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"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":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-21T14:05:17.303809-08:00","updated_at":"2025-12-27T21:29:56.628234-08:00","deleted_at":"2025-12-27T21:29:56.628234-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"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"}]}
@@ -629,7 +629,7 @@
{"id":"gt-9a2.8","title":"CloudRunOutpost: Basic implementation","description":"## Overview\n\nBasic CloudRunOutpost implementation. Persistent connections and cost tracking are separate tasks.\n\n## Implementation\n\n```go\ntype CloudRunOutpost struct {\n name string\n project string\n region string\n service string\n maxWorkers int\n client *WorkClient\n workers map[string]*CloudRunWorker\n mu sync.RWMutex\n}\n\nfunc NewCloudRunOutpost(cfg OutpostConfig) (*CloudRunOutpost, error) {\n serviceURL := fmt.Sprintf(\n \"https://%s-%s.a.run.app\",\n cfg.Service, cfg.Region,\n )\n return \u0026CloudRunOutpost{\n name: cfg.Name,\n project: cfg.Project,\n region: cfg.Region,\n service: cfg.Service,\n maxWorkers: cfg.MaxWorkers,\n client: NewWorkClient(serviceURL),\n workers: make(map[string]*CloudRunWorker),\n }, nil\n}\n```\n\n## Spawn\n\n```go\nfunc (o *CloudRunOutpost) Spawn(issue string, cfg WorkerConfig) (Worker, error) {\n req := WorkRequest{\n IssueID: issue,\n Rig: RigConfig{URL: cfg.RigURL, Branch: cfg.GitBranch},\n Beads: BeadsConfig{URL: cfg.BeadsURL, Branch: \"beads-sync\"},\n Branch: \"polecat/\" + issue,\n }\n \n events, err := o.client.DispatchWork(context.Background(), req)\n if err != nil {\n return nil, err\n }\n \n worker := \u0026CloudRunWorker{\n id: uuid.New().String(),\n outpost: o.name,\n issue: issue,\n events: events,\n status: WorkerStatusWorking,\n }\n \n o.mu.Lock()\n o.workers[worker.id] = worker\n o.mu.Unlock()\n \n go worker.monitor()\n return worker, nil\n}\n```\n\n## CloudRunWorker\n\n```go\ntype CloudRunWorker struct {\n id string\n outpost string\n issue string\n status WorkerStatus\n events \u003c-chan WorkEvent\n logs []string\n}\n\nfunc (w *CloudRunWorker) Attach() error {\n return errors.New(\"Cloud Run workers do not support attach\")\n}\n\nfunc (w *CloudRunWorker) Logs() (io.Reader, error) {\n return strings.NewReader(strings.Join(w.logs, \"\\n\")), nil\n}\n```\n\n## Files\n\n- `internal/outpost/cloudrun.go`\n\n## Dependencies\n\nDepends on: gt-9a2.1 (interfaces), gt-9a2.12 (HTTP client)\nBlocks: gt-9a2.13 (persistent connections), gt-9a2.14 (cost tracking)","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-16T18:03:06.803401-08:00","updated_at":"2025-12-27T21:29:57.692806-08:00","dependencies":[{"issue_id":"gt-9a2.8","depends_on_id":"gt-9a2","type":"parent-child","created_at":"2025-12-16T18:03:06.805524-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.8","depends_on_id":"gt-9a2.1","type":"blocks","created_at":"2025-12-16T18:03:46.081721-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.8","depends_on_id":"gt-9a2.12","type":"blocks","created_at":"2025-12-16T18:15:54.915831-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.692806-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-9a2.9","title":"Outpost assignment policy: Smart work routing","description":"## Overview\n\nPolicy engine for deciding which outpost gets which work.\n\n## Policy Configuration\n\n```yaml\npolicy:\n # Default order of preference\n default_preference: [local, gce-burst, cloudrun-burst]\n \n # Rules applied in order\n rules:\n # Background work → Cloud Run (cheap)\n - condition: \"priority \u003e= P3\"\n prefer: cloudrun-burst\n \n # Long tasks → VM (persistent)\n - condition: \"estimated_duration \u003e 30m\"\n prefer: gce-burst\n \n # Specific epic → specific outpost\n - condition: \"epic == gt-abc\"\n prefer: local\n```\n\n## Implementation\n\n```go\ntype AssignmentPolicy struct {\n DefaultPreference []string\n Rules []PolicyRule\n}\n\ntype PolicyRule struct {\n Condition string // Simple expression\n Prefer string // Outpost name\n Require string // Must use this outpost\n}\n\nfunc (p *AssignmentPolicy) SelectOutpost(\n issue Issue, \n outposts map[string]Outpost,\n) Outpost {\n // Check rules in order\n for _, rule := range p.Rules {\n if rule.Matches(issue) {\n if op, ok := outposts[rule.Prefer]; ok {\n if op.ActiveWorkers() \u003c op.MaxWorkers() {\n return op\n }\n }\n }\n }\n \n // Fall back to default preference\n for _, name := range p.DefaultPreference {\n if op, ok := outposts[name]; ok {\n if op.ActiveWorkers() \u003c op.MaxWorkers() {\n return op\n }\n }\n }\n \n return nil // All outposts at capacity\n}\n```\n\n## Condition Language\n\nSimple expressions, not a full DSL:\n\n```\npriority \u003e= P3\npriority == P0\nestimated_duration \u003e 30m\nepic == gt-abc\ntype == bug\nlabel contains \"urgent\"\n```\n\n## Files\n\n- `internal/outpost/policy.go`\n- `internal/outpost/condition.go`\n\nDepends on: gt-9a2.3 (config)","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-16T18:03:21.08101-08:00","updated_at":"2025-12-27T21:29:57.684514-08:00","dependencies":[{"issue_id":"gt-9a2.9","depends_on_id":"gt-9a2","type":"parent-child","created_at":"2025-12-16T18:03:21.083256-08:00","created_by":"daemon"},{"issue_id":"gt-9a2.9","depends_on_id":"gt-9a2.3","type":"blocks","created_at":"2025-12-16T18:03:46.300288-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.684514-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-9ae69","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T13:43:08.241676-08:00","updated_at":"2025-12-25T14:12:41.853879-08:00","deleted_at":"2025-12-25T14:12:41.853879-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
{"id":"gt-9ahbu","title":"Merge: nux-1767073376184","description":"branch: polecat/nux-1767073376184\ntarget: main\nsource_issue: nux-1767073376184\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T21:58:45.468878-08:00","created_by":"gastown/polecats/nux","updated_at":"2025-12-29T21:58:45.468878-08:00"}
{"id":"gt-9ahbu","title":"Merge: nux-1767073376184","description":"branch: polecat/nux-1767073376184\ntarget: main\nsource_issue: nux-1767073376184\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T21:58:45.468878-08:00","created_by":"gastown/polecats/nux","updated_at":"2025-12-29T23:32:37.271078-08:00","closed_at":"2025-12-29T23:32:37.271078-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-9ar8x","title":"Polecat identity confusion leads to direct main commits","description":"When polecats spawn without proper identity (due to gt-si6am and gt-y41ep):\n1. They think they're mayor\n2. They may commit from wrong directory (mayor/rig instead of polecats/\u003cname\u003e)\n3. Work goes directly to main, bypassing merge queue\n\nObserved: slit pushed 'gt polecat recycle' directly to main instead of its branch\n\nRoot cause: \n- gt-si6am: Wrong CLAUDE.md template (says 'Mayor Rig Context')\n- gt-y41ep: Env vars not exported (falls back to mayor detection)\n\nImpact: CRITICAL - merge queue entirely bypassed, no refinery review","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-28T14:18:37.061075-08:00","created_by":"mayor","updated_at":"2025-12-28T15:34:17.811462-08:00","closed_at":"2025-12-28T15:34:17.811462-08:00","dependencies":[{"issue_id":"gt-9ar8x","depends_on_id":"gt-si6am","type":"blocks","created_at":"2025-12-28T14:18:44.032422-08:00","created_by":"daemon"},{"issue_id":"gt-9ar8x","depends_on_id":"gt-y41ep","type":"blocks","created_at":"2025-12-28T14:18:44.060806-08:00","created_by":"daemon"}]}
{"id":"gt-9bpji","title":"Digest: mol-deacon-patrol","description":"P20: stable - handoff after 20 patrols","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:00:46.97186-08:00","updated_at":"2025-12-27T21:26:02.343606-08:00","deleted_at":"2025-12-27T21:26:02.343606-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-9d5zz","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:03:13.84255-08:00","updated_at":"2025-12-27T21:26:04.001681-08:00","deleted_at":"2025-12-27T21:26:04.001681-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -668,7 +668,7 @@
{"id":"gt-9uxr","title":"Critical packages lack test coverage","description":"Several packages have no test files:\n- internal/lock/ - Core identity locking (212 lines UNTESTED)\n- internal/witness/ - Worker monitoring\n- internal/mrqueue/ - MR queue management\n- internal/claude/ - Claude integration\n- internal/style/ - Terminal styling\n- internal/constants/ - Constants\n\nPriority for testing:\n1. lock/ - prevents duplicate agents, critical for correctness\n2. witness/ - agent lifecycle management\n3. mrqueue/ - merge request processing\n\nOverall: 37 test files for 160 Go files (23% by file count)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T12:51:01.154427-08:00","updated_at":"2025-12-24T12:51:01.154427-08:00","dependencies":[{"issue_id":"gt-9uxr","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.558885-08:00","created_by":"daemon"}]}
{"id":"gt-9uy0","title":"Remove 'spawn' terminology from molecular chemistry","description":"Clean all docs and code to present ONLY current terminology. No migration paths, no \"old vs new\" tables, no deprecated flags. The codebase should read as if the current design was always the design.\n\n**Terminology rules:**\n- spawn = polecats/workers ONLY\n- pour = create persistent mol\n- wisp = create ephemeral wisp \n- run = create and execute\n\n**Scope:**\n- Remove all \"Old → New\" migration tables\n- Remove deprecated flag documentation (--persistent, etc.)\n- Remove chemistry-design-changes.md entirely (it is a migration doc)\n- Clean all docs to use current terminology only\n- Rename spawn functions in code that deal with molecules","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-24T13:06:43.805547-08:00","updated_at":"2025-12-27T21:29:52.622049-08:00","dependencies":[{"issue_id":"gt-9uy0","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T13:06:49.341648-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.622049-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-9v52","title":"gt sling reports hook occupied but bd hook shows empty","description":"gt sling thinks a hook is occupied when bd hook shows it empty. Example: bd hook --agent beads/crew/dave shows (empty), but gt sling bd-hobo beads/crew/dave says 'hook already occupied by bd-ul59'. They should use the same source of truth (beads database pinned field).","status":"hooked","priority":2,"issue_type":"bug","assignee":"gastown/polecats/furiosa","created_at":"2025-12-24T20:01:42.105132-08:00","updated_at":"2025-12-29T23:31:34.107167-08:00"}
{"id":"gt-9w1b2","title":"Merge: dementus-1767073385126","description":"branch: polecat/dementus-1767073385126\ntarget: main\nsource_issue: dementus-1767073385126\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T21:56:54.773673-08:00","created_by":"gastown/polecats/dementus","updated_at":"2025-12-29T21:56:54.773673-08:00"}
{"id":"gt-9w1b2","title":"Merge: dementus-1767073385126","description":"branch: polecat/dementus-1767073385126\ntarget: main\nsource_issue: dementus-1767073385126\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T21:56:54.773673-08:00","created_by":"gastown/polecats/dementus","updated_at":"2025-12-29T23:32:37.279586-08:00","closed_at":"2025-12-29T23:32:37.279586-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-9wb07","title":"Digest: mol-deacon-patrol","description":"Patrol 6: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:55:01.948504-08:00","updated_at":"2025-12-27T21:26:00.567108-08:00","deleted_at":"2025-12-27T21:26:00.567108-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-9wv0","title":"gt spawn should verify daemon is running for polecat triggering","description":"gt spawn notifies the Deacon (via mail) that a polecat was started, expecting the Deacon to trigger it once Claude is ready. But if the daemon isn't running, the mail sits unread and the polecat never gets triggered.\n\n## Current Behavior\n1. gt spawn starts polecat session\n2. gt spawn sends POLECAT_STARTED to deacon/\n3. (assumes daemon will trigger polecat)\n\n## Problem\nIf gt daemon isn't running, step 3 never happens and polecat sits at prompt.\n\n## Solution\nIn gt spawn, after session start:\n1. Check if daemon is running (gt daemon status)\n2. If not running, either:\n a. Start daemon: gt daemon start\n b. Or warn user: 'Daemon not running, polecat may not auto-start'\n\n## Alternative\nThe user can manually trigger with gt nudge, but automated flow should work.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:03:03.71521-08:00","updated_at":"2025-12-23T01:03:03.71521-08:00","dependencies":[{"issue_id":"gt-9wv0","depends_on_id":"gt-bjft","type":"blocks","created_at":"2025-12-23T01:03:12.187224-08:00","created_by":"daemon"}]}
{"id":"gt-9xx4","title":"Digest: mol-deacon-patrol","description":"Patrol #14","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:25:08.524261-08:00","updated_at":"2025-12-27T21:26:04.717165-08:00","deleted_at":"2025-12-27T21:26:04.717165-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -736,8 +736,8 @@
{"id":"gt-azzni","title":"Digest: mol-deacon-patrol","description":"Patrol 18: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:36:52.597153-08:00","updated_at":"2025-12-27T21:26:00.710685-08:00","deleted_at":"2025-12-27T21:26:00.710685-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-b00d7","title":"Digest: mol-deacon-patrol","description":"Patrol 12: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:01.615713-08:00","updated_at":"2025-12-27T21:26:02.114479-08:00","deleted_at":"2025-12-27T21:26:02.114479-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-b089l","title":"Digest: mol-deacon-patrol","description":"Patrol 13: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T07:28:09.102947-08:00","updated_at":"2025-12-27T21:26:03.617976-08:00","deleted_at":"2025-12-27T21:26:03.617976-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-b0g9a","title":"Merge: nux-1767075895486","description":"branch: polecat/nux-1767075895486\ntarget: main\nsource_issue: nux-1767075895486\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:27:33.43977-08:00","created_by":"gastown/polecats/nux","updated_at":"2025-12-29T22:27:33.43977-08:00"}
{"id":"gt-b0rk4","title":"Merge: rictus-1767073382273","description":"branch: polecat/rictus-1767073382273\ntarget: main\nsource_issue: rictus-1767073382273\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T21:56:39.176645-08:00","created_by":"gastown/polecats/rictus","updated_at":"2025-12-29T21:56:39.176645-08:00"}
{"id":"gt-b0g9a","title":"Merge: nux-1767075895486","description":"branch: polecat/nux-1767075895486\ntarget: main\nsource_issue: nux-1767075895486\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:27:33.43977-08:00","created_by":"gastown/polecats/nux","updated_at":"2025-12-29T23:32:37.20935-08:00","closed_at":"2025-12-29T23:32:37.20935-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-b0rk4","title":"Merge: rictus-1767073382273","description":"branch: polecat/rictus-1767073382273\ntarget: main\nsource_issue: rictus-1767073382273\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T21:56:39.176645-08:00","created_by":"gastown/polecats/rictus","updated_at":"2025-12-29T23:32:37.288296-08:00","closed_at":"2025-12-29T23:32:37.288296-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"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":"tombstone","priority":0,"issue_type":"epic","created_at":"2025-12-16T00:11:09.148751-08:00","updated_at":"2025-12-27T21:29:45.690461-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"}],"deleted_at":"2025-12-27T21:29:45.690461-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
{"id":"gt-b1krg","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Nominal - Handoff threshold reached","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:54:04.619206-08:00","updated_at":"2025-12-27T21:26:04.067261-08:00","deleted_at":"2025-12-27T21:26:04.067261-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-b2bn","title":"Merge: gt-h6eq.5","description":"branch: polecat/keeper\ntarget: main\nsource_issue: gt-h6eq.5\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:45:44.660565-08:00","updated_at":"2025-12-27T21:27:22.836447-08:00","deleted_at":"2025-12-27T21:27:22.836447-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
@@ -955,7 +955,7 @@
{"id":"gt-e9o3v","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T03:21:27.471717-08:00","updated_at":"2025-12-27T21:26:03.755098-08:00","deleted_at":"2025-12-27T21:26:03.755098-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-e9za","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:41","description":"Patrol 1: All healthy, no actions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:41:26.61734-08:00","updated_at":"2025-12-27T21:26:05.179475-08:00","deleted_at":"2025-12-27T21:26:05.179475-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-ebd8i","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Midpoint, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T07:27:19.097799-08:00","updated_at":"2025-12-27T21:26:03.626793-08:00","deleted_at":"2025-12-27T21:26:03.626793-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-ebh05","title":"Digest: mol-deacon-patrol","description":"Patrol 2: 3 polecats working, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:31:53.127325-08:00","updated_at":"2025-12-29T22:31:53.127325-08:00","closed_at":"2025-12-29T22:31:53.127284-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-ebh05","depends_on_id":"gt-eph-a0u","type":"parent-child","created_at":"2025-12-29T22:31:53.128404-08:00","created_by":"deacon"}]}
{"id":"gt-ebh05","title":"Digest: mol-deacon-patrol","description":"Patrol 2: 3 polecats working, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:31:53.127325-08:00","updated_at":"2025-12-29T22:31:53.127325-08:00","closed_at":"2025-12-29T22:31:53.127284-08:00","close_reason":"Squashed from 9 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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:38:33.287033-08:00","updated_at":"2025-12-27T21:26:04.540721-08:00","deleted_at":"2025-12-27T21:26:04.540721-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-ed39","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:28","description":"Patrol 17","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:28:33.433261-08:00","updated_at":"2025-12-27T21:26:05.212978-08:00","deleted_at":"2025-12-27T21:26:05.212978-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -970,51 +970,31 @@
{"id":"gt-eho9v","title":"Digest: mol-deacon-patrol","description":"Patrol 8: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:14:26.413184-08:00","updated_at":"2025-12-27T21:26:01.040705-08:00","deleted_at":"2025-12-27T21:26:01.040705-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-ekgxf","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Quick cycle, all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:06:15.060768-08:00","updated_at":"2025-12-27T21:26:03.000866-08:00","deleted_at":"2025-12-27T21:26:03.000866-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-eln2","title":"Digest: mol-deacon-patrol","description":"Patrol OK: 0 polecats, 6 core sessions up, town quiet","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T02:11:42.107532-08:00","updated_at":"2025-12-27T21:26:05.380714-08:00","deleted_at":"2025-12-27T21:26:05.380714-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-empkw","title":"Merge: slit-1767075898886","description":"branch: polecat/slit-1767075898886\ntarget: main\nsource_issue: slit-1767075898886\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:27:56.247078-08:00","created_by":"gastown/polecats/slit","updated_at":"2025-12-29T22:27:56.247078-08:00"}
{"id":"gt-empkw","title":"Merge: slit-1767075898886","description":"branch: polecat/slit-1767075898886\ntarget: main\nsource_issue: slit-1767075898886\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:27:56.247078-08:00","created_by":"gastown/polecats/slit","updated_at":"2025-12-29T23:32:37.200692-08:00","closed_at":"2025-12-29T23:32:37.200692-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-emrh5","title":"Merge: slit-1767059695613","description":"branch: polecat/slit-1767059695613\ntarget: main\nsource_issue: slit-1767059695613\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T18:03:49.25825-08:00","created_by":"gastown/polecats/slit","updated_at":"2025-12-29T21:45:58.325358-08:00","closed_at":"2025-12-29T21:45:58.325358-08:00","close_reason":"Stale merge requests - branches no longer exist"}
{"id":"gt-eo1aa","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:06:03.759472-08:00","updated_at":"2025-12-27T21:26:03.347957-08:00","deleted_at":"2025-12-27T21:26:03.347957-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-ep7f","title":"survey-workers","description":"List polecats and categorize by status.\n\n```bash\ngt polecat list \u003crig\u003e\n```\n\nNeeds: load-state","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.506038-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","dependencies":[{"issue_id":"gt-ep7f","depends_on_id":"gt-751s","type":"parent-child","created_at":"2025-12-23T01:41:54.555919-08:00","created_by":"stevey"},{"issue_id":"gt-ep7f","depends_on_id":"gt-z94m","type":"blocks","created_at":"2025-12-23T01:41:54.562822-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"gt-eph-016","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:35:36.343842-08:00","updated_at":"2025-12-29T22:35:44.498962-08:00","ephemeral":true}
{"id":"gt-eph-22v","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-27T20:18:52.987761-08:00","updated_at":"2025-12-27T21:26:00.238173-08:00","deleted_at":"2025-12-27T21:26:00.238173-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
{"id":"gt-eph-2wb","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with YAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents. Sequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T09:54:49.166597-08:00","updated_at":"2025-12-28T09:55:21.11902-08:00","closed_at":"2025-12-28T09:55:21.11902-08:00","dependencies":[{"issue_id":"gt-eph-2wb","depends_on_id":"gt-eph-5jh","type":"blocks","created_at":"2025-12-28T09:54:49.258993-08:00","created_by":"deacon"}]}
{"id":"gt-eph-43s","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.719317-08:00","updated_at":"2025-12-28T09:55:41.719317-08:00","dependencies":[{"issue_id":"gt-eph-43s","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.75482-08:00","created_by":"deacon"},{"issue_id":"gt-eph-43s","depends_on_id":"gt-eph-tc2","type":"blocks","created_at":"2025-12-28T09:55:41.818357-08:00","created_by":"deacon"}]}
{"id":"gt-eph-49b","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:34:03.946679-08:00","updated_at":"2025-12-29T22:34:11.180352-08:00","ephemeral":true}
{"id":"gt-eph-4ss","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:33:06.556808-08:00","updated_at":"2025-12-29T22:33:14.900936-08:00","ephemeral":true}
{"id":"gt-eph-5c8","title":"Handle callbacks from agents","description":"Handle callbacks from agents.\n\nCheck the Mayor's inbox for messages from:\n- Witnesses reporting polecat status\n- Refineries reporting merge results\n- Polecats requesting help or escalation\n- External triggers (webhooks, timers)\n\n```bash\ngt mail inbox\n# For each message:\ngt mail read \u003cid\u003e\n# Handle based on message type\n```\n\nCallbacks may spawn new polecats, update issue state, or trigger other actions.","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/dag","created_at":"2025-12-28T09:55:41.717851-08:00","updated_at":"2025-12-29T23:31:00.85477-08:00","dependencies":[{"issue_id":"gt-eph-5c8","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.720544-08:00","created_by":"deacon"}]}
{"id":"gt-eph-5jh","title":"Check Witness and Refinery health","description":"Check Witness and Refinery health for each rig.\n\n**ZFC Principle**: You (Claude) make the judgment call about what is \"stuck\" or \"unresponsive\" - there are no hardcoded thresholds in Go. Read the signals, consider context, and decide.\n\nFor each rig, run:\n```bash\ngt witness status \u003crig\u003e\ngt refinery status \u003crig\u003e\n```\n\n**Signals to assess:**\n\n| Component | Healthy Signals | Concerning Signals |\n|-----------|-----------------|-------------------|\n| Witness | State: running, recent activity | State: not running, no heartbeat |\n| Refinery | State: running, queue processing | Queue stuck, merge failures |\n\n**Tracking unresponsive cycles:**\n\nMaintain in your patrol state (persisted across cycles):\n```\nhealth_state:\n \u003crig\u003e:\n witness:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n refinery:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n```\n\n**Decision matrix** (you decide the thresholds based on context):\n\n| Cycles Unresponsive | Suggested Action |\n|---------------------|------------------|\n| 1-2 | Note it, check again next cycle |\n| 3-4 | Attempt restart: gt witness restart \u003crig\u003e |\n| 5+ | Escalate to Mayor with context |\n\n**Restart commands:**\n```bash\ngt witness restart \u003crig\u003e\ngt refinery restart \u003crig\u003e\n```\n\n**Escalation:**\n```bash\ngt mail send mayor/ -s \"Health: \u003crig\u003e \u003ccomponent\u003e unresponsive\" \\\n -m \"Component has been unresponsive for N cycles. Restart attempts failed.\n Last healthy: \u003ctimestamp\u003e\n Error signals: \u003cdetails\u003e\"\n```\n\nReset unresponsive_cycles to 0 when component responds normally.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T09:54:49.166307-08:00","updated_at":"2025-12-28T09:55:21.319124-08:00","closed_at":"2025-12-28T09:55:21.319124-08:00","dependencies":[{"issue_id":"gt-eph-5jh","depends_on_id":"gt-eph-uqs","type":"blocks","created_at":"2025-12-28T09:54:49.251653-08:00","created_by":"deacon"}]}
{"id":"gt-eph-6dn","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","created_at":"2025-12-28T15:56:22.274106-08:00","updated_at":"2025-12-28T15:56:30.255876-08:00"}
{"id":"gt-eph-7ev","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:33:51.007733-08:00","updated_at":"2025-12-29T22:33:58.205116-08:00","ephemeral":true}
{"id":"gt-eph-821","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:31:58.910377-08:00","updated_at":"2025-12-29T22:32:07.833417-08:00","ephemeral":true}
{"id":"gt-eph-8ek","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:34:44.167542-08:00","updated_at":"2025-12-29T22:34:51.143646-08:00","ephemeral":true}
{"id":"gt-eph-8ep","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:32:50.318331-08:00","updated_at":"2025-12-29T22:32:59.315734-08:00","ephemeral":true}
{"id":"gt-eph-8fu","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize. The spawn command returns immediately without waiting. This step finds spawned polecats that are now ready and sends them a trigger to start working.\n\n**ZFC-Compliant Observation** (AI observes AI):\n\n```bash\n# View pending spawns with captured terminal output\ngt deacon pending\n```\n\nFor each pending session, analyze the captured output:\n- Look for Claude's prompt indicator \"\u003e \" at the start of a line\n- If prompt is visible, Claude is ready for input\n- Make the judgment call yourself - you're the AI observer\n\nFor each ready polecat:\n```bash\n# 1. Trigger the polecat\ngt nudge \u003csession\u003e \"Begin.\"\n\n# 2. Clear from pending list\ngt deacon pending \u003csession\u003e\n```\n\nThis triggers the UserPromptSubmit hook, which injects mail so the polecat sees its assignment.\n\n**Bootstrap mode** (daemon-only, no AI available):\nThe daemon uses `gt deacon trigger-pending` with regex detection. This ZFC violation is acceptable during cold startup when no AI agent is running yet.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.718169-08:00","updated_at":"2025-12-28T09:55:41.71817-08:00","dependencies":[{"issue_id":"gt-eph-8fu","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.727407-08:00","created_by":"deacon"},{"issue_id":"gt-eph-8fu","depends_on_id":"gt-eph-5c8","type":"blocks","created_at":"2025-12-28T09:55:41.782453-08:00","created_by":"deacon"}]}
{"id":"gt-eph-a0u","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:30:32.481559-08:00","updated_at":"2025-12-29T22:30:39.231402-08:00","ephemeral":true}
{"id":"gt-eph-acp","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","created_at":"2025-12-28T15:57:11.334141-08:00","updated_at":"2025-12-28T15:57:18.365848-08:00"}
{"id":"gt-eph-bf1","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.719859-08:00","updated_at":"2025-12-28T09:55:41.719859-08:00","dependencies":[{"issue_id":"gt-eph-bf1","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.768581-08:00","created_by":"deacon"},{"issue_id":"gt-eph-bf1","depends_on_id":"gt-eph-lm1","type":"blocks","created_at":"2025-12-28T09:55:41.833279-08:00","created_by":"deacon"}]}
{"id":"gt-eph-cl6","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-28T11:22:06.740796-08:00","updated_at":"2025-12-28T11:22:06.740796-08:00"}
{"id":"gt-eph-cmk","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:35:09.833531-08:00","updated_at":"2025-12-29T22:35:18.654647-08:00","ephemeral":true}
{"id":"gt-eph-ei9","title":"Evaluate pending async gates","description":"Evaluate pending async gates.\n\nGates are async coordination primitives that block until conditions are met.\nThe Deacon is responsible for monitoring gates and closing them when ready.\n\n**Timer gates** (await_type: timer):\nCheck if elapsed time since creation exceeds the timeout duration.\n\n```bash\n# List all open gates\nbd gate list --json\n\n# For each timer gate, check if elapsed:\n# - CreatedAt + Timeout \u003c Now → gate is ready to close\n# - Close with: bd gate close \u003cid\u003e --reason \"Timer elapsed\"\n```\n\n**GitHub gates** (await_type: gh:run, gh:pr) - handled in separate step.\n\n**Human/Mail gates** - require external input, skip here.\n\nAfter closing a gate, the Waiters field contains mail addresses to notify.\nSend a brief notification to each waiter that the gate has cleared.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.718473-08:00","updated_at":"2025-12-28T09:55:41.718473-08:00","dependencies":[{"issue_id":"gt-eph-ei9","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.734258-08:00","created_by":"deacon"},{"issue_id":"gt-eph-ei9","depends_on_id":"gt-eph-5c8","type":"blocks","created_at":"2025-12-28T09:55:41.789441-08:00","created_by":"deacon"}]}
{"id":"gt-eph-gf1","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with YAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents. Sequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.719043-08:00","updated_at":"2025-12-28T09:55:41.719043-08:00","dependencies":[{"issue_id":"gt-eph-gf1","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.747929-08:00","created_by":"deacon"},{"issue_id":"gt-eph-gf1","depends_on_id":"gt-eph-tc2","type":"blocks","created_at":"2025-12-28T09:55:41.810967-08:00","created_by":"deacon"}]}
{"id":"gt-eph-gi8","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:36:12.682562-08:00","updated_at":"2025-12-29T22:36:23.446144-08:00","ephemeral":true}
{"id":"gt-eph-hfj","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-28T09:55:41.717288-08:00","updated_at":"2025-12-28T09:55:41.717288-08:00"}
{"id":"gt-eph-hzn","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:35:45.150481-08:00","updated_at":"2025-12-29T22:35:53.646885-08:00","ephemeral":true}
{"id":"gt-eph-ive","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:34:31.311313-08:00","updated_at":"2025-12-29T22:34:37.654179-08:00","ephemeral":true}
{"id":"gt-eph-lm1","title":"Clean dead sessions","description":"Clean dead sessions and orphaned state.\n\nRun `gt doctor --fix` to handle all cleanup:\n\n```bash\n# Preview what needs cleaning\ngt doctor -v\n\n# Fix everything\ngt doctor --fix\n```\n\nThis handles:\n- **orphan-sessions**: Kill orphaned tmux sessions (gt-* not matching valid patterns)\n- **orphan-processes**: Kill orphaned Claude processes (no tmux parent)\n- **wisp-gc**: Garbage collect abandoned wisps (\u003e1h old)\n\nAll cleanup is handled by doctor checks - no need to run separate commands.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.719584-08:00","updated_at":"2025-12-28T09:55:41.719584-08:00","dependencies":[{"issue_id":"gt-eph-lm1","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.761736-08:00","created_by":"deacon"},{"issue_id":"gt-eph-lm1","depends_on_id":"gt-eph-43s","type":"blocks","created_at":"2025-12-28T09:55:41.825725-08:00","created_by":"deacon"}]}
{"id":"gt-eph-ly5","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:35:26.528307-08:00","updated_at":"2025-12-29T22:35:35.701654-08:00","ephemeral":true}
{"id":"gt-eph-o04","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T09:54:49.166871-08:00","updated_at":"2025-12-28T09:55:21.204545-08:00","closed_at":"2025-12-28T09:55:21.204545-08:00","dependencies":[{"issue_id":"gt-eph-o04","depends_on_id":"gt-eph-5jh","type":"blocks","created_at":"2025-12-28T09:54:49.266603-08:00","created_by":"deacon"}]}
{"id":"gt-eph-oh1","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:36:24.097166-08:00","updated_at":"2025-12-29T22:36:31.674243-08:00","ephemeral":true}
{"id":"gt-eph-rec","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:35:54.290654-08:00","updated_at":"2025-12-29T22:36:05.245022-08:00","ephemeral":true}
{"id":"gt-eph-tc2","title":"Check Witness and Refinery health","description":"Check Witness and Refinery health for each rig.\n\n**ZFC Principle**: You (Claude) make the judgment call about what is \"stuck\" or \"unresponsive\" - there are no hardcoded thresholds in Go. Read the signals, consider context, and decide.\n\nFor each rig, run:\n```bash\ngt witness status \u003crig\u003e\ngt refinery status \u003crig\u003e\n```\n\n**Signals to assess:**\n\n| Component | Healthy Signals | Concerning Signals |\n|-----------|-----------------|-------------------|\n| Witness | State: running, recent activity | State: not running, no heartbeat |\n| Refinery | State: running, queue processing | Queue stuck, merge failures |\n\n**Tracking unresponsive cycles:**\n\nMaintain in your patrol state (persisted across cycles):\n```\nhealth_state:\n \u003crig\u003e:\n witness:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n refinery:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n```\n\n**Decision matrix** (you decide the thresholds based on context):\n\n| Cycles Unresponsive | Suggested Action |\n|---------------------|------------------|\n| 1-2 | Note it, check again next cycle |\n| 3-4 | Attempt restart: gt witness restart \u003crig\u003e |\n| 5+ | Escalate to Mayor with context |\n\n**Restart commands:**\n```bash\ngt witness restart \u003crig\u003e\ngt refinery restart \u003crig\u003e\n```\n\n**Escalation:**\n```bash\ngt mail send mayor/ -s \"Health: \u003crig\u003e \u003ccomponent\u003e unresponsive\" \\\n -m \"Component has been unresponsive for N cycles. Restart attempts failed.\n Last healthy: \u003ctimestamp\u003e\n Error signals: \u003cdetails\u003e\"\n```\n\nReset unresponsive_cycles to 0 when component responds normally.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.718758-08:00","updated_at":"2025-12-28T09:55:41.718758-08:00","dependencies":[{"issue_id":"gt-eph-tc2","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.74114-08:00","created_by":"deacon"},{"issue_id":"gt-eph-tc2","depends_on_id":"gt-eph-8fu","type":"blocks","created_at":"2025-12-28T09:55:41.796618-08:00","created_by":"deacon"},{"issue_id":"gt-eph-tc2","depends_on_id":"gt-eph-ei9","type":"blocks","created_at":"2025-12-28T09:55:41.803807-08:00","created_by":"deacon"}]}
{"id":"gt-eph-thb","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-28T13:05:00.650524-08:00","updated_at":"2025-12-28T13:06:36.220356-08:00","closed_at":"2025-12-28T13:06:36.220356-08:00"}
{"id":"gt-eph-ucl","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.720135-08:00","updated_at":"2025-12-28T09:55:41.720135-08:00","dependencies":[{"issue_id":"gt-eph-ucl","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.775524-08:00","created_by":"deacon"},{"issue_id":"gt-eph-ucl","depends_on_id":"gt-eph-bf1","type":"blocks","created_at":"2025-12-28T09:55:41.841216-08:00","created_by":"deacon"}]}
{"id":"gt-eph-uqs","title":"Evaluate pending async gates","description":"Evaluate pending async gates.\n\nGates are async coordination primitives that block until conditions are met.\nThe Deacon is responsible for monitoring gates and closing them when ready.\n\n**Timer gates** (await_type: timer):\nCheck if elapsed time since creation exceeds the timeout duration.\n\n```bash\n# List all open gates\nbd gate list --json\n\n# For each timer gate, check if elapsed:\n# - CreatedAt + Timeout \u003c Now → gate is ready to close\n# - Close with: bd gate close \u003cid\u003e --reason \"Timer elapsed\"\n```\n\n**GitHub gates** (await_type: gh:run, gh:pr) - handled in separate step.\n\n**Human/Mail gates** - require external input, skip here.\n\nAfter closing a gate, the Waiters field contains mail addresses to notify.\nSend a brief notification to each waiter that the gate has cleared.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T09:54:49.166022-08:00","updated_at":"2025-12-28T09:55:21.2336-08:00","closed_at":"2025-12-28T09:55:21.2336-08:00"}
{"id":"gt-eph-vze","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:33:33.329912-08:00","updated_at":"2025-12-29T22:33:44.243475-08:00","ephemeral":true}
{"id":"gt-eph-w0l","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-27T23:12:44.318662-08:00","updated_at":"2025-12-27T23:18:05.312893-08:00","closed_at":"2025-12-27T23:18:05.312893-08:00"}
{"id":"gt-eph-x3i","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:34:57.462613-08:00","updated_at":"2025-12-29T22:35:09.192087-08:00","ephemeral":true}
{"id":"gt-eph-x4j","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:32:27.68291-08:00","updated_at":"2025-12-29T22:32:37.199072-08:00","ephemeral":true}
{"id":"gt-eph-xvc","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T09:54:49.167697-08:00","updated_at":"2025-12-28T09:55:21.262397-08:00","closed_at":"2025-12-28T09:55:21.262397-08:00","dependencies":[{"issue_id":"gt-eph-xvc","depends_on_id":"gt-eph-zdk","type":"blocks","created_at":"2025-12-28T09:54:49.289859-08:00","created_by":"deacon"}]}
{"id":"gt-eph-z18","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:34:17.868617-08:00","updated_at":"2025-12-29T22:34:25.787243-08:00","ephemeral":true}
{"id":"gt-eph-za2","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"hooked","priority":2,"issue_type":"epic","assignee":"deacon","created_at":"2025-12-29T22:25:21.651657-08:00","updated_at":"2025-12-29T22:25:30.235073-08:00","ephemeral":true}
{"id":"gt-eph-zdk","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T09:54:49.167404-08:00","updated_at":"2025-12-28T09:55:21.290309-08:00","closed_at":"2025-12-28T09:55:21.290309-08:00"}
{"id":"gt-eqys","title":"gt spawn: pasted work assignment needs manual Enter to start","description":"## Problem\n\nAfter `gt spawn` pastes the work assignment into Claude, the session waits for Enter.\n\n## Current Behavior\n\n1. `gt spawn gastown/Rictus --issue gt-xxx`\n2. Session starts, work is pasted\n3. Claude shows 'Pasted text #1 +53 lines' but doesn't start\n4. Must manually send Enter or attach and press Enter\n\n## Expected\n\nThe spawn should send Enter after pasting to kick off the work.\n\n## Related\n\nSame debounce issue as tmux notifications (gt-vnp9).","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-18T21:54:14.111101-08:00","updated_at":"2025-12-27T21:29:57.060019-08:00","deleted_at":"2025-12-27T21:29:57.060019-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"}
{"id":"gt-er0u","title":"Work on ga-yp3: Polecat inbox system for reliable work as...","description":"Work on ga-yp3: Polecat inbox system for reliable work assignment. This is P1 priority. See bd show ga-yp3 for full design spec.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T21:57:34.473056-08:00","updated_at":"2025-12-27T21:29:56.915155-08:00","deleted_at":"2025-12-27T21:29:56.915155-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1182,7 +1162,7 @@
{"id":"gt-guqza","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:38:57.363614-08:00","updated_at":"2025-12-25T15:38:57.363614-08:00","closed_at":"2025-12-25T15:38:57.363584-08:00"}
{"id":"gt-gura","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:37:11.453511-08:00","updated_at":"2025-12-27T21:26:04.610072-08:00","deleted_at":"2025-12-27T21:26:04.610072-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-guuv0","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T02:31:25.422463-08:00","updated_at":"2025-12-27T21:26:03.780074-08:00","deleted_at":"2025-12-27T21:26:03.780074-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-gvjpn","title":"Digest: mol-deacon-patrol","description":"Patrol 3: 3 polecats working, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:32:21.545886-08:00","updated_at":"2025-12-29T22:32:21.545886-08:00","closed_at":"2025-12-29T22:32:21.54585-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-gvjpn","depends_on_id":"gt-eph-821","type":"parent-child","created_at":"2025-12-29T22:32:21.546817-08:00","created_by":"deacon"}]}
{"id":"gt-gvjpn","title":"Digest: mol-deacon-patrol","description":"Patrol 3: 3 polecats working, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:32:21.545886-08:00","updated_at":"2025-12-29T22:32:21.545886-08:00","closed_at":"2025-12-29T22:32:21.54585-08:00","close_reason":"Squashed from 9 wisps"}
{"id":"gt-gvxyu","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:16:22.236359-08:00","updated_at":"2025-12-27T21:26:02.732364-08:00","deleted_at":"2025-12-27T21:26:02.732364-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-gwiye","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Refineries healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:54:30.168506-08:00","updated_at":"2025-12-27T21:26:01.510861-08:00","deleted_at":"2025-12-27T21:26:01.510861-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-gzp2y","title":"Day 1.1b: Add type=role to bead schema","description":"Add role as a valid bead type in the schema.\n\nRole beads define agent behavior:\n- Priming instructions (from current CLAUDE.md content)\n- default_molecule field\n- capabilities list\n\nThis enables Day 1.5 (creating role beads from CLAUDE.md).\n\nMust be done alongside type=agent schema work.","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-27T23:17:10.456454-08:00","created_by":"mayor","updated_at":"2025-12-27T23:39:09.219483-08:00","closed_at":"2025-12-27T23:39:09.219483-08:00","dependencies":[{"issue_id":"gt-gzp2y","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T23:17:26.728179-08:00","created_by":"daemon"}]}
@@ -1360,7 +1340,7 @@
{"id":"gt-j0lsj","title":"Digest: mol-deacon-patrol","description":"Patrol 10: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T08:17:01.052196-08:00","updated_at":"2025-12-28T08:17:01.052196-08:00","closed_at":"2025-12-28T08:17:01.052165-08:00"}
{"id":"gt-j36i9","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All agents healthy.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T03:03:33.755132-08:00","updated_at":"2025-12-28T03:03:33.755132-08:00","closed_at":"2025-12-28T03:03:33.755099-08:00"}
{"id":"gt-j3cx","title":"refinery Handoff","description":"# Merge queue tracking\nlast_processed_branch: null\nbranches_merged_this_cycle: 0","status":"hooked","priority":2,"issue_type":"task","created_at":"2025-12-24T23:19:17.135684-08:00","updated_at":"2025-12-26T13:08:21.775778-08:00"}
{"id":"gt-j3z81","title":"Digest: mol-deacon-patrol","description":"Patrol 1 complete: inbox clear, 3 polecats working, fixed 3 stale locks","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:30:25.271821-08:00","updated_at":"2025-12-29T22:30:25.271821-08:00","closed_at":"2025-12-29T22:30:25.271786-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-j3z81","depends_on_id":"gt-eph-za2","type":"parent-child","created_at":"2025-12-29T22:30:25.272887-08:00","created_by":"deacon"}]}
{"id":"gt-j3z81","title":"Digest: mol-deacon-patrol","description":"Patrol 1 complete: inbox clear, 3 polecats working, fixed 3 stale locks","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:30:25.271821-08:00","updated_at":"2025-12-29T22:30:25.271821-08:00","closed_at":"2025-12-29T22:30:25.271786-08:00","close_reason":"Squashed from 9 wisps"}
{"id":"gt-j4njt","title":"Digest: mol-deacon-patrol","description":"Patrol 11: All healthy.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T03:07:40.158577-08:00","updated_at":"2025-12-28T03:07:40.158577-08:00","closed_at":"2025-12-28T03:07:40.158546-08:00"}
{"id":"gt-j4nu","title":"Merge: gt-g44u.3","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-g44u.3\nrig: gastown","status":"tombstone","priority":0,"issue_type":"merge-request","created_at":"2025-12-19T16:14:52.767156-08:00","updated_at":"2025-12-27T21:27:22.368034-08:00","deleted_at":"2025-12-27T21:27:22.368034-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
{"id":"gt-j5tk","title":"Work assignment messages should auto-close on completion","description":"When a polecat completes work on an issue, the work assignment message (msg-type:task) stays open. Found 7 stale work assignments in gastown after swarm completed.\n\nProposal: When bd close is called on an issue, auto-close any work assignment messages that reference that issue in their body.\n\nAlternative: Work assignment messages could use a different lifecycle - perhaps they should be acked (closed) when the polecat starts working, not when they finish.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-20T03:12:28.403974-08:00","updated_at":"2025-12-27T21:29:56.847664-08:00","deleted_at":"2025-12-27T21:29:56.847664-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
@@ -1563,7 +1543,7 @@
{"id":"gt-m0fx.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-m0fx\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T23:28:07.781991-08:00","updated_at":"2025-12-27T21:29:55.645876-08:00","deleted_at":"2025-12-27T21:29:55.645876-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-m3hh","title":"Merge: gt-7hor","description":"branch: polecat/slit\ntarget: main\nsource_issue: gt-7hor\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-22T12:32:43.108463-08:00","updated_at":"2025-12-27T21:27:22.869876-08:00","deleted_at":"2025-12-27T21:27:22.869876-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
{"id":"gt-m46z2","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:39:09.102076-08:00","updated_at":"2025-12-27T21:26:00.32059-08:00","deleted_at":"2025-12-27T21:26:00.32059-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-m5m4o","title":"Merge: furiosa-1767073359963","description":"attached_args: Code review this merge request\n\nbranch: polecat/furiosa-1767073359963\ntarget: main\nsource_issue: furiosa-1767073359963\nrig: gastown","status":"hooked","priority":2,"issue_type":"merge-request","assignee":"gastown/polecats/rictus","created_at":"2025-12-29T21:58:58.192817-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-29T22:08:36.954638-08:00"}
{"id":"gt-m5m4o","title":"Merge: furiosa-1767073359963","description":"attached_args: Code review this merge request\n\nbranch: polecat/furiosa-1767073359963\ntarget: main\nsource_issue: furiosa-1767073359963\nrig: gastown","notes":"REVIEW REJECTED by rictus: Commits claim await-signal but no such code exists. Feature removals conflict with rictus branch quality-level work. Needs clarification and reconciliation.","status":"open","priority":2,"issue_type":"merge-request","assignee":"gastown/polecats/rictus","created_at":"2025-12-29T21:58:58.192817-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-29T23:34:07.721039-08:00"}
{"id":"gt-m5w4g","title":"Agent Communication Protocol","description":"Structured mail between agents for coordination.\n\n## Problem\nAgents communicate via freeform mail. This works but lacks parseable structure for automated handling.\n\n## Protocols\n\n### Witness to Refinery\n- POLECAT_READY: worker X completed, branch ready for merge\n- REWORK_COMPLETE: worker Y finished requested rework\n\n### Refinery to Witness \n- MERGE_SUCCESS: worker X merged, can be cleaned up\n- MERGE_FAILED: worker X needs rework (reason attached)\n- REWORK_REQUEST: please have worker X rebase on current main\n\n### Polecat to Witness\n- WORK_COMPLETE: done with assigned issue\n- NEED_HELP: stuck, requesting intervention\n\n### Any to Deacon\n- ESCALATION: problem requiring Mayor attention\n\n## Mail Format\nSubject: [PROTOCOL_TYPE] brief description\nBody: Structured YAML or JSON payload\n\n## Success Criteria\n- Patrol steps parse protocol messages automatically\n- Handlers exist for each protocol type\n- Integration test: polecat completes -\u003e witness notifies -\u003e refinery merges -\u003e witness cleans up\n\nConsolidates gt-0qki.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T20:46:35.538744-08:00","updated_at":"2025-12-25T20:46:35.538744-08:00","dependencies":[{"issue_id":"gt-m5w4g","depends_on_id":"gt-psj76","type":"blocks","created_at":"2025-12-25T20:47:18.478538-08:00","created_by":"daemon"}]}
{"id":"gt-m5w4g.1","title":"Protocol message specification","description":"Define YAML format for protocol messages. Subject: [PROTOCOL_TYPE] brief. Body: structured payload. Document all protocol types: POLECAT_READY, MERGE_SUCCESS, MERGE_FAILED, REWORK_REQUEST, WORK_COMPLETE, NEED_HELP, ESCALATION.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T20:56:27.493974-08:00","updated_at":"2025-12-25T20:56:27.493974-08:00","dependencies":[{"issue_id":"gt-m5w4g.1","depends_on_id":"gt-m5w4g","type":"parent-child","created_at":"2025-12-25T20:56:27.494443-08:00","created_by":"daemon"}]}
{"id":"gt-m5w4g.2","title":"Witness-Refinery protocol handlers","description":"Implement handlers for: POLECAT_READY (witness→refinery: worker done, branch ready), MERGE_SUCCESS (refinery→witness: merged, cleanup ok), MERGE_FAILED (refinery→witness: needs rework), REWORK_REQUEST (refinery→witness: rebase needed).","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T20:56:28.618916-08:00","updated_at":"2025-12-25T20:56:28.618916-08:00","dependencies":[{"issue_id":"gt-m5w4g.2","depends_on_id":"gt-m5w4g","type":"parent-child","created_at":"2025-12-25T20:56:28.620996-08:00","created_by":"daemon"},{"issue_id":"gt-m5w4g.2","depends_on_id":"gt-m5w4g.1","type":"blocks","created_at":"2025-12-25T20:56:50.702111-08:00","created_by":"daemon"}]}
@@ -1709,7 +1689,7 @@
{"id":"gt-oc2","title":"Daemon: proper rig discovery","description":"Currently discovers rigs by scanning tmux session names for gt-*-witness pattern. Should instead:\n- Read rigs from mayor/rigs.json\n- Or scan town directory for .gastown subdirs\n- Handle rigs that exist but don't have running witnesses","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-18T13:38:15.825299-08:00","updated_at":"2025-12-27T21:29:57.184842-08:00","dependencies":[{"issue_id":"gt-oc2","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T13:38:26.826697-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.184842-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-occdx","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:43:56.478866-08:00","updated_at":"2025-12-27T21:26:02.896845-08:00","deleted_at":"2025-12-27T21:26:02.896845-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-ocjdi","title":"gt crew add: CLAUDE.md customization leaves git dirty","description":"When gt crew add generates a customized CLAUDE.md for crew workers, it differs from the repo version (Crew Worker Context vs Polecat Context, personalized footer). This leaves the git state 'dirty'.\n\nOptions:\n1. Add CLAUDE.md to .gitignore in crew workspaces\n2. Auto-commit the customized CLAUDE.md locally \n3. Store crew CLAUDE.md content elsewhere (e.g., .claude/CLAUDE.md)\n\nCurrent behavior is functional but 'gt crew list' shows 'Git: dirty' for new crew.\n\nFound during: adding crew workers grip, fang, wolf","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-29T13:03:53.25608-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-29T13:03:53.25608-08:00"}
{"id":"gt-od1g","title":"Mail inbox from witness/refinery dirs shows Mayor inbox","description":"When running `gt mail inbox` from the witness or refinery directories, it shows the Mayor's inbox instead of the agent's own inbox.\n\nReproduction:\n```\n$ cd ~/gt/beads/witness \u0026\u0026 gt mail inbox\n📬 Inbox: mayor/ (1 messages, 1 unread)\n ● 🤝 HANDOFF: Swarm session complete...\n```\n\nExpected: Should show beads/witness inbox\n\nLikely cause: The cwd-based identity resolution isn't recognizing witness/refinery as valid mail identities, so it falls back to Mayor.","status":"hooked","priority":2,"issue_type":"bug","assignee":"gastown/polecats/nux","created_at":"2025-12-23T20:29:58.817388-08:00","updated_at":"2025-12-29T23:31:37.658334-08:00"}
{"id":"gt-od1g","title":"Mail inbox from witness/refinery dirs shows Mayor inbox","description":"When running `gt mail inbox` from the witness or refinery directories, it shows the Mayor's inbox instead of the agent's own inbox.\n\nReproduction:\n```\n$ cd ~/gt/beads/witness \u0026\u0026 gt mail inbox\n📬 Inbox: mayor/ (1 messages, 1 unread)\n ● 🤝 HANDOFF: Swarm session complete...\n```\n\nExpected: Should show beads/witness inbox\n\nLikely cause: The cwd-based identity resolution isn't recognizing witness/refinery as valid mail identities, so it falls back to Mayor.","status":"in_progress","priority":2,"issue_type":"bug","assignee":"gastown/polecats/nux","created_at":"2025-12-23T20:29:58.817388-08:00","updated_at":"2025-12-29T23:33:37.233994-08:00"}
{"id":"gt-odfr","title":"Add WaitsFor parsing to molecule steps","description":"Add WaitsFor field to MoleculeStep struct and parse 'WaitsFor: all-children' (and future variants) from molecule descriptions.\n\nThis enables:\n- mol progress to understand fanout patterns\n- Validation that WaitsFor references valid constructs\n- Future automated orchestration\n\nImplementation:\n1. Add WaitsFor []string to MoleculeStep struct\n2. Add waitsForLineRegex to parse 'WaitsFor: ...' lines\n3. Update ParseMoleculeSteps to extract WaitsFor\n4. Update tests","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T21:35:55.004767-08:00","updated_at":"2025-12-27T21:29:52.836996-08:00","deleted_at":"2025-12-27T21:29:52.836996-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-odvf","title":"Document bd mol bond/squash/burn CLI","description":"Create CLI reference documentation for molecule commands:\n\n## bd mol bond\n\nInstantiate a proto into a runnable molecule.\n\n```bash\nbd mol bond \u003cproto-id\u003e [--wisp] [--assignee=\u003caddr\u003e]\n```\n\n- Default: creates a Mol (durable, in main beads)\n- --wisp: creates a Wisp (ephemeral, in .beads-ephemeral/)\n- --assignee: who will execute this molecule\n\n## bd mol squash\n\nComplete a molecule and generate digest.\n\n```bash\nbd mol squash \u003cmol-id\u003e --summary='...'\n```\n\n- For Mol: creates digest in git history\n- For Wisp: evaporates (no permanent record)\n- --summary: required summary of what was accomplished\n\n## bd mol burn\n\nAbandon a molecule without completing.\n\n```bash\nbd mol burn \u003cmol-id\u003e [--reason='...']\n```\n\n- Discards molecule state\n- No digest created\n- Use when molecule is no longer needed","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T16:33:06.462105-08:00","updated_at":"2025-12-27T21:29:56.537382-08:00","dependencies":[{"issue_id":"gt-odvf","depends_on_id":"gt-62hm","type":"blocks","created_at":"2025-12-21T16:33:17.530156-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.537382-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-odvr","title":"Merge: gt-r6td","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-r6td\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T22:54:01.000047-08:00","updated_at":"2025-12-27T21:27:22.543258-08:00","deleted_at":"2025-12-27T21:27:22.543258-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
@@ -1731,7 +1711,7 @@
{"id":"gt-op78","title":"Session cycling: Auto-spawn successor when context full","description":"Enable automatic session succession for crew workers.\n\nWhen a crew worker's context fills up (\u003e80%), they should:\n1. Write handoff mail to themselves\n2. Signal session end\n3. System auto-spawns successor session\n4. Successor reads handoff, finds attached work, auto-continues\n\nThis completes the autonomous overnight work pattern from gt-9g82.\n\nDepends on:\n- Detecting context fullness (Claude Code API?)\n- Session spawning mechanism (tmux/daemon)\n- Handoff protocol already implemented","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-22T16:18:27.570996-08:00","updated_at":"2025-12-22T16:18:27.570996-08:00"}
{"id":"gt-opzm4","title":"ZFC #9: Explicit MR registration instead of branch parsing","description":"**ZFC Violation:** internal/refinery/manager.go:346-370\n\nGo infers work metadata from branch naming conventions:\n```go\npattern := regexp.MustCompile(`^polecat/([^/]+)(?:/(.+))?$`)\nworker := matches[1]\nissueID = matches[2]\n```\n\n**ZFC-compliant solution:**\nPolecats register MRs with explicit structured data:\n- `gt mq submit --worker=nux --issue=gt-xyz --branch=polecat/nux/gt-xyz`\n- Creates MR bead with explicit fields\n- No regex parsing of branch names\n\n**Benefits:**\n- Work metadata is explicit, not inferred\n- Branch naming can evolve without breaking refinery\n- Audit trail in beads\n\nReference: ~/gt/docs/zfc-violations-audit.md #9","status":"hooked","priority":2,"issue_type":"task","created_at":"2025-12-27T21:32:24.951818-08:00","created_by":"mayor","updated_at":"2025-12-28T16:31:13.189559-08:00","dependencies":[{"issue_id":"gt-opzm4","depends_on_id":"gt-7uhts","type":"blocks","created_at":"2025-12-27T21:32:42.178027-08:00","created_by":"daemon"}]}
{"id":"gt-oqzf","title":"Digest: mol-deacon-patrol","description":"Patrol #15: 3/4 through","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:25:28.130003-08:00","updated_at":"2025-12-27T21:26:04.708812-08:00","deleted_at":"2025-12-27T21:26:04.708812-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-orr4q","title":"Merge: dementus-1767074970788","description":"branch: polecat/dementus-1767074970788\ntarget: main\nsource_issue: dementus-1767074970788\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:12:46.233617-08:00","created_by":"gastown/polecats/dementus","updated_at":"2025-12-29T22:12:46.233617-08:00"}
{"id":"gt-orr4q","title":"Merge: dementus-1767074970788","description":"branch: polecat/dementus-1767074970788\ntarget: main\nsource_issue: dementus-1767074970788\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:12:46.233617-08:00","created_by":"gastown/polecats/dementus","updated_at":"2025-12-29T23:32:37.235882-08:00","closed_at":"2025-12-29T23:32:37.235882-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-osdmr","title":"Digest: mol-deacon-patrol","description":"Patrol 20: all healthy, handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:13:10.580733-08:00","updated_at":"2025-12-27T23:13:10.580733-08:00","closed_at":"2025-12-27T23:13:10.5807-08:00","dependencies":[{"issue_id":"gt-osdmr","depends_on_id":"gt-eph-w0l","type":"parent-child","created_at":"2025-12-27T23:13:10.581564-08:00","created_by":"deacon"}]}
{"id":"gt-ouo","title":"gt swarm start: Does not spawn polecat sessions","description":"gt swarm start marks swarm as 'active' but doesn't start any polecat sessions.\n\nRepro:\n1. gt swarm create gastown --epic gt-hw6 --worker Toast --worker Nux\n2. gt swarm start gt-hw6\n3. gt session list - shows no new sessions\n\nExpected: Polecat sessions should start for each worker.\nActual: No sessions started, workers sit idle.","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-17T22:25:43.430981-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
{"id":"gt-ov2","title":"Refinery agent: merge queue processing loop","description":"The Refinery agent processes the merge queue, merging polecat work to main.\n\n## Interface\n\n```go\ntype Refinery struct {\n rig *Rig\n queue *MergeQueue\n git *Git\n mail *Mailbox\n config RefineryConfig\n}\n\ntype RefineryConfig struct {\n AutoMerge bool // Auto-merge passing MRs\n RunTests bool // Run tests before merge\n TestCommand string // Command to run tests\n RequireReview bool // Require review before merge (future)\n}\n\nfunc NewRefinery(rig *Rig, ...) *Refinery\n\n// Lifecycle\nfunc (r *Refinery) Start() error\nfunc (r *Refinery) Stop() error\nfunc (r *Refinery) IsRunning() bool\n\n// Processing\nfunc (r *Refinery) ProcessQueue() error\nfunc (r *Refinery) ProcessMR(mr *MergeRequest) error\n```\n\n## Processing Loop\n\n1. Check queue for pending MRs\n2. For each pending MR:\n a. Fetch polecat branch\n b. Attempt merge to refinery/rig (local main)\n c. Run tests if configured\n d. If pass: push to origin, mark merged\n e. If fail: mark rejected, notify polecat\n3. Sleep, repeat\n\n## Merge Strategy\n\n- Fast-forward when possible\n- Merge commit when not\n- On conflict: reject MR, polecat must rebase\n\n## Test Integration\n\nIf tests configured:\n```bash\ncd refinery/rig\ngit merge polecat/branch\n\u003ctest_command\u003e # e.g., go test ./...\n```\nResult determines merge/reject.\n\n## Notifications\n\nOn merge success:\n- Mail to polecat: \"Your work merged\"\n- Update bead if issue tracked\n\nOn merge failure:\n- Mail to polecat: \"Merge failed: \u003creason\u003e\"\n- Include conflict details if applicable\n\n## Dependencies\n\nNeeds: Rig management, Git wrapper, Mail system, Merge queue","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-15T23:22:08.498771-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-ov2","depends_on_id":"gt-u1j.14","type":"blocks","created_at":"2025-12-15T23:22:21.801826-08:00","created_by":"daemon"},{"issue_id":"gt-ov2","depends_on_id":"gt-u1j.6","type":"blocks","created_at":"2025-12-15T23:22:21.89716-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
@@ -1828,7 +1808,7 @@
{"id":"gt-qd7ri","title":"E2E Phase 2 observability test","description":"End-to-end test of Phase 2 observability:\n\nTest scenario:\n1. Sling work to polecat\n2. Watch gt feed for polecat activity\n3. Polecat completes, signals done\n4. Watch gt feed for MQ events (merge_started, merged)\n5. gt status shows queue depth changes\n6. Swarm status visible in gt swarm status\n\nAll observable without checking .runtime/*.json files.\n\nSuccess = glass cockpit is lit.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T21:40:54.57062-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-28T21:40:54.57062-08:00","dependencies":[{"issue_id":"gt-qd7ri","depends_on_id":"gt-lak31","type":"blocks","created_at":"2025-12-28T21:41:11.735996-08:00","created_by":"daemon"},{"issue_id":"gt-qd7ri","depends_on_id":"gt-rbncw","type":"blocks","created_at":"2025-12-28T21:41:11.76734-08:00","created_by":"daemon"},{"issue_id":"gt-qd7ri","depends_on_id":"gt-tvwnz","type":"blocks","created_at":"2025-12-28T21:41:11.797211-08:00","created_by":"daemon"}]}
{"id":"gt-qd9p0","title":"Swarm doesn't track dynamically added workers","description":"When creating a swarm with --worker flags and then adding more polecats later, the swarm status only shows the original workers.\n\nSteps to reproduce:\n1. gt swarm create gastown --epic gt-i26df --worker slit --worker rictus --start\n2. Add more polecats: gt polecat add gastown capable\n3. gt sling gt-xxx gastown/capable\n4. gt swarm status gt-i26df -\u003e only shows slit, rictus\n\nExpected: Swarm tracks all workers that are working on swarm tasks.\nActual: Only original workers shown.","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/dementus","created_at":"2025-12-28T16:31:52.419095-08:00","created_by":"mayor","updated_at":"2025-12-29T21:56:35.820602-08:00","closed_at":"2025-12-29T21:56:35.820602-08:00","close_reason":"Fixed JSON field name (dependencies-\u003edependents) and added Assignee field extraction in loadTasksFromBeads()"}
{"id":"gt-qdnmm","title":"Digest: mol-deacon-patrol","description":"Patrol 9: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:43:53.751357-08:00","updated_at":"2025-12-27T21:26:03.214415-08:00","deleted_at":"2025-12-27T21:26:03.214415-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-qdq50","title":"Merge: furiosa-1767075886199","description":"branch: polecat/furiosa-1767075886199\ntarget: main\nsource_issue: furiosa-1767075886199\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:28:03.264371-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-29T22:28:03.264371-08:00"}
{"id":"gt-qdq50","title":"Merge: furiosa-1767075886199","description":"branch: polecat/furiosa-1767075886199\ntarget: main\nsource_issue: furiosa-1767075886199\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:28:03.264371-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-29T23:32:37.191575-08:00","closed_at":"2025-12-29T23:32:37.191575-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-qe9w","title":"Simplify and reorganize molecular chemistry docs","description":"The Gas Town molecular chemistry docs (molecules.md, molecular-chemistry.md, molecule-algebra.md) are too dramatic and verbose. They need a simplification pass to be more reference-manual style.\n\n**Current problems:**\n1. Too much metaphor and philosophy, not enough practical reference\n2. Start with the chemistry abstraction instead of what users care about (patrols, workflows)\n3. Layer cake is presented top-down (formulas → protos → molecules) instead of bottom-up (issues → dependencies → execution)\n\n**Proposed structure (inverted pyramid):**\n\n1. **Start with execution semantics:**\n - Work = issues with dependencies\n - Dependencies control execution (blocks = sequential, no dep = parallel)\n - Agents traverse dependency graphs until blocked\n - Multi-day workflows via compound bonding\n\n2. **Move to molecules:**\n - Molecules are just epics with workflow intent\n - Bonding = creating dependencies between work graphs\n - No protos required for ad-hoc workflows\n\n3. **Then templates (protos/wisps):**\n - Phase metaphor for storage locations\n - pour/wisp/squash/burn operations\n - When to use each phase\n\n4. **Finally formulas (for advanced users):**\n - YAML compile-time composition\n - extends, compose, aspects\n - Only needed for complex reusable patterns\n\n**Style guidelines:**\n- Reference manual with quick examples\n- Written like agent priming (context they need to execute)\n- Less dramatic, more straightforward\n- TL;DR at top of each doc\n\n**See also:**\n- beads/docs/MOLECULES.md has a simplified version to use as template\n- The execution model section explains multi-day traversal clearly","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T19:51:42.43826-08:00","updated_at":"2025-12-24T19:51:42.43826-08:00","dependencies":[{"issue_id":"gt-qe9w","depends_on_id":"gt-e0qj2","type":"blocks","created_at":"2025-12-26T23:21:29.277397-08:00","created_by":"daemon"}]}
{"id":"gt-qgbe","title":"Digest: mol-deacon-patrol","description":"Patrol 3: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:55:49.186887-08:00","updated_at":"2025-12-27T21:26:05.005406-08:00","deleted_at":"2025-12-27T21:26:05.005406-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-qh2","title":"Session cycling UX: smooth transitions via TUI wrapper","description":"## Problem\n\nCurrent CLI agent session cycling is painful:\n- Shell → CC starts → priming → context loads → ready → work → exit/crash → repeat\n- Each cycle is 30-60 seconds of cold boot\n- No continuity between shell and agent's inner state\n- Raw \"session not running, starting...\" loop is the baseline\n\n## GGT Advantages (already have)\n\n- Beads: Work state survives session death completely\n- Mail: Handoff notes from past-self to future-self \n- Prime commands: Structured context reload\n\n## Gap: Transition Mechanics\n\nIdeas to explore when actively using CLI:\n\n1. **In-band cycling** - `/restart` or `/cycle` command, agent handles own restart without dropping to shell\n\n2. **Hot standby** - TUI maintains pre-warmed session in background, switch to already-primed agent\n\n3. **Persistent wrapper** - Bubbletea TUI stays running across session cycles, CC sessions come/go inside it\n\n4. **Session pooling** - Keep 2-3 primed sessions ready, never wait for cold start\n\n## Deferred\n\nDeliberately P4 until we're actively using the simpler CLI and feel the pain firsthand.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-15T20:38:12.660716-08:00","updated_at":"2025-12-15T23:17:34.27061-08:00"}
@@ -2026,7 +2006,7 @@
{"id":"gt-tgy1v","title":"@group dynamic resolution in mail router","description":"## @group Dynamic Resolution in Mail Router\n\nWire agent bead queries into mail router for @group addresses.\n\n## Updated Approach (post agent-as-bead + Dogs)\n\nAgent discovery uses bead queries:\n\n```bash\nbd list --type=agent --rig=gastown # All agents in rig\nbd list --type=agent --role_type=witness # All witnesses\nbd list --type=agent --role_type=dog # All dogs\n```\n\n## Supported Patterns\n\n| Pattern | Resolution | Scope |\n|---------|------------|-------|\n| `@rig/gastown` | `--rig=gastown` | All gastown agents |\n| `@town` | `--rig=\"\"` (no filter) | All town-level agents |\n| `@witnesses` | `--role_type=witness` | All witnesses across rigs |\n| `@crew/gastown` | `--role_type=crew --rig=gastown` | Gastown crew |\n| `@dogs` | `--role_type=dog` | All Deacon dogs |\n| `@overseer` | Special case (not bead query) | Human operator |\n\n## Deliverables\n\n1. Parse @group syntax in router\n2. Resolve via `bd list --type=agent` queries\n3. Fan-out at send time (N copies, one per recipient)\n4. Special handling for `@overseer` (single recipient, uses overseer.json)\n\n## @overseer Special Case\n\nThe overseer is the human operator - NOT an agent bead. Resolution:\n- Load `mayor/overseer.json`\n- Use `overseer/` as recipient address\n- No bead query needed\n\n## Dependencies\n- Agent bead schema (gt-ikyo1) ✅ closed\n- Dog agent beads need role_type=dog (new prereq)\n\n## Acceptance\n- @rig/gastown sends to all gastown agents\n- @dogs sends to all Deacon dogs\n- @overseer sends to human operator\n- Each recipient gets own message copy","notes":"Beads dependency: bd-jsk7 (Agent beads: structured labels for filtering)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-26T14:52:04.244948-08:00","updated_at":"2025-12-29T20:49:48.563354-08:00","dependencies":[{"issue_id":"gt-tgy1v","depends_on_id":"gt-xo05b","type":"blocks","created_at":"2025-12-26T14:53:03.081856-08:00","created_by":"daemon"},{"issue_id":"gt-tgy1v","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T22:16:18.444503-08:00","created_by":"daemon"},{"issue_id":"gt-tgy1v","depends_on_id":"gt-qha0g","type":"blocks","created_at":"2025-12-29T19:57:46.720308-08:00","created_by":"daemon"}]}
{"id":"gt-th7","title":"Add agent abstraction layer to support non-Claude agents","description":"Currently Gas Town hardcodes 'claude --dangerously-skip-permissions' throughout the codebase for spawning agents. We should add an abstraction layer to support other AI agents (e.g., Gemini CLI, OpenAI agents, local models).\n\nLocations that spawn Claude:\n- internal/cmd/mayor.go:131\n- internal/cmd/deacon.go:150 \n- internal/cmd/witness.go:280\n- internal/cmd/crew.go (multiple locations)\n- internal/cmd/up.go:190, 229\n- internal/session/manager.go:146\n- internal/refinery/manager.go:207\n\nSuggested approach:\n1. Create an agent package with an interface\n2. Add configuration for agent type in town/rig config\n3. Replace hardcoded claude commands with agent.Spawn() calls\n4. Support agents: claude, gemini, openai, local (ollama, etc.)","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-20T15:11:15.931048-08:00","updated_at":"2025-12-20T15:26:54.236995-08:00"}
{"id":"gt-tj1k","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:45","description":"Patrol 10: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:45:36.775542-08:00","updated_at":"2025-12-27T21:26:05.104028-08:00","deleted_at":"2025-12-27T21:26:05.104028-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-tjy9r","title":"Merge: capable-1767074974673","description":"branch: polecat/capable-1767074974673\ntarget: main\nsource_issue: capable-1767074974673\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:12:26.130677-08:00","created_by":"gastown/polecats/capable","updated_at":"2025-12-29T22:12:26.130677-08:00"}
{"id":"gt-tjy9r","title":"Merge: capable-1767074974673","description":"branch: polecat/capable-1767074974673\ntarget: main\nsource_issue: capable-1767074974673\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:12:26.130677-08:00","created_by":"gastown/polecats/capable","updated_at":"2025-12-29T23:32:37.244573-08:00","closed_at":"2025-12-29T23:32:37.244573-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-tkbd5","title":"Refactor runStart into focused helper functions","description":"attached_args: Refactor runStart into focused helper functions\n\nBreak up the 126-line runStart function in start.go.\n\n## Files to modify\n- internal/cmd/start.go\n\n## Current structure (lines 129-255)\nrunStart does:\n1. Crew path detection\n2. Workspace verification\n3. Mayor session start\n4. Deacon session start\n5. Optional rig agent startup\n6. Configured crew auto-start\n\n## Refactoring plan\nExtract these helpers:\n```go\nfunc startMayorSession(townRoot string, verbose bool) error\nfunc startDeaconSession(townRoot string) error\nfunc startRigAgents(townRoot string, rigs []string) error\nfunc startConfiguredCrew(townRoot string, config *TownConfig) error\n```\n\n## Acceptance criteria\n- [ ] runStart reduced to \u003c50 lines\n- [ ] 4 helper functions extracted\n- [ ] Each helper is \u003c40 lines\n- [ ] No change in behavior\n- [ ] go test ./internal/cmd/... passes\n- [ ] Manual test: gt start works correctly","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T15:49:13.889957-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T16:35:53.275529-08:00","closed_at":"2025-12-28T16:35:53.275529-08:00"}
{"id":"gt-tl54","title":"MR: gt-test (main)","description":"branch: main\ntarget: main\nsource_issue: gt-test","status":"tombstone","priority":3,"issue_type":"merge-request","created_at":"2025-12-18T20:16:41.125975-08:00","updated_at":"2025-12-27T21:27:23.006168-08:00","deleted_at":"2025-12-27T21:27:23.006168-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
{"id":"gt-tmm","title":"Polecat beads not synced with rig beads","description":"When gt spawn assigns an issue to a polecat, the polecat cannot find the issue because:\n\n1. Rig beads at /gt/gastown/.beads contains gt-th7\n2. Polecat beads at /gt/gastown/polecats/dementus/.beads does NOT have gt-th7\n3. bd sync in polecat dir pulls from beads-sync branch which doesn't have the new issue\n4. Rig bd sync uses 'main' branch, causing a branch mismatch\n\nThe polecat gets a work assignment for an issue it literally cannot see.\n\n## Root Cause\n\n- Rig beads and polecat beads are separate git-tracked copies\n- No mechanism to propagate newly created issues from rig to polecats before assignment\n- Sync branch configuration mismatch between rig and polecats\n\n## Fix Options\n\n1. gt spawn should sync rig beads before assigning work\n2. gt spawn should sync polecat beads after assignment\n3. Use shared beads (symlink or same DB) instead of copies\n4. Push new issues immediately on create","notes":"Note: This sync mismatch is resolved by gt-9nf (fresh polecats). Rather than fixing sync between stale clones, we'll always create fresh worktrees. This issue documents the root cause for posterity.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-20T15:17:10.158624-08:00","updated_at":"2025-12-27T21:29:53.744537-08:00","deleted_at":"2025-12-27T21:29:53.744537-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"}
@@ -2046,7 +2026,7 @@
{"id":"gt-tnss","title":"Analysis: Beads database size and hygiene strategy","description":"Audit beads database size and plan medium-term hygiene.\n\n## Questions\n1. How many issues total (including tombstones)?\n2. Size of issues.jsonl?\n3. Growth rate per day/week?\n4. What percentage are tombstones?\n\n## Hygiene Topics\n- Compaction: squash tombstones periodically\n- Archival: move old closed issues to archive file\n- Pruning: delete truly stale items (test beads, old MRs)\n- Sync efficiency: large JSONL = slow sync\n\n## Action Items\n- [ ] Count total issues by status\n- [ ] Count tombstones\n- [ ] Measure file sizes\n- [ ] Propose hygiene schedule","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T14:38:32.92481-08:00","updated_at":"2025-12-23T14:38:32.92481-08:00"}
{"id":"gt-tnw","title":"MCP beads tools fail from polecat directories","description":"The beads MCP plugin (plugin:beads:beads) fails to find issues when invoked from polecat directories.\n\n## Observed\n- Polecat in /gt/gastown/polecats/dementus\n- MCP tool: plugin:beads:beads - show (issue_id: 'gt-th7')\n- Error: 'bd command failed: Error: no issue found matching gt-th7'\n\n## Expected\nMCP tools should work the same as running bd directly.\n\n## Note\nThis may be related to gt-tmm (beads sync issue) rather than an MCP-specific bug. The MCP tool uses bd under the hood, and bd can't find the issue because the polecat's beads database is stale.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-20T15:17:33.135931-08:00","updated_at":"2025-12-20T15:17:33.135931-08:00"}
{"id":"gt-tocb","title":"gt handoff should accept full session paths like gastown/crew/max","description":"Currently gt handoff only accepts role shortcuts like 'crew', 'witness', etc. and tries to auto-detect the rig/name from environment. User tried 'gt handoff gastown/crew/max' and got 'unknown session type'. Should parse paths like '\u003crig\u003e/crew/\u003cname\u003e' or '\u003crig\u003e/\u003crole\u003e' directly into session names like 'gt-\u003crig\u003e-crew-\u003cname\u003e'.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-23T13:20:29.471194-08:00","updated_at":"2025-12-27T21:29:55.976969-08:00","deleted_at":"2025-12-27T21:29:55.976969-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"}
{"id":"gt-tpq7i","title":"Merge: keeper-1767074342207","description":"branch: polecat/keeper-1767074342207\ntarget: main\nsource_issue: keeper-1767074342207\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:04:26.232527-08:00","created_by":"gastown/polecats/keeper","updated_at":"2025-12-29T22:04:26.232527-08:00"}
{"id":"gt-tpq7i","title":"Merge: keeper-1767074342207","description":"branch: polecat/keeper-1767074342207\ntarget: main\nsource_issue: keeper-1767074342207\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:04:26.232527-08:00","created_by":"gastown/polecats/keeper","updated_at":"2025-12-29T23:32:37.253573-08:00","closed_at":"2025-12-29T23:32:37.253573-08:00","close_reason":"Branch no longer exists on remote - already merged or cleaned up"}
{"id":"gt-tr0a","title":"Build rig/worker tree view component","description":"Bubbletea component showing hierarchical rig list with workers. Each rig expandable to show workers. Each worker shows: status indicator, current molecule title, step progress (X/Y), time since last activity.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:27:11.129093-08:00","updated_at":"2025-12-23T16:27:11.129093-08:00","dependencies":[{"issue_id":"gt-tr0a","depends_on_id":"gt-3p77","type":"blocks","created_at":"2025-12-23T16:27:38.55401-08:00","created_by":"daemon"},{"issue_id":"gt-tr0a","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:30.771619-08:00","created_by":"daemon"}]}
{"id":"gt-tr3d","title":"Zombie session detection for refinery/witness","description":"A Claude session can crash or hang while still appearing as 'running' in tmux. The current IsRunning checks only verify tmux session exists, not that Claude is actually processing.\n\n## Problem\n- Refinery session might be hung (Claude crashed, infinite loop, etc.)\n- tmux HasSession returns true, so auto-start doesn't trigger\n- MRs pile up with no processing\n\n## Solution Options\n1. **Activity-based detection**: Check last output timestamp in tmux\n2. **Heartbeat file**: Agents write timestamp to file, check staleness\n3. **Prompt detection**: Look for Claude '\u003e' prompt indicating idle/stuck\n\n## Related\n- gt-bjft (spawn auto-start) assumes IsRunning means healthy\n- Witness patrol assumes running refinery is processing","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T01:02:51.089112-08:00","updated_at":"2025-12-23T14:27:08.051538-08:00","dependencies":[{"issue_id":"gt-tr3d","depends_on_id":"gt-bjft","type":"blocks","created_at":"2025-12-23T01:03:12.10595-08:00","created_by":"daemon"}]}
{"id":"gt-trym0","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:15:33.591974-08:00","updated_at":"2025-12-25T10:15:33.591974-08:00","closed_at":"2025-12-25T10:15:33.591943-08:00"}