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:
1 parent
f9c93c726a
commit
4f5eecc71b
1 file changed
+79
@@ -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.
|
||||
Reference in new issue
Block a user