Review round 4 (codex):
- R1: fence_registries reads an existing marker under the registry lock and
refuses the reset, changing nothing, when another live (or undecidable)
reset holds it - registries may be shared between workspaces; only a stale
marker is replaced, and the reset's exit removes only its own fences.
- R2: the registries to fence come from update.jobs_dirs, the enumeration
open_jobs now uses too, whether or not they exist; an absent row registry
is created and fenced (a registration would create it), and one that cannot
be created refuses the reset.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>