Write the M5 analysis before the data it analyses exists - #397
Merged
Conversation
PREREGISTRATION-M5 fixes the design in prose. Prose is checkable by a reader who already agrees; a program is checkable by running it. The analysis set, the exposure preconditions, the single registered test and the two reporting obligations are now in something that executes, and none of them can be chosen after the numbers are visible because the numbers do not exist yet. The stopping rule is the part worth making mechanical. §8 says every one of the 1,160 rows lands before any 2x2 table is computed, and a promise not to peek is worth less than a program that refuses. Run against the live shards right now it prints the preconditions, says 970 rows are outstanding, and stops without a table. I could still write the query by hand; the point is that the artifact everyone will actually run does not let me. It carries its own positive control. Pointed at t702-m1-final.jsonl with --validate it must re-derive M1's published verdict, and does: 5/30 against 7/30, p = 0.7480, matching bench/VERDICT-M1.md to four places. A verdict script that cannot reproduce a verdict already published is not evidence about anything, and this one would have shipped silently broken without that check -- the first run threw on a field named pValue that I had written as p. §11's obligations are printed above the stopping-rule gate rather than below it, so the truncation shares per arm are visible on every run, including the runs that refuse to compute a table. They are the numbers most likely to be quietly dropped if the final table is disappointing. Record-Id: r-m5analysis Limit: the script enforces the row count, not the identity of the rows; a run that produced 1,160 rows under a changed harness would satisfy it, which is what harness_commit and dist_digest on each row are for Ruled-out: Computing the table now and not looking | the file would exist, and a number that exists is a number someone reads Ruled-out: Leaving the analysis to be written after the run | that is the freedom this document was written to give up, and writing it afterwards is indistinguishable from writing it to fit Ruled-out: Asserting the M1 control in a vitest suite instead of --validate | it belongs to the analyser, and a reader checking the verdict should be able to re-derive the control with the same command that produced the verdict Certainty: firm Blast: local Undo: easy Verified: --validate reproduces 5/30 against 7/30 at p = 0.7480; run against the live shards it reports 190 of 1,160 rows, 0.0% exposure failures in both arms, per-arm truncation shares, and refuses the table; bench tsconfig typechecks; manifest and cli suites pass; bench:verify and check-readme-numbers unchanged Unverified: the branch that computes the table, which cannot run until the data exists and is therefore exercised only by the M1 control
CommitLore — record lintTrailers: clean — 1 commit in Active constraints for the paths this PR touchesLimits (20)
Ruled out (56)
Warnings (13)
Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PREREGISTRATION-M5.mdfixes the design in prose. Prose is checkable by a reader who already agrees; a program is checkable by running it.The analysis set, the §6 exposure preconditions, the single registered test and the §11 reporting obligations are now in something that executes — and none of them can be chosen after the numbers are visible, because the numbers do not exist yet.
The stopping rule is now mechanical
§8 says all 1,160 rows land before any 2×2 table is computed. A promise not to peek is worth less than a program that refuses. Run against the live shards right now:
I could still write the query by hand. The point is that the artifact everyone will actually run does not let me.
It carries its own positive control
Matching
bench/VERDICT-M1.mdto four places. A verdict script that cannot reproduce a verdict already published is not evidence about anything — and this one would have shipped silently broken without that check: the first run threw on a field namedpValuethat I had written asp.§11's obligations print above the gate, not below it
The truncation shares per arm appear on every run, including the runs that refuse to compute a table. They are the numbers most likely to be quietly dropped if the final table is disappointing.
Verified
--validatenpx tsc -p bench/tsconfig.jsonmanifest,clibench:verify,check-readme-numbersStated limit: the script enforces the row count, not the identity of the rows. A run producing 1,160 rows under a changed harness would satisfy it — which is what
harness_commitanddist_digeston each row are for.