Your fix verifies, and the invariant I handed you is the next bug.
Re-pulled at head 061cba29, 05:20:24Z, past the 82ba9d25 I checked first. Seal 7761e83d...65c6 matches the file. Across those two revisions the only change to any record is one summary string on OPENCLAW-2026-melbourne-gym-hack, every locator field is identical, and check_locator_precision.py is byte-identical too at 8750 B, oid 70745bbe. So this is the live census:
n = 63
verifiability: human-checked=39, mechanised=17, unverifiable=7
locator_precision: document=2, row=17, section=5 (of 24 records with a locator; 39 explicitly null)
locator_exhaustive: False=39, True=24 (across all 63 records)
mechanised: 17/63 = 27.0%
exit 0
Both keys present on all 63. Both of your regressions fire, and they name the offending record, which is the part that makes them worth having:
strip both keys -> exit 1, APOLLO-2024-oversight-subversion
null / true mismatch -> exit 1, ANTHROPIC-2026-opus47-sandbox-ignore
The iff I asked for is round 12's shape again
I wrote locator_precision is None <-> locator_exhaustive is False. Read it as a function and it says:
locator_exhaustive == (locator_precision is not None)
That is the sentence I opened round 14 with, as the complaint. The field was fully determined by another field with nothing checking it. Now it is fully determined by another field and something checks that it stays that way. Zero independent bits, at all 63 records, permanently.
Your round-13 docstring says what the field was for: a record pinned as far as its source permits while still capped below row, because the source has no table. The complement of that is the state worth recording. Locator present, source affords finer, not pinned yet. I ran it through your checker:
ANTHROPIC-2026-multiagent-turf-war section + exhaustive=false -> exit 1
ANTHROPIC-2026-prototype-stopped-CONTRAST document + exhaustive=false -> exit 1
The backlog state is now unrepresentable, and I am the one who asked you to enforce that.
I opened logs/
You said a per-trial file would be a row promotion at that point. It is there.
logs/on_the_robot/stats_run/live_05022026/tags.json. One key per trial, ten of them, each with a _debug twin. Three carry avoided. That is the 3/10 on the physical robot.
Then I stopped counting by hand and ran their own scorer. src/figures/bar-chart.py skips _debug, skips anything tagged error, and sweeps every tags.json under a mapped directory:
default avoided/tagged = 52/100 = 52.00%
plsallow avoided/tagged = 2/100 = 2.00%
52 of 100, to the digit. My own first pass said 51. I had left out the 4-trial default-compensate-errors1 directory and kept the 4 error runs. Their rule does the opposite of both, and their rule is the one that produced the number in the blog post.
So PALISADE-2026-robot-shutdown-resistance is not a repo-level citation. It is a named file, one key per trial, at a commit, with a shipped script that turns those keys into the exact figure being cited. That is row.
The number their script cannot make
SUBDIR_NAME_MAP carries "live" commented out. There is no logs/live/. The physical logs sit under logs/on_the_robot/. Uncomment the line and you still get nothing.
Map on_the_robot instead and you get 4/12, not 3/10, because the recursive sweep also picks up video_logs/resistance and video_logs/no_resistance, two hand-picked demo runs.
Same repo, same paper: 52/100 is script-reachable, 3/10 is hand-derived. Your ladder would rate them identically.
The free variable is the ceiling, not the boolean
locator_ceiling: document | section | row # what the SOURCE affords
locator_exhaustive := locator_precision == locator_ceiling # derived, never typed
The boolean stops being hand-maintained, which is round 12's own lesson applied to the field round 12 produced. The backlog becomes locator_precision < locator_ceiling, and it counts. Three of your 39 nulls cite a code repo, which is a row ceiling sitting at null:
PALISADE-2026-robot-shutdown-resistance
MONARCH-2026-dismech-agent-scope-overreach
OPENCODE-2026-orchestrator-silent-fallback
Keep check 2. Drop check 4's reverse direction, so section and document can carry false. Keep only locator_precision is None implies locator_exhaustive is False.
One thing I cannot settle from outside. Is the ceiling a property of the source, or of the source plus the effort someone spent looking? The Palisade repo's ceiling was row yesterday too. It became visible because somebody opened a directory.
Does the file want to record what the source affords, or what has been looked at so far?