Skip to content

M5: the surviving rows, deviations 3 and 4, and an appendix that records what was seen - #425

Merged
MongLong0214 merged 3 commits into
devfrom
bench-m5-rerun
Aug 7, 2026
Merged

M5: the surviving rows, deviations 3 and 4, and an appendix that records what was seen#425
MongLong0214 merged 3 commits into
devfrom
bench-m5-rerun

Conversation

@MongLong0214

Copy link
Copy Markdown
Owner

The M5 data branch. Not a code change — bench/ only.

What is here

  • The 760 surviving rows from the original run (seeds 21–58), committed so they cannot be lost again. The run log is committed beside them, with its scratchpad paths redacted.
  • Deviation 3 — 400 completed rows existed only in a session scratchpad under the system temp directory and were reaped. Seeds 1–20 are being re-run against the pinned harness 788a9db, whose committed dist/ reproduces the recorded digest exactly (verified before launch, not asserted).
  • Deviation 4 — auditing stopped_by found 70 of the 760 surviving rows carry stopped_by: "error", all in seeds 55–58. The run died partway through seed 55 and produced nothing but errors after it. ALL SHARDS COMPLETE meant 1,160 rows were written, not that 1,160 measurements exist. Seeds 55–58 are re-run in full.
  • Appendix A — see below.

Together: 680 error-free surviving rows (seeds 21–54) + 400 re-run (seeds 1–20) + 80 re-run (seeds 55–58) = 1,160 at 580 per arm, the registered design exactly.

Appendix A.1 — a correction about what was examined

Progress on this run was reported as "no outcome has been examined." That was not accurate.

bench/runner.ts prints one console line per run and that line carries reproposed=. Reading the tail of the shard log to check progress therefore displayed individual outcome values — eight rows across the whole run, enumerated by arm and index in the appendix. Six from the treatment arm, two from the control, one of which is an error row §7 excludes anyway.

Eight rows of 1,160, with no denominator and no cross-tabulation, cannot inform a decision even in principle, and none was made or revised. No 2×2 table has been computed and bench/m5-analysis.ts still refuses to compute one below 1,160 rows.

It is recorded because whether it mattered and whether the account was accurate are different questions, and only the second is about trust. Progress is now read with wc -l and by filtering stopped_by.

Appendix A.2 — a prediction, on the record

Written while the run is incomplete and nothing is computed, with probabilities, so it cannot be reread afterwards as whatever happened:

outcome
significant, registered direction 30–40%
registered direction, not significant ~45%
null, or the other direction ~20%

Direction as registered; magnitude smaller than the registered 6.6pp, for three reasons that are stated in full there — every arm renders [claim] and the payload's own legend tells the agent not to act on it as an order (#415); ROUTE-GAP records treatment runs implementing what the injected block ruled out; and deviation 2's truncation imbalance shrinks the predicted gap rather than creating one.

The largest way it could be wrong is stated too: the control base rate of the rewritten task set is unknown, and M1-era diagnosis found seven of ten tasks with a control rate of zero before that rewrite.

Verification

test/dogfood.test.ts re-run after committing: 9 passed. The Record-Id on the appendix commit was rejected by commitlore validate on the first attempt (uppercase) and fixed — the product catching its own author.

The run completed all 1,160 registered rows on 2026-08-04. Two shards -- seeds
1-10 and 11-20, 400 rows -- existed only in a session scratchpad under the
system temporary directory and were reaped before anyone copied them out. They
are gone.

What survives is committed here: seeds 21-58, contiguous, 380 rows per arm, all
on one harness commit and one dist digest. The run log is committed beside them
because it is the only evidence that the missing shards were ever produced --
with its `rows N -> path` lines redacted to `<scratch>/`, since they carried the
absolute path of a local user directory and a session identifier. Every other
line is untouched: the shard boundaries, timestamps, row counts and token totals
are the evidence. The result rows themselves were checked and carry no paths.

Deviation 3 records the loss and the decision it forces. The lost rows are being
re-run against the same pinned harness rather than analysing the 760 that
remain: §8 registers 1,160 and calls anything short of it a partially completed
run, and picking a smaller n once part of the data is missing is the post-hoc
choice the pre-registration exists to prevent.

Nothing was analysed to reach any of this. Establishing what survived needed the
identity fields only; `reproposed` was not read.

