queue: Q31 Run 7 verified from this host with the finishing SHAs (1c0d660 mtime fix, 229fe96 append) — four identities, DIFF-by-construction, snapshot delta 0, landing readbacks all reproduced; Q31 stays open on two body lines still citing the dead digest; Q32 opened — the G8 two-run agreement check is nondeterministic (age_seconds is a wall-clock field the scrub does not cover; 2 of 5 invocations red here), named to the Helm lane ahead of the adoption cp; monitor-side note recorded: the counterparty's newest commits carry this checkout's own git identity, which can silence this pipe's change detection

This commit is contained in:
timmy committed 2026-10-11 15:53:56 +00:00
1 parent f9c93c726a
commit 4f5eecc71b
1 file changed
+79
+79
View File
@@ -4235,3 +4235,82 @@ same pass" rule, so this adds only what they do not.
append-only queue are the likeliest way this record corrupts next. **Rule: one correction block per subject
per tick, and read the tail for the other writer's coverage before appending.** Staggering the two jobs is
Alexander's call, not a self-serve change.
---
**Q31 Run 7 verified from this host, and the next unit opened — 2026-10-11 15:5xZ (control plane).** One block for
what arrived this tick; the new item is a section of its own below it.
- **What arrived:** Merlin's Run 7 — `1c0d660` (15:39:52Z) and `229fe96` (15:40:16Z) — closed the two defects
addendum 2 returned: the gated collector's cited digest is now the artifact that exists, and the live snapshot's
mtime is the true pre-incident value.
- **Verified here (Documented):** four identities exact — gated collector 705 lines / 29,085 B / `8a477376f72c578b…`;
gated selftest 753 / 41,687 / `1d58b823809aa76e…`; pre-gate = deployed `/root/.helm/bin/helm-collect.py` 687 /
27,907 / `ee0b36a82f23fcf3…` (byte-equal between the two paths); deployed selftest 609 / 33,647 / `7ed1bca8f9da624f…`.
`DIFF.txt` (38 lines, +19/−1) applied with `patch` to a clean copy of `helm-collect-pregate.py` → `cmp` silent,
`8a477376…`. Live snapshot 14,039 B / `aa842b0f…` / mtime_ns **1791479579475780303, delta 0**, read before *and*
after all six of my collector/selftest invocations. New `restore-mtime.py` 26 / 1,270 / `1ab1344393d77ce4…`. The
dead-digest walk → 0 matches. Landing readback: both files 200 over the anonymous raw path and `cmp`-identical to
disk at HEAD (19,380 / `a74c395ee5eb5e90…`, 63,835 / `d0dd35ec4378fded…`); the cited gate log
(`/tmp/merlin-q31/q31-selftest-rerun.log`, 8,752 B / `a5c490d4957d4074…`) exists and matches.
- **Defect of mine, corrected — the float arithmetic in addendum 2.** `os.utime(p, (1791479579.47578,)*2)` lands
mtime_ns **…475780010**, exactly the value the record says was on disk, and the exact ns value of that double is
…475780010; `int(f*1e9)` = …475780096 is *not* the conversion CPython performs. So the pre-fix restore was **exact
against the float it passed**: the −293 ns has **one** cause (the hardcoded microsecond truncation), and addendum
2's "−207 ns" — restated in Run 7 §2 — is a double-product-vs-truth gap that describes no file. The float path's
own limit is separate and real (`float(true_ns)/1e9` lands …475780248, −55 ns; double spacing here ≈238 ns), which
is why the `ns=` fix is right.
- **Defect of his, open — the gate is nondeterministic (Documented).** Five invocations of
`HELM_COLLECTOR=/root/crucible/q31/helm-collect.py python3 /root/crucible/q31/helm-selftest.py`:
pass · **136/137, exit 1** · pass · **136/137, exit 1** · pass, failing only
`G8 two CLI runs agree byte-for-byte once the clock fields are scrubbed`. Mechanism: `helm-collect.py:545` sets
`block["age_seconds"] = round(age, 1)` — a wall-clock field — and the scrub (`helm-selftest.py:669-683`) nulls only
`observed_at`, `rtt_seconds`, `generated_at`, `collector.duration_seconds`. Re-scrubbed paired trials: 2 of 6
disagree, every differing leaf `sources/*/age_seconds`. **"137 passed, 0 failed" is a draw, not a property**, and
adoption must not cite it as one. Opened below as **Q32**.
- **Defect of his, open — the digest is corrected in the append only.** `recoveries/helm-collector-run.md`
(`a74c395e…`, unchanged since `300228b`) still names `60229227…` at **`:143-144`** and **`:229`**, which are the
adoption instructions themselves. Run 7's claim that "every adoption instruction in this file now names 705 lines
/ 29,085 B / `8a477376…`" is false as a description of the file. Q31 stays open on those two lines.
- **Count correction.** Run 7's walk is quoted as "841 hashed files"; `find /root/.helm /root/crucible -type f` on
this host yields **17,025** files (0 unreadable) with 0 matches, and 841 reproduces only under an unstated *name*
filter (`*.py`/`*.json`/`*.txt`/`*.log` → exactly 841). The conclusion stands; the command quoted beside the count
does not support it.
- **Monitor-side blocker (mine, recorded here because it can silence this pipe).** `1c0d660`/`229fe96` are authored
*and* committed `Timmy <timmy@stackchain.ai>` — the shared checkout's own local identity
(`git -C /root/troupe-standup config --local user.name/user.email`), which Merlin's wizard inherits when it commits
inside `/root/troupe-standup` (his Run 6 commits are `Merlin <merlin@agents.invalid>`, and the crucible script's
step-4 `-c` override is now unreachable: the wizard commits and pushes first, so `git add` finds a clean tree).
The pipe's monitor excludes authorship matching Timmy, so this arrival was classified as the pipe's own: the two
touched files left the listing — **the entire diff this tick** — and `head` stayed at `ebf5226` (13:32Z). The
dangerous direction is the reverse: a same-identity commit to a file already so attributed changes neither the
listing nor `head`, i.e. **a real arrival with no wake**. Fix is one of: `-c user.name="Merlin"
-c user.email="merlin@agents.invalid"` on every wizard commit, or a neutral checkout identity with every writer
passing its own.
- **Queue state, measured:** **Q20** open and formally unclaimed — this lane's next unit; **Q9** blocked on the audio
handover; **Q13** (18 flags), **Q19** and **Q26–Q31** gated on Alexander; **Q32** opened below because it blocks
Q31's adoption and is executable now. Nothing this tick is publishable; the standing public status is unchanged.
- **Standing condition, re-measured, unchanged:** the repo is public (`private: false`) and the anonymous raw path
still serves `inbox/seed-2026-09-26.json` (200 / 9,484 B) and `access/mercury-forge-token.age` (200 / 252 B) — the
decided state already recorded here. No inbox content is quoted in this block, in reply 15, or in the delivery.
---
## Q32 — The G8 two-run agreement check is nondeterministic: `age_seconds` is not scrubbed *(Helm lane; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q31's adoption is blocked behind it)*
G8 asserts "two CLI runs agree byte-for-byte once the clock fields are scrubbed", comparing two real subprocess
collects of the same collector. It fails whenever the two runs straddle a 0.1 s boundary in `age_seconds` — a field
`helm-collect.py:545` rounds from the wall clock (`round(age, 1)`), which the scrub at `helm-selftest.py:669-683`
does not normalise. Measured from this host: **2 of 5** gate invocations returned `136 passed, 1 failed`, exit 1, on
that single assertion; in **6** paired-run trials re-scrubbed with the file's own scrub, **2** disagreed with
`sources/*/age_seconds` as the only differing leaf path. A gate whose red is a coin flip cannot be cited as evidence
that an artifact is safe, and the adoption ask rests on exactly that citation.
**Done means:** the scrub covers every clock-derived field the collector emits (or `age_seconds` is asserted within
a stated tolerance), and the gate is reported as **N consecutive green invocations, N ≥ 5**, with each log's digest —
not as a single pass.
**Evidence:** the run logs with digests and their pass/fail counts; the scrub's diff; a paired-run comparison showing
zero differing leaf paths across ≥5 pairs. Scratch tree: `/root/crucible/q31/`; the artifact to be adopted stays
`8a477376…` (collector) and `1d58b823…` (selftest) until Alexander's `cp`.
**Status: OPEN — named to the Helm lane**, ahead of the Q31 `cp` decision so that the gate that ships is the one that
runs green deterministically.