bd sync: 2025-12-26 13:09:41
This commit is contained in:
@@ -128,6 +128,7 @@
|
||||
{"id":"gt-3fm","title":"Mail orchestrator daemon","description":"Background mail orchestrator daemon.\n\n## Command\n```\ngt mail orchestrate [--interval N] [--once] [--verbose]\n```\n\n## Purpose\nBackground process that:\n1. Monitors outbox for pending mail\n2. Delivers to recipient inboxes\n3. Handles offline recipients (retry later)\n4. Cleans delivered messages from outbox\n\n## Why Needed?\nCurrent mail is synchronous. If recipient is offline or mailbox locked, send fails.\nOrchestrator enables async delivery with retry.\n\n## Implementation\n```go\nfunc (o *Orchestrator) Run(interval time.Duration) error {\n ticker := time.NewTicker(interval)\n for range ticker.C {\n o.processOutbox()\n }\n}\n\nfunc (o *Orchestrator) processOutbox() {\n // List outbox/*.json\n // For each, attempt delivery\n // On success, delete from outbox\n // On failure, increment retry count\n}\n```\n\n## Outbox Structure\n```\n\u003ctown\u003e/mayor/mail/outbox/\n├── msg-abc123.json\n└── msg-def456.json\n```\n\n## Lower Priority\nCurrent synchronous delivery works. Orchestrator is optimization.\n\n## Acceptance Criteria\n- [ ] Background daemon mode\n- [ ] Retry failed deliveries\n- [ ] --once for single pass\n- [ ] Configurable interval","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T14:48:29.830841-08:00","updated_at":"2025-12-16T16:07:35.973257-08:00"}
|
||||
{"id":"gt-3fu6z","title":"Digest: mol-deacon-patrol","description":"Patrol 18: Quiet","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:19:51.795226-08:00","updated_at":"2025-12-25T19:19:51.795226-08:00","closed_at":"2025-12-25T19:19:51.795176-08:00"}
|
||||
{"id":"gt-3htc","title":"Digest: mol-deacon-patrol","description":"Patrol #7","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T22:23:00.657254-08:00","updated_at":"2025-12-24T22:23:00.657254-08:00","closed_at":"2025-12-24T22:23:00.657225-08:00","close_reason":"Squashed from 8 wisps"}
|
||||
{"id":"gt-3jq4i","title":"Witness Patrol","description":"Per-rig worker monitor patrol loop with progressive nudging.","status":"open","priority":2,"issue_type":"molecule","created_at":"2025-12-26T13:08:21.384337-08:00","updated_at":"2025-12-26T13:08:21.384337-08:00"}
|
||||
{"id":"gt-3limt","title":"Digest: mol-deacon-patrol","description":"Patrol 5: all clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:04:35.041079-08:00","updated_at":"2025-12-25T11:04:35.041079-08:00","closed_at":"2025-12-25T11:04:35.041054-08:00","close_reason":"Squashed from 8 wisps"}
|
||||
{"id":"gt-3lygr","title":"Digest: mol-deacon-patrol","description":"Patrol 11: Nominal","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T23:50:46.338114-08:00","updated_at":"2025-12-24T23:50:46.338114-08:00","closed_at":"2025-12-24T23:50:46.338079-08:00","close_reason":"Squashed from 8 wisps"}
|
||||
{"id":"gt-3ndj","title":"Digest: mol-deacon-patrol @ 2025-12-24 19:44","description":"Patrol 7: All healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T19:44:48.99583-08:00","updated_at":"2025-12-24T19:44:48.99583-08:00","closed_at":"2025-12-24T19:44:48.995758-08:00","close_reason":"Squashed from wisp gt-zim (9 issues)"}
|
||||
@@ -335,7 +336,7 @@
|
||||
{"id":"gt-7ihm8","title":"Digest: mol-deacon-patrol","description":"Patrol 14: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T16:23:56.486493-08:00","updated_at":"2025-12-25T16:23:56.486493-08:00","closed_at":"2025-12-25T16:23:56.486459-08:00"}
|
||||
{"id":"gt-7ik","title":"Ephemeral polecats: spawn fresh, delete on completion","description":"## Design Decision\n\nSwitch from pooled/idle polecats to ephemeral model:\n- Spawn creates fresh worktree from main\n- Polecat requests shutdown when done (bottom-up)\n- Witness verifies handoff, kills session, deletes worktree\n- No 'idle' state - polecats exist only while working\n\n## Rationale\n\n1. **Git worktrees are fast** - pooling optimization is obsolete\n2. **Pooling creates maintenance burden:**\n - Git stashes accumulate\n - Untracked artifacts pile up\n - Branches drift from main\n - Beads DB gets stale\n3. **PGT sync problems** came from persistent branches\n4. **Support infrastructure exists** - Witness, Refinery, Mayor handle continuity\n5. **Simpler mental model** - polecat exists = work in progress\n\n## Lifecycle\n\n```\nSpawn:\n gt spawn --issue \u003cid\u003e\n → Creates fresh worktree: git worktree add polecats/\u003cname\u003e -b polecat/\u003cname\u003e\n → Initializes beads in worktree\n → Starts session, assigns work\n\nWorking:\n Polecat does task\n → Pushes to polecat/\u003cname\u003e branch\n → Submits to merge queue when ready\n\nCompletion (POLECAT-INITIATED):\n Polecat runs: gt handoff\n → Verifies git state clean\n → Sends mail to Witness: \"Ready for shutdown\"\n → Marks itself done, waits for termination\n\nCleanup (WITNESS-OWNED):\n Witness receives shutdown request\n → Verifies PR merged or in queue\n → Verifies no uncommitted changes\n → Kills session: gt session stop \u003crig\u003e/\u003cpolecat\u003e\n → Deletes worktree: git worktree remove polecats/\u003cname\u003e\n → Deletes branch: git branch -d polecat/\u003cname\u003e\n → Optionally: Notifies Mayor of completion\n```\n\n## Key Insight: Bottom-Up Shutdown\n\n**Old model (wrong)**: Top-down batch shutdown - \"cancel the swarm\"\n**New model (right)**: Bottom-up individual shutdown - polecat requests, Witness executes\n\nThis enables streaming:\n- Workers come and go continuously\n- No \"swarm end\" to trigger cleanup\n- Each worker manages its own lifecycle\n- Witness is the lifecycle authority\n\n## Implementation\n\n1. Add `gt handoff` command for polecats to request shutdown\n2. Modify gt spawn to always create fresh worktree\n3. Run bd init in new worktree (beads needs initialization)\n4. Add shutdown request handler to Witness\n5. Witness verifies handoff, then cleans up:\n - Kill session\n - Remove worktree\n - Delete branch\n6. Remove 'idle' state from polecat state machine\n7. Simplify gt polecat list (only shows active)\n\n## Impact on Other Tasks\n\n- gt-17r (Zombie cleanup): Becomes trivial - orphan worktrees\n- gt-4my (Worker health): Simpler - no idle/stuck ambiguity\n- gt-f9x.5/f9x.6 (Doctor): Fewer states to validate\n- gt-eu9 (Witness handoff): Witness receives polecat shutdown requests","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-17T15:44:31.139964-08:00","updated_at":"2025-12-19T01:57:17.033547-08:00","closed_at":"2025-12-19T01:57:17.033547-08:00"}
|
||||
{"id":"gt-7iu4u","title":"Digest: mol-deacon-patrol","description":"Patrol 12: routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T10:18:28.987479-08:00","updated_at":"2025-12-25T10:18:28.987479-08:00","closed_at":"2025-12-25T10:18:28.98744-08:00"}
|
||||
{"id":"gt-7l2l1","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously,\nhandling callbacks, monitoring rig health, and performing cleanup.\nEach patrol cycle runs these steps in sequence, then loops or exits.\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:21:49.488364-08:00","updated_at":"2025-12-25T11:21:49.488364-08:00"}
|
||||
{"id":"gt-7l2l1","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:21:49.488364-08:00","updated_at":"2025-12-26T13:09:27.296288-08:00","closed_at":"2025-12-26T13:09:27.296288-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps"}
|
||||
{"id":"gt-7lt","title":"gt mail send should tmux-notify recipient","description":"## Problem\n\nWhen mail is sent via gt mail send, the recipient session does not get a tmux notification. In Python Gas Town (PGT), mail delivery triggers a tmux display-message or similar notification so the agent knows mail arrived.\n\n## Expected Behavior\n\nWhen gt mail send \u003caddr\u003e is called:\n1. Mail is delivered to recipient inbox\n2. If recipient has an active tmux session, send notification\n3. Notification should be visible (display-message or bell)\n\n## Current Behavior\n\nMail is delivered but no notification. Agent has to poll inbox to discover new mail.\n\n## Impact\n\n- Agents miss time-sensitive messages\n- Heartbeat pokes from daemon will not wake agents\n- Coordination is slower (polling vs push)\n\n## Implementation Notes\n\nAfter successful mail delivery, check if recipient has active session:\n- gt session list can identify active sessions\n- tmux display-message or send-keys can notify\n- Could inject a visible prompt like \"[MAIL] New message from \u003csender\u003e\"\n\n## Reference\n\nCheck PGT implementation for how it handles this.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T12:28:50.142075-08:00","updated_at":"2025-12-18T20:09:53.112902-08:00","closed_at":"2025-12-18T20:09:53.112902-08:00"}
|
||||
{"id":"gt-7nb3h","title":"Digest: mol-deacon-patrol","description":"Patrol 5: All healthy, no messages","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T17:38:56.411245-08:00","updated_at":"2025-12-25T17:38:56.411245-08:00","closed_at":"2025-12-25T17:38:56.411194-08:00","close_reason":"Squashed from 8 wisps"}
|
||||
{"id":"gt-7o7","title":"Session pre-shutdown checks","description":"Session stop should verify clean state before killing, like PGT.\n\n## Pre-Shutdown Checks\n\n### 1. Git Working Tree Clean\n```go\nfunc checkGitClean(clonePath string) error {\n // git status --porcelain\n // Fail if any output\n}\n```\n\n### 2. All Commits Pushed\n```go\nfunc checkCommitsPushed(clonePath string) error {\n // git log origin/HEAD..HEAD\n // Fail if any unpushed commits\n}\n```\n\n### 3. Assigned Issues Handled\n```go\nfunc checkIssuesHandled(polecat *Polecat) error {\n // If polecat.Issue != \"\", check if closed or reassigned\n}\n```\n\n### 4. Beads Synced\n```go\nfunc checkBeadsSynced(clonePath string) error {\n // bd sync --status in clone directory\n}\n```\n\n## Behavior on Failure\n1. First attempt: Nudge worker to fix\n2. Retry up to 3 times with delay\n3. After retries: Escalate to Witness/Mayor\n\n## Integration\nModify internal/session/manager.go Stop():\n```go\nfunc (m *Manager) Stop(polecat string, force bool) error {\n if !force {\n if err := m.runPreShutdownChecks(polecat); err != nil {\n return fmt.Errorf(\"pre-shutdown checks failed: %w\", err)\n }\n }\n // existing stop logic\n}\n```\n\n## Flags\n- --force: Skip checks\n- --grace-period N: Time to wait for fixes\n\n## Dependencies\n- Ties into gt-69l (hook system) - can be hook-based\n- Ties into gt-f8v (Witness pre-kill verification)\n\n## Acceptance Criteria\n- [ ] Stop fails if uncommitted changes (without --force)\n- [ ] Stop fails if unpushed commits\n- [ ] Clear error messages with fix instructions\n- [ ] --force bypasses all checks","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T14:47:55.968983-08:00","updated_at":"2025-12-16T16:05:02.795812-08:00"}
|
||||
@@ -634,7 +635,7 @@
|
||||
{"id":"gt-d7i","title":"gt session capture: Support positional line count argument","description":"Make 'gt session capture gastown/Toast 50' work.\n\nCurrently requires: gt session capture gastown/Toast -n 50\nShould also accept: gt session capture gastown/Toast 50\n\nAgent UX principle: commands should work the way agents guess they work.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T22:28:44.291285-08:00","updated_at":"2025-12-19T01:33:49.860862-08:00","closed_at":"2025-12-19T01:33:49.860862-08:00"}
|
||||
{"id":"gt-d7i38","title":"Digest: mol-deacon-patrol","description":"Patrol 20: All healthy - handoff threshold reached","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T18:53:56.983327-08:00","updated_at":"2025-12-25T18:53:56.983327-08:00","closed_at":"2025-12-25T18:53:56.983278-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-d7i38","depends_on_id":"gt-wisp-bhp","type":"parent-child","created_at":"2025-12-25T18:53:56.984173-08:00","created_by":"deacon"}]}
|
||||
{"id":"gt-d8a8x","title":"Digest: mol-deacon-patrol","description":"Patrol 13: All green","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:34:25.657224-08:00","updated_at":"2025-12-25T19:34:25.657224-08:00","closed_at":"2025-12-25T19:34:25.657173-08:00","close_reason":"Squashed from 8 wisps"}
|
||||
{"id":"gt-dapb","title":"mol-polecat-arm","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Steps\n\n### capture\nCapture recent tmux output for this polecat.\n\n```bash\ntmux capture-pane -t gt-{{rig}}-{{polecat_name}} -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n### assess\nCategorize polecat state.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n### load-history\nRead nudge history for this polecat from patrol state.\n\n```\nnudge_count = state.nudges[{{polecat_name}}].count\nlast_nudge_time = state.nudges[{{polecat_name}}].timestamp\n```\n\nNeeds: assess\n\n### decide\nApply the nudge matrix to determine action.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n### execute\nTake the decided action.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-{{rig}}-{{polecat_name}} \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/{{polecat_name}}\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: {{polecat_name}} stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp\n\nThis data feeds back to the patrol's aggregate step.\n\nLabels: [template, christmas-ornament, polecat-arm]","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-23T02:37:03.754926-08:00","updated_at":"2025-12-23T02:37:03.754926-08:00"}
|
||||
{"id":"gt-dapb","title":"mol-polecat-arm","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step.\nEach polecat being monitored gets one arm.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat_name | Yes | Name of the polecat to inspect |\n| rig | Yes | Rig containing the polecat |\n\n## Steps\n\n### capture\nCapture recent tmux output for this polecat.\n\n```bash\ntmux capture-pane -t gt-{{rig}}-{{polecat_name}} -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)\n\n### assess\nCategorize polecat state.\n\nStates:\n- **working**: Recent tool calls, active processing\n- **idle**: At prompt, no recent activity\n- **error**: Showing errors or stack traces\n- **requesting_shutdown**: Sent LIFECYCLE/Shutdown mail\n- **done**: Showing completion indicators\n\nCalculate: minutes since last activity.\nNeeds: capture\n\n### load-history\nRead nudge history for this polecat from patrol state.\n\n```\nnudge_count = state.nudges[{{polecat_name}}].count\nlast_nudge_time = state.nudges[{{polecat_name}}].timestamp\n```\n\nNeeds: assess\n\n### decide\nApply the nudge matrix to determine action.\n\n| State | Idle Time | Nudge Count | Action |\n|-------|-----------|-------------|--------|\n| working | any | any | none |\n| idle | \u003c10min | any | none |\n| idle | 10-15min | 0 | nudge-1 (gentle) |\n| idle | 15-20min | 1 | nudge-2 (direct) |\n| idle | 20+min | 2 | nudge-3 (final) |\n| idle | any | 3 | escalate |\n| error | any | any | assess-severity |\n| requesting_shutdown | any | any | pre-kill-verify |\n| done | any | any | pre-kill-verify |\n\nNudge text:\n1. \"How's progress? Need any help?\"\n2. \"Please wrap up soon. What's blocking you?\"\n3. \"Final check. Will escalate in 5 min if no response.\"\n\nRecord decision and rationale.\nNeeds: load-history\n\n### execute\nTake the decided action.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-{{rig}}-{{polecat_name}} \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/{{polecat_name}}\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n```\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: {{polecat_name}} stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\nNeeds: decide\n\n## Output\n\nThe arm completes with:\n- action_taken: none | nudge-1 | nudge-2 | nudge-3 | killed | escalated\n- result: success | failed | pending\n- updated_state: New nudge count and timestamp\n\nThis data feeds back to the patrol's aggregate step.\n\nLabels: [template, christmas-ornament, polecat-arm]","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-23T02:37:03.754926-08:00","updated_at":"2025-12-26T13:09:27.302022-08:00","closed_at":"2025-12-26T13:09:27.302022-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps"}
|
||||
{"id":"gt-db4x","title":"Merge: gt-7919","description":"branch: polecat/furiosa\ntarget: main\nsource_issue: gt-7919\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-22T23:41:28.898315-08:00","updated_at":"2025-12-22T23:49:28.398755-08:00","closed_at":"2025-12-22T23:49:28.398755-08:00","close_reason":"Merged to main - tests now pass"}
|
||||
{"id":"gt-dck","title":"Update config location: .gastown/ → config/","description":"Move rig configuration from hidden .gastown/ to visible config/:\n- config/rig.json: Rig configuration\n- config/engineer.json: Engineer settings (test command, etc.)\n- config/witness.json: Witness settings (heartbeat interval, etc.)\n\nHidden directories are poorly discovered by AI agents.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T23:02:20.400818-08:00","updated_at":"2025-12-25T21:00:51.079963-08:00","closed_at":"2025-12-25T21:00:51.079963-08:00","close_reason":"Stale refinery/engineer tasks. Role templates and prompting are complete.","dependencies":[{"issue_id":"gt-dck","depends_on_id":"gt-h5n","type":"blocks","created_at":"2025-12-16T23:02:55.69517-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-dcxz8","title":"Digest: mol-deacon-patrol","description":"Patrol 12: All clear","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T00:03:31.988364-08:00","updated_at":"2025-12-25T00:03:31.988364-08:00","closed_at":"2025-12-25T00:03:31.98833-08:00"}
|
||||
@@ -911,7 +912,7 @@
|
||||
{"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":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-21T14:06:27.375686-08:00","updated_at":"2025-12-25T22:12:51.049746-08:00","closed_at":"2025-12-25T22:12:51.049746-08:00","close_reason":"Fixed by adding triggerPendingSpawns to daemon heartbeat. Daemon now polls for pending spawns and triggers them with WaitForClaudeReady when ready."}
|
||||
{"id":"gt-iua8","title":"Merge: gt-frs","description":"branch: polecat/Slit\ntarget: main\nsource_issue: gt-frs\nrig: gastown","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T16:30:05.529099-08:00","updated_at":"2025-12-19T18:26:14.104887-08:00","closed_at":"2025-12-19T17:48:44.654109-08:00"}
|
||||
{"id":"gt-iwl0e","title":"Missing space in error messages (handoff.go, prime.go)","description":"Minor typo in error messages at two locations:\n\n**handoff.go L895**:\n```go\nfmt.Println(style.Dim.Render(\"Run manually: bd --no-daemon wisp\" + protoID))\n// Missing space before protoID\n```\n\n**prime.go L1061**:\nSame issue.\n\n**Fix**: Add space before protoID:\n```go\nfmt.Println(style.Dim.Render(\"Run manually: bd --no-daemon wisp \" + protoID))\n```","status":"open","priority":4,"issue_type":"bug","created_at":"2025-12-25T22:03:16.368682-08:00","updated_at":"2025-12-25T22:03:16.368682-08:00"}
|
||||
{"id":"gt-j3cx","title":"refinery Handoff","description":"attached_molecule: null\nattached_at: null\n\n# Merge queue tracking\nlast_processed_branch: null\nbranches_merged_this_cycle: 0","status":"pinned","priority":2,"issue_type":"task","created_at":"2025-12-24T23:19:17.135684-08:00","updated_at":"2025-12-24T23:19:24.168274-08:00"}
|
||||
{"id":"gt-j3cx","title":"refinery Handoff","description":"# Merge queue tracking\nlast_processed_branch: null\nbranches_merged_this_cycle: 0","status":"pinned","priority":2,"issue_type":"task","created_at":"2025-12-24T23:19:17.135684-08:00","updated_at":"2025-12-26T13:08:21.775778-08:00"}
|
||||
{"id":"gt-j4nu","title":"Merge: gt-g44u.3","description":"branch: polecat/Ace\ntarget: main\nsource_issue: gt-g44u.3\nrig: gastown","status":"closed","priority":0,"issue_type":"merge-request","created_at":"2025-12-19T16:14:52.767156-08:00","updated_at":"2025-12-19T17:35:36.663796-08:00","closed_at":"2025-12-19T17:35:36.663796-08:00"}
|
||||
{"id":"gt-j5tk","title":"Work assignment messages should auto-close on completion","description":"When a polecat completes work on an issue, the work assignment message (msg-type:task) stays open. Found 7 stale work assignments in gastown after swarm completed.\n\nProposal: When bd close is called on an issue, auto-close any work assignment messages that reference that issue in their body.\n\nAlternative: Work assignment messages could use a different lifecycle - perhaps they should be acked (closed) when the polecat starts working, not when they finish.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-20T03:12:28.403974-08:00","updated_at":"2025-12-25T21:00:15.945049-08:00","closed_at":"2025-12-25T21:00:15.945049-08:00","close_reason":"Nice-to-have polish features. Not essential for v0.1."}
|
||||
{"id":"gt-j6s8","title":"Refinery startup: bond mol-refinery-patrol on start","description":"Wire up Refinery to automatically bond its patrol molecule on startup.\n\n## Current state\n- mol-refinery-patrol exists in builtin_molecules.go\n- prompts/roles/refinery.md describes the protocol\n- Refinery doesn't auto-bond on startup\n\n## Desired behavior\nOn Refinery session start:\n1. gt prime detects RoleRefinery\n2. Check for existing in-progress patrol: bd list --status=in_progress --assignee=refinery\n3. If found: resume from current step\n4. If not found: bd mol bond mol-refinery-patrol --wisp\n5. Output patrol context to agent\n\n## Implementation options\nA) Add to gt prime (outputRefineryPatrolContext)\nB) Add startup hook in refinery CLAUDE.md\nC) Both (prime detects, template reinforces)\n\n## Testing\n- Start refinery session\n- Verify patrol bonds automatically\n- Kill mid-patrol, restart, verify resumes\n\n## Depends on\n- gt-3x0z.10 (existing issue for Refinery patrol)","status":"closed","priority":1,"issue_type":"task","assignee":"gastown/dementus","created_at":"2025-12-22T16:43:34.739741-08:00","updated_at":"2025-12-23T01:16:16.780172-08:00","closed_at":"2025-12-23T01:16:16.780172-08:00","close_reason":"Merged to main"}
|
||||
@@ -1122,6 +1123,7 @@
|
||||
{"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-20T17:52:43.47722-08:00","updated_at":"2025-12-20T17:52:48.155447-08:00","closed_at":"2025-12-20T17:52:48.155447-08:00"}
|
||||
{"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":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T23:02:48.22994-08:00","updated_at":"2025-12-25T21:00:51.065423-08:00","closed_at":"2025-12-25T21:00:51.065423-08:00","close_reason":"Stale refinery/engineer tasks. Role templates and prompting are complete.","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"}]}
|
||||
{"id":"gt-nk7i","title":"Digest: mol-deacon-patrol","description":"Patrol 13: OK","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T21:00:14.154408-08:00","updated_at":"2025-12-24T21:00:14.154408-08:00","closed_at":"2025-12-24T21:00:14.15438-08:00","close_reason":"Squashed from 8 wisps"}
|
||||
{"id":"gt-nm1oi","title":"Deacon Patrol","description":"Mayor's daemon patrol loop for handling callbacks, health checks, and cleanup.","status":"open","priority":2,"issue_type":"molecule","created_at":"2025-12-26T13:08:21.347354-08:00","updated_at":"2025-12-26T13:08:21.347354-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":"closed","priority":3,"issue_type":"task","created_at":"2025-12-23T01:19:15.540532-08:00","updated_at":"2025-12-23T02:44:10.542253-08:00","closed_at":"2025-12-23T02:44:10.542253-08:00","close_reason":"Closed"}
|
||||
{"id":"gt-noih","title":"test pin issue","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T11:45:42.660977-08:00","updated_at":"2025-12-25T18:49:24.407481-08:00","closed_at":"2025-12-25T01:33:01.164909-08:00","close_reason":"Test pollution cleanup"}
|
||||
{"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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T03:24:19.444213-08:00","updated_at":"2025-12-23T04:00:20.079908-08:00","closed_at":"2025-12-23T04:00:20.079908-08:00","close_reason":"Implemented gt account add with email/desc flags","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"}]}
|
||||
@@ -1435,6 +1437,7 @@
|
||||
{"id":"gt-unev","title":"Clean up ~/gt root directory cruft","description":"The town root has accumulated various directories and files that need review:\n\n**To evaluate:**\n- daemon/ - old daemon code? move or delete?\n- deacon/ - WIP deacon work? consolidate with gastown?\n- mayor/ - old mayor structure? \n- AGENTS.md - is this still used?\n- gt binary at root - should be gitignored\n\n**Already correct:**\n- .beads/, .claude/, .gastown/, .runtime/ - runtime dirs\n- beads/, gastown/ - rig directories \n- docs/hop/ - strategic docs\n- CLAUDE.md - mayor context\n\nClean up, consolidate, update .gitignore as needed.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-22T22:10:09.722561-08:00","updated_at":"2025-12-22T22:10:09.722561-08:00"}
|
||||
{"id":"gt-unrd","title":"Fix gt prime to give crew workers crew context","description":"gt prime currently gives Mayor context to all agents. Crew workers should get crew-specific context. Also extract shared theory of operation from mayor priming into shared context for all roles.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-19T15:37:49.671015-08:00","updated_at":"2025-12-19T17:22:52.551704-08:00","closed_at":"2025-12-19T15:41:38.806903-08:00"}
|
||||
{"id":"gt-uohw","title":"gt doctor: detect tmux session anomalies (linked panes, etc.)","description":"Add a tmux health check to gt doctor that detects:\n\n1. **Linked panes between sessions** - The bug where gt-deacon and gt-mayor shared pane @283, causing heartbeat crosstalk\n2. **Session naming anomalies** - Sessions that don't match expected patterns\n3. **Orphaned panes** - Panes in gt-* sessions with no running process\n\nDetection approach:\n- List all gt-* sessions\n- For each session, get window/pane IDs\n- Check for duplicate pane IDs across different sessions\n- If found, report which sessions are linked and suggest fix\n\nAuto-fix: Could offer to kill and recreate the offending session.\n\nReference: gt-rt6g documented a case where this caused the daemon's Deacon heartbeats to appear in the Mayor's input, eating user prompts.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-22T17:13:04.147197-08:00","updated_at":"2025-12-22T17:16:15.645263-08:00","closed_at":"2025-12-22T17:16:15.645263-08:00","close_reason":"Closed"}
|
||||
{"id":"gt-uovsl","title":"Refinery Patrol","description":"Merge queue processor patrol loop with verification gates.","status":"open","priority":2,"issue_type":"molecule","created_at":"2025-12-26T13:08:21.419524-08:00","updated_at":"2025-12-26T13:08:21.419524-08:00"}
|
||||
{"id":"gt-up9uw","title":"load-context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue (gt-ds3h3) and understand the requirements.\nIdentify any blockers or missing information.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-25T01:59:05.781933-08:00","updated_at":"2025-12-25T14:12:42.092246-08:00","dependencies":[{"issue_id":"gt-up9uw","depends_on_id":"gt-kp3s3","type":"parent-child","created_at":"2025-12-25T01:59:05.783457-08:00","created_by":"stevey"}],"deleted_at":"2025-12-25T14:12:42.092246-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"gt-upom","title":"Witness patrol: cleanup idle orphan polecats","description":"Add patrol step to find and cleanup polecats that are idle with no assigned issue. These orphans occur when polecats crash before sending DONE or Witness misses the message. Patrol should verify git is clean before removing worktree. Part of gt-rana.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T23:09:41.756753-08:00","updated_at":"2025-12-25T21:00:14.347857-08:00","closed_at":"2025-12-25T21:00:14.347857-08:00","close_reason":"Nice-to-have or covered by core patrol lifecycle work."}
|
||||
{"id":"gt-uq1d0","title":"Digest: mol-deacon-patrol","description":"Patrol 5: routine, all healthy","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T13:42:53.668752-08:00","updated_at":"2025-12-25T13:42:53.668752-08:00","closed_at":"2025-12-25T13:42:53.668717-08:00","close_reason":"Squashed from 8 wisps","dependencies":[{"issue_id":"gt-uq1d0","depends_on_id":"gt-cam3u","type":"parent-child","created_at":"2025-12-25T13:42:53.669484-08:00","created_by":"stevey"}]}
|
||||
@@ -1497,25 +1500,25 @@
|
||||
{"id":"gt-wexr","title":"Polecat role references deprecated 'swarm' terminology","description":"prompts/roles/polecat.md line 12 says:\n'Part of a swarm: Other polecats may be working on related issues in parallel'\n\nBut architecture.md explicitly states:\n'There are no swarm IDs - just epics with children'\n\nThe swarm concept has been replaced by streams/dependency model.\nUpdate polecat.md to remove swarm references.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-24T12:50:32.097647-08:00","updated_at":"2025-12-25T20:54:18.947089-08:00","closed_at":"2025-12-25T20:54:18.947089-08:00","close_reason":"Orphaned: referenced in commit but not closed","dependencies":[{"issue_id":"gt-wexr","depends_on_id":"gt-jo9n","type":"blocks","created_at":"2025-12-24T12:52:05.023976-08:00","created_by":"daemon"}]}
|
||||
{"id":"gt-wib7t","title":"Digest: mol-deacon-patrol","description":"Patrol 20: Final patrol, all healthy, handoff triggered","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T07:30:06.242412-08:00","updated_at":"2025-12-25T07:30:06.242412-08:00","closed_at":"2025-12-25T07:30:06.242374-08:00","close_reason":"Squashed from 8 wisps"}
|
||||
{"id":"gt-wisp-0j8","title":"Burn and respawn or loop","description":"Burn and let daemon respawn, or exit if context high.\n\nDecision point at end of patrol cycle:\n\nIf context is LOW:\n- Sleep briefly (avoid tight loop)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Write state to persistent storage\n- Exit cleanly\n- Let the daemon orchestrator respawn a fresh Deacon\n\nThe daemon ensures Deacon is always running:\n```bash\n# Daemon respawns on exit\ngt daemon status\n```\n\nThis enables infinite patrol duration via context-aware respawning.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.503174-08:00","updated_at":"2025-12-25T19:55:55.564216-08:00","closed_at":"2025-12-25T19:55:55.564216-08:00","dependencies":[{"issue_id":"gt-wisp-0j8","depends_on_id":"gt-wisp-4u6","type":"blocks","created_at":"2025-12-25T19:55:37.705049-08:00","created_by":"deacon"}]}
|
||||
{"id":"gt-wisp-3fc","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Ensure state is saved to handoff bead\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue patrolling\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821372-08:00","updated_at":"2025-12-25T19:54:36.821372-08:00","dependencies":[{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.907769-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-hp3","type":"blocks","created_at":"2025-12-25T19:54:36.921536-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-48l","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses dynamic bonding to spawn mol-polecat-arm for each worker,\nenabling parallel inspection with a fanout gate for aggregation.\n\n## The Christmas Ornament Shape\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌────────┘ │ └────────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n inbox-check survey aggregate (WaitsFor: all-children)\n check-refnry │ save-state\n load-state │ generate-summary\n ↓ context-check\n ┌───────┼───────┐ burn-or-loop\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n```\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:54:36.819952-08:00","updated_at":"2025-12-25T19:54:36.819952-08:00"}
|
||||
{"id":"gt-wisp-3fc","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Ensure state is saved to handoff bead\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue patrolling\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821372-08:00","updated_at":"2025-12-26T13:09:27.259354-08:00","closed_at":"2025-12-26T13:09:27.259354-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.907769-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-3fc","depends_on_id":"gt-wisp-hp3","type":"blocks","created_at":"2025-12-25T19:54:36.921536-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-48l","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses dynamic bonding to spawn mol-polecat-arm for each worker,\nenabling parallel inspection with a fanout gate for aggregation.\n\n## The Christmas Ornament Shape\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌────────┘ │ └────────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n inbox-check survey aggregate (WaitsFor: all-children)\n check-refnry │ save-state\n load-state │ generate-summary\n ↓ context-check\n ┌───────┼───────┐ burn-or-loop\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n```\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:54:36.819952-08:00","updated_at":"2025-12-26T13:09:27.284786-08:00","closed_at":"2025-12-26T13:09:27.284786-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps"}
|
||||
{"id":"gt-wisp-4u6","title":"Check own context limit","description":"Check own context limit.\n\nThe Deacon runs in a Claude session with finite context. Check if approaching the limit:\n\n```bash\ngt context --usage\n```\n\nIf context is high (\u003e80%), prepare for handoff:\n- Summarize current state\n- Note any pending work\n- Write handoff to molecule state\n\nThis enables the Deacon to burn and respawn cleanly.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.502945-08:00","updated_at":"2025-12-25T19:55:55.580427-08:00","closed_at":"2025-12-25T19:55:55.580427-08:00","dependencies":[{"issue_id":"gt-wisp-4u6","depends_on_id":"gt-wisp-hzw","type":"blocks","created_at":"2025-12-25T19:55:37.690205-08:00","created_by":"deacon"}]}
|
||||
{"id":"gt-wisp-5yy","title":"Load persisted patrol state","description":"Read handoff bead and get nudge counts.\n\nLoad persistent state from the witness handoff bead:\n- Active workers and their status from last cycle\n- Nudge counts per worker per issue\n- Last nudge timestamps\n- Pending escalations\n\n```bash\nbd show \u003chandoff-bead-id\u003e\n```\n\nIf no handoff exists (fresh start), initialize empty state.\nThis state persists across wisp burns and session cycles.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.82212-08:00","updated_at":"2025-12-25T19:54:36.82212-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"}]}
|
||||
{"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":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821859-08:00","updated_at":"2025-12-25T19:54:36.821859-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"}]}
|
||||
{"id":"gt-wisp-5yy","title":"Load persisted patrol state","description":"Read handoff bead and get nudge counts.\n\nLoad persistent state from the witness handoff bead:\n- Active workers and their status from last cycle\n- Nudge counts per worker per issue\n- Last nudge timestamps\n- Pending escalations\n\n```bash\nbd show \u003chandoff-bead-id\u003e\n```\n\nIf no handoff exists (fresh start), initialize empty state.\nThis state persists across wisp burns and session cycles.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.82212-08:00","updated_at":"2025-12-26T13:09:27.240945-08:00","closed_at":"2025-12-26T13:09:27.240945-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-5yy","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.977849-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-5yy","depends_on_id":"gt-wisp-ps8","type":"blocks","created_at":"2025-12-25T19:54:36.992199-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-a1c","title":"Process witness mail","description":"Process witness mail: lifecycle requests, help requests.\n\n```bash\ngt mail inbox\n```\n\nHandle by message type:\n- **LIFECYCLE/Shutdown**: Queue for pre-kill verification\n- **Blocked/Help**: Assess if resolvable or escalate\n- **HANDOFF**: Load predecessor state\n- **Work complete**: Verify issue closed, proceed to pre-kill\n\nRecord any pending actions for later steps.\nMark messages as processed when complete.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821859-08:00","updated_at":"2025-12-26T13:09:27.247242-08:00","closed_at":"2025-12-26T13:09:27.247242-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-a1c","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.963525-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-bol","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-25T19:55:37.501992-08:00","updated_at":"2025-12-25T19:55:55.596967-08:00","closed_at":"2025-12-25T19:55:55.596967-08:00","dependencies":[{"issue_id":"gt-wisp-bol","depends_on_id":"gt-wisp-eju","type":"blocks","created_at":"2025-12-25T19:55:37.631303-08:00","created_by":"deacon"}]}
|
||||
{"id":"gt-wisp-crs","title":"mol-deacon-patrol","description":"Mayor's daemon patrol loop.\n\nThe Deacon is the Mayor's background process that runs continuously, handling callbacks, monitoring rig health, and performing cleanup. Each patrol cycle runs these steps in sequence, then loops or exits.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T19:20:19.674333-08:00","updated_at":"2025-12-25T19:20:19.674333-08:00"}
|
||||
{"id":"gt-wisp-crs","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-25T19:20:19.674333-08:00","updated_at":"2025-12-26T13:09:27.29055-08:00","closed_at":"2025-12-26T13:09:27.29055-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps"}
|
||||
{"id":"gt-wisp-eju","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","created_at":"2025-12-25T19:55:37.501716-08:00","updated_at":"2025-12-25T19:55:55.613364-08:00","closed_at":"2025-12-25T19:55:55.613364-08:00","dependencies":[{"issue_id":"gt-wisp-eju","depends_on_id":"gt-wisp-lya","type":"blocks","created_at":"2025-12-25T19:55:37.617246-08:00","created_by":"deacon"}]}
|
||||
{"id":"gt-wisp-fhx","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-25T19:55:37.502241-08:00","updated_at":"2025-12-25T19:55:55.639728-08:00","closed_at":"2025-12-25T19:55:55.639728-08:00","dependencies":[{"issue_id":"gt-wisp-fhx","depends_on_id":"gt-wisp-bol","type":"blocks","created_at":"2025-12-25T19:55:37.645769-08:00","created_by":"deacon"}]}
|
||||
{"id":"gt-wisp-h5d","title":"Persist patrol state","description":"Update handoff bead with new states.\n\nPersist state to the witness handoff bead:\n- Updated worker statuses from all arms\n- Current nudge counts per worker\n- Nudge timestamps\n- Actions taken this cycle\n- Pending items for next cycle\n\n```bash\nbd update \u003chandoff-bead-id\u003e --description=\"\u003cserialized state\u003e\"\n```\n\nThis state survives wisp burns and session cycles.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822355-08:00","updated_at":"2025-12-25T19:54:36.822355-08:00","dependencies":[{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:37.006252-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-lsd","type":"blocks","created_at":"2025-12-25T19:54:37.020736-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-hp3","title":"Generate handoff summary","description":"Summarize this patrol cycle for digest.\n\nInclude:\n- Workers inspected (count, names)\n- Nudges sent (count, to whom)\n- Sessions killed (count, names)\n- Escalations (count, issues)\n- Issues found (brief descriptions)\n- Actions pending for next cycle\n\nThis becomes the digest when the patrol wisp is squashed.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821607-08:00","updated_at":"2025-12-25T19:54:36.821607-08:00","dependencies":[{"issue_id":"gt-wisp-hp3","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.93569-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-hp3","depends_on_id":"gt-wisp-h5d","type":"blocks","created_at":"2025-12-25T19:54:36.949594-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-h5d","title":"Persist patrol state","description":"Update handoff bead with new states.\n\nPersist state to the witness handoff bead:\n- Updated worker statuses from all arms\n- Current nudge counts per worker\n- Nudge timestamps\n- Actions taken this cycle\n- Pending items for next cycle\n\n```bash\nbd update \u003chandoff-bead-id\u003e --description=\"\u003cserialized state\u003e\"\n```\n\nThis state survives wisp burns and session cycles.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822355-08:00","updated_at":"2025-12-26T13:09:27.234704-08:00","closed_at":"2025-12-26T13:09:27.234704-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:37.006252-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-h5d","depends_on_id":"gt-wisp-lsd","type":"blocks","created_at":"2025-12-25T19:54:37.020736-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-hp3","title":"Generate handoff summary","description":"Summarize this patrol cycle for digest.\n\nInclude:\n- Workers inspected (count, names)\n- Nudges sent (count, to whom)\n- Sessions killed (count, names)\n- Escalations (count, issues)\n- Issues found (brief descriptions)\n- Actions pending for next cycle\n\nThis becomes the digest when the patrol wisp is squashed.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821607-08:00","updated_at":"2025-12-26T13:09:27.253303-08:00","closed_at":"2025-12-26T13:09:27.253303-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-hp3","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.93569-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-hp3","depends_on_id":"gt-wisp-h5d","type":"blocks","created_at":"2025-12-25T19:54:36.949594-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-hzw","title":"Clean dead sessions","description":"Clean dead sessions.\n\nGarbage collect terminated sessions:\n- Remove stale polecat directories\n- Clean up wisp session artifacts\n- Prune old logs and temp files\n- Archive completed molecule state\n\n```bash\ngt gc --sessions\ngt gc --wisps --age=1h\n```\n\nPreserve audit trail. Only clean sessions confirmed dead.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.502717-08:00","updated_at":"2025-12-25T19:55:55.655408-08:00","closed_at":"2025-12-25T19:55:55.655408-08:00","dependencies":[{"issue_id":"gt-wisp-hzw","depends_on_id":"gt-wisp-nna","type":"blocks","created_at":"2025-12-25T19:55:37.675362-08:00","created_by":"deacon"}]}
|
||||
{"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":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.820571-08:00","updated_at":"2025-12-25T19:54:36.820571-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"}]}
|
||||
{"id":"gt-wisp-lsd","title":"Aggregate arm results","description":"Collect outcomes from all polecat inspection arms.\n\nThis is a **fanout gate** - it cannot proceed until ALL dynamically-bonded\npolecat arms have completed their inspection cycles.\n\nOnce all arms complete, collect their outcomes:\n- Actions taken per polecat (nudge, kill, escalate, none)\n- Updated nudge counts\n- Any errors or issues discovered\n\nBuild the consolidated state for save-state.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.820571-08:00","updated_at":"2025-12-26T13:09:27.278475-08:00","closed_at":"2025-12-26T13:09:27.278475-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-lsd","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.822951-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-lsd","depends_on_id":"gt-wisp-q5d","type":"blocks","created_at":"2025-12-25T19:54:36.837897-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-lya","title":"Handle callbacks from agents","description":"Handle callbacks from agents.\n\nCheck the Mayor's inbox for messages from:\n- Witnesses reporting polecat status\n- Refineries reporting merge results\n- Polecats requesting help or escalation\n- External triggers (webhooks, timers)\n\n```bash\ngt mail inbox\n# For each message:\ngt mail read \u003cid\u003e\n# Handle based on message type\n```\n\nCallbacks may spawn new polecats, update issue state, or trigger other actions.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.501447-08:00","updated_at":"2025-12-25T19:55:55.670444-08:00","closed_at":"2025-12-25T19:55:55.670444-08:00"}
|
||||
{"id":"gt-wisp-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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:55:37.502477-08:00","updated_at":"2025-12-25T19:55:55.686112-08:00","closed_at":"2025-12-25T19:55:55.686112-08:00","dependencies":[{"issue_id":"gt-wisp-nna","depends_on_id":"gt-wisp-bol","type":"blocks","created_at":"2025-12-25T19:55:37.660556-08:00","created_by":"deacon"}]}
|
||||
{"id":"gt-wisp-ovv","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-25T19:33:32.627542-08:00","updated_at":"2025-12-25T21:03:00.233563-08:00","closed_at":"2025-12-25T21:03:00.233563-08:00"}
|
||||
{"id":"gt-wisp-ps8","title":"Ensure refinery is alive","description":"Ensure the refinery is alive and processing merge requests.\n\n**Redundant system**: This check runs in both gt spawn and Witness patrol\nto ensure the merge queue processor stays operational.\n\n```bash\n# Check if refinery session is running\ngt session status \u003crig\u003e/refinery\n\n# Check for merge requests in queue\nbd list --type=merge-request --status=open\n```\n\nIf merge requests are waiting AND refinery is not running:\n```bash\ngt session start \u003crig\u003e/refinery\ngt mail send \u003crig\u003e/refinery -s \"PATROL: Wake up\" -m \"Merge requests in queue. Please process.\"\n```\n\nIf refinery is running but queue is non-empty for \u003e30 min, send nudge.\nThis ensures polecats don't wait forever for their branches to merge.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821127-08:00","updated_at":"2025-12-25T19:54:36.821127-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"}]}
|
||||
{"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":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822584-08:00","updated_at":"2025-12-25T19:54:36.822584-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"}]}
|
||||
{"id":"gt-wisp-yj8","title":"Burn and respawn or loop","description":"End of patrol cycle decision.\n\nIf context is LOW:\n- Burn this wisp (no audit trail needed for patrol cycles)\n- Sleep briefly to avoid tight loop (30-60 seconds)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Burn wisp with summary digest\n- Exit cleanly (daemon will respawn fresh Witness)\n\n```bash\nbd mol burn # Destroy ephemeral wisp\n```\n\nThe daemon ensures Witness is always running.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.820851-08:00","updated_at":"2025-12-25T19:54:36.820851-08:00","dependencies":[{"issue_id":"gt-wisp-yj8","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.852513-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-yj8","depends_on_id":"gt-wisp-3fc","type":"blocks","created_at":"2025-12-25T19:54:36.86625-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-ps8","title":"Ensure refinery is alive","description":"Ensure the refinery is alive and processing merge requests.\n\n**Redundant system**: This check runs in both gt spawn and Witness patrol\nto ensure the merge queue processor stays operational.\n\n```bash\n# Check if refinery session is running\ngt session status \u003crig\u003e/refinery\n\n# Check for merge requests in queue\nbd list --type=merge-request --status=open\n```\n\nIf merge requests are waiting AND refinery is not running:\n```bash\ngt session start \u003crig\u003e/refinery\ngt mail send \u003crig\u003e/refinery -s \"PATROL: Wake up\" -m \"Merge requests in queue. Please process.\"\n```\n\nIf refinery is running but queue is non-empty for \u003e30 min, send nudge.\nThis ensures polecats don't wait forever for their branches to merge.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.821127-08:00","updated_at":"2025-12-26T13:09:27.265455-08:00","closed_at":"2025-12-26T13:09:27.265455-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-ps8","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.880056-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-ps8","depends_on_id":"gt-wisp-a1c","type":"blocks","created_at":"2025-12-25T19:54:36.893717-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-q5d","title":"Survey all polecats (fanout)","description":"List polecats and bond mol-polecat-arm for each one.\n\n```bash\n# Get list of polecats\ngt polecat list \u003crig\u003e\n```\n\nFor each polecat discovered, dynamically bond an inspection arm:\n\n```bash\n# Bond mol-polecat-arm for each polecat\nfor polecat in $(gt polecat list \u003crig\u003e --names); do\n bd mol bond mol-polecat-arm $PATROL_WISP_ID \\\n --ref arm-$polecat \\\n --var polecat_name=$polecat \\\n --var rig=\u003crig\u003e\ndone\n```\n\nThis creates child wisps like:\n- patrol-x7k.arm-ace (5 steps)\n- patrol-x7k.arm-nux (5 steps)\n- patrol-x7k.arm-toast (5 steps)\n\nEach arm runs in PARALLEL. The aggregate step will wait for all to complete.\n\nIf no polecats are found, this step completes immediately with no children.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.822584-08:00","updated_at":"2025-12-26T13:09:27.22818-08:00","closed_at":"2025-12-26T13:09:27.22818-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-q5d","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:37.034999-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-q5d","depends_on_id":"gt-wisp-5yy","type":"blocks","created_at":"2025-12-25T19:54:37.049799-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wisp-yj8","title":"Burn and respawn or loop","description":"End of patrol cycle decision.\n\nIf context is LOW:\n- Burn this wisp (no audit trail needed for patrol cycles)\n- Sleep briefly to avoid tight loop (30-60 seconds)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Burn wisp with summary digest\n- Exit cleanly (daemon will respawn fresh Witness)\n\n```bash\nbd mol burn # Destroy ephemeral wisp\n```\n\nThe daemon ensures Witness is always running.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T19:54:36.820851-08:00","updated_at":"2025-12-26T13:09:27.271792-08:00","closed_at":"2025-12-26T13:09:27.271792-08:00","close_reason":"Stale protomolecule/wisp reification; patrols now run as ephemeral wisps","dependencies":[{"issue_id":"gt-wisp-yj8","depends_on_id":"gt-wisp-48l","type":"parent-child","created_at":"2025-12-25T19:54:36.852513-08:00","created_by":"gastown/witness"},{"issue_id":"gt-wisp-yj8","depends_on_id":"gt-wisp-3fc","type":"blocks","created_at":"2025-12-25T19:54:36.86625-08:00","created_by":"gastown/witness"}]}
|
||||
{"id":"gt-wmhj","title":"tmux link-window auto-selects new window, causing agent confusion","description":"## Summary\n\nWhen running `gt crew at \u003cother\u003e` from inside a tmux session, the linked window auto-selects, causing the user to unknowingly switch agents.\n\n## Root Cause\n\n`internal/tmux/tmux.go:535-538` - `LinkWindow` doesn't use `-d` flag:\n```go\n_, err := t.run(\"link-window\", \"-s\", source) // Missing -d!\n```\n\nBy default, `tmux link-window` selects the newly linked window.\n\n## Reproduction\n\n1. Be in Max's tmux session talking to Max\n2. Ask Max to run `gt crew at joe`\n3. Max creates Joe's session and links it\n4. User is now in Joe's window without realizing it\n5. Max appears to have 'disappeared'\n\n## Fix\n\nAdd `-d` flag to prevent auto-selection:\n```go\n_, err := t.run(\"link-window\", \"-s\", source, \"-d\")\n```\n\n## Related\n\n- gt-09i4: Unify tmux session lifecycle (broader epic Max filed)\n","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-24T14:33:40.40319-08:00","updated_at":"2025-12-24T14:34:01.227518-08:00","closed_at":"2025-12-24T14:34:01.227518-08:00","close_reason":"Fixed by adding -d flag to link-window"}
|
||||
{"id":"gt-woitj","title":"Digest: mol-deacon-patrol","description":"Patrol 4: All agents healthy, routine","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T01:06:29.731567-08:00","updated_at":"2025-12-25T01:06:29.731567-08:00","closed_at":"2025-12-25T01:06:29.731535-08:00","close_reason":"Squashed from 8 wisps"}
|
||||
{"id":"gt-wpg","title":"Replaceable notifications via Claude Code queue","description":"Leverage Claude Code's ability to replace queued text for notifications that supersede previous ones.\n\n## Problem\n\nIf daemon sends 10 heartbeats while agent is busy, agent returns to see 10 stacked messages. Wasteful and noisy.\n\n## Solution\n\nUse Claude Code's queue replacement for:\n- Heartbeat messages (only latest matters)\n- Status updates that supersede previous\n- Progress notifications\n\n## Implementation\n\nNotifications get a 'slot' identifier. New notification in same slot replaces old one:\n- Slot: 'heartbeat' → only one heartbeat queued at a time\n- Slot: 'status-\u003crig\u003e' → latest status per rig\n- No slot → stacks normally (for unique messages)\n\n## Research Needed\n\n- How does Claude Code expose queue replacement?\n- tmux send-keys behavior with pending input\n- Alternative: clear + resend pattern","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T14:19:29.821949-08:00","updated_at":"2025-12-20T13:19:00.398942-08:00","closed_at":"2025-12-20T13:19:00.398942-08:00","dependencies":[{"issue_id":"gt-wpg","depends_on_id":"gt-99m","type":"blocks","created_at":"2025-12-18T14:19:46.656972-08:00","created_by":"daemon"}]}
|
||||
@@ -1641,49 +1644,49 @@
|
||||
{"id":"mol-deacon-patrol.plugin-run","title":"Execute registered plugins","description":"Execute registered plugins.\n\nScan ~/gt/plugins/ for plugin directories. Each plugin has a plugin.md with\nYAML frontmatter defining its gate (when to run) and instructions (what to do).\n\nSee docs/deacon-plugins.md for full documentation.\n\nGate types:\n- cooldown: Time since last run (e.g., 24h)\n- cron: Schedule-based (e.g., \"0 9 * * *\")\n- condition: Metric threshold (e.g., wisp count \u003e 50)\n- event: Trigger-based (e.g., startup, heartbeat)\n\nFor each plugin:\n1. Read plugin.md frontmatter to check gate\n2. Compare against state.json (last run, etc.)\n3. If gate is open, execute the plugin\n\nPlugins marked parallel: true can run concurrently using Task tool subagents.\nSequential plugins run one at a time in directory order.\n\nSkip this step if ~/gt/plugins/ does not exist or is empty.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:12.075298-08:00","updated_at":"2025-12-25T01:31:40.434339-08:00","closed_at":"2025-12-25T01:31:40.434339-08:00","close_reason":"Duplicate - closing cruft","dependencies":[{"issue_id":"mol-deacon-patrol.plugin-run","depends_on_id":"mol-deacon-patrol","type":"parent-child","created_at":"2025-12-24T14:04:12.108953-08:00","created_by":"stevey"},{"issue_id":"mol-deacon-patrol.plugin-run","depends_on_id":"mol-deacon-patrol.health-scan","type":"blocks","created_at":"2025-12-24T14:04:12.185885-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-deacon-patrol.session-gc","title":"Clean dead sessions","description":"Clean dead sessions.\n\nGarbage collect terminated sessions:\n- Remove stale polecat directories\n- Clean up wisp session artifacts\n- Prune old logs and temp files\n- Archive completed molecule state\n\n```bash\ngt gc --sessions\ngt gc --wisps --age=1h\n```\n\nPreserve audit trail. Only clean sessions confirmed dead.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:12.075298-08:00","updated_at":"2025-12-25T01:31:40.33045-08:00","closed_at":"2025-12-25T01:31:40.33045-08:00","close_reason":"Duplicate - closing cruft","dependencies":[{"issue_id":"mol-deacon-patrol.session-gc","depends_on_id":"mol-deacon-patrol","type":"parent-child","created_at":"2025-12-24T14:04:12.130734-08:00","created_by":"stevey"},{"issue_id":"mol-deacon-patrol.session-gc","depends_on_id":"mol-deacon-patrol.orphan-check","type":"blocks","created_at":"2025-12-24T14:04:12.208912-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-deacon-patrol.trigger-pending-spawns","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":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:12.075297-08:00","updated_at":"2025-12-25T01:31:40.485245-08:00","closed_at":"2025-12-25T01:31:40.485245-08:00","close_reason":"Duplicate - closing cruft","dependencies":[{"issue_id":"mol-deacon-patrol.trigger-pending-spawns","depends_on_id":"mol-deacon-patrol","type":"parent-child","created_at":"2025-12-24T14:04:12.087388-08:00","created_by":"stevey"},{"issue_id":"mol-deacon-patrol.trigger-pending-spawns","depends_on_id":"mol-deacon-patrol.inbox-check","type":"blocks","created_at":"2025-12-24T14:04:12.163662-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot","title":"mol-gastown-boot","description":"Mayor bootstraps Gas Town via a verification-gated lifecycle molecule.\n\n## Purpose\nWhen Mayor executes \"boot up gas town\", this proto provides the workflow.\nEach step has action + verification - steps stay open until outcome is confirmed.\n\n## Key Principles\n1. **Verification-gated steps** - Not \"command ran\" but \"outcome confirmed\"\n2. **gt peek for verification** - Capture session output to detect stalls\n3. **gt nudge for recovery** - Reliable message delivery to unstick agents\n4. **Parallel where possible** - Witnesses and refineries can start in parallel\n5. **Ephemeral execution** - Boot is a wisp, squashed to digest after completion\n\n## Execution\n```bash\nbd wisp mol-gastown-boot # Create wisp\n```","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:10.226266-08:00","updated_at":"2025-12-25T11:48:10.226266-08:00","labels":["template"]}
|
||||
{"id":"mol-gastown-boot.ensure-daemon","title":"Ensure daemon","description":"Verify the Gas Town daemon is running.\n\n## Action\n```bash\ngt daemon status || gt daemon start\n```\n\n## Verify\n1. Daemon PID file exists: `~/.gt/daemon.pid`\n2. Process is alive: `kill -0 $(cat ~/.gt/daemon.pid)`\n3. Daemon responds: `gt daemon status` returns success\n\n## OnFail\nCannot start daemon. Log error and continue - some commands work without daemon.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226266-08:00","updated_at":"2025-12-25T11:48:10.226266-08:00","dependencies":[{"issue_id":"mol-gastown-boot.ensure-daemon","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.227808-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-deacon","title":"Ensure deacon","description":"Start the Deacon and verify patrol mode is active.\n\n## Action\n```bash\ngt deacon start\n```\n\n## Verify\n1. Session exists: `tmux has-session -t gt-deacon 2\u003e/dev/null`\n2. Not stalled: `gt peek deacon/` does NOT show \"\u003e Try\" prompt\n3. Heartbeat fresh: `deacon/heartbeat.json` modified \u003c 2 min ago\n\n## OnStall\n```bash\ngt nudge deacon/ \"Start patrol.\"\nsleep 30\n# Re-verify\n```","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226267-08:00","updated_at":"2025-12-25T11:48:10.226267-08:00","dependencies":[{"issue_id":"mol-gastown-boot.ensure-deacon","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.239743-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.ensure-deacon","depends_on_id":"mol-gastown-boot.ensure-daemon","type":"blocks","created_at":"2025-12-25T11:48:10.334948-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-refineries","title":"Ensure refineries","description":"Parallel container: Start all rig refineries.\n\nChildren execute in parallel. Container completes when all children complete.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-25T11:48:10.226268-08:00","dependencies":[{"issue_id":"mol-gastown-boot.ensure-refineries","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.287763-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.ensure-refineries","depends_on_id":"mol-gastown-boot.ensure-deacon","type":"blocks","created_at":"2025-12-25T11:48:10.359278-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-refineries.ensure-beads-refinery","title":"Ensure beads refinery","description":"Start the beads rig Refinery.\n\n## Action\n```bash\ngt refinery start beads\n```\n\n## Verify\n1. Session exists: `tmux has-session -t beads-refinery 2\u003e/dev/null`\n2. Not stalled: `gt peek beads/refinery` does NOT show \"\u003e Try\" prompt\n3. Queue processing: Refinery can receive merge requests","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-25T11:48:10.226268-08:00","dependencies":[{"issue_id":"mol-gastown-boot.ensure-refineries.ensure-beads-refinery","depends_on_id":"mol-gastown-boot.ensure-refineries","type":"parent-child","created_at":"2025-12-25T11:48:10.311334-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-refineries.ensure-gastown-refinery","title":"Ensure gastown refinery","description":"Start the gastown rig Refinery.\n\n## Action\n```bash\ngt refinery start gastown\n```\n\n## Verify\n1. Session exists: `tmux has-session -t gastown-refinery 2\u003e/dev/null`\n2. Not stalled: `gt peek gastown/refinery` does NOT show \"\u003e Try\" prompt\n3. Queue processing: Refinery can receive merge requests","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-25T11:48:10.226268-08:00","dependencies":[{"issue_id":"mol-gastown-boot.ensure-refineries.ensure-gastown-refinery","depends_on_id":"mol-gastown-boot.ensure-refineries","type":"parent-child","created_at":"2025-12-25T11:48:10.29965-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-witnesses","title":"Ensure witnesses","description":"Parallel container: Start all rig witnesses.\n\nChildren execute in parallel. Container completes when all children complete.","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:10.226267-08:00","updated_at":"2025-12-25T11:48:10.226267-08:00","dependencies":[{"issue_id":"mol-gastown-boot.ensure-witnesses","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.251692-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.ensure-witnesses","depends_on_id":"mol-gastown-boot.ensure-deacon","type":"blocks","created_at":"2025-12-25T11:48:10.346771-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-witnesses.ensure-beads-witness","title":"Ensure beads witness","description":"Start the beads rig Witness.\n\n## Action\n```bash\ngt witness start beads\n```\n\n## Verify\n1. Session exists: `tmux has-session -t beads-witness 2\u003e/dev/null`\n2. Not stalled: `gt peek beads/witness` does NOT show \"\u003e Try\" prompt\n3. Heartbeat fresh: Last patrol cycle \u003c 5 min ago","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-25T11:48:10.226268-08:00","dependencies":[{"issue_id":"mol-gastown-boot.ensure-witnesses.ensure-beads-witness","depends_on_id":"mol-gastown-boot.ensure-witnesses","type":"parent-child","created_at":"2025-12-25T11:48:10.275745-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-witnesses.ensure-gastown-witness","title":"Ensure gastown witness","description":"Start the gastown rig Witness.\n\n## Action\n```bash\ngt witness start gastown\n```\n\n## Verify\n1. Session exists: `tmux has-session -t gastown-witness 2\u003e/dev/null`\n2. Not stalled: `gt peek gastown/witness` does NOT show \"\u003e Try\" prompt\n3. Heartbeat fresh: Last patrol cycle \u003c 5 min ago","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-25T11:48:10.226268-08:00","dependencies":[{"issue_id":"mol-gastown-boot.ensure-witnesses.ensure-gastown-witness","depends_on_id":"mol-gastown-boot.ensure-witnesses","type":"parent-child","created_at":"2025-12-25T11:48:10.263832-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.verify-town-health","title":"Verify town health","description":"Final verification that Gas Town is healthy.\n\n## Action\n```bash\ngt status\n```\n\n## Verify\n1. Daemon running: Shows daemon status OK\n2. Deacon active: Shows deacon in patrol mode\n3. All witnesses: Each rig witness shows active\n4. All refineries: Each rig refinery shows active\n\n## OnFail\nLog degraded state but consider boot complete. Some agents may need manual recovery.\nRun `gt doctor` for detailed diagnostics.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226269-08:00","updated_at":"2025-12-25T11:48:10.226269-08:00","dependencies":[{"issue_id":"mol-gastown-boot.verify-town-health","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.323277-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.verify-town-health","depends_on_id":"mol-gastown-boot.ensure-witnesses","type":"blocks","created_at":"2025-12-25T11:48:10.371722-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.verify-town-health","depends_on_id":"mol-gastown-boot.ensure-refineries","type":"blocks","created_at":"2025-12-25T11:48:10.384311-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm","title":"mol-polecat-arm","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step. Each 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| nudge_text | No | Text to send when nudging (default: \"How's progress?...\") |","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:56:45.852159-08:00","updated_at":"2025-12-25T11:56:45.852159-08:00","labels":["template"]}
|
||||
{"id":"mol-polecat-arm.assess","title":"Assess work status","description":"Categorize 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.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.852161-08:00","updated_at":"2025-12-25T11:56:45.852161-08:00","dependencies":[{"issue_id":"mol-polecat-arm.assess","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.86567-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-arm.assess","depends_on_id":"mol-polecat-arm.capture","type":"blocks","created_at":"2025-12-25T11:56:45.914392-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm.capture","title":"Capture polecat state","description":"Capture recent tmux output for {{polecat_name}}.\n\n```bash\ntmux capture-pane -t gt-{{rig}}-{{polecat_name}} -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.85216-08:00","updated_at":"2025-12-25T11:56:45.852161-08:00","dependencies":[{"issue_id":"mol-polecat-arm.capture","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.853525-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm.decide","title":"Decide intervention action","description":"Apply the nudge matrix to determine action for {{polecat_name}}.\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.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.852162-08:00","updated_at":"2025-12-25T11:56:45.852162-08:00","dependencies":[{"issue_id":"mol-polecat-arm.decide","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.889911-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-arm.decide","depends_on_id":"mol-polecat-arm.load-history","type":"blocks","created_at":"2025-12-25T11:56:45.938918-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm.execute","title":"Execute intervention","description":"Take the decided action for {{polecat_name}}.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-{{rig}}-{{polecat_name}} \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/{{polecat_name}}\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n\n# Verify productive work (for 'done' closures)\ngit log --oneline --grep='\u003cissue-id\u003e' | head -1\n```\n\n**Commit verification** (ZFC principle - agent makes the call):\n- If issue closed as 'done' but no commits reference it → flag for review\n- Legitimate exceptions: already fixed elsewhere, duplicate, deferred\n- Agent must provide justification if closing without commits\n\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: {{polecat_name}} stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\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 {{polecat_name}}\n\nThis data feeds back to the parent patrol's aggregate step.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.852162-08:00","updated_at":"2025-12-25T11:56:45.852162-08:00","dependencies":[{"issue_id":"mol-polecat-arm.execute","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.902108-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-arm.execute","depends_on_id":"mol-polecat-arm.decide","type":"blocks","created_at":"2025-12-25T11:56:45.951096-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm.load-history","title":"Load intervention history","description":"Read nudge history for {{polecat_name}} from patrol state.\n\n```\nnudge_count = state.nudges[{{polecat_name}}].count\nlast_nudge_time = state.nudges[{{polecat_name}}].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed to the arm via the bonding context.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.852161-08:00","updated_at":"2025-12-25T11:56:45.852161-08:00","dependencies":[{"issue_id":"mol-polecat-arm.load-history","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.877815-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-arm.load-history","depends_on_id":"mol-polecat-arm.assess","type":"blocks","created_at":"2025-12-25T11:56:45.926695-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-lease","title":"mol-polecat-lease","description":"Semaphore tracking a single polecat's lifecycle.\n\nUsed by Witness to track polecat lifecycle during patrol. The Witness bonds this proto for each active polecat, creating a lease that tracks the polecat from spawn through work to cleanup.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat | Yes | Name of the polecat |\n| issue | Yes | The issue assigned to the polecat |","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:08.929117-08:00","updated_at":"2025-12-25T11:48:08.929117-08:00","labels":["template"]}
|
||||
{"id":"mol-polecat-lease.boot","title":"Boot","description":"Spawned. Verify it starts working.\n\nCheck if the polecat is alive and working:\n```bash\ngt peek {{polecat}}\n```\n\nIf idle for too long, nudge:\n```bash\ngt nudge {{polecat}} \"Please start working on your assigned issue.\"\n```\n\nTimeout: 60s before escalation to Mayor.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:08.929118-08:00","updated_at":"2025-12-25T11:48:08.929118-08:00","dependencies":[{"issue_id":"mol-polecat-lease.boot","depends_on_id":"mol-polecat-lease","type":"parent-child","created_at":"2025-12-25T11:48:08.930483-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-lease.done","title":"Done","description":"Exit received. Ready for cleanup.\n\nThe polecat has completed its work and sent SHUTDOWN.\nPerform cleanup:\n```bash\ngt session kill {{polecat}}\ngt worktree prune {{polecat}}\n```\n\nUpdate beads state and close the lease.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:08.929119-08:00","updated_at":"2025-12-25T11:48:08.929119-08:00","dependencies":[{"issue_id":"mol-polecat-lease.done","depends_on_id":"mol-polecat-lease","type":"parent-child","created_at":"2025-12-25T11:48:08.95386-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-lease.done","depends_on_id":"mol-polecat-lease.working","type":"blocks","created_at":"2025-12-25T11:48:08.977063-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-lease.working","title":"Working","description":"Actively working. Monitor for stuck.\n\nThe polecat is processing its assigned issue ({{issue}}).\nMonitor via peek. Watch for:\n- Progress on commits\n- Status updates in beads\n- SHUTDOWN mail when done\n\nWait for SHUTDOWN signal from the polecat.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:08.929118-08:00","updated_at":"2025-12-25T11:48:08.929118-08:00","dependencies":[{"issue_id":"mol-polecat-lease.working","depends_on_id":"mol-polecat-lease","type":"parent-child","created_at":"2025-12-25T11:48:08.942276-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-lease.working","depends_on_id":"mol-polecat-lease.boot","type":"blocks","created_at":"2025-12-25T11:48:08.965455-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-work","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work. A polecat that crashes after any step can restart, read its molecule state, and continue from the last completed step. No work is lost.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| issue | Yes | The source issue ID being worked on |","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:07.533028-08:00","updated_at":"2025-12-25T11:48:07.533029-08:00","labels":["template"]}
|
||||
{"id":"mol-polecat-work.implement","title":"Implement","description":"Implement the solution for {{issue}}. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:07.53303-08:00","updated_at":"2025-12-25T11:48:07.53303-08:00","dependencies":[{"issue_id":"mol-polecat-work.implement","depends_on_id":"mol-polecat-work","type":"parent-child","created_at":"2025-12-25T11:48:07.54556-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-work.implement","depends_on_id":"mol-polecat-work.load-context","type":"blocks","created_at":"2025-12-25T11:48:07.582636-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-work.load-context","title":"Load context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue ({{issue}}) and understand the requirements.\nIdentify any blockers or missing information.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:07.533029-08:00","updated_at":"2025-12-25T11:48:07.533029-08:00","dependencies":[{"issue_id":"mol-polecat-work.load-context","depends_on_id":"mol-polecat-work","type":"parent-child","created_at":"2025-12-25T11:48:07.534313-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-work.request-shutdown","title":"Request shutdown","description":"Send shutdown request to Witness.\nWait for termination.\n\nThe polecat is now ready to be cleaned up.\nDo not exit directly - wait for Witness to kill the session.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:07.533031-08:00","updated_at":"2025-12-25T11:48:07.533031-08:00","dependencies":[{"issue_id":"mol-polecat-work.request-shutdown","depends_on_id":"mol-polecat-work","type":"parent-child","created_at":"2025-12-25T11:48:07.569848-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-work.request-shutdown","depends_on_id":"mol-polecat-work.self-review","type":"blocks","created_at":"2025-12-25T11:48:07.605917-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-work.self-review","title":"Self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:07.53303-08:00","updated_at":"2025-12-25T11:48:07.53303-08:00","dependencies":[{"issue_id":"mol-polecat-work.self-review","depends_on_id":"mol-polecat-work","type":"parent-child","created_at":"2025-12-25T11:48:07.557248-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-work.self-review","depends_on_id":"mol-polecat-work.implement","type":"blocks","created_at":"2025-12-25T11:48:07.594188-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches,\nmerging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself:\n\"Would Scotty walk past a warp core leak because it existed before his shift?\"\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-24T14:04:24.408113-08:00","updated_at":"2025-12-24T14:04:24.408113-08:00","labels":["template"]}
|
||||
{"id":"mol-refinery-patrol.burn-or-loop","title":"Burn and respawn or loop","description":"End of patrol cycle decision.\n\nIf queue non-empty AND context LOW:\n- Burn this wisp, start fresh patrol\n- Return to inbox-check\n\nIf queue empty OR context HIGH:\n- Burn wisp with summary digest\n- Exit (daemon will respawn if needed)\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408118-08:00","updated_at":"2025-12-24T14:04:24.408118-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.burn-or-loop","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.520035-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.burn-or-loop","depends_on_id":"mol-refinery-patrol.context-check","type":"blocks","created_at":"2025-12-24T14:04:24.635157-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.context-check","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Write handoff summary\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue processing\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408117-08:00","updated_at":"2025-12-24T14:04:24.408117-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.context-check","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.507395-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.context-check","depends_on_id":"mol-refinery-patrol.generate-summary","type":"blocks","created_at":"2025-12-24T14:04:24.621504-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.generate-summary","title":"Generate handoff summary","description":"Summarize this patrol cycle.\n\nInclude:\n- Branches processed (count, names)\n- Test results (pass/fail)\n- Issues filed (if any)\n- Branches skipped (with reasons)\n- Any escalations sent\n\nThis becomes the digest when the patrol is squashed.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408117-08:00","updated_at":"2025-12-24T14:04:24.408117-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.generate-summary","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.495071-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.generate-summary","depends_on_id":"mol-refinery-patrol.loop-check","type":"blocks","created_at":"2025-12-24T14:04:24.608193-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.handle-failures","title":"Handle test failures","description":"**VERIFICATION GATE**: This step enforces the Beads Promise.\n\nIf tests PASSED: This step auto-completes. Proceed to merge.\n\nIf tests FAILED:\n1. Diagnose: Is this a branch regression or pre-existing on main?\n2. If branch caused it:\n - Abort merge\n - Notify polecat: \"Tests failing. Please fix and resubmit.\"\n - Skip to loop-check\n3. If pre-existing on main:\n - Option A: Fix it yourself (you're the Engineer!)\n - Option B: File a bead: bd create --type=bug --priority=1 --title=\"...\"\n\n**GATE REQUIREMENT**: You CANNOT proceed to merge-push without:\n- Tests passing, OR\n- Fix committed, OR\n- Bead filed for the failure\n\nThis is non-negotiable. Never disavow. Never \"note and proceed.\"\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408116-08:00","updated_at":"2025-12-24T14:04:24.408116-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.handle-failures","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.457787-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.handle-failures","depends_on_id":"mol-refinery-patrol.run-tests","type":"blocks","created_at":"2025-12-24T14:04:24.569538-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.inbox-check","title":"Check refinery mail","description":"Check mail for MR submissions, escalations, messages.\n\n```bash\ngt mail inbox\n# Process any urgent items\n```\n\nHandle shutdown requests, escalations, and status queries.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408114-08:00","updated_at":"2025-12-24T14:04:24.408114-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.inbox-check","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.409186-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.loop-check","title":"Check for more work","description":"More branches to process?\n\nIf yes: Return to process-branch with next branch.\nIf no: Continue to generate-summary.\n\nTrack: branches processed, branches skipped (with reasons).\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408116-08:00","updated_at":"2025-12-24T14:04:24.408117-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.loop-check","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.482592-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.loop-check","depends_on_id":"mol-refinery-patrol.merge-push","type":"blocks","created_at":"2025-12-24T14:04:24.595305-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.merge-push","title":"Merge and push to main","description":"Merge to main and push immediately.\n\n```bash\ngit checkout main\ngit merge --ff-only temp\ngit push origin main\ngit branch -d temp\ngit branch -D \u003cpolecat-branch\u003e # Local delete (branches never go to origin)\n```\n\nMain has moved. Any remaining branches need rebasing on new baseline.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408116-08:00","updated_at":"2025-12-24T14:04:24.408116-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.merge-push","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.470227-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.merge-push","depends_on_id":"mol-refinery-patrol.handle-failures","type":"blocks","created_at":"2025-12-24T14:04:24.582348-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.process-branch","title":"Process next branch","description":"Pick next branch. Rebase on current main.\n\n```bash\ngit checkout -b temp origin/\u003cpolecat-branch\u003e\ngit rebase origin/main\n```\n\nIf rebase conflicts and unresolvable:\n- git rebase --abort\n- Notify polecat to fix and resubmit\n- Skip to loop-check for next branch\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408115-08:00","updated_at":"2025-12-24T14:04:24.408116-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.process-branch","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.433168-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.process-branch","depends_on_id":"mol-refinery-patrol.queue-scan","type":"blocks","created_at":"2025-12-24T14:04:24.544513-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.queue-scan","title":"Scan merge queue","description":"Fetch remote and identify polecat branches waiting.\n\n```bash\ngit fetch origin\ngit branch -r | grep polecat\ngt refinery queue \u003crig\u003e\n```\n\nIf queue empty, skip to context-check step.\nTrack branch list for this cycle.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408115-08:00","updated_at":"2025-12-24T14:04:24.408115-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.queue-scan","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.421394-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.queue-scan","depends_on_id":"mol-refinery-patrol.inbox-check","type":"blocks","created_at":"2025-12-24T14:04:24.532177-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.run-tests","title":"Run test suite","description":"Run the test suite.\n\n```bash\ngo test ./...\n```\n\nTrack results: pass count, fail count, specific failures.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408116-08:00","updated_at":"2025-12-24T14:04:24.408116-08:00","dependencies":[{"issue_id":"mol-refinery-patrol.run-tests","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.445288-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.run-tests","depends_on_id":"mol-refinery-patrol.process-branch","type":"blocks","created_at":"2025-12-24T14:04:24.556947-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses dynamic bonding to spawn mol-polecat-arm for each worker,\nenabling parallel inspection with a fanout gate for aggregation.\n\n## The Christmas Ornament Shape\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌────────┘ │ └────────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n inbox-check survey aggregate (WaitsFor: all-children)\n check-refnry │ save-state\n load-state │ generate-summary\n ↓ context-check\n ┌───────┼───────┐ burn-or-loop\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n```\n","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-24T14:04:24.052267-08:00","updated_at":"2025-12-24T14:04:24.052267-08:00","labels":["template"]}
|
||||
{"id":"mol-witness-patrol.aggregate","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":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.05227-08:00","updated_at":"2025-12-24T14:04:24.05227-08:00","labels":["gate:all-children"],"dependencies":[{"issue_id":"mol-witness-patrol.aggregate","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.099884-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.aggregate","depends_on_id":"mol-witness-patrol.survey-workers","type":"blocks","created_at":"2025-12-24T14:04:24.192794-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.burn-or-loop","title":"Burn and respawn or loop","description":"End of patrol cycle decision.\n\nIf context is LOW:\n- Burn this wisp (no audit trail needed for patrol cycles)\n- Sleep briefly to avoid tight loop (30-60 seconds)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Burn wisp with summary digest\n- Exit cleanly (daemon will respawn fresh Witness)\n\n```bash\nbd mol burn # Destroy ephemeral wisp\n```\n\nThe daemon ensures Witness is always running.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052271-08:00","updated_at":"2025-12-24T14:04:24.052271-08:00","dependencies":[{"issue_id":"mol-witness-patrol.burn-or-loop","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.146434-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.burn-or-loop","depends_on_id":"mol-witness-patrol.context-check","type":"blocks","created_at":"2025-12-24T14:04:24.241966-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.check-refinery","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":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052269-08:00","updated_at":"2025-12-24T14:04:24.052269-08:00","dependencies":[{"issue_id":"mol-witness-patrol.check-refinery","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.064998-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.check-refinery","depends_on_id":"mol-witness-patrol.inbox-check","type":"blocks","created_at":"2025-12-24T14:04:24.158365-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.context-check","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Ensure state is saved to handoff bead\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue patrolling\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052271-08:00","updated_at":"2025-12-24T14:04:24.052271-08:00","dependencies":[{"issue_id":"mol-witness-patrol.context-check","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.134457-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.context-check","depends_on_id":"mol-witness-patrol.generate-summary","type":"blocks","created_at":"2025-12-24T14:04:24.229463-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.generate-summary","title":"Generate handoff summary","description":"Summarize this patrol cycle for digest.\n\nInclude:\n- Workers inspected (count, names)\n- Nudges sent (count, to whom)\n- Sessions killed (count, names)\n- Escalations (count, issues)\n- Issues found (brief descriptions)\n- Actions pending for next cycle\n\nThis becomes the digest when the patrol wisp is squashed.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052271-08:00","updated_at":"2025-12-24T14:04:24.052271-08:00","dependencies":[{"issue_id":"mol-witness-patrol.generate-summary","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.122621-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.generate-summary","depends_on_id":"mol-witness-patrol.save-state","type":"blocks","created_at":"2025-12-24T14:04:24.216871-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.inbox-check","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":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052268-08:00","updated_at":"2025-12-24T14:04:24.052268-08:00","dependencies":[{"issue_id":"mol-witness-patrol.inbox-check","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.053334-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.load-state","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":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052269-08:00","updated_at":"2025-12-24T14:04:24.052269-08:00","dependencies":[{"issue_id":"mol-witness-patrol.load-state","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.076898-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.load-state","depends_on_id":"mol-witness-patrol.check-refinery","type":"blocks","created_at":"2025-12-24T14:04:24.169792-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.save-state","title":"Persist patrol state","description":"Update handoff bead with new states.\n\nPersist state to the witness handoff bead:\n- Updated worker statuses from all arms\n- Current nudge counts per worker\n- Nudge timestamps\n- Actions taken this cycle\n- Pending items for next cycle\n\n```bash\nbd update \u003chandoff-bead-id\u003e --description=\"\u003cserialized state\u003e\"\n```\n\nThis state survives wisp burns and session cycles.\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052271-08:00","updated_at":"2025-12-24T14:04:24.052271-08:00","dependencies":[{"issue_id":"mol-witness-patrol.save-state","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.111017-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.save-state","depends_on_id":"mol-witness-patrol.aggregate","type":"blocks","created_at":"2025-12-24T14:04:24.205139-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.survey-workers","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":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.05227-08:00","updated_at":"2025-12-24T14:04:24.05227-08:00","dependencies":[{"issue_id":"mol-witness-patrol.survey-workers","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.088063-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.survey-workers","depends_on_id":"mol-witness-patrol.load-state","type":"blocks","created_at":"2025-12-24T14:04:24.181401-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot","title":"mol-gastown-boot","description":"Mayor bootstraps Gas Town via a verification-gated lifecycle molecule.\n\n## Purpose\nWhen Mayor executes \"boot up gas town\", this proto provides the workflow.\nEach step has action + verification - steps stay open until outcome is confirmed.\n\n## Key Principles\n1. **Verification-gated steps** - Not \"command ran\" but \"outcome confirmed\"\n2. **gt peek for verification** - Capture session output to detect stalls\n3. **gt nudge for recovery** - Reliable message delivery to unstick agents\n4. **Parallel where possible** - Witnesses and refineries can start in parallel\n5. **Ephemeral execution** - Boot is a wisp, squashed to digest after completion\n\n## Execution\n```bash\nbd wisp mol-gastown-boot # Create wisp\n```","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:10.226266-08:00","updated_at":"2025-12-26T13:09:06.726093-08:00","closed_at":"2025-12-26T13:09:06.726093-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","labels":["template"]}
|
||||
{"id":"mol-gastown-boot.ensure-daemon","title":"Ensure daemon","description":"Verify the Gas Town daemon is running.\n\n## Action\n```bash\ngt daemon status || gt daemon start\n```\n\n## Verify\n1. Daemon PID file exists: `~/.gt/daemon.pid`\n2. Process is alive: `kill -0 $(cat ~/.gt/daemon.pid)`\n3. Daemon responds: `gt daemon status` returns success\n\n## OnFail\nCannot start daemon. Log error and continue - some commands work without daemon.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226266-08:00","updated_at":"2025-12-26T13:09:06.735167-08:00","closed_at":"2025-12-26T13:09:06.735167-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-gastown-boot.ensure-daemon","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.227808-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-deacon","title":"Ensure deacon","description":"Start the Deacon and verify patrol mode is active.\n\n## Action\n```bash\ngt deacon start\n```\n\n## Verify\n1. Session exists: `tmux has-session -t gt-deacon 2\u003e/dev/null`\n2. Not stalled: `gt peek deacon/` does NOT show \"\u003e Try\" prompt\n3. Heartbeat fresh: `deacon/heartbeat.json` modified \u003c 2 min ago\n\n## OnStall\n```bash\ngt nudge deacon/ \"Start patrol.\"\nsleep 30\n# Re-verify\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226267-08:00","updated_at":"2025-12-26T13:09:06.707768-08:00","closed_at":"2025-12-26T13:09:06.707768-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-gastown-boot.ensure-deacon","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.239743-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.ensure-deacon","depends_on_id":"mol-gastown-boot.ensure-daemon","type":"blocks","created_at":"2025-12-25T11:48:10.334948-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-refineries","title":"Ensure refineries","description":"Parallel container: Start all rig refineries.\n\nChildren execute in parallel. Container completes when all children complete.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-26T13:09:06.677519-08:00","closed_at":"2025-12-26T13:09:06.677519-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-gastown-boot.ensure-refineries","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.287763-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.ensure-refineries","depends_on_id":"mol-gastown-boot.ensure-deacon","type":"blocks","created_at":"2025-12-25T11:48:10.359278-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-refineries.ensure-beads-refinery","title":"Ensure beads refinery","description":"Start the beads rig Refinery.\n\n## Action\n```bash\ngt refinery start beads\n```\n\n## Verify\n1. Session exists: `tmux has-session -t beads-refinery 2\u003e/dev/null`\n2. Not stalled: `gt peek beads/refinery` does NOT show \"\u003e Try\" prompt\n3. Queue processing: Refinery can receive merge requests","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-26T13:09:06.698033-08:00","closed_at":"2025-12-26T13:09:06.698033-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-gastown-boot.ensure-refineries.ensure-beads-refinery","depends_on_id":"mol-gastown-boot.ensure-refineries","type":"parent-child","created_at":"2025-12-25T11:48:10.311334-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-refineries.ensure-gastown-refinery","title":"Ensure gastown refinery","description":"Start the gastown rig Refinery.\n\n## Action\n```bash\ngt refinery start gastown\n```\n\n## Verify\n1. Session exists: `tmux has-session -t gastown-refinery 2\u003e/dev/null`\n2. Not stalled: `gt peek gastown/refinery` does NOT show \"\u003e Try\" prompt\n3. Queue processing: Refinery can receive merge requests","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-26T13:09:06.687877-08:00","closed_at":"2025-12-26T13:09:06.687877-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-gastown-boot.ensure-refineries.ensure-gastown-refinery","depends_on_id":"mol-gastown-boot.ensure-refineries","type":"parent-child","created_at":"2025-12-25T11:48:10.29965-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-witnesses","title":"Ensure witnesses","description":"Parallel container: Start all rig witnesses.\n\nChildren execute in parallel. Container completes when all children complete.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:10.226267-08:00","updated_at":"2025-12-26T13:09:06.716889-08:00","closed_at":"2025-12-26T13:09:06.716889-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-gastown-boot.ensure-witnesses","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.251692-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.ensure-witnesses","depends_on_id":"mol-gastown-boot.ensure-deacon","type":"blocks","created_at":"2025-12-25T11:48:10.346771-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-witnesses.ensure-beads-witness","title":"Ensure beads witness","description":"Start the beads rig Witness.\n\n## Action\n```bash\ngt witness start beads\n```\n\n## Verify\n1. Session exists: `tmux has-session -t beads-witness 2\u003e/dev/null`\n2. Not stalled: `gt peek beads/witness` does NOT show \"\u003e Try\" prompt\n3. Heartbeat fresh: Last patrol cycle \u003c 5 min ago","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-26T13:09:06.667685-08:00","closed_at":"2025-12-26T13:09:06.667685-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-gastown-boot.ensure-witnesses.ensure-beads-witness","depends_on_id":"mol-gastown-boot.ensure-witnesses","type":"parent-child","created_at":"2025-12-25T11:48:10.275745-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.ensure-witnesses.ensure-gastown-witness","title":"Ensure gastown witness","description":"Start the gastown rig Witness.\n\n## Action\n```bash\ngt witness start gastown\n```\n\n## Verify\n1. Session exists: `tmux has-session -t gastown-witness 2\u003e/dev/null`\n2. Not stalled: `gt peek gastown/witness` does NOT show \"\u003e Try\" prompt\n3. Heartbeat fresh: Last patrol cycle \u003c 5 min ago","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226268-08:00","updated_at":"2025-12-26T13:09:06.657904-08:00","closed_at":"2025-12-26T13:09:06.657904-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-gastown-boot.ensure-witnesses.ensure-gastown-witness","depends_on_id":"mol-gastown-boot.ensure-witnesses","type":"parent-child","created_at":"2025-12-25T11:48:10.263832-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-gastown-boot.verify-town-health","title":"Verify town health","description":"Final verification that Gas Town is healthy.\n\n## Action\n```bash\ngt status\n```\n\n## Verify\n1. Daemon running: Shows daemon status OK\n2. Deacon active: Shows deacon in patrol mode\n3. All witnesses: Each rig witness shows active\n4. All refineries: Each rig refinery shows active\n\n## OnFail\nLog degraded state but consider boot complete. Some agents may need manual recovery.\nRun `gt doctor` for detailed diagnostics.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:10.226269-08:00","updated_at":"2025-12-26T13:09:06.648217-08:00","closed_at":"2025-12-26T13:09:06.648217-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-gastown-boot.verify-town-health","depends_on_id":"mol-gastown-boot","type":"parent-child","created_at":"2025-12-25T11:48:10.323277-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.verify-town-health","depends_on_id":"mol-gastown-boot.ensure-witnesses","type":"blocks","created_at":"2025-12-25T11:48:10.371722-08:00","created_by":"stevey"},{"issue_id":"mol-gastown-boot.verify-town-health","depends_on_id":"mol-gastown-boot.ensure-refineries","type":"blocks","created_at":"2025-12-25T11:48:10.384311-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm","title":"mol-polecat-arm","description":"Single polecat inspection and action cycle.\n\nThis molecule is bonded dynamically by mol-witness-patrol's survey-workers step. Each 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| nudge_text | No | Text to send when nudging (default: \"How's progress?...\") |","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:56:45.852159-08:00","updated_at":"2025-12-26T13:09:06.638349-08:00","closed_at":"2025-12-26T13:09:06.638349-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","labels":["template"]}
|
||||
{"id":"mol-polecat-arm.assess","title":"Assess work status","description":"Categorize 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.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.852161-08:00","updated_at":"2025-12-26T13:09:06.608811-08:00","closed_at":"2025-12-26T13:09:06.608811-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-arm.assess","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.86567-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-arm.assess","depends_on_id":"mol-polecat-arm.capture","type":"blocks","created_at":"2025-12-25T11:56:45.914392-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm.capture","title":"Capture polecat state","description":"Capture recent tmux output for {{polecat_name}}.\n\n```bash\ntmux capture-pane -t gt-{{rig}}-{{polecat_name}} -p | tail -50\n```\n\nRecord:\n- Last activity timestamp (when was last tool call?)\n- Visible errors or stack traces\n- Completion indicators (\"Done\", \"Finished\", etc.)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.85216-08:00","updated_at":"2025-12-26T13:09:06.628542-08:00","closed_at":"2025-12-26T13:09:06.628542-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-arm.capture","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.853525-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm.decide","title":"Decide intervention action","description":"Apply the nudge matrix to determine action for {{polecat_name}}.\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.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.852162-08:00","updated_at":"2025-12-26T13:09:06.587751-08:00","closed_at":"2025-12-26T13:09:06.587751-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-arm.decide","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.889911-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-arm.decide","depends_on_id":"mol-polecat-arm.load-history","type":"blocks","created_at":"2025-12-25T11:56:45.938918-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm.execute","title":"Execute intervention","description":"Take the decided action for {{polecat_name}}.\n\n**nudge-N**:\n```bash\ntmux send-keys -t gt-{{rig}}-{{polecat_name}} \"{{nudge_text}}\" Enter\n```\n\n**pre-kill-verify**:\n```bash\ncd polecats/{{polecat_name}}\ngit status # Must be clean\ngit log origin/main..HEAD # Check for unpushed\nbd show \u003cassigned-issue\u003e # Verify closed/deferred\n\n# Verify productive work (for 'done' closures)\ngit log --oneline --grep='\u003cissue-id\u003e' | head -1\n```\n\n**Commit verification** (ZFC principle - agent makes the call):\n- If issue closed as 'done' but no commits reference it → flag for review\n- Legitimate exceptions: already fixed elsewhere, duplicate, deferred\n- Agent must provide justification if closing without commits\n\nIf clean: kill session, remove worktree, delete branch\nIf dirty: record failure, retry next cycle\n\n**escalate**:\n```bash\ngt mail send mayor/ -s \"Escalation: {{polecat_name}} stuck\" -m \"...\"\n```\n\n**none**: No action needed.\n\nRecord: action taken, result, updated nudge count.\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 {{polecat_name}}\n\nThis data feeds back to the parent patrol's aggregate step.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.852162-08:00","updated_at":"2025-12-26T13:09:06.598643-08:00","closed_at":"2025-12-26T13:09:06.598643-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-arm.execute","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.902108-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-arm.execute","depends_on_id":"mol-polecat-arm.decide","type":"blocks","created_at":"2025-12-25T11:56:45.951096-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-arm.load-history","title":"Load intervention history","description":"Read nudge history for {{polecat_name}} from patrol state.\n\n```\nnudge_count = state.nudges[{{polecat_name}}].count\nlast_nudge_time = state.nudges[{{polecat_name}}].timestamp\n```\n\nThis data was loaded by the parent patrol's load-state step and passed to the arm via the bonding context.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:56:45.852161-08:00","updated_at":"2025-12-26T13:09:06.618791-08:00","closed_at":"2025-12-26T13:09:06.618791-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-arm.load-history","depends_on_id":"mol-polecat-arm","type":"parent-child","created_at":"2025-12-25T11:56:45.877815-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-arm.load-history","depends_on_id":"mol-polecat-arm.assess","type":"blocks","created_at":"2025-12-25T11:56:45.926695-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-lease","title":"mol-polecat-lease","description":"Semaphore tracking a single polecat's lifecycle.\n\nUsed by Witness to track polecat lifecycle during patrol. The Witness bonds this proto for each active polecat, creating a lease that tracks the polecat from spawn through work to cleanup.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| polecat | Yes | Name of the polecat |\n| issue | Yes | The issue assigned to the polecat |","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:08.929117-08:00","updated_at":"2025-12-26T13:09:06.770779-08:00","closed_at":"2025-12-26T13:09:06.770779-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","labels":["template"]}
|
||||
{"id":"mol-polecat-lease.boot","title":"Boot","description":"Spawned. Verify it starts working.\n\nCheck if the polecat is alive and working:\n```bash\ngt peek {{polecat}}\n```\n\nIf idle for too long, nudge:\n```bash\ngt nudge {{polecat}} \"Please start working on your assigned issue.\"\n```\n\nTimeout: 60s before escalation to Mayor.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:08.929118-08:00","updated_at":"2025-12-26T13:09:06.752821-08:00","closed_at":"2025-12-26T13:09:06.752821-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-lease.boot","depends_on_id":"mol-polecat-lease","type":"parent-child","created_at":"2025-12-25T11:48:08.930483-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-lease.done","title":"Done","description":"Exit received. Ready for cleanup.\n\nThe polecat has completed its work and sent SHUTDOWN.\nPerform cleanup:\n```bash\ngt session kill {{polecat}}\ngt worktree prune {{polecat}}\n```\n\nUpdate beads state and close the lease.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:08.929119-08:00","updated_at":"2025-12-26T13:09:06.744018-08:00","closed_at":"2025-12-26T13:09:06.744018-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-lease.done","depends_on_id":"mol-polecat-lease","type":"parent-child","created_at":"2025-12-25T11:48:08.95386-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-lease.done","depends_on_id":"mol-polecat-lease.working","type":"blocks","created_at":"2025-12-25T11:48:08.977063-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-lease.working","title":"Working","description":"Actively working. Monitor for stuck.\n\nThe polecat is processing its assigned issue ({{issue}}).\nMonitor via peek. Watch for:\n- Progress on commits\n- Status updates in beads\n- SHUTDOWN mail when done\n\nWait for SHUTDOWN signal from the polecat.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:08.929118-08:00","updated_at":"2025-12-26T13:09:06.761748-08:00","closed_at":"2025-12-26T13:09:06.761748-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-lease.working","depends_on_id":"mol-polecat-lease","type":"parent-child","created_at":"2025-12-25T11:48:08.942276-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-lease.working","depends_on_id":"mol-polecat-lease.boot","type":"blocks","created_at":"2025-12-25T11:48:08.965455-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-work","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work. A polecat that crashes after any step can restart, read its molecule state, and continue from the last completed step. No work is lost.\n\n## Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| issue | Yes | The source issue ID being worked on |","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T11:48:07.533028-08:00","updated_at":"2025-12-26T13:09:06.815672-08:00","closed_at":"2025-12-26T13:09:06.815672-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","labels":["template"]}
|
||||
{"id":"mol-polecat-work.implement","title":"Implement","description":"Implement the solution for {{issue}}. Follow codebase conventions.\nFile discovered work as new issues with bd create.\n\nMake regular commits with clear messages.\nKeep changes focused on the assigned issue.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:07.53303-08:00","updated_at":"2025-12-26T13:09:06.788764-08:00","closed_at":"2025-12-26T13:09:06.788764-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-work.implement","depends_on_id":"mol-polecat-work","type":"parent-child","created_at":"2025-12-25T11:48:07.54556-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-work.implement","depends_on_id":"mol-polecat-work.load-context","type":"blocks","created_at":"2025-12-25T11:48:07.582636-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-work.load-context","title":"Load context","description":"Run gt prime and bd prime. Verify issue assignment.\nCheck inbox for any relevant messages.\n\nRead the assigned issue ({{issue}}) and understand the requirements.\nIdentify any blockers or missing information.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:07.533029-08:00","updated_at":"2025-12-26T13:09:06.806722-08:00","closed_at":"2025-12-26T13:09:06.806722-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-work.load-context","depends_on_id":"mol-polecat-work","type":"parent-child","created_at":"2025-12-25T11:48:07.534313-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-work.request-shutdown","title":"Request shutdown","description":"Send shutdown request to Witness.\nWait for termination.\n\nThe polecat is now ready to be cleaned up.\nDo not exit directly - wait for Witness to kill the session.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:07.533031-08:00","updated_at":"2025-12-26T13:09:06.780077-08:00","closed_at":"2025-12-26T13:09:06.780077-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-work.request-shutdown","depends_on_id":"mol-polecat-work","type":"parent-child","created_at":"2025-12-25T11:48:07.569848-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-work.request-shutdown","depends_on_id":"mol-polecat-work.self-review","type":"blocks","created_at":"2025-12-25T11:48:07.605917-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-polecat-work.self-review","title":"Self-review","description":"Review your own changes. Look for:\n- Bugs and edge cases\n- Style issues\n- Missing error handling\n- Security concerns\n\nFix any issues found before proceeding.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T11:48:07.53303-08:00","updated_at":"2025-12-26T13:09:06.797793-08:00","closed_at":"2025-12-26T13:09:06.797793-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-polecat-work.self-review","depends_on_id":"mol-polecat-work","type":"parent-child","created_at":"2025-12-25T11:48:07.557248-08:00","created_by":"stevey"},{"issue_id":"mol-polecat-work.self-review","depends_on_id":"mol-polecat-work.implement","type":"blocks","created_at":"2025-12-25T11:48:07.594188-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches,\nmerging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself:\n\"Would Scotty walk past a warp core leak because it existed before his shift?\"\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-24T14:04:24.408113-08:00","updated_at":"2025-12-26T13:09:06.908208-08:00","closed_at":"2025-12-26T13:09:06.908208-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","labels":["template"]}
|
||||
{"id":"mol-refinery-patrol.burn-or-loop","title":"Burn and respawn or loop","description":"End of patrol cycle decision.\n\nIf queue non-empty AND context LOW:\n- Burn this wisp, start fresh patrol\n- Return to inbox-check\n\nIf queue empty OR context HIGH:\n- Burn wisp with summary digest\n- Exit (daemon will respawn if needed)\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408118-08:00","updated_at":"2025-12-26T13:09:06.824665-08:00","closed_at":"2025-12-26T13:09:06.824665-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.burn-or-loop","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.520035-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.burn-or-loop","depends_on_id":"mol-refinery-patrol.context-check","type":"blocks","created_at":"2025-12-24T14:04:24.635157-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.context-check","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Write handoff summary\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue processing\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408117-08:00","updated_at":"2025-12-26T13:09:06.842132-08:00","closed_at":"2025-12-26T13:09:06.842132-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.context-check","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.507395-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.context-check","depends_on_id":"mol-refinery-patrol.generate-summary","type":"blocks","created_at":"2025-12-24T14:04:24.621504-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.generate-summary","title":"Generate handoff summary","description":"Summarize this patrol cycle.\n\nInclude:\n- Branches processed (count, names)\n- Test results (pass/fail)\n- Issues filed (if any)\n- Branches skipped (with reasons)\n- Any escalations sent\n\nThis becomes the digest when the patrol is squashed.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408117-08:00","updated_at":"2025-12-26T13:09:06.833403-08:00","closed_at":"2025-12-26T13:09:06.833403-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.generate-summary","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.495071-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.generate-summary","depends_on_id":"mol-refinery-patrol.loop-check","type":"blocks","created_at":"2025-12-24T14:04:24.608193-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.handle-failures","title":"Handle test failures","description":"**VERIFICATION GATE**: This step enforces the Beads Promise.\n\nIf tests PASSED: This step auto-completes. Proceed to merge.\n\nIf tests FAILED:\n1. Diagnose: Is this a branch regression or pre-existing on main?\n2. If branch caused it:\n - Abort merge\n - Notify polecat: \"Tests failing. Please fix and resubmit.\"\n - Skip to loop-check\n3. If pre-existing on main:\n - Option A: Fix it yourself (you're the Engineer!)\n - Option B: File a bead: bd create --type=bug --priority=1 --title=\"...\"\n\n**GATE REQUIREMENT**: You CANNOT proceed to merge-push without:\n- Tests passing, OR\n- Fix committed, OR\n- Bead filed for the failure\n\nThis is non-negotiable. Never disavow. Never \"note and proceed.\"\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408116-08:00","updated_at":"2025-12-26T13:09:06.858797-08:00","closed_at":"2025-12-26T13:09:06.858797-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.handle-failures","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.457787-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.handle-failures","depends_on_id":"mol-refinery-patrol.run-tests","type":"blocks","created_at":"2025-12-24T14:04:24.569538-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.inbox-check","title":"Check refinery mail","description":"Check mail for MR submissions, escalations, messages.\n\n```bash\ngt mail inbox\n# Process any urgent items\n```\n\nHandle shutdown requests, escalations, and status queries.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408114-08:00","updated_at":"2025-12-26T13:09:06.900339-08:00","closed_at":"2025-12-26T13:09:06.900339-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.inbox-check","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.409186-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.loop-check","title":"Check for more work","description":"More branches to process?\n\nIf yes: Return to process-branch with next branch.\nIf no: Continue to generate-summary.\n\nTrack: branches processed, branches skipped (with reasons).\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408116-08:00","updated_at":"2025-12-26T13:09:06.875909-08:00","closed_at":"2025-12-26T13:09:06.875909-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.loop-check","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.482592-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.loop-check","depends_on_id":"mol-refinery-patrol.merge-push","type":"blocks","created_at":"2025-12-24T14:04:24.595305-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.merge-push","title":"Merge and push to main","description":"Merge to main and push immediately.\n\n```bash\ngit checkout main\ngit merge --ff-only temp\ngit push origin main\ngit branch -d temp\ngit branch -D \u003cpolecat-branch\u003e # Local delete (branches never go to origin)\n```\n\nMain has moved. Any remaining branches need rebasing on new baseline.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408116-08:00","updated_at":"2025-12-26T13:09:06.867416-08:00","closed_at":"2025-12-26T13:09:06.867416-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.merge-push","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.470227-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.merge-push","depends_on_id":"mol-refinery-patrol.handle-failures","type":"blocks","created_at":"2025-12-24T14:04:24.582348-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.process-branch","title":"Process next branch","description":"Pick next branch. Rebase on current main.\n\n```bash\ngit checkout -b temp origin/\u003cpolecat-branch\u003e\ngit rebase origin/main\n```\n\nIf rebase conflicts and unresolvable:\n- git rebase --abort\n- Notify polecat to fix and resubmit\n- Skip to loop-check for next branch\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408115-08:00","updated_at":"2025-12-26T13:09:06.892167-08:00","closed_at":"2025-12-26T13:09:06.892167-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.process-branch","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.433168-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.process-branch","depends_on_id":"mol-refinery-patrol.queue-scan","type":"blocks","created_at":"2025-12-24T14:04:24.544513-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.queue-scan","title":"Scan merge queue","description":"Fetch remote and identify polecat branches waiting.\n\n```bash\ngit fetch origin\ngit branch -r | grep polecat\ngt refinery queue \u003crig\u003e\n```\n\nIf queue empty, skip to context-check step.\nTrack branch list for this cycle.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408115-08:00","updated_at":"2025-12-26T13:09:06.88426-08:00","closed_at":"2025-12-26T13:09:06.88426-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.queue-scan","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.421394-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.queue-scan","depends_on_id":"mol-refinery-patrol.inbox-check","type":"blocks","created_at":"2025-12-24T14:04:24.532177-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-refinery-patrol.run-tests","title":"Run test suite","description":"Run the test suite.\n\n```bash\ngo test ./...\n```\n\nTrack results: pass count, fail count, specific failures.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.408116-08:00","updated_at":"2025-12-26T13:09:06.850559-08:00","closed_at":"2025-12-26T13:09:06.850559-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-refinery-patrol.run-tests","depends_on_id":"mol-refinery-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.445288-08:00","created_by":"stevey"},{"issue_id":"mol-refinery-patrol.run-tests","depends_on_id":"mol-refinery-patrol.process-branch","type":"blocks","created_at":"2025-12-24T14:04:24.556947-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol","title":"mol-witness-patrol","description":"Per-rig worker monitor patrol loop using the Christmas Ornament pattern.\n\nThe Witness is the Pit Boss for your rig. You watch polecats, nudge them toward\ncompletion, verify clean git state before kills, and escalate stuck workers.\n\n**You do NOT do implementation work.** Your job is oversight, not coding.\n\nThis molecule uses dynamic bonding to spawn mol-polecat-arm for each worker,\nenabling parallel inspection with a fanout gate for aggregation.\n\n## The Christmas Ornament Shape\n\n```\n ★ mol-witness-patrol (trunk)\n /|\\\n ┌────────┘ │ └────────┐\n PREFLIGHT DISCOVERY CLEANUP\n │ │ │\n inbox-check survey aggregate (WaitsFor: all-children)\n check-refnry │ save-state\n load-state │ generate-summary\n ↓ context-check\n ┌───────┼───────┐ burn-or-loop\n ● ● ● mol-polecat-arm (dynamic)\n ace nux toast\n```\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-24T14:04:24.052267-08:00","updated_at":"2025-12-26T13:09:06.982646-08:00","closed_at":"2025-12-26T13:09:06.982646-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","labels":["template"]}
|
||||
{"id":"mol-witness-patrol.aggregate","title":"Aggregate arm results","description":"Collect outcomes from all polecat inspection arms.\n\nThis is a **fanout gate** - it cannot proceed until ALL dynamically-bonded\npolecat arms have completed their inspection cycles.\n\nOnce all arms complete, collect their outcomes:\n- Actions taken per polecat (nudge, kill, escalate, none)\n- Updated nudge counts\n- Any errors or issues discovered\n\nBuild the consolidated state for save-state.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.05227-08:00","updated_at":"2025-12-26T13:09:06.953948-08:00","closed_at":"2025-12-26T13:09:06.953948-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","labels":["gate:all-children"],"dependencies":[{"issue_id":"mol-witness-patrol.aggregate","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.099884-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.aggregate","depends_on_id":"mol-witness-patrol.survey-workers","type":"blocks","created_at":"2025-12-24T14:04:24.192794-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.burn-or-loop","title":"Burn and respawn or loop","description":"End of patrol cycle decision.\n\nIf context is LOW:\n- Burn this wisp (no audit trail needed for patrol cycles)\n- Sleep briefly to avoid tight loop (30-60 seconds)\n- Return to inbox-check step\n\nIf context is HIGH:\n- Burn wisp with summary digest\n- Exit cleanly (daemon will respawn fresh Witness)\n\n```bash\nbd mol burn # Destroy ephemeral wisp\n```\n\nThe daemon ensures Witness is always running.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052271-08:00","updated_at":"2025-12-26T13:09:06.939306-08:00","closed_at":"2025-12-26T13:09:06.939306-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-witness-patrol.burn-or-loop","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.146434-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.burn-or-loop","depends_on_id":"mol-witness-patrol.context-check","type":"blocks","created_at":"2025-12-24T14:04:24.241966-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.check-refinery","title":"Ensure refinery is alive","description":"Ensure the refinery is alive and processing merge requests.\n\n**Redundant system**: This check runs in both gt spawn and Witness patrol\nto ensure the merge queue processor stays operational.\n\n```bash\n# Check if refinery session is running\ngt session status \u003crig\u003e/refinery\n\n# Check for merge requests in queue\nbd list --type=merge-request --status=open\n```\n\nIf merge requests are waiting AND refinery is not running:\n```bash\ngt session start \u003crig\u003e/refinery\ngt mail send \u003crig\u003e/refinery -s \"PATROL: Wake up\" -m \"Merge requests in queue. Please process.\"\n```\n\nIf refinery is running but queue is non-empty for \u003e30 min, send nudge.\nThis ensures polecats don't wait forever for their branches to merge.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052269-08:00","updated_at":"2025-12-26T13:09:06.961002-08:00","closed_at":"2025-12-26T13:09:06.961002-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-witness-patrol.check-refinery","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.064998-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.check-refinery","depends_on_id":"mol-witness-patrol.inbox-check","type":"blocks","created_at":"2025-12-24T14:04:24.158365-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.context-check","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Ensure state is saved to handoff bead\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue patrolling\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052271-08:00","updated_at":"2025-12-26T13:09:06.93199-08:00","closed_at":"2025-12-26T13:09:06.93199-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-witness-patrol.context-check","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.134457-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.context-check","depends_on_id":"mol-witness-patrol.generate-summary","type":"blocks","created_at":"2025-12-24T14:04:24.229463-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.generate-summary","title":"Generate handoff summary","description":"Summarize this patrol cycle for digest.\n\nInclude:\n- Workers inspected (count, names)\n- Nudges sent (count, to whom)\n- Sessions killed (count, names)\n- Escalations (count, issues)\n- Issues found (brief descriptions)\n- Actions pending for next cycle\n\nThis becomes the digest when the patrol wisp is squashed.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052271-08:00","updated_at":"2025-12-26T13:09:06.924132-08:00","closed_at":"2025-12-26T13:09:06.924132-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-witness-patrol.generate-summary","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.122621-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.generate-summary","depends_on_id":"mol-witness-patrol.save-state","type":"blocks","created_at":"2025-12-24T14:04:24.216871-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.inbox-check","title":"Process witness mail","description":"Process witness mail: lifecycle requests, help requests.\n\n```bash\ngt mail inbox\n```\n\nHandle by message type:\n- **LIFECYCLE/Shutdown**: Queue for pre-kill verification\n- **Blocked/Help**: Assess if resolvable or escalate\n- **HANDOFF**: Load predecessor state\n- **Work complete**: Verify issue closed, proceed to pre-kill\n\nRecord any pending actions for later steps.\nMark messages as processed when complete.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052268-08:00","updated_at":"2025-12-26T13:09:06.975483-08:00","closed_at":"2025-12-26T13:09:06.975483-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-witness-patrol.inbox-check","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.053334-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.load-state","title":"Load persisted patrol state","description":"Read handoff bead and get nudge counts.\n\nLoad persistent state from the witness handoff bead:\n- Active workers and their status from last cycle\n- Nudge counts per worker per issue\n- Last nudge timestamps\n- Pending escalations\n\n```bash\nbd show \u003chandoff-bead-id\u003e\n```\n\nIf no handoff exists (fresh start), initialize empty state.\nThis state persists across wisp burns and session cycles.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052269-08:00","updated_at":"2025-12-26T13:09:06.968385-08:00","closed_at":"2025-12-26T13:09:06.968385-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-witness-patrol.load-state","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.076898-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.load-state","depends_on_id":"mol-witness-patrol.check-refinery","type":"blocks","created_at":"2025-12-24T14:04:24.169792-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.save-state","title":"Persist patrol state","description":"Update handoff bead with new states.\n\nPersist state to the witness handoff bead:\n- Updated worker statuses from all arms\n- Current nudge counts per worker\n- Nudge timestamps\n- Actions taken this cycle\n- Pending items for next cycle\n\n```bash\nbd update \u003chandoff-bead-id\u003e --description=\"\u003cserialized state\u003e\"\n```\n\nThis state survives wisp burns and session cycles.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.052271-08:00","updated_at":"2025-12-26T13:09:06.916347-08:00","closed_at":"2025-12-26T13:09:06.916347-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-witness-patrol.save-state","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.111017-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.save-state","depends_on_id":"mol-witness-patrol.aggregate","type":"blocks","created_at":"2025-12-24T14:04:24.205139-08:00","created_by":"stevey"}]}
|
||||
{"id":"mol-witness-patrol.survey-workers","title":"Survey all polecats (fanout)","description":"List polecats and bond mol-polecat-arm for each one.\n\n```bash\n# Get list of polecats\ngt polecat list \u003crig\u003e\n```\n\nFor each polecat discovered, dynamically bond an inspection arm:\n\n```bash\n# Bond mol-polecat-arm for each polecat\nfor polecat in $(gt polecat list \u003crig\u003e --names); do\n bd mol bond mol-polecat-arm $PATROL_WISP_ID \\\n --ref arm-$polecat \\\n --var polecat_name=$polecat \\\n --var rig=\u003crig\u003e\ndone\n```\n\nThis creates child wisps like:\n- patrol-x7k.arm-ace (5 steps)\n- patrol-x7k.arm-nux (5 steps)\n- patrol-x7k.arm-toast (5 steps)\n\nEach arm runs in PARALLEL. The aggregate step will wait for all to complete.\n\nIf no polecats are found, this step completes immediately with no children.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T14:04:24.05227-08:00","updated_at":"2025-12-26T13:09:06.946596-08:00","closed_at":"2025-12-26T13:09:06.946596-08:00","close_reason":"Stale protomolecule reification; formulas now in .beads/formulas/*.toml","dependencies":[{"issue_id":"mol-witness-patrol.survey-workers","depends_on_id":"mol-witness-patrol","type":"parent-child","created_at":"2025-12-24T14:04:24.088063-08:00","created_by":"stevey"},{"issue_id":"mol-witness-patrol.survey-workers","depends_on_id":"mol-witness-patrol.load-state","type":"blocks","created_at":"2025-12-24T14:04:24.181401-08:00","created_by":"stevey"}]}
|
||||
|
||||
Reference in New Issue
Block a user