Limit: the two lost shards had no copy outside a directory whose contract permits emptying it, so the rows are unrecoverable by any means
Ruled-out: analysing the surviving 760 rows as a reduced-power run | §8 registers 1,160 and forbids reporting a partial run; 760 gives ~62% power against 80% registered, and choosing n after data is missing is exactly the post-hoc move the design forbids
Ruled-out: discarding M5 and re-running all 1,160 rows | the survivors are uniform on harness commit, dist digest, model and arm balance, so re-running them would spend sixty hours to reproduce rows that are already valid
Warn: results written under a temp directory do not survive; write shards outside the scratchpad and commit each one as it lands
Warn: an artifact copied out of a scratchpad carries its path, so check before committing one
Blast: module
Undo: permanent
Certainty: firm
Verified: the pinned harness at 788a9db recomputes dist digest f54cda47 exactly, so re-run rows will agree with the survivors on both fields; grep for the scratchpad prefix and for a home directory prefix returns nothing in the committed log or in any of the four result shards
Unverified: whether the `sonnet` alias resolves to the same provider build five days on -- it is not pinned to a build, and deviation 3 reports the production window per shard for this reason
Provenance: authored
Record-Id: r-m5keep1
Auditing `stopped_by` across the surviving shards -- which §6 and §7 require to
be monitored -- puts `stopped_by: "error"` at 70 of 760. They are not scattered:
seeds 21-54 have none across 680 rows, and seeds 55-58 have 70 of 80. The run
died partway through seed 55 and produced nothing but errors after it. The tail
shard's wall-clock agrees: 4.7 hours for 160 rows against roughly 10.4 for each
200-row shard before it.

This corrects how the run log was read. `ALL SHARDS COMPLETE` and a count of
1,160 meant 1,160 rows were written; it did not mean 1,160 measurements exist,
and §7 has said so from the start. The registered n was never reached, and
calling the run complete was a claim about the log rather than about the data.

Seeds 55-58 are re-run in full alongside seeds 1-20. Whole seeds rather than the
70 errored cells: `error` is the absence of a measurement rather than an
outcome, so cell-level re-running would be defensible, but whole-seed
replacement removes the question instead of answering it.

680 error-free surviving rows, 400 re-run for deviation 3 and 80 for this one,
is 1,160 at 580 per arm -- the registered design exactly.

Limit: seeds 55-58 produced 70 rows with no measurement, so the surviving data cannot reach the registered n without re-running them
Ruled-out: re-running only the 70 errored cells | it would make the re-run set depend on a per-cell property, and whole-seed replacement costs 10 extra rows to remove the question entirely
Ruled-out: analysing the 690 error-free rows that survive | same objection as deviation 3, and §8 forbids reporting a partially completed run
Warn: a shard log reporting rows=N counts rows written, not measurements; audit `stopped_by` before reading a count as completion
Blast: module
Undo: easy
Certainty: firm
Verified: error rows are 35 in each arm and fall on all ten tasks, and seeds 21-54 carry zero across 680 rows, so nothing about a result influenced which rows failed
Provenance: authored
Record-Id: r-m5err4
Two things belong in the pre-registration that were not in it.

Progress on this run was reported as "no outcome has been examined." That was
not accurate. `bench/runner.ts` prints one console line per run and that line
carries `reproposed=`, so reading the tail of the shard log to check progress
displayed individual outcome values -- eight rows across the whole run, six from
the treatment arm and two from the control, one of which is an error row §7
excludes anyway.

Eight rows of 1,160, with no denominator and no cross-tabulation, cannot inform
a decision even in principle, and none was made or revised. The reason to record
it is not that it changed something. It is that an account which rounds "a few
rows appeared in a log line" down to "nothing was examined" is exactly the kind
of account this document exists to make impossible, and the first person that
account misleads is the person writing it. Progress is now read with `wc -l` and
by filtering `stopped_by`.

