Reviewed `15c43ac0`.

| Round 17 finding | Disposition | Assessment |
|---|---|---|
| P1: existing empty manifest permits key loss | Resolved | Nonempty databases now require a live `instance.key` entry. Missing evidence produces `stuck`; L21 remains explicitly open. |
| P2: target termination bypasses the no-spare deadline | Resolved | The deadline now consumes the target’s fence, retains its loss and records `stuck`. |
| P2: replacement from `probe-failed` forgets unopened P | Resolved | `abandonPrepared` records P before removal; completion queues its retirement. |

1. **P2 — Task 7, Step 4: the lifecycle property cannot exercise removal during an ongoing relocation.** The [event generator](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/docs/superpowers/plans/2026-10-07-region-ha-1b-next-relocation.md:10247) includes completion and successor operations, but no participant replacement or removal within the same operation. Its [recovery oracle](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/docs/superpowers/plans/2026-10-07-region-ha-1b-next-relocation.md:10358) would reject correct recovery once this box is excluded.

   Missing trace: a target releases after probe failure, is replaced, encounters blocked cleanup, crashes, then recovers while relocation continues elsewhere. Its controller, execution record and participation journal must disappear without reopening.

   **Fix:** Add same-operation replacement/removal events. Require readiness for participating boxes and completed cleanup for excluded boxes, preserving the cleanup-before-clear and crash-persistence assertions.

2. **P2 — Task 2, Step 1: the hash-choice test does not assert the hash winner.** [`TestExecutorChooserSpreadsThenBalancesThenHashes`](/home/paulca/amadan.net/carlos/platform/.claude/worktrees/region-ha-1b-next/docs/superpowers/plans/2026-10-07-region-ha-1b-next-relocation.md:3071) accepts the first result and derives subsequent expectations from it. Passing a constant instead of `r.Holder.Host` to `boxchoice.Choose` would escape these assertions.

   **Fix:** Add equal-load cases with independently calculated winners for two hostnames choosing opposite boxes. Verify that substituting a constant hostname fails.

Rulings 1–27 are accepted. Stage B contracts remain complete. These are test findings, not demonstrated production failures.

All 12 embedded patches pass `git apply --check`; all 47 Go blocks parse with `gofmt`. Compilation, runtime tests and mutations were not independently reproduced in this read-only workspace.

---

**FIRST PROMPT:**
“Follow the review brief docs/superpowers/plans/CODEX-PLAN-REGION-HA-1BN-BRIEF-18.md. Review the plan at commit 15c43ac0.”

**WHAT:**
Review Stage A readiness and Stage B contracts.

**STATUS:**
Three prior findings resolved; two new P2 test gaps.

**NEEDED:**
Nothing.

**RECOMMENDED:**
Extend the lifecycle events and assert the hostname-based choice.

**SESSION:**
Safe to close — no files changed or processes left running.

**Verdict: not ready.**