fix(witness): Add worktree cleanup to HandleMerged (gt-7uuye)

DefaultWitnessHandler.HandleMerged was only logging a message but not
actually cleaning up the polecat worktree. This left worktrees behind
after merges, even though sessions were killed.

Fixed by calling witness.AutoNukeIfClean which:
- Verifies cleanup_status before nuking (prevents work loss)
- Calls NukePolecat to kill session, remove worktree, and cleanup

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
gastown/polecats/furiosa
2026-01-01 18:16:33 -08:00
committed by Steve Yegge
parent 62354dfe1b
commit 261defa3b4

View File

@@ -6,6 +6,7 @@ import (
"os"
"github.com/steveyegge/gastown/internal/mail"
"github.com/steveyegge/gastown/internal/witness"
)
// DefaultWitnessHandler provides the default implementation for Witness protocol handlers.
@@ -59,10 +60,18 @@ func (h *DefaultWitnessHandler) HandleMerged(payload *MergedPayload) error {
// Continue - notification is best-effort
}
// Initiate polecat cleanup
// Note: Actual cleanup is done by a separate process/molecule
// This handler just records that cleanup is needed
fmt.Fprintf(h.Output, "[Witness] ✓ Polecat %s work merged, cleanup can proceed\n", payload.Polecat)
// Initiate polecat cleanup using AutoNukeIfClean
// This verifies cleanup_status before nuking to prevent work loss.
nukeResult := witness.AutoNukeIfClean(h.WorkDir, h.Rig, payload.Polecat)
if nukeResult.Nuked {
fmt.Fprintf(h.Output, "[Witness] ✓ Auto-nuked polecat %s: %s\n", payload.Polecat, nukeResult.Reason)
} else if nukeResult.Skipped {
fmt.Fprintf(h.Output, "[Witness] ⚠ Cleanup skipped for %s: %s\n", payload.Polecat, nukeResult.Reason)
} else if nukeResult.Error != nil {
fmt.Fprintf(h.Output, "[Witness] ✗ Cleanup failed for %s: %v\n", payload.Polecat, nukeResult.Error)
} else {
fmt.Fprintf(h.Output, "[Witness] ✓ Polecat %s work merged, cleanup can proceed\n", payload.Polecat)
}
return nil
}