| P2 — interrupted release repeats flushes after producers close | Resolved | The resumed drain reuses recorded positions and skips flushing. The new test checks the retry’s call order; Stage B requires idempotent producer acknowledgements. |
6
7
New findings:
8
9
1. **P2 — Task 1, Step 3: exhausted-target fencing revokes a live source without its stop evidence.**
10
11
[`FenceExhaustedTarget`](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/docs/superpowers/plans/2026-10-07-region-ha-1b-next-relocation.md:2290) unconditionally sets `op.exec = none` and enters `pinning`. If three successive targets terminate during `starting` or `releasing`, the executor is still the live source. The verified fence belongs only to the target.
12
13
This violates claim §4’s evidence requirement for revoking execution. It also prevents the source from completing its ordinary stop request: [root requires the requesting box to remain executor](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/internal/host/claimstop.go:184).
14
15
**Fix:** make exhaustion phase-sensitive. While the source remains executor, consume the target’s fence and record `stuck`, preserving the source’s execution identity, phase and release evidence. Reserve the transition to stuck `pinning` for cases where revocation is supported by the executor’s evidence. Test exhaustion in both `starting` and `releasing`.
16
17
2. **P2 — Task 7, Step 4: a same-controller retry loses the stop’s recorded directory revision.**
18
19
[`Release`](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/docs/superpowers/plans/2026-10-07-region-ha-1b-next-relocation.md:8599) restores `recorded.ExpectedDirectoryRevision` only when the boot or controller changes. If the roster advances between attempts under the same controller, the retry instead sends the new revision.
20
21
Root [compares that revision with the stop inventory](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/internal/host/claimstop.go:191), and [fence identity also includes it](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/internal/hostguard/fence.go:45). Thus an interrupted release can remain blocked despite having durable flushed positions.
22
23
**Fix:** preserve the recorded directory revision whenever matching positions exist, independently of whether recovery mode is needed. Extend the retry test with an unchanged boot/controller and an advanced roster revision; require completion without another flush.
24
25
I accept rulings 1–22 and 24. Ruling 23 needs the phase restriction in finding 1. Stage B retains the earlier review obligations.
26
27
All 12 embedded patches pass `git apply --check`; all 39 complete Go blocks parse with `gofmt`. Compilation and tests were not reproduced in this read-only sandbox. No files changed.
28
29
**Verdict: not ready — Stage A needs these two fixes.**