Witness sends MERGE_READY to refinery on polecat completion (gt-u6siy)

Updated mol-witness-patrol formula with:
- MERGE_READY mail sent after polecat verification (process-cleanups)
- MERGED mail handling in inbox-check (completes cleanup)
- Cleanup wisp state machine: pending → merge-requested → closed
- Fallback discovery in survey-workers creates cleanup if done polecat
  found without existing wisp

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-28 09:53:51 -08:00
parent aab15fdf67
commit 76b969fb2e

View File

@@ -46,11 +46,25 @@ Create a cleanup wisp for this polecat:
```bash
bd create --wisp --title "cleanup:<polecat>" \
--description "Verify and cleanup polecat <name>" \
--labels cleanup,polecat:<name>
--labels cleanup,polecat:<name>,state:pending
```
The wisp's existence IS the pending cleanup. Process in next step.
Mark mail as read.
**MERGED**:
A branch was merged successfully. Complete the cleanup.
```bash
# Find the cleanup wisp for this polecat
bd list --wisp --labels=polecat:<name>,state:merge-requested --status=open
# If found, proceed with polecat removal
gt session kill <rig>/polecats/<name>
# Burn the cleanup wisp
bd close <wisp-id>
```
Mark mail as read.
**HELP / Blocked**:
Assess the request. Can you help? If not, escalate to Mayor:
```bash
@@ -72,7 +86,9 @@ Find and process cleanup wisps (the finalizer pattern).
bd list --wisp --labels=cleanup --status=open
```
For each cleanup wisp:
For each cleanup wisp, check its state label:
## State: pending (needs verification → MERGE_READY)
1. **Extract polecat name** from wisp title/labels
@@ -80,26 +96,43 @@ For each cleanup wisp:
```bash
cd polecats/<name>
git status # Must be clean
git log origin/main..HEAD # No unpushed commits
git log origin/main..HEAD # Commits should be pushed
bd show <assigned-issue> # Issue closed or deferred
```
3. **Verify productive work** (ZFC - you make the call):
3. **Get branch and issue info**:
```bash
# Get current branch
git rev-parse --abbrev-ref HEAD
# Get the hook_bead from agent bead
bd show <agent-bead> # Look for hook_bead field
```
4. **Verify productive work** (ZFC - you make the call):
- Check git log for commits mentioning the issue
- Legitimate exceptions: already fixed, duplicate, deferred
- If closing as 'done' with no commits, flag for review
4. **If clean**: Execute cleanup
5. **If clean**: Send MERGE_READY to refinery
```bash
gt session kill <rig>/polecats/<name>
# Worktree removal handled by session kill
gt mail send <rig>/refinery -s "MERGE_READY <polecat>" -m "Branch: <branch>
Issue: <issue-id>
Polecat: <polecat>
Verified: clean git state, issue closed"
```
Then burn the cleanup wisp:
Then update the wisp to merge-requested state:
```bash
bd close <wisp-id> # or bd burn <wisp-id>
bd update <wisp-id> --labels cleanup,polecat:<name>,state:merge-requested
```
**Do NOT kill the polecat yet** - wait for MERGED confirmation from refinery.
5. **If dirty**: Leave wisp open, log the issue, retry next cycle.
6. **If dirty**: Leave wisp open, log the issue, retry next cycle.
## State: merge-requested (waiting for refinery)
Skip - waiting for MERGED mail from refinery. The inbox-check step handles
MERGED messages and completes these cleanup wisps.
**Parallelism**: Use Task tool subagents to process multiple cleanups concurrently.
Each cleanup is independent - perfect for parallel execution."""
@@ -155,7 +188,7 @@ Each polecat agent bead has fields in its description:
| running | Actively working | Check progress (Step 3) |
| idle | No work assigned | Skip (no action needed) |
| stuck | Self-reported stuck | Handle stuck protocol |
| done | Work complete | Verify cleanup triggered |
| done | Work complete | Verify cleanup triggered (see Step 4a) |
**Step 3: For running polecats, assess progress**
@@ -182,7 +215,27 @@ Look for:
| agent_state=running, idle 5-15 min | Gentle nudge |
| agent_state=running, idle 15+ min | Direct nudge with deadline |
| agent_state=stuck | Assess and help or escalate |
| agent_state=done, cleanup pending | Verify cleanup wisp exists |
| agent_state=done | Verify cleanup triggered (see Step 4a) |
**Step 4a: Handle agent_state=done**
Check if a cleanup wisp exists for this polecat:
```bash
bd list --wisp --labels=polecat:<name> --status=open
```
If cleanup wisp exists:
- state:pending → Will be processed in process-cleanups
- state:merge-requested → Waiting for refinery MERGED response
If NO cleanup wisp exists (POLECAT_DONE mail missed):
Create one to trigger the cleanup flow:
```bash
bd create --wisp --title "cleanup:<polecat>" \
--description "Discovered done polecat without cleanup wisp" \
--labels cleanup,polecat:<name>,state:pending
```
This ensures done polecats eventually get cleaned up even if mail was lost.
**Step 5: Execute nudges**
```bash