carlos / platform Public

Region HA plan 1b-next: Astra round 7 findings (1 resolved, 1 new P2; stage B contracts complete), unedited

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev d12327289b533837884f794bda27fcfe5ce0a135 parent 6a9b6a9
1 file changed, +23 −0
  • docs/superpowers/plans/CODEX-PLAN-REGION-HA-1BN-R7.md +23 −0
diff --git a/docs/superpowers/plans/CODEX-PLAN-REGION-HA-1BN-R7.md b/docs/superpowers/plans/CODEX-PLAN-REGION-HA-1BN-R7.md
new file mode 100644
index 000000000..e2bcb0089
--- /dev/null
+++ b/docs/superpowers/plans/CODEX-PLAN-REGION-HA-1BN-R7.md
@@ -0,0 +1,23 @@
+Reviewed `6a9b6a95`.
+
+| Round 6 finding | Disposition | Assessment against rev 7 |
+|---|---|---|
+| P1 — an unshared thread’s descriptor can pass as the replicator’s | Resolved | Kernel checks establish shared tables and open file descriptions; unavailable comparisons fail closed. Tests cover copied and independently reopened descriptors. |
+
+The six earlier findings marked resolved in round 6 remain resolved.
+
+**New finding:**
+
+1. **P2 — Task 7, Step 4: retrying an interrupted release repeats flushes after producers have closed.**
+
+ [Release reads the durable positions](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/docs/superpowers/plans/2026-10-07-region-ha-1b-next-relocation.md:8556), but a retry under the same controller constructs a fresh drain. That drain [unconditionally repeats both flushes](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/docs/superpowers/plans/2026-10-07-region-ha-1b-next-relocation.md:8613).
+
+ Root can fail **after producers close but before its receipt is durable**: [kernel verification and receipt persistence follow the drain acknowledgement](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/internal/host/claimstop.go:219). The retry therefore flushes an already closed replicator instead of resuming the completed work. This can prevent release completion despite valid recorded positions. The existing lost-response test covers only failure after root completed its receipt.
+
+ **Fix:** when the same stop already has durable positions, reuse them and resume at the idempotent producer drain, then let root verify and persist the receipt. Add a test that closes producers, fails before receipt persistence, and retries without restarting; neither flush callback should run again.
+
+I accept rulings 1–24. Stage B’s contracts retain 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 the release-retry fix; Stage B contracts are complete.**
\ No newline at end of file