bd sync: 2025-12-30 10:41:05

This commit is contained in:
Steve Yegge
2025-12-30 10:41:05 -08:00
parent 75ee851813
commit 3dec0d0072
4 changed files with 42 additions and 7 deletions

View File

@@ -123,6 +123,7 @@
{"id":"gt-1z4m","title":"gt swarm is implemented but undocumented","description":"internal/swarm/ package is fully implemented with:\n- gt swarm create\n- gt swarm status\n- gt swarm list\n- gt swarm land\n- gt swarm cancel\n- gt swarm start\n\nBut no documentation exists for it:\n- Not in README\n- Not in architecture.md (uses different terminology)\n- Not in any role prompts\n\nEither:\n1. Document gt swarm as the canonical mechanism\n2. Or deprecate it in favor of gt sling\n\nRelated to gt-6n13 (competing molecule mechanisms)","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/cheedo","created_at":"2025-12-24T12:51:23.768049-08:00","updated_at":"2025-12-30T10:36:54.057795-08:00","closed_at":"2025-12-30T10:36:54.057795-08:00","close_reason":"Added docs/swarm.md with full swarm documentation and updated reference.md with CLI commands","dependencies":[{"issue_id":"gt-1z4m","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:07.817907-08:00","created_by":"daemon"},{"issue_id":"gt-1z4m","depends_on_id":"gt-e0qj2","type":"blocks","created_at":"2025-12-26T23:21:29.370789-08:00","created_by":"daemon"}]}
{"id":"gt-202k","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:44","description":"Patrol 6: All healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:44:33.079069-08:00","updated_at":"2025-12-27T21:26:05.137605-08:00","deleted_at":"2025-12-27T21:26:05.137605-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-20fhw","title":"test-agent-verify","status":"tombstone","priority":2,"issue_type":"agent","created_at":"2025-12-28T01:29:55.22014-08:00","created_by":"mayor","updated_at":"2025-12-28T01:30:01.423217-08:00","deleted_at":"2025-12-28T01:30:01.423217-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"agent"}
{"id":"gt-215tk","title":"Merge: warboy-1767106060799","description":"branch: polecat/warboy-1767106060799\ntarget: main\nsource_issue: warboy-1767106060799\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T10:40:55.502012-08:00","created_by":"gastown/polecats/warboy","updated_at":"2025-12-30T10:40:55.502012-08:00"}
{"id":"gt-21lh","title":"Polecat template: remove redundant 'Finding Work' section","description":"The 'Finding Work' section (bd ready, bd list, bd show) is general-purpose guidance that may not apply to polecats who are spawned with specific work. Either remove for polecats or clarify this is for discovering additional work during execution.","status":"tombstone","priority":3,"issue_type":"task","created_at":"2025-12-23T16:56:55.230827-08:00","updated_at":"2025-12-27T21:29:57.456286-08:00","dependencies":[{"issue_id":"gt-21lh","depends_on_id":"gt-t9u7","type":"parent-child","created_at":"2025-12-23T16:57:16.772763-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:57.456286-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-22ng","title":"Create activity aggregator","description":"Component that connects to multiple rig beads daemons and merges their activity into a unified view. Polls GetMutations and GetWorkerStatus from each rig, groups by rig/worker. Handles connection failures gracefully.\n\nBLOCKED BY (Beads rig):\n- bd-gqxd: Enrich MutationEvent with title and assignee\n- bd-l13p: Add GetWorkerStatus RPC endpoint\n- bd-0oqz: Add GetMoleculeProgress RPC endpoint","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-23T16:27:08.249115-08:00","updated_at":"2025-12-23T16:27:53.545952-08:00","dependencies":[{"issue_id":"gt-22ng","depends_on_id":"gt-rivr","type":"parent-child","created_at":"2025-12-23T16:28:30.603166-08:00","created_by":"daemon"}]}
{"id":"gt-22xxi","title":"Digest: mol-deacon-patrol","description":"Patrol 7: All clear","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T15:48:54.44952-08:00","updated_at":"2025-12-27T21:26:03.108112-08:00","deleted_at":"2025-12-27T21:26:03.108112-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -478,7 +479,7 @@
{"id":"gt-795e8","title":"Extract timing constants to constants package","description":"Extract hardcoded timing values to named constants.\n\n## Files to modify\n- internal/constants/constants.go (add constants)\n- internal/cmd/start.go (use constants)\n- internal/tmux/tmux.go (use constants)\n\n## Implementation\nAdd to constants.go:\n```go\nconst (\n ShutdownNotifyDelay = 500 * time.Millisecond\n ClaudeStartTimeout = 15 * time.Second\n ShellReadyTimeout = 5 * time.Second\n DefaultDebounceMs = 100\n DefaultDisplayMs = 5000\n)\n```\n\n## Acceptance criteria\n- [ ] 5 timing constants added to constants.go\n- [ ] start.go uses ShutdownNotifyDelay, ClaudeStartTimeout, ShellReadyTimeout\n- [ ] tmux.go uses DefaultDebounceMs, DefaultDisplayMs\n- [ ] go build ./... passes\n- [ ] go test ./... passes","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T15:49:12.251261-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-28T17:17:52.768898-08:00","closed_at":"2025-12-28T17:17:52.768898-08:00"}
{"id":"gt-79jxg","title":"Bug: bd update --parent doesn't persist","description":"The --parent flag on bd update reports success but doesn't persist the parent field.\n\n**Confirmed behavior:**\n```bash\nbd update gt-9kp3t --parent=gt-d0jqp --no-daemon -v\n# Output: ✓ Updated issue: gt-9kp3t\n\nbd show gt-9kp3t --json | jq '.[0].parent'\n# Returns: null\n\ngrep gt-9kp3t .beads/issues.jsonl | head -1 | jq '.parent'\n# Returns: null (field not present)\n```\n\n**Root cause hypothesis:**\nThe update handler processes the --parent flag but either:\n1. Doesn't write it to the Issue struct\n2. Doesn't include it in the JSONL export\n3. The field name doesn't match what export expects\n\n**Files to check:**\n- cmd/bd/show.go:638-640 (flag handling)\n- cmd/bd/show.go:810-814 (reparenting logic)\n- internal/rpc/server_issues_epics.go (RPC handler)\n- internal/rpc/protocol.go (UpdateArgs.Parent field)\n\nRelated: bd-cj2e (the original feature implementation)","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-27T22:40:33.744301-08:00","created_by":"mayor","updated_at":"2025-12-27T23:32:31.903138-08:00","closed_at":"2025-12-27T23:32:31.903138-08:00"}
{"id":"gt-7asd","title":"Digest: mol-deacon-patrol","description":"Patrol 3: Routine","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:35:39.123943-08:00","updated_at":"2025-12-27T21:26:04.650909-08:00","deleted_at":"2025-12-27T21:26:04.650909-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-7aw1m","title":"Instrument gt commands to appear in activity feed","description":"## Architecture: Two-tier event system\n\n```\n┌─────────────┐ ┌─────────────┐ ┌─────────────┐\n│ gt commands │ │ bd mutations│ │ agent output│\n└──────┬──────┘ └──────┬──────┘ └──────┬──────┘\n └────────────────┼────────────────┘\n ▼\n ~/gt/.events.jsonl (raw, audit)\n │\n ┌─────────────────┐\n │ Feed daemon │ ← goroutine in gt daemon\n │ - filters │\n │ - aggregates │\n │ - AI curates │\n └────────┬────────┘\n ▼\n ~/gt/.feed.jsonl (curated, user-facing)\n```\n\n## Event format\n\n```json\n{\n \"ts\": \"2025-12-28T10:30:15Z\",\n \"source\": \"gt\",\n \"type\": \"sling\",\n \"actor\": \"mayor\",\n \"payload\": {\"bead\": \"gt-xyz\", \"target\": \"gastown/Toast\"},\n \"visibility\": \"feed\"\n}\n```\n\nVisibility: `audit` | `feed` | `both`\n\n## Implementation phases\n\n1. **Event logging** - gt commands write to ~/gt/.events.jsonl\n2. **Feed daemon** - goroutine in gt daemon tails events, writes curated feed\n3. **Feed readers** - gt feed, gt dashboard read from .feed.jsonl\n4. **AI curation** - future: haiku summarization for complex activity\n\nPart of epic gt-u7dxq","status":"in_progress","priority":2,"issue_type":"task","assignee":"gastown/polecats/morsov","created_at":"2025-12-28T11:02:16.207055-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T10:34:32.968247-08:00"}
{"id":"gt-7aw1m","title":"Instrument gt commands to appear in activity feed","description":"## Architecture: Two-tier event system\n\n```\n┌─────────────┐ ┌─────────────┐ ┌─────────────┐\n│ gt commands │ │ bd mutations│ │ agent output│\n└──────┬──────┘ └──────┬──────┘ └──────┬──────┘\n └────────────────┼────────────────┘\n ▼\n ~/gt/.events.jsonl (raw, audit)\n │\n ┌─────────────────┐\n │ Feed daemon │ ← goroutine in gt daemon\n │ - filters │\n │ - aggregates │\n │ - AI curates │\n └────────┬────────┘\n ▼\n ~/gt/.feed.jsonl (curated, user-facing)\n```\n\n## Event format\n\n```json\n{\n \"ts\": \"2025-12-28T10:30:15Z\",\n \"source\": \"gt\",\n \"type\": \"sling\",\n \"actor\": \"mayor\",\n \"payload\": {\"bead\": \"gt-xyz\", \"target\": \"gastown/Toast\"},\n \"visibility\": \"feed\"\n}\n```\n\nVisibility: `audit` | `feed` | `both`\n\n## Implementation phases\n\n1. **Event logging** - gt commands write to ~/gt/.events.jsonl\n2. **Feed daemon** - goroutine in gt daemon tails events, writes curated feed\n3. **Feed readers** - gt feed, gt dashboard read from .feed.jsonl\n4. **AI curation** - future: haiku summarization for complex activity\n\nPart of epic gt-u7dxq","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/morsov","created_at":"2025-12-28T11:02:16.207055-08:00","created_by":"gastown/crew/joe","updated_at":"2025-12-30T10:41:00.627969-08:00","closed_at":"2025-12-30T10:41:00.627969-08:00","close_reason":"Instrumented gt commands (nudge, unsling, up, down, stop, polecat_spawn) to emit events to ~/gt/.events.jsonl for the activity feed"}
{"id":"gt-7bty9","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All clear - inbox empty, agents healthy, no orphans","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T15:31:29.106816-08:00","updated_at":"2025-12-27T21:26:03.12439-08:00","deleted_at":"2025-12-27T21:26:03.12439-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-7einb","title":"Digest: mol-deacon-patrol","description":"Patrol 9: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T15:58:57.715007-08:00","updated_at":"2025-12-25T15:58:57.715007-08:00","closed_at":"2025-12-25T15:58:57.714972-08:00"}
{"id":"gt-7emkr","title":"Digest: mol-deacon-patrol","description":"P14: stable","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:13:35.668266-08:00","updated_at":"2025-12-25T20:13:35.668266-08:00","closed_at":"2025-12-25T20:13:35.668211-08:00"}
@@ -1134,12 +1135,12 @@
{"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-30T01:37:54.010685-08:00","closed_at":"2025-12-30T01:16:59.117907-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.082776-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-30T10:33:51.249586-08:00","closed_at":"2025-12-30T00:27:11.088894-08:00","close_reason":"nuked","deleted_at":"2025-12-30T00:27:11.050736-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-30T10:37:17.315481-08:00","closed_at":"2025-12-30T00:27:11.088894-08:00","close_reason":"nuked","deleted_at":"2025-12-30T00:27:11.050736-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-30T01:37:56.668682-08:00","closed_at":"2025-12-30T00:27:10.927465-08:00","close_reason":"nuked","deleted_at":"2025-12-30T00:27:10.888813-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-30T02:06:35.551795-08:00","closed_at":"2025-12-30T01:16:59.263603-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.226661-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-30T10:30:17.71754-08:00","closed_at":"2025-12-30T01:16:59.407479-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.373752-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":"open","priority":2,"issue_type":"agent","created_at":"2025-12-30T06:47:59.120921-08:00","created_by":"mayor","updated_at":"2025-12-30T10:33:51.341543-08:00"}
{"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":"open","priority":2,"issue_type":"agent","created_at":"2025-12-30T06:47:59.120921-08:00","created_by":"mayor","updated_at":"2025-12-30T10:40:12.229381-08:00"}
{"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-30T10:36:28.524477-08:00","closed_at":"2025-12-29T22:08:09.913397-08:00","close_reason":"nuked","deleted_at":"2025-12-29T22:08:09.875921-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"}
{"id":"gt-gastown-polecat-morsov","title":"gt-gastown-polecat-morsov","description":"gt-gastown-polecat-morsov\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:41.438694-08:00","created_by":"mayor","updated_at":"2025-12-30T10:33:49.900396-08:00","closed_at":"2025-12-29T22:09:14.794797-08:00","close_reason":"nuked","deleted_at":"2025-12-29T22:09:14.754543-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"}
{"id":"gt-gastown-polecat-nux","title":"gt-gastown-polecat-nux","description":"gt-gastown-polecat-nux\n\nrole_type: polecat\nrig: gastown\nagent_state: running\nhook_bead: gt-s94gq\nrole_bead: gt-polecat-role\ncleanup_status: has_stash","status":"closed","priority":2,"issue_type":"agent","created_at":"2025-12-29T17:54:53.302196-08:00","created_by":"mayor","updated_at":"2025-12-30T01:50:53.570498-08:00","closed_at":"2025-12-30T01:16:59.549222-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.515591-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"agent"}
@@ -1148,7 +1149,7 @@
{"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-30T01:52:04.608299-08:00","closed_at":"2025-12-30T01:16:59.828219-08:00","close_reason":"nuked","deleted_at":"2025-12-30T01:16:59.794879-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-30T02:01:08.813205-08:00","closed_at":"2025-12-30T00:27:10.763368-08:00","close_reason":"nuked","deleted_at":"2025-12-30T00:27:10.724735-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-30T10:33:49.304608-08:00","closed_at":"2025-12-29T22:10:00.175657-08:00","close_reason":"nuked","deleted_at":"2025-12-29T22:10:00.139673-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":"open","priority":2,"issue_type":"agent","created_at":"2025-12-30T06:47:40.892638-08:00","created_by":"mayor","updated_at":"2025-12-30T10:33:49.304284-08:00"}
{"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":"open","priority":2,"issue_type":"agent","created_at":"2025-12-30T06:47:40.892638-08:00","created_by":"mayor","updated_at":"2025-12-30T10:40:55.778246-08:00"}
{"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-30T10:24:49.187913-08:00"}
{"id":"gt-gastown-witness","title":"Witness for gastown - monitors polecat health and progress.","description":"Witness for gastown - monitors polecat health and progress.\n\nrole_type: witness\nrig: gastown\nagent_state: running\nhook_bead: null\nrole_bead: gt-witness-role\ncleanup_status: null","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-29T14:48:00.691337-08:00","created_by":"gastown/crew/max","updated_at":"2025-12-30T07:24:49.528656-08:00"}
{"id":"gt-gaxo","title":"ZFC Cleanup: Move Go heuristics to Deacon molecule","description":"Remove Go code that makes workflow decisions. All health checking, staleness \ndetection, nudging, and escalation belongs in the Deacon molecule where Claude \nexecutes it once per minute.\n\n## The Problem\n\nGo code currently implements polling-based health inference:\n- Daemon watches heartbeats with hardcoded thresholds\n- Decides if agents are \"stuck\" based on timestamps \n- Sends nudges, triggers restarts\n- Parses mail subjects with regex to extract intent\n\nThis is a ZFC violation. Go should be message transport, not decision-maker.\n\n## The Fix\n\nMove all health/oversight logic to Deacon patrol molecule:\n- Deacon runs once per minute\n- Claude reads molecule steps, executes them\n- Claude decides if agents are stuck (by checking mail, activity, etc.)\n- Claude sends nudges/escalations via mail\n- Go just routes messages\n\n## Scope\n\n1. daemon/daemon.go - heartbeat staleness logic\n2. daemon/backoff.go - exponential backoff decisions\n3. daemon/lifecycle.go - regex parsing of lifecycle intent\n4. keepalive/keepalive.go - staleness thresholds\n5. deacon/heartbeat.go - heartbeat age classification\n6. doctor/stale_check.go - staleness detection\n7. polecat/manager.go - state derivation from issues\n\n## Success Criteria\n\n- Go code has no hardcoded time.Duration for health decisions\n- No regex parsing of mail subjects for intent\n- No switch statements deciding agent state\n- Deacon molecule has all oversight logic\n- Go daemon is just a message router","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-23T23:58:18.684884-08:00","updated_at":"2025-12-27T21:29:52.754824-08:00","deleted_at":"2025-12-27T21:29:52.754824-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
@@ -1462,7 +1463,6 @@
{"id":"gt-kgk5.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-kgk5\nbonded_ref: arm-toast\nbonded_at: 2025-12-23T10:00:00Z\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T12:46:15.807528-08:00","updated_at":"2025-12-27T21:29:55.570225-08:00","deleted_at":"2025-12-27T21:29:55.570225-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-kh6q","title":"Remove Go-based witness patrol - Claude session is the executor","description":"## Problem\n\nThe witness has 1370 lines of Go code in internal/witness/manager.go that reimplements what mol-witness-patrol does:\n- healthCheck() - polls polecats\n- autoSpawnForReadyWork() - spawns polecats for ready issues \n- handleStuckPolecat() - nudge logic\n- processShutdownRequests() - cleanup logic\n- verifyPolecatState() - git state checks\n\nThis is backwards. The molecule should drive the work, Claude should execute it.\n\n## The Wrong Architecture (gt-59zd, now cancelled)\n\nThe cancelled gt-59zd tried to use molecules as 'tracking ledgers' for Go code:\n- Go code runs patrol logic\n- Molecule just records what Go did\n- Duplicates work, adds complexity\n\n## The Right Architecture\n\n1. Witness runs as Claude session (via gt sling witness or tmux)\n2. Claude executes mol-witness-patrol steps directly\n3. No Go patrol loop needed\n4. Molecule IS the executor, not bookkeeping\n\n## Scope\n\n1. Remove patrol-related functions from manager.go:\n - run(), checkAndProcess(), healthCheck()\n - handleStuckPolecat(), getNudgeCount(), recordNudge()\n - processShutdownRequests(), verifyPolecatState()\n - autoSpawnForReadyWork(), etc.\n\n2. Keep session management functions:\n - Start(), Stop(), Status() - for starting/stopping Claude session\n - State persistence for session identity\n\n3. Update gt witness commands to use Claude session model\n\n4. Test that mol-witness-patrol executes correctly in Claude session\n\n## Related\n\n- gt-zde4: Fixed Witness CLAUDE.md to emphasize mol-following\n- gt-59zd: Cancelled - wrong architecture\n- witness.md.tmpl: Already rewritten with ZFC principle","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2025-12-23T22:42:13.02343-08:00","updated_at":"2025-12-27T21:29:52.763067-08:00","deleted_at":"2025-12-27T21:29:52.763067-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"}
{"id":"gt-ki3qa","title":"Digest: mol-deacon-patrol","description":"Patrol 1: All healthy, no mail, no action needed","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T10:43:42.061004-08:00","updated_at":"2025-12-27T21:26:03.495134-08:00","deleted_at":"2025-12-27T21:26:03.495134-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-kjlli","title":"Merge: imperator-1767106079026","description":"branch: polecat/imperator-1767106079026\ntarget: main\nsource_issue: imperator-1767106079026\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T09:56:56.917273-08:00","created_by":"gastown/polecats/imperator","updated_at":"2025-12-30T10:06:56.532213-08:00","closed_at":"2025-12-30T10:06:56.532213-08:00","close_reason":"Branch merged to main"}
{"id":"gt-kjnt","title":"Polecat Mood Plugin (standard)","description":"Standard witness plugin molecule that assesses polecat emotional state.\n\n## Molecule Definition\n\n```json\n{\n \"id\": \"mol-polecat-mood\",\n \"title\": \"Assess mood for {{polecat_name}}\",\n \"description\": \"Analyze captured output and determine emotional state.\\n\\nVars:\\n- {{polecat_name}} - The polecat to assess\\n- {{captured_output}} - Recent tmux capture\\n\\nOutput: gt polecat mood {{polecat_name}} \u003cemoji\u003e\",\n \"labels\": [\"template\", \"plugin\", \"witness\", \"tier:haiku\"],\n \"issue_type\": \"task\"\n}\n```\n\n## Mood Emojis\n\n```\n😺 working Active tool calls, making progress\n😸 productive Completing tasks, tests passing\n🐱 idle Waiting at prompt, no recent activity\n😼 confident Self-reviewing, about to submit\n😿 struggling Repeated errors, test failures\n🙀 stuck No progress for 10+ min\n😽 done Work complete, requesting shutdown\n😾 blocked Explicitly waiting on dependency\n```\n\n## Bonding\n\nDuring witness patrol plugin-run step:\n\n```bash\nbd mol bond mol-polecat-mood $PATROL_WISP \\\n --ref mood-{{polecat_name}} \\\n --var polecat_name=ace \\\n --var captured_output=\"$TMUX_CAPTURE\"\n```\n\n## Installation\n\n```bash\nbd mol install mol-polecat-mood # From Mol Mall\n```\n\n## Customization\n\nFork the molecule and modify description to change assessment criteria or add custom moods. Install your fork to override.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-21T16:17:12.841134-08:00","updated_at":"2025-12-27T21:29:56.562233-08:00","dependencies":[{"issue_id":"gt-kjnt","depends_on_id":"gt-u818","type":"blocks","created_at":"2025-12-21T16:17:20.444775-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:56.562233-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"feature"}
{"id":"gt-kkcql","title":"Digest: mol-deacon-patrol","description":"Patrol 8: All healthy, no messages","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T17:53:55.840419-08:00","updated_at":"2025-12-27T21:26:02.879581-08:00","deleted_at":"2025-12-27T21:26:02.879581-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-kktj","title":"Patrol agent state.json not updated on activity","description":"Witness and Refinery state.json files show last_active from Dec 19 even though sessions have been running. The state should update each patrol cycle.\n\nEvidence:\n```\n$ cat beads/witness/state.json\n{\"role\": \"witness\", \"last_active\": \"2025-12-19T17:50:00Z\"}\n\n$ cat beads/refinery/state.json \n{\"role\": \"refinery\", \"last_active\": \"2025-12-19T17:50:00Z\"}\n```\n\nExpected: last_active should update each time the agent runs a patrol cycle.\n\nImpact: Can't tell if patrol agents are actually active vs just having an open tmux session.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-23T20:29:58.515591-08:00","updated_at":"2025-12-28T22:37:43.91459-08:00","closed_at":"2025-12-28T22:37:43.91459-08:00"}
@@ -1591,7 +1591,7 @@
{"id":"gt-m5w4g","title":"Agent Communication Protocol","description":"Structured mail between agents for coordination.\n\n## Problem\nAgents communicate via freeform mail. This works but lacks parseable structure for automated handling.\n\n## Protocols\n\n### Witness to Refinery\n- POLECAT_READY: worker X completed, branch ready for merge\n- REWORK_COMPLETE: worker Y finished requested rework\n\n### Refinery to Witness \n- MERGE_SUCCESS: worker X merged, can be cleaned up\n- MERGE_FAILED: worker X needs rework (reason attached)\n- REWORK_REQUEST: please have worker X rebase on current main\n\n### Polecat to Witness\n- WORK_COMPLETE: done with assigned issue\n- NEED_HELP: stuck, requesting intervention\n\n### Any to Deacon\n- ESCALATION: problem requiring Mayor attention\n\n## Mail Format\nSubject: [PROTOCOL_TYPE] brief description\nBody: Structured YAML or JSON payload\n\n## Success Criteria\n- Patrol steps parse protocol messages automatically\n- Handlers exist for each protocol type\n- Integration test: polecat completes -\u003e witness notifies -\u003e refinery merges -\u003e witness cleans up\n\nConsolidates gt-0qki.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T20:46:35.538744-08:00","updated_at":"2025-12-25T20:46:35.538744-08:00","dependencies":[{"issue_id":"gt-m5w4g","depends_on_id":"gt-psj76","type":"blocks","created_at":"2025-12-25T20:47:18.478538-08:00","created_by":"daemon"}]}
{"id":"gt-m5w4g.1","title":"Protocol message specification","description":"Define YAML format for protocol messages. Subject: [PROTOCOL_TYPE] brief. Body: structured payload. Document all protocol types: POLECAT_READY, MERGE_SUCCESS, MERGE_FAILED, REWORK_REQUEST, WORK_COMPLETE, NEED_HELP, ESCALATION.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/ace","created_at":"2025-12-25T20:56:27.493974-08:00","updated_at":"2025-12-30T09:52:00.20003-08:00","closed_at":"2025-12-30T09:52:00.20003-08:00","close_reason":"Documented YAML format for all protocol messages in docs/mail-protocol.md. Subject format: [PROTOCOL_TYPE] brief. Body: YAML with protocol, timestamp, agent fields. All 8 protocol types fully documented with schemas and examples.","dependencies":[{"issue_id":"gt-m5w4g.1","depends_on_id":"gt-m5w4g","type":"parent-child","created_at":"2025-12-25T20:56:27.494443-08:00","created_by":"daemon"}]}
{"id":"gt-m5w4g.2","title":"Witness-Refinery protocol handlers","description":"Implement handlers for: POLECAT_READY (witness→refinery: worker done, branch ready), MERGE_SUCCESS (refinery→witness: merged, cleanup ok), MERGE_FAILED (refinery→witness: needs rework), REWORK_REQUEST (refinery→witness: rebase needed).","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/valkyrie","created_at":"2025-12-25T20:56:28.618916-08:00","updated_at":"2025-12-30T10:33:33.340556-08:00","dependencies":[{"issue_id":"gt-m5w4g.2","depends_on_id":"gt-m5w4g","type":"parent-child","created_at":"2025-12-25T20:56:28.620996-08:00","created_by":"daemon"},{"issue_id":"gt-m5w4g.2","depends_on_id":"gt-m5w4g.1","type":"blocks","created_at":"2025-12-25T20:56:50.702111-08:00","created_by":"daemon"}]}
{"id":"gt-m5w4g.3","title":"Polecat-Witness protocol handlers","description":"Implement handlers for: WORK_COMPLETE (polecat→witness: done with issue), NEED_HELP (polecat→witness: stuck, requesting intervention). Witness patrol steps should parse and act on these.","status":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/warboy","created_at":"2025-12-25T20:56:29.752982-08:00","updated_at":"2025-12-30T10:33:35.196792-08:00","dependencies":[{"issue_id":"gt-m5w4g.3","depends_on_id":"gt-m5w4g","type":"parent-child","created_at":"2025-12-25T20:56:29.75638-08:00","created_by":"daemon"},{"issue_id":"gt-m5w4g.3","depends_on_id":"gt-m5w4g.1","type":"blocks","created_at":"2025-12-25T20:56:50.797519-08:00","created_by":"daemon"}]}
{"id":"gt-m5w4g.3","title":"Polecat-Witness protocol handlers","description":"Implement handlers for: WORK_COMPLETE (polecat→witness: done with issue), NEED_HELP (polecat→witness: stuck, requesting intervention). Witness patrol steps should parse and act on these.","status":"closed","priority":2,"issue_type":"task","assignee":"gastown/polecats/warboy","created_at":"2025-12-25T20:56:29.752982-08:00","updated_at":"2025-12-30T10:40:12.870933-08:00","closed_at":"2025-12-30T10:40:12.870933-08:00","close_reason":"Implemented protocol handlers in internal/witness/protocol.go and handlers.go with tests","dependencies":[{"issue_id":"gt-m5w4g.3","depends_on_id":"gt-m5w4g","type":"parent-child","created_at":"2025-12-25T20:56:29.75638-08:00","created_by":"daemon"},{"issue_id":"gt-m5w4g.3","depends_on_id":"gt-m5w4g.1","type":"blocks","created_at":"2025-12-25T20:56:50.797519-08:00","created_by":"daemon"}]}
{"id":"gt-m5w4g.4","title":"Agent protocol integration test","description":"End-to-end test: polecat completes work → sends WORK_COMPLETE → witness receives and sends POLECAT_READY → refinery merges → sends MERGE_SUCCESS → witness cleans up polecat. All via structured protocol messages.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T20:56:31.204129-08:00","updated_at":"2025-12-25T20:56:31.204129-08:00","dependencies":[{"issue_id":"gt-m5w4g.4","depends_on_id":"gt-m5w4g","type":"parent-child","created_at":"2025-12-25T20:56:31.207559-08:00","created_by":"daemon"},{"issue_id":"gt-m5w4g.4","depends_on_id":"gt-m5w4g.2","type":"blocks","created_at":"2025-12-25T20:56:50.900223-08:00","created_by":"daemon"},{"issue_id":"gt-m5w4g.4","depends_on_id":"gt-m5w4g.3","type":"blocks","created_at":"2025-12-25T20:56:50.995873-08:00","created_by":"daemon"}]}
{"id":"gt-m61ew","title":"Polecats go off-task instead of working pinned bead","description":"During swarm execution, polecats frequently stop working on their assigned task (pinned bead) and start doing other things like:\n- Asking about other polecats\n- Checking mail\n- Monitoring swarm status\n- Working on unrelated issues\n\nExpected: Polecat receives task via gt sling, works on it until completion, signals done.\nActual: Polecat gets distracted and stops working on assigned task.\n\nRoot cause hypothesis: CLAUDE.md instructions don't strongly enforce 'work your hook' behavior. Need clearer polecat template that emphasizes single-task focus.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-28T16:31:51.050113-08:00","created_by":"mayor","updated_at":"2025-12-28T16:42:14.079822-08:00","closed_at":"2025-12-28T16:42:14.079822-08:00"}
{"id":"gt-m72d","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:21","description":"Patrol 4: quiet","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T19:21:43.191633-08:00","updated_at":"2025-12-27T21:26:05.314017-08:00","deleted_at":"2025-12-27T21:26:05.314017-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -1702,6 +1702,7 @@
{"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-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"}
{"id":"gt-nqrh","title":"Auto-restart patrol agents after N loops","description":"All patrol roles should auto-restart to keep context usage low. Role-specific heuristics:\n\n**Deacon**: \n- 20 patrol loops without major incident\n- Immediate restart after ANY extraordinary action (lifecycle request, remediation, escalation)\n- Rationale: Keep context short so there's headroom if something big comes up\n\n**Witness**:\n- Based on polecats processed (not loop count)\n- Restart after processing N polecats (spawns, nudges, decommissions)\n- Suggested N: 10-15 polecats\n\n**Refinery**:\n- Based on MRs processed (not loop count) \n- Restart after processing N merge requests\n- Suggested N: 5-10 MRs (merges are context-heavy)\n\nBenefits:\n- Keeps context fresh (better focus/performance)\n- Reduces cost (quadratic increase vs conversation length)\n- Preserves headroom for handling surprises\n- Simple and predictable (no context estimation needed)\n\nEach role tracks their metric in state file and hands off when threshold reached.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-23T14:00:00.093148-08:00","updated_at":"2025-12-27T21:29:52.990581-08:00","deleted_at":"2025-12-27T21:29:52.990581-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
@@ -2029,6 +2030,7 @@
{"id":"gt-svi.4","title":"gt mq retry: retry a failed MR","description":"Implement 'gt mq retry \u003cid\u003e' to retry a failed merge request.\n\nActions:\n1. Verify MR exists and is in failed state (open with failure labels)\n2. Remove failure labels (needs-rebase, needs-fix)\n3. Reset to ready state\n4. Optionally re-run immediately (--now flag)\n\nOptions:\n- --now: immediately process (instead of waiting for Engineer loop)\n\nReference: docs/merge-queue-design.md#cli-commands","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T13:50:36.336017-08:00","updated_at":"2025-12-27T21:29:54.386372-08:00","dependencies":[{"issue_id":"gt-svi.4","depends_on_id":"gt-svi","type":"parent-child","created_at":"2025-12-17T13:50:36.3382-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.386372-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-svi.5","title":"gt mq reject: manual MR rejection","description":"Implement 'gt mq reject \u003cid\u003e --reason \"...\"' for manual rejection.\n\nActions:\n1. Verify MR exists and is open\n2. Close MR with close_reason=rejected\n3. Notify worker via mail (optional)\n4. Do NOT close source issue (work not done)\n\nOptions:\n- --reason REASON: required explanation\n- --notify: send mail to worker\n\nReference: docs/merge-queue-design.md#cli-commands","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-17T13:50:38.691775-08:00","updated_at":"2025-12-27T21:29:54.378041-08:00","dependencies":[{"issue_id":"gt-svi.5","depends_on_id":"gt-svi","type":"parent-child","created_at":"2025-12-17T13:50:38.693749-08:00","created_by":"daemon"}],"deleted_at":"2025-12-27T21:29:54.378041-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-svjyr","title":"Digest: mol-deacon-patrol","description":"Patrol 3: inbox clear, all healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-26T14:21:48.063307-08:00","updated_at":"2025-12-27T21:26:01.712636-08:00","deleted_at":"2025-12-27T21:26:01.712636-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-svmj8","title":"Merge: cheedo-1767088553821","description":"branch: polecat/cheedo-1767088553821\ntarget: main\nsource_issue: cheedo-1767088553821\nrig: gastown","status":"open","priority":2,"issue_type":"merge-request","created_at":"2025-12-30T10:37:17.026847-08:00","created_by":"gastown/polecats/cheedo","updated_at":"2025-12-30T10:37:17.026847-08:00"}
{"id":"gt-sw95t","title":"Digest: mol-deacon-patrol","description":"P20: stable - handoff triggered","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T20:15:29.507422-08:00","updated_at":"2025-12-27T21:26:02.212221-08:00","deleted_at":"2025-12-27T21:26:02.212221-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-swqfx","title":"Digest: mol-deacon-patrol","description":"Patrol 17","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T14:57:10.122945-08:00","updated_at":"2025-12-26T14:57:10.122945-08:00","closed_at":"2025-12-26T14:57:10.122884-08:00"}
{"id":"gt-swrw","title":"Merge: gt-3x0z.4","description":"branch: polecat/rictus\ntarget: main\nsource_issue: gt-3x0z.4\nrig: gastown","status":"tombstone","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:18:10.46877-08:00","updated_at":"2025-12-27T21:27:22.593005-08:00","deleted_at":"2025-12-27T21:27:22.593005-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"merge-request"}
@@ -2057,7 +2059,7 @@
{"id":"gt-tcv8","title":"Digest: mol-deacon-patrol","description":"Patrol 2: All healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:35:11.507838-08:00","updated_at":"2025-12-24T22:35:11.507838-08:00","closed_at":"2025-12-24T22:35:11.507795-08:00"}
{"id":"gt-teq0p","title":"Find abandoned work","description":"Find abandoned work.\n\nScan for orphaned state:\n- Issues marked in_progress with no active polecat\n- Polecats that stopped responding mid-work\n- Merge queue entries with no polecat owner\n- Wisp sessions that outlived their spawner\n\n```bash\nbd list --status=in_progress\ngt polecats --all --orphan\n```\n\nFor each orphan:\n- Check if polecat session still exists\n- If not, mark issue for reassignment or retry\n- File incident beads if data loss occurred\n","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T02:11:33.776531-08:00","updated_at":"2025-12-27T21:29:55.274773-08:00","dependencies":[{"issue_id":"gt-teq0p","depends_on_id":"gt-v7wq4","type":"blocks","created_at":"2025-12-25T02:11:33.890608-08:00","created_by":"stevey"}],"deleted_at":"2025-12-27T21:29:55.274773-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"id":"gt-tfg1","title":"Digest: mol-deacon-patrol","description":"Patrol #2: Routine - all 6 agents healthy","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-24T22:15:34.682289-08:00","updated_at":"2025-12-27T21:26:04.819594-08:00","deleted_at":"2025-12-27T21:26:04.819594-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
{"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":"hooked","priority":2,"issue_type":"task","assignee":"gastown/polecats/imperator","created_at":"2025-12-26T14:52:04.244948-08:00","updated_at":"2025-12-30T10:33:38.608399-08:00","dependencies":[{"issue_id":"gt-tgy1v","depends_on_id":"gt-xo05b","type":"blocks","created_at":"2025-12-26T14:53:03.081856-08:00","created_by":"daemon"},{"issue_id":"gt-tgy1v","depends_on_id":"gt-ikyo1","type":"blocks","created_at":"2025-12-27T22:16:18.444503-08:00","created_by":"daemon"},{"issue_id":"gt-tgy1v","depends_on_id":"gt-qha0g","type":"blocks","created_at":"2025-12-29T19:57:46.720308-08:00","created_by":"daemon"}]}
{"id":"gt-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-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"}

11
.beads/mq/gt-215tk.json Normal file
View File

@@ -0,0 +1,11 @@
{
"id": "gt-215tk",
"branch": "polecat/warboy-1767106060799",
"target": "main",
"source_issue": "warboy-1767106060799",
"worker": "",
"rig": "gastown",
"title": "Merge: warboy-1767106060799",
"priority": 2,
"created_at": "2025-12-30T10:40:55.503776-08:00"
}

11
.beads/mq/gt-npu0m.json Normal file
View File

@@ -0,0 +1,11 @@
{
"id": "gt-npu0m",
"branch": "polecat/imperator-1767106079026",
"target": "main",
"source_issue": "imperator-1767106079026",
"worker": "",
"rig": "gastown",
"title": "Merge: imperator-1767106079026",
"priority": 2,
"created_at": "2025-12-30T10:40:11.954481-08:00"
}

11
.beads/mq/gt-svmj8.json Normal file
View File

@@ -0,0 +1,11 @@
{
"id": "gt-svmj8",
"branch": "polecat/cheedo-1767088553821",
"target": "main",
"source_issue": "cheedo-1767088553821",
"worker": "",
"rig": "gastown",
"title": "Merge: cheedo-1767088553821",
"priority": 2,
"created_at": "2025-12-30T10:37:17.028645-08:00"
}