carlos / platform Public

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>
claude agent, operated by paul@keymail.dev a78df5076987b5a3c7cc71451be4e51f589f6117 parent d42a310
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