The fill for Run 21 (content at 258e3ad). Read back over the anonymous raw path at
revision 258e3ad by /root/crucible/q54/readback_q54.py (artifact out/Q54-READBACK.txt,
398 B, mtime 2026-10-13 23:04:19.489552154Z, host-local): record 200 / 34,311 /
4ba00ce427b85079adedf34524c8334a92e949b205efcc682c8cdd47a99a1cd7, queue 200 / 935,526 /
c5316986a532ce2ba4c479e89b0a4839c7bcd6e6c613d859511616b9fb7323e0, check-in 200 / 94,099 /
1da711a046950f73979bfaa52fe04479c76cbd573ba1421c937d3f53dd8d4ba7 -- all three
served = disk = git, all newline-terminated, ALL ROWS EQUAL.
Clock correction, appended not edited in place: the Run-21 blocks cite "~21:2xZ",
which no instrument supports. The Run-21 content commit 258e3ad was made at
2026-10-13T23:03:50Z (git log -1 --format=%cI) and the readback artifact at
23:04:19.489552154Z. The cite was assumed from reply 42's 21:07Z timestamp rather than
measured -- the same defect class as reply 42 section 1, reproduced by this run's own
Screen line and corrected here.
Live and deployed unchanged across the whole run: snapshot 14,039 B / aa842b0fd880 /
mtime_ns 1791479579475780303; held pin 120 B / 5b6d70716153 / mtime_ns
1791478687099553071; deployed bin ee0b36a8 / 5c67473d / 7ed1bca8 / 12570786 / 73869998
with grep -c HELM_COLLECTOR = 0 on the gate (Q40 stands, nothing of Q31-Q45s9 in
production); disk 45 G avail of 154; worktree clean.
Read-only run: no gate invocation, no live write, no deployment, no edit to another
party's file, decisions/ and inbox/ untouched, no secret printed.
The three sentences replies/2026-10-13-to-merlin-42.md (1b16385) returned against
Run 20's closing note, each re-measured from git with a non-stripping reader
(measure2.py) and cross-checked with sha256sum:
1. Both readback clocks were wrong: readback.py ran at 20:45:43.513552892Z (not
~21:0xZ) and readback_final.py at 20:52:18.142200548Z (not ~21:2xZ); cfae76a
was committed 20:51:49Z, 29.1 s before readback_final.py existed, so the
closing note cites a readback that postdates its commit. The note's table is
sound (cf07003 digests); the clock sentences and the readback description are
the defect.
2. Row 3's equality: the per-revision census shows record and queue byte-identical
across cf07003->cfae76a (34,311 / 4ba00ce4, 927,009 / 7754184c, both 0x0a);
the check-in is 83,854 / 4306bc50 at cf07003 and 85,869 / a1f3ad72 at cfae76a,
which is what disk and branch/main serve. The table row is right; the sentence
above it needs the per-row revision.
3. Three of three, confirmed: at 7673477 all three files end 0x29 (31,219 /
925,786 / 82,262); dc3c2f7 terminated queue+check-in, cf07003 the record
(+22/-1 on the record alone), cfae76a the check-in's closing note (+33).
4. The queue close block's undated 927,009 is cf07003's reading; the queue at HEAD
1b16385 is 933,092 / 114d937e.
Own defect logged first: the take-1 instrument (measure_r42.py) .strip()ed its
captures, so its digests were computed over stripped content; measure2.py is the
authority and the record is sound.
Queue hygiene appended: four "open and unclaimed" status lines name closed items
(Q21, the Q13 fix pack, Q49, Q51); the DONE blocks below them govern.
Read-only run: no gate invocation, no live write, no deployment, no edit to
another party's file, decisions/ and inbox/ untouched, no secret printed.
Live and deployed unchanged: snapshot aa842b0f / 14,039, pin 5b6d7071 / 120,
HELM_COLLECTOR 0 in every deployed file, disk 45 G of 154.
E17's own clause is false: at 7673477 all three files (check-in included) end 0x29,
unterminated, and the 16/0+132/0 numstat it cites as clean cannot see a no-newline
transition, so the assertion must be on the written file. E11's tree row is mis-dated:
its 15-in-6 is aa3a806, HEAD is 18, and its per-file 3/2/2 matches no revision in
068ac5f..HEAD. E11's scratch-file clock is 16:06-16:08Z, not 16:06-16:07Z. Mine first:
126 check( is reply 38's 126 check(" registrations; the bare string occurs 132 times.
Everything else re-derives -- E10 :1162, E11 9-in-8 and 0 in out/ with the matrix rows
corroborating the direction, E12's 18:30:31.084749Z + 160.699s, E13 244/0/50 + raw 404
against 200 rows, E14's 26 sandboxes in exact distribution, E15's gate/twin/cites/matrix/
dis-check 174-2, live 14,039/aa842b0f and pin 120/5b6d7071 at delta 0, HELM_COLLECTOR 0
Names the three commits that carry this unit (7673477 corrections +307/-0, dc3c2f7
landing evidence and E17 +76/-2, cf07003 E18 +22/-1) and the final readback at
cf07003: all three rows HTTP 200 and served = disk = git cat-file -p cf07003:<path>,
each newline-terminated -- record 34,311 B / 4ba00ce427b85079..., queue 927,009 B /
7754184c5368..., check-in 83,854 B / 4306bc5035ed... The record's digest is the same
value E18 carries, so the two rows agree rather than one chasing the other; the check-in's
own row is dated at cf07003, the revision before this append, and is not restated.
out/ artifacts (Q53-MEASUREMENTS.json, Q53-READBACK.txt, Q53-READBACK-FINAL.txt) are
host-local and not forge-verifiable -- 0 paths under out/ in the tree, raw path 404 --
E13's rule applied to this run's own artifacts.
Nothing deployed, no cp into /root/.helm/bin/, decisions/ and inbox/ untouched, no
another-party file edited, no secret printed. Live state delta 0 across every measurement:
snapshot 14,039 B / aa842b0fd88037f8... / mtime_ns 1791479579475780303 / ctime_ns
1791907371554631194; held pin 120 B / 5b6d70716153c3f4... / mtime_ns
1791478687099553071 / ctime_ns 1791907371554631194. Deployed bin untouched
(ee0b36a82f23, 5c67473d8928, 7ed1bca8f9da, 12570786ba70, 738699986778), HELM_COLLECTOR
count 0 -- Q40 stands, so none of Q31-Q45s9 is in production. df -h / -> 46 G avail of
154, 71 % used. Sandbox census in the q53 tree 0; E14 records the 26 elsewhere under
/root/crucible.
Found by readback_final.py's per-row trailing-newline flag, not by inspection: at
dc3c2f7 the queue and the check-in both read True and the record read False, because
fix_newline.py's own E17 literal ends with the signature and no newline -- so the append
written to log the defect re-introduced it on the record. Fixed by writing one newline
byte; no line of content moved. Record 33,064 B / cfb71db33761... -> 34,311 B /
4ba00ce427b85079adedf34524c8334a92e949b205efcc682c8cdd47a99a1cd7, +22/-1 (the -1 is the
newline E17 itself dropped).
The lesson is stronger than E17's rule and is stated in E18: a trailing newline is not a
property you get from writing head + sep + tail + addition, because the ADDITION has to
end with one. The assertion belongs on the written file -- assert the bytes end with a
newline after every append, or print the flag per readback row -- not on the helper's
intent. Both instances are measured in E18 and neither is deleted.
Nothing deployed, no cp into /root/.helm/bin/, decisions/ and inbox/ untouched, no
another-party file edited, no secret printed. Live state unchanged: snapshot 14,039 B /
aa842b0fd88037f8... / mtime_ns 1791479579475780303, held pin 120 B / 5b6d70716153c3f4...
/ mtime_ns 1791478687099553071, ctime_ns 1791907371554631194 on both; deployed bin
untouched, HELM_COLLECTOR count 0.
Landing evidence for Run 20, read back over the anonymous raw path at ~21:0xZ,
instrument /root/crucible/q53/readback.py. All three rows HTTP 200, served = disk =
git cat-file -p 7673477:<path>:
recoveries/helm-home-channel-guard.md 31,219 B / 0f8b7f1617a67f5e8308e85b837e3256d74949080750dbabacc0f09f106464fa
WORK-QUEUE.md 925,786 B / 78feb8441d8f01183c5f57c7248366400d7f5d5720bf3b8a10d12c37b73a2c11
checkins/2026-10-13-merlin.md 82,262 B / 9db0834471415e3a6a4d1844910a8f21d3a558305b9a69ea08785b8ec0bcda94
The check-in row is that file at 7673477, before this append -- a file cannot cite its
own post-append digest, so the row is dated rather than chased. out/Q53-MEASUREMENTS.json
and out/Q53-READBACK.txt are host-local and not forge-verifiable: 0 paths under out/ in
the tree at 7673477, raw path 404 -- E13's own rule applied to this run's artifacts.
E17, found on my own tool before this commit: q53/append.py's append_last() wrote
head + sep + addition and never wrote tail back, and tail was the file's single trailing
newline, so the record, the queue and the check-in each lost it. Measured by
git diff --numstat: the Run-20 append read 16/0 on the queue and 159/0 on the record
(clean), then 19/1 and 28/1 once the landing appends ran -- the 1 in each being the
dropped newline, not a content edit. Restored by writing one newline byte to each file
(WORK-QUEUE.md 927,008 -> 927,009 B; the check-in 83,853 -> 83,854 B); no line of
content moved. It matters beyond hygiene because this lane's readback discipline compares
served = disk = git cat-file byte for byte, so a lost trailing newline is a real delta an
outside reader would have to explain. The rule: write head + sep + tail + addition, and
assert tail is whitespace-only before dropping it -- the count(anchor) == 1 discipline
extended to the tail.
Nothing deployed, no cp into /root/.helm/bin/, decisions/ and inbox/ untouched, no
another-party file edited, no secret printed. Live state unchanged: snapshot 14,039 B /
aa842b0fd88037f8... / mtime_ns 1791479579475780303, held pin 120 B / 5b6d70716153c3f4...
/ mtime_ns 1791478687099553071, ctime_ns 1791907371554631194 on both; deployed bin
untouched, HELM_COLLECTOR count 0 -- Q40 stands, so none of Q31-Q45s9 is in production.
Append-only: E10-E16 in recoveries/helm-home-channel-guard.md (21,230 B /
953ea1a14c5fa49b... -> 31,219 B / 0f8b7f1617a67f5e..., +159/-0) and a Run-20 block in
WORK-QUEUE.md (919,333 B / c5fa27ea61cf43de... -> 925,786 B / 78feb8441d8f01183...,
+16/-0). Scratch tree /root/crucible/q53/; read-only, no gate invocation, no live write,
nothing deployed, no cp into /root/.helm/bin/, decisions/ and inbox/ untouched, no
another-party file edited, no secret printed.
Measured this run, not accepted:
- E10 (reply 38 s1, upheld): E4's legs-caller row said :1160; grep -n
'_q50_rebuild_env(' helm-selftest-q52.py gives :815 def, :977 probe caller, :1162 legs
caller. :1160/:1161 are the two comment lines above it -- a comment read as code. The
record's own s2 cite was right; the erratum's cell was the defect.
- E11 (reply 38 s2 / reply 39 s0, restated scoped and dated): the command as written,
grep -rn 'caff1f504855264a' /root/crucible/q52/, returns 9 lines in 8 files at 20:5xZ
(run19_append_record.py 2, the other seven 1 each); out/ returns 0 (rc 1); the repo
tree at HEAD returns 15 lines in 6 files. The 3 is a Run-18-era reading of the three
scratch prose files it names, 1 each, stale because Run 19's own five scripts quote the
string. Finding unchanged: the figure stays unverified; direction Corroborated by
out/Q52-MATRIX.json's two guard_restored rows with final_live_delta {}.
- E12 (reply 40 s2): the landing block's readback clock is 18:30:31Z, not 18:31:0xZ.
out/Q45S9-RUN19-READBACK.json (1,686 B / ccec083ce40f...) records read_at
2026-10-13T18:30:31.084749+00:00, revision 068ac5f, epoch 1791916231.084749. A +/-360 s
band census reproduces the pipe's supporting measurement to the millisecond: next
write after the read is run19_append_landing.py at +160.699 s = 18:33:11.78Z.
- E13 (reply 40 s3): the readback artifact is host-local, not forge-verifiable --
git ls-tree -r --name-only HEAD gives 244 paths, 0 under out/, no worktree out/, and
the anonymous raw path returns HTTP 404 (11 bytes). Stated as a property of the lane:
every out/*.json across Q31-Q45s9 is host-local.
Two findings of my own, from re-reading rather than from being told:
- E14: the sandbox census is tree-scoped. E7's "both ways -> [] / []" is true of the q52
tree; the recursive census over /root/crucible is 26 -- 19 helm-legs-* (q43 x1,
q43/variants x2, q43z/variants x1, q44 x2, q45/variants x13) and 7 helm-q39-* (q48).
The skill's own logged lesson applied to my own record.
- A sixth line-citation defect: E4's --q52-witness row puts the section comment at
:1261; grep -n gives :1262 (comment) and :1270 (flag test).
E15 re-derives, measured not accepted: gate 78b290ecf2d93e0c... 140,365 B / 2,677 lines
/ 126 check(; disarmed twin be7b306a... 140,390 B; _q52_home_sites :758;
_q50_rebuild_env :815; probe caller :977; check("Q52", ...) :1205;
out/Q52-MATRIX.json 12,308 B / 75bd624e... at 2026-10-13T16:02:51+0000;
out/q52-dis-check.out 191 lines, 174 passed / 2 failed, FAILs at :186 (Q52
home-redirect) and :187 (Q45 module-constant, HELM_HOME /root/.helm and HELD_DIR
/root/.helm/data/held escaping the cut redirect) -- E3 re-derives exactly.
Live delta 0 on bytes/sha256/mtime_ns across every measurement: snapshot 14,039 B /
aa842b0fd88037f8... / mtime_ns 1791479579475780303 / ctime_ns 1791907371554631194; held
pin 120 B / 5b6d70716153c3f4... / mtime_ns 1791478687099553071 / ctime_ns
1791907371554631194, still Run 18's restore trace. Deployed /root/.helm/bin/ untouched
(ee0b36a82f23, 5c67473d8928, 7ed1bca8f9da, 12570786ba70, 738699986778), HELM_COLLECTOR
count 0 -- Q40 stands, so none of Q31-Q45s9 is in production. df -h / -> 46 G avail of
154, 71 % used.
Standing and still human-gated, unchanged: the s4 adoption cp of collector 4e45021d... +
gate 78b290ecf2d93e0cc3087e5ede8baef5c10ca52986706d5da69a13a619dbdd9f; the manifest_match
pin stale since 2026-10-08; Q13's publication call; Q9's checksum handover; Q19's
onboarding. No new item opened: Q42 is zephyrus's, Q52 is Mercury's, Q53 is Alexander's,
so the Helm lane's executable set is empty again and its next unit is a decision, not a
task.
Readback of the three landed files at 068ac5f, as its own commit: all three HTTP 200,
served = disk = git cat-file -p HEAD:<path>.
- recoveries/helm-home-channel-guard.md 21,230 B / 953ea1a14c5fa49b6d2d8e0d8324a8ac9d739ca4c39695646a5c05ae9cbf37fb
- WORK-QUEUE.md 909,662 B / 83b62e9d55180c38a12d9c26b8abea2661f033b448745599250fcba8a181a6fc
- checkins/2026-10-13-merlin.md 73,547 B / 43fb28e1fe92f587ce5cfa24fda8461a800b10239f63bd699672c35b21f1b19d
Instrument /root/crucible/q52/run19_readback.py, artifact out/Q45S9-RUN19-READBACK.json
(1,686 B / ccec083ce40f53242ab469f96529d9047eb525047891bedd4b492256fa45b39d), which names
the revision it was read at. This block was written against the queue at 909,662 B /
83b62e9d... and does not cite its own post-append digest.
Live state at readback time: snapshot 14,039 B / aa842b0fd88037f8... / mtime_ns
1791479579475780303, held pin 120 B / 5b6d70716153c3f4... / mtime_ns 1791478687099553071,
ctime 1791907371554631194 on both; deployed /root/.helm/bin/ untouched, HELM_COLLECTOR
count 0. Nothing deployed, no another-party file edited, no secret printed.
Taken on replies/2026-10-13-to-merlin-37.md section 2, which left five corrections open
on this lane's own file. Nothing above the appended sections was edited; three appends
only, 312 insertions / 0 deletions.
- The label collision is closed by renaming in prose: the item is Q45s9 (the queue's own
section id, and the wording the c559d33 commit subject already carries), not Q52, which
is Mercury's item at WORK-QUEUE.md:7167. The gate's internal check("Q52") registration
and _q52_* helpers are deliberately not renamed -- renaming changes the gate's digest
and would invalidate the byte-level verification reply 37 performed against it.
- The gate digest, measured in full: sha256sum /root/crucible/q52/helm-selftest-q52.py ->
78b290ecf2d93e0cc3087e5ede8baef5c10ca52986706d5da69a13a619dbdd9f (64 hex, 140,365 B /
2,677 lines / 126 registrations). The c559d33 commit subject carries a 63-character
value, one c dropped at index 16; a commit message cannot be edited, so the correction
lives in the record and the queue. The section-4 adoption cite is the 64-character value.
- The disarmed row's transient pin figure is unverified: grep -rn 'caff1f504855264a'
over the scratch tree returns 3 hits, all this lane's prose, 0 in out/; the same for
1791907100434371499. out/Q52-MATRIX.json (12,308 B / 75bd624ef25c5667...) records
10d12a7d20c5f0ac... / 1791907358370548372 for that row and 576a47723957844e... /
1791907371509627497 for the raw row, both guard_restored true. Direction Corroborated,
cited figure unverified.
- The readback pairing is stated: out/Q52-READBACK.json carries revision 6954cc6 and its
check-in row 67,347 B / 912985e3..., against the record's landing table's 65,145 B /
d89b2189... at c559d33 -- both true, the revision field is the pairing.
- Four line citations corrected by grep -n in the shipped gate (_q52_home_sites :786 -> :758,
legs' _q50_rebuild_env caller :1162 -> :1160, check("Q52") :1204 -> :1205, --q52-witness
flag test :1270), and the q52-dis-check row's second failing check named
(out/q52-dis-check.out:187, FAIL Q45 ... HELM_HOME: /root/.helm).
- "Delta 0 across all 21 invocations" is restated as net zero with two disclosed
transient movements: exactly two of five matrix rows carry a non-empty guard_live_delta
with guard_restored true, and final_live_delta is {}.
Artifacts: recoveries/helm-home-channel-guard.md 21,230 B / 953ea1a14c5fa49b6d2d8e0d8324a8ac9d739ca4c39695646a5c05ae9cbf37fb;
WORK-QUEUE.md 909,662 B / 83b62e9d55180c38a12d9c26b8abea2661f033b448745599250fcba8a181a6fc;
checkins/2026-10-13-merlin.md 73,547 B / 43fb28e1fe92f587ce5cfa24fda8461a800b10239f63bd699672c35b21f1b19d.
Live state re-measured 2026-10-13T18:18:06Z, delta 0: snapshot 14,039 B / aa842b0fd88037f8...
/ mtime_ns 1791479579475780303; held pin 120 B / 5b6d70716153c3f4... / mtime_ns
1791478687099553071; ctime 1791907371554631194 on both, unmoved since Run 18. Deployed
/root/.helm/bin/ untouched (ee0b36a8 / 7ed1bca8 / 5c67473d / 12570786 / 73869998),
grep -c HELM_COLLECTOR = 0 -- Q40 stands. No gate invocation, no live write, no cp, no
another-party file edited, decisions/ and inbox/ untouched, no secret printed.
The last runtime-resolution route in Q45 s7-limit-1's family with neither a literal nor an ast-visible env read: HELM_HOME = Path.home() / ".helm" composes the live root because CPython's posixpath.expanduser reads HOME itself. The channel is live in the shipped subject -- the real collector calls Path.home() twice (its himalaya search). Mechanism: an ast inventory of home-database reads (_q52_home_sites, :786) and, inside Q50's one rebuild function (two callers, probe :977 / legs :1162), a redirect of HOME + USERPROFILE to <target>/q52-home -- a redirect, not a refusal -- with a conditional Q52 NOTE and one new check("Q52", :1204). A --q52-witness extra flag (:1261) runs the copy with --deploy --pin --skip-tests --out <sandbox dest>, the pin shape the suite itself refuses (Q44's rule), because the class's write path is unreachable from the green run.
Measured: green 5/5 at 176 passed / 0 failed (= 175 + 1), 14,044 B stdout, live delta {}; the real collector's own .home() read makes the check non-vacuous. Discriminator, five cells under the digest-verified guard: armed x collector-home.py (d62888c4) -- the copy resolves inside the sandbox and the pin lands at q52-home/.helm/data/held/stackchain-home.html.sha256 in the sandbox, live delta 0; armed x collector-expanduser.py (99c49d39) -- same; disarmed x home -- HOME stays /root, the copy resolves HELM_HOME=/root/.helm and the live pin moves to sha256 caff1f504855264a / mtime_ns 1791907100434371499, restored byte-exact; disarmed without the witness flag -- the foot's own check fails (FAIL Q52, home_reads=['.home()'] HOME='/root', 174 passed / 2 failed); direct invocation, ambient env -- the live pin moves (the class's floor). Regressions 11/11 hold; live delta 0 on bytes/sha256/mtime across all 21 invocations (snapshot 14,039 B / aa842b0f, held pin 120 B / 5b6d7071); ctime moved on both objects (1791907371554631194), the guard restores of the two deliberately-live rows -- disclosed. Final tree 0 sandboxes; deployed /root/.helm/bin untouched (7ed1bca8, grep -c HELM_COLLECTOR = 0 -- Q40 stands, so none of Q31-Q52 is in production); disk 46 GiB free of 154.
Five defects of mine logged first in the deliverable: the witness's missing local subprocess import; the witness anchored before the leg copy was written; the witness's live census reading the held directory (IsADirectoryError); the NOTE claiming a redirect that had not fired (the disarmed twin's own FAIL contradicted it -- the NOTE is now derived from the actual env); and the first matrix measuring nothing because the real collector pins only under --pin, which the suite refuses. Limits stated as the item's own: the original-subject legs inherit the ambient environment (Q48's residual); pwd.getpwuid().pw_dir bypasses HOME (the inventory names it, the redirect cannot relocate it); the inventory is static (Q46's limit).
Files: recoveries/helm-home-channel-guard.md (13,173 B / sha256 3f813ca23202590c675f7ac7587f0d5e7d8b0ff9ee9f4f0711996530a2d6d7db), WORK-QUEUE.md (897,771 B), checkins/2026-10-13-merlin.md (Run 18). Scratch tree /root/crucible/q52/ not committed. No deployment, decisions/ and inbox/ untouched, no another-party file edited, no secret printed. The Helm lane's executable set is empty again; the adoption cp (collector 4e45021d + gate 78b290ec, superseding e4967da9) remains Alexander's.
The ordering defect the class hid behind, closed: the run-wide held census
(_q44_held_before) was read ~470 lines after the admission probe spawn, so the
run-wide instrument structurally could not see a probe write. Measured on the
base gate first (Q44 PASS while the guard reports the live pin MOVED), then
fixed by a pure move of the census machinery above the probe branch.
Gate e4967da9bdc4537802993523c7044a762a9a6366576df4e4234444789310107e
(134,427 B / 2,558 lines / 125 registrations) on the Q50 gate a951dbe8...
diff = 2 hunks + 33 added - 27 removed; 2552 + 33 - 27 = 2558 exactly.
Disarmed twin b1d96976... (134,378 / 2,557 / 125).
Cells: armed x named 166/9 with Q44 PASS and Q50 PASS, delta {} on both
objects; disarmed x named 164/11 with Q44 FAIL and Q50 FAIL, the run-wide
check naming the moved held pin and failing on ctime alone after the window
detector's byte-exact restore. Green pair 5/5 at 175/0, 13,929 B. Regressions
11/11 (latin1 and bom green at 13,929 B). Live delta 0 on bytes/sha256/mtime
across all 32 invocations; ctime movement disclosed; 0 sandboxes.
Still open: Merlin's Q45 s9 follow-on (runtime path resolution) and the s4
adoption cp (collector 4e45021d + gate e4967da9), the manifest_match pin, and
the Q13 publication call -- all Alexander's.
Nothing deployed; decisions/ and inbox/ untouched; no another-party file
edited; no secret printed.
Taken on the pipe's own offer (reply 34, asks 1). The Q48 value-redirect and Q49
default-redirect are factored into _q50_rebuild_env(_target) and called twice: at the
rule's original site for the legs (target the legs' sandbox) and above the admission
probe's spawn for the probe (target the probe's own tree, which exists before the
spawn -- the legs' sandbox does not). The spawn now carries env=, and a per-window
census of both live objects around the spawn is the class's detector: a move is
restored byte-exact in-gate, recorded, printed as a dated Q50 DETECTOR note, and
fails the named check "Q50 the admission probe's spawn moved neither live object".
Measured, all five matrix cells under a digest-verified guard (subject env-root-v1.py):
base-q49 x named MOVED held pin 120 B / 5b6d7071... -> 14 B / 784b9bde..., guard-restored
q50-armed x unset delta 0 0 value + 1 default redirect
q50-armed x named delta 0 1 value redirect -- the blank cell, filled
q50-dis x unset delta 0 the probe copy's own Q45 literal relocation covers the
default shape; the redirect is load-bearing only in the named cell
q50-dis x named delta 0 the DETECTOR fires: pin moves inside the gate, restored
byte-exact, foot prints FAIL Q50 (165/10 vs armed 166/9)
Green 5 x rc 0 / 175 passed / 0 failed (174 + 1) / 13,929 B / live delta 0.
Regressions 11/11 hold (n1-n5, noparse, dep-unparseable, undecodable, broken_dep rc 2;
latin1 and bom green 175/0). Live objects byte-identical to session start on
(bytes, sha256, mtime_ns); deployed bin untouched (ee0b36a8... / 7ed1bca8...,
HELM_COLLECTOR count 0 -- Q40's finding stands). Named follow-on, not fixed here:
hoist the run-wide held census above the probe. Three harness defects of mine logged
first in the record. Nothing deployed; no another-party file edited; no secret.