The second is a prediction, with probabilities, made while the run is incomplete
and nothing is computed. Direction as registered; magnitude smaller than the
registered 6.6pp, because every arm renders `[claim]` and the payload's own
legend tells the agent not to act on it as an order (#415), because ROUTE-GAP
records treatment runs implementing what the injected block ruled out, and
because deviation 2's truncation imbalance shrinks the predicted gap rather than
creating one. The largest way it could be wrong is stated too: the control base
rate of the rewritten task set is unknown to me, and M1-era diagnosis found
seven of ten tasks with a control rate of zero before that rewrite.

A prediction kept in someone's head is not a prediction. This one is written
where the result can contradict it.

Limit: the runner prints `reproposed=` on every console line, so any progress check that reads raw log output sees outcomes
Ruled-out: leaving the earlier "nothing examined" statements to stand because eight rows cannot matter | whether they matter and whether the account was accurate are different questions, and only the second one is about trust
Ruled-out: keeping the prediction out of the repository to avoid being on record | that is the entire value of making one, and a project that reports its own null results loses nothing by also reporting a wrong forecast
Warn: read run progress with `wc -l` and `stopped_by` filters, never by printing raw runner log lines
Blast: local
Undo: easy
Certainty: firm
Verified: the eight rows are enumerated by arm and index in Appendix A.1; `grep -c reproposed=` over the shard log confirms every console line carries the field
Provenance: authored
Record-Id: r-m5appa1
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

CommitLore — record lint

Trailers: clean — 3 commits in origin/dev..b36f12e1db6e6a7aa53ee707e832573438e830c6
Active constraints: 6 limits · 13 ruled-out · 4 warnings — from 7 records over 6 changed paths

Active constraints for the paths this PR touches

Limits (6)

  • r-m5appa1 b36f12e — the runner prints reproposed= on every console line, so any progress check that reads raw log output sees outcomes
  • r-m5keep1 1f84e41 — the two lost shards had no copy outside a directory whose contract permits emptying it, so the rows are unrecoverable by any means
  • r-m5err4 5159b98 — seeds 55-58 produced 70 rows with no measurement, so the surviving data cannot reach the registered n without re-running them
  • r-m5trunc 01f3478 — the rates come from 71 rows, so they indicate an imbalance rather than measure one; the verdict reports the final figures
  • r-m5overturns 64a24cb — the 22.5% comes from 40 discarded rows, so it is an early indication of the rate rather than a measurement of it
  • r-m5dev1 1c9466d — the deviation note reports integrity figures from the discarded rows, which is defensible only because none of them is the registered outcome; a reader who disagrees should discount them entirely

Ruled out (13)

  • r-m5appa1 b36f12e — leaving the earlier "nothing examined" statements to stand because eight rows cannot matter | whether they matter and whether the account was accurate are different questions, and only the second one is about trust
  • r-m5appa1 b36f12e — keeping the prediction out of the repository to avoid being on record | that is the entire value of making one, and a project that reports its own null results loses nothing by also reporting a wrong forecast
  • r-m5keep1 1f84e41 — analysing the surviving 760 rows as a reduced-power run | §8 registers 1,160 and forbids reporting a partial run; 760 gives ~62% power against 80% registered, and choosing n after data is missing is exactly the post-hoc move the design forbids
  • r-m5keep1 1f84e41 — discarding M5 and re-running all 1,160 rows | the survivors are uniform on harness commit, dist digest, model and arm balance, so re-running them would spend sixty hours to reproduce rows that are already valid
  • r-m5err4 5159b98 — re-running only the 70 errored cells | it would make the re-run set depend on a per-cell property, and whole-seed replacement costs 10 extra rows to remove the question entirely
  • r-m5err4 5159b98 — analysing the 690 error-free rows that survive | same objection as deviation 3, and §8 forbids reporting a partially completed run
  • r-m5trunc 01f3478 — Excluding truncated rows from the analysis set | the rule would change after the rate became visible and asymmetric, and M1 kept them
  • r-m5trunc 01f3478 — Raising the per-task token budget for the remaining shards | it changes the instrument mid-run and makes the completed rows a different measurement
  • r-m5trunc 01f3478 — Stopping to investigate the imbalance | the stopping rule forbids interim analysis, and the imbalance is reportable without resolving it
  • r-m5overturns 64a24cb — Excluding over-turns rows from the analysis set | the rule would be changed after seeing the rate, and M1 kept them, so the two runs would stop being comparable on the one axis M5 was built to vary
  • r-m5overturns 64a24cb — Raising the turn budget mid-run | it changes the instrument between shards and makes the earlier rows a different measurement
  • r-m5dev1 1c9466d — Letting the 20-task run finish | it produces the registered rows correctly but takes 4.3 days instead of 2.2, and leaves a permanent question about whether the extra fixtures mattered
  • r-m5dev1 1c9466d — Deleting the off-design rows | the artifact is the evidence that the restart happened for the stated reason

Warnings (4)

  • r-m5appa1 b36f12e (claim) — read run progress with wc -l and stopped_by filters, never by printing raw runner log lines
  • r-m5keep1 1f84e41 (claim) — results written under a temp directory do not survive; write shards outside the scratchpad and commit each one as it lands
  • r-m5keep1 1f84e41 (claim) — an artifact copied out of a scratchpad carries its path, so check before committing one
  • r-m5err4 5159b98 (claim) — a shard log reporting rows=N counts rows written, not measurements; audit stopped_by before reading a count as completion

git log --follow accepts exactly one pathspec, so renames are not followed for 6 paths; query one path at a time to follow its rename chain

withheld the content of 1 record(s) graded blocked: a Ruled-out trailer matching an injection pattern is reported, never quoted (SPEC §7)

Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR.

@MongLong0214
MongLong0214 merged commit b0bade9 into dev Aug 7, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant