diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 717eec83..bde01c4f 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -5,6 +5,7 @@ {"id":"gt-01u","title":"Design: Collapse mail into beads","description":"## Proposal\n\nReplace the separate mail system (JSONL inboxes) with beads issues using a naming convention.\n\n## Rationale\n\nIf all state should be in beads (work items, swarm state, dependencies), why have a separate system for messages? Mail is just:\n- Handoffs (agent → self)\n- Commands (Mayor → Refinery)\n- Escalations (Witness → Mayor)\n\nThese can all be beads issues with a special prefix.\n\n## Design\n\n### Convention\n- Messages use `@-` prefix: `@-witness-1734012345`\n- Assignee = recipient\n- Status: open = unread, closed = read/acknowledged\n- Priority 0 = urgent\n\n### Commands (thin wrappers)\n```bash\ngt mail send witness -s \"Subject\" -m \"Body\"\n → bd create --prefix=@ --title=\"Subject\" --assignee=witness --description=\"Body\"\n\ngt mail inbox\n → bd list --prefix=@ --assignee=$(gt whoami) --status=open\n\ngt mail read @-abc\n → bd show @-abc \u0026\u0026 bd close @-abc\n```\n\n### Notification\nDaemon watches for new `@-` issues and pokes relevant sessions.\nOr: agents poll on heartbeat (simpler).\n\n## What We Remove\n- `mail/inbox.jsonl` files\n- Mail JSONL read/write code\n- Separate delivery mechanism\n\n## What We Keep\n- `gt mail` CLI (as wrapper)\n- Handoff semantics\n- Notification (via daemon or polling)\n\n## Benefits\n- One system, one sync, one query interface\n- All communication in git history\n- Simpler architecture\n\n## Risks\n- Beads prefix filtering must be efficient\n- Namespace collision with user prefixes\n- Performance for high-frequency messages (probably fine for handoffs)\n\n## Decision Point\nDo we need first-class mail support in beads (`bd mail` commands) or is convention sufficient?","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T02:10:18.32879-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-02or","title":"Digest: mol-deacon-patrol","description":"Patrol 10: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:37:21.062369-08:00","updated_at":"2025-12-27T21:26:04.601701-08:00","deleted_at":"2025-12-27T21:26:04.601701-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-038es","title":"Digest: mol-deacon-patrol","description":"Patrol 2: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:35:42.688017-08:00","updated_at":"2025-12-26T18:35:42.688017-08:00","closed_at":"2025-12-26T18:35:42.687972-08:00"} +{"id":"gt-03lbg","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T20:00:06.469283-08:00","updated_at":"2025-12-27T21:26:00.669501-08:00","deleted_at":"2025-12-27T21:26:00.669501-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-03rb","title":"Merge: gt-xw7b","description":"branch: polecat/morsov\ntarget: main\nsource_issue: gt-xw7b\nrig: gastown","status":"tombstone","priority":4,"issue_type":"merge-request","created_at":"2025-12-21T16:43:54.909633-08:00","updated_at":"2025-12-27T21:27:23.014757-08:00","deleted_at":"2025-12-27T21:27:23.014757-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-04cfe","title":"Digest: mol-deacon-patrol","description":"Patrol 9: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:21:44.500513-08:00","updated_at":"2025-12-27T21:26:00.157627-08:00","deleted_at":"2025-12-27T21:26:00.157627-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-050ob","title":"Merge: capable-1767081117001","description":"branch: polecat/capable-1767081117001\ntarget: main\nsource_issue: capable-1767081117001\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T00:08:10.157148-08:00","created_by":"gastown/polecats/capable","updated_at":"2025-12-30T01:01:04.311234-08:00","closed_at":"2025-12-30T01:01:04.311234-08:00","close_reason":"Already merged to main"} @@ -46,6 +47,7 @@ {"id":"gt-0skyg","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize.\nThe spawn command returns immediately without waiting. This step finds spawned\npolecats that are now ready and sends them a trigger to start working.\n\n```bash\n# For each rig with polecats\nfor rig in gastown beads; do\n gt polecats $rig\n # For each working polecat, check if Claude is ready\n # Use tmux capture-pane to look for \"\u003e \" prompt\ndone\n```\n\nFor each ready polecat that hasn't been triggered yet:\n1. Send \"Begin.\" to trigger UserPromptSubmit hook\n2. The hook injects mail, polecat sees its assignment\n3. Mark polecat as triggered in state\n\nUse WaitForClaudeReady from tmux package (polls for \"\u003e \" prompt).\nTimeout: 60 seconds per polecat. If not ready, try again next cycle.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.777565-08:00","updated_at":"2025-12-27T21:29:55.249011-08:00","dependencies":[{"issue_id":"gt-0skyg","depends_on_id":"gt-uru8z","type":"blocks","created_at":"2025-12-25T02:11:33.977731-08:00","created_by":"stevey"}],"deleted_at":"2025-12-27T21:29:55.249011-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-0ua3f","title":"Merge: capable-1767079826600","description":"branch: polecat/capable-1767079826600\ntarget: main\nsource_issue: capable-1767079826600\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:37:39.344583-08:00","created_by":"gastown/polecats/capable","updated_at":"2025-12-29T23:43:15.624256-08:00","closed_at":"2025-12-29T23:43:15.624256-08:00","close_reason":"Merged to main (f9e82098)"} {"id":"gt-0vu9e","title":"Add unit tests for internal/mrqueue package","description":"attached_args: mrqueue package tests\n\nAdd comprehensive tests for the merge request queue package.\n\n## Files to create\n- internal/mrqueue/mrqueue_test.go\n\n## Test cases to cover\n1. NewQueue creates queue directory\n2. Add() persists MR to queue\n3. Get() retrieves MR by ID\n4. List() returns all MRs\n5. Remove() deletes MR\n6. MR serialization/deserialization\n7. Queue handles concurrent access\n\n## Acceptance criteria\n- [ ] internal/mrqueue/mrqueue_test.go created\n- [ ] At least 6 test functions\n- [ ] Tests pass: go test ./internal/mrqueue/...\n- [ ] Coverage \u003e 70%","status":"hooked","priority":2,"issue_type":"task","created_at":"2025-12-28T15:49:12.750237-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T15:57:05.876953-08:00"} +{"id":"gt-0wpnf","title":"Digest: mol-deacon-patrol","description":"Patrol 17: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:56:45.271323-08:00","updated_at":"2025-12-28T15:56:45.271323-08:00","closed_at":"2025-12-28T15:56:45.271291-08:00"} {"id":"gt-0x5og","title":"Dogs: Deacon's Helper Workers","description":"## Overview\n\nDogs are reusable workers managed by the Deacon for infrastructure and cleanup tasks.\nThey parallel how Polecats serve the Witness, but at town level with cross-rig scope.\n\n## Key Concepts\n\n- **Dogs**: Deacon-managed, reusable, infrastructure/cleanup tasks\n- **Kennel**: Where dogs live (`deacon/dogs/`)\n- **Multi-rig worktrees**: Dogs have worktrees into multiple rigs for cross-rig work\n\n## Cats vs Dogs\n\n| Aspect | Polecats | Dogs |\n|--------|----------|------|\n| Manager | Witness | Deacon |\n| Scope | Per-rig | Town (cross-rig) |\n| Lifecycle | Ephemeral | Reusable |\n| Work | Features | Infrastructure |\n| Location | `\u003crig\u003e/polecats/` | `deacon/dogs/` |\n\n## Implementation\n\n### Phase 1: Dog Infrastructure\n- `gt dog add/remove/list/call/status` commands\n- Kennel directory structure (`~/gt/deacon/dogs/`)\n- Multi-rig worktree creation\n- Dog state tracking\n\n### Phase 2: Deacon Dispatch\n- Sling support for `deacon/dogs` target\n- Pool management (spawn/retire logic)\n- Completion mail handling\n\n### Phase 3: Infrastructure Formulas\n- mol-convoy-cleanup\n- mol-dep-propagate\n- mol-digest-generate\n\n### Phase 4: Deacon Refactor\n- Patrol becomes detect → dispatch\n- Heavy work moves to dog slings\n\n## Reference\n\n- docs/patrol-system-design.md#dogs-deacons-helper-workers\n- docs/PRIMING.md (Role Taxonomy)","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-29T19:34:00.808508-08:00","created_by":"mayor","updated_at":"2025-12-30T13:30:03.009683-08:00","closed_at":"2025-12-30T13:30:03.009683-08:00","close_reason":"All children complete"} {"id":"gt-0x5og.1","title":"gt dog add/remove/list/call/status CLI","description":"Dog management commands:\n- gt dog add \u003cname\u003e - Create dog in kennel with multi-rig worktrees\n- gt dog remove \u003cname\u003e - Retire dog, cleanup worktrees\n- gt dog list - Show the pack (all dogs with status)\n- gt dog call [name] - Wake idle dog(s)\n- gt dog status [name] - Show detailed dog state","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/furiosa","created_at":"2025-12-29T19:34:24.005184-08:00","created_by":"mayor","updated_at":"2025-12-30T10:41:57.247255-08:00","closed_at":"2025-12-30T10:41:57.247255-08:00","close_reason":"Implemented all gt dog CLI commands: add, remove, list, call, status","dependencies":[{"issue_id":"gt-0x5og.1","depends_on_id":"gt-0x5og","type":"parent-child","created_at":"2025-12-29T19:34:24.005762-08:00","created_by":"daemon"},{"issue_id":"gt-0x5og.1","depends_on_id":"gt-0x5og.2","type":"blocks","created_at":"2025-12-29T19:34:37.683244-08:00","created_by":"daemon"}]} {"id":"gt-0x5og.2","title":"Kennel directory structure and multi-rig worktrees","description":"Create kennel infrastructure:\n- ~/gt/deacon/dogs/\u003cname\u003e/ directory\n- Worktrees into each rig (gastown, beads, etc.)\n- .dog.json state file (idle/working, last-active, assigned-work)\n- Worktree refresh/cleanup logic","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/ace","created_at":"2025-12-29T19:34:25.403417-08:00","created_by":"mayor","updated_at":"2025-12-30T10:35:43.182328-08:00","closed_at":"2025-12-30T10:35:43.182328-08:00","close_reason":"Implemented internal/dog package with Manager, Dog struct, .dog.json schema, multi-rig worktrees, and refresh/cleanup logic","dependencies":[{"issue_id":"gt-0x5og.2","depends_on_id":"gt-0x5og","type":"parent-child","created_at":"2025-12-29T19:34:25.403973-08:00","created_by":"daemon"}]} @@ -58,7 +60,7 @@ {"id":"gt-0zefw","title":"Standardize error handling and warning output patterns","description":"Inconsistent patterns across codebase:\n\nError wrapping:\n- Some: fmt.Errorf(\"context: %w\", err) (good)\n- Some: return err (loses context)\n- Some: fmt.Errorf(\"message\", rigName) without wrapping original\n\nExit handling in Cobra commands:\n- Some use os.Exit(1) inside RunE (bad - loses error chain)\n- Some properly return errors\n\nWarning output styles:\n- fmt.Printf(\"%s Warning: ...\", style.Dim.Render(\"⚠\"))\n- fmt.Printf(\"Warning: %s\", ...)\n- fmt.Fprintf(os.Stderr, \"warning: ...\")\n\nSuggestion:\n1. Always wrap errors with %w\n2. Never call os.Exit() in RunE handlers\n3. Standardize on style.Warning.Render(\"Warning:\") pattern","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T15:43:18.89794-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T15:47:22.183478-08:00","closed_at":"2025-12-28T15:47:22.183478-08:00"} {"id":"gt-0zpdn","title":"Day 4.5: Test multi-step molecule lifecycle","description":"Integration test (UPDATED for self-managed handoffs):\n1. Sling work with molecule to polecat\n2. Polecat works through all steps (self-handoffs as context fills)\n3. Polecat calls gt done when work complete\n4. Witness verifies clean state and sends MERGE_READY to refinery\n5. Refinery merges branch\n6. Refinery sends MERGED to witness\n7. Witness calls gt polecat nuke for full cleanup\n8. Verify clean state (no worktree, no branch, agent bead closed)\n\n**VALIDATED**: rictus lifecycle worked end-to-end: gt done → witness → refinery → merged\n\nParent: gt-4a2qt","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:08.06509-08:00","created_by":"mayor","updated_at":"2025-12-28T16:12:02.015887-08:00","closed_at":"2025-12-28T16:12:02.015887-08:00","dependencies":[{"issue_id":"gt-0zpdn","depends_on_id":"gt-4a2qt","type":"parent-child","created_at":"2025-12-27T20:58:47.568249-08:00","created_by":"daemon"},{"issue_id":"gt-0zpdn","depends_on_id":"gt-zb0io","type":"blocks","created_at":"2025-12-27T20:58:56.884662-08:00","created_by":"daemon"},{"issue_id":"gt-0zpdn","depends_on_id":"gt-ztpe8","type":"blocks","created_at":"2025-12-27T20:58:57.915265-08:00","created_by":"daemon"}]} {"id":"gt-110m","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no lifecycle requests, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:05:14.439933-08:00","updated_at":"2025-12-27T21:26:04.507497-08:00","deleted_at":"2025-12-27T21:26:04.507497-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-11zdz","title":"Digest: mol-deacon-patrol","description":"Cycle 3: quiet patrol","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:08:45.744596-08:00","updated_at":"2025-12-28T13:08:45.744596-08:00","closed_at":"2025-12-28T13:08:45.744565-08:00","dependencies":[{"issue_id":"gt-11zdz","depends_on_id":"gt-eph-js7","type":"parent-child","created_at":"2025-12-28T13:08:45.745438-08:00","created_by":"deacon"}]} +{"id":"gt-11zdz","title":"Digest: mol-deacon-patrol","description":"Cycle 3: quiet patrol","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:08:45.744596-08:00","updated_at":"2025-12-28T13:08:45.744596-08:00","closed_at":"2025-12-28T13:08:45.744565-08:00"} {"id":"gt-14hd","title":"Work on ga-xxp: Define mol-polecat-work standard molecule...","description":"Work on ga-xxp: Define mol-polecat-work standard molecule. See bd show ga-xxp for full details.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T21:49:14.070072-08:00","updated_at":"2025-12-27T21:29:56.923963-08:00","deleted_at":"2025-12-27T21:29:56.923963-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-14w3x","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:36:04.72988-08:00","updated_at":"2025-12-27T21:26:02.494566-08:00","deleted_at":"2025-12-27T21:26:02.494566-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-15p32","title":"Digest: mol-deacon-patrol","description":"Patrol 15: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:12.609172-08:00","updated_at":"2025-12-27T21:26:03.181654-08:00","deleted_at":"2025-12-27T21:26:03.181654-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -75,7 +77,6 @@ {"id":"gt-1cuq","title":"Merge: gt-svi.1","description":"type: merge-request\nbranch: polecat/Max\ntarget: main\nsource_issue: gt-svi.1\nrig: gastown","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-18T20:15:31.738938-08:00","updated_at":"2025-12-27T21:29:45.553344-08:00","deleted_at":"2025-12-27T21:29:45.553344-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1dbcp","title":"Polecat auto-start: Claude doesn't process initial nudge","description":"After gt sling spawns a polecat, the 'Work slung' message is sent to tmux but Claude sits idle at the prompt. The SessionStart hook doesn't fire because no user input was received.\n\nObserved:\n- gt sling successfully spawns polecat, creates worktree, starts Claude\n- Sends 'Work slung: gt-xxx. Start working on it now...' to the pane\n- Claude shows idle prompt 'Try refactor...' and doesn't process the message\n\nExpected:\n- Polecat should auto-start working on the slung issue\n\nRoot cause hypothesis:\n- The nudge is sent as tmux send-keys which goes to the input line\n- Claude needs Enter to be pressed to submit the prompt\n- SessionStart hook only fires after first user message\n\nWorkaround:\n- Send extra Enter after the nudge message\n- Or use daemon's triggerPendingSpawns to send Enter after Claude is ready","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-27T18:31:34.71552-08:00","created_by":"mayor","updated_at":"2025-12-28T16:17:40.168164-08:00","closed_at":"2025-12-28T16:17:40.168164-08:00","dependencies":[{"issue_id":"gt-1dbcp","depends_on_id":"gt-j9ddg","type":"relates-to","created_at":"2025-12-27T20:59:11.65084-08:00","created_by":"daemon"},{"issue_id":"gt-1dbcp","depends_on_id":"gt-0zpdn","type":"blocks","created_at":"2025-12-27T21:21:26.458611-08:00","created_by":"daemon"}]} {"id":"gt-1dcji","title":"Digest: mol-deacon-patrol","description":"Patrol 3: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:36:31.299636-08:00","updated_at":"2025-12-27T21:26:00.921308-08:00","deleted_at":"2025-12-27T21:26:00.921308-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-1dm5","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-24T21:17:01.744663-08:00","updated_at":"2025-12-27T21:29:57.816902-08:00","deleted_at":"2025-12-27T21:29:57.816902-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1dvlx","title":"Digest: mol-deacon-patrol","description":"P6: stable, beads polecats exited","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:56:44.405885-08:00","updated_at":"2025-12-27T21:26:02.409194-08:00","deleted_at":"2025-12-27T21:26:02.409194-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1earc","title":"Digest: mol-deacon-patrol","description":"Patrol 3: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:35:00.204779-08:00","updated_at":"2025-12-27T21:26:02.179781-08:00","deleted_at":"2025-12-27T21:26:02.179781-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1elg","title":"Code review: handoff.go changes (gt-yt6g, gt-tocb)","description":"Review ~80 lines of Go changes to internal/cmd/handoff.go:\n\n## Commits to review\n- 1414081: Standardize session end with gt handoff (gt-yt6g)\n - Detect polecats via GT_POLECAT env var\n - Call gt done instead of respawning for polecats\n - +31/-11 lines\n\n- 9c85b83: Support full session paths in gt handoff (gt-tocb)\n - resolveRoleToSession accepts \u003crig\u003e/crew/\u003cname\u003e, \u003crig\u003e/witness, \u003crig\u003e/refinery\n - +46/-3 lines\n\n## Review focus\n- Error handling in path resolution\n- Edge cases in polecat detection\n- Test coverage needed?","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T14:27:40.605575-08:00","updated_at":"2025-12-23T14:27:40.605575-08:00"} @@ -85,7 +86,6 @@ {"id":"gt-1fl","title":"gt crew restart command","description":"Add a 'gt crew restart' command that kills the tmux session and restarts fresh. Useful when a crew member gets confused or needs a clean slate.\n\nShould:\n- Kill existing tmux session if running\n- Start fresh session with claude\n- Run gt prime to reinitialize context\n\nAlias: gt crew rs","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T19:47:32.131386-08:00","updated_at":"2025-12-27T21:29:57.261152-08:00","deleted_at":"2025-12-27T21:29:57.261152-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1fqwd","title":"Digest: mol-deacon-patrol","description":"Patrol 2 complete: all healthy, no issues","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:58:51.246552-08:00","updated_at":"2025-12-27T21:26:00.677765-08:00","deleted_at":"2025-12-27T21:26:00.677765-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1gbf","title":"Digest: mol-deacon-patrol","description":"Patrol #5: Routine - 6 sessions healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:22:06.354723-08:00","updated_at":"2025-12-27T21:26:04.793249-08:00","deleted_at":"2025-12-27T21:26:04.793249-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-1ge7t","title":"Digest: mol-deacon-patrol","description":"Patrol 18: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:36:05.552255-08:00","updated_at":"2025-12-29T22:36:05.552255-08:00","closed_at":"2025-12-29T22:36:05.552222-08:00","dependencies":[{"issue_id":"gt-1ge7t","depends_on_id":"gt-eph-rec","type":"parent-child","created_at":"2025-12-29T22:36:05.553175-08:00","created_by":"deacon"}]} {"id":"gt-1gy","title":"gt mail read: Support numeric indices for message ID","description":"Allow 'gt mail read 1' to read the first message in inbox.\n\nCurrent behavior requires full message ID like 'msg-abc123'.\nShould support:\n- Numeric index: 'gt mail read 1' reads first/newest message\n- Partial ID match: 'gt mail read abc' matches 'msg-abc123'\n\nThis is a UX improvement - agents frequently type 'gt mail read 1'.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:49:54.60582-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-1gy","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:22:47.658947-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-1i8r","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy - Mayor OK, 2 witnesses, 2 refineries, 0 polecats, 8 sessions, no callbacks","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:44:43.300311-08:00","updated_at":"2025-12-27T21:26:04.227139-08:00","deleted_at":"2025-12-27T21:26:04.227139-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-1itp5","title":"Digest: mol-deacon-patrol","description":"Cycle 8: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:16:19.37161-08:00","updated_at":"2025-12-28T13:16:19.37161-08:00","closed_at":"2025-12-28T13:16:19.371571-08:00"} @@ -97,7 +97,6 @@ {"id":"gt-1le","title":"town handoff command (optional)","description":"CLI commands for session handoff workflow (optional convenience).\n\n## Commands\n\n### gt handoff\nGenerate handoff interactively.\n```\ngt handoff [--send]\n```\n- Collects current state (status, inbox, beads)\n- Prompts for additional notes\n- --send: Mail to self and exit\n\n### gt resume\nCheck for and display pending handoff.\n```\ngt resume\n```\n- Checks inbox for handoff message\n- Displays formatted handoff if found\n- Suggests next actions\n\n## Implementation\n\nThese are convenience wrappers. The same workflow can be done manually:\n```bash\n# Manual handoff\ntown status \u003e /tmp/handoff\ntown inbox \u003e\u003e /tmp/handoff\nbd ready \u003e\u003e /tmp/handoff\n# Edit and send\ntown mail send mayor/ -s \"Session Handoff\" -f /tmp/handoff\n```\n\n## Priority\n\nP2 - Optional. Manual workflow works fine. Nice to have for UX.\n\n## Notes\n\nPart of session cycling workflow designed in [deleted:gt-u82].","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-15T20:15:31.954724-08:00","updated_at":"2025-12-25T02:16:08.528308-08:00","dependencies":[{"issue_id":"gt-1le","depends_on_id":"gt-u82","type":"blocks","created_at":"2025-12-15T20:15:39.647043-08:00","created_by":"daemon"}]} {"id":"gt-1lvog","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:37.102371-08:00","updated_at":"2025-12-28T11:22:37.102371-08:00","closed_at":"2025-12-28T11:22:37.102337-08:00"} {"id":"gt-1pelm","title":"Add unit tests for internal/mail router and mailbox","description":"attached_args: Add unit tests for mail router and mailbox\n\nAdd tests for mail routing and mailbox functionality.\n\n## Files to create\n- internal/mail/router_test.go\n- internal/mail/mailbox_test.go\n\n## Test cases for router\n1. Route() resolves addresses correctly\n2. Route() handles rig/role format\n3. Route() handles rig/crew/name format\n4. Invalid addresses return error\n\n## Test cases for mailbox\n1. Send() writes message to mailbox\n2. Inbox() lists messages\n3. Read() retrieves message by ID\n4. Delete() removes message\n5. Messages persist correctly\n\n## Acceptance criteria\n- [ ] router_test.go with 4+ tests\n- [ ] mailbox_test.go with 5+ tests\n- [ ] Tests pass: go test ./internal/mail/...\n- [ ] Coverage \u003e 60%","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:49:13.002918-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T16:10:00.287761-08:00","closed_at":"2025-12-28T16:10:00.287761-08:00"} -{"id":"gt-1pugw","title":"Digest: mol-deacon-patrol","description":"Patrol 17: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:35:53.948037-08:00","updated_at":"2025-12-29T22:35:53.948037-08:00","closed_at":"2025-12-29T22:35:53.948003-08:00","dependencies":[{"issue_id":"gt-1pugw","depends_on_id":"gt-eph-hzn","type":"parent-child","created_at":"2025-12-29T22:35:53.948936-08:00","created_by":"deacon"}]} {"id":"gt-1py3y","title":"Unify gt sling and gt spawn with --args support","description":"## Summary\n\nComplete the unification: `gt sling` becomes THE way to assign work. Remove top-level `gt spawn`.\n\n## Current State (Partially Done)\n\n- `gt sling` auto-spawns polecats when target is a rig\n- `gt sling --args` stores args in bead (no-tmux mode, gt-vc3l4)\n- `gt spawn` still exists with flags not yet in sling\n\n## Remaining Work\n\n### 1. Move spawn-only flags to sling\n\n| Flag | Current | Action |\n|------|---------|--------|\n| `--naked` | spawn only | Move to sling |\n| `--create` | spawn only | Move to sling |\n| `--molecule` | spawn only | Move to sling |\n| `--force` | spawn only | Move to sling |\n| `--account` | spawn only | Move to sling |\n| `--no-start` | spawn only | Evaluate if needed |\n\n### 2. Remove top-level gt spawn\n\n- Keep `gt spawn pending` as subcommand if still needed\n- Remove `gt spawn` from root commands\n- Update all docs and CLAUDE.md references\n\n### 3. Unified UX Design\n\nTarget resolution (smart defaults):\n```bash\ngt sling gt-abc # Self (current agent)\ngt sling gt-abc crew # Crew worker in current rig \ngt sling gt-abc gastown # Auto-spawn polecat in rig\ngt sling gt-abc gastown/Toast # Specific polecat\ngt sling gt-abc mayor # Mayor\n```\n\nKey flags:\n```bash\ngt sling gt-abc --args \"patch release\" # Natural language context\ngt sling gt-abc --naked # No-tmux mode (manual start)\ngt sling gt-abc --create # Create polecat if missing\ngt sling gt-abc --molecule mol-review # Use specific workflow\n```\n\n### 4. Update Witness/Refinery/Deacon\n\nThese agents currently use `gt spawn`. Update to use `gt sling`:\n- Witness: spawning polecats for work\n- Refinery: spawning merge workers \n- Deacon: any spawn logic\n\n## Acceptance Criteria\n\n- [ ] All spawn flags available in sling\n- [ ] `gt spawn` removed (or hidden/deprecated)\n- [ ] Witness uses `gt sling \u003crig\u003e` for polecat work\n- [ ] Docs updated\n- [ ] Both human and agent UX is clean","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-26T13:35:55.902844-08:00","updated_at":"2025-12-27T21:29:45.90011-08:00","deleted_at":"2025-12-27T21:29:45.90011-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-1qti","title":"Mayor restart loop: auto-prime and mail check on attach","description":"When mayor session cycles (after /exit, gt mayor attach reconnects), the new session lacks context.\n\n## Current Behavior\n- Mayor exits, shell script loop restarts claude\n- New session starts cold - no gt prime, no mail check\n- Mayor is disoriented, doesn't know prior context\n- Strong 'antimemetic properties' - we discuss fixing it, then forget\n\n## Expected Behavior\nAfter restart, mayor should automatically:\n1. Run gt prime (load role context)\n2. Check gt mail inbox (find handoff messages)\n3. Look for 🤝 HANDOFF messages from predecessor\n\n## Possible Fixes\n1. Startup hook in Claude Code settings that runs gt prime\n2. CLAUDE.md instructions that say 'FIRST THING: run gt prime'\n3. Shell script wrapper that injects context before attach\n4. Modify gt mayor attach to inject prime command\n\n## Related\n- gt-vci: Mayor handoff mail template\n- gt-sye: Mayor startup protocol prompting","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-19T14:44:43.188588-08:00","updated_at":"2025-12-27T21:29:54.025195-08:00","deleted_at":"2025-12-27T21:29:54.025195-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-1r6o6","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:48:31.845975-08:00","updated_at":"2025-12-26T17:48:31.845975-08:00","closed_at":"2025-12-26T17:48:31.845924-08:00"} @@ -160,13 +159,11 @@ {"id":"gt-2mut4","title":"Digest: mol-deacon-patrol","description":"P14","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:26:05.355961-08:00","updated_at":"2025-12-27T21:26:01.626427-08:00","deleted_at":"2025-12-27T21:26:01.626427-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-2n3f","title":"Merge conflicts: Buzzard/mq-status, Dementus/harness-docs","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-19T12:08:07.486349-08:00","updated_at":"2025-12-27T21:29:54.042016-08:00","deleted_at":"2025-12-27T21:29:54.042016-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-2n6z","title":"Inconsistent error wrapping patterns","description":"Error handling is inconsistent across the codebase:\n\n1. Some functions use fmt.Errorf with %w for wrapping, others don't\n2. return nil, nil patterns (40+ occurrences) sometimes represent 'not found' and sometimes 'error but continue' - should use sentinel errors\n3. Some places return nil for errors when they should propagate them\n\nExamples of nil,nil that might need review:\n- internal/git/git.go:272, 308\n- internal/crew/manager.go:227\n- internal/witness/manager.go:517, 523, 530, 775\n- internal/beads/beads.go:225, 492","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-21T21:35:25.451396-08:00","updated_at":"2025-12-27T21:29:57.891394-08:00","deleted_at":"2025-12-27T21:29:57.891394-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-2nzvi","title":"Digest: mol-deacon-patrol","description":"Routine patrol, town stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:25:38.756056-08:00","updated_at":"2025-12-28T19:25:38.756056-08:00","closed_at":"2025-12-28T19:25:38.756021-08:00"} {"id":"gt-2ocgh","title":"Code review swarm: recent merges","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-29T22:20:59.115974-08:00","created_by":"gastown/refinery","updated_at":"2025-12-30T10:07:36.956632-08:00","closed_at":"2025-12-30T10:07:36.956632-08:00","close_reason":"All code reviews completed"} {"id":"gt-2p2","title":"Test message","description":"Testing GGT mail integration","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-17T14:04:50.045948-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"} {"id":"gt-2r6dt","title":"Test: Polecat lifecycle validation (auto-close)","description":"Simple test task: Read this issue, print 'Lifecycle test passed', then close this issue with bd close. No code changes needed.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-27T18:28:10.052196-08:00","created_by":"mayor","updated_at":"2025-12-27T21:29:45.723582-08:00","deleted_at":"2025-12-27T21:29:45.723582-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-2rfvq","title":"list: static mailing list lookup","description":"Static mailing list support via config file.\n\n## Deliverables\n\n1. Load lists from ~/gt/config/lists.json\n2. Parse list:name syntax in router\n3. Fan-out at send time (same as @group)\n4. Error handling for unknown list names\n\n## Example\n```bash\ngt mail send list:oncall -s \"Alert\" -m \"System down\"\n# Expands to: mayor/, gastown/witness, beads/witness\n# Creates 3 message copies\n```\n\n## Dependencies\n- Config directory (gt-i6jvc)\n\n## Acceptance\n- list:oncall resolves to configured members\n- Each member gets own message copy\n- Unknown list returns clear error","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/morsov","created_at":"2025-12-26T14:52:05.784822-08:00","updated_at":"2025-12-30T06:55:16.140268-08:00","closed_at":"2025-12-30T06:55:16.140268-08:00","close_reason":"Implemented static mailing list support with list:name syntax","dependencies":[{"issue_id":"gt-2rfvq","depends_on_id":"gt-i6jvc","type":"blocks","created_at":"2025-12-26T14:53:05.44199-08:00","created_by":"daemon"}]} {"id":"gt-2sw","title":"Plugin surface for daemon lifecycle hooks","description":"Allow rigs to customize daemon behavior via hooks/plugins.\n\n## Hook Points\n\n- on_heartbeat: Called during daemon heartbeat cycle\n- on_worker_idle: Called when worker goes idle\n- on_worker_stuck: Called when stuck detection triggers\n- on_lifecycle_request: Called before processing lifecycle\n\n## Configuration\n\n```\n\u003crig\u003e/config/daemon-hooks.json\n{\n \"on_heartbeat\": \"./hooks/check-ci-status.sh\",\n \"on_worker_idle\": \"./hooks/maybe-assign-work.sh\",\n \"idle_threshold\": \"5m\",\n \"custom_signals\": [\n {\"name\": \"ci_status\", \"command\": \"./hooks/get-ci.sh\"}\n ]\n}\n```\n\n## Signal Contribution\n\nHooks can return signals that feed into decision engine:\n- SKIP_POKE: Don't poke this agent\n- FORCE_POKE: Override backoff, poke now\n- CUSTOM_DATA: Extra context for logging\n\n## Use Cases\n\n- Check CI status before interrupting test runs\n- Auto-assign work when worker becomes idle\n- Custom stuck detection for specific workflows","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-18T14:19:34.702624-08:00","updated_at":"2025-12-18T14:19:34.702624-08:00","dependencies":[{"issue_id":"gt-2sw","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T14:19:47.035848-08:00","created_by":"daemon"}]} -{"id":"gt-2tjy5","title":"Digest: mol-deacon-patrol","description":"Patrol 11: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:46:47.786158-08:00","updated_at":"2025-12-28T19:46:47.786158-08:00","closed_at":"2025-12-28T19:46:47.786122-08:00"} {"id":"gt-2tp","title":"init.go: Replace custom contains() with strings.Contains","status":"tombstone","priority":3,"issue_type":"bug","created_at":"2025-12-16T13:55:11.326407-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"} {"id":"gt-2tspu","title":"Merge: furiosa-dogs","description":"branch: polecat/furiosa-dogs\ntarget: main\nsource_issue: furiosa-dogs\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T10:42:17.456779-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-30T10:42:17.456779-08:00"} {"id":"gt-2uos6","title":"Digest: mol-deacon-patrol","description":"Patrol 4: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T17:17:09.139846-08:00","updated_at":"2025-12-26T17:17:09.139846-08:00","closed_at":"2025-12-26T17:17:09.139809-08:00"} @@ -218,7 +215,6 @@ {"id":"gt-3limt","title":"Digest: mol-deacon-patrol","description":"Patrol 5: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:04:35.041079-08:00","updated_at":"2025-12-27T21:26:03.429705-08:00","deleted_at":"2025-12-27T21:26:03.429705-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3lygr","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:50:46.338114-08:00","updated_at":"2025-12-27T21:26:04.140748-08:00","deleted_at":"2025-12-27T21:26:04.140748-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3ndj","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:44","description":"Patrol 7: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:44:48.99583-08:00","updated_at":"2025-12-27T21:26:05.129076-08:00","deleted_at":"2025-12-27T21:26:05.129076-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-3nlte","title":"Digest: mol-deacon-patrol","description":"Patrol 18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:57:27.343464-08:00","updated_at":"2025-12-26T14:57:27.343464-08:00","closed_at":"2025-12-26T14:57:27.343415-08:00"} {"id":"gt-3ns5","title":"Polecat template: clarify work status commands (bd list vs gt mol status)","description":"Template shows 'bd list --status=in_progress' for checking work, but polecats should probably use 'gt mol status' instead (or in addition). Clarify the right approach for polecats to check their current work assignment.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:46.909036-08:00","updated_at":"2025-12-27T21:29:55.93508-08:00","dependencies":[{"issue_id":"gt-3ns5","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.371341-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.93508-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-3oyn","title":"Blocked issues: gt-um6q, gt-lz13, gt-5xph depend on missing beads features","description":"Template/docs updates blocked on: bd-nurq (bd mol current), bd-29fb (bd close --continue). These gastown issues should be marked blocked on the beads issues once cross-rig deps work.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T00:19:12.532683-08:00","updated_at":"2025-12-23T00:19:12.532683-08:00"} {"id":"gt-3p77","title":"Implement gt watch command scaffold","description":"Basic bubbletea TUI scaffold for 'gt watch' command. Discovers rigs, connects to daemons, renders placeholder view. Foundation for the full activity feed TUI.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:27:09.800586-08:00","updated_at":"2025-12-23T16:27:09.800586-08:00","dependencies":[{"issue_id":"gt-3p77","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:30.683781-08:00","created_by":"daemon"}]} @@ -263,6 +259,7 @@ {"id":"gt-40k6","title":"Merge: gt-qz2l","description":"branch: polecat/dementus\ntarget: main\nsource_issue: gt-qz2l\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T19:39:31.550068-08:00","updated_at":"2025-12-27T21:27:22.393483-08:00","deleted_at":"2025-12-27T21:27:22.393483-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-412a9","title":"gt polecat status shows idle when hook_bead is set in agent bead","description":"gt polecat status gastown/furiosa shows State: idle, Issue: (none) but the agent bead gt-gastown-polecat-furiosa has hook_bead: gt-um6q and agent_state: running. The status command isn't reading hook_bead from the agent bead correctly.","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/rictus","created_at":"2025-12-30T00:11:28.049978-08:00","created_by":"mayor","updated_at":"2025-12-30T00:17:27.488239-08:00","closed_at":"2025-12-30T00:17:27.488239-08:00","close_reason":"Fixed in commit 275f3026: loadFromBeads now checks agent bead hook_bead field"} {"id":"gt-415l","title":"request-shutdown","description":"Send shutdown request to Witness.\nWait for termination.\n\nThe polecat is now ready to be cleaned up.\nDo not exit directly - wait for Witness to kill the session.\n\nDepends: generate-summary","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:56:18.535199-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} +{"id":"gt-41m3x","title":"Add -m flag to gt nudge command","description":"Currently gt nudge requires positional args: gt nudge \u003ctarget\u003e \u003cmessage\u003e\n\nAdd -m flag support for consistency with other commands:\n gt nudge beads/crew/emma -m \"Please do a handoff\"\n\nThe message should still work as positional arg for backwards compatibility.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-30T17:55:44.019048-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-30T17:55:44.019048-08:00"} {"id":"gt-439en","title":"Digest: mol-deacon-patrol","description":"Patrol 6: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:33:47.341888-08:00","updated_at":"2025-12-27T21:26:00.398533-08:00","deleted_at":"2025-12-27T21:26:00.398533-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-43pm","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:36:59.981391-08:00","updated_at":"2025-12-27T21:26:04.618196-08:00","deleted_at":"2025-12-27T21:26:04.618196-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-43qg","title":"Test: release command verification","notes":"Released: testing release command","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-19T16:15:30.845537-08:00","updated_at":"2025-12-27T21:29:57.916411-08:00","deleted_at":"2025-12-27T21:29:57.916411-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -327,7 +324,6 @@ {"id":"gt-4x1bi","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final cycle, all services healthy, handoff","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:53:50.12613-08:00","updated_at":"2025-12-27T21:26:01.9941-08:00","deleted_at":"2025-12-27T21:26:01.9941-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-4xas","title":"Merge fix/spawn-beads-path branch to main","description":"Branch has gt nudge command; main has notification deduplication. Both valuable.\n\nKey insight: Only ~10 commits diverged each way in mayor/rig.\n- Branch: 9509afa feat(nudge): Add gt nudge command (MISSING from main)\n- Main: d2fccd5 slot-based notification deduplication (KEEP)\n\nMerge plan:\n1. git merge fix/spawn-beads-path --no-ff\n2. Keep nudge.go from branch\n3. Keep notification.go from main\n4. Merge tmux.go (both NudgeSession AND SendKeysReplace)\n5. go build \u0026\u0026 go test\n6. Deploy to ~/.local/bin/gt","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-20T13:28:01.684557-08:00","updated_at":"2025-12-27T21:29:53.755388-08:00","deleted_at":"2025-12-27T21:29:53.755388-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-4xgth","title":"Digest: mol-deacon-patrol","description":"Patrol: fixed stale mol spawn prompts, cleaned 36 orphaned wisps, all agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T20:26:09.458718-08:00","updated_at":"2025-12-27T21:26:00.618512-08:00","deleted_at":"2025-12-27T21:26:00.618512-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-4xuea","title":"Digest: mol-deacon-patrol","description":"Patrol 16: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:10:43.514883-08:00","updated_at":"2025-12-27T23:10:43.514883-08:00","closed_at":"2025-12-27T23:10:43.514849-08:00"} {"id":"gt-4z54b","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:47:58.060935-08:00","updated_at":"2025-12-27T21:26:04.193847-08:00","deleted_at":"2025-12-27T21:26:04.193847-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-4z7j","title":"Test patrol queue feature","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-23T16:17:34.358185-08:00","updated_at":"2025-12-27T21:29:57.472767-08:00","deleted_at":"2025-12-27T21:29:57.472767-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-51ghh","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T08:21:00.943043-08:00","updated_at":"2025-12-28T08:21:00.943043-08:00","closed_at":"2025-12-28T08:21:00.94301-08:00"} @@ -404,6 +400,7 @@ {"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-5tipl","title":"convoy --notify flag doesn't actually notify","description":"The gt convoy create --notify flag is captured but only stored in description. No code sends notification on convoy completion.","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/nux","created_at":"2025-12-30T14:13:40.209653-08:00","created_by":"mayor","updated_at":"2025-12-30T16:51:29.864136-08:00","closed_at":"2025-12-30T16:51:29.864136-08:00","close_reason":"Implemented: notify address stored in slot, added gt convoy notify command"} +{"id":"gt-5tjz5","title":"Digest: mol-deacon-patrol","description":"Patrol 19: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:49:55.247311-08:00","updated_at":"2025-12-28T19:49:55.247311-08:00","closed_at":"2025-12-28T19:49:55.247279-08:00"} {"id":"gt-5tp","title":"Test message","description":"Testing GGT mail via beads","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-16T21:44:27.546781-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"message"} {"id":"gt-5uf3","title":"Patrol step: check parked molecules for unblock","description":"Add patrol step to Deacon for checking parked molecules:\n\n```yaml\n- step: check-parked-molecules\n action: |\n For each molecule with:\n - status: in_progress\n - assignee: null\n - has step with external: blocked_by\n Check if external deps are now satisfied.\n If yes: spawn polecat to resume the molecule.\n```\n\nThis automates the resume process - no manual intervention needed when\nupstream dependencies ship.\n\nPart of cross-project dependency system.\nSee: docs/cross-project-deps.md\n\nDepends on: gt-in3x (spawn --continue)\nPriority: P3 (future automation, not required for launch)","status":"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"} {"id":"gt-5v29","title":"Add 'wit' alias for witness command","description":"ref works as alias for refinery, but wit doesn't work for witness. Add Aliases: []string{\"wit\"} to witnessCmd.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-20T23:11:53.453692-08:00","updated_at":"2025-12-20T23:11:53.453692-08:00"} @@ -428,7 +425,6 @@ {"id":"gt-69l","title":"Hook system for event extensibility","description":"GGT needs hook system for extensibility like PGT.\n\n## Event Types\n```go\ntype Event string\nconst (\n EventPreSessionStart Event = \"pre-session-start\"\n EventPostSessionStart Event = \"post-session-start\"\n EventPreShutdown Event = \"pre-shutdown\"\n EventPostShutdown Event = \"post-shutdown\"\n EventOnPaneOutput Event = \"on-pane-output\"\n EventSessionIdle Event = \"session-idle\"\n EventMailReceived Event = \"mail-received\"\n EventWorkAssigned Event = \"work-assigned\"\n)\n```\n\n## Hook Configuration\nFile: .claude/hooks.json or .gastown/hooks.json\n```json\n{\n \"hooks\": {\n \"pre-shutdown\": [\n {\"type\": \"command\", \"cmd\": \"./scripts/pre-shutdown.sh\"}\n ],\n \"on-pane-output\": [\n {\"type\": \"command\", \"cmd\": \"./scripts/activity-monitor.sh\"}\n ]\n }\n}\n```\n\n## Hook Types\n1. **Command**: Execute external script\n2. **Built-in**: Internal Go functions (pre-shutdown checks)\n\n## Hook Interface\n```go\ntype HookRunner struct {\n config *HookConfig\n}\n\ntype HookResult struct {\n Success bool\n Message string\n Block bool // For pre-* hooks: should operation be blocked?\n}\n\nfunc (r *HookRunner) Fire(event Event, ctx *HookContext) []HookResult\n```\n\n## CLI Commands\n```\ngt hooks list [\u003cevent\u003e] # List registered hooks\ngt hooks fire \u003cevent\u003e # Manually fire for testing\ngt hooks test [--all] # Validate hook config\n```\n\n## Integration Points\n- internal/session/manager.go: Fire pre/post session hooks\n- internal/mail/router.go: Fire mail-received hook\n\n## New Package\ninternal/hooks/\n├── types.go # Event, HookConfig, HookResult\n├── runner.go # HookRunner, Fire()\n└── builtin.go # Built-in hooks (pre-shutdown checks)\n\n## PGT Reference\ngastown-py/src/gastown/hooks/\n\n## Acceptance Criteria\n- [ ] Hook config loading from JSON\n- [ ] Command hooks execute subprocess\n- [ ] Pre-shutdown hook integration with session stop\n- [ ] CLI for listing and testing hooks","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:47:34.584907-08:00","updated_at":"2025-12-16T16:04:47.890588-08:00"} {"id":"gt-69ruq","title":"Digest: mol-deacon-patrol","description":"Patrol 8: healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T06:10:18.225418-08:00","updated_at":"2025-12-28T06:10:18.225418-08:00","closed_at":"2025-12-28T06:10:18.225382-08:00"} {"id":"gt-6b2si","title":"Merge: keeper-1767106012994","description":"branch: polecat/keeper-1767106012994\ntarget: main\nsource_issue: keeper-1767106012994\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T07:01:00.144589-08:00","created_by":"gastown/polecats/keeper","updated_at":"2025-12-30T10:06:56.600434-08:00","closed_at":"2025-12-30T10:06:56.600434-08:00","close_reason":"Branch merged to main"} -{"id":"gt-6bhu","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-23T22:06:13.33163-08:00","updated_at":"2025-12-27T23:44:54.6489-08:00","closed_at":"2025-12-27T23:44:54.6489-08:00"} {"id":"gt-6c084","title":"Digest: mol-deacon-patrol","description":"Patrol 2: Quiet cycle, all agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T07:24:29.872651-08:00","updated_at":"2025-12-27T21:26:03.676821-08:00","deleted_at":"2025-12-27T21:26:03.676821-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-6c3kn","title":"Digest: mol-deacon-patrol","description":"Patrol 18: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:43:56.834698-08:00","updated_at":"2025-12-25T18:43:56.834698-08:00","closed_at":"2025-12-25T18:43:56.834642-08:00"} {"id":"gt-6c4nh","title":"Digest: mol-deacon-patrol","description":"Patrol 5: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:29:54.403996-08:00","updated_at":"2025-12-28T01:29:54.403996-08:00","closed_at":"2025-12-28T01:29:54.403955-08:00"} @@ -465,8 +461,8 @@ {"id":"gt-6r18e.6","title":"Beads schema: Add created_by field enforcement","description":"Ensure created_by field is populated on all issue creation. Currently optional and often missing. Should default from BD_ACTOR env var. Affects: merge requests, escalations, digests.","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/polecats/capable","created_at":"2025-12-30T11:08:44.30909-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T16:24:30.263393-08:00","closed_at":"2025-12-30T16:24:30.263393-08:00","close_reason":"Implemented BD_ACTOR defaulting in Create() and CreateAgentBead() functions","dependencies":[{"issue_id":"gt-6r18e.6","depends_on_id":"gt-6r18e","type":"parent-child","created_at":"2025-12-30T11:08:44.309586-08:00","created_by":"gastown/crew/joe"},{"issue_id":"gt-6r18e.6","depends_on_id":"gt-6r18e.2","type":"blocks","created_at":"2025-12-30T13:58:43.31598-08:00","created_by":"gastown/crew/joe"}]} {"id":"gt-6r18e.7","title":"Beads schema: Add overseer field for team scenarios","description":"For future team support: overseer field identifies human owner when multiple humans share a workspace. For now, email in git commits serves this purpose. Low priority until teams needed.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-30T11:08:45.569583-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T11:08:45.569583-08:00","dependencies":[{"issue_id":"gt-6r18e.7","depends_on_id":"gt-6r18e","type":"parent-child","created_at":"2025-12-30T11:08:45.571333-08:00","created_by":"gastown/crew/joe"}]} {"id":"gt-6r18e.8","title":"Add gt audit command for provenance queries","description":"New command: gt audit --actor=X to query work history. Combines git log, beads queries, and event log. Shows commits, beads created/closed, events by actor.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/toast","created_at":"2025-12-30T11:08:46.527472-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T16:27:57.646086-08:00","closed_at":"2025-12-30T16:27:57.646086-08:00","close_reason":"Implemented gt audit command with --actor, --since, --json, -n flags. Queries git log, beads, town log, and events feed.","dependencies":[{"issue_id":"gt-6r18e.8","depends_on_id":"gt-6r18e","type":"parent-child","created_at":"2025-12-30T11:08:46.529227-08:00","created_by":"gastown/crew/joe"}]} -{"id":"gt-6r18e.9","title":"Document BD_ACTOR format convention","description":"Document the canonical BD_ACTOR format:\n- Town level: mayor, deacon \n- Rig level: {rig}/witness, {rig}/refinery\n- Workers: {rig}/crew/{name}, {rig}/polecats/{name}\n\nCurrently only defined in lifecycle.go:807-829. Should be in docs and CLAUDE.md for agents to reference.\n\nAlso document the attribution model:\n- GIT_AUTHOR_NAME = BD_ACTOR (agent identity, who did the work)\n- GIT_AUTHOR_EMAIL = overseer email (who owns the work)\n- created_by = BD_ACTOR (beads field)","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/dag","created_at":"2025-12-30T13:58:28.386054-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T16:26:58.771698-08:00","dependencies":[{"issue_id":"gt-6r18e.9","depends_on_id":"gt-6r18e","type":"parent-child","created_at":"2025-12-30T13:58:28.38658-08:00","created_by":"gastown/crew/joe"}]} -{"id":"gt-6s378","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 5: All quiet.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-30T15:49:52.350763-08:00","updated_at":"2025-12-30T15:49:52.350763-08:00","closed_at":"2025-12-30T15:49:52.350725-08:00","close_reason":"Squashed from 15 wisps","dependencies":[{"issue_id":"gt-6s378","depends_on_id":"gt-eph-4t0","type":"parent-child","created_at":"2025-12-30T15:49:52.351759-08:00","created_by":"deacon"}]} +{"id":"gt-6r18e.9","title":"Document BD_ACTOR format convention","description":"Document the canonical BD_ACTOR format:\n- Town level: mayor, deacon \n- Rig level: {rig}/witness, {rig}/refinery\n- Workers: {rig}/crew/{name}, {rig}/polecats/{name}\n\nCurrently only defined in lifecycle.go:807-829. Should be in docs and CLAUDE.md for agents to reference.\n\nAlso document the attribution model:\n- GIT_AUTHOR_NAME = BD_ACTOR (agent identity, who did the work)\n- GIT_AUTHOR_EMAIL = overseer email (who owns the work)\n- created_by = BD_ACTOR (beads field)","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/cheedo","created_at":"2025-12-30T13:58:28.386054-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T18:00:12.595887-08:00","closed_at":"2025-12-30T18:00:12.595887-08:00","close_reason":"Documented BD_ACTOR format convention in docs/identity.md with attribution model","dependencies":[{"issue_id":"gt-6r18e.9","depends_on_id":"gt-6r18e","type":"parent-child","created_at":"2025-12-30T13:58:28.38658-08:00","created_by":"gastown/crew/joe"}]} +{"id":"gt-6s378","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 5: All quiet.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-30T15:49:52.350763-08:00","updated_at":"2025-12-30T15:49:52.350763-08:00","closed_at":"2025-12-30T15:49:52.350725-08:00","close_reason":"Squashed from 15 wisps"} {"id":"gt-6swlo","title":"Digest: mol-deacon-patrol","description":"P16","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:26:46.30747-08:00","updated_at":"2025-12-27T21:26:01.609962-08:00","deleted_at":"2025-12-27T21:26:01.609962-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-6t0","title":"gt swarm: Not discovering tasks from epic dependents","description":"gt swarm create/start shows '0 tasks loaded' even when epic has dependents.\n\nRepro:\n1. Create epic gt-hw6\n2. Create tasks and add deps: bd dep add gt-xxx gt-hw6\n3. gt swarm create gastown --epic gt-hw6 --worker Toast\n4. Swarm shows 'Tasks: 0'\n\nExpected: Swarm should discover tasks that depend on the epic.\nActual: Shows '(no tasks loaded)'","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-17T22:25:41.653628-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"} {"id":"gt-6tf","title":"Implement gt harness create command","description":"Add scaffolding command to create a new harness:\n- gt harness create [path]\n- Creates config/, mayor/, .beads/redirect (optional)\n- Optionally initializes git\n- Generates CLAUDE.md with Mayor role\n- Could also offer a template repo alternative","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-17T17:15:34.342552-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-6tf","depends_on_id":"gt-cr9","type":"blocks","created_at":"2025-12-17T17:15:51.845578-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} @@ -488,6 +484,7 @@ {"id":"gt-72nyt","title":"Digest: mol-deacon-patrol","description":"Cycle 13: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:21:53.797016-08:00","updated_at":"2025-12-28T13:21:53.797016-08:00","closed_at":"2025-12-28T13:21:53.796981-08:00"} {"id":"gt-72so","title":"gt mq list: doesn't show submitted MRs","description":"After submitting MRs with gt mq submit, gt mq list gastown shows empty queue.\n\n## Reproduction\n1. gt mq submit --issue gt-h5n.5 --branch polecat/Scabrous\n2. gt mq list gastown → (empty)\n3. bd list --type=merge-request → shows the MR\n\n## Expected\ngt mq list should show submitted MRs\n\n## MR example\ngt-ts4u has rig: gastown in description, type=merge-request, status=open","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-19T14:54:26.731813-08:00","updated_at":"2025-12-27T21:29:54.008454-08:00","deleted_at":"2025-12-27T21:29:54.008454-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-73gzw","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:46:48.759627-08:00","updated_at":"2025-12-25T10:46:48.759627-08:00","closed_at":"2025-12-25T10:46:48.759596-08:00"} +{"id":"gt-73o6t","title":"Digest: mol-deacon-patrol","description":"Patrol 15: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:34:58.145969-08:00","updated_at":"2025-12-28T01:34:58.145969-08:00","closed_at":"2025-12-28T01:34:58.145939-08:00"} {"id":"gt-74a7","title":"Wire GT_ACCOUNT env var into spawn/attach","description":"When spawning Claude Code (gt spawn, gt crew attach), check GT_ACCOUNT env var. If set, look up account in config and set CLAUDE_CONFIG_DIR accordingly.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:22.86335-08:00","updated_at":"2025-12-27T21:29:56.167565-08:00","dependencies":[{"issue_id":"gt-74a7","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:34.897966-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.167565-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-751s","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses wisp storage (.beads-wisp/) for ephemeral patrol state.\nPersistent state (nudge counts, handoffs) is stored in a witness handoff bead.","status":"tombstone","priority":4,"issue_type":"epic","created_at":"2025-12-23T01:41:54.504354-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-75b0","title":"Digest: mol-deacon-patrol","description":"Patrol 12: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:37:48.776182-08:00","updated_at":"2025-12-27T21:26:04.585408-08:00","deleted_at":"2025-12-27T21:26:04.585408-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -533,8 +530,8 @@ {"id":"gt-7qgm0","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy, read Mayor handoff (info)","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T14:54:20.388504-08:00","updated_at":"2025-12-27T21:26:03.14066-08:00","deleted_at":"2025-12-27T21:26:03.14066-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-7rp6z","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T03:09:03.478593-08:00","updated_at":"2025-12-28T03:09:03.478593-08:00","closed_at":"2025-12-28T03:09:03.478547-08:00"} {"id":"gt-7sqi","title":"Refactor: Extract common manager creation boilerplate","description":"Five nearly identical functions exist for creating managers:\n- getPolecatManager (polecat.go:241)\n- getSessionManager (session.go:183)\n- getCrewManager (crew_helpers.go:44)\n- getRefineryManager (refinery.go:116)\n- getWitnessManager (witness.go:102)\n\nAll follow the same pattern: find workspace, load config, get rig, create manager. Should extract to a common helper that takes a factory function.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:34:30.495275-08:00","updated_at":"2025-12-27T21:29:56.487369-08:00","deleted_at":"2025-12-27T21:29:56.487369-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-7tmh","title":"mol-deacon-patrol","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nDeacon patrol molecule template. Label: template","status":"tombstone","priority":4,"issue_type":"epic","created_at":"2025-12-23T13:03:21.516072-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-7tt8","title":"Default crew name should be something better than 'main'","description":"When creating a new rig, the default crew worker name is 'main'. This is confusing since:\n\n1. 'main' is also the git branch name\n2. It doesn't convey that this is the user's personal workspace\n3. Crew names should feel more personal/distinct\n\nConsider alternatives like:\n- 'home' - the user's home base\n- 'desk' - their personal desk\n- 'joe/max/etc' - actual name-based defaults\n- Let user pick during rig init","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-21T16:46:51.049367-08:00","updated_at":"2025-12-21T16:46:59.133599-08:00"} -{"id":"gt-7ucrr","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:58:58.140323-08:00","updated_at":"2025-12-26T13:58:58.140323-08:00","closed_at":"2025-12-26T13:58:58.140272-08:00"} {"id":"gt-7uhts","title":"Day 3.4: Refinery processes MERGE_READY mail","description":"Refinery patrol handles merge requests:\n1. Check inbox for MERGE_READY messages\n2. For each, verify branch exists\n3. Run merge checks (tests, lint)\n4. If passing, merge to main\n5. Send MERGED signal back\n\nParent: gt-hwka3","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:05.510472-08:00","created_by":"mayor","updated_at":"2025-12-28T09:56:42.672932-08:00","closed_at":"2025-12-28T09:56:42.672932-08:00","dependencies":[{"issue_id":"gt-7uhts","depends_on_id":"gt-hwka3","type":"parent-child","created_at":"2025-12-27T20:58:48.873689-08:00","created_by":"daemon"},{"issue_id":"gt-7uhts","depends_on_id":"gt-u6siy","type":"blocks","created_at":"2025-12-27T20:59:00.772533-08:00","created_by":"daemon"},{"issue_id":"gt-7uhts","depends_on_id":"gt-6qyt1","type":"relates-to","created_at":"2025-12-27T20:59:09.685061-08:00","created_by":"daemon"},{"issue_id":"gt-7uhts","depends_on_id":"gt-k294l","type":"blocks","created_at":"2025-12-27T23:17:28.282401-08:00","created_by":"daemon"}]} {"id":"gt-7uo17","title":"Digest: mol-deacon-patrol","description":"Patrol complete: no callbacks, all agents healthy, no orphans, doctor 24/28","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T06:06:07.673288-08:00","updated_at":"2025-12-28T06:06:07.673288-08:00","closed_at":"2025-12-28T06:06:07.673251-08:00"} {"id":"gt-7vu13","title":"Digest: mol-deacon-patrol","description":"Patrol 11: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:34:37.954432-08:00","updated_at":"2025-12-29T22:34:37.954432-08:00","closed_at":"2025-12-29T22:34:37.954399-08:00"} @@ -544,6 +541,7 @@ {"id":"gt-7x7rf","title":"Digest: mol-deacon-patrol","description":"Patrol 12: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:15:51.554671-08:00","updated_at":"2025-12-27T21:26:01.006017-08:00","deleted_at":"2025-12-27T21:26:01.006017-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-7xtn","title":"Bug: MRs appearing in bd ready output","description":"merge-request beads are showing up in `bd ready` output alongside actual work items.\n\n## Problem\n`bd ready` is meant to show work available for polecats to claim. MRs are internal workflow items processed by the Refinery, not polecat work.\n\n## Example\n```\n| P1 | merge-request | bd-3zzh | Merge: bd-tvu3 |\n| P1 | merge-request | bd-fcl1 | Merge: bd-au0.5 |\n```\n\n## Possible Fixes\n1. **Filter by type** - `bd ready` excludes type=merge-request, type=gate, type=molecule\n2. **Set assignee on submit** - MR assigned to refinery/ when created, so not 'unassigned'\n3. **Set status=in_progress** - MR starts in_progress since it's queued for processing\n\n## Related\n- gate beads also showing (bd-hyp6, bd-wu62) - same issue","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-23T14:38:29.507419-08:00","updated_at":"2025-12-27T21:29:52.965432-08:00","deleted_at":"2025-12-27T21:29:52.965432-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-7yc3u","title":"Digest: mol-deacon-patrol","description":"Patrol 2: all healthy, no incidents","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:52:09.555378-08:00","updated_at":"2025-12-27T21:26:00.593285-08:00","deleted_at":"2025-12-27T21:26:00.593285-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-804je","title":"Merge: dementus-1767146229184","description":"branch: polecat/dementus-1767146229184\ntarget: main\nsource_issue: dementus-1767146229184\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T18:01:50.010863-08:00","created_by":"gastown/polecats/dementus","updated_at":"2025-12-30T18:01:50.010863-08:00"} {"id":"gt-80g0k","title":"Digest: mol-deacon-patrol","description":"Patrol 13: Quick cycle, all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:08:36.666314-08:00","updated_at":"2025-12-27T21:26:02.950916-08:00","deleted_at":"2025-12-27T21:26:02.950916-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-81rh4","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:18:56.391947-08:00","updated_at":"2025-12-25T16:18:56.391947-08:00","closed_at":"2025-12-25T16:18:56.391918-08:00"} {"id":"gt-81zgq","title":"Merge: nux-1767079896198","description":"branch: polecat/nux-1767079896198\ntarget: main\nsource_issue: nux-1767079896198\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:38:17.859423-08:00","created_by":"gastown/polecats/nux","updated_at":"2025-12-29T23:55:11.863853-08:00","closed_at":"2025-12-29T23:55:11.863853-08:00","close_reason":"Stale MR from nuked polecat"} @@ -577,7 +575,6 @@ {"id":"gt-8mbz","title":"Town Doctor molecule for harness health checks","description":"Create a Town Doctor molecule that any Gas Town agent can run to diagnose and repair harness issues.\n\n## Concept\n\nInstead of just `gt doctor` as a CLI command with hardcoded checks, create a **molecule** (checklist workflow) that:\n- Any agent (Mayor, Witness, Polecat) can instantiate\n- Walks the agent through diagnostic steps\n- Agent uses judgment to fix issues found\n- Works as a structured troubleshooting guide\n\n## Why a Molecule?\n\n1. **Agent-driven**: The agent running it becomes \"the doctor\" temporarily\n2. **Extensible**: Add new checks by updating the molecule, not code\n3. **Contextual**: Agent can reason about issues, not just run scripts\n4. **Self-healing**: Agent can fix problems it finds, not just report them\n\n## Proposed Checks (molecule steps)\n\n1. Verify harness structure (mayor/, .beads/, CLAUDE.md exist)\n2. Validate config files (town.json, rigs.json parse correctly)\n3. Check beads health (bd doctor, redirect validity)\n4. Verify git state (clean working tree, proper remotes)\n5. Check rig integrity (each registered rig exists, has config.json)\n6. Validate agent clones (mayor/rig/, refinery/rig/ exist and are valid)\n7. Check for orphaned worktrees/branches\n8. Verify daemon state (if running)\n\n## Integration\n\n- `gt doctor` could instantiate the molecule for the current agent\n- Or agent can run `bd ready` and pick up doctor tasks when prioritized\n- Results logged to beads for audit trail\n\n## Related\n\n- gt-cr9: Harness Design \u0026 Documentation (completed)\n- Molecules design in architecture.md","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-19T13:03:22.688851-08:00","updated_at":"2025-12-27T21:29:57.001673-08:00","deleted_at":"2025-12-27T21:29:57.001673-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-8nmy","title":"Update Deacon template to emphasize staying in ~/gt/deacon directory","description":"The Deacon template should instruct the agent to stay in ~/gt/deacon/ as much as possible, and always return there after any excursion. This prevents issues with identity detection (mail, mol status) which depend on cwd.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T13:30:27.969826-08:00","updated_at":"2025-12-23T13:30:27.969826-08:00"} {"id":"gt-8os8","title":"Work on ga-p6r: Add handoff protocol to spawn priming. En...","description":"Work on ga-p6r: Add handoff protocol to spawn priming. Ensure polecats receive handoff context when spawned. When done, submit MR (not PR) to integration branch for Refinery.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T22:57:59.334003-08:00","updated_at":"2025-12-27T21:29:56.906515-08:00","deleted_at":"2025-12-27T21:29:56.906515-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-8padi","title":"Digest: mol-deacon-patrol","description":"Patrol 13: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:09:04.639-08:00","updated_at":"2025-12-27T23:09:04.639-08:00","closed_at":"2025-12-27T23:09:04.638966-08:00","dependencies":[{"issue_id":"gt-8padi","depends_on_id":"gt-eph-lxx","type":"parent-child","created_at":"2025-12-27T23:09:04.640113-08:00","created_by":"deacon"}]} {"id":"gt-8pcb","title":"Plugin/molecule catalog integration design","description":"Two currently independent systems:\n1. Disk-based plugins (~~/gt/plugins/) - Deacon patrol extensions\n2. Molecule catalog (protos in beads) - bd pour/wisp/bond\n\nInvestigate integration points:\n- User-contributed molecules bonded to catalog\n- Dynamic molecule attachment during execution (e.g., 'attach security sniffer because we noticed condition X')\n- How plugins could contribute protos\n- How protos could trigger plugins\n\nNot blocking launch. Future design investigation.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-22T21:52:47.897048-08:00","updated_at":"2025-12-28T22:34:14.460561-08:00","closed_at":"2025-12-28T22:34:14.460561-08:00"} {"id":"gt-8q4qb","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:49:44.632044-08:00","updated_at":"2025-12-27T21:26:01.24637-08:00","deleted_at":"2025-12-27T21:26:01.24637-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-8r7","title":"Enhance Mayor CLAUDE.md with GGT milestone tracking","description":"Update ~/ai/CLAUDE.md (Mayor startup context) with:\n\n1. GGT Self-Hosting Milestone section\n - Track progress toward gt replacing town\n - Key blockers: gt-h5n (merge queue), gt-974 (daemon)\n - What \"self-hosting\" means (GGT working on itself)\n\n2. Recent Architecture Decisions\n - Engineer = role, Refinery = place\n - Merge queue in Beads (not branch discovery)\n - Session restart protocol\n\n3. Transition Plan\n - Current: use town commands (PGT)\n - Target: use gt commands (GGT)\n - Switch criteria: gt-b1g closed\n\nKeep it concise - Mayor context should be quick to scan.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T23:12:07.260653-08:00","updated_at":"2025-12-16T23:12:07.260653-08:00","dependencies":[{"issue_id":"gt-8r7","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:12:15.124842-08:00","created_by":"daemon"}]} @@ -722,6 +719,8 @@ {"id":"gt-9zp8t","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:28:55.536366-08:00","updated_at":"2025-12-25T16:28:55.536366-08:00","closed_at":"2025-12-25T16:28:55.536331-08:00"} {"id":"gt-a07f","title":"Chemistry UX commands from Beads","description":"Waiting on Beads repo to implement chemistry UX sugar commands (bd pour, bd wisp, bd hook, --pour flag). These are nice-to-have polish items, not blockers for core functionality.\n\nSee: gastown/mayor/rig/docs/chemistry-design-changes.md","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-22T02:19:04.083172-08:00","updated_at":"2025-12-27T21:29:56.395503-08:00","deleted_at":"2025-12-27T21:29:56.395503-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-a2lrp","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T03:36:27.960057-08:00","updated_at":"2025-12-27T21:26:03.746799-08:00","deleted_at":"2025-12-27T21:26:03.746799-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-a3hxa","title":"Digest: mol-deacon-patrol","description":"Patrol 14: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:34:31.219589-08:00","updated_at":"2025-12-28T01:34:31.219589-08:00","closed_at":"2025-12-28T01:34:31.219538-08:00"} +{"id":"gt-a3m1m","title":"Digest: mol-deacon-patrol","description":"Patrol 11: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:33:11.534637-08:00","updated_at":"2025-12-28T01:33:11.534637-08:00","closed_at":"2025-12-28T01:33:11.534601-08:00"} {"id":"gt-a41um","title":"Daemon must delete LIFECYCLE messages after processing","description":"## Problem\n\nCrew workers were being killed every 5 minutes.\n\n## Root Cause\n\nOld stale LIFECYCLE messages from days ago were sitting in the deacon's inbox. The daemon's ProcessLifecycleRequests() was re-finding and re-processing them every 5-minute heartbeat cycle.\n\nThe closeMessage() function in lifecycle.go calls 'gt mail delete' but failures are silent - the message stays in the inbox and gets reprocessed on the next heartbeat.\n\n## Fix Required\n\n1. Ensure closeMessage() actually deletes the message\n2. If delete fails, log the error AND mark the message as read so it's not reprocessed\n3. Consider adding a 'processed' label or moving to a processed folder\n\n## Files\n\n- internal/daemon/lifecycle.go: closeMessage() function\n- internal/daemon/lifecycle.go: ProcessLifecycleRequests() loop","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-26T17:42:52.25807-08:00","updated_at":"2025-12-27T21:29:45.243013-08:00","deleted_at":"2025-12-27T21:29:45.243013-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-a4la6","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 1: All healthy - witnesses, refineries running. No callbacks, no orphans, no pending spawns.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:16:17.348433-08:00","updated_at":"2025-12-28T11:16:17.348433-08:00","closed_at":"2025-12-28T11:16:17.348399-08:00"} {"id":"gt-a5yv","title":"Digest: mol-deacon-patrol","description":"Patrol 4: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:56:31.09396-08:00","updated_at":"2025-12-27T21:26:04.996512-08:00","deleted_at":"2025-12-27T21:26:04.996512-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -778,7 +777,6 @@ {"id":"gt-ay1r","title":"gt molecule current: Show what agent should be working on","description":"Query what an agent identity is supposed to be working on via breadcrumb trail.\n\n## Command\n```bash\ngt molecule current \u003cidentity\u003e\ngt molecule current gastown/furiosa\ngt molecule current deacon\n```\n\n## Logic\n1. Find handoff bead for identity (pinned bead titled \"\u003crole\u003e Handoff\")\n2. Parse attachment field → molecule ID\n3. If no attachment → \"naked\" (no active molecule)\n4. If attached → load molecule, find current step:\n - bd ready --parent=\u003cmol-id\u003e → next unblocked step\n - Or first in_progress step\n\n## Output\n```\nIdentity: gastown/furiosa\nHandoff: gt-8v2 (Furiosa Handoff)\nMolecule: gt-mol-abc (mol-polecat-work)\nProgress: 3/8 steps complete\nCurrent: gt-mol-abc.4 - verify-tests\n```\n\nOr if naked:\n```\nIdentity: gastown/angharad\nHandoff: gt-9x1 (Angharad Handoff)\nMolecule: (none attached)\nStatus: naked - awaiting work assignment\n```\n\n## Use Cases\n- Mayor checking what polecats are doing\n- Witness verifying polecat progress\n- Debug: \"why isnt this polecat working?\"\n- Deacon patrol: track all agent states","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-21T21:34:01.430109-08:00","updated_at":"2025-12-27T21:29:53.375429-08:00","deleted_at":"2025-12-27T21:29:53.375429-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-aygm5","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all clear, hook fix applied","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T17:16:01.0164-08:00","updated_at":"2025-12-27T21:26:01.201359-08:00","deleted_at":"2025-12-27T21:26:01.201359-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-az41","title":"mol-ready-work variants: safe vs aggressive","description":"## Summary\n\nCreate two variants of mol-ready-work:\n\n### mol-ready-work-safe (default)\n- PRs: review and comment, but require human approval for merge\n- Issues: triage only, don't auto-close\n- Beads: implement but create PR instead of pushing to main\n\n### mol-ready-work-aggressive \n- PRs: can approve and merge directly\n- Issues: can close duplicates/invalid\n- Beads: can push directly to main\n\n## Implementation\nCould be a single molecule with a `{{mode}}` variable, or two separate protos.\n\n## Parent\nPart of gt-tnca (mol-ready-work epic)","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:19:38.703698-08:00","updated_at":"2025-12-27T21:29:56.250681-08:00","dependencies":[{"issue_id":"gt-az41","depends_on_id":"gt-tnca","type":"blocks","created_at":"2025-12-23T01:19:56.387233-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.250681-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-azpg2","title":"Digest: mol-deacon-patrol","description":"Patrol 6: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:44:45.549021-08:00","updated_at":"2025-12-28T19:44:45.549021-08:00","closed_at":"2025-12-28T19:44:45.548985-08:00"} {"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-azztl","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 13: All healthy - Witness/Refinery running, 7 polecats monitored","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-30T16:24:16.990488-08:00","updated_at":"2025-12-30T16:24:16.990488-08:00","closed_at":"2025-12-30T16:24:16.99042-08:00","close_reason":"Squashed from 15 wisps","dependencies":[{"issue_id":"gt-azztl","depends_on_id":"gt-eph-z45","type":"parent-child","created_at":"2025-12-30T16:24:16.991441-08:00","created_by":"deacon"}]} {"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"} @@ -828,8 +826,6 @@ {"id":"gt-bnik","title":"gt nudge should accept partial/fuzzy session names","description":"Currently gt nudge requires the exact tmux session name (e.g., gt-gastown-crew-max). Should be more forgiving:\n\n1. Accept partial matches when unambiguous (e.g., 'max' → gt-gastown-crew-max)\n2. Accept shorthand like 'gastown/max' or 'crew/max'\n3. Show helpful error with suggestions when ambiguous\n\nExamples that should work:\n- gt nudge max '...' → matches gt-gastown-crew-max\n- gt nudge gastown/max '...' → matches gt-gastown-crew-max\n- gt nudge beads-dave '...' → matches gt-beads-crew-dave","status":"tombstone","priority":3,"issue_type":"feature","created_at":"2025-12-20T17:53:44.834337-08:00","updated_at":"2025-12-27T21:29:57.605927-08:00","deleted_at":"2025-12-27T21:29:57.605927-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-bnlev","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 20: final cycle before handoff","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:48:49.95776-08:00","updated_at":"2025-12-27T21:26:01.312421-08:00","deleted_at":"2025-12-27T21:26:01.312421-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-bo8mo","title":"Witness: must send MERGE_READY to Refinery after POLECAT_DONE","description":"Integration test gt-7psb8 revealed that Witness processes POLECAT_DONE but doesn't send MERGE_READY to Refinery.\n\nObserved:\n- Witness receives POLECAT_DONE from furiosa\n- Witness verifies branch pushed\n- Witness kills polecat session\n- Witness notifies Mayor\n- NO MERGE_READY sent to Refinery\n\nExpected: After successful pre-kill verification, Witness should send MERGE_READY to gastown/refinery with the MR details.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-28T13:11:54.428918-08:00","created_by":"mayor","updated_at":"2025-12-28T13:58:05.348621-08:00","closed_at":"2025-12-28T13:58:05.348621-08:00"} -{"id":"gt-boiw8","title":"Digest: mol-deacon-patrol","description":"Patrol 8: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:54:03.322389-08:00","updated_at":"2025-12-28T15:54:03.322389-08:00","closed_at":"2025-12-28T15:54:03.322353-08:00"} -{"id":"gt-bor1c","title":"Digest: mol-deacon-patrol","description":"Patrol 15: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:48:25.087829-08:00","updated_at":"2025-12-28T19:48:25.087829-08:00","closed_at":"2025-12-28T19:48:25.087783-08:00"} {"id":"gt-bp0ht","title":"Add mutex to swarm.Manager for thread safety","description":"attached_args: Add swarm.Manager mutex for thread safety\n\nFix potential race condition in swarm manager's map access.\n\n## Files to modify\n- internal/swarm/manager.go\n- internal/swarm/manager_test.go (add concurrency test)\n\n## Problem\nThe swarms map[string]*Swarm is accessed without synchronization:\n```go\ntype Manager struct {\n swarms map[string]*Swarm // No mutex protection\n}\n```\n\nMultiple goroutines could call Create(), GetSwarm(), etc. simultaneously.\n\n## Implementation\n```go\ntype Manager struct {\n mu sync.RWMutex\n swarms map[string]*Swarm\n}\n\nfunc (m *Manager) GetSwarm(id string) *Swarm {\n m.mu.RLock()\n defer m.mu.RUnlock()\n return m.swarms[id]\n}\n```\n\n## Acceptance criteria\n- [ ] sync.RWMutex added to Manager struct\n- [ ] All map accesses protected by mutex\n- [ ] RLock for reads, Lock for writes\n- [ ] Concurrency test added\n- [ ] go test -race ./internal/swarm/... passes","status":"hooked","priority":2,"issue_type":"task","created_at":"2025-12-28T15:49:16.520654-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T15:54:16.914513-08:00"} {"id":"gt-bq1yn","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T14:04:00.499629-08:00","updated_at":"2025-12-25T14:04:00.499629-08:00","closed_at":"2025-12-25T14:04:00.499596-08:00"} {"id":"gt-bq4wo","title":"Day 2.7c: gt doctor checks agent beads exist","description":"Add gt doctor check: agent-beads-exist\n\n1. For town-level: verify gt-deacon and gt-mayor beads exist\n2. For each rig: verify gt-witness-\u003crig\u003e and gt-refinery-\u003crig\u003e beads exist\n3. Report missing beads as warnings\n4. Implement --fix to create missing beads\n\nFiles:\n- internal/doctor/agent_beads_check.go (new)\n- internal/cmd/doctor.go (register check)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-28T02:17:08.814494-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T02:40:06.712421-08:00","closed_at":"2025-12-28T02:40:06.712421-08:00","dependencies":[{"issue_id":"gt-bq4wo","depends_on_id":"gt-aer7q","type":"parent-child","created_at":"2025-12-28T02:17:17.582571-08:00","created_by":"daemon"},{"issue_id":"gt-bq4wo","depends_on_id":"gt-h3hak","type":"blocks","created_at":"2025-12-28T02:17:20.043469-08:00","created_by":"daemon"},{"issue_id":"gt-bq4wo","depends_on_id":"gt-pinkq","type":"blocks","created_at":"2025-12-28T02:17:20.073712-08:00","created_by":"daemon"}]} @@ -845,6 +841,7 @@ {"id":"gt-bz2pu","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All agents healthy, 1 orphan process cleaned, no mail","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T17:43:34.631017-08:00","updated_at":"2025-12-27T21:26:01.159742-08:00","deleted_at":"2025-12-27T21:26:01.159742-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-bzd","title":"beads: Stop searching upward when .beads found","description":"## Problem\n\nWhen running bd commands in a nested directory structure with multiple .beads directories, bd shows a confusing warning:\n\n```\n╔══════════════════════════════════════════════════════════════════════════╗\n║ WARNING: 2 beads databases detected in directory hierarchy ║\n╠══════════════════════════════════════════════════════════════════════════╣\n║ Multiple databases can cause confusion and database pollution. ║\n║ ║\n║ /Users/stevey/gt/gastown/.beads (261 issues) ║\n║ /Users/stevey/gt/.beads (21 issues) ║\n║ ║\n║ WARNING: Not using the closest database! Check your BEADS_DB setting. ║\n║ ║\n║ RECOMMENDED: Consolidate or remove unused databases to avoid confusion. ║\n╚══════════════════════════════════════════════════════════════════════════╝\n```\n\n## Why This Is Wrong\n\nIn Gas Town, nested .beads directories are **intentional and necessary**:\n- Town level: /Users/stevey/gt/.beads (mail, town-level issues)\n- Rig level: /Users/stevey/gt/gastown/.beads (gastown project issues)\n- Worker level: polecats have their own beads in worktrees\n\nThese are **unrelated** beads instances for different scopes. They should never be consolidated.\n\n## Expected Behavior\n\nWhen bd finds a .beads directory, it should:\n1. Use that directory (closest ancestor wins)\n2. **Stop searching upward** - do not look for parent .beads directories\n3. **No warning** about multiple databases\n\n## Current Behavior\n\nbd searches all the way up to root, finds all .beads directories, and warns about \"multiple databases\" even though they are separate, intentional instances.\n\n## Fix\n\nIn the database discovery code, stop the upward search as soon as a .beads directory is found. The first .beads found is the one to use, and parent directories are out of scope.\n\n## Note\n\nThis is a beads issue, filed here for tracking. Should be implemented in the beads codebase.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-18T19:09:44.295743-08:00","updated_at":"2025-12-27T21:29:54.14296-08:00","deleted_at":"2025-12-27T21:29:54.14296-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-bzey4","title":"Add NODE_OPTIONS crash logging to claude invocations","description":"## Background\n\nInvestigation in bd-6df0 found that NODE_OPTIONS can enable Node.js crash reporting for Claude Code:\n\n```bash\nNODE_OPTIONS=\"--report-on-fatalerror --report-uncaught-exception --report-directory=$HOME/.claude/crash-reports\"\n```\n\n## Proposal\n\nModify gt to set NODE_OPTIONS when spawning claude sessions. Key locations in gastown:\n\n- `internal/cmd/up.go` - deacon, witness, crew, polecat spawning\n- `internal/cmd/start.go` - refinery, crew spawning \n- `internal/cmd/mayor.go` - mayor spawning\n- `internal/cmd/handoff.go` - handoff respawning\n- `internal/cmd/crew_helpers.go` - execClaude()\n- `internal/daemon/lifecycle.go` - daemon-managed spawns\n\n## Implementation\n\n1. Create helper function to build NODE_OPTIONS string\n2. Set env var before each claude invocation\n3. Ensure ~/.claude/crash-reports/ directory exists\n4. Optionally add `gt doctor` check to clean old reports\n\n## Benefits\n\n- Crash diagnostics without user config changes\n- All gt-managed sessions automatically covered\n- Reports available for debugging unexpected terminations","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-28T09:32:15.467817-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-28T09:35:03.888171-08:00","closed_at":"2025-12-28T09:35:03.888171-08:00"} +{"id":"gt-bzn8","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-24T00:20:50.418875-08:00","updated_at":"2025-12-27T22:40:44.708514-08:00","closed_at":"2025-12-27T22:40:44.708514-08:00"} {"id":"gt-c045h","title":"Digest: mol-witness-patrol","description":"Patrol cycle 2: Processed 3 POLECAT_DONE (nux=ESCALATED, slit=DEFERRED, furiosa=COMPLETED). Wrong-rig issue escalated to Mayor. All 3 gastown polecat sessions stopped.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:57:40.769464-08:00","updated_at":"2025-12-27T21:26:02.392786-08:00","dependencies":[{"issue_id":"gt-c045h","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:57:40.770311-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:26:02.392786-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-c0fzm","title":"Parameterize 'read org docs' step in polecat workflows","description":"## Problem\n\nThe mol-polecat-chrome formula has hardcoded paths to strategic docs:\n- ~/gt/docs/hop/CONTEXT.md\n- ~/gt/docs/PRIMING.md\n\nThis limits reusability across different projects/organizations.\n\n## Solution\n\nAdd a `context_docs` variable to the formula that takes a list of document paths:\n\n```toml\n[vars.context_docs]\ndescription = \"Paths to organizational context documents to read before design\"\ndefault = [\"~/gt/docs/hop/CONTEXT.md\", \"~/gt/docs/PRIMING.md\"]\n```\n\n## Usage at cook/wisp time\n\n```bash\n# Use defaults\ngt sling gt-abc gastown -q chrome\n\n# Override for different project\ngt sling gt-abc gastown -q chrome --var context_docs=\"docs/ARCHITECTURE.md,docs/PRINCIPLES.md\"\n```\n\n## Step template\n\nThe step description would interpolate the paths:\n\n```toml\n[[steps]]\nid = \"read-strategic-context\"\ntitle = \"Read organizational context documents\"\ndescription = \"\"\"\nRead the following strategic context documents before designing:\n\n{{#each context_docs}}\n- {{this}}\n{{/each}}\n\nThese contain the vision, principles, and constraints that should guide your work.\n\"\"\"\n```\n\n## Considerations\n\n1. How to handle the array in TOML var syntax?\n2. Should this be a reusable step fragment or inline in chrome?\n3. Default paths should work for Gas Town but be overridable\n\n## Related\n- mol-polecat-chrome.formula.toml (current hardcoded implementation)","status":"closed","priority":2,"issue_type":"feature","assignee":"gastown/crew/max","created_at":"2025-12-29T23:12:40.145379-08:00","created_by":"gastown/refinery","updated_at":"2025-12-29T23:17:53.827955-08:00","closed_at":"2025-12-29T23:17:53.827955-08:00","close_reason":"Implemented mol-polecat-chrome formula with parameterized context_docs variable. Default paths point to Gas Town docs, can be overridden via --var context_docs=\"...\" at sling time."} {"id":"gt-c0y43","title":"Add convoy_test.go tests","description":"convoy.go (525 lines) has no test coverage","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-30T14:14:28.250781-08:00","created_by":"mayor","updated_at":"2025-12-30T14:14:28.250781-08:00"} @@ -853,7 +850,6 @@ {"id":"gt-c4b83","title":"Consider gt polecats --status=idle for swarm dispatch","description":"The dispatch-swarm-work step in mol-witness-patrol uses a complex jq command to find idle polecats:\n\n```bash\nbd list --type=agent --json | jq '[.[] | select(.description | contains(\"role_type: polecat\") and contains(\"agent_state: idle\"))]'\n```\n\nConsider adding a dedicated command:\n```bash\ngt polecats \u003crig\u003e --status=idle\n```\n\nBenefits:\n- Simpler for formula authors\n- Encapsulates agent bead schema details\n- Could add --json output for programmatic use\n\nLow priority - the jq approach works, this is just ergonomics.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-29T14:36:18.152191-08:00","created_by":"mayor","updated_at":"2025-12-29T14:36:18.152191-08:00"} {"id":"gt-c4j4j","title":"Witness patrol formula should document 'dead' agent state","description":"## Problem\n\nThe witness patrol formula survey-workers step documents these agent states:\n\n agent_state: running|idle|stuck|done\n\nBut the daemon lifecycle (daemon/lifecycle.go:647) can set agent_state to 'dead'\nwhen an agent goes unresponsive. This state isn't mentioned in the formula.\n\n## Found in commit\n\nf3a6ef6 (feat: Witness reads polecat state from agent beads)\n\n## Suggested fix\n\nUpdate the formula survey-workers step to include 'dead' in the state table:\n\n| agent_state | Meaning | Action |\n|-------------|---------|--------|\n| running | Actively working | Check progress (Step 3) |\n| idle | No work assigned | Skip (no action needed) |\n| stuck | Self-reported stuck | Handle stuck protocol |\n| done | Work complete | Verify cleanup triggered |\n| dead | Marked dead by daemon | Clean up or respawn |","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T09:48:21.452636-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T09:55:13.416985-08:00","closed_at":"2025-12-28T09:55:13.416985-08:00"} {"id":"gt-c55jv","title":"Digest: mol-deacon-patrol","description":"Patrol 17: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T18:46:04.311563-08:00","updated_at":"2025-12-26T18:46:04.311563-08:00","closed_at":"2025-12-26T18:46:04.311512-08:00"} -{"id":"gt-c57z0","title":"Digest: mol-deacon-patrol","description":"Patrol 13: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:34:03.807298-08:00","updated_at":"2025-12-28T01:34:03.807298-08:00","closed_at":"2025-12-28T01:34:03.807262-08:00"} {"id":"gt-c6zs","title":"Add molecule phase lifecycle diagram to architecture.md","description":"Create a clear lifecycle diagram showing molecule phases:\n\n```\n ┌─────────────┐\n │ Proto │\n │ (crystal) │\n └──────┬──────┘\n │\n bd mol bond\n │\n ┌────────────┴────────────┐\n │ │\n ▼ ▼\n ┌───────────────┐ ┌───────────────┐\n │ Mol │ │ Wisp │\n │ (liquid) │ │ (gas) │\n │ durable │ │ ephemeral │\n │ main beads │ │ .beads-eph/ │\n └───────┬───────┘ └───────┬───────┘\n │ │\n bd mol squash bd mol squash\n │ │\n ▼ ▼\n ┌───────────────┐ ┌───────────────┐\n │ Digest │ │ (nothing) │\n │ (distillate) │ │ evaporates │\n │ in git hist │ └───────────────┘\n └───────────────┘\n```\n\nAlso document:\n- When to use Mol vs Wisp\n- Mol: code review waves, epic implementation, feature work\n- Wisp: orchestration, polecat work sessions, patrol loops","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T16:32:47.487341-08:00","updated_at":"2025-12-27T21:29:53.426087-08:00","dependencies":[{"issue_id":"gt-c6zs","depends_on_id":"gt-62hm","type":"blocks","created_at":"2025-12-21T16:33:17.38302-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.426087-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-c70hl","title":"Digest: mol-deacon-patrol","description":"Patrol 5: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:54:21.579968-08:00","updated_at":"2025-12-27T21:26:00.575976-08:00","deleted_at":"2025-12-27T21:26:00.575976-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-c78vo","title":"Digest: mol-deacon-patrol","description":"Patrol 11: clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:15:31.420476-08:00","updated_at":"2025-12-27T21:26:01.013745-08:00","deleted_at":"2025-12-27T21:26:01.013745-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -910,6 +906,7 @@ {"id":"gt-clbz6","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 14: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:36.51872-08:00","updated_at":"2025-12-28T11:22:36.51872-08:00","closed_at":"2025-12-28T11:22:36.518686-08:00"} {"id":"gt-cnt","title":"Swarm cleanup: delete merged polecat branches and reset state","description":"After a swarm completes and branches are merged, leftover state remains:\n\n## Current Problem\n\n1. **Remote branches not deleted** - polecat/* branches stay on origin after merge\n2. **Polecat clones not reset** - still on old branch with completed work\n3. **No cleanup command** - manual cleanup required\n\n## Observed After Swarm\n\nRemote branches still present:\n- origin/polecat/Morsov\n- origin/polecat/Nux \n- origin/polecat/Rictus\n- origin/polecat/Slit\n- origin/polecat/Toast\n\n## Proposed Solution\n\nAdd cleanup commands:\n\n1. gt swarm cleanup \u003cswarm-id\u003e - Clean up after swarm completion\n - Delete remote polecat branches that were merged\n - Reset polecat clones to main\n - Clear issue assignments\n \n2. gt polecat reset \u003crig\u003e/\u003cpolecat\u003e - Reset single polecat\n - git checkout main \u0026\u0026 git pull\n - Delete local polecat branch\n - Clear current issue assignment\n\n3. Auto-cleanup option on gt session stop --cleanup\n\n## Manual Cleanup For Now\n\ngit push origin --delete polecat/Nux polecat/Toast ...\ncd polecats/Nux \u0026\u0026 git checkout main \u0026\u0026 git pull","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T15:09:08.739193-08:00","updated_at":"2025-12-27T21:29:54.287498-08:00","deleted_at":"2025-12-27T21:29:54.287498-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-cp2s","title":"mol-polecat-lease: Semaphore proto for tracking polecat lifecycle","description":"Define a small proto for tracking a single polecat in the Witness patrol wisp:\n\n```markdown\n## Molecule: polecat-lease\nSemaphore tracking a single polecat's lifecycle.\nVars: {{polecat}}, {{issue}}\n\n## Step: boot\nSpawned. Verify it starts working.\ngt peek {{polecat}} - if idle, gt nudge.\nTimeout: 60s before escalation.\n\n## Step: working\nActively working. Monitor for stuck.\nWait for SHUTDOWN mail.\nNeeds: boot\n\n## Step: done\nExit received. Ready for cleanup.\nKill session, prune worktree.\nNeeds: working\n```\n\nUsed by Witness: bd mol bond mol-polecat-lease wisp-patrol --var polecat=X","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T22:01:18.257848-08:00","updated_at":"2025-12-27T21:29:53.091372-08:00","deleted_at":"2025-12-27T21:29:53.091372-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-cp63h","title":"Digest: mol-deacon-patrol","description":"Patrol 18: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:57:04.065336-08:00","updated_at":"2025-12-28T15:57:04.065336-08:00","closed_at":"2025-12-28T15:57:04.065303-08:00"} {"id":"gt-cpm2","title":"Automatic spawn for ready work","description":"Auto-spawn polecats for ready work:\n\nWhen Witness has capacity (active_workers \u003c max_workers):\n1. Query bd ready for unblocked issues\n2. Filter to rig-appropriate work (by prefix or epic)\n3. For each ready issue up to capacity:\n - gt spawn --issue \u003cid\u003e\n - Track that we spawned for this issue\n\nConfiguration (in rig config.json):\n- max_workers: 4 (default)\n- spawn_delay: 5s between spawns\n- auto_spawn: true/false\n\nThis enables 'fire and forget' swarming:\n- Mayor creates epic with children\n- Mayor tells Witness to work epic\n- Witness spawns polecats automatically\n- Witness cleans up as they complete","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-20T03:14:24.724136-08:00","updated_at":"2025-12-27T21:29:53.798185-08:00","dependencies":[{"issue_id":"gt-cpm2","depends_on_id":"gt-53w6","type":"parent-child","created_at":"2025-12-20T03:14:37.365334-08:00","created_by":"daemon"},{"issue_id":"gt-cpm2","depends_on_id":"gt-mxyj","type":"blocks","created_at":"2025-12-20T03:14:38.957826-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.798185-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-cppy0","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy, handoff triggered","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T15:24:01.602815-08:00","updated_at":"2025-12-27T21:26:03.132568-08:00","deleted_at":"2025-12-27T21:26:03.132568-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-cpxxv","title":"Merge: organic-1767106082951","description":"branch: polecat/organic-1767106082951\ntarget: main\nsource_issue: organic-1767106082951\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T10:42:25.2268-08:00","created_by":"gastown/polecats/organic","updated_at":"2025-12-30T10:42:25.2268-08:00"} @@ -950,7 +947,7 @@ {"id":"gt-d5tgv","title":"Digest: mol-deacon-patrol","description":"Patrol 8: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:31.187594-08:00","updated_at":"2025-12-27T21:26:02.147192-08:00","deleted_at":"2025-12-27T21:26:02.147192-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-d6kyw","title":"Digest: mol-refinery-patrol","description":"Refinery patrol: no MRs in queue. Tests passed (all ok). No issues filed.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-30T00:56:55.381522-08:00","updated_at":"2025-12-30T00:56:55.381522-08:00","closed_at":"2025-12-30T00:56:55.381481-08:00","close_reason":"Squashed from 10 wisps","dependencies":[{"issue_id":"gt-d6kyw","depends_on_id":"gt-eph-6j9","type":"parent-child","created_at":"2025-12-30T00:56:55.382412-08:00","created_by":"mayor"}]} {"id":"gt-d7i","title":"gt session capture: Support positional line count argument","description":"Make 'gt session capture gastown/Toast 50' work.\n\nCurrently requires: gt session capture gastown/Toast -n 50\nShould also accept: gt session capture gastown/Toast 50\n\nAgent UX principle: commands should work the way agents guess they work.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T22:28:44.291285-08:00","updated_at":"2025-12-27T21:29:54.211841-08:00","deleted_at":"2025-12-27T21:29:54.211841-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-d7xwj","title":"Digest: mol-deacon-patrol","description":"Patrol 17: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:49:08.440137-08:00","updated_at":"2025-12-28T19:49:08.440137-08:00","closed_at":"2025-12-28T19:49:08.440104-08:00"} +{"id":"gt-d7i38","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy - handoff threshold reached","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T18:53:56.983327-08:00","updated_at":"2025-12-27T21:26:02.797809-08:00","deleted_at":"2025-12-27T21:26:02.797809-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-d8a8x","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:34:25.657224-08:00","updated_at":"2025-12-27T21:26:02.535732-08:00","deleted_at":"2025-12-27T21:26:02.535732-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-d8ia3","title":"Digest: mol-deacon-patrol","description":"Patrol 12: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:22:50.271584-08:00","updated_at":"2025-12-27T21:26:00.108727-08:00","deleted_at":"2025-12-27T21:26:00.108727-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-d9smb","title":"gt mol status: Change 'Pinned' to 'Hooked' in output","description":"The `gt mol status` output shows \"📌 Pinned: \u003cbead-id\u003e\" for hooked beads, which is confusing now that we have distinct statuses:\n\n- **hooked**: Work assigned to you (triggers autonomous mode)\n- **pinned**: Permanent reference beads (like agent beads, role beads)\n\nThe output currently says:\n```\n📌 Pinned: gt-3amkz: Overhaul autonomous-mode guidance...\nNo molecule attached\n```\n\nShould say:\n```\n🪝 Hooked: gt-3amkz: Overhaul autonomous-mode guidance...\nNo molecule attached\n```\n\nAdditional improvements:\n1. Change icon from 📌 to 🪝 for hooked beads\n2. Add a note clarifying that hooked work triggers autonomous mode even without an attached molecule\n3. Consider adding \"AUTONOMOUS MODE\" banner when hooked work is found (similar to gt prime)\n\nFiles to update:\n- internal/cmd/molecule_status.go (outputMoleculeStatus function around line 576)","status":"closed","priority":1,"issue_type":"bug","assignee":"gastown/crew/max","created_at":"2025-12-29T16:03:52.956377-08:00","created_by":"mayor","updated_at":"2025-12-29T16:11:04.397646-08:00","closed_at":"2025-12-29T16:11:04.397646-08:00","close_reason":"Implemented: Changed output to show 🪝 Hooked instead of 📌 Pinned, added AUTONOMOUS MODE banner, clarified hooked bead triggers autonomous work"} @@ -976,6 +973,7 @@ {"id":"gt-dlnin","title":"Merge: cheedo-1767079863534","description":"branch: polecat/cheedo-1767079863534\ntarget: main\nsource_issue: cheedo-1767079863534\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:39:55.959351-08:00","created_by":"gastown/polecats/cheedo","updated_at":"2025-12-29T23:55:11.848257-08:00","closed_at":"2025-12-29T23:55:11.848257-08:00","close_reason":"Stale MR from nuked polecat"} {"id":"gt-dlrn","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:46","description":"Patrol 13: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:46:40.722551-08:00","updated_at":"2025-12-27T21:26:05.087567-08:00","deleted_at":"2025-12-27T21:26:05.087567-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-dm7k","title":"Digest: mol-deacon-patrol","description":"Patrol #17: Stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:34:59.419736-08:00","updated_at":"2025-12-27T21:26:04.260319-08:00","deleted_at":"2025-12-27T21:26:04.260319-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-dmagm","title":"Digest: mol-deacon-patrol","description":"Patrol 17: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:36:06.393647-08:00","updated_at":"2025-12-28T01:36:06.393647-08:00","closed_at":"2025-12-28T01:36:06.393612-08:00"} {"id":"gt-dmozb","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T08:13:26.555648-08:00","updated_at":"2025-12-28T08:13:26.555648-08:00","closed_at":"2025-12-28T08:13:26.55561-08:00"} {"id":"gt-dq3","title":"Split PGT/GGT harness or migrate to GGT-only","description":"Current ~/ai harness is shared by PGT and GGT with confusing overlap. Options:\n1. Keep separate (document the coexistence)\n2. Migrate fully to GGT structure\n3. Create separate harnesses\n\nThis affects the beads redirect, Mayor home location, and rig structure.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T17:15:32.308192-08:00","updated_at":"2025-12-27T21:29:54.245064-08:00","dependencies":[{"issue_id":"gt-dq3","depends_on_id":"gt-cr9","type":"blocks","created_at":"2025-12-17T17:15:51.717903-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.245064-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-drbd","title":"Add no-PR instructions to mol-polecat-work at two points","description":"Update mol-polecat-work in builtin_molecules.go to explicitly forbid GitHub PRs.\n\n## Two Points to Add Instructions\n\n### 1. submit-work step\nWhen polecat is ready to submit:\n- Push branch to origin\n- Create beads merge-request issue\n- DO NOT use gh pr create or GitHub PRs\n\n### 2. CLAUDE.md polecat context\nAdd to polecat role instructions:\n- Never use gh pr create\n- Never create GitHub pull requests\n- The Refinery processes merges via beads MR issues\n\n## Why Two Points\n- Molecule step description guides the workflow\n- CLAUDE.md reinforces at context level\n- Belt and suspenders approach\n\n## Implementation\n1. Update PolecatWorkMolecule() submit-work step description\n2. Update prompts/roles/polecat.md with explicit prohibition\n\nRelated: gt-44wh (general no-PR bug)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T16:44:51.497283-08:00","updated_at":"2025-12-27T21:29:53.409225-08:00","dependencies":[{"issue_id":"gt-drbd","depends_on_id":"gt-44wh","type":"related","created_at":"2025-12-21T16:44:57.503314-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.409225-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -993,7 +991,6 @@ {"id":"gt-dy2k8","title":"Digest: mol-deacon-patrol","description":"Patrol 20: quiet, handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:50:21.56188-08:00","updated_at":"2025-12-28T19:50:21.56188-08:00","closed_at":"2025-12-28T19:50:21.561844-08:00"} {"id":"gt-dyz3.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-dyz3\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:55:26.823047-08:00","updated_at":"2025-12-27T21:29:55.377417-08:00","deleted_at":"2025-12-27T21:29:55.377417-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-e01cj","title":"Digest: mol-deacon-patrol","description":"Cycle 11: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:19:46.280919-08:00","updated_at":"2025-12-28T13:19:46.280919-08:00","closed_at":"2025-12-28T13:19:46.280887-08:00"} -{"id":"gt-e0p84","title":"Merge: toast-1767081120579","description":"branch: polecat/toast-1767081120579\ntarget: main\nsource_issue: toast-1767081120579\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:56:27.54274-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-30T00:34:53.052362-08:00","closed_at":"2025-12-30T00:34:53.052362-08:00"} {"id":"gt-e0qj2","title":"Documentation overhaul: User Guide approach","description":"## Problem\n\nCurrent docs are:\n1. **Grandiose** - Too much vision, belongs in ~/gt/docs (HOP), not here\n2. **Verbose** - Need bullets/tables, not sections. Too many separate files.\n3. **Bottom-up** - Written as we built. Users need top-down.\n\nGas Town is a simple agent orchestrator (4-10 → 20-30 agents). Not a manifesto.\n\n## Target Structure\n\n### 1. Features at a Glance\n- Persistent agent identities with mail inboxes and \"work hooks\"\n- Sling work to agents, pinned to their hook\n- Universal Propulsion: If hook is pinned, RUN IT\n- Hooks survive crash, shutdown, compaction, restart\n- Self-sling for auto-restart workflows\n- Pin individual beads or entire epics\n\n### 2. Available Workflows\n- tmux mode vs no-tmux (raw Claude Code)\n- Full Gas Town vs partial (single roles)\n- Modular and resilient - one role at a time\n\n### 3. Cooking Formulas\n- Molecules = chains of issues (railroad tracks)\n- Formulas = step descriptions (atoms)\n- Cook formulas → molecules → durable workflows\n- Examples: release molecule, deacon patrol, polecat workflow, shiny\n\n### 4. (Optional) MEOW Deep Dive\n- Structured epics as chained work graphs\n- Serial/parallel branches, gates, loops, algebra\n- States of matter, polymorphic bond operators\n- But users just need to cook formulas\n\n## Deliverable\n\nOne README + maybe one or two supporting docs. Radically condensed.\n","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-26T23:21:03.464073-08:00","created_by":"stevey","updated_at":"2025-12-27T21:29:45.798259-08:00","deleted_at":"2025-12-27T21:29:45.798259-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-e0u3r","title":"gt sling: Make target path parsing more forgiving","description":"Current parsing rejects valid-looking paths like 'gastown/nux' or 'gastown/polecats/nux'.\n\nShould accept:\n- gastown/nux (polecat)\n- gastown/Nux (polecat, case-insensitive)\n- gastown/polecats/nux (explicit)\n- gastown/crew/max (crew)\n- gastown (auto-spawn)\n\nThe help says 'gastown/Toast' works but it doesn't. Parser is too strict.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-28T00:42:00.738517-08:00","created_by":"mayor","updated_at":"2025-12-28T00:54:34.999256-08:00","closed_at":"2025-12-28T00:54:34.999256-08:00"} {"id":"gt-e1n86","title":"Template and Formula Distribution: Embed in binary, detect staleness","description":"## Problem\n\nTwo types of Gas Town infrastructure live in `.beads/` but have unclear distribution:\n\n1. **Role templates** (`*.md.tmpl`) - embedded in binary, rendered to CLAUDE.md on setup\n2. **Patrol formulas** (`*.formula.json`) - currently just exist, no clear seeding path\n\nWhen `gt` is rebuilt with updated templates/formulas, existing installations don't auto-update.\n\n## Current State\n\n- Templates: embedded via `//go:embed`, written on `gt install`/`gt rig init`\n- Formulas: exist in `.beads/formulas/` but no seeding mechanism\n- `bd init` creates empty structure (correct - bd shouldn't know Gas Town)\n- No staleness detection for either\n\n## Proposed Solution\n\n### 1. Embed formulas in `gt` binary\n\n```go\n//go:embed formulas/*.formula.json\nvar formulaFS embed.FS\n```\n\n### 2. Seed formulas during setup\n\n`gt install` and `gt rig init` write embedded formulas to `.beads/formulas/`.\n\n### 3. Hash-based staleness detection\n\n`gt doctor` checks:\n- CLAUDE.md hash vs embedded template hash\n- Formula files hash vs embedded formula hash\n\nIf stale → warn. `gt doctor --fix` refreshes.\n\n### 4. Keep bd/gt boundary clean\n\n- `bd` stays generic: `bd cook \u003cpath\u003e` takes any formula path\n- `gt` knows where formulas live, handles distribution\n- Patrol formulas are Gas Town infrastructure, not beads concern\n\n## Tasks\n\n1. Move formulas to embedded FS in gt binary\n2. Add formula seeding to `gt install` / `gt rig init`\n3. Add hash storage for templates and formulas\n4. Add staleness detection to `gt doctor`\n5. Add `--fix` flag to refresh stale files","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-25T20:04:28.044085-08:00","updated_at":"2025-12-27T21:29:54.960657-08:00","deleted_at":"2025-12-27T21:29:54.960657-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} @@ -1033,25 +1030,22 @@ {"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-252","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:08:07.254658-08:00","updated_at":"2025-12-27T23:18:05.396645-08:00","closed_at":"2025-12-27T23:18:05.396645-08:00"} {"id":"gt-eph-2wb","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with YAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents. Sequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T09:54:49.166597-08:00","updated_at":"2025-12-28T09:55:21.11902-08:00","closed_at":"2025-12-28T09:55:21.11902-08:00","dependencies":[{"issue_id":"gt-eph-2wb","depends_on_id":"gt-eph-5jh","type":"blocks","created_at":"2025-12-28T09:54:49.258993-08:00","created_by":"deacon"}]} {"id":"gt-eph-43s","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/dementus","created_at":"2025-12-28T09:55:41.719317-08:00","updated_at":"2025-12-30T00:35:16.814565-08:00","closed_at":"2025-12-30T00:35:16.814565-08:00","close_reason":"Patrol complete. Findings:\n- No in_progress issues without active polecats\n- All 6 active polecats (capable, dementus, furiosa, nux, rictus, slit) are idle with running sessions\n- Closed 3 orphaned merge requests:\n - gt-tpq7i (keeper): branch deleted, no work\n - gt-5o2l0 (cheedo): branch deleted, no work \n - gt-e0p84 (toast): only bd sync commit, no code\n- Garbage collected 39 stale polecat branches","dependencies":[{"issue_id":"gt-eph-43s","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.75482-08:00","created_by":"deacon"},{"issue_id":"gt-eph-43s","depends_on_id":"gt-eph-tc2","type":"blocks","created_at":"2025-12-28T09:55:41.818357-08:00","created_by":"deacon"}]} {"id":"gt-eph-5c8","title":"Handle callbacks from agents","description":"Handle callbacks from agents.\n\nCheck the Mayor's inbox for messages from:\n- Witnesses reporting polecat status\n- Refineries reporting merge results\n- Polecats requesting help or escalation\n- External triggers (webhooks, timers)\n\n```bash\ngt mail inbox\n# For each message:\ngt mail read \u003cid\u003e\n# Handle based on message type\n```\n\nCallbacks may spawn new polecats, update issue state, or trigger other actions.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/dag","created_at":"2025-12-28T09:55:41.717851-08:00","updated_at":"2025-12-29T23:40:18.001582-08:00","closed_at":"2025-12-29T23:40:18.001582-08:00","close_reason":"Implemented gt callbacks process command with support for POLECAT_DONE, MERGE_COMPLETED/REJECTED, HELP, ESCALATION, SLING_REQUEST, WITNESS_REPORT, and REFINERY_REPORT callbacks. Added EventCallback to townlog for logging.","dependencies":[{"issue_id":"gt-eph-5c8","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.720544-08:00","created_by":"deacon"}]} {"id":"gt-eph-5jh","title":"Check Witness and Refinery health","description":"Check Witness and Refinery health for each rig.\n\n**ZFC Principle**: You (Claude) make the judgment call about what is \"stuck\" or \"unresponsive\" - there are no hardcoded thresholds in Go. Read the signals, consider context, and decide.\n\nFor each rig, run:\n```bash\ngt witness status \u003crig\u003e\ngt refinery status \u003crig\u003e\n```\n\n**Signals to assess:**\n\n| Component | Healthy Signals | Concerning Signals |\n|-----------|-----------------|-------------------|\n| Witness | State: running, recent activity | State: not running, no heartbeat |\n| Refinery | State: running, queue processing | Queue stuck, merge failures |\n\n**Tracking unresponsive cycles:**\n\nMaintain in your patrol state (persisted across cycles):\n```\nhealth_state:\n \u003crig\u003e:\n witness:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n refinery:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n```\n\n**Decision matrix** (you decide the thresholds based on context):\n\n| Cycles Unresponsive | Suggested Action |\n|---------------------|------------------|\n| 1-2 | Note it, check again next cycle |\n| 3-4 | Attempt restart: gt witness restart \u003crig\u003e |\n| 5+ | Escalate to Mayor with context |\n\n**Restart commands:**\n```bash\ngt witness restart \u003crig\u003e\ngt refinery restart \u003crig\u003e\n```\n\n**Escalation:**\n```bash\ngt mail send mayor/ -s \"Health: \u003crig\u003e \u003ccomponent\u003e unresponsive\" \\\n -m \"Component has been unresponsive for N cycles. Restart attempts failed.\n Last healthy: \u003ctimestamp\u003e\n Error signals: \u003cdetails\u003e\"\n```\n\nReset unresponsive_cycles to 0 when component responds normally.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T09:54:49.166307-08:00","updated_at":"2025-12-30T00:40:55.696947-08:00","closed_at":"2025-12-30T00:40:55.696952-08:00"} {"id":"gt-eph-8fu","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize. The spawn command returns immediately without waiting. This step finds spawned polecats that are now ready and sends them a trigger to start working.\n\n**ZFC-Compliant Observation** (AI observes AI):\n\n```bash\n# View pending spawns with captured terminal output\ngt deacon pending\n```\n\nFor each pending session, analyze the captured output:\n- Look for Claude's prompt indicator \"\u003e \" at the start of a line\n- If prompt is visible, Claude is ready for input\n- Make the judgment call yourself - you're the AI observer\n\nFor each ready polecat:\n```bash\n# 1. Trigger the polecat\ngt nudge \u003csession\u003e \"Begin.\"\n\n# 2. Clear from pending list\ngt deacon pending \u003csession\u003e\n```\n\nThis triggers the UserPromptSubmit hook, which injects mail so the polecat sees its assignment.\n\n**Bootstrap mode** (daemon-only, no AI available):\nThe daemon uses `gt deacon trigger-pending` with regex detection. This ZFC violation is acceptable during cold startup when no AI agent is running yet.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/toast","created_at":"2025-12-28T09:55:41.718169-08:00","updated_at":"2025-12-29T23:54:29.078246-08:00","closed_at":"2025-12-29T23:54:29.078246-08:00","close_reason":"Checked for pending spawns - none found. All polecats in gastown are already in 'working' state.","dependencies":[{"issue_id":"gt-eph-8fu","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.727407-08:00","created_by":"deacon"},{"issue_id":"gt-eph-8fu","depends_on_id":"gt-eph-5c8","type":"blocks","created_at":"2025-12-28T09:55:41.782453-08:00","created_by":"deacon"}]} -{"id":"gt-eph-abd","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:20:32.393436-08:00","updated_at":"2025-12-28T11:20:32.393436-08:00"} {"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":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/ace","created_at":"2025-12-28T09:55:41.719859-08:00","updated_at":"2025-12-30T10:49:13.052122-08:00","closed_at":"2025-12-30T10:49:13.052122-08:00","close_reason":"Context check: moderate usage, no handoff needed. gt context --usage not yet implemented.","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-ei9","title":"Evaluate pending async gates","description":"Evaluate pending async gates.\n\nGates are async coordination primitives that block until conditions are met.\nThe Deacon is responsible for monitoring gates and closing them when ready.\n\n**Timer gates** (await_type: timer):\nCheck if elapsed time since creation exceeds the timeout duration.\n\n```bash\n# List all open gates\nbd gate list --json\n\n# For each timer gate, check if elapsed:\n# - CreatedAt + Timeout \u003c Now → gate is ready to close\n# - Close with: bd gate close \u003cid\u003e --reason \"Timer elapsed\"\n```\n\n**GitHub gates** (await_type: gh:run, gh:pr) - handled in separate step.\n\n**Human/Mail gates** - require external input, skip here.\n\nAfter closing a gate, the Waiters field contains mail addresses to notify.\nSend a brief notification to each waiter that the gate has cleared.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/cheedo","created_at":"2025-12-28T09:55:41.718473-08:00","updated_at":"2025-12-30T00:26:38.621994-08:00","closed_at":"2025-12-30T00:26:38.621994-08:00","close_reason":"No pending gates found - patrol step complete","dependencies":[{"issue_id":"gt-eph-ei9","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.734258-08:00","created_by":"deacon"},{"issue_id":"gt-eph-ei9","depends_on_id":"gt-eph-5c8","type":"blocks","created_at":"2025-12-28T09:55:41.789441-08:00","created_by":"deacon"}]} +{"id":"gt-eph-fyr","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-27T20:22:35.870496-08:00","updated_at":"2025-12-27T21:26:00.116793-08:00","deleted_at":"2025-12-27T21:26:00.116793-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-eph-gf1","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with YAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents. Sequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-28T09:55:41.719043-08:00","updated_at":"2025-12-28T09:55:41.719043-08:00","dependencies":[{"issue_id":"gt-eph-gf1","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.747929-08:00","created_by":"deacon"},{"issue_id":"gt-eph-gf1","depends_on_id":"gt-eph-tc2","type":"blocks","created_at":"2025-12-28T09:55:41.810967-08:00","created_by":"deacon"}]} {"id":"gt-eph-hfj","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-28T09:55:41.717288-08:00","updated_at":"2025-12-28T09:55:41.717288-08:00"} -{"id":"gt-eph-js7","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.\n\n## Second-Order Monitoring\n\nWitnesses send WITNESS_PING messages to verify the Deacon is alive. This\nprevents the \"who watches the watchers\" problem - if the Deacon dies,\nWitnesses detect it and escalate to the Mayor.\n\nThe Deacon's agent bead last_activity timestamp is updated during each patrol\ncycle. Witnesses check this timestamp to verify health.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-28T13:06:45.30485-08:00","updated_at":"2025-12-28T13:08:37.636341-08:00","closed_at":"2025-12-28T13:08:37.636341-08:00"} {"id":"gt-eph-lm1","title":"Clean dead sessions","description":"Clean dead sessions and orphaned state.\n\nRun `gt doctor --fix` to handle all cleanup:\n\n```bash\n# Preview what needs cleaning\ngt doctor -v\n\n# Fix everything\ngt doctor --fix\n```\n\nThis handles:\n- **orphan-sessions**: Kill orphaned tmux sessions (gt-* not matching valid patterns)\n- **orphan-processes**: Kill orphaned Claude processes (no tmux parent)\n- **wisp-gc**: Garbage collect abandoned wisps (\u003e1h old)\n\nAll cleanup is handled by doctor checks - no need to run separate commands.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/rictus","created_at":"2025-12-28T09:55:41.719584-08:00","updated_at":"2025-12-30T00:33:14.485082-08:00","closed_at":"2025-12-30T00:33:14.485082-08:00","close_reason":"Session cleanup verified clean - no orphan sessions, no orphan processes, no abandoned wisps. gt doctor --fix ran successfully for session-related checks.","dependencies":[{"issue_id":"gt-eph-lm1","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.761736-08:00","created_by":"deacon"},{"issue_id":"gt-eph-lm1","depends_on_id":"gt-eph-43s","type":"blocks","created_at":"2025-12-28T09:55:41.825725-08:00","created_by":"deacon"}]} -{"id":"gt-eph-lxx","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:08:38.559453-08:00","updated_at":"2025-12-27T23:18:05.386524-08:00","closed_at":"2025-12-27T23:18:05.386524-08:00"} {"id":"gt-eph-o04","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T09:54:49.166871-08:00","updated_at":"2025-12-30T00:40:55.706901-08:00","closed_at":"2025-12-30T00:40:55.706905-08:00","dependencies":[{"issue_id":"gt-eph-o04","depends_on_id":"gt-eph-5jh","type":"blocks","created_at":"2025-12-28T09:54:49.266603-08:00","created_by":"deacon"}]} {"id":"gt-eph-tc2","title":"Check Witness and Refinery health","description":"Check Witness and Refinery health for each rig.\n\n**ZFC Principle**: You (Claude) make the judgment call about what is \"stuck\" or \"unresponsive\" - there are no hardcoded thresholds in Go. Read the signals, consider context, and decide.\n\nFor each rig, run:\n```bash\ngt witness status \u003crig\u003e\ngt refinery status \u003crig\u003e\n```\n\n**Signals to assess:**\n\n| Component | Healthy Signals | Concerning Signals |\n|-----------|-----------------|-------------------|\n| Witness | State: running, recent activity | State: not running, no heartbeat |\n| Refinery | State: running, queue processing | Queue stuck, merge failures |\n\n**Tracking unresponsive cycles:**\n\nMaintain in your patrol state (persisted across cycles):\n```\nhealth_state:\n \u003crig\u003e:\n witness:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n refinery:\n unresponsive_cycles: 0\n last_seen_healthy: \u003ctimestamp\u003e\n```\n\n**Decision matrix** (you decide the thresholds based on context):\n\n| Cycles Unresponsive | Suggested Action |\n|---------------------|------------------|\n| 1-2 | Note it, check again next cycle |\n| 3-4 | Attempt restart: gt witness restart \u003crig\u003e |\n| 5+ | Escalate to Mayor with context |\n\n**Restart commands:**\n```bash\ngt witness restart \u003crig\u003e\ngt refinery restart \u003crig\u003e\n```\n\n**Escalation:**\n```bash\ngt mail send mayor/ -s \"Health: \u003crig\u003e \u003ccomponent\u003e unresponsive\" \\\n -m \"Component has been unresponsive for N cycles. Restart attempts failed.\n Last healthy: \u003ctimestamp\u003e\n Error signals: \u003cdetails\u003e\"\n```\n\nReset unresponsive_cycles to 0 when component responds normally.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/capable","created_at":"2025-12-28T09:55:41.718758-08:00","updated_at":"2025-12-30T00:33:10.653177-08:00","closed_at":"2025-12-30T00:33:10.653177-08:00","close_reason":"Health check complete: All witnesses and refineries running normally (gastown, beads)","dependencies":[{"issue_id":"gt-eph-tc2","depends_on_id":"gt-eph-hfj","type":"parent-child","created_at":"2025-12-28T09:55:41.74114-08:00","created_by":"deacon"},{"issue_id":"gt-eph-tc2","depends_on_id":"gt-eph-8fu","type":"blocks","created_at":"2025-12-28T09:55:41.796618-08:00","created_by":"deacon"},{"issue_id":"gt-eph-tc2","depends_on_id":"gt-eph-ei9","type":"blocks","created_at":"2025-12-28T09:55:41.803807-08:00","created_by":"deacon"}]} -{"id":"gt-eph-w7f","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:23:41.080528-08:00","updated_at":"2025-12-27T21:26:00.068087-08:00","deleted_at":"2025-12-27T21:26:00.068087-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"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-y0n","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:51:49.772331-08:00","updated_at":"2025-12-28T15:51:57.231065-08:00"} {"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-30T16:29:32.066879-08:00","closed_at":"2025-12-30T16:29:32.066884-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"} @@ -1100,6 +1094,7 @@ {"id":"gt-fax0","title":"test pin fix 2","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T12:15:43.240045-08:00","updated_at":"2025-12-27T21:29:56.010469-08:00","deleted_at":"2025-12-27T21:29:56.010469-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-faxkr","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 8: thorough check, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:25:07.795073-08:00","updated_at":"2025-12-27T21:26:01.907031-08:00","deleted_at":"2025-12-27T21:26:01.907031-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-fbz1z","title":"gt sling: Set status=hooked instead of pinned","description":"Update gt sling to use the new 'hooked' status when attaching work to an agent's hook.\n\n## Current Behavior\n\ngt sling sets status='pinned' on the work item.\n\n## New Behavior\n\ngt sling sets status='hooked' on the work item.\n\n## Files to Update\n\n- internal/cmd/sling.go (or wherever sling logic lives)\n- Any tests that expect pinned status after sling\n\n## CROSS-RIG DEPENDENCY\n\n**BLOCKED BY: bd-s00m.1** (Schema: Add 'hooked' as valid status)\n\nThis task cannot start until the beads schema change is deployed. The 'hooked' status must be valid before gt can use it.\n\n## Verification\n\n1. gt sling gt-xyz gastown/furiosa\n2. bd show gt-xyz → status should be 'hooked'\n3. bd ready should NOT show gt-xyz's dependents","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-28T22:17:14.108582-08:00","created_by":"stevey","updated_at":"2025-12-29T12:49:34.868196-08:00","closed_at":"2025-12-29T12:49:34.868196-08:00","close_reason":"Implemented in sling.go"} +{"id":"gt-fc0d","title":"self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.\n\nDepends: implement","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:58:52.600154-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","dependencies":[{"issue_id":"gt-fc0d","depends_on_id":"gt-q6hl","type":"parent-child","created_at":"2025-12-21T21:58:52.60252-08:00","created_by":"stevey"},{"issue_id":"gt-fc0d","depends_on_id":"gt-adc9","type":"blocks","created_at":"2025-12-21T21:58:52.603308-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-fdbh4","title":"Digest: mol-deacon-patrol","description":"Patrol complete: cleaned 1 orphaned process, all 8 sessions healthy, no stuck wisps","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:31:06.147061-08:00","updated_at":"2025-12-27T21:26:01.469404-08:00","deleted_at":"2025-12-27T21:26:01.469404-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ff9h","title":"Digest: mol-deacon-patrol","description":"Patrol 17: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:01:37.50237-08:00","updated_at":"2025-12-27T21:26:04.886323-08:00","deleted_at":"2025-12-27T21:26:04.886323-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-fgms","title":"Simplify mail wisps: remove dual-routing, use ephemeral flag","description":"\n## Context\n\ngt-lg66 implemented dual-inbox architecture with separate .beads-wisp/ directory.\nThis was over-engineered. See bd-bkul for the simpler approach.\n\n## Work\n\nOnce beads implements bd-bkul (ephemeral flag in single db):\n\n1. Revert/simplify router.go:\n - Remove resolveWispDir()\n - Remove shouldBeEphemeral() auto-detection (beads handles this)\n - Send() just passes --ephemeral flag to bd create\n\n2. Revert/simplify mailbox.go:\n - Remove wispDir field\n - Remove listFromDir/getFromDir dual-source logic\n - Remove closeInDir dual-source logic\n - Single query, beads returns both types with Source marked\n\n3. Keep in mail.go:\n - --ephemeral flag (passed through to bd)\n - (ephemeral) display indicator\n\n4. Keep in spawn.go:\n - Ephemeral: true on lifecycle messages\n\n## Depends On\n\nbd-bkul: Simplify wisp architecture in beads\n","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-24T20:08:18.111862-08:00","updated_at":"2025-12-27T21:29:45.25982-08:00","deleted_at":"2025-12-27T21:29:45.25982-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1133,6 +1128,7 @@ {"id":"gt-fw6am","title":"Digest: mol-deacon-patrol","description":"Patrol 18: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:24:57.143299-08:00","updated_at":"2025-12-27T21:26:00.010651-08:00","deleted_at":"2025-12-27T21:26:00.010651-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-fwj8y","title":"Merge: toast-1767079830359","description":"branch: polecat/toast-1767079830359\ntarget: main\nsource_issue: toast-1767079830359\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T23:37:44.765009-08:00","created_by":"gastown/polecats/toast","updated_at":"2025-12-29T23:44:37.695134-08:00","closed_at":"2025-12-29T23:44:37.695134-08:00","close_reason":"Branch not found - likely already merged"} {"id":"gt-fy11w","title":"Daemon patrol should clean stale locks","description":"The gt daemon patrol cycle should detect and clean up stale locks.\n\n## Problem\nIf daemon crashes or there are orphaned locks, they can block operations indefinitely.\n\n## Proposed Solution\nDuring patrol cycle:\n1. Check for lock files older than threshold (e.g., 5 minutes)\n2. Verify owning process is dead (check PID if stored)\n3. Remove stale locks\n4. Log cleanup for audit","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-26T23:13:37.681972-08:00","created_by":"mayor","updated_at":"2025-12-26T23:13:37.681972-08:00"} +{"id":"gt-fyt31","title":"Digest: mol-deacon-patrol","description":"Patrol 9: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:45:59.65526-08:00","updated_at":"2025-12-28T19:45:59.65526-08:00","closed_at":"2025-12-28T19:45:59.655224-08:00"} {"id":"gt-fz2o1","title":"Digest: mol-deacon-patrol","description":"Patrol 5: clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:23:14.185469-08:00","updated_at":"2025-12-26T14:23:14.185469-08:00","closed_at":"2025-12-26T14:23:14.18543-08:00"} {"id":"gt-g0cp","title":"Digest: mol-deacon-patrol","description":"Patrol OK: town quiet","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T02:46:38.594856-08:00","updated_at":"2025-12-27T21:26:05.372454-08:00","deleted_at":"2025-12-27T21:26:05.372454-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-g1ud","title":"Direct test","description":"Testing direct bd create","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T17:45:55.058067-08:00","updated_at":"2025-12-25T14:12:42.282698-08:00","deleted_at":"2025-12-25T14:12:42.282698-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} @@ -1163,12 +1159,12 @@ {"id":"gt-gastown-polecat-ace","title":"gt-gastown-polecat-ace","description":"gt-gastown-polecat-ace\n\nrole_type: polecat\nrig: gastown\nagent_state: done\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:59:45.180508-08:00","created_by":"mayor","updated_at":"2025-12-30T15:19:18.82823-08:00","closed_at":"2025-12-30T15:19:18.82823-08:00","close_reason":"nuked","deleted_at":"2025-12-30T15:19:18.796028-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-alpha","title":"gt-gastown-polecat-alpha","description":"gt-gastown-polecat-alpha\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: null","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:41:36.19828-08:00","created_by":"mayor","updated_at":"2025-12-29T21:45:13.451246-08:00","deleted_at":"2025-12-29T21:45:13.451246-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-bravo","title":"gt-gastown-polecat-bravo","description":"gt-gastown-polecat-bravo\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: null","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:41:37.373036-08:00","created_by":"mayor","updated_at":"2025-12-29T21:45:13.565657-08:00","deleted_at":"2025-12-29T21:45:13.565657-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} -{"id":"gt-gastown-polecat-capable","title":"gt-gastown-polecat-capable","description":"gt-gastown-polecat-capable\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-rbncw\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:56:09.595279-08:00","created_by":"mayor","updated_at":"2025-12-30T16:45:27.160286-08:00","closed_at":"2025-12-30T16:45:27.160286-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:27.123031-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} +{"id":"gt-gastown-polecat-capable","title":"gt-gastown-polecat-capable","description":"gt-gastown-polecat-capable\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-rbncw\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:56:09.595279-08:00","created_by":"mayor","updated_at":"2025-12-30T17:57:15.158799-08:00","closed_at":"2025-12-30T16:45:27.160286-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:27.123031-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-charlie","title":"gt-gastown-polecat-charlie","description":"gt-gastown-polecat-charlie\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: null","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:41:38.470051-08:00","created_by":"mayor","updated_at":"2025-12-29T21:45:13.679776-08:00","deleted_at":"2025-12-29T21:45:13.679776-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} -{"id":"gt-gastown-polecat-cheedo","title":"gt-gastown-polecat-cheedo","description":"gt-gastown-polecat-cheedo\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:54.800962-08:00","created_by":"mayor","updated_at":"2025-12-30T15:19:19.110477-08:00","closed_at":"2025-12-30T15:19:19.110477-08:00","close_reason":"nuked","deleted_at":"2025-12-30T15:19:19.07805-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} -{"id":"gt-gastown-polecat-dag","title":"gt-gastown-polecat-dag","description":"gt-gastown-polecat-dag\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-tvwnz\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:43.032649-08:00","created_by":"mayor","updated_at":"2025-12-30T16:45:27.317371-08:00","closed_at":"2025-12-30T16:45:27.317371-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:27.280601-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} +{"id":"gt-gastown-polecat-cheedo","title":"gt-gastown-polecat-cheedo","description":"gt-gastown-polecat-cheedo\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:54.800962-08:00","created_by":"mayor","updated_at":"2025-12-30T18:00:27.568427-08:00","closed_at":"2025-12-30T15:19:19.110477-08:00","close_reason":"nuked","deleted_at":"2025-12-30T15:19:19.07805-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} +{"id":"gt-gastown-polecat-dag","title":"gt-gastown-polecat-dag","description":"gt-gastown-polecat-dag\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-tvwnz\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:43.032649-08:00","created_by":"mayor","updated_at":"2025-12-30T17:57:23.497837-08:00","closed_at":"2025-12-30T16:45:27.317371-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:27.280601-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-delta","title":"gt-gastown-polecat-delta","description":"gt-gastown-polecat-delta\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: null","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:41:39.879592-08:00","created_by":"mayor","updated_at":"2025-12-29T21:45:13.792554-08:00","deleted_at":"2025-12-29T21:45:13.792554-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} -{"id":"gt-gastown-polecat-dementus","title":"gt-gastown-polecat-dementus","description":"gt-gastown-polecat-dementus\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-lfi2d\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:43:05.226023-08:00","created_by":"mayor","updated_at":"2025-12-30T16:45:27.469073-08:00","closed_at":"2025-12-30T16:45:27.469073-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:27.432621-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} +{"id":"gt-gastown-polecat-dementus","title":"gt-gastown-polecat-dementus","description":"gt-gastown-polecat-dementus\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-lfi2d\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:43:05.226023-08:00","created_by":"mayor","updated_at":"2025-12-30T18:01:50.296713-08:00","closed_at":"2025-12-30T16:45:27.469073-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:27.432621-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-furiosa","title":"gt-gastown-polecat-furiosa","description":"gt-gastown-polecat-furiosa\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-csbjj\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T17:54:50.716414-08:00","created_by":"mayor","updated_at":"2025-12-30T16:49:14.433594-08:00","closed_at":"2025-12-30T16:45:27.621793-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:27.586451-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-imperator","title":"gt-gastown-polecat-imperator","description":"gt-gastown-polecat-imperator\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-30T06:47:59.120921-08:00","created_by":"mayor","updated_at":"2025-12-30T15:19:19.701626-08:00","closed_at":"2025-12-30T15:19:19.701626-08:00","close_reason":"nuked","deleted_at":"2025-12-30T15:19:19.666508-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-keeper","title":"gt-gastown-polecat-keeper","description":"gt-gastown-polecat-keeper\n\nrole_type: polecat\nrig: gastown\nagent_state: done\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:59:02.304059-08:00","created_by":"mayor","updated_at":"2025-12-30T15:19:19.894024-08:00","closed_at":"2025-12-30T15:19:19.894024-08:00","close_reason":"nuked","deleted_at":"2025-12-30T15:19:19.826929-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} @@ -1177,7 +1173,7 @@ {"id":"gt-gastown-polecat-organic","title":"gt-gastown-polecat-organic","description":"gt-gastown-polecat-organic\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-30T06:48:03.048759-08:00","created_by":"mayor","updated_at":"2025-12-30T15:19:20.355896-08:00","closed_at":"2025-12-30T15:19:20.355896-08:00","close_reason":"nuked","deleted_at":"2025-12-30T15:19:20.321057-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-rictus","title":"gt-gastown-polecat-rictus","description":"gt-gastown-polecat-rictus\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-u4fh\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T17:54:58.123296-08:00","created_by":"mayor","updated_at":"2025-12-30T16:47:37.220074-08:00","closed_at":"2025-12-30T16:45:27.921668-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:27.886488-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-slit","title":"gt-gastown-polecat-slit","description":"gt-gastown-polecat-slit\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-bho9\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T17:54:55.706657-08:00","created_by":"mayor","updated_at":"2025-12-30T16:56:13.955118-08:00","closed_at":"2025-12-30T16:45:28.07169-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:28.036118-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} -{"id":"gt-gastown-polecat-toast","title":"gt-gastown-polecat-toast","description":"gt-gastown-polecat-toast\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-38doh\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:19.899125-08:00","created_by":"mayor","updated_at":"2025-12-30T16:45:28.220218-08:00","closed_at":"2025-12-30T16:45:28.220218-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:28.184484-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} +{"id":"gt-gastown-polecat-toast","title":"gt-gastown-polecat-toast","description":"gt-gastown-polecat-toast\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-38doh\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:19.899125-08:00","created_by":"mayor","updated_at":"2025-12-30T17:57:19.45926-08:00","closed_at":"2025-12-30T16:45:28.220218-08:00","close_reason":"nuked","deleted_at":"2025-12-30T16:45:28.184484-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-valkyrie","title":"gt-gastown-polecat-valkyrie","description":"gt-gastown-polecat-valkyrie\n\nrole_type: polecat\nrig: gastown\nagent_state: done\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T21:58:58.583302-08:00","created_by":"mayor","updated_at":"2025-12-30T15:19:20.90588-08:00","closed_at":"2025-12-30T15:19:20.90588-08:00","close_reason":"nuked","deleted_at":"2025-12-30T15:19:20.873687-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-polecat-warboy","title":"gt-gastown-polecat-warboy","description":"gt-gastown-polecat-warboy\n\nrole_type: polecat\nrig: gastown\nagent_state: spawning\nhook_bead: null\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-30T06:47:40.892638-08:00","created_by":"mayor","updated_at":"2025-12-30T15:19:21.040512-08:00","closed_at":"2025-12-30T15:19:21.040512-08:00","close_reason":"nuked","deleted_at":"2025-12-30T15:19:21.0084-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"} {"id":"gt-gastown-refinery","title":"Refinery for gastown - processes merge queue.","description":"Refinery for gastown - processes merge queue.\n\nrole_type: refinery\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-refinery-role\ncleanup_status: null","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-29T14:48:16.178399-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-30T15:05:50.915611-08:00"} @@ -1189,6 +1185,7 @@ {"id":"gt-gaxo.4","title":"Remove polecat state derivation from issue status","description":"**File:** polecat/manager.go (lines 556-599)\n\n**Current behavior:**\n- Switch on issue.Status to derive polecat state\n- Go decides: open/in_progress → Working, closed → Done\n\n**Fix:**\n- Polecat state comes from polecat, not inferred by Go\n- Polecat signals state via mail or explicit field\n- Or: remove state derivation entirely, just report issue status\n\n**Lines to refactor:**\n- manager.go:576-588 (switch statement)\n\n**Priority:** P2 - less critical than daemon/heartbeat logic","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T23:59:05.85152-08:00","updated_at":"2025-12-27T21:29:55.63759-08:00","dependencies":[{"issue_id":"gt-gaxo.4","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:05.852006-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.63759-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gaxo.5","title":"Design Deacon molecule health-check step","description":"**Context:** After removing Go heuristics, Deacon molecule needs the logic.\n\n**New molecule step: health-scan**\n\nClaude executes:\n1. Check Witness heartbeat: gt witness status \u003crig\u003e\n2. Check Refinery heartbeat: gt refinery status \u003crig\u003e\n3. For each, assess: responsive? stuck? needs restart?\n4. If unresponsive for N cycles, send escalation mail\n\n**Key difference from Go approach:**\n- Claude makes the judgment call, not hardcoded thresholds\n- Claude can read context (what was the agent working on?)\n- Claude can ask questions or check additional signals\n- Thresholds come from molecule config, not Go constants\n\n**Deliverables:**\n- Update mol-deacon-patrol health-scan step\n- Add configurable thresholds as molecule variables\n- Test with simulated stuck agents","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T23:59:07.247548-08:00","updated_at":"2025-12-27T21:29:55.629245-08:00","dependencies":[{"issue_id":"gt-gaxo.5","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:07.248049-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.629245-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gaxo.6","title":"Remove lifecycle intent parsing from Go","description":"daemon/lifecycle.go parses mail subjects with regex looking for restart/shutdown/cycle keywords, then executes actions. Fix: use structured message types in mail body instead of parsing subjects. Go reads action field, does not interpret text.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T23:59:15.765947-08:00","updated_at":"2025-12-27T21:29:52.72171-08:00","dependencies":[{"issue_id":"gt-gaxo.6","depends_on_id":"gt-gaxo","type":"parent-child","created_at":"2025-12-23T23:59:15.766409-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.72171-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-gaza0","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:33:44.544221-08:00","updated_at":"2025-12-29T22:33:44.544221-08:00","closed_at":"2025-12-29T22:33:44.544184-08:00"} {"id":"gt-gby","title":"gt handoff: Unified agent lifecycle command","description":"## Summary\n\nUnified `gt handoff` command for ALL agent types to request lifecycle actions.\n\n## Usage\n\ngt handoff # Context-aware default\ngt handoff --shutdown # Terminate, cleanup, don't restart\ngt handoff --cycle # Restart with handoff mail\ngt handoff --restart # Fresh restart, no handoff\n\n## Context-Aware Defaults\n\n| Agent Type | Default | Reason |\n|------------|---------|--------|\n| Polecat | --shutdown | Ephemeral, work is done |\n| Witness | --cycle | Long-running, context full |\n| Refinery | --cycle | Long-running, context full |\n| Mayor | --cycle | Long-running, context full |\n| Crew | (sends mail only) | Human-managed |\n\n## What gt handoff Does\n\n1. **Verify safe to stop**\n - Git state clean (no uncommitted changes)\n - Work handed off (PR exists for polecats)\n\n2. **Send handoff mail to self** (for cycle/restart)\n - Captures current state\n - New session will read this\n\n3. **Send lifecycle request to manager**\n - Polecats/Refinery → Witness\n - Witness/Mayor → Daemon\n - Format: mail to \u003cmanager\u003e with action type\n\n4. **Set state: requesting_\u003caction\u003e**\n - Lifecycle manager checks this before acting\n\n5. **Wait for termination**\n - Don't self-exit - let manager kill session\n - Ensures clean handoff\n\n## Lifecycle Request Flow\n\nAgent Lifecycle Manager\n | |\n | 1. gt handoff --cycle |\n | a. Verify git clean |\n | b. Send handoff mail to self |\n | c. Set requesting_cycle=true |\n | d. Send lifecycle request |\n |------------------------------------→|\n | |\n | 2. Receive request\n | 3. Verify state |\n | 4. Kill session |\n | 5. Start new |\n | (for cycle) |\n | |\n | New session reads handoff |\n | Resumes work |\n\n## Who Manages Whom\n\n| Agent | Sends lifecycle request to |\n|-------|---------------------------|\n| Polecat | \u003crig\u003e/witness |\n| Refinery | \u003crig\u003e/witness |\n| Witness | daemon/ |\n| Mayor | daemon/ |\n\n## Implementation\n\n1. Detect current role (polecat, witness, refinery, mayor, crew)\n2. Apply context-aware default if no flag specified\n3. Run pre-flight checks (git clean, work handed off)\n4. Send handoff mail to self (if cycling)\n5. Send lifecycle request to appropriate manager\n6. Set requesting_\u003caction\u003e in state.json\n7. Wait (manager will kill us)\n\n## For Polecats (--shutdown)\n\nAdditional cleanup after kill:\n- Witness removes worktree\n- Witness deletes polecat branch\n- Polecat ceases to exist\n\n## Related Issues\n\n- gt-99m: Daemon (handles Mayor/Witness lifecycle)\n- gt-7ik: Ephemeral polecats (polecat cleanup)\n- gt-eu9: Witness session cycling","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T11:39:40.806863-08:00","updated_at":"2025-12-27T21:29:54.203457-08:00","dependencies":[{"issue_id":"gt-gby","depends_on_id":"gt-7ik","type":"blocks","created_at":"2025-12-18T11:39:46.423945-08:00","created_by":"daemon"},{"issue_id":"gt-gby","depends_on_id":"gt-eu9","type":"blocks","created_at":"2025-12-18T11:39:46.547204-08:00","created_by":"daemon"},{"issue_id":"gt-gby","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T11:50:24.142182-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.203457-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-gcnnr","title":"Add logging for silently ignored errors","description":"attached_args: Add logging for silently ignored errors\n\nAdd logging for silently ignored errors.\n\n## Problem\nMany places use `_ =` pattern to ignore errors without any logging, making debugging difficult.\n\n## Files to modify\n- internal/cmd/start.go (lines 167, 322-323, 429, 747-753, 886-888)\n- internal/cmd/polecat.go (search for `_ =`)\n- internal/session/manager.go (lines 140-154)\n- internal/refinery/manager.go (line 399)\n- internal/keepalive/keepalive.go (document as intentional)\n\n## Implementation options\n\n### Option A: Add comments explaining safety\n```go\n_ = m.saveState(ref) // Non-fatal: state will be recreated on next run\n```\n\n### Option B: Log warnings (preferred for important operations)\n```go\nif err := m.saveState(ref); err != nil {\n log.Printf(\"warning: failed to save state: %v\", err)\n}\n```\n\n## Guidelines\n- Use logging for: state saves, config writes, cleanup operations\n- Use comments for: truly benign operations (e.g., closing already closed file)\n- keepalive is intentionally best-effort - add package-level comment\n\n## Acceptance criteria\n- [ ] All `_ =` in start.go have comment OR logging\n- [ ] All `_ =` in session/manager.go have comment OR logging \n- [ ] refinery/manager.go:399 has logging\n- [ ] keepalive package has doc comment explaining best-effort design\n- [ ] grep '`_ =`' shows all have justification\n- [ ] go build ./... passes","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:43:13.787806-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T16:40:19.539625-08:00","closed_at":"2025-12-28T16:40:19.539625-08:00"} {"id":"gt-gczi","title":"Digest: mol-deacon-patrol","description":"Patrol 20 - handoff threshold reached","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:11:34.570635-08:00","updated_at":"2025-12-27T21:26:04.408676-08:00","deleted_at":"2025-12-27T21:26:04.408676-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1295,10 +1292,13 @@ {"id":"gt-hlaaf","title":"Day 1.7: Define per-rig agent bead ID pattern","description":"Document and implement the agent bead ID pattern for per-rig agents.\n\nPattern: gt-\u003crole\u003e-\u003crig\u003e\nExamples:\n- gt-witness-gastown\n- gt-refinery-gastown\n- gt-refinery-beads\n- gt-polecat-gastown-nux\n\nTown-level agents (no rig):\n- gt-mayor\n- gt-deacon\n\nThis pattern enables:\n- Consistent lookup: bd show gt-witness-gastown\n- Routing: routes.jsonl maps prefixes\n- Filtering: bd list --type=agent --rig=gastown\n\nUpdate:\n- agent-as-bead.md with examples\n- bd create --type=agent to validate pattern","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T22:01:43.64279-08:00","created_by":"mayor","updated_at":"2025-12-28T00:09:45.958118-08:00","closed_at":"2025-12-28T00:09:45.958118-08:00","dependencies":[{"issue_id":"gt-hlaaf","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T22:02:45.168539-08:00","created_by":"daemon"},{"issue_id":"gt-hlaaf","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T23:32:42.479886-08:00","created_by":"daemon"}]} {"id":"gt-hlz0e","title":"Digest: mol-deacon-patrol","description":"Patrol 11: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:18:13.342103-08:00","updated_at":"2025-12-27T21:26:03.54429-08:00","deleted_at":"2025-12-27T21:26:03.54429-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hoyd","title":"Merge: gt-rana.1","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-rana.1\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T15:51:03.089517-08:00","updated_at":"2025-12-27T21:27:22.617826-08:00","deleted_at":"2025-12-27T21:27:22.617826-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} +{"id":"gt-hpmb1","title":"Digest: mol-deacon-patrol","description":"Patrol 16: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:35:44.801254-08:00","updated_at":"2025-12-29T22:35:44.801254-08:00","closed_at":"2025-12-29T22:35:44.801217-08:00","dependencies":[{"issue_id":"gt-hpmb1","depends_on_id":"gt-eph-016","type":"parent-child","created_at":"2025-12-29T22:35:44.802203-08:00","created_by":"deacon"}]} {"id":"gt-hpy9","title":"Merge: gt-o3is","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-o3is\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T19:32:41.142903-08:00","updated_at":"2025-12-27T21:27:22.426782-08:00","deleted_at":"2025-12-27T21:27:22.426782-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} +{"id":"gt-hq9lx","title":"Digest: mol-deacon-patrol","description":"Patrol 13: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:35:09.497504-08:00","updated_at":"2025-12-29T22:35:09.497504-08:00","closed_at":"2025-12-29T22:35:09.497473-08:00"} {"id":"gt-hqymv","title":"Digest: mol-deacon-patrol","description":"Patrol 9: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:04.952768-08:00","updated_at":"2025-12-25T11:05:04.952768-08:00","closed_at":"2025-12-25T11:05:04.952741-08:00"} {"id":"gt-hr2bg","title":"Digest: mol-deacon-patrol","description":"Patrol 4: gastown+beads witnesses/refineries healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:38:43.666431-08:00","updated_at":"2025-12-27T21:26:00.912967-08:00","deleted_at":"2025-12-27T21:26:00.912967-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hrgpg","title":"Unified Beads Namespace - prefix-based routing across town","description":"Vision: Run bd commands from anywhere in town, with prefix-based routing.\n\nCurrent state:\n- Town beads at ~/gt/.beads/ with hq-* prefix\n- Rig beads at ~/gt/\u003crig\u003e/mayor/rig/.beads/ with rig-specific prefixes (gt-, bd-, wy-, etc.)\n- Redirects allow agents to use specific beads location\n- No automatic prefix-based routing\n\nDesired state:\n- bd show gt-xyz from ANYWHERE in town → routes to gastown beads\n- bd show hq-abc from ANYWHERE in town → routes to town beads \n- bd show wy-def from ANYWHERE in town → routes to wyvern beads\n- Prefix determines beads location automatically\n\nImplementation options:\n1. Registry file at town root mapping prefix → beads location\n2. bd wrapper/hook that reads prefix and routes\n3. Unified store with namespace prefixes (more invasive)\n\nRelated work:\n- gt-0pdhj: Remove hardcoded gastown dependencies\n- Template fixes needed for deacon, witness, refinery CLAUDE.md","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-26T18:35:49.567861-08:00","updated_at":"2025-12-27T21:29:45.806641-08:00","deleted_at":"2025-12-27T21:29:45.806641-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} +{"id":"gt-hrhts","title":"Merge: cheedo-1767146245543","description":"branch: polecat/cheedo-1767146245543\ntarget: main\nsource_issue: cheedo-1767146245543\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T18:00:27.282044-08:00","created_by":"gastown/polecats/cheedo","updated_at":"2025-12-30T18:00:27.282044-08:00"} {"id":"gt-hs6y","title":"Add 'gt account list' command","description":"Show registered accounts from accounts.yaml. Mark default with asterisk. Show handle, email, description.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:18.277191-08:00","updated_at":"2025-12-27T21:29:56.192362-08:00","dependencies":[{"issue_id":"gt-hs6y","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:34.631592-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.192362-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-hshfy","title":"Digest: mol-deacon-patrol","description":"P15","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:26:19.128265-08:00","updated_at":"2025-12-27T21:26:01.618206-08:00","deleted_at":"2025-12-27T21:26:01.618206-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-htto","title":"Heartbeat convention: simple liveness signal for agents","description":"Lightweight liveness signal extracted from Deacon epic (gt-5af).\n\n**Implementation**: Each agent writes a timestamp file on activity:\n```bash\necho '{\"ts\":\"'$(date -Iseconds)'\"}' \u003e ~/gt/\u003crole\u003e/heartbeat.json\n```\n\n**Integration points**:\n- SessionStart hook writes heartbeat\n- Periodic activity (mail check, work completion) refreshes it\n- `gt status` shows staleness (e.g., 'mayor: 5m ago')\n\n**Weight**: ~5 lines per agent\n**Value**: Quick debugging - see which agents are active at a glance\n\nNo monitoring daemon needed - human checks `gt status` when curious.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-20T20:40:45.459903-08:00","updated_at":"2025-12-20T20:40:45.459903-08:00"} @@ -1318,10 +1318,8 @@ {"id":"gt-i3deo","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 18: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:48:00.534606-08:00","updated_at":"2025-12-27T21:26:01.328895-08:00","deleted_at":"2025-12-27T21:26:01.328895-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-i4i2","title":"Update deacon.md.tmpl with correct molecule commands","description":"The deacon prompt references commands that don't exist:\n- gt mol bond → should be bd mol run or gt mol arm\n- gt mol status → needs gt mol command tree first\n\nUpdate after gt mol command tree is implemented.\n\nDepends on: gt mol command tree issue","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T13:12:26.401739-08:00","updated_at":"2025-12-27T21:29:53.209031-08:00","dependencies":[{"issue_id":"gt-i4i2","depends_on_id":"gt-x74c","type":"blocks","created_at":"2025-12-22T13:12:35.69774-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.209031-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-i4kq","title":"Update templates for Propulsion Principle","description":"Overhaul agent prompts to embody the Universal Gas Town Propulsion Principle:\n\n\u003e If you find something on your hook, YOU RUN IT.\n\nTemplates to update:\n- [ ] deacon.md.tmpl - Check hook first, no decision logic\n- [ ] polecat.md.tmpl - Propulsion startup, follow molecule\n- [ ] witness.md.tmpl - Sling wisps when spawning agents\n- [ ] refinery.md.tmpl - Accept slung epics\n\nKey changes:\n1. Remove 'should I run this?' decision points\n2. Add 'check your hook' as step 1 of startup\n3. Make molecule-following the default mode\n4. Simplify - agents don't think, they execute","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T03:17:46.464968-08:00","updated_at":"2025-12-27T21:29:53.251839-08:00","dependencies":[{"issue_id":"gt-i4kq","depends_on_id":"gt-4ev4","type":"blocks","created_at":"2025-12-22T12:10:42.245621-08:00","created_by":"daemon"},{"issue_id":"gt-i4kq","depends_on_id":"gt-uym5","type":"blocks","created_at":"2025-12-22T12:10:42.320803-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.251839-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-i4lo","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- gt-test123 - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-21T21:48:26.320963-08:00","updated_at":"2025-12-27T21:29:56.462098-08:00","deleted_at":"2025-12-27T21:29:56.462098-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-i5bbp","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:49:59.037423-08:00","updated_at":"2025-12-25T20:49:59.037423-08:00","closed_at":"2025-12-25T20:49:59.037377-08:00"} {"id":"gt-i5gkw","title":"Digest: mol-deacon-patrol","description":"Patrol complete: inbox empty, 2 polecats working, all agents healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:00:03.018473-08:00","updated_at":"2025-12-27T23:00:03.018473-08:00","closed_at":"2025-12-27T23:00:03.018437-08:00"} -{"id":"gt-i60n0","title":"Digest: mol-deacon-patrol","description":"Patrol 12: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:34:51.442287-08:00","updated_at":"2025-12-29T22:34:51.442287-08:00","closed_at":"2025-12-29T22:34:51.442253-08:00"} {"id":"gt-i6b9","title":"Merge: gt-cp2s","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-cp2s\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T23:45:29.171329-08:00","updated_at":"2025-12-27T21:27:22.485068-08:00","deleted_at":"2025-12-27T21:27:22.485068-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-i6jvc","title":"Config directory and schema for messaging","description":"Create ~/gt/config/ directory structure for messaging configuration.\n\n## Deliverables\n\n1. Create ~/gt/config/ directory\n2. Define JSON schema for lists.json:\n ```json\n {\n \"oncall\": [\"mayor/\", \"gastown/witness\"],\n \"cleanup/gastown\": [\"gastown/witness\", \"deacon/\"]\n }\n ```\n3. Define JSON schema for queues.json (if separate from lists)\n4. Add config loading utility in internal/config/\n\n## Acceptance\n- Config directory exists\n- Schema documented\n- Load/parse functions work","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:51:36.803749-08:00","updated_at":"2025-12-28T14:07:37.693255-08:00","closed_at":"2025-12-28T14:07:37.693255-08:00"} {"id":"gt-i6k1","title":"Clean up duplicate patrol protos (gt-qflq, gt-iep9)","description":"There are duplicate protos for patrol molecules:\n\n## Duplicates\n\n| Old Proto | New Proto | Name |\n|-----------|-----------|------|\n| gt-qflq | mol-witness-patrol | mol-witness-patrol |\n| gt-iep9 | mol-deacon-patrol | mol-deacon-patrol |\n\nThe old gt-* prefix protos were created before the formula cooking system.\nThe new mol-* prefix protos were created by `bd cook`.\n\n## Action\n\n1. Close or delete the old gt-* protos\n2. Update any references to use the new mol-* protos\n3. Verify `bd mol list` shows clean output\n\n## Root Cause\n\nThe bd cook command uses the formula name as the proto ID (mol-*), \nnot the project prefix (gt-*). This is probably correct behavior,\nbut means we have legacy protos to clean up.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T13:50:11.424341-08:00","updated_at":"2025-12-27T21:29:55.510323-08:00","deleted_at":"2025-12-27T21:29:55.510323-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1350,7 +1348,6 @@ {"id":"gt-idt8f","title":"Digest: mol-deacon-patrol","description":"P13: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:59:21.269231-08:00","updated_at":"2025-12-25T19:59:21.269231-08:00","closed_at":"2025-12-25T19:59:21.269178-08:00"} {"id":"gt-idxr5","title":"Digest: mol-deacon-patrol","description":"Patrol 5: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:49:37.149631-08:00","updated_at":"2025-12-25T20:49:37.149631-08:00","closed_at":"2025-12-25T20:49:37.149584-08:00"} {"id":"gt-ie33.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-ie33\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T00:10:09.989188-08:00","updated_at":"2025-12-27T21:29:55.620979-08:00","deleted_at":"2025-12-27T21:29:55.620979-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-iep9","title":"mol-deacon-patrol","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nDeacon patrol molecule template. Label: template","status":"tombstone","priority":4,"issue_type":"epic","created_at":"2025-12-21T17:50:22.545763-08:00","updated_at":"2025-12-25T11:44:16.881599-08:00","deleted_at":"2025-12-25T11:44:16.881599-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-iep9.1","title":"inbox-check","description":"Handle callbacks from agents. Check gt mail inbox, process lifecycle requests.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T17:50:57.090986-08:00","updated_at":"2025-12-25T11:44:16.881599-08:00","deleted_at":"2025-12-25T11:44:16.881599-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-iep9.7","title":"loop-or-exit","description":"Decision: burn and loop if context low, exit for respawn if context high.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T17:51:04.755716-08:00","updated_at":"2025-12-25T11:44:16.881599-08:00","deleted_at":"2025-12-25T11:44:16.881599-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-ifxvi","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T14:24:01.913738-08:00","updated_at":"2025-12-25T14:24:01.913738-08:00","closed_at":"2025-12-25T14:24:01.913706-08:00"} @@ -1362,7 +1359,6 @@ {"id":"gt-ikyh","title":"Digest: mol-deacon-patrol","description":"Patrol #3: Stable, no changes","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:30:26.503345-08:00","updated_at":"2025-12-27T21:26:04.375716-08:00","deleted_at":"2025-12-27T21:26:04.375716-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ikyo1","title":"Day 1.1: Add type=agent to bead schema","description":"Add agent as a valid bead type in the schema. This is the foundation for agent-as-bead.\n\nParent: gt-d0jqp","notes":"Re-opened: Close reason referenced non-existent commit 927e8374. Type=agent not yet implemented in bd CLI.","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-27T20:57:54.914343-08:00","created_by":"mayor","updated_at":"2025-12-28T00:09:42.962001-08:00","closed_at":"2025-12-28T00:09:42.962001-08:00","dependencies":[{"issue_id":"gt-ikyo1","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.539952-08:00","created_by":"daemon"}]} {"id":"gt-il2p7","title":"bd update --claim for work queue semantics","description":"Atomic claim operation for work queue messages.\n\n## Deliverables\n\n1. Add --claim flag to bd update\n2. Atomic operation:\n - Sets assignee to claimer\n - Sets status to in_progress\n - Fails if already claimed\n3. Conflict detection:\n - If already claimed, return error: \"already claimed by X\"\n4. Integration with gt mail for queue messages\n\n## Example\n```bash\ngt mail queue cleanup/gastown # See available work\nbd update msg-xxx --claim # Claim it atomically\n# Returns error if someone else claimed first\n```\n\n## Dependencies\n- queue: shared storage (gt-???)\n\n## Acceptance\n- --claim sets assignee + status atomically\n- Double-claim returns clear error\n- Works with queue messages","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/organic","created_at":"2025-12-26T14:52:08.186488-08:00","updated_at":"2025-12-30T10:42:07.313577-08:00","closed_at":"2025-12-30T10:42:07.313577-08:00","close_reason":"Implemented --claim flag for bd update: sets assignee + status atomically, fails if already claimed. Branch: feature/claim-flag pushed to beads repo.","dependencies":[{"issue_id":"gt-il2p7","depends_on_id":"gt-tnap3","type":"blocks","created_at":"2025-12-26T14:53:08.553425-08:00","created_by":"daemon"}]} -{"id":"gt-il5v2","title":"Digest: mol-deacon-patrol","description":"Patrol 14: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:48:00.545429-08:00","updated_at":"2025-12-28T19:48:00.545429-08:00","closed_at":"2025-12-28T19:48:00.545386-08:00"} {"id":"gt-ilav","title":"Polecat Lifecycle Events: Refinery-Witness Coordination","description":"## Problem\n\nPolecat work completion is currently treated as a single event (MR submission), but the true completion is when the Refinery merges the work. This creates a lifecycle gap:\n\n1. Polecat submits MR → considered \"done\" by Witness\n2. But MR might fail to merge (conflicts, test failures)\n3. No one notifies anyone when merge actually succeeds\n\n## Solution: Two-Event Lifecycle\n\n**Event 1: MR Submitted**\n- `gt mq submit` notifies Witness\n- Witness verifies submission was clean\n- Polecat can go idle (but worktree retained)\n- If submission had issues, Witness can help\n\n**Event 2: MR Merged**\n- Refinery sends `LIFECYCLE: work merged` to Witness\n- Witness updates polecat state to `merged`\n- Worktree now eligible for full cleanup/recycling\n\n## Village Sibling Watch\n\nFor robustness, patrol roles check on their siblings:\n- Refinery checks Witness via `gt peek`\n- Witness checks Refinery via `gt peek`\n- Creates defense in depth - if primary notification fails, someone catches it\n\n## Recovery\n\nIf Refinery misses sending lifecycle notification:\n- Witness polecat-scan can detect: polecat in mr_submitted but MR shows merged\n- Deacon orphan-check can detect: merged MRs with stale polecats","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-23T12:06:56.746185-08:00","updated_at":"2025-12-27T21:29:56.026982-08:00","deleted_at":"2025-12-27T21:29:56.026982-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-ilav.1","title":"Refinery: Add lifecycle-notify step to patrol","description":"After successful merge in handleSuccess(), send lifecycle notification to Witness.\n\n## Implementation\n\n1. Add new mail type: `LIFECYCLE: work merged`\n2. In engineer.go handleSuccess(), after closing MR and source issue:\n ```\n gt mail send \u003crig\u003e/witness -s \"LIFECYCLE: work merged\" -m \"\n Worker: \u003cpolecat\u003e\n MR: \u003cmr-id\u003e\n Issue: \u003csource-issue\u003e\n Commit: \u003cmerge-commit\u003e\n Action: Polecat work merged. Worktree eligible for recycling.\n \"\n ```\n\n3. Update mol-refinery-patrol to include lifecycle-notify step between merge-push and loop-check\n\n## Acceptance\n- Successful merges send mail to Witness\n- Mail includes worker name, MR id, source issue, commit SHA","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T12:07:46.715807-08:00","updated_at":"2025-12-28T22:36:25.392959-08:00","closed_at":"2025-12-28T22:36:25.392959-08:00","dependencies":[{"issue_id":"gt-ilav.1","depends_on_id":"gt-ilav","type":"parent-child","created_at":"2025-12-23T12:07:46.716238-08:00","created_by":"daemon"}]} {"id":"gt-ilav.2","title":"Witness: Handle LIFECYCLE work-merged mail","description":"Witness should process the `LIFECYCLE: work merged` notification from Refinery.\n\n## Implementation\n\n1. In Witness mail processing, add handler for subject containing \"LIFECYCLE: work merged\"\n2. Parse worker name from mail body\n3. Update polecat state to `merged` (new state - see sibling task)\n4. Log completion for metrics\n5. Worktree is now eligible for cleanup on next gc cycle\n\n## Acceptance\n- Witness correctly parses and handles work-merged mail\n- Polecat state updated to merged\n- No action taken if polecat already cleaned up (idempotent)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T12:07:47.878019-08:00","updated_at":"2025-12-28T22:36:25.376524-08:00","closed_at":"2025-12-28T22:36:25.376524-08:00","dependencies":[{"issue_id":"gt-ilav.2","depends_on_id":"gt-ilav","type":"parent-child","created_at":"2025-12-23T12:07:47.880327-08:00","created_by":"daemon"},{"issue_id":"gt-ilav.2","depends_on_id":"gt-ilav.1","type":"blocks","created_at":"2025-12-23T12:08:06.585766-08:00","created_by":"daemon"},{"issue_id":"gt-ilav.2","depends_on_id":"gt-ilav.5","type":"blocks","created_at":"2025-12-23T12:08:06.667459-08:00","created_by":"daemon"}]} @@ -1388,14 +1384,12 @@ {"id":"gt-ipwdc","title":"Merge: furiosa-1767082251065","description":"branch: polecat/furiosa-1767082251065\ntarget: main\nsource_issue: furiosa-1767082251065\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T00:14:26.025544-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-30T10:06:56.852964-08:00","closed_at":"2025-12-30T10:06:56.852964-08:00","close_reason":"Branch merged to main"} {"id":"gt-iq486","title":"Digest: mol-deacon-patrol","description":"Patrol 17: all clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:59.619474-08:00","updated_at":"2025-12-27T21:26:03.364297-08:00","deleted_at":"2025-12-27T21:26:03.364297-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-iqlfe","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T16:03:57.38308-08:00","updated_at":"2025-12-27T21:26:03.099958-08:00","deleted_at":"2025-12-27T21:26:03.099958-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-ir74","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- gt-1wmw - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-24T22:55:01.794859-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-is4fi","title":"Refactor formula transformation pipeline to shared helper","description":"The formula transformation pipeline (control flow, advice, expansions, aspects) is duplicated between cook.go and mol_bond.go. Should be extracted to a shared function in the formula package.\n\nCurrent duplication in:\n- cmd/bd/cook.go:96-136\n- cmd/bd/mol_bond.go:598-633\n\nSuggested approach:\n- Add formula.Transform(resolved *Formula, parser *Parser) (*Formula, error) \n- Handles all transformation steps in order\n- Both cook.go and mol_bond.go call this single function","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-25T16:50:55.343049-08:00","updated_at":"2025-12-28T22:34:14.426995-08:00","closed_at":"2025-12-28T22:34:14.426995-08:00","dependencies":[{"issue_id":"gt-is4fi","depends_on_id":"gt-8tmz.25","type":"discovered-from","created_at":"2025-12-25T16:50:55.344455-08:00","created_by":"daemon"}]} {"id":"gt-isje","title":"Implement mol bond command for dynamic child molecules","description":"Add 'gt mol bond' command that creates child molecules at runtime with variable substitution.\n\nUsage from mol-witness-patrol survey-workers step:\n```bash\nbd mol bond mol-polecat-arm $PATROL_WISP_ID \\\n --ref arm-$polecat \\\n --var polecat_name=$polecat \\\n --var rig=\u003crig\u003e\n```\n\nThis creates child wisps like patrol-x7k.arm-ace with variables expanded.\n\nImplementation:\n1. Add 'bond' subcommand to mol command\n2. Accept: proto ID, parent ID, --ref for child suffix, --var key=value pairs\n3. Call InstantiateMolecule with Context map populated from --var flags\n4. Return created child ID\n\nCritical for Christmas Ornament pattern - without this, Witness cannot spawn per-polecat inspection arms.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T21:35:56.192637-08:00","updated_at":"2025-12-27T21:29:52.828799-08:00","deleted_at":"2025-12-27T21:29:52.828799-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-it0e","title":"Merge: gt-oiv0","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-oiv0\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T22:09:36.611121-08:00","updated_at":"2025-12-27T21:27:22.551542-08:00","deleted_at":"2025-12-27T21:27:22.551542-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-itsed","title":"Digest: mol-deacon-patrol","description":"Patrol 10: all healthy, doctor pass","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:33:16.71908-08:00","updated_at":"2025-12-27T21:26:00.776564-08:00","deleted_at":"2025-12-27T21:26:00.776564-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-iu23","title":"Polecat doesn't auto-start after spawn inject - requires manual nudge","description":"## Problem\n\nAfter `gt spawn --issue \u003cid\u003e --create`, the polecat session shows Claude Code started with the injected prompt, but Claude doesn't begin processing. The prompt just sits there until manually nudged.\n\n## Evidence\n\n```\n$ gt spawn --issue gt-rixa --rig gastown --create\n...\n✓ Session started. Attach with: gt session at gastown/furiosa\n Polecat nudged to start working\n Witness notified to monitor startup\n```\n\nSession shows:\n```\n\u003e You have a work assignment. Run 'gt mail inbox' to see it, then start\n working on issue gt-rixa.\n\n ⏵⏵ bypass permissions on (shift+tab to cycle)\n```\n\nBut Claude doesn't respond. Manual nudge required:\n```\n$ gt nudge gt-gastown-furiosa \"Please start working...\"\n```\n\nAfter nudge, polecat immediately starts working correctly.\n\n## Hypothesis\n\nThe spawn inject happens before Claude Code is fully initialized. The text arrives in the input buffer, but Claude hasn't started listening yet. By the time Claude starts, the input has already been 'consumed' as initial prompt text but not submitted.\n\n## Resolution Plan\n\nThis will be solved by the **polecat molecule workflow** (mol-polecat-work), which provides structured lifecycle management. The molecule approach handles startup, work, and shutdown as discrete steps with proper state tracking.\n\n**Blocked on**: beads/crew/dave completing ephemeral molecules (bd mol bond, ephemeral beads repo).\n\n## Workaround\n\nFor now, use `gt nudge` if a polecat doesn't start within ~30 seconds of spawn.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-21T14:06:27.375686-08:00","updated_at":"2025-12-27T21:29:53.535065-08:00","deleted_at":"2025-12-27T21:29:53.535065-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-iua8","title":"Merge: gt-frs","description":"branch: polecat/Slit\ntarget: main\nsource_issue: gt-frs\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T16:30:05.529099-08:00","updated_at":"2025-12-27T21:27:22.947103-08:00","deleted_at":"2025-12-27T21:27:22.947103-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} -{"id":"gt-iudqo","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:05:57.818656-08:00","updated_at":"2025-12-28T22:33:21.96702-08:00","closed_at":"2025-12-28T22:33:21.96702-08:00"} {"id":"gt-iva20","title":"Liftoff test: Add timestamp comment to manager.go","description":"Simple liftoff test task.\n\nAdd a comment at the top of internal/polecat/manager.go with the current timestamp, like:\n// Liftoff test: \u003ctimestamp\u003e\n\nThis tests the full polecat → refinery → witness cycle.","status":"hooked","priority":1,"issue_type":"task","created_at":"2025-12-28T16:18:27.905345-08:00","created_by":"stevey","updated_at":"2025-12-28T16:18:40.555384-08:00"} {"id":"gt-ivf6w","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T15:56:13.720896-08:00","updated_at":"2025-12-28T15:56:13.720896-08:00","closed_at":"2025-12-28T15:56:13.720857-08:00"} {"id":"gt-ivtk7","title":"Digest: mol-deacon-patrol","description":"Patrol 20: healthy - handoff cycle","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:25:40.059953-08:00","updated_at":"2025-12-27T21:25:59.977735-08:00","deleted_at":"2025-12-27T21:25:59.977735-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1491,7 +1485,6 @@ {"id":"gt-kdkz0","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Quick cycle, all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:04:32.188343-08:00","updated_at":"2025-12-27T21:26:03.033879-08:00","deleted_at":"2025-12-27T21:26:03.033879-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-kdy77","title":"gt crew add: Agent bead uses hardcoded gt- prefix instead of rig prefix","description":"When running 'gt crew add \u003cname\u003e --rig beads', the command tries to create an agent bead with ID 'gt-crew-beads-\u003cname\u003e' but beads rig uses 'bd' prefix.\n\nError: issue ID 'gt-crew-beads-grip' does not match configured prefix 'bd'\n\nThe agent bead ID should use the target rig's prefix, not hardcode 'gt-'.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-29T14:55:48.953521-08:00","created_by":"stevey","updated_at":"2025-12-29T15:28:36.394392-08:00","closed_at":"2025-12-29T15:28:36.394392-08:00","close_reason":"Fixed: Added WithPrefix variants to agent bead ID functions, updated crew_add.go, rig/manager.go, and doctor/agent_beads_check.go to use rig's configured prefix"} {"id":"gt-kebk4","title":"Digest: mol-deacon-patrol","description":"Patrol 20: all healthy - handoff","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:36:31.978815-08:00","updated_at":"2025-12-29T22:36:31.978815-08:00","closed_at":"2025-12-29T22:36:31.978777-08:00","close_reason":"Squashed from 9 wisps","dependencies":[{"issue_id":"gt-kebk4","depends_on_id":"gt-eph-oh1","type":"parent-child","created_at":"2025-12-29T22:36:31.979754-08:00","created_by":"deacon"}]} -{"id":"gt-keqh","title":"self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.\n\nDepends: implement","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:56:18.535003-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-ker6f","title":"Code review: await-signal command (gt-vdprb.1)","description":"Review the await-signal molecule step implementation in internal/cmd/molecule_await_signal.go","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/nux","created_at":"2025-12-29T22:20:37.388958-08:00","created_by":"gastown/refinery","updated_at":"2025-12-29T22:26:48.4853-08:00","closed_at":"2025-12-29T22:26:48.4853-08:00","close_reason":"Code review complete: ACCEPT. Implementation is functional and safe. Found minor issues: (1) incomplete backoff iteration tracking (Medium), (2) stub GetCurrentStepBackoff function (Low), (3) potential goroutine leak on edge cases (Low), (4) no stderr capture (Low). No security or crash issues. Backoff enhancement can be filed as follow-up if needed.","dependencies":[{"issue_id":"gt-ker6f","depends_on_id":"gt-2ocgh","type":"blocks","created_at":"2025-12-29T22:21:05.105719-08:00","created_by":"daemon"}]} {"id":"gt-kfznm","title":"Refinery: Send MERGED notification to witness after merge","description":"During liftoff test (gt-j0gx2), observed that refinery:\n1. Received MERGE_READY for nux\n2. Fetched, rebased, resolved conflicts correctly\n3. Ran tests (passed)\n4. Merged to main and pushed\n5. Deleted polecat branch\n\nBut did NOT:\n- Send MERGED mail to witness\n- Close the MR bead (gt-5qkah)\n\nThe mol-refinery-patrol.formula.toml documents this step but the agent didn't execute it.\n\nImpact:\n- Witness never receives MERGED signal\n- Polecat worktree never gets nuked\n- MR beads accumulate as open\n\nFix:\nAfter successful merge+push, refinery must:\n```bash\ngt mail send \u003crig\u003e/witness -s \"MERGED \u003cpolecat\u003e\" -m \"...\"\nbd close \u003cmr-bead\u003e --reason \"Merged to main\"\n```","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-28T16:26:08.423116-08:00","created_by":"stevey","updated_at":"2025-12-28T16:30:17.040435-08:00","closed_at":"2025-12-28T16:30:17.040435-08:00"} {"id":"gt-kg4ne","title":"Digest: mol-deacon-patrol","description":"Patrol 17: All healthy, 2 mayor handoffs observed","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T18:39:00.24628-08:00","updated_at":"2025-12-27T21:26:02.805903-08:00","deleted_at":"2025-12-27T21:26:02.805903-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1546,7 +1539,6 @@ {"id":"gt-l3c","title":"Design: Polecat Beads write access","description":"Design for granting polecats direct beads write access.\n\n## Background\n\nWith Beads v0.30.0 tombstone-based rearchitecture, we have solid multi-agent support. Reversing the original read-only decision.\n\n## Benefits\n\n- Simplifies architecture (no mail-based issue filing proxy)\n- Empowers polecats to file discovered work\n- Beads handles work-disavowal\n\n## Complications\n\nFor OSS projects where you cannot commit to project .beads/, need per-rig beads repo configuration.\n\n## Subtasks (implementation)\n\n- gt-zx3: Per-rig beads configuration schema\n- gt-e1y: Worker prompting updates for beads access\n- gt-cjb: Witness proxy removal\n- gt-082: Beads sync in decommission checklist\n\n**Design complete.** Each subtask has full specification in its description.","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-15T19:37:42.191734-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-l3gfn","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:29:32.029593-08:00","updated_at":"2025-12-25T07:29:32.029593-08:00","closed_at":"2025-12-25T07:29:32.029556-08:00"} {"id":"gt-l3o0k","title":"Update gastown to use 'ephemeral' instead of 'wisp' terminology","description":"After beads renames 'wisp' to 'ephemeral' (bd-o18s), update gastown code:\n\n- patrol_helpers.go: bd wisp create → bd ephemeral create (or new API)\n- doctor/wisp_check.go: rename to ephemeral_check.go\n- All references to Wisp field → Ephemeral\n\nDepends on: bd-o18s","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/dementus","created_at":"2025-12-26T20:16:44.91769-08:00","updated_at":"2025-12-30T00:27:47.101828-08:00","dependencies":[{"issue_id":"gt-l3o0k","depends_on_id":"external:beads:ephemeral-rename","type":"blocks","created_at":"2025-12-26T20:17:00.859719-08:00","created_by":"daemon"},{"issue_id":"gt-l3o0k","depends_on_id":"external:beads:bd-o18s","type":"blocks","created_at":"2025-12-26T20:17:51.026548-08:00","created_by":"daemon"}]} -{"id":"gt-l42h","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-1wmw) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:55:01.79541-08:00","updated_at":"2025-12-25T15:52:58.278388-08:00","deleted_at":"2025-12-25T15:52:58.278388-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-l4gm","title":"Crew workers: design documentation and remaining work","description":"## Summary\n\nCrew workers are user-managed persistent workspaces within a rig, distinct from polecats.\n\n## Current Implementation\n\n### Commands (all working)\n- `gt crew add \u003cname\u003e` - Create workspace (git clone)\n- `gt crew list` - List workspaces with status\n- `gt crew at \u003cname\u003e` - Attach to tmux session\n- `gt crew remove \u003cname\u003e` - Remove workspace\n- `gt crew pristine [\u003cname\u003e]` - git pull + bd sync\n- `gt crew refresh \u003cname\u003e` - Context cycle with handoff mail\n- `gt crew status [\u003cname\u003e]` - Detailed status\n- `gt crew rename \u003cname\u003e` - Rename workspace\n\n### Crew vs Polecat\n\n| Aspect | Crew | Polecat |\n|--------|------|---------|\n| Lifecycle | User-managed | Witness-managed |\n| Scheduling | Manual | `gt spawn` |\n| Merge flow | Direct push OK | Integration branch → refinery |\n| Garbage collection | Never | Auto on completion |\n| Identity | Long-lived (emma, dave) | Ephemeral (Nux, Toast) |\n\n## Known Bugs\n\n- **gt-70b3**: detectSender() doesn't recognize crew workers\n- **gt-vdp0**: Crew CLAUDE.md shows Refinery template\n\n## Potential Enhancements\n\n1. Rebase helper in `gt crew pristine` for conflict resolution\n2. Cross-rig crew support (crew worker in multiple rigs?)\n3. Better mail identity auto-detection for crew","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-18T21:49:58.524424-08:00","updated_at":"2025-12-27T21:29:57.076832-08:00","deleted_at":"2025-12-27T21:29:57.076832-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-l5l0f","title":"Digest: mol-deacon-patrol","description":"Patrol 4: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:14:41.221012-08:00","updated_at":"2025-12-27T21:26:02.756958-08:00","deleted_at":"2025-12-27T21:26:02.756958-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-l6dzm","title":"Digest: mol-deacon-patrol","description":"Patrol 13: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:04.697254-08:00","updated_at":"2025-12-27T21:26:02.106315-08:00","deleted_at":"2025-12-27T21:26:02.106315-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1590,12 +1582,10 @@ {"id":"gt-ln5af","title":"gt commands should follow .beads/redirect","description":"## Problem\n\n`gt sling` (and likely other gt commands) don't follow the `.beads/redirect` file that `bd` uses to share beads across clones.\n\nThis caused confusion during the v0.39.0 release: molecules were poured successfully to mayor/rig's beads (via redirect), but `gt sling` couldn't find them because it was looking in the crew clone's local .beads/.\n\n## Expected Behavior\n\nAll `gt` commands that interact with beads should follow the redirect mechanism that `bd` uses.\n\n## Affected Commands (likely)\n\n- `gt sling`\n- `gt hook` \n- `gt mol status`\n- `gt mol attach`\n- Any command that shells out to `bd show` or similar\n\n## Solution\n\nWhen `gt` needs to find the beads directory, check for `.beads/redirect` and follow it, same as `bd` does.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-27T21:15:50.297192-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-27T21:34:34.290471-08:00","closed_at":"2025-12-27T21:34:34.290471-08:00"} {"id":"gt-lnji","title":"gt polecat git-state command for pre-kill verification","description":"Add git-state subcommand to gt polecat for Witness pre-kill verification.\n\n## Usage\n```bash\ngt polecat git-state \u003crig\u003e/\u003cpolecat\u003e\n```\n\n## Output\n```\nGit State: gastown/furiosa\n\n Working Tree: clean | dirty\n Uncommitted: 0 files | N files (list)\n Unpushed: 0 commits | N commits ahead\n Stashes: 0 | N stashes\n\n Verdict: CLEAN (safe to kill) | DIRTY (needs cleanup)\n```\n\n## JSON output (--json flag)\n```json\n{\n \"clean\": true,\n \"uncommitted_files\": [],\n \"unpushed_commits\": 0,\n \"stash_count\": 0\n}\n```\n\n## Used by\n- Witness pre-kill verification (mol-witness-patrol)\n- Manual cleanup checks\n\n## Implementation\n- Check git status in polecat worktree\n- Check git log origin/main..HEAD\n- Check git stash list","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T16:43:10.035052-08:00","updated_at":"2025-12-27T21:29:53.175099-08:00","deleted_at":"2025-12-27T21:29:53.175099-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lno","title":"Swarm state persistence: manifest + state + events","description":"Upgrade swarm persistence to match PGT pattern.\n\n## Current State\nSingle .gastown/swarms.json with all swarms.\n\n## Target State (per-swarm)\n```\n.gastown/swarms/\n└── \u003cswarm-id\u003e/\n ├── manifest.json # Immutable config\n ├── state.json # Mutable progress\n ├── events.jsonl # Audit log\n └── report.md # Generated report\n```\n\n## File Schemas\n\n### manifest.json (immutable after creation)\n```json\n{\n \"id\": \"sw-1\",\n \"title\": \"Epic description\",\n \"epic_id\": \"gt-abc\",\n \"rig\": \"gastown\",\n \"base_commit\": \"abc123\",\n \"integration_branch\": \"swarm/sw-1\",\n \"target_branch\": \"main\",\n \"workers\": [\"Toast\", \"Nux\"],\n \"tasks\": [{\"id\": \"gt-xyz\", \"title\": \"...\"}],\n \"created_at\": \"2024-01-01T00:00:00Z\"\n}\n```\n\n### state.json (mutable)\n```json\n{\n \"state\": \"active\",\n \"task_states\": {\n \"gt-xyz\": {\"state\": \"merged\", \"assignee\": \"Toast\"}\n },\n \"updated_at\": \"2024-01-01T01:00:00Z\",\n \"error\": null\n}\n```\n\n### events.jsonl (append-only audit)\n```jsonl\n{\"event\": \"created\", \"ts\": \"...\", \"data\": {...}}\n{\"event\": \"task_assigned\", \"ts\": \"...\", \"data\": {...}}\n{\"event\": \"task_merged\", \"ts\": \"...\", \"data\": {...}}\n```\n\n## Benefits\n- Audit trail via events.jsonl\n- Manifest immutability prevents corruption\n- Cleaner separation of concerns\n- Per-swarm isolation\n\n## Migration\nKeep backward compat with swarms.json during transition.\n\n## Files to Modify\n- internal/swarm/manager.go: Refactor persistence\n- internal/cmd/swarm.go: SwarmStore → directory-based\n\n## Acceptance Criteria\n- [ ] Per-swarm directory structure\n- [ ] Events logged to JSONL\n- [ ] Manifest immutable after creation\n- [ ] List command aggregates from directories","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T14:48:14.151538-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-lnrei","title":"Digest: mol-deacon-patrol","description":"Patrol 7: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:30:51.644618-08:00","updated_at":"2025-12-28T01:30:51.644618-08:00","closed_at":"2025-12-28T01:30:51.644571-08:00"} {"id":"gt-lo9eu","title":"Integration test: simple file creation","description":"Test task for polecat integration test (gt-7psb8).\n\nSimple task: Create a file ~/gt/gastown/test-polecat-integration.txt with content 'Polecat integration test successful'.\n\nThis is an intentionally trivial task to verify the polecat → witness → refinery → merged flow works end-to-end.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T13:05:23.572068-08:00","created_by":"mayor","updated_at":"2025-12-28T13:07:17.160765-08:00","closed_at":"2025-12-28T13:07:17.160765-08:00"} {"id":"gt-lom0","title":"Digest: mol-deacon-patrol","description":"Patrol 20: OK - Handoff threshold reached","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:02:40.085741-08:00","updated_at":"2025-12-27T21:26:04.861368-08:00","deleted_at":"2025-12-27T21:26:04.861368-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lpki","title":"test message","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T17:41:51.652131-08:00","updated_at":"2025-12-27T21:29:56.761096-08:00","deleted_at":"2025-12-27T21:29:56.761096-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} {"id":"gt-lqgf","title":"burn-or-loop","description":"Squash wisp and decide: loop or cycle session.\n\nIf context low: spawn new wisp and loop\nIf context high: handoff and request cycle\n\nNeeds: generate-summary","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.505125-08:00","updated_at":"2025-12-25T15:52:57.932675-08:00","dependencies":[{"issue_id":"gt-lqgf","depends_on_id":"gt-g261","type":"blocks","created_at":"2025-12-23T01:41:54.521716-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T15:52:57.932675-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-ls4he","title":"Digest: mol-deacon-patrol","description":"Patrol 8: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:31:25.114431-08:00","updated_at":"2025-12-28T01:31:25.114431-08:00","closed_at":"2025-12-28T01:31:25.11439-08:00"} {"id":"gt-ls9sh","title":"Digest: mol-deacon-patrol","description":"Patrol 8","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:50:51.372141-08:00","updated_at":"2025-12-25T20:50:51.372141-08:00","closed_at":"2025-12-25T20:50:51.372074-08:00"} {"id":"gt-lsfqq","title":"Hook ergonomics: auto-replace completed pins","description":"## Problem\n\nWhen pinning a new bead, if the old pinned bead is complete, the new pin should automatically replace it. Currently this fails and requires manual unpinning (which doesn't exist as a command).\n\nObserved friction:\n1. Old patrol wisp 100% complete, still pinned\n2. Created new patrol wisp\n3. `gt mol attach` failed: 'not pinned'\n4. Tried to close old wisp: 'cannot close pinned issue'\n5. Tried `gt hook unpin`: command doesn't exist\n6. Stuck in limbo\n\n## Proposed fix\n\n- `gt hook \u003cnew-bead\u003e` auto-replaces if old pin is complete\n- Require `--force` if old pin is incomplete\n- `gt mol attach` should auto-pin if bead isn't pinned\n\n## Orphan detection\n\nUnpinned incomplete molecules aren't stale orphans until they create graph pressure (blocking other work). Orphan detection should focus on dependency blocking, not just 'unpinned' status.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-26T17:29:28.717725-08:00","updated_at":"2025-12-27T21:29:54.783279-08:00","deleted_at":"2025-12-27T21:29:54.783279-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-lta16","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 10: routine, healthy - midpoint","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:26:07.534823-08:00","updated_at":"2025-12-27T21:26:01.889513-08:00","deleted_at":"2025-12-27T21:26:01.889513-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1621,6 +1611,7 @@ {"id":"gt-lyn3","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:45","description":"Patrol 8: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:45:04.933298-08:00","updated_at":"2025-12-27T21:26:05.120555-08:00","deleted_at":"2025-12-27T21:26:05.120555-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lz13","title":"Update templates with molecule navigation workflow","description":"Update all agent templates to use new molecule navigation commands.\n\n## Commands to integrate\n- bd mol current: orientation after startup/handoff (bd-sal9)\n- bd close --continue: seamless step transitions (bd-ieyy)\n\n## Templates to update\n\n### prompts/roles/polecat.md\n- Add bd mol current to 'Finding Your Work' section\n- Replace manual 3-command dance with bd close --continue\n- Update 'Working Through Steps' section\n\n### prompts/roles/crew.md \n- Add molecule navigation to workflow section\n- Show bd mol current for session startup\n\n### prompts/roles/refinery.md\n- Update patrol step transitions to use --continue\n\n### prompts/roles/witness.md\n- Update patrol step transitions to use --continue\n\n### prompts/roles/deacon.md\n- Update patrol step transitions to use --continue\n\n## Key message\nThe Propulsion Principle: close a step, immediately get handed the next.\nNo friction, no forgetting, no 3-command dance.\n\n## Blocked by (Beads features)\n- bd-sal9: bd mol current\n- bd-ieyy: bd close --continue","notes":"BLOCKED 2025-12-23 00:17: Waiting for beads features (bd mol current, bd close --continue) to be implemented. Notified mayor.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-22T17:01:12.119194-08:00","updated_at":"2025-12-27T21:29:53.13326-08:00","dependencies":[{"issue_id":"gt-lz13","depends_on_id":"gt-qswb","type":"blocks","created_at":"2025-12-22T17:01:31.707885-08:00","created_by":"daemon"},{"issue_id":"gt-lz13","depends_on_id":"gt-fly0","type":"blocks","created_at":"2025-12-22T17:01:31.78232-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.13326-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-lzlee","title":"Digest: mol-deacon-patrol","description":"Patrol 16: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:36:01.407687-08:00","updated_at":"2025-12-27T21:26:00.727181-08:00","deleted_at":"2025-12-27T21:26:00.727181-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-m08q4","title":"Digest: mol-deacon-patrol","description":"Patrol 19: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:45:59.707981-08:00","updated_at":"2025-12-25T13:45:59.707981-08:00","closed_at":"2025-12-25T13:45:59.707951-08:00"} {"id":"gt-m0fx.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-m0fx\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T23:28:07.781991-08:00","updated_at":"2025-12-27T21:29:55.645876-08:00","deleted_at":"2025-12-27T21:29:55.645876-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-m3hh","title":"Merge: gt-7hor","description":"branch: polecat/slit\ntarget: main\nsource_issue: gt-7hor\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-22T12:32:43.108463-08:00","updated_at":"2025-12-27T21:27:22.869876-08:00","deleted_at":"2025-12-27T21:27:22.869876-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-m46z2","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T22:39:09.102076-08:00","updated_at":"2025-12-27T21:26:00.32059-08:00","deleted_at":"2025-12-27T21:26:00.32059-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1642,7 +1633,6 @@ {"id":"gt-mayor","title":"gt-mayor","description":"gt-mayor\n\nrole_type: mayor\nrig: null\nagent_state: stopped\nhook_bead: null\nrole_bead: gt-mayor-role\ncleanup_status: has_stash","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-28T00:07:10.885229-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T13:57:10.806279-08:00"} {"id":"gt-mayor-role","title":"Mayor Role Definition","description":"You are the Mayor - global coordinator of Gas Town. You sit above all rigs,\ncoordinating work across the entire workspace.\n\nsession_pattern: gt-mayor\nwork_dir_pattern: {town}\nneeds_pre_sync: false\nstart_command: exec claude --dangerously-skip-permissions\n\ndefault_molecule: mol-mayor-patrol\ncapabilities:\n - dispatch_work\n - cross_rig_coordination\n - escalation_handling\n\n## Responsibilities\n\n- Work dispatch: Spawn workers for issues, coordinate batch work on epics\n- Cross-rig coordination: Route work between rigs when needed\n- Escalation handling: Resolve issues Witnesses cannot handle\n- Strategic decisions: Architecture, priorities, integration planning\n\nNOT your job: Per-worker cleanup, session killing, nudging workers (Witness handles that)\n\n## Propulsion Principle\n\nIf you find something on your hook, YOU RUN IT.\n\nYour pinned molecule persists across sessions. Hook has work then Run it.\nHook empty then Check mail. Nothing anywhere then Wait for user.\n\n## Key Commands\n\n### Communication\n- gt mail inbox - Check your messages\n- gt mail read \u003cid\u003e - Read a specific message\n- gt mail send \u003caddr\u003e -s \"Subject\" -m \"Message\" - Send mail\n\n### Status\n- gt status - Overall town status\n- gt rigs - List all rigs\n- gt polecats \u003crig\u003e - List polecats in a rig\n\n### Work Management\n- bd ready - Issues ready to work (no blockers)\n- gt sling \u003cbead\u003e \u003crig\u003e - Assign work to polecat in rig\n\n## Session End Protocol\n\n- git status, git add, bd sync, git commit, git push\n- gt handoff - hand off to fresh session","status":"hooked","priority":2,"issue_type":"role","assignee":"gastown/polecats/nux","created_at":"2025-12-28T00:51:20.692107-08:00","created_by":"stevey","updated_at":"2025-12-30T02:02:18.922636-08:00"} {"id":"gt-mbyy","title":"CLI API Audit: gt and bd command structure review before OSS launch","description":"# CLI API Audit for OSS Launch\n\nBefore launching Gas Town + Beads as an SDK, we need to ensure the command-line\nAPI is intelligently designed, consistent, intuitive, and structurally sound.\n\n## Current State Audit\n\n### gt (Gas Town) - 50+ top-level commands\n\n**Agent Lifecycle:**\n- `gt mayor`, `gt deacon`, `gt witness`, `gt refinery` - agent management\n- `gt polecat` - worker management (subcommands: add, remove, list, etc.)\n- `gt crew` - persistent workspace management\n- `gt spawn` - create polecat with work\n\n**Work Lifecycle:**\n- `gt spawn` - assign work to new polecat\n- `gt sling` - hook work + start immediately\n- `gt hook` - attach work durably\n- `gt handoff` - pass work to fresh session\n- `gt done` - signal work complete\n- `gt release` - release stuck issues\n\n**Infrastructure:**\n- `gt daemon`, `gt up`, `gt down`, `gt start`, `gt stop`, `gt shutdown`\n- `gt init`, `gt install`, `gt doctor`\n\n**Communication:**\n- `gt mail` (subcommands: send, inbox, read, etc.)\n- `gt nudge`, `gt broadcast`\n\n**Molecules:**\n- `gt molecule` / `gt mol` (17 subcommands!)\n\n### bd (Beads) - Well-categorized but some sprawl\n\n**Core CRUD:**\n- `bd create`, `bd show`, `bd update`, `bd close`, `bd list`\n\n**Molecules:**\n- `bd mol` (5 subcommands: catalog, show, bond, run, distill)\n- `bd wisp` (3 subcommands: create, gc, list)\n- `bd pour` (top-level alias for instantiation)\n- `bd cook` (compile formula to proto)\n\n**Hook/Pin:**\n- `bd pin` - attach mol to agent hook\n- `bd unpin` - remove from hook\n- `bd hook` - inspect what's on hook\n\n## Structural Concerns\n\n### 1. gt is sprawling (50+ top-level commands)\n\nMany commands could be subcommands:\n```\n# Current # Could be\ngt up/down/start/stop gt daemon {up|down|start|stop}\ngt spawn/sling/hook/handoff gt work {spawn|sling|hook|handoff}\ngt mayor/deacon/witness gt agent {mayor|deacon|witness|...}\n```\n\n### 2. Overlap between gt and bd\n\n| Concept | gt | bd |\n|---------|----|----|\n| Hook | `gt hook` | `bd pin`, `bd hook` |\n| Mail | `gt mail` | `bd mail` (delegates) |\n| Molecules | `gt mol` (17 cmds) | `bd mol` (5 cmds) |\n\nWhich owns what? User confusion likely.\n\n### 3. Naming inconsistencies\n\n- `gt polecat` (noun) vs `gt spawn` (verb) - both about polecats\n- `gt done` vs `gt handoff` - both end work but different\n- `bd mol run` vs `bd pour` - both instantiate\n\n### 4. Subcommand depth decisions\n\n**Good patterns:**\n- `bd mol {catalog|show|bond|run|distill}` - coherent group\n- `gt mail {send|inbox|read|archive}` - coherent group\n\n**Questionable patterns:**\n- `bd create --wisp` AND `bd wisp create` - two ways to do same thing\n- `gt spawn --molecule X` AND `gt mol instantiate` - overlap\n\n### 5. Flag vs subcommand guidelines needed\n\nWhen to use flags vs subcommands?\n- `--json` as flag ✓ (modifier)\n- `--wisp` as flag for create? Or separate `bd wisp create`?\n- `--molecule` on spawn? Or separate workflow?\n\n## Recommendations to Evaluate\n\n### A. Consolidate gt top-level commands\n\nGroup related commands:\n```\ngt agent {mayor|deacon|witness|refinery|polecat}\ngt work {spawn|sling|hook|handoff|done}\ngt infra {daemon|up|down|doctor}\n```\n\n### B. Clarify gt vs bd ownership\n\n| Domain | Owner | Other defers |\n|--------|-------|--------------|\n| Issues | bd | gt uses bd |\n| Agents | gt | bd doesn't touch |\n| Molecules | bd mol | gt mol wraps for UX |\n| Hooks | bd pin/hook | gt hook wraps |\n| Mail | gt mail | bd mail delegates |\n\n### C. Apply consistent naming\n\n- All agent commands: nouns (`gt polecat`, `gt mayor`)\n- All work commands: verbs (`gt spawn`, `gt sling`, `gt hook`)\n- Avoid synonyms: pick one term and stick with it\n\n### D. Flag vs subcommand rule\n\n- Flags: modify behavior of command (`--json`, `--force`, `--wisp`)\n- Subcommands: distinct operations (`mol run`, `mol squash`, `mol burn`)\n- Exception: very common operations can have top-level aliases\n\n## Tasks\n\n1. [ ] Review gt command groupings - propose consolidation\n2. [ ] Review bd command groupings - check for sprawl\n3. [ ] Document gt vs bd ownership boundaries\n4. [ ] Identify and resolve naming inconsistencies\n5. [ ] Document flag vs subcommand decision criteria\n6. [ ] Create migration plan for any breaking changes\n7. [ ] Update help text to be consistent\n8. [ ] Test agent UX: can Claude guess commands correctly?\n\n## Success Criteria\n\n- New user can guess command structure intuitively\n- `gt --help` fits on one screen (or is well-categorized)\n- No duplicate functionality between gt and bd\n- Consistent naming throughout\n- Claude agents can discover commands without documentation","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-24T23:48:42.420867-08:00","updated_at":"2025-12-27T21:29:52.547876-08:00","dependencies":[{"issue_id":"gt-mbyy","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T23:48:52.221824-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.547876-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} -{"id":"gt-mc4n","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-test123) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:56:18.534569-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-mcch0","title":"Digest: mol-deacon-patrol","description":"Patrol 16: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:28:57.926784-08:00","updated_at":"2025-12-25T07:28:57.926784-08:00","closed_at":"2025-12-25T07:28:57.926736-08:00"} {"id":"gt-mcjd","title":"Work on gt-o9j: Fix tmux status bar polecat count - exclu...","description":"Work on gt-o9j: Fix tmux status bar polecat count - exclude static roles (mayor, deacon, witnesses, refineries, docs, hop). Run 'bd show gt-o9j' for details.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-20T07:52:51.623541-08:00","updated_at":"2025-12-27T21:29:56.806106-08:00","deleted_at":"2025-12-27T21:29:56.806106-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-md2rg.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-md2rg\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:14.340033-08:00","updated_at":"2025-12-27T21:29:55.317325-08:00","deleted_at":"2025-12-27T21:29:55.317325-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1686,6 +1676,7 @@ {"id":"gt-mol-xl8","title":"Load context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-8tmz.34) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:47:10.031297-08:00","updated_at":"2025-12-27T21:29:55.122589-08:00","deleted_at":"2025-12-27T21:29:55.122589-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mol-znx","title":"Detect abandoned work","description":"**DETECT ONLY** - Check for orphaned state and dispatch to dog if found.\n\n**Step 1: Quick orphan scan**\n```bash\n# Check for in_progress issues with dead assignees\nbd list --status=in_progress --json | head -20\n```\n\nFor each in_progress issue, check if assignee session exists:\n```bash\ntmux has-session -t \u003csession\u003e 2\u003e/dev/null \u0026\u0026 echo \"alive\" || echo \"orphan\"\n```\n\n**Step 2: If orphans detected, dispatch to dog**\n```bash\n# Sling orphan-scan formula to an idle dog\ngt sling mol-orphan-scan deacon/dogs --var scope=town\n```\n\n**Important:** Do NOT fix orphans inline. Dogs handle recovery.\nThe Deacon's job is detection and dispatch, not execution.\n\n**Step 3: If no orphans detected**\nSkip dispatch - nothing to do.\n\n**Exit criteria:** Orphan scan dispatched to dog (if needed).","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-30T16:09:54.468041-08:00","updated_at":"2025-12-30T16:52:28.808446-08:00","closed_at":"2025-12-30T16:52:28.808446-08:00","close_reason":"No in_progress issues found, no orphans to detect","dependencies":[{"issue_id":"gt-mol-znx","depends_on_id":"gt-mol-265","type":"parent-child","created_at":"2025-12-30T16:09:54.528259-08:00","created_by":"gastown/polecats/rictus"},{"issue_id":"gt-mol-znx","depends_on_id":"gt-mol-74a","type":"blocks","created_at":"2025-12-30T16:09:54.638026-08:00","created_by":"gastown/polecats/rictus"}]} {"id":"gt-molmall","title":"Mol Mall: Formula marketplace and aspect composition","description":"## Summary\n\nA marketplace for sharing molecule formulas using GitHub as backend, plus a new\n**aspect composition** capability for cooking that allows formulas to be applied\nas cross-cutting transformations to existing mols.\n\n## Key Insight\n\nFormulas aren't just standalone workflows—they're **transformations** you can\napply to other mols. This enables patterns like:\n- \"Apply Rule of Five code review to any coding task\"\n- \"Wrap any epic with security review steps\"\n- \"Add logging/metrics to any patrol molecule\"\n\n## Architecture\n\n```\nRemote Formulas (GitHub)\n ↓ install\nLocal Formulas (~/.gt/formulas/ or .beads/formulas/)\n ↓ cook --with\nMols (beads, git-tracked)\n ↓ pour/sling\nExecution (ephemeral or tracked)\n```\n\n## Formula Types\n\n1. **Standalone** - Complete workflows (mol-polecat-work, mol-deacon-patrol)\n2. **Aspects** - Cross-cutting concerns woven into other mols (rule-of-five)\n3. **Adapters** - Wrappers that make things runnable\n\n## Aspect Composition (New Cooking Capability)\n\n```bash\nbd cook my-epic --with rule-of-five,security-review\n```\n\nAspects declare injection points:\n\n```yaml\n# rule-of-five.formula.yaml\nkind: aspect\nname: rule-of-five\nversion: 1.2.0\n\ninject_after:\n tag: generates-code # matches any step with this tag\n\nsteps:\n - id: review-correctness\n title: \"Review: Correctness\"\n - id: review-edge-cases\n title: \"Review: Edge Cases\"\n - id: review-performance\n title: \"Review: Performance\"\n - id: review-security\n title: \"Review: Security\"\n - id: review-maintainability\n title: \"Review: Maintainability\"\n```\n\nInjection modes:\n- `inject_after: \u003cstep-id or tag\u003e` - insert steps after\n- `inject_before: \u003cstep-id or tag\u003e` - insert steps before\n- `wrap: \u003cstep-id or tag\u003e` - insert before AND after\n- `replace: \u003cstep-id or tag\u003e` - substitute entirely\n\n## The Mall Index\n\nA well-known repo maps short names to full references:\n\n```yaml\n# steveyegge/gt-mall/index.yaml\nformulas:\n rule-of-five:\n repo: steveyegge/gt-formulas\n path: aspects/rule-of-five.formula.yaml\n version: v1.2.0\n description: \"Five-lens code review\"\n tags: [review, quality]\n```\n\nCommands:\n- `gt mol search review` - search the index\n- `gt mol install rule-of-five` - fetch from GitHub\n- `gt mol install github.com/acme/formulas/custom@v1` - direct URL\n\n## Implementation Phases\n\n### Phase 1: Aspect Composition (Cooking)\n- Extend `bd cook` to accept `--with aspect1,aspect2`\n- Aspect application during mol generation\n- Local aspects in `.beads/formulas/`\n\n### Phase 2: Mall Index\n- Create gt-mall repo with index.yaml\n- `gt mol search` queries the index\n- `gt mol install` fetches and caches formulas\n\n### Phase 3: Publishing\n- `gt mol publish` pushes to your formula repo\n- PR workflow to add to mall index\n\n### Phase 4: Refinements\n- Aspect ordering and conflict detection\n- Aspect dependencies (`requires: [other-aspect]`)\n- Private formula repos (enterprise)\n- Local overrides/forks\n\n## Open Questions\n\n1. **Ordering conflicts**: Two aspects inject after same step—which goes first?\n2. **Aspect dependencies**: Aspect A requires aspect B?\n3. **Compile-time vs runtime**: Aspects are compile-time (baked into mol).\n Wisps remain runtime (slung dynamically).\n\n## Deferred Until\n\nGas Town patrols operational. Prerequisites:\n- [ ] Patrol system working (Deacon, Witness, Refinery)\n- [ ] Basic spawn/work/merge cycle\n- [ ] Activity feed showing work progress\n\nThen the mall becomes valuable for sharing patrol customizations.\n\n## Supersedes\n\nThis replaces gt-uzf2l which had the original marketplace concept but lacked\nthe aspect composition insight.\n\n## Related\n\n- Cooking system (bd cook)\n- Formula definitions (.formula.yaml)\n- Wisp architecture (runtime molecules)","notes":"See docs/formula_evolution.md for expanded thinking on: formula resolution hierarchy, combinators (\u003e\u003e, |, wrap, inject, extends), algebraic properties, higher abstractions, Mol Mall registry predictions, distribution scenarios, and open questions. The aspect composition in this design corresponds to the Wrapping (AOP) and Injection combinators in that doc.","status":"deferred","priority":2,"issue_type":"epic","created_at":"2025-12-26T00:33:44.380242-08:00","updated_at":"2025-12-26T00:36:57.3959-08:00"} +{"id":"gt-mpo6","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-24T23:31:09.318283-08:00","updated_at":"2025-12-25T01:26:28.782435-08:00","closed_at":"2025-12-25T01:26:28.782435-08:00"} {"id":"gt-mqbm","title":"Digest: mol-deacon-patrol","description":"Patrol: TRACER BULLET SUCCESS - gt-oiv0 merged to main, furiosa completed and exited cleanly, 0 polecats now, all agents up","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-22T23:13:30.087307-08:00","updated_at":"2025-12-27T21:26:05.441745-08:00","deleted_at":"2025-12-27T21:26:05.441745-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mqu65","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, no messages, no issues","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:13:57.610811-08:00","updated_at":"2025-12-27T21:26:03.601385-08:00","deleted_at":"2025-12-27T21:26:03.601385-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-mquab","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy, routine cycle complete","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:51:57.921364-08:00","updated_at":"2025-12-27T21:26:03.454115-08:00","deleted_at":"2025-12-27T21:26:03.454115-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1713,8 +1704,9 @@ {"id":"gt-n23v2","title":"Digest: mol-deacon-patrol","description":"Patrol 19: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T22:36:23.752064-08:00","updated_at":"2025-12-29T22:36:23.752064-08:00","closed_at":"2025-12-29T22:36:23.752031-08:00","dependencies":[{"issue_id":"gt-n23v2","depends_on_id":"gt-eph-gi8","type":"parent-child","created_at":"2025-12-29T22:36:23.753866-08:00","created_by":"deacon"}]} {"id":"gt-n33lx","title":"Digest: mol-deacon-patrol","description":"Patrol 16: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:19:26.175734-08:00","updated_at":"2025-12-27T21:26:03.519688-08:00","deleted_at":"2025-12-27T21:26:03.519688-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-n3i7","title":"Digest: mol-deacon-patrol","description":"Patrol 15: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:00:56.816258-08:00","updated_at":"2025-12-27T21:26:04.902723-08:00","deleted_at":"2025-12-27T21:26:04.902723-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-n4vz7","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 5: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:20:57.158949-08:00","updated_at":"2025-12-28T11:20:57.158949-08:00","closed_at":"2025-12-28T11:20:57.158916-08:00","dependencies":[{"issue_id":"gt-n4vz7","depends_on_id":"gt-eph-abd","type":"parent-child","created_at":"2025-12-28T11:20:57.159809-08:00","created_by":"deacon"}]} +{"id":"gt-n4vz7","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 5: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:20:57.158949-08:00","updated_at":"2025-12-28T11:20:57.158949-08:00","closed_at":"2025-12-28T11:20:57.158916-08:00"} {"id":"gt-n508","title":"Merge: gt-70b3","description":"type: merge-request\nbranch: polecat/Rictus\ntarget: main\nsource_issue: gt-70b3\nrig: gastown","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T21:56:57.840796-08:00","updated_at":"2025-12-27T21:29:54.07535-08:00","deleted_at":"2025-12-27T21:29:54.07535-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-n5u8i","title":"Digest: mol-deacon-patrol","description":"Patrol 8: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:06:24.927093-08:00","updated_at":"2025-12-27T23:06:24.927093-08:00","closed_at":"2025-12-27T23:06:24.927062-08:00"} {"id":"gt-n5uy","title":"Digest: mol-deacon-patrol","description":"Patrol OK: 8 polecats, 4 witness/refineries up","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-23T01:06:42.456269-08:00","updated_at":"2025-12-27T21:26:05.397271-08:00","deleted_at":"2025-12-27T21:26:05.397271-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-n7cm4","title":"Digest: mol-deacon-patrol","description":"Patrol 14: Green","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:34:39.56723-08:00","updated_at":"2025-12-27T21:26:02.527491-08:00","deleted_at":"2025-12-27T21:26:02.527491-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-n7xxc","title":"Merge: gt-594l2","description":"branch: polecat/morsov-1766966180179\ntarget: main\nsource_issue: gt-594l2\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-28T16:37:28.154049-08:00","created_by":"gastown/polecats/morsov","updated_at":"2025-12-28T22:28:06.12421-08:00","closed_at":"2025-12-28T22:28:06.12421-08:00"} @@ -1749,14 +1741,13 @@ {"id":"gt-nj3e5","title":"Digest: mol-deacon-patrol","description":"Patrol 5: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:04:44.720601-08:00","updated_at":"2025-12-27T23:04:44.720601-08:00","closed_at":"2025-12-27T23:04:44.720566-08:00"} {"id":"gt-njem","title":"Remove gt mail dependency on bd mail commands","description":"Replaced bd mail send/inbox/read/ack with bd create/list/show/close. Messages are now stored as beads issues with type=message.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-20T17:52:43.47722-08:00","updated_at":"2025-12-27T21:29:56.72792-08:00","deleted_at":"2025-12-27T21:29:56.72792-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-njr","title":"Engineer session restart protocol","description":"Implement session restart flow for when the Engineer needs to split work:\n\n1. Engineer creates subtask(s) in Beads assigned to self\n2. Engineer sends handoff mail to self (🤝 HANDOFF)\n3. Engineer sends restart request to Witness\n4. Witness verifies:\n - Handoff mail exists in Engineer outbox/sent\n - Subtasks filed in Beads\n5. Witness restarts the Refinery session (new Engineer context)\n\nThis enables \"occasionally consistent, eventually convergent\" work patterns.\nThe Refinery continues; the Engineer gets fresh context.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T23:02:48.22994-08:00","updated_at":"2025-12-27T21:29:54.402848-08:00","dependencies":[{"issue_id":"gt-njr","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:56.148564-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.402848-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-nk6u8","title":"Merge: furiosa-1767082251065","description":"branch: polecat/furiosa-1767082251065\ntarget: main\nsource_issue: furiosa-1767082251065\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T00:15:29.234552-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-30T01:01:04.294738-08:00","closed_at":"2025-12-30T01:01:04.294738-08:00"} {"id":"gt-nk7i","title":"Digest: mol-deacon-patrol","description":"Patrol 13: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:00:14.154408-08:00","updated_at":"2025-12-27T21:26:04.919231-08:00","deleted_at":"2025-12-27T21:26:04.919231-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-nm1oi","title":"Deacon Patrol","description":"Mayor's daemon patrol loop for handling callbacks, health checks, and cleanup.","status":"closed","priority":2,"issue_type":"molecule","created_at":"2025-12-26T13:08:21.347354-08:00","updated_at":"2025-12-29T20:57:41.78458-08:00","closed_at":"2025-12-29T20:57:41.78458-08:00","close_reason":"Duplicate patrol molecule beads - keeping gt-t5i07, gt-8ynws, gt-kt9qq"} +{"id":"gt-nm8op","title":"Digest: mol-deacon-patrol","description":"Routine patrol, town stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:23:55.238487-08:00","updated_at":"2025-12-28T19:23:55.238487-08:00","closed_at":"2025-12-28T19:23:55.238453-08:00"} {"id":"gt-nmtp","title":"Refactor builtin_molecules.go (1620 lines)","description":"## Summary\n\nbuiltin_molecules.go is 1620 lines and growing. Should be split into:\n- builtin_molecules.go - registration and common helpers\n- molecules_patrol.go - patrol molecules (deacon, witness, refinery)\n- molecules_work.go - work molecules (polecat-work, ready-work, engineer-in-box)\n- molecules_session.go - session wrappers (crew-session, polecat-session)\n\n## Benefits\n- Easier to find/edit specific molecules\n- Smaller diffs on changes\n- Clear categorization","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-23T01:19:15.540532-08:00","updated_at":"2025-12-27T21:29:57.522496-08:00","deleted_at":"2025-12-27T21:29:57.522496-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-nnfm5","title":"Digest: mol-deacon-patrol","description":"Patrol 8: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:21:22.564416-08:00","updated_at":"2025-12-27T21:26:00.173566-08:00","deleted_at":"2025-12-27T21:26:00.173566-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-noih","title":"test pin issue","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T11:45:42.660977-08:00","updated_at":"2025-12-27T21:29:56.059848-08:00","deleted_at":"2025-12-27T21:29:56.059848-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-npnph","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 9: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:44:12.479941-08:00","updated_at":"2025-12-27T21:26:01.402635-08:00","deleted_at":"2025-12-27T21:26:01.402635-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-npu0m","title":"Merge: imperator-1767106079026","description":"branch: polecat/imperator-1767106079026\ntarget: main\nsource_issue: imperator-1767106079026\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T10:40:11.952602-08:00","created_by":"gastown/polecats/imperator","updated_at":"2025-12-30T10:40:11.952602-08:00"} {"id":"gt-nq1a","title":"Add 'gt account add' command","description":"Register new account: create config dir, spawn claude with CLAUDE_CONFIG_DIR set, user completes /login, add entry to accounts.yaml.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:19.444213-08:00","updated_at":"2025-12-27T21:29:56.184087-08:00","dependencies":[{"issue_id":"gt-nq1a","depends_on_id":"gt-58tu","type":"blocks","created_at":"2025-12-23T03:24:34.722487-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.184087-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-nq5l9","title":"Merge: nux-1767087680976","description":"branch: polecat/nux-1767087680976\ntarget: main\nsource_issue: nux-1767087680976\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T13:43:41.690209-08:00","created_by":"gastown/polecats/nux","updated_at":"2025-12-30T13:43:41.690209-08:00"} {"id":"gt-nq6j","title":"Rename .beads-ephemeral to .beads-wisps in docs","description":"The wisp storage directory should be named `.beads-wisps/` not `.beads-ephemeral/`.\n\nAlso fix the architecture: Witness and Refinery share mayor/rig's beads and wisps.\nThey don't have separate ephemeral stores.\n\n## Files to update\n- docs/wisp-architecture.md\n- docs/architecture.md \n- ~/gt/docs/patrol-system-design.md\n- ~/gt/CLAUDE.md\n\n## Changes\n1. Rename `.beads-ephemeral/` → `.beads-wisps/` everywhere\n2. Remove incorrect references to witness/.beads-ephemeral/ and refinery/rig/.beads-ephemeral/\n3. Clarify that all rig-level patrols use mayor/rig/.beads-wisps/","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T23:38:04.110859-08:00","updated_at":"2025-12-27T21:29:53.358466-08:00","deleted_at":"2025-12-27T21:29:53.358466-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1777,6 +1768,7 @@ {"id":"gt-o29j","title":"inspect-workers","description":"Capture output for each working polecat.\n\n```bash\ngt peek \u003crig\u003e/\u003cpolecat\u003e\n```\n\nNeeds: survey-workers","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.506324-08:00","updated_at":"2025-12-25T15:52:57.508608-08:00","deleted_at":"2025-12-25T15:52:57.508608-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-o2wgw","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:37:38.841389-08:00","updated_at":"2025-12-27T21:26:02.060659-08:00","deleted_at":"2025-12-27T21:26:02.060659-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-o3is","title":"gt sling pinToHook doesn't set pinned boolean field","description":"## Updated Root Cause Analysis (2025-12-23)\n\nThe issue is **NOT** in gt as originally thought. It's in the beads (bd) codebase.\n\n### What happens:\n1. `bd pin` correctly sets pinned=1 in SQLite\n2. Any subsequent `bd` command (even `bd show`) resets pinned to 0\n3. This happens even with `--no-auto-import` and `--sandbox` flags\n\n### Evidence:\n```bash\n$ bd --no-daemon pin gt-k08o --for=max\n📌 Pinned gt-k08o to max's hook\n\n$ sqlite3 beads.db 'SELECT id, pinned FROM issues WHERE id=\"gt-k08o\"'\ngt-k08o|1 # ← Correct immediately after pin\n\n$ bd --no-daemon --no-auto-import show gt-k08o\n[shows issue without pinned field]\n\n$ sqlite3 beads.db 'SELECT id, pinned FROM issues WHERE id=\"gt-k08o\"' \ngt-k08o|0 # ← WRONG\\! bd show overwrote it\n```\n\n### Where to look:\nThe bug is likely in one of these beads code paths:\n- Some import/hydration running despite --no-auto-import\n- WAL mode not flushing before subsequent reads\n- Multi-repo or redirect handling corrupting pinned field\n\n### Workaround:\nThe handoff bead attachment mechanism (AttachMolecule) works correctly.\nThe pinned field is cosmetic for `bd hook` visibility only.\ngt sling correctly uses AttachMolecule for work assignment.\n\n### Next steps:\nCreate a beads issue to fix this properly in the bd codebase.\nThis is not a gt issue.","notes":"Created beads bug: bd-phtv in ~/gt/beads","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-23T04:41:12.668958-08:00","updated_at":"2025-12-27T21:29:53.040476-08:00","deleted_at":"2025-12-27T21:29:53.040476-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} +{"id":"gt-o3skt","title":"Digest: mol-deacon-patrol","description":"Patrol 18","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T20:06:18.575389-08:00","updated_at":"2025-12-26T20:06:18.575389-08:00","closed_at":"2025-12-26T20:06:18.575343-08:00"} {"id":"gt-o40t","title":"gt sling --force: return displaced work to ready pool","description":"When slinging with --force to an agent with occupied hook, the displaced molecule should be returned to the ready pool rather than silently orphaned.\n\nCurrent behavior:\n- --force overwrites the hook attachment\n- Previous work becomes orphaned (still assigned but not pinned)\n\nDesired behavior:\n1. Unpin the displaced molecule (clear assignee, set pinned=false)\n2. Print warning in tool output: 'Warning: displaced gt-xxx back to ready pool'\n3. Proceed with new sling\n\nThis ensures:\n- No silent data loss\n- Agent sees the warning and can act on it\n- Human caller sees what happened\n- Displaced work is discoverable via 'bd ready'\n\nImplementation location: checkHookCollision() or the sling handlers themselves (after the --force check passes)","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T16:00:23.713733-08:00","updated_at":"2025-12-27T21:29:55.968712-08:00","deleted_at":"2025-12-27T21:29:55.968712-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-o5ra","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no lifecycle requests, 8 active sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:54:13.477737-08:00","updated_at":"2025-12-27T21:26:05.013415-08:00","deleted_at":"2025-12-27T21:26:05.013415-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-o75l","title":"Merge: gt-h6eq.3","description":"branch: polecat/keeper\ntarget: main\nsource_issue: gt-h6eq.3\nrig: gastown","status":"tombstone","priority":2,"issue_type":"merge-request","created_at":"2025-12-23T11:49:58.84455-08:00","updated_at":"2025-12-27T21:27:22.828169-08:00","deleted_at":"2025-12-27T21:27:22.828169-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -1784,7 +1776,6 @@ {"id":"gt-o975j","title":"Digest: mol-deacon-patrol","description":"Patrol 17: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T19:36:27.195688-08:00","updated_at":"2025-12-27T21:26:00.718894-08:00","deleted_at":"2025-12-27T21:26:00.718894-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-o9hwu","title":"Digest: mol-deacon-patrol","description":"Cycle 12: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T13:20:41.375337-08:00","updated_at":"2025-12-28T13:20:41.375337-08:00","closed_at":"2025-12-28T13:20:41.375302-08:00"} {"id":"gt-o9osx","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:47:16.478644-08:00","updated_at":"2025-12-27T21:26:03.470488-08:00","deleted_at":"2025-12-27T21:26:03.470488-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-o9t9s","title":"Digest: mol-deacon-patrol","description":"Patrol 19: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:37:00.98369-08:00","updated_at":"2025-12-28T01:37:00.98369-08:00","closed_at":"2025-12-28T01:37:00.983648-08:00"} {"id":"gt-oahqo","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:05:36.911655-08:00","updated_at":"2025-12-25T11:05:36.911655-08:00","closed_at":"2025-12-25T11:05:36.911619-08:00"} {"id":"gt-oared","title":"Digest: mol-deacon-patrol","description":"Patrol 16: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:48:47.63204-08:00","updated_at":"2025-12-28T19:48:47.63204-08:00","closed_at":"2025-12-28T19:48:47.632007-08:00"} {"id":"gt-ob0t","title":"Test Patrol Parent","description":"Test parent for Christmas Ornament pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T12:46:15.328647-08:00","updated_at":"2025-12-27T23:44:54.660334-08:00","closed_at":"2025-12-27T23:44:54.660338-08:00"} @@ -1796,7 +1787,6 @@ {"id":"gt-odfr","title":"Add WaitsFor parsing to molecule steps","description":"Add WaitsFor field to MoleculeStep struct and parse 'WaitsFor: all-children' (and future variants) from molecule descriptions.\n\nThis enables:\n- mol progress to understand fanout patterns\n- Validation that WaitsFor references valid constructs\n- Future automated orchestration\n\nImplementation:\n1. Add WaitsFor []string to MoleculeStep struct\n2. Add waitsForLineRegex to parse 'WaitsFor: ...' lines\n3. Update ParseMoleculeSteps to extract WaitsFor\n4. Update tests","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T21:35:55.004767-08:00","updated_at":"2025-12-27T21:29:52.836996-08:00","deleted_at":"2025-12-27T21:29:52.836996-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-odvf","title":"Document bd mol bond/squash/burn CLI","description":"Create CLI reference documentation for molecule commands:\n\n## bd mol bond\n\nInstantiate a proto into a runnable molecule.\n\n```bash\nbd mol bond \u003cproto-id\u003e [--wisp] [--assignee=\u003caddr\u003e]\n```\n\n- Default: creates a Mol (durable, in main beads)\n- --wisp: creates a Wisp (ephemeral, in .beads-ephemeral/)\n- --assignee: who will execute this molecule\n\n## bd mol squash\n\nComplete a molecule and generate digest.\n\n```bash\nbd mol squash \u003cmol-id\u003e --summary='...'\n```\n\n- For Mol: creates digest in git history\n- For Wisp: evaporates (no permanent record)\n- --summary: required summary of what was accomplished\n\n## bd mol burn\n\nAbandon a molecule without completing.\n\n```bash\nbd mol burn \u003cmol-id\u003e [--reason='...']\n```\n\n- Discards molecule state\n- No digest created\n- Use when molecule is no longer needed","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T16:33:06.462105-08:00","updated_at":"2025-12-27T21:29:56.537382-08:00","dependencies":[{"issue_id":"gt-odvf","depends_on_id":"gt-62hm","type":"blocks","created_at":"2025-12-21T16:33:17.530156-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.537382-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-odvr","title":"Merge: gt-r6td","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-r6td\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T22:54:01.000047-08:00","updated_at":"2025-12-27T21:27:22.543258-08:00","deleted_at":"2025-12-27T21:27:22.543258-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} -{"id":"gt-oe135","title":"Digest: mol-deacon-patrol","description":"Patrol 7: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:05:54.728776-08:00","updated_at":"2025-12-27T23:05:54.728776-08:00","closed_at":"2025-12-27T23:05:54.728735-08:00"} {"id":"gt-oeori","title":"Day 3.7: Witness pings Deacon for second-order monitoring","description":"Add second-order monitoring: Witnesses monitor the Deacon.\n\nProblem: Who monitors the Deacon? If Deacon dies, the whole town stalls.\n\nSolution:\n1. Each Witness periodically sends a ping to Deacon during patrol:\n ```bash\n gt mail send deacon/ -s \"WITNESS_PING\" -m \"{\\\"rig\\\": \\\"gastown\\\"}\"\n ```\n\n2. Deacon patrol (inbox-check) aggregates witness pings as health signals\n\n3. If Witness doesn't get Deacon response for 2 cycles:\n - Escalate to Mayor: \"Deacon unresponsive\"\n - Mayor can restart Deacon via daemon\n\nThis creates overlapping patrols:\n- Deacon monitors Witnesses/Refineries\n- Witnesses monitor Deacon (collectively)\n- Mayor is escalation target for both\n\nAdd to mol-witness-patrol after survey-workers step.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T22:02:32.179579-08:00","created_by":"mayor","updated_at":"2025-12-27T23:18:47.265651-08:00","closed_at":"2025-12-27T23:18:47.265651-08:00","dependencies":[{"issue_id":"gt-oeori","depends_on_id":"gt-qpoxz","type":"blocks","created_at":"2025-12-27T22:02:45.78993-08:00","created_by":"daemon"}]} {"id":"gt-of0w1","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T18:24:00.367405-08:00","updated_at":"2025-12-27T21:26:02.830298-08:00","deleted_at":"2025-12-27T21:26:02.830298-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ofl2","title":"CRITICAL: ProcessMRFromQueue not implemented - Refinery merge logic stubbed","description":"File: internal/refinery/engineer.go:384\nThe ProcessMRFromQueue() function returns hardcoded failure with TODO comment.\nThis is a core refinery function that cannot process merges in current state.\nMust implement actual merge logic before OSS launch.","status":"tombstone","priority":0,"issue_type":"bug","created_at":"2025-12-24T12:50:27.824454-08:00","updated_at":"2025-12-27T21:29:45.447974-08:00","dependencies":[{"issue_id":"gt-ofl2","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:04.778532-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.447974-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} @@ -1843,6 +1833,7 @@ {"id":"gt-p52mk","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 17: routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:29:58.302087-08:00","updated_at":"2025-12-27T21:26:01.829087-08:00","deleted_at":"2025-12-27T21:26:01.829087-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-p552z","title":"Digest: mol-deacon-patrol","description":"Patrol 14: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:59:17.733299-08:00","updated_at":"2025-12-27T21:26:00.499368-08:00","deleted_at":"2025-12-27T21:26:00.499368-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-p9zh","title":"gt doctor: detect orphaned code on beads-sync branch","description":"After merging beads-sync to main, some code changes can be lost if the merge conflict resolution drops files.\n\nAdd a doctor check that runs:\n git diff main..beads-sync -- '*.go' '*.md'\n\nIf there are differences in code files (not just .beads/), warn about potentially orphaned work.\n\nToday's incident: Merge 96c773f lost mailbox.go and router.go changes from 5791752, requiring re-implementation.\n\nAcceptance:\n- gt doctor warns if beads-sync has unmerged code changes\n- Excludes .beads/ directory (expected to differ)\n- Shows file list of orphaned changes","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-20T22:01:56.794648-08:00","updated_at":"2025-12-27T21:29:56.670099-08:00","deleted_at":"2025-12-27T21:29:56.670099-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} +{"id":"gt-pbjim","title":"Digest: mol-deacon-patrol","description":"Patrol 15: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:35:05.785047-08:00","updated_at":"2025-12-25T00:35:05.785047-08:00","closed_at":"2025-12-25T00:35:05.785013-08:00"} {"id":"gt-pbr3","title":"Add godoc comments to exported functions","description":"Several exported functions lack godoc comments. While not critical, adding documentation would improve code maintainability. Focus on:\n\n- Public API functions in each package\n- Exported types and their methods\n- Functions that have non-obvious behavior\n\nCan be addressed incrementally as code is touched.","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-21T21:35:26.732436-08:00","updated_at":"2025-12-27T21:29:57.88304-08:00","deleted_at":"2025-12-27T21:29:57.88304-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-pc2p0","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, no messages, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:28:10.81431-08:00","updated_at":"2025-12-27T21:26:03.943851-08:00","deleted_at":"2025-12-27T21:26:03.943851-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-pc5d","title":"Recover stale polecat work: 4 branches with unpushed commits","description":"During observation of polecat workflow, found 4 polecats with unpushed work:\n\n## Branches Pushed (preserved)\n- polecat/capable: 3 commits (molecule catalog, doctor orphan detection, gt done)\n- polecat/dementus: 4 commits (Witness MVP, handoff fixes)\n- polecat/furiosa: 2 commits (bulk polecat removal, spawn handoff)\n- polecat/rictus: 1 commit (molecule docs)\n\n## Action Required\n1. Review each branch for merge-worthiness\n2. Either:\n a. Create PRs for valuable work\n b. OR discard if superseded\n3. After decision, clean up polecats properly\n\n## Root Cause\nPolecats were not cleaned up after previous work sessions. This is exactly why we need:\n- gt-u1k: gt shutdown should fully cleanup polecats\n- gt-8v8: Refuse to lose uncommitted work\n- gt-9nf: Always create fresh polecats","status":"tombstone","priority":1,"issue_type":"chore","created_at":"2025-12-20T15:24:29.232772-08:00","updated_at":"2025-12-27T21:29:53.694253-08:00","deleted_at":"2025-12-27T21:29:53.694253-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"chore"} @@ -1892,6 +1883,7 @@ {"id":"gt-pv93","title":"Post-work discovery: AI analysis finds follow-on issues","description":"AI analyzes completed work to discover: bugs, punted work, follow-on tasks.\n\n**From VC**: Supervisor.AnalyzeResult() with iterative refinement. ~300 lines.\n\n**Gas Town implementation**: Post-work hook in molecule:\n```yaml\npost_work:\n discover:\n - bugs\n - punted_items\n - follow_on_work\n file_as: beads\n```\n\nPolecat output gets analyzed by AI, discovered work becomes beads issues.\n\n**Value**: Nothing gets forgotten. VC found ~25% more issues with refinement.\n\n**Key**: Use semantic deduplication (gt-xxx) to avoid pollution.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-20T20:30:14.723338-08:00","updated_at":"2025-12-20T20:30:14.723338-08:00","dependencies":[{"issue_id":"gt-pv93","depends_on_id":"gt-zhpa","type":"parent-child","created_at":"2025-12-20T20:30:27.534886-08:00","created_by":"daemon"},{"issue_id":"gt-pv93","depends_on_id":"gt-6m3e","type":"related","created_at":"2025-12-20T20:30:35.115095-08:00","created_by":"daemon"}]} {"id":"gt-pvox","title":"Digest: mol-deacon-patrol","description":"Patrol #4: 2 Witnesses OK, 2 Refineries OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:21:42.037058-08:00","updated_at":"2025-12-27T21:26:04.802034-08:00","deleted_at":"2025-12-27T21:26:04.802034-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-pvzj","title":"Digest: mol-deacon-patrol @ 2025-12-24 20:23","description":"Patrol complete: inbox clear, all agents healthy, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T20:23:09.751138-08:00","updated_at":"2025-12-27T21:26:05.021658-08:00","deleted_at":"2025-12-27T21:26:05.021658-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-pwep","title":"implement","description":"Implement the solution for gt-test123. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:56:18.534804-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-pxsna","title":"gt session start --issue doesn't pin work to hook","description":"When starting a polecat with --issue, the work isn't pinned to the hook:\n gt session start beads/Toast --issue bd-oxgi\n \nAfter session starts, 'gt mol status' shows empty hook.\n\nThe polecat had to manually discover the work via bd ready. The --issue flag should call 'gt hook attach' or equivalent to pin the work.","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/rictus","created_at":"2025-12-28T19:30:49.536513-08:00","created_by":"mayor","updated_at":"2025-12-29T21:56:27.885229-08:00","closed_at":"2025-12-29T21:56:27.885229-08:00","close_reason":"Fixed: --issue flag now hooks work to polecat via bd update --status=hooked"} {"id":"gt-py01y","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:29:10.720846-08:00","updated_at":"2025-12-27T21:26:03.287626-08:00","deleted_at":"2025-12-27T21:26:03.287626-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-pyqv","title":"Work on ga-ct2: Add MR workflow to polecat completion. Wh...","description":"Work on ga-ct2: Add MR workflow to polecat completion. When polecat completes work, auto-create MR to integration branch. When done, submit MR (not PR) to integration branch for Refinery.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-19T22:58:35.473928-08:00","updated_at":"2025-12-21T17:20:42.831549-08:00"} @@ -1939,6 +1931,7 @@ {"id":"gt-qpsva","title":"Digest: mol-deacon-patrol","description":"Patrol 18: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T08:20:33.649295-08:00","updated_at":"2025-12-28T08:20:33.649295-08:00","closed_at":"2025-12-28T08:20:33.649264-08:00"} {"id":"gt-qpwv4","title":"Witness: detect polecat completion and trigger merge","description":"## Problem\nWhen polecat pushes completed work, witness needs to detect it and signal refinery.\n\n## ZFC-Compliant Solution\nAdd step to `mol-witness-patrol.formula.toml`:\n\n```toml\n[[step]]\nid = \"check-ready-branches\"\ntitle = \"Check for branches ready to merge\"\ndescription = \"\"\"\n1. List polecat branches: git branch -r | grep origin/polecat/\n2. For each branch ahead of main:\n - Check if polecat session is done (no session or at handoff prompt)\n - Check if bead is closed: bd show \u003cbead-id\u003e\n3. For ready branches, mail refinery:\n gt mail send \u003crig\u003e/refinery -s \"MERGE_READY: polecat/\u003cname\u003e\" -m \"Branch ready for merge\"\n\"\"\"\ndepends_on = [\"survey-polecats\"]\n```\n\n## Alternative: Polecat signals explicitly\nAdd to polecat workflow (end of work):\n```\ngt mail send \u003crig\u003e/refinery -s \"MERGE_READY\" -m \"polecat/\u003cname\u003e ready\"\ngt mail send \u003crig\u003e/witness -s \"WORK_COMPLETE\" -m \"\u003cbead-id\u003e done\"\n```\n\n## Why This Works\n- Witness/polecat agents make decisions\n- Mail is the coordination primitive\n- No daemon code needed\n\n## Files\n- formulas/mol-witness-patrol.formula.toml\n- formulas/mol-polecat-work.formula.toml (add completion signal)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-27T16:41:04.857442-08:00","created_by":"mayor","updated_at":"2025-12-27T21:29:45.756607-08:00","dependencies":[{"issue_id":"gt-qpwv4","depends_on_id":"gt-u6siy","type":"relates-to","created_at":"2025-12-27T20:59:10.634142-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:45.756607-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qqtk","title":"Speed up test suite","description":"Tests are running slow during MQ processing. Investigate and optimize:\n- Profile test execution time\n- Look for slow tests (network, file I/O, sleeps)\n- Consider parallel test execution\n- Cache expensive setup where possible","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-19T17:44:14.597955-08:00","updated_at":"2025-12-19T17:44:14.597955-08:00"} +{"id":"gt-qr0uw","title":"Digest: mol-deacon-patrol","description":"Patrol 7: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:45:12.725298-08:00","updated_at":"2025-12-28T19:45:12.725298-08:00","closed_at":"2025-12-28T19:45:12.725267-08:00"} {"id":"gt-qrze","title":"Work on gt-role-template: Refine witness/CLAUDE.md role t...","description":"Work on gt-role-template: Refine witness/CLAUDE.md role template. Add clearer heartbeat protocol, mail checking procedure, nudge decision criteria, escalation thresholds. Run 'bd show gt-role-template' for details.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-20T07:53:27.305468-08:00","updated_at":"2025-12-27T21:29:56.789455-08:00","deleted_at":"2025-12-27T21:29:56.789455-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qscw","title":"Merge: gt-72so","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-72so\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T16:20:02.203335-08:00","updated_at":"2025-12-27T21:27:22.733773-08:00","deleted_at":"2025-12-27T21:27:22.733773-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-qsvq","title":"gt doctor: Detect and clean up orphaned sessions/processes","description":"## Problem\nOrphaned tmux sessions and Claude processes accumulate over time, consuming memory.\n\n## Discovered Orphans\n- gt-deacon: Idle Claude session, not part of any rig\n\n## Proposed Solution\n\n### gt doctor --check (default)\nDetect issues without fixing:\n- Orphan sessions (not matching rig/polecat/crew/witness/refinery/mayor pattern)\n- Claude processes without parent tmux session\n- Tmux sessions without Claude (stuck at bash prompt)\n- Polecats marked 'working' but session idle\n\n### gt doctor --fix\nClean up detected issues:\n- Kill orphan sessions\n- Kill orphan Claude processes\n- Optionally reset stuck polecat state\n\n### gt gc (alternative name)\nShort alias for cleanup operations.\n\n## Acceptance Criteria\n- [ ] Detects orphan sessions\n- [ ] Detects orphan processes\n- [ ] Safe cleanup (doesn't kill active work)\n- [ ] Reports what was cleaned","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-20T01:06:39.046959-08:00","updated_at":"2025-12-27T21:29:53.865024-08:00","deleted_at":"2025-12-27T21:29:53.865024-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} @@ -1971,8 +1964,10 @@ {"id":"gt-qwyu","title":"Test issue for spawn molecule","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:58:43.699993-08:00","updated_at":"2025-12-27T21:29:56.453323-08:00","deleted_at":"2025-12-27T21:29:56.453323-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qx3k","title":"Merge: gt-jzot","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-jzot\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T22:55:45.3321-08:00","updated_at":"2025-12-27T21:27:22.534987-08:00","deleted_at":"2025-12-27T21:27:22.534987-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-qxei","title":"Test4","description":"test4 body","status":"tombstone","priority":2,"issue_type":"message","created_at":"2025-12-20T17:47:12.137051-08:00","updated_at":"2025-12-27T21:29:56.74451-08:00","deleted_at":"2025-12-27T21:29:56.74451-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"message"} +{"id":"gt-qy6u","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-24T20:40:58.593162-08:00","updated_at":"2025-12-27T21:29:57.825182-08:00","deleted_at":"2025-12-27T21:29:57.825182-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-qz2l","title":"Refinery patrol: Add banners and wisp-based execution","description":"Bring Refinery patrol up to Deacon's level of sophistication:\n\n## Current state\n- mol-refinery-patrol exists (needs verification)\n- Basic merge queue processing\n\n## Needed\n1. **Banners** - Print step banners like Deacon does:\n ```\n ═══════════════════════════════════════════════════════════════\n ⚗️ QUEUE-CHECK\n Processing merge queue entries\n ═══════════════════════════════════════════════════════════════\n ```\n\n2. **Wisp-based execution** - Spawn patrol as wisp, squash when complete\n3. **Handoff bead attachment** - Refinery needs its own handoff bead with attached_molecule\n4. **Loop-or-exit step** - Context-aware cycling like Deacon\n5. **Patrol summary banner** at end of each cycle\n\n## Reference\nSee Deacon patrol implementation in ~/gt/deacon/CLAUDE.md","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T13:19:40.777589-08:00","updated_at":"2025-12-27T21:29:53.015552-08:00","dependencies":[{"issue_id":"gt-qz2l","depends_on_id":"gt-y481","type":"parent-child","created_at":"2025-12-23T13:20:15.787696-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.015552-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-r01","title":"EXTERNAL: Beads Messaging \u0026 Knowledge Graph (bd-kwro)","description":"Tracking issue for external dependency on Beads v0.30.2 messaging features.\n\nBeads epic: bd-kwro in ~/src/beads (steveyegge/beads repo)\n\nThis blocks GGT work that depends on:\n- bd mail send/inbox/read/ack commands\n- message issue type\n- replies_to threading\n- Hooks system for notifications\n- Identity configuration\n\nGGT mail commands will be thin wrappers around bd mail once available.\n\nWhen bd-kwro ships in Beads v0.30.2, close this and unblock dependent work.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-16T13:12:02.676883-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} +{"id":"gt-r099o","title":"Merge: imperator-1767106079026","description":"branch: polecat/imperator-1767106079026\ntarget: main\nsource_issue: imperator-1767106079026\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T10:46:40.45114-08:00","created_by":"gastown/polecats/imperator","updated_at":"2025-12-30T10:46:40.45114-08:00"} {"id":"gt-r56e4","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All agents healthy, 1 message processed, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:02:47.692316-08:00","updated_at":"2025-12-27T21:26:03.050494-08:00","deleted_at":"2025-12-27T21:26:03.050494-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-r6td","title":"gt spawn: Notify Deacon and Witness on polecat start","description":"When gt spawn creates a polecat, it should mail both Deacon and Witness:\n\n```\ngt mail send \u003crig\u003e/witness -s 'POLECAT_STARTED furiosa' -m 'Issue: gt-xxx'\ngt mail send deacon/ -s 'POLECAT_STARTED gastown/furiosa' -m 'Issue: gt-xxx'\n```\n\nThis enables:\n- Witness to bond a lease to its patrol wisp\n- Deacon to verify worker started (redundancy)\n- Both to nudge if worker is idle at prompt\n\nPart of the village self-monitoring architecture.","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-22T22:01:11.790203-08:00","updated_at":"2025-12-27T21:29:53.108254-08:00","deleted_at":"2025-12-27T21:29:53.108254-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-r73s","title":"Merge: gt-5wb7","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-5wb7\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:43:40.018286-08:00","updated_at":"2025-12-27T21:27:22.576429-08:00","deleted_at":"2025-12-27T21:27:22.576429-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -1981,7 +1976,6 @@ {"id":"gt-r83og","title":"Digest: mol-deacon-patrol","description":"Patrol 4: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:29:23.029208-08:00","updated_at":"2025-12-28T01:29:23.029208-08:00","closed_at":"2025-12-28T01:29:23.029171-08:00"} {"id":"gt-r8ej","title":"Implement pinned beads for handoff state","description":"Add pinned bead support to beads:\n- Pinned beads never close, only update\n- Use for persistent state like Refinery handoffs\n- bd create --pinned flag\n- bd list --pinned to find them\n- Update description to change state","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-19T18:09:08.019293-08:00","updated_at":"2025-12-27T21:29:53.915582-08:00","dependencies":[{"issue_id":"gt-r8ej","depends_on_id":"gt-ktal","type":"blocks","created_at":"2025-12-19T18:09:39.340915-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.915582-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-r9ng","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:46","description":"Patrol 14: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:46:56.641819-08:00","updated_at":"2025-12-27T21:26:05.079324-08:00","deleted_at":"2025-12-27T21:26:05.079324-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-ra3xj","title":"Merge: keeper-1767074342207","description":"branch: polecat/keeper-1767074342207\ntarget: main\nsource_issue: keeper-1767074342207\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-29T22:03:12.995705-08:00","created_by":"gastown/polecats/keeper","updated_at":"2025-12-29T23:55:11.895376-08:00","closed_at":"2025-12-29T23:55:11.895376-08:00"} {"id":"gt-rana","title":"Patrol System: Agent lifecycle loops with attachments","description":"Enable Gas Town agents to run continuous patrols, survive crashes, and hand off work across sessions.\n\n## Core Concepts\n- **Attachments**: Molecules bound to agent's pinned bead until complete\n- **Patrols**: Cyclic molecules that loop (deacon, witness, refinery)\n- **Quiescent**: Agents that sleep until triggered (witness, refinery)\n\n## Design Doc\nSee docs/patrol-system-design.md\n\n## Phases\nPhase 1: Foundation (attachment field, daemon detection, mol-deacon-patrol)\nPhase 2: Quiescent Agents (wake triggers, witness/refinery patrols)\nPhase 3: Callbacks and Plugins (mail protocol, plugin runner)\nPhase 4: Polish (gt patrol status, metrics, tuning)\n\n## Key Decisions\n- Attachment as field on pinned bead (not edge type, for now)\n- Mail-based orchestration for all callbacks\n- Queue replacement for heartbeat delivery (not pile-up)\n- Burn and respawn for patrol loops (not in-place reset)","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-21T13:38:23.416949-08:00","updated_at":"2025-12-27T21:29:53.568581-08:00","deleted_at":"2025-12-27T21:29:53.568581-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-rana.1","title":"Phase 1.1: Attachment field on pinned beads","description":"Add attached_molecule field to pinned bead schema.\n\n## Schema Change\nAdd to handoff/pinned bead issues:\n- attached_molecule: string (root issue ID of attached mol)\n- attached_at: timestamp\n\n## Implementation\n- Update beads Issue struct if needed\n- Or: use labels/metadata field\n- Ensure bd show displays attachment info\n\n## Acceptance\n- Can set/clear attachment on a bead\n- bd show displays attachment status","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T13:38:34.251531-08:00","updated_at":"2025-12-27T21:29:53.560114-08:00","dependencies":[{"issue_id":"gt-rana.1","depends_on_id":"gt-rana","type":"parent-child","created_at":"2025-12-21T13:38:34.253378-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.560114-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rana.2","title":"Phase 1.2: Daemon attachment detection","description":"Daemon polls Deacon's pinned bead to detect naked state.\n\n## Implementation\n- Daemon knows Deacon's pinned bead ID\n- Every heartbeat cycle: bd show \u003cpinned\u003e --json\n- Parse attached_molecule field\n- If null/empty: Deacon is naked\n\n## Actions on Naked\n- Spawn mol-deacon-patrol\n- Attach to Deacon's pinned\n- Nudge Deacon to start\n\n## Failsafes\n- Keepalive file monitoring\n- Stale detection (\u003e10min no progress)\n- Force nudge on stale\n\nDepends: gt-rana.1","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-21T13:38:53.520213-08:00","updated_at":"2025-12-27T21:29:53.551771-08:00","dependencies":[{"issue_id":"gt-rana.2","depends_on_id":"gt-rana","type":"parent-child","created_at":"2025-12-21T13:38:53.521672-08:00","created_by":"daemon"},{"issue_id":"gt-rana.2","depends_on_id":"gt-rana.1","type":"blocks","created_at":"2025-12-21T13:39:11.333008-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:53.551771-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -1993,6 +1987,7 @@ {"id":"gt-rbacd","title":"Digest: mol-deacon-patrol","description":"Patrol 20: clear, handoff","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T18:18:37.41487-08:00","updated_at":"2025-12-27T21:26:00.937721-08:00","deleted_at":"2025-12-27T21:26:00.937721-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rbasx","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 5: routine, healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:23:16.720779-08:00","updated_at":"2025-12-27T21:26:01.933659-08:00","deleted_at":"2025-12-27T21:26:01.933659-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rbncw","title":"Witness events in gt feed","description":"Wire witness patrol events to gt feed display.\n\nAfter 'Witness emits activity events' is done:\n- gt feed should show patrol activity\n- Useful for debugging polecat issues\n\nExample output:\n 19:45 PATROL_COMPLETE gastown/witness (checked 3 polecats)\n 19:44 POLECAT_NUDGED gastown/polecats/nux (idle 10m)\n 19:40 ESCALATION mayor (polecat stuck)","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/furiosa","created_at":"2025-12-28T21:40:40.254107-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-30T01:52:38.910442-08:00","closed_at":"2025-12-30T01:52:38.910442-08:00","close_reason":"Implemented: Wire witness patrol events to gt feed display. Added GtEventsSource for parsing .events.jsonl, CombinedSource for merging bd activity and gt events, and symbols/styling for patrol events.","dependencies":[{"issue_id":"gt-rbncw","depends_on_id":"gt-nfdyl","type":"blocks","created_at":"2025-12-28T21:41:11.617926-08:00","created_by":"daemon"}]} +{"id":"gt-rbp6","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\n[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-24T21:32:00.561088-08:00","updated_at":"2025-12-27T21:29:57.808639-08:00","deleted_at":"2025-12-27T21:29:57.808639-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rbp6.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:32:00.648392-08:00","updated_at":"2025-12-27T21:29:55.403481-08:00","deleted_at":"2025-12-27T21:29:55.403481-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-rectf","title":"Digest: mol-deacon-patrol","description":"P11","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:25:17.043804-08:00","updated_at":"2025-12-27T21:26:01.65427-08:00","deleted_at":"2025-12-27T21:26:01.65427-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-refinery-gastown","title":"gt-refinery-gastown","description":"Refinery - per-rig merge queue processor for gastown.\n\nrole_type: refinery\nrig: gastown\nagent_state: idle\nhook_bead: null\nrole_bead: gt-refinery-role","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-28T00:07:41.933483-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-29T14:30:35.647713-08:00","closed_at":"2025-12-29T14:30:35.647713-08:00","close_reason":"Migrated to canonical naming: gt-gastown-witness/refinery"} @@ -2123,7 +2118,6 @@ {"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":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/imperator","created_at":"2025-12-26T14:52:04.244948-08:00","updated_at":"2025-12-30T10:39:59.111-08:00","closed_at":"2025-12-30T10:39:59.111-08:00","close_reason":"Implemented @group dynamic resolution in mail router with fan-out support","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-tj92n","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:09:08.186627-08:00","created_by":"gastown/polecats/slit","updated_at":"2025-12-29T20:55:04.949044-08:00","closed_at":"2025-12-29T20:55:04.949044-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-30T10:06:56.899508-08:00","closed_at":"2025-12-30T10:06:56.899508-08:00","close_reason":"Branch merged to main"} {"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"} @@ -2156,6 +2150,7 @@ {"id":"gt-tubn","title":"Track operational stats as entity/audit beads","description":"Witness and refinery track operational stats in JSON files:\n- total_merged, today_merged, total_failed (refinery)\n- total_checks, total_nudges, total_escalations (witness)\n\nFor HOP entity CV tracking, these could become:\n- type=audit beads (daily roll-ups of operational metrics)\n- Entity chain entries showing validator activity\n\nThis provides observability and contributes to entity reputation tracking (e.g., refinery X has merged 500 PRs with 2% failure rate).\n\nNot critical for launch but aligns with HOP Platform of Platforms vision.","status":"open","priority":4,"issue_type":"feature","created_at":"2025-12-21T22:07:30.404073-08:00","updated_at":"2025-12-21T22:07:30.404073-08:00"} {"id":"gt-tulx","title":"gt mq submit: creates task type instead of merge-request type","description":"## Problem\n\n`gt mq submit` creates an issue with `type: task` but should be `type: merge-request`.\n\n## Evidence\n\n```\n$ bd show gt-n508\ngt-n508: Merge: gt-70b3\nStatus: open\nPriority: P1\nType: task \u003c-- WRONG, should be merge-request\n...\nDescription:\ntype: merge-request \u003c-- Correct type is in description, not in actual type field\n```\n\n## Impact\n\n`gt mq list` shows empty queue because it queries for `type: merge-request`\n\n## Fix\n\n`gt mq submit` should set `--type merge-request` when creating the bead.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-18T21:57:37.905848-08:00","updated_at":"2025-12-27T21:29:54.066926-08:00","deleted_at":"2025-12-27T21:29:54.066926-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-tvlam","title":"Digest: mol-deacon-patrol","description":"Patrol 6: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:01:29.899-08:00","updated_at":"2025-12-27T21:26:04.026295-08:00","deleted_at":"2025-12-27T21:26:04.026295-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-tvos","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-test123) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:48:26.32141-08:00","updated_at":"2025-12-25T14:12:42.239473-08:00","deleted_at":"2025-12-25T14:12:42.239473-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-tvwnz","title":"MQ summary in gt status","description":"Add per-rig MQ summary to gt status output.\n\nCurrent gt status shows:\n gastown\n refinery ✓ running\n\nAdd:\n gastown\n refinery ✓ running\n MQ: 4 pending, 1 in-flight\n\nImplementation:\n- Query beads for merge-request type issues\n- Count by status (open=pending, in_progress=in-flight)\n- Display in rig section","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/nux","created_at":"2025-12-28T21:40:37.900461-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-30T01:50:34.700959-08:00","closed_at":"2025-12-30T01:50:34.700959-08:00","close_reason":"Implemented MQ summary in gt status output - shows pending, in-flight, and blocked MR counts under Refinery section","dependencies":[{"issue_id":"gt-tvwnz","depends_on_id":"gt-ytsxp","type":"blocks","created_at":"2025-12-28T21:41:11.558562-08:00","created_by":"daemon"}]} {"id":"gt-tw1g","title":"Startup hook should validate attached molecule is still open","description":"When the SessionStart hook outputs attached_molecule from the handoff bead, it should check if that molecule is still open. If closed, it should:\n1. Clear the stale attachment\n2. Auto-spawn a fresh patrol molecule\n3. Attach the new patrol\n\nCurrently it just outputs the stale reference without validation, leaving the Deacon confused about what to run.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-23T13:16:51.73028-08:00","updated_at":"2025-12-27T21:29:55.985303-08:00","deleted_at":"2025-12-27T21:29:55.985303-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-twjr5","title":"Async Coordination Gates","description":"Agents wait for external events without polling.\n\n## Problem\nAgents cannot wait for external conditions (CI completion, human approval, timers) without wasteful polling or losing state on handoff.\n\n## Requirements\n- Gate issue type in beads (type=gate)\n- bd gate create --await timer:5m / gh:run:123 / human:approve / mail:pattern\n- Deacon evaluates pending gates each patrol cycle\n- Agents park work on gate, resume when condition met\n- Gate timeout and notification\n\n## Gate Types\n- timer:\u003cduration\u003e - Simple delay (5m, 1h, 24h)\n- gh:run:\u003cid\u003e - GitHub Actions run completion\n- gh:pr:\u003cid\u003e - PR merged/closed \n- human:\u003cprompt\u003e - Human approval required\n- mail:\u003cpattern\u003e - Wait for mail matching pattern\n\n## Success Criteria\n- Agent can create gate and suspend work\n- Deacon wakes agent when gate condition met\n- Gates survive session cycling\n\nConsolidates gt-31eg. Parallel work with no dependencies.","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-25T20:46:07.930952-08:00","updated_at":"2025-12-27T21:29:52.498052-08:00","deleted_at":"2025-12-27T21:29:52.498052-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} @@ -2166,6 +2161,7 @@ {"id":"gt-twjr5.5","title":"Agent parking and resuming","description":"Implement gt park and gt resume commands. Agent parks work on a gate, state persists across sessions. When gate condition met, Deacon sends wake mail. Agent resumes from parked state. Critical for async workflows.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:55:51.294474-08:00","updated_at":"2025-12-27T21:29:54.935805-08:00","dependencies":[{"issue_id":"gt-twjr5.5","depends_on_id":"gt-twjr5","type":"parent-child","created_at":"2025-12-25T20:55:51.296459-08:00","created_by":"daemon"},{"issue_id":"gt-twjr5.5","depends_on_id":"gt-twjr5.2","type":"blocks","created_at":"2025-12-25T20:56:46.946883-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.935805-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-ty3w4","title":"Digest: mol-deacon-patrol","description":"Final patrol cycle 20: all systems healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T11:22:00.43096-08:00","updated_at":"2025-12-27T21:26:03.311941-08:00","deleted_at":"2025-12-27T21:26:03.311941-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-tyu37","title":"Digest: mol-deacon-patrol","description":"Patrol 13: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:23:11.657968-08:00","updated_at":"2025-12-27T21:26:00.092483-08:00","deleted_at":"2025-12-27T21:26:00.092483-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-tz7f","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-1wmw) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:54:21.059785-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-tzn8z","title":"Digest: mol-deacon-patrol","description":"Patrol 19: healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:25:18.709476-08:00","updated_at":"2025-12-27T21:25:59.99424-08:00","deleted_at":"2025-12-27T21:25:59.99424-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-tzogh","title":"Clean up deprecated gt mol command examples in molecule.go","description":"## Task\n\nThe molecule.go file contains example strings that reference deprecated gt mol commands.\n\n## Deprecated References Found\n\n1. `gt molecule instantiate mol-xyz` → should reference `bd mol pour`\n2. `gt mol list --catalog` → should reference `bd formula list` \n3. `gt mol bond mol-polecat-arm` → should reference `bd mol bond`\n\n## Location\n\n`internal/cmd/molecule.go` (multiple lines)\n\n## Context\n\nThe gt mol help already correctly redirects:\n```\nFor beads data operations (listing, showing, creating molecules), use bd:\n bd formula list List molecule protos (replaces gt mol catalog)\n bd mol show Show molecule details (replaces gt mol show)\n bd mol pour Instantiate molecule (replaces gt mol instantiate)\n bd mol bond Bond molecules together (replaces gt mol bond)\n```\n\nBut the example strings in the code still show the old patterns.\n\n## Fix\n\nUpdate the example strings to use the current bd mol patterns.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T17:12:36.602205-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-27T21:29:54.696525-08:00","deleted_at":"2025-12-27T21:29:54.696525-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-u0c1","title":"Merge: gt-qna4","description":"branch: polecat/capable\ntarget: main\nsource_issue: gt-qna4\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-20T07:47:28.453817-08:00","updated_at":"2025-12-27T21:27:22.684012-08:00","deleted_at":"2025-12-27T21:27:22.684012-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} @@ -2281,7 +2277,6 @@ {"id":"gt-vdprb.5","title":"Documentation: Feed-based wake model","description":"Document the feed-based wake model in patrol-system-design.md and PRIMING.md.\n\nDONE (2025-12-29):\n- Updated patrol-system-design.md with full feed-based wake specification\n- Added Feed Is the Signal and Discover Dont Be Told insights to PRIMING.md\n- Committed as 39e46148","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-29T17:03:56.043996-08:00","created_by":"mayor","updated_at":"2025-12-29T17:04:01.193795-08:00","closed_at":"2025-12-29T17:04:01.193795-08:00","close_reason":"Completed 2025-12-29, commit 39e46148","dependencies":[{"issue_id":"gt-vdprb.5","depends_on_id":"gt-vdprb","type":"parent-child","created_at":"2025-12-29T17:03:56.044684-08:00","created_by":"mayor"}]} {"id":"gt-vg4n","title":"Use Beads issue status as spawn source of truth","description":"Currently witness tracks spawned issues in .gastown/witness.json to prevent re-spawning:\n\n{\"spawned_issues\": [\"gt-abc1\", \"gt-def2\", ...]}\n\nThis is redundant with Beads issue status (in_progress). The witness could query:\n bd list --status=in_progress\n\nThe local list serves as a performance cache to avoid querying beads every cycle. Consider:\n1. Use Beads as source of truth\n2. Keep local cache with TTL\n3. Sync cache on witness start\n\nThis simplifies state management and ensures consistency.","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-21T22:07:31.756863-08:00","updated_at":"2025-12-21T22:07:31.756863-08:00"} {"id":"gt-vg6u","title":"TIDY UP: Your previous work (gt-odvf: bd mol CLI docs) wa...","description":"TIDY UP: Your previous work (gt-odvf: bd mol CLI docs) was already merged to main. Check your git status is clean, sync beads, and if nothing to do, just run 'gt done'.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T17:26:20.360645-08:00","updated_at":"2025-12-27T21:29:56.520829-08:00","deleted_at":"2025-12-27T21:29:56.520829-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-vhby","title":"implement","description":"Implement the solution for gt-test123. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.\n\nDepends: load-context","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-21T21:48:26.321647-08:00","updated_at":"2025-12-25T14:12:42.228522-08:00","deleted_at":"2025-12-25T14:12:42.228522-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vhn1.1","title":"Polecat Arm (arm-toast)","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm that runs in parallel with other arms.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Step: capture\nCapture recent tmux output for toast.\n\n```bash\ntmux capture-pane -t gt-gastown-toast -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n## Step: assess\nCategorize polecat state based on captured output.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n## Step: load-history\nRead nudge history for toast from patrol state.\n\n```\nnudge_count = state.nudges[toast].count\nlast_nudge_time = state.nudges[toast].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed\nto the arm via the bonding context.\nNeeds: assess\n\n## Step: decide\nApply the nudge matrix to determine action for toast.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n## Step: execute\nTake the decided action for toast.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-gastown-toast \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/toast\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: toast stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp for toast\n\nThis data feeds back to the parent patrol's aggregate step.\n---\nbonded_from: mol-polecat-arm\nbonded_to: gt-vhn1\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T22:27:56.71661-08:00","updated_at":"2025-12-27T21:29:55.679222-08:00","deleted_at":"2025-12-27T21:29:55.679222-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vizdt","title":"Digest: mol-deacon-patrol","description":"Patrol 19: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:20:10.919259-08:00","updated_at":"2025-12-27T21:26:02.650607-08:00","deleted_at":"2025-12-27T21:26:02.650607-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vj3rb","title":"Digest: mol-deacon-patrol","description":"Patrol 3: stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:43.678006-08:00","updated_at":"2025-12-27T21:26:02.433771-08:00","deleted_at":"2025-12-27T21:26:02.433771-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2295,10 +2290,10 @@ {"id":"gt-vmk7","title":"Guardrail: Verify commits exist before closing polecat issues","description":"## Updated Approach (ZFC)\n\nThe original proposal was for mechanical guardrails in bd close. This contradicts the ZFC principle: all decisions go to models, not code.\n\n## Correct Solution\n\nThe verification should happen in **mol-polecat-arm** execute step, not bd close:\n\nIn the pre-kill-verify action:\n```bash\n# Current steps\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n\n# ADD: Verify productive work\ngit log --oneline --grep='\u003cissue-id\u003e' | head -1\n# If no commits AND issue being closed as 'done' → flag for review\n```\n\nThe agent (Witness) makes the decision. The mol gives it the verification step.\n\n## Why Not Code Guardrails\n\nPolecats have legitimate reasons to close issues without commits:\n- Already done (someone else fixed it)\n- Deferred (out of scope)\n- Escalated (needs human decision)\n- Duplicate (merged with another issue)\n\nA code guardrail would block all these. The mol step lets the agent verify AND make the judgment call.\n\n## Implementation\n\nUpdate mol-polecat-arm execute step to include commit verification for 'done' closures.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T14:35:24.695717-08:00","updated_at":"2025-12-27T21:29:52.973768-08:00","deleted_at":"2025-12-27T21:29:52.973768-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vmm9","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:26","description":"Patrol 13: quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:26:56.830842-08:00","updated_at":"2025-12-27T21:26:05.2473-08:00","deleted_at":"2025-12-27T21:26:05.2473-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vmpo","title":"orphan-check","description":"Find abandoned work. Check for in_progress issues with no active agent.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T14:27:33.988644-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} -{"id":"gt-vn20c","title":"Digest: mol-deacon-patrol","description":"Patrol 9: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:31:51.321997-08:00","updated_at":"2025-12-28T01:31:51.321997-08:00","closed_at":"2025-12-28T01:31:51.321952-08:00"} {"id":"gt-vnp9","title":"tmux notifications: display-message too subtle, use send-keys instead","description":"## Problem\n\n`tmux display-message` notifications are not visible enough - they appear briefly in the status bar and are easy to miss.\n\n## Current Behavior\n\nrouter.go uses:\n```go\nr.tmux.DisplayMessageDefault(sessionID, notification)\n```\n\n## What Works\n\nSending echo commands directly to the terminal:\n```bash\ntmux send-keys -t \u003csession\u003e \"echo '📬 NEW MAIL from mayor'\" Enter\n```\n\n## Proposed Fix\n\nChange notification method to send visible output to the terminal, perhaps with a box/banner:\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📬 NEW MAIL from mayor\nSubject: \u003csubject\u003e\nRun: bd mail inbox\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n```\n\n## Considerations\n\n- This interrupts the terminal output (acceptable for important mail)\n- Could check if Claude is mid-response and queue notification\n- Or use tmux popup if available","notes":"Additional issues:\n1. Enter key not sent properly when chained with send-keys\n2. Need to debounce and send Enter separately\n3. Correct pattern: send text, sleep briefly, then send Enter","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-18T21:35:28.542985-08:00","updated_at":"2025-12-27T21:29:57.085269-08:00","deleted_at":"2025-12-27T21:29:57.085269-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-vqhc","title":"gt sling/handoff fails: slashes in agent identity create invalid hook paths","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-24T23:24:49.495017-08:00","updated_at":"2025-12-27T21:29:52.556135-08:00","deleted_at":"2025-12-27T21:29:52.556135-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"bug"} {"id":"gt-vqpmf","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 14: nominal","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T15:46:20.527809-08:00","updated_at":"2025-12-27T21:26:01.36161-08:00","deleted_at":"2025-12-27T21:26:01.36161-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-vtqs3","title":"Digest: mol-deacon-patrol","description":"Patrol 12: all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-27T23:08:31.206977-08:00","updated_at":"2025-12-27T23:08:31.206977-08:00","closed_at":"2025-12-27T23:08:31.206937-08:00","dependencies":[{"issue_id":"gt-vtqs3","depends_on_id":"gt-eph-252","type":"parent-child","created_at":"2025-12-27T23:08:31.207814-08:00","created_by":"deacon"}]} {"id":"gt-vuld8","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy, 2 crew active","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T17:49:39.892429-08:00","updated_at":"2025-12-27T21:26:01.10764-08:00","deleted_at":"2025-12-27T21:26:01.10764-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vv4i","title":"Polecat template: move session close checklist into molecule steps","description":"Template has prose checklists for 'Before Signaling Done' and 'SESSION CLOSE PROTOCOL'. These should be encoded as tail steps in the polecat molecule, not repeated as prose in CLAUDE.md. Reduces duplication and ensures the steps are actually followed.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T16:56:50.666492-08:00","updated_at":"2025-12-27T21:29:55.908628-08:00","dependencies":[{"issue_id":"gt-vv4i","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.612852-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.908628-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-vx2qv","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 9: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:22:07.233471-08:00","updated_at":"2025-12-28T11:22:07.233471-08:00","closed_at":"2025-12-28T11:22:07.233434-08:00"} @@ -2311,8 +2306,7 @@ {"id":"gt-w41ln","title":"E2E Test: Add a comment to internal/util/process.go","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T16:16:17.43602-08:00","created_by":"stevey","updated_at":"2025-12-28T16:21:56.724387-08:00","closed_at":"2025-12-28T16:21:56.724387-08:00"} {"id":"gt-w52o8","title":"Digest: mol-deacon-patrol","description":"Patrol 19: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:05:39.718034-08:00","updated_at":"2025-12-27T21:26:03.960258-08:00","deleted_at":"2025-12-27T21:26:03.960258-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-w5dj","title":"Merge: gt-unrd","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-unrd\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-19T15:42:06.600633-08:00","updated_at":"2025-12-27T21:27:22.750283-08:00","deleted_at":"2025-12-27T21:27:22.750283-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} -{"id":"gt-w631c","title":"Test Patrol Parent","description":"[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\n[RESURRECTED] This issue was deleted but recreated as a tombstone to preserve hierarchical structure.\n\nOriginal description:\nTest parent for Christmas Ornament pattern","status":"tombstone","priority":4,"issue_type":"task","created_at":"2025-12-25T00:57:46.905803-08:00","updated_at":"2025-12-27T21:29:57.783989-08:00","deleted_at":"2025-12-27T21:29:57.783989-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-w631c.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:57:47.004005-08:00","updated_at":"2025-12-25T01:33:00.170605-08:00","closed_at":"2025-12-25T01:33:00.170605-08:00","dependencies":[{"issue_id":"gt-w631c.1","depends_on_id":"gt-w631c","type":"parent-child","created_at":"2025-12-25T00:57:47.004473-08:00","created_by":"daemon"}]} +{"id":"gt-w631c.1","title":"Test Polecat Arm","description":"Test child for bonding pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:57:47.004005-08:00","updated_at":"2025-12-25T01:33:00.170605-08:00","closed_at":"2025-12-25T01:33:00.170605-08:00"} {"id":"gt-w6ty","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:48","description":"Patrol 18: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:48:00.334125-08:00","updated_at":"2025-12-27T21:26:05.046336-08:00","deleted_at":"2025-12-27T21:26:05.046336-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-w775","title":"MR: gt-svi.1 (polecat/Furiosa)","description":"branch: polecat/Furiosa\ntarget: main\nsource_issue: gt-svi.1","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-18T20:21:40.921429-08:00","updated_at":"2025-12-27T21:27:22.791578-08:00","deleted_at":"2025-12-27T21:27:22.791578-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"} {"id":"gt-w8322","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:30:09.33985-08:00","updated_at":"2025-12-27T21:26:03.279435-08:00","deleted_at":"2025-12-27T21:26:03.279435-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2333,7 +2327,6 @@ {"id":"gt-wisp-5yy","title":"Load persisted patrol state","description":"Read handoff bead and get nudge counts.\n\nLoad persistent state from the witness handoff bead:\n- Active workers and their status from last cycle\n- Nudge counts per worker per issue\n- Last nudge timestamps\n- Pending escalations\n\n```bash\nbd show \u003chandoff-bead-id\u003e\n```\n\nIf no handoff exists (fresh start), initialize empty state.\nThis state persists across wisp burns and session cycles.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.82212-08:00","updated_at":"2025-12-27T21:29:55.010987-08:00","dependencies":[{"issue_id":"gt-wisp-5yy","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.977849-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-5yy","depends_on_id":"gt-wisp-ps8","type":"blocks","created_at":"2025-12-25T19:54:36.992199-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.010987-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-646","title":"Evaluate pending async gates","description":"Evaluate pending async gates.\n\nGates are async coordination primitives that block until conditions are met.\nThe Deacon is responsible for monitoring gates and closing them when ready.\n\n**Timer gates** (await_type: timer):\nCheck if elapsed time since creation exceeds the timeout duration.\n\n```bash\n# List all open gates\nbd gate list --json\n\n# For each timer gate, check if elapsed:\n# - CreatedAt + Timeout \u003c Now → gate is ready to close\n# - Close with: bd gate close \u003cid\u003e --reason \"Timer elapsed\"\n```\n\n**GitHub gates** (await_type: gh:run, gh:pr) - handled in separate step.\n\n**Human/Mail gates** - require external input, skip here.\n\nAfter closing a gate, the Waiters field contains mail addresses to notify.\nSend a brief notification to each waiter that the gate has cleared.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.04871-08:00","updated_at":"2025-12-26T13:06:05.44536-08:00","closed_at":"2025-12-26T13:06:05.44536-08:00","dependencies":[{"issue_id":"gt-wisp-646","depends_on_id":"gt-wisp-zuj","type":"blocks","created_at":"2025-12-26T13:04:23.144118-08:00","created_by":"deacon"}]} {"id":"gt-wisp-7yg","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:04:44.878984-08:00","updated_at":"2025-12-27T21:29:54.852102-08:00","deleted_at":"2025-12-27T21:29:54.852102-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-wisp-8g4","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T13:34:16.373414-08:00","updated_at":"2025-12-27T21:29:54.86914-08:00","deleted_at":"2025-12-27T21:29:54.86914-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-9hf","title":"Nudge newly spawned polecats","description":"Nudge newly spawned polecats that are ready for input.\n\nWhen polecats are spawned, their Claude session takes 10-20 seconds to initialize. The spawn command returns immediately without waiting. This step finds spawned polecats that are now ready and sends them a trigger to start working.\n\n**ZFC-Compliant Observation** (AI observes AI):\n\n```bash\n# View pending spawns with captured terminal output\ngt deacon pending\n```\n\nFor each pending session, analyze the captured output:\n- Look for Claude's prompt indicator \"\u003e \" at the start of a line\n- If prompt is visible, Claude is ready for input\n- Make the judgment call yourself - you're the AI observer\n\nFor each ready polecat:\n```bash\n# 1. Trigger the polecat\ngt nudge \u003csession\u003e \"Begin.\"\n\n# 2. Clear from pending list\ngt deacon pending \u003csession\u003e\n```\n\nThis triggers the UserPromptSubmit hook, which injects mail so the polecat sees its assignment.\n\n**Bootstrap mode** (daemon-only, no AI available):\nThe daemon uses `gt deacon trigger-pending` with regex detection. This ZFC violation is acceptable during cold startup when no AI agent is running yet.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.01231-08:00","updated_at":"2025-12-27T21:29:54.817167-08:00","deleted_at":"2025-12-27T21:29:54.817167-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-9ss","title":"Clean dead sessions","description":"Clean dead sessions and orphaned state.\n\nRun `gt doctor --fix` to handle all cleanup:\n\n```bash\n# Preview what needs cleaning\ngt doctor -v\n\n# Fix everything\ngt doctor --fix\n```\n\nThis handles:\n- **orphan-sessions**: Kill orphaned tmux sessions (gt-* not matching valid patterns)\n- **orphan-processes**: Kill orphaned Claude processes (no tmux parent)\n- **wisp-gc**: Garbage collect abandoned wisps (\u003e1h old)\n\nAll cleanup is handled by doctor checks - no need to run separate commands.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T13:04:23.049699-08:00","updated_at":"2025-12-26T13:09:27.208152-08:00","closed_at":"2025-12-26T13:09:27.208152-08:00"} {"id":"gt-wisp-a1c","title":"Process witness mail","description":"Process witness mail: lifecycle requests, help requests.\n\n```bash\ngt mail inbox\n```\n\nHandle by message type:\n- **LIFECYCLE/Shutdown**: Queue for pre-kill verification\n- **Blocked/Help**: Assess if resolvable or escalate\n- **HANDOFF**: Load predecessor state\n- **Work complete**: Verify issue closed, proceed to pre-kill\n\nRecord any pending actions for later steps.\nMark messages as processed when complete.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821859-08:00","updated_at":"2025-12-27T21:29:55.019343-08:00","dependencies":[{"issue_id":"gt-wisp-a1c","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.963525-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.019343-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2344,6 +2337,7 @@ {"id":"gt-wisp-lkc","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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.013602-08:00","updated_at":"2025-12-27T21:29:54.800179-08:00","deleted_at":"2025-12-27T21:29:54.800179-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-lsd","title":"Aggregate arm results","description":"Collect outcomes from all polecat inspection arms.\n\nThis is a **fanout gate** - it cannot proceed until ALL dynamically-bonded\npolecat arms have completed their inspection cycles.\n\nOnce all arms complete, collect their outcomes:\n- Actions taken per polecat (nudge, kill, escalate, none)\n- Updated nudge counts\n- Any errors or issues discovered\n\nBuild the consolidated state for save-state.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.820571-08:00","updated_at":"2025-12-27T21:29:55.064377-08:00","dependencies":[{"issue_id":"gt-wisp-lsd","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.822951-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-lsd","depends_on_id":"gt-wisp-q5d","type":"blocks","created_at":"2025-12-25T19:54:36.837897-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.064377-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-lya","title":"Handle callbacks from agents","description":"Handle callbacks from agents.\n\nCheck the Mayor's inbox for messages from:\n- Witnesses reporting polecat status\n- Refineries reporting merge results\n- Polecats requesting help or escalation\n- External triggers (webhooks, timers)\n\n```bash\ngt mail inbox\n# For each message:\ngt mail read \u003cid\u003e\n# Handle based on message type\n```\n\nCallbacks may spawn new polecats, update issue state, or trigger other actions.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.501447-08:00","updated_at":"2025-12-27T21:29:54.985655-08:00","deleted_at":"2025-12-27T21:29:54.985655-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-wisp-mpm","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T16:16:32.01385-08:00","updated_at":"2025-12-27T21:29:54.791712-08:00","dependencies":[{"issue_id":"gt-wisp-mpm","depends_on_id":"gt-wisp-lkc","type":"blocks","created_at":"2025-12-26T16:16:32.100079-08:00","created_by":"stevey"}],"deleted_at":"2025-12-27T21:29:54.791712-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-nna","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":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.502477-08:00","updated_at":"2025-12-27T21:29:54.977222-08:00","deleted_at":"2025-12-27T21:29:54.977222-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-ps8","title":"Ensure refinery is alive","description":"Ensure the refinery is alive and processing merge requests.\n\n**Redundant system**: This check runs in both gt spawn and Witness patrol\nto ensure the merge queue processor stays operational.\n\n```bash\n# Check if refinery session is running\ngt session status \u003crig\u003e/refinery\n\n# Check for merge requests in queue\nbd list --type=merge-request --status=open\n```\n\nIf merge requests are waiting AND refinery is not running:\n```bash\ngt session start \u003crig\u003e/refinery\ngt mail send \u003crig\u003e/refinery -s \"PATROL: Wake up\" -m \"Merge requests in queue. Please process.\"\n```\n\nIf refinery is running but queue is non-empty for \u003e30 min, send nudge.\nThis ensures polecats don't wait forever for their branches to merge.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821127-08:00","updated_at":"2025-12-27T21:29:55.047335-08:00","dependencies":[{"issue_id":"gt-wisp-ps8","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.880056-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-ps8","depends_on_id":"gt-wisp-a1c","type":"blocks","created_at":"2025-12-25T19:54:36.893717-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:55.047335-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wisp-q5d","title":"Survey all polecats (fanout)","description":"List polecats and bond mol-polecat-arm for each one.\n\n```bash\n# Get list of polecats\ngt polecat list \u003crig\u003e\n```\n\nFor each polecat discovered, dynamically bond an inspection arm:\n\n```bash\n# Bond mol-polecat-arm for each polecat\nfor polecat in $(gt polecat list \u003crig\u003e --names); do\n bd mol bond mol-polecat-arm $PATROL_WISP_ID \\\n --ref arm-$polecat \\\n --var polecat_name=$polecat \\\n --var rig=\u003crig\u003e\ndone\n```\n\nThis creates child wisps like:\n- patrol-x7k.arm-ace (5 steps)\n- patrol-x7k.arm-nux (5 steps)\n- patrol-x7k.arm-toast (5 steps)\n\nEach arm runs in PARALLEL. The aggregate step will wait for all to complete.\n\nIf no polecats are found, this step completes immediately with no children.\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822584-08:00","updated_at":"2025-12-27T21:29:54.994173-08:00","dependencies":[{"issue_id":"gt-wisp-q5d","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:37.034999-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-q5d","depends_on_id":"gt-wisp-5yy","type":"blocks","created_at":"2025-12-25T19:54:37.049799-08:00","created_by":"gastown/witness"}],"deleted_at":"2025-12-27T21:29:54.994173-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2380,6 +2374,7 @@ {"id":"gt-wv582","title":"Digest: mol-deacon-patrol","description":"Patrol 7: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T20:02:35.667778-08:00","updated_at":"2025-12-26T20:02:35.667778-08:00","closed_at":"2025-12-26T20:02:35.66773-08:00"} {"id":"gt-wvycd","title":"Digest: mol-deacon-patrol","description":"Patrol 10: routine, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:44:08.199048-08:00","updated_at":"2025-12-27T21:26:03.206256-08:00","deleted_at":"2025-12-27T21:26:03.206256-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-wvyi","title":"sling pin test 2","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T11:51:01.899435-08:00","updated_at":"2025-12-27T21:29:56.035136-08:00","deleted_at":"2025-12-27T21:29:56.035136-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-wx0w","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- gt-1wmw - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-24T22:54:21.058362-08:00","updated_at":"2025-12-27T21:29:55.368789-08:00","deleted_at":"2025-12-27T21:29:55.368789-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-wy8t","title":"Add live polling and updates","description":"Implement live polling (500ms default) for activity updates. Merge new events into view without flickering. Show connection status indicator. Handle daemon disconnects gracefully.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:27:18.127611-08:00","updated_at":"2025-12-23T16:27:18.127611-08:00","dependencies":[{"issue_id":"gt-wy8t","depends_on_id":"gt-3p77","type":"blocks","created_at":"2025-12-23T16:27:38.7256-08:00","created_by":"daemon"},{"issue_id":"gt-wy8t","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:30.942591-08:00","created_by":"daemon"}]} {"id":"gt-wysx3","title":"Digest: mol-deacon-patrol","description":"Patrol 9: Mayor OK, 11 sessions","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:36:34.249635-08:00","updated_at":"2025-12-27T21:26:02.139015-08:00","deleted_at":"2025-12-27T21:26:02.139015-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-x0a5","title":"Patrol formulas: Inconsistent variable placeholder syntax","description":"The patrol formulas use inconsistent syntax for variable placeholders:\n\n## Inconsistency\n\n| Formula | Syntax | Examples |\n|---------|--------|----------|\n| mol-polecat-arm | `{{var}}` | `{{polecat_name}}`, `{{rig}}` |\n| mol-witness-patrol | `\u003cvar\u003e` | `\u003crig\u003e`, `\u003chandoff-bead-id\u003e` |\n| mol-refinery-patrol | `\u003cvar\u003e` | `\u003cpolecat-branch\u003e` |\n\n## Expected\n\nAll formulas should use consistent syntax, probably `{{var}}` since that's what\nthe variables section defines.\n\n## Fix\n\nUpdate mol-witness-patrol and mol-refinery-patrol to use `{{var}}` syntax\nwhere appropriate, or document that `\u003cvar\u003e` is for human-filled placeholders\nvs `{{var}}` for cook-time interpolation.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-24T13:51:48.126618-08:00","updated_at":"2025-12-28T22:34:14.443991-08:00","closed_at":"2025-12-28T22:34:14.443991-08:00"} @@ -2399,16 +2394,16 @@ {"id":"gt-xbfw","title":"Missing standard OSS files: CONTRIBUTING, CODE_OF_CONDUCT, SECURITY","description":"For OSS launch, we need:\n1. CONTRIBUTING.md - How to contribute, PR process, code style\n2. CODE_OF_CONDUCT.md - Community standards\n3. SECURITY.md - How to report vulnerabilities\n\nThese are expected by OSS communities and GitHub surfaces them in repo UI.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-24T12:50:30.389345-08:00","updated_at":"2025-12-27T21:29:52.663509-08:00","dependencies":[{"issue_id":"gt-xbfw","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:04.941476-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:52.663509-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xd95b","title":"Remove markdown molecule heresy from ~/gt/molecules/","description":"The ~/gt/molecules/lifecycle/*.md files are outdated heresy - molecule definitions should only exist as formula.toml files in .beads/formulas/. Remove the markdown specs and update any docs that reference them.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T17:33:33.464666-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-30T06:45:17.834291-08:00","closed_at":"2025-12-30T06:45:17.834291-08:00","close_reason":"Already removed - no ~/gt/molecules/ directory exists, no refs in docs"} {"id":"gt-xdhg","title":"test sling pinned","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-23T11:47:46.118753-08:00","updated_at":"2025-12-27T21:29:56.051683-08:00","deleted_at":"2025-12-27T21:29:56.051683-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} -{"id":"gt-xedvd","title":"Digest: mol-deacon-patrol","description":"Patrol 3: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-27T20:19:25.262774-08:00","updated_at":"2025-12-27T21:26:00.230092-08:00","deleted_at":"2025-12-27T21:26:00.230092-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-xdklc","title":"Digest: mol-deacon-patrol","description":"Patrol 8: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:45:35.766678-08:00","updated_at":"2025-12-28T19:45:35.766678-08:00","closed_at":"2025-12-28T19:45:35.76663-08:00"} {"id":"gt-xf3fi","title":"Digest: mol-deacon-patrol","description":"P17","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:27:01.581886-08:00","updated_at":"2025-12-27T21:26:01.601729-08:00","deleted_at":"2025-12-27T21:26:01.601729-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xf5d","title":"Digest: mol-deacon-patrol","description":"Patrol 9","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T23:08:57.919962-08:00","updated_at":"2025-12-27T21:26:04.449625-08:00","deleted_at":"2025-12-27T21:26:04.449625-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xfznm","title":"Digest: mol-deacon-patrol","description":"Patrol 15: all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T21:59:55.813534-08:00","updated_at":"2025-12-27T21:26:00.490588-08:00","deleted_at":"2025-12-27T21:26:00.490588-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xgqnb","title":"Day 1.5: Create role beads from CLAUDE.md content","description":"Create role beads from existing CLAUDE.md files:\n- gt-mayor-role (from mayor CLAUDE.md)\n- gt-witness-role (from witness CLAUDE.md)\n- gt-refinery-role (from refinery CLAUDE.md)\n\nEach role bead contains priming instructions and default_molecule.\n\nParent: gt-d0jqp","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:18.455282-08:00","created_by":"mayor","updated_at":"2025-12-28T00:51:56.6882-08:00","closed_at":"2025-12-28T00:51:56.6882-08:00","dependencies":[{"issue_id":"gt-xgqnb","depends_on_id":"gt-awu07","type":"blocks","created_at":"2025-12-27T20:58:51.902061-08:00","created_by":"daemon"},{"issue_id":"gt-xgqnb","depends_on_id":"gt-d0jqp","type":"parent-child","created_at":"2025-12-27T20:59:02.757231-08:00","created_by":"daemon"},{"issue_id":"gt-xgqnb","depends_on_id":"gt-gzp2y","type":"blocks","created_at":"2025-12-27T23:17:26.759727-08:00","created_by":"daemon"}]} {"id":"gt-xheo6","title":"Cross-rig worktree support for crew","description":"Enable crew workers to work on other rigs without losing identity.\n\n**Problem**: When gastown/crew/joe needs to fix a beads bug, where do they work?\nCurrent options are all problematic: mayor's rig (coordination, not coding), random\ncrew clone (conflicts), community repo (file locks), dogs (wrong abstraction).\n\n**Solution**: Crew creates worktrees in target rigs with predictable paths.\n\nDirectory structure:\n```\n~/gt/\u003ctarget-rig\u003e/crew/\u003csource-rig\u003e-\u003cname\u003e/\n~/gt/beads/crew/gastown-joe/ # joe from gastown working on beads\n~/gt/gastown/crew/beads-wolf/ # wolf from beads working on gastown\n```\n\nKey principles:\n- Identity preserved: BD_ACTOR stays gastown/crew/joe\n- No conflicts: Each crew has own worktree\n- No indirection: Direct work, no delegation to dogs\n- Persistent: Worktree survives sessions (matches crew lifecycle)\n- Dogs remain for Deacon's infrastructure work only\n\nCommands:\n- gt worktree \u003crig\u003e - Create/enter worktree for rig\n- gt worktree list - Show your worktrees \n- gt worktree remove \u003crig\u003e - Clean up worktree","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-30T17:40:29.036817-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T17:40:29.036817-08:00"} -{"id":"gt-xheo6.1","title":"Implement gt worktree create command","description":"Create worktree in target rig for cross-rig work.\n\nUsage: gt worktree \u003crig\u003e\n\nBehavior:\n1. Detect current identity (gastown/crew/joe)\n2. Compute worktree path: ~/gt/\u003crig\u003e/crew/\u003csource-rig\u003e-\u003cname\u003e/\n3. If worktree doesn't exist:\n - git worktree add \u003cpath\u003e main\n - Set up .git config for identity preservation\n4. cd to worktree (or print path for user to cd)\n5. Preserve BD_ACTOR, GT_ROLE, etc.\n\nEdge cases:\n- Worktree already exists → just enter it\n- Rig doesn't exist → error with helpful message\n- No crew identity → error (must be crew to use this)","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-30T17:40:48.552114-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T17:40:48.552114-08:00","dependencies":[{"issue_id":"gt-xheo6.1","depends_on_id":"gt-xheo6","type":"parent-child","created_at":"2025-12-30T17:40:48.552745-08:00","created_by":"gastown/crew/joe"}]} -{"id":"gt-xheo6.2","title":"Implement gt worktree list command","description":"List all worktrees owned by current crew member.\n\nUsage: gt worktree list\n\nOutput:\n```\nCross-rig worktrees for gastown/crew/joe:\n\n beads ~/gt/beads/crew/gastown-joe/ (clean)\n mayor ~/gt/mayor/crew/gastown-joe/ (2 uncommitted)\n```\n\nImplementation:\n- Scan all rigs in ~/gt/\n- Check for crew/\u003csource-rig\u003e-\u003cname\u003e/ directories\n- Show git status summary for each","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-30T17:40:49.847297-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T17:40:49.847297-08:00","dependencies":[{"issue_id":"gt-xheo6.2","depends_on_id":"gt-xheo6","type":"parent-child","created_at":"2025-12-30T17:40:49.847843-08:00","created_by":"gastown/crew/joe"}]} -{"id":"gt-xheo6.3","title":"Implement gt worktree remove command","description":"Remove a cross-rig worktree.\n\nUsage: gt worktree remove \u003crig\u003e\n\nBehavior:\n1. Check for uncommitted changes → warn/abort\n2. git worktree remove \u003cpath\u003e\n3. Clean up directory if needed\n\nSafety:\n- Refuse if uncommitted changes (unless --force)\n- Confirm before removal","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-30T17:40:50.857156-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T17:40:50.857156-08:00","dependencies":[{"issue_id":"gt-xheo6.3","depends_on_id":"gt-xheo6","type":"parent-child","created_at":"2025-12-30T17:40:50.857664-08:00","created_by":"gastown/crew/joe"}]} -{"id":"gt-xheo6.4","title":"Document cross-rig worktree pattern","description":"Add documentation for crew cross-rig work pattern.\n\nUpdate:\n- CLAUDE.md crew context with worktree usage\n- docs/understanding-gas-town.md with role taxonomy clarification\n- PRIMING.md if needed\n\nKey points to document:\n- Crew vs Dogs distinction (dogs = Deacon's infra, not user work)\n- Identity preservation across rigs\n- When to use worktrees vs dispatch to local workers\n- Directory structure convention","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-30T17:40:52.414239-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T17:40:52.414239-08:00","dependencies":[{"issue_id":"gt-xheo6.4","depends_on_id":"gt-xheo6","type":"parent-child","created_at":"2025-12-30T17:40:52.414791-08:00","created_by":"gastown/crew/joe"}]} +{"id":"gt-xheo6.1","title":"Implement gt worktree create command","description":"Create worktree in target rig for cross-rig work.\n\nUsage: gt worktree \u003crig\u003e\n\nBehavior:\n1. Detect current identity (gastown/crew/joe)\n2. Compute worktree path: ~/gt/\u003crig\u003e/crew/\u003csource-rig\u003e-\u003cname\u003e/\n3. If worktree doesn't exist:\n - git worktree add \u003cpath\u003e main\n - Set up .git config for identity preservation\n4. cd to worktree (or print path for user to cd)\n5. Preserve BD_ACTOR, GT_ROLE, etc.\n\nEdge cases:\n- Worktree already exists → just enter it\n- Rig doesn't exist → error with helpful message\n- No crew identity → error (must be crew to use this)","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/polecats/dementus","created_at":"2025-12-30T17:40:48.552114-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T18:01:38.977513-08:00","closed_at":"2025-12-30T18:01:38.977513-08:00","close_reason":"Implemented gt worktree command for cross-rig work","dependencies":[{"issue_id":"gt-xheo6.1","depends_on_id":"gt-xheo6","type":"parent-child","created_at":"2025-12-30T17:40:48.552745-08:00","created_by":"gastown/crew/joe"}]} +{"id":"gt-xheo6.2","title":"Implement gt worktree list command","description":"List all worktrees owned by current crew member.\n\nUsage: gt worktree list\n\nOutput:\n```\nCross-rig worktrees for gastown/crew/joe:\n\n beads ~/gt/beads/crew/gastown-joe/ (clean)\n mayor ~/gt/mayor/crew/gastown-joe/ (2 uncommitted)\n```\n\nImplementation:\n- Scan all rigs in ~/gt/\n- Check for crew/\u003csource-rig\u003e-\u003cname\u003e/ directories\n- Show git status summary for each","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/capable","created_at":"2025-12-30T17:40:49.847297-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T17:57:14.78774-08:00","dependencies":[{"issue_id":"gt-xheo6.2","depends_on_id":"gt-xheo6","type":"parent-child","created_at":"2025-12-30T17:40:49.847843-08:00","created_by":"gastown/crew/joe"}]} +{"id":"gt-xheo6.3","title":"Implement gt worktree remove command","description":"Remove a cross-rig worktree.\n\nUsage: gt worktree remove \u003crig\u003e\n\nBehavior:\n1. Check for uncommitted changes → warn/abort\n2. git worktree remove \u003cpath\u003e\n3. Clean up directory if needed\n\nSafety:\n- Refuse if uncommitted changes (unless --force)\n- Confirm before removal","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/toast","created_at":"2025-12-30T17:40:50.857156-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T17:57:19.066527-08:00","dependencies":[{"issue_id":"gt-xheo6.3","depends_on_id":"gt-xheo6","type":"parent-child","created_at":"2025-12-30T17:40:50.857664-08:00","created_by":"gastown/crew/joe"}]} +{"id":"gt-xheo6.4","title":"Document cross-rig worktree pattern","description":"Add documentation for crew cross-rig work pattern.\n\nUpdate:\n- CLAUDE.md crew context with worktree usage\n- docs/understanding-gas-town.md with role taxonomy clarification\n- PRIMING.md if needed\n\nKey points to document:\n- Crew vs Dogs distinction (dogs = Deacon's infra, not user work)\n- Identity preservation across rigs\n- When to use worktrees vs dispatch to local workers\n- Directory structure convention","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/dag","created_at":"2025-12-30T17:40:52.414239-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T17:57:23.302836-08:00","dependencies":[{"issue_id":"gt-xheo6.4","depends_on_id":"gt-xheo6","type":"parent-child","created_at":"2025-12-30T17:40:52.414791-08:00","created_by":"gastown/crew/joe"}]} {"id":"gt-xhv1","title":"Digest: mol-deacon-patrol","description":"Patrol 18: OK","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T21:01:57.635721-08:00","updated_at":"2025-12-27T21:26:04.8779-08:00","deleted_at":"2025-12-27T21:26:04.8779-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xicq","title":"Work on ga-lue: Implement Witness as Claude agent. Conver...","description":"Work on ga-lue: Implement Witness as Claude agent. Convert from shell script to Claude agent that monitors polecats, nudges idle ones, handles escalations. When done, submit MR (not PR) to integration branch for Refinery.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-19T22:58:08.310674-08:00","updated_at":"2025-12-27T21:29:56.897912-08:00","deleted_at":"2025-12-27T21:29:56.897912-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-xj9e5","title":"ZFC #7: Make message age filtering configurable","description":"**ZFC Violation:** internal/daemon/lifecycle.go:64-75\n\nGo hardcodes 6-hour max message age:\n```go\nconst MaxLifecycleMessageAge = 6 * time.Hour\n```\n\n**ZFC-compliant solution:**\n- Make this configurable per message type\n- Or let agents decide message relevance\n- Low priority - not blocking liftoff\n\nReference: ~/gt/docs/zfc-violations-audit.md #7","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-27T21:32:54.911989-08:00","created_by":"mayor","updated_at":"2025-12-27T21:32:54.911989-08:00"} @@ -2475,6 +2470,7 @@ {"id":"gt-yls","title":"Document merge queue architecture","description":"Update docs/architecture.md with:\n\n- Merge Queue section explaining Beads-native approach\n- Engineer role (renamed from Refinery)\n- Session restart protocol\n- gt mq command reference\n- Federation considerations for queue\n\nAlso update any references to .gastown/ → config/.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T23:02:41.533065-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-yls","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:56.043373-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-ynp6","title":"gt context --usage: estimate remaining context via tmux line count","description":"## Summary\n\nImplement `gt context --usage` to estimate remaining context capacity.\n\n## Approach\n\nUse tmux scrollback buffer line count as proxy for token usage:\n- `tmux capture-pane -p | wc -l` gives current line count\n- Heuristics (tunable per model):\n - Opus 4.5: ~1800 lines = warning threshold\n - ~2000+ lines = critical, need handoff\n\n## Output Format\n```\nContext Usage: 1642 lines (~82%)\nStatus: WARNING - consider handoff soon\n```\n\n## Notes\n- Heuristics are model-specific, need config\n- Line count is proxy, not exact token count\n- Good enough for autonomous patrol decisions","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-23T01:19:13.108332-08:00","updated_at":"2025-12-27T21:29:56.26736-08:00","deleted_at":"2025-12-27T21:29:56.26736-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-yo8q8","title":"Digest: mol-deacon-patrol","description":"Patrol 12: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T08:17:55.490764-08:00","updated_at":"2025-12-28T08:17:55.490764-08:00","closed_at":"2025-12-28T08:17:55.490728-08:00"} +{"id":"gt-yp0yu","title":"Digest: mol-deacon-patrol","description":"Patrol 13: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T19:47:37.589573-08:00","updated_at":"2025-12-28T19:47:37.589573-08:00","closed_at":"2025-12-28T19:47:37.589542-08:00"} {"id":"gt-yqxcq","title":"Merge: furiosa-1767141944421","description":"branch: polecat/furiosa-1767141944421\ntarget: main\nsource_issue: furiosa-1767141944421\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T16:49:14.137177-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-30T16:49:14.137177-08:00"} {"id":"gt-yskrz","title":"Crew CLAUDE.md overwritten by polecat template","description":"The crew worker CLAUDE.md files (crew/max, crew/joe, crew/jack) have been overwritten with the polecat-CLAUDE.md template content.\n\n**Expected**: Crew workers should have mayor-like context (they share the rig repo, work on main branch, plan work)\n\n**Actual**: Crew CLAUDE.md says 'Polecat ace' and includes polecat-specific instructions (don't push to main, wait for Witness to kill session, etc.)\n\n**Impact**: \n- Crew workers getting wrong identity context\n- Ready Front planning guidance in gotchas section was lost\n- Crew workers told not to push to main (but they should)\n\n**Root cause**: Likely gt polecat template deployment hit crew directories\n\n**Fix needed**:\n- Restore crew CLAUDE.md template (or create one if missing)\n- Ensure template deployment only targets polecats/ directories\n- Add Ready Front planning section to crew template","status":"closed","priority":2,"issue_type":"bug","assignee":"gastown/polecats/morsov","created_at":"2025-12-28T21:38:53.66113-08:00","created_by":"gastown/crew/jack","updated_at":"2025-12-29T22:08:03.491829-08:00","closed_at":"2025-12-29T22:08:03.491829-08:00","close_reason":"Fixed crew CLAUDE.md files:\n1. Regenerated with correct crew template (not polecat template)\n2. Added CLAUDE.md to .gitignore to prevent cross-clone contamination\n3. Each crew member now has their own CLAUDE.md with correct identity"} {"id":"gt-yt1yc","title":"Digest: mol-deacon-patrol","description":"P16: stable","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:14:21.241655-08:00","updated_at":"2025-12-27T21:26:02.23698-08:00","deleted_at":"2025-12-27T21:26:02.23698-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2497,6 +2493,7 @@ {"id":"gt-z4pfn","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T00:29:04.948214-08:00","updated_at":"2025-12-27T21:26:03.935749-08:00","deleted_at":"2025-12-27T21:26:03.935749-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-z5q73","title":"Digest: mol-deacon-patrol","description":"Patrol 7: Routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:50:30.49576-08:00","updated_at":"2025-12-25T20:50:30.49576-08:00","closed_at":"2025-12-25T20:50:30.495714-08:00"} {"id":"gt-z6a5","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:43","description":"Patrol 3: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:43:12.75587-08:00","updated_at":"2025-12-27T21:26:05.162706-08:00","deleted_at":"2025-12-27T21:26:05.162706-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} +{"id":"gt-z6exe","title":"Digest: mol-deacon-patrol","description":"Patrol 6: quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T01:30:22.944508-08:00","updated_at":"2025-12-28T01:30:22.944508-08:00","closed_at":"2025-12-28T01:30:22.944475-08:00"} {"id":"gt-z722q","title":"Digest: mol-deacon-patrol","description":"Patrol cycle 4: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T11:20:18.680202-08:00","updated_at":"2025-12-28T11:20:18.680202-08:00","closed_at":"2025-12-28T11:20:18.680167-08:00"} {"id":"gt-z7hwn","title":"Digest: mol-deacon-patrol","description":"Patrol 6: Quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T19:15:32.191569-08:00","updated_at":"2025-12-27T21:26:02.740518-08:00","deleted_at":"2025-12-27T21:26:02.740518-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-z7v0b","title":"Digest: mol-deacon-patrol","description":"Patrol 10: All healthy.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T03:07:12.046971-08:00","updated_at":"2025-12-28T03:07:12.046971-08:00","closed_at":"2025-12-28T03:07:12.046934-08:00"} @@ -2522,10 +2519,10 @@ {"id":"gt-zhm5","title":"TODO: Check if issue is child of configured epic in Witness","description":"witness/manager.go:688 has a TODO to filter issues by whether they're children of the configured epic. Currently this filter is skipped.","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-21T21:34:29.358103-08:00","updated_at":"2025-12-27T21:29:57.589172-08:00","deleted_at":"2025-12-27T21:29:57.589172-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-zhpa","title":"VC Pattern Integration: Bring validated ideas to Gas Town","description":"Analysis of ~/src/vc identified 6 validated patterns from the 2nd orchestrator attempt that map cleanly to Gas Town primitives. VC achieved 254 issues closed, 90.9% gate pass rate, and 24 successful missions.\n\nKey insight: VC built ~4300 lines of Go for features that become ~65 lines of YAML + CLI flags in Gas Town's architecture.\n\nChild tasks track each pattern to integrate.","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-20T20:29:30.994181-08:00","updated_at":"2025-12-27T21:29:56.711409-08:00","deleted_at":"2025-12-27T21:29:56.711409-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} {"id":"gt-zivp","title":"mol-outpost-assign: Intelligent work routing to outposts","description":"The federation design shows outposts.yaml with a static policy section. Simple preference ordering is fine as config, but intelligent work routing should be a molecule.\n\nCurrent static approach:\n```yaml\npolicy:\n default_preference: [local, gce-burst, cloudrun-burst]\n```\n\nCases requiring cognition:\n- \"This is a long-running research task, route to VM not CloudRun\"\n- \"This touches sensitive code, keep local\"\n- \"These 5 issues are related, batch them to same outpost\"\n- \"CloudRun cost is high today, prefer local even if slower\"\n\n## Molecule: outpost-assign\nIntelligent work-to-outpost routing.\n\n## Step: classify-work\nAnalyze the issue/work item:\n- Expected duration (quick fix vs multi-hour)\n- Resource requirements\n- Sensitivity/security tier\n- Related work (same epic?)\n\n## Step: check-capacity\nQuery outpost status:\n- Current load on each\n- Cost accrued today\n- Health status\n\n## Step: select-outpost\nChoose optimal outpost based on:\n- Work classification\n- Capacity/cost\n- Policy constraints\nNeeds: classify-work, check-capacity\n\n## Step: emit-assignment\nRecord decision in beads for audit.\nNeeds: select-outpost\n\n## Notes\n- This molecule is invoked by Mayor/Witness when spawning\n- Simple cases can short-circuit to static policy\n- Full analysis only for ambiguous cases","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-20T03:26:17.964834-08:00","updated_at":"2025-12-20T03:26:17.964834-08:00"} +{"id":"gt-zjqs","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- gt-test123 - The source issue ID being worked on","status":"tombstone","priority":2,"issue_type":"epic","created_at":"2025-12-21T21:56:18.53415-08:00","updated_at":"2025-12-25T15:52:43.900154-08:00","deleted_at":"2025-12-25T15:52:43.900154-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"} {"id":"gt-zk7wl","title":"#channel resolution for real-time broadcast","description":"Wire tmux scanner into nudge system for #channel addresses.\n\n## Deliverables\n\n1. Parse #channel syntax in nudge:\n - #rig/gastown → nudge all running gastown agents\n - #town → nudge all running agents\n - #witnesses → nudge all running witnesses\n\n2. Broadcast logic:\n - Resolve #channel to running sessions\n - Nudge each session\n - Ephemeral (no storage)\n\n## Dependencies\n- Tmux session scanner (gt-???)\n\n## Acceptance\n- #rig/gastown nudges all running gastown agents\n- Ephemeral, no message storage\n- Graceful handling of no-sessions","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-26T14:52:33.362178-08:00","updated_at":"2025-12-26T14:52:33.362178-08:00","dependencies":[{"issue_id":"gt-zk7wl","depends_on_id":"gt-7grh6","type":"blocks","created_at":"2025-12-26T14:53:11.237315-08:00","created_by":"daemon"}]} {"id":"gt-zko","title":"gt rig info: Show detailed rig information","description":"Add 'gt rig info \u003crig\u003e' command to show detailed rig status.\n\nShould show:\n- Rig path and git URL\n- Active polecats with status\n- Refinery status\n- Witness status\n- Recent activity\n- Beads summary (open issues count)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T21:47:17.879255-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","dependencies":[{"issue_id":"gt-zko","depends_on_id":"gt-hw6","type":"blocks","created_at":"2025-12-17T22:22:47.502099-08:00","created_by":"daemon"}],"deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-zlro5","title":"Refactor patrol context functions to reduce duplication","description":"In prime.go, three patrol context functions are nearly identical (~100 lines each):\n- outputDeaconPatrolContext() - L797-940\n- outputWitnessPatrolContext() - L942-1106\n- outputRefineryPatrolContext() - L1108-1272\n\nThey all:\n1. Check for existing patrol molecule\n2. Auto-spawn if none exists\n3. Display patrol work loop instructions\n\n**Suggested refactor**:\nExtract common logic into a helper:\n```go\nfunc outputPatrolContext(ctx RoleContext, patrolName string, assignee string) {\n // shared logic\n}\n```\n\nThen each role-specific function just calls the helper with appropriate parameters.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-25T22:03:13.712525-08:00","updated_at":"2025-12-25T22:03:13.712525-08:00"} -{"id":"gt-zltww","title":"Digest: mol-deacon-patrol","description":"Patrol 19: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:20:07.421459-08:00","updated_at":"2025-12-25T10:20:07.421459-08:00","closed_at":"2025-12-25T10:20:07.421425-08:00"} {"id":"gt-zly","title":"Swarm learning: Beads database locality gap","description":"## PGT Bug (GGT Design Already Correct)\n\nMayor created issues in `~/ai/mayor/rigs/beads/.beads/` but polecats use `~/ai/beads/.beads/`. Different databases = polecats can't see Mayor's beads.\n\n**GGT Fix**: architecture.md already specifies:\n- All agents use BEADS_DIR pointing to rig-level `.beads/`\n- Lines 116-143: Beads Configuration for Multi-Agent\n- Lines 573-586: Rig-Level Beads via BEADS_DIR\n\nThis is a PGT implementation gap, not a design issue. GGT spawn must set BEADS_DIR correctly.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T01:21:45.37072-08:00","updated_at":"2025-12-25T01:30:41.67682-08:00","deleted_at":"2025-12-25T01:30:41.67682-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"} {"id":"gt-zn35j","title":"Nested loop support in control flow","description":"Currently, nested loops (a loop inside a loop body) are not supported.\n\nIn expandLoopIteration(), the Loop field is intentionally not copied:\n```go\n// Note: Loop field intentionally not copied - nested loops need explicit support\n```\n\nTo support nested loops:\n1. After expanding the outer loop iteration, recursively call ApplyLoops on the body steps\n2. Handle nested iteration ID prefixing (e.g., `outer.iter1.inner.iter2.step`)\n3. Add tests for nested loop scenarios\n\nThis is a lower-priority enhancement since most real-world formulas use single-level loops.","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-25T15:13:49.880102-08:00","updated_at":"2025-12-27T21:29:57.346622-08:00","dependencies":[{"issue_id":"gt-zn35j","depends_on_id":"gt-8tmz.4","type":"blocks","created_at":"2025-12-25T15:14:18.859367-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.346622-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-zn9m","title":"142 instances of error suppression with _ = pattern","description":"Code has 142 instances of '_ = ' error suppression in non-test code.\nExamples:\n- internal/polecat/manager.go: _ = pool.Load() - ignores state loading\n- internal/daemon/notification.go: _ = os.WriteFile() - ignores file write\n- internal/mail/router.go: _ = r.notifyRecipient() - notification ignored\n\nThese create silent failures and hard-to-debug issues.\n\nOptions:\n1. Document intentional suppressions with comments\n2. Handle errors properly where appropriate\n3. At minimum, log suppressed errors at debug level","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T12:50:59.241303-08:00","updated_at":"2025-12-27T21:29:55.553197-08:00","dependencies":[{"issue_id":"gt-zn9m","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.478225-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.553197-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} @@ -2537,7 +2534,6 @@ {"id":"gt-zsma7","title":"Daemon sends heartbeat to Mayor instead of Deacon","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-26T17:39:12.038167-08:00","updated_at":"2025-12-27T23:38:08.070841-08:00","closed_at":"2025-12-27T23:38:08.070841-08:00"} {"id":"gt-ztm3","title":"Merge: gt-caih","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-caih\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T00:14:08.420722-08:00","updated_at":"2025-12-23T01:18:52.590603-08:00","closed_at":"2025-12-23T01:18:52.590603-08:00"} {"id":"gt-ztpe8","title":"Day 4.4: Witness calls nuke after MERGED signal","description":"When refinery sends MERGED:\n1. Witness receives MERGED mail\n2. Witness calls gt polecat nuke\n3. Full sandbox cleanup\n4. Agent bead removed\n\nParent: gt-4a2qt","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-27T20:58:06.121096-08:00","created_by":"mayor","updated_at":"2025-12-28T16:12:33.049315-08:00","closed_at":"2025-12-28T16:12:33.049315-08:00","dependencies":[{"issue_id":"gt-ztpe8","depends_on_id":"gt-4a2qt","type":"parent-child","created_at":"2025-12-27T20:58:46.285651-08:00","created_by":"daemon"},{"issue_id":"gt-ztpe8","depends_on_id":"gt-z99nh","type":"blocks","created_at":"2025-12-27T20:59:03.489419-08:00","created_by":"daemon"},{"issue_id":"gt-ztpe8","depends_on_id":"gt-budeb","type":"relates-to","created_at":"2025-12-27T20:59:10.701299-08:00","created_by":"daemon"}]} -{"id":"gt-ztvjn","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy - handoff threshold reached","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T13:35:01.827415-08:00","updated_at":"2025-12-25T15:52:58.447894-08:00","deleted_at":"2025-12-25T15:52:58.447894-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"gt-zut3","title":"Immediate daemon notification on lifecycle request","description":"When gt handoff sends a lifecycle request to the daemon (via bd mail send deacon/), the daemon only discovers it on its next heartbeat poll (every 5 min). Workers wait unnecessarily for retirement.\n\n## Current Behavior\n1. Worker runs gt handoff\n2. Lifecycle mail sent to deacon/ via beads\n3. Worker blocks waiting for retirement\n4. Daemon heartbeat runs (up to 5 min later)\n5. Daemon processes lifecycle request and kills session\n\n## Expected Behavior\nLifecycle requests should be processed immediately, not on poll interval.\n\n## Proposed Solutions\n\n### Option A: SIGUSR1 Signal (simplest)\n1. Add SIGUSR1 handler in daemon that calls ProcessLifecycleRequests()\n2. gt handoff reads daemon.pid and sends SIGUSR1 after mail send\n\n### Option B: Unix Socket\n1. Daemon listens on ~/gt/daemon/lifecycle.sock\n2. gt handoff connects and sends 'process' message\n\n### Option C: Watchfile + fsnotify\n1. gt handoff touches ~/gt/daemon/lifecycle.trigger\n2. Daemon uses fsnotify to detect and process\n\nRecommend Option A for simplicity.\n\n## Affected Files\n- internal/daemon/daemon.go - add signal handler\n- internal/cmd/handoff.go - send signal after mail","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-12-20T20:20:07.616335-08:00","updated_at":"2025-12-27T21:29:53.627184-08:00","deleted_at":"2025-12-27T21:29:53.627184-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-zv7h6","title":"Move polecat pending tracking from Deacon to Witness","description":"Problem: gt deacon pending handles polecat observation at the wrong level. Hierarchy should be Witness→polecats, Deacon→Witnesses.\n\nSolution:\n1. Add gt witness pending - shows pending polecats in this rig\n2. Route POLECAT_STARTED mail to Witness (not just Deacon)\n3. Deacon keeps backup role but does not directly manage polecats\n\nDepends on gt-0yqqw (messaging infrastructure) for proper routing.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-25T13:40:04.410664-08:00","updated_at":"2025-12-27T21:29:55.206628-08:00","dependencies":[{"issue_id":"gt-zv7h6","depends_on_id":"gt-0yqqw","type":"blocks","created_at":"2025-12-25T13:40:13.195143-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:55.206628-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"} {"id":"gt-zvfnu","title":"Merge: furiosa-1767138824776","description":"branch: polecat/furiosa-1767138824776\ntarget: main\nsource_issue: furiosa-1767138824776\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T16:09:55.270207-08:00","created_by":"gastown/polecats/furiosa","updated_at":"2025-12-30T16:09:55.270207-08:00"} diff --git a/.beads/mq/gt-804je.json b/.beads/mq/gt-804je.json new file mode 100644 index 00000000..a7eb4102 --- /dev/null +++ b/.beads/mq/gt-804je.json @@ -0,0 +1,11 @@ +{ + "id": "gt-804je", + "branch": "polecat/dementus-1767146229184", + "target": "main", + "source_issue": "dementus-1767146229184", + "worker": "", + "rig": "gastown", + "title": "Merge: dementus-1767146229184", + "priority": 2, + "created_at": "2025-12-30T18:01:50.012819-08:00" +} \ No newline at end of file diff --git a/.beads/mq/gt-hrhts.json b/.beads/mq/gt-hrhts.json new file mode 100644 index 00000000..1e58e0f2 --- /dev/null +++ b/.beads/mq/gt-hrhts.json @@ -0,0 +1,11 @@ +{ + "id": "gt-hrhts", + "branch": "polecat/cheedo-1767146245543", + "target": "main", + "source_issue": "cheedo-1767146245543", + "worker": "", + "rig": "gastown", + "title": "Merge: cheedo-1767146245543", + "priority": 2, + "created_at": "2025-12-30T18:00:27.283919-08:00" +} \ No newline at end of file diff --git a/.beads/sync-state.json b/.beads/sync-state.json deleted file mode 100644 index 8bd4be99..00000000 --- a/.beads/sync-state.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "last_failure": "2025-12-30T17:40:37.91092-08:00", - "failure_count": 1, - "backoff_until": "2025-12-30T17:41:07.91092-08:00", - "needs_manual_sync": false, - "failure_reason": "git pull failed in worktree: exit status 128\nFrom github.com:steveyegge/gastown\n * branch beads-sync -\u003e FETCH_HEAD\nfatal: Cannot rebase onto multiple branches.\n" -} \ No newline at end of file