Review round 2 (codex):
- R1: register_job reads .mam/reset-in-progress under the registry lock and
refuses while a reset of the workspace owning <ws>/.mam/jobs is live, so the
public registry.py register CLI and the API no longer bypass the gate. The
reset's precheck takes that lock once after publishing its marker, so a
registration is either seen by it or refused. The reset's own create passes
MAM_RESET_OWNER_PID; the remote runner refuses the dispatch.
- R2: before each purge the reset re-runs stop's revalidate check
(verify_session_uuid) for a post-discovered id against the row's folder and
skips the target (id not verified) when it does not verify.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>