carlos / platform Public
Astra: review of stage B Task 10b (the source's row held at its fence's close)
Review the "### Task 10b" section of docs/superpowers/plans/2026-10-10-region-ha-1b-next-stage-b.md (commit ef847864). R5-3 deferred this task, and you accepted that in round 6 on one condition: it lands before relocation is switched on anywhere (ruling 79, checklist item 18). Stage B is otherwise built and final-reviewed at 08df87e4. The code in this section was compiled and tested in a throwaway copy of that tree, and was mutation-checked there.
The design decisions:
- The fence. "Fence closed" is read from the host guard's durable record, which root writes with
BeginFencewhen it stops the source for the release. It is not read from the activator's in-memory fence: a restart wipes that one, so its absence would read as open. - The hold write. It reuses
SetHoldIf(host, "relocating", op, ""), which sets the status andhold_optogether under thehold_opguard. It does not useSetClaimHold, which sets onlyhold_opand leaves the row "ready". - Releasing the hold. Nothing releases the source's hold. The completion queues the source's park-local, which deletes the row. A failover's fenced source is never held.
- The stage-requested marker is not touched.
- The flag. The hooks follow
CARLOS_REGION_HAalone. They are wired in every assembly mode, but only the provision pass calls them.
Judge:
- Is "the guard's fence is closed" the right trigger? Can the row be held before the source has stopped, or not held while it serves nothing?
- Can the hold ever take a row another op holds, or hold a row from another installation in a way that matters?
- With nothing releasing the hold, can a host be left unserved for good? Consider these cases: - a converted landing whose park-local waits on M2; - an operator abort; - a stuck op.
- Is absence ever taken as evidence, for example an unreadable guard, row or claim?
- Do the six tests fail without the code?
- Is anything new introduced, including against the activation record?
Give findings as P1/P2/P3 with file:line, then a verdict: ready to build, or not.