Region HA plan 1b-next: Astra round 8 findings (1 resolved, 2 new P2), unedited
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 file changed,
+29
−0
docs/superpowers/plans/CODEX-PLAN-REGION-HA-1BN-R8.md+29 −0
diff --git a/docs/superpowers/plans/CODEX-PLAN-REGION-HA-1BN-R8.md b/docs/superpowers/plans/CODEX-PLAN-REGION-HA-1BN-R8.md| new file mode 100644 |
| index 000000000..99ef8a089 |
| --- /dev/null |
| +++ b/docs/superpowers/plans/CODEX-PLAN-REGION-HA-1BN-R8.md |
| @@ -0,0 +1,29 @@ |
| +Reviewed `d42a3100`. |
| + |
| +| Round 7 finding | Disposition | Assessment against rev 8 | |
| +|---|---|---| |
| +| 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. | |
| + |
| +New findings: |
| + |
| +1. **P2 — Task 1, Step 3: exhausted-target fencing revokes a live source without its stop evidence.** |
| + |
| + [`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. |
| + |
| + 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). |
| + |
| + **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`. |
| + |
| +2. **P2 — Task 7, Step 4: a same-controller retry loses the stop’s recorded directory revision.** |
| + |
| + [`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. |
| + |
| + 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. |
| + |
| + **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. |
| + |
| +I accept rulings 1–22 and 24. Ruling 23 needs the phase restriction in finding 1. Stage B retains the earlier review obligations. |
| + |
| +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. |
| + |
| +**Verdict: not ready — Stage A needs these two fixes.** |
| \ No newline at end of file |