← Ground Truth report library

Does Backtesting Really Work? Here Is the One Thing to Check.

Episode B04 · report format v2 · lab run 2026-08-15 · a snapshot of validation/ at repo HEAD 575c72b, pre-registration dated 2026-08-15 17:52 PDT — not hash-locked
VERDICT — 13 OF 13 LABS WROTE THE BAR DOWN. READING IT BACK IS THE HALF THAT FAILS

Every lab in this repo that carries a pre-registration carries an identifiable priors or goalposts block — 13 of 13. Where we scored those priors by hand we hit 20 of 27, 74.1%, inside the 65–85% band we registered before counting. That is the easy half. The other half: 12 of 13 registered labs have a results file at all; at least 9 registered items across 6 labs are never scored by the results that were supposed to score them; one lab registered 25 items and published nothing to score them against; another published results with no pre-registration at all. And 27 of about 143 registered items in this corpus carry a hand verdict — an unscored row is not a passing row. Writing the bar down is the easy half. Reading it back afterwards is the half that fails, and our own corpus is the proof.

What we granted, and what we actually tested

Granted, not measured: that the backtest a viewer is being shown is almost certainly true — real code, real data, it reproduces, and nobody faked it. The failure named here has nothing to do with lying, and we are not testing whether anybody lied. We also grant that a criterion written after the fact can still be perfectly honest. It simply cannot be evidence, because it cannot lose.

Tested: only our own corpus. 14 lab directories under validation/ as of 2026-08-15, 13 of them carrying a pre-registration, about 143 registered items enumerated from the pre-registration side rather than from whatever the results happened to discuss, and 27 rows hand-scored with a line reference on both sides. Zero new computation and no market data: this is a file-reading census of our own paperwork.

What this report does NOT claim, pre-committed before the data: no corpus-wide count of priors we have published as misses; no claim that our hit rate is good or bad against any outside benchmark; and no claim that pre-registration improves decision accuracy — only that it makes a result capable of losing. It also does not re-run any lab or re-verify any lab's underlying figures. Every outcome here is what that lab's results file claims, read against what its pre-registration registered. A lab whose results are themselves wrong is scored as its results say.

§1 · The pre-registration — and what it cannot prove

This pre-registration is dated, not hash-locked, and we are saying so. It was written at 2026-08-15 17:52 PDT, against repo HEAD 0a05136, before any priors block or scorecard in the corpus had been opened for counting. But no commit lock exists: the authoring session had no commit authority, so the pre-registration and the results landed together, and version control cannot witness the ordering. That is an attestation, not cryptographic evidence — and it is the same limitation this report flags on one of the labs it scores. Manufacturing a hash to close the gap would be the exact defect this episode exists to name.

The falsifiable question

Across every lab in this repo: how many priors and goalposts have we registered, how did they score — and when we deviated, did the deviation run in the direction that flattered us?

Our stated prior: our deviations would cluster toward understating our own findings

It split, and the split indicts the registration rather than rescuing it. On the 27 hand-scored rows the direction bar clears at 62.5% (5 understated against 3 flattered) — over a 60% bar by two and a half points, close enough that one row moving flips it. Add the labs' own post-publication corrections and unregistered deviations and it collapses to 35.3% (6 of 17).

We did not register which set of rows this would be scored against, so we are not permitted to pick the tier that scores better. Both are published in §5. That is an unbounded prior — the precise defect one of the labs in this very table had already written down as a lesson — and we committed it in a prior about our failure to bound priors.

One more thing we owe you about this prediction: we do not claim this was a blind prediction. It generalises a finding one of these labs had already published about itself, and the pre-registration says so, in its own contamination section, written before the count. It is still a real test — that lab's finding was about that lab, and there was no reason it had to hold across the corpus — but it was not blind and may not be described as though it were.

The primary configuration (locked)

ParameterLocked value
Enumeration sidefrom the pre-registration bullets, never from what the results happened to discuss
Denominatorsthree, reported separately — labs with a pre-registration · labs with an identifiable priors block · labs also carrying a results file. A lab with no priors block is a finding, not a skipped row
Outcome classesHIT · MISS · NEAR · UNSCORABLE · UNSCORED
Deviation directionUNDERSTATED vs FLATTERED, assigned only to non-HIT rows, and declared in advance to be a judgement read off quoted text rather than a computed quantity
Evidence ruleevery row carries the source line reference on both sides; rows that cannot be pinned to a line are excluded from the direction tally rather than guessed
Scopevalidation/*/PREREG.md only
P1 — the primary predictionat least 60% of direction-assignable non-HIT rows are UNDERSTATED
P2overall hit rate 65–85%
P3at least 1 registered prior, beyond the two already known, that its own results never score
P4the share of registered labs carrying a priors block is below 0.5
Corpus snapshotvalidation/ at repo HEAD 575c72b, 2026-08-15

Deliberately NOT tested — named in advance

  1. Any outside creator's pre-registration practice. There is no external specimen in this report and there is not supposed to be one: the only lab whose pre-registrations we can open, quote and score line by line is ours. We looked for a qualifying outside specimen and did not find one, and inventing a defendant to fill the slot would be the retrofit our own rules forbid. There is no defendant here but us.
  2. The two channel-performance pre-registrations at the root of the validation folder. They are not lab pre-registrations. The exclusion was registered before the count rather than discovered after it.
  3. Whether any prior was truly written before its run, corpus-wide. That is the version-control question, and it is answered per lab: §6 answers it for the 6 registrations the episode leans on, and this lab does not clear it for itself.
  4. Whether our priors were any good. A hit rate is a forecasting score, not a rigor score. A lab can hit every prior it registered and still be worthless.
  5. Re-running any lab, or re-verifying any lab's underlying figures.
A direction prediction that held would have said our errors run conservative; one that died would have said the discipline is decoration in our own lab. We wrote down before the count that the death was the better episode, and pre-committed to shipping that cut. Both endings were disarmed on paper before the run.

The goalposts — all required to proceed

#Pre-registered goalpostMeasuredPass
1Pre-registered goalpost — at least 60% of direction-assignable non-HIT rows understate our own case62.5% on the 27 hand-scored rows (5 of 8); 35.3% once the labs' own corrections are added (6 of 17)SPLIT
2Pre-registered goalpost — overall hit rate inside 65–85%74.1% — 20 of 27 hand-scored rowsYES
3Pre-registered goalpost — at least 1 registered prior nobody has caught, never scored by its own results9 of them, across 6 labsYES
4Pre-registered goalpost — fewer than half the registered labs carry a priors block100% — 13 of 13NO

2 of 4. Two hits, one miss, one split — and the miss and the split are printed above the hits, here and in the lab file, deliberately. The clean failure is the last one: we guessed the priors convention was a recent addition and that fewer than half the labs would carry a block. It is 13 of 13. The convention is older and more uniform than we assumed, and the real gap in this corpus is not registering — it is scoring what was registered.

§2 · The headline arithmetic

FigureValueWhat it means
Registered items their own results never scoredat least 9, across 6 labsThe finding. Not one of these is a lab that forgot to register — every one wrote the bar down and then published a results file that never came back to it.
A lab that registered 25 items and published no results at all25 of 25 unscoredStructurally unscored: there is no results artifact anywhere in the repo to score it against.
A lab that published results with no pre-registration whatsoever1It is not counted among the registered labs, because it registered nothing. It is counted here because that is the point.
Our own direction prediction, written for this very ledger62.5% / 35.3%SPLIT. It clears the registered 60% bar on one set of rows and fails it on the other, and we never registered which set. An unbounded prior, written by us, inside a report about unbounded priors.
Post-publication corrections and unregistered deviations, by direction8 of 9 flattered usThe corrections do not run in random directions. They run toward the version that had made our published position look stronger.
Registered labs carrying an identifiable priors or goalposts block13 of 13The discipline is universal at the write-down step. This is the easy half, and we do it.
Registered labs that also have a results file to be read against12 of 13One registered lab has no results artifact of any kind.
Hand-scored rows that hit their registered bar20 of 27 — 74.1%Inside the 65–85% band we registered before counting. Breakdown: 20 hit, 4 miss, 2 near, 1 unscorable.
Registered items in the corpus that carry a hand verdict at all27 of about 143The rest are unscored by this pass, and an unscored row is not a passing row. The hit rate above is the rate among rows whose lab published a per-item verdict — it is not the corpus hit rate, and excluding the unscored is exactly how a hit rate flatters itself.

§3 · What the instrument could not see

The instrument here is a file reader, so the stress test is a question about reach: what could it not see?

The mechanical count is a floor, not a census, and it is published as a floor. The enumerator finds 92 registered items by pattern-matching labelled bullets, numbered lists and bold table rows inside a detected block. The hand pass finds about 143 (112=12 · b01=27 · held lab 1=11 · d03=11 · d05=8 · d16=18 · held lab 2=25 · held lab 4=31). The gap is not an error in either: several labs register much of what they register as free prose inside a paragraph, and no regular expression is going to find that.

The one green the mechanical pass produced is narrow, and must not be over-read. Its registered-but-never-mentioned check came back clean on 12 of 12 scorable labs. That check asks only whether a named label appears as a token somewhere in the results file. It cannot tell mentioned from scored, and it cannot speak at all to prose-form registrations. Every unscored prior below was found by hand, not by that check. A green gate answers only the question it measures.

At least 9 registered items nobody ever scored — the ones we found

LabRegistered item its own results never scoreHow we checked
held lab 1the registered "Mixed → report honestly as inconclusive" third branchheld until this lab’s episode ships
held lab 1registered null of 200 draws; RESULTS reports 120, unreconciledheld until this lab’s episode ships
d16_mortgage_prepaysurvive-clause: near-retirement / short horizonretire/horizon occur 0 times in its RESULTS
d16_mortgage_prepaysurvive-clause: liquidity cuts for investingno liquid/locked equity hits
d03_leverage_concentrationkill-condition 3 — forced liquidation as "mercy" vs holding throughno hold-through counterfactual in RESULTS
held lab 4M7 / M13 / M14 / M15 (falsification clause F2, two E1 accounting clauses, the D2 re-license condition)held until this lab’s episode ships
112_bear_trapregistered bootstrap CI — no CI of any kind appears in its RESULTSagent pass
112_bear_trapregistered buffer ∈ {12/15/18/22%} sweep axis — RESULTS sweeps deltaagent pass
held lab 225 of 25, structurally — no results artifact existsheld until this lab’s episode ships

The corpus moved underneath the count, and that is disclosed rather than smoothed over. A concurrent session was writing this repo while the census ran: HEAD advanced 0a05136 to 575c72b in the first four minutes, and one lab's results file did not exist at the start of the enumeration and did exist at the end. That lab's row is a snapshot of a lab mid-build. Everything on this page is dated 2026-08-15 and is a snapshot, not a current count — the validation folder has grown since, and re-running the census today would answer a different question about a different corpus.

§4 · The controls

The enumerator has a negative control, because a guard only ever seen green is untested. Its self-test removes a registered label from a results file and asserts the diff goes red, then asserts the untouched corpus stays green for that same label. It passes both. So the mechanical check works — it is simply asking a smaller question than the finding needed, which is the paragraph above.

This report has one too. Running its generator with --selftest perturbs a single scored row and asserts the integrity gate refuses to write the page. That gate is what stands between the headline above and the table below: it recomputes the outcome tally, the direction tally, the hit rate and all four verdicts from the 27 rows, checks them against the counts the lab file already published, and refuses to emit a byte if they disagree. On a report about results that cannot lose, a page that could not reproduce its own headline from its own ledger would be self-refuting.

Independent corroboration, read back from the labs' own published scorecards: 4 hits, 1 miss; 6 hits, 1 near-hit, 1 UNSCORABLE, 0 clear misses; Prediction scorecard: 6 hit / 1 partial. Those lines corroborate the hand scoring; the 20-of-27 figure itself is assembled from the §7 rows and not from these scorecards (one of them belongs to a lab with no row in the 27), and each was opened and re-read against its own file rather than carried forward from memory.

§5 · The best objection, pre-registered and answered

“The people grading these priors are the people who wrote them.” That is the right objection, and there is no way to answer it fully from the inside. Three things are done about it, and none of them is a promise to be careful.

One: every row is evidenced on both sides. All 27 rows in §7 carry a pre-registration line reference and a results line reference, printed so the check is mechanical rather than a matter of trust. Until the lab repository is published (§6 says why it is private today) those references are our attestation, which is a weaker thing than what this page asks of everybody else; the CSV below carries every row, so the arithmetic at least is yours to check now.

Two: the direction column is declared a judgement, in advance. The pre-registration says the flattered/understated axis is read off quoted text and is never a computed quantity. It is labelled an opinion because it is one.

Three: we were not allowed to choose the set of rows that scored better. Here is the split, both halves.

Row setUnderstated usFlattered usShare understatedAgainst the 60% bar
Tier 1 — the 27 hand-scored rows in labs that published a per-item verdict5362.5%HIT
Tier 2 — Tier 1 plus the labs' own post-publication corrections and unregistered deviations61135.3%MISS

The 9 rows Tier 2 adds, each verified against a line:

Correction or deviationDirectionEvidence
D22 G1 — published KILL reversedflattered usd22_congress/RESULTS.md:116,120
D22 G2 — "no breakeven account size" now falseflattered usd22_congress/RESULTS.md:100
D22 G4 — concentration sign-flip does not surviveflattered usd22_congress/RESULTS.md:110,116
D13 E1/E1a — magnitudes moved in the specimen's favourflattered usd13_buy_borrow_die/PREREG.md:151
D13 — "unpassable by construction" argument is deadflattered usd13_buy_borrow_die/RESULTS.md:19
held lab 3 — held until this lab’s episode shipsflattered usheld
held lab 3 — held until this lab’s episode shipsflattered usheld
held lab 1 — held until this lab’s episode shipsflattered usheld
D13 Q5.5 — pre-run prior wrong, published anywayunderstated usd13_buy_borrow_die/RESULTS.md:164-166

8 of the 9 run in the direction that had flattered us. That is the sentence worth more than either percentage: our corrections are not random-signed. When a published result of ours moved after publication, it moved toward the version that had made our position look stronger. One of these labs says it plainly in its own results file — that the correction moved the result in the product's favour, and that we published a verdict our own corrected lab does not support.

§6 · Our own terms — there is no defendant but us

There is no outside specimen in this report, at any level, and that is by construction rather than by omission. This channel's standing rule is that the practitioner whose work is under test gets named. Here nobody outside is under test: the subject is our own registration corpus. We did go looking for an outside specimen — somebody who publishes a timestamped bar and then publishes a loss against it — and the nearest candidate applies its correction after the search rather than before it, which is the whole distinction this report is about. Naming somebody anyway, to fill a slot, is the retrofit our own rules forbid. So the slot stays empty and the bounty in §8 stays open.

This ledger carries the same defect it scores other labs for, and said so before the count. Its pre-registration was written at 2026-08-15 17:52 PDT, against repo HEAD 0a05136, before any priors block or scorecard had been opened for counting. But no commit lock exists for it: the authoring session had no commit authority, so the pre-registration and the results were not separated by a commit, and version control cannot witness the ordering. What stands behind the timestamp is a written attestation, not cryptographic evidence. That is exactly the limitation this report flags on one of the labs in its own table, and it is stated here rather than discovered later. Filling the gap with a hash would be the defect this episode exists to name, committed on the page that names it.

And two sessions built this lab at once. A second session registered a competing pre-registration for the same question two minutes after this one, and deliberately left it unrun. Two registrations and one corpus is a real problem; that registration's blind-arm design is better than this lab's; and reconciling them is a merge neither session should perform unilaterally. It is recorded, not resolved.

Question three — where is the clock? The 6 registrations this episode leans on, read from version control

Our work lives in git. Every commit carries a timestamp and the exact files that went with it. A commit date can be set by whoever writes it, so this is not a notarised clock — it is an ordering, and a history that cannot be quietly rearranged once somebody else holds a copy. The rack below was read from the log by the generator that writes this page, not typed, and the build refuses if what git says stops matching what the episode says. Commit hashes are printed; file names are not, because counts are the claim and one registration commit’s subject line names a person this report has no business naming.

EnvelopeLabRegistration commitFirst result commitGapClock?
onethe politician-trading lab
d22_congress
9159677 · 2026-08-04 00:49:45 -0700
4 files, 536 lines: the registration, the raw filings and the parser that read them
427dddf · 2026-08-04 00:54:57 -0700
3 files: the result and the code that produced it, the very next commit to touch the lab
5 min 12 sYES
twothe trade-copying lab
d21_copytrade_subscription_bar
b5425de · 2026-07-28 13:55:02 -0700
1 file, 109 lines: the registration alone
b0c0048 · 2026-07-28 14:00:26 -0700
4 files: the model, its console output, its results and its write-up
5 min 24 sYES
threethe life-insurance lab — its amendment
d13_buy_borrow_die
c918df0 · 2026-07-28 13:34:29 -0700
1 file, 54 lines: the amendment and nothing else
f8fedc1 · 2026-07-28 13:39:26 -0700
3 files: the run of the arm the amendment registered
4 min 57 sYES
fourthe leverage study (a separate research repository, not published)6beaa55 · 2026-07-02 12:26:24 -0700
1 file, 83 lines: the registration alone
a47a952 · 2026-07-02 12:33:28 -0700
4 files: the engine, the runner, the data client and the result
7 min 04 sYES
fivethe lump-sum-versus-gradual lab
d05_dca_vs_lumpsum
2109f09 · 2026-07-28 14:15:50 -0700
7 files in ONE commit: the registration, the model and the results together
—none: the same secondNO
sixthe life-insurance lab — its original registration
d13_buy_borrow_die
df4e1d9 · 2026-07-06 21:54:48 -0700
7 files in ONE commit: the registration, the model, the results and the stress arm together
—none: the same secondNO

4 of 6 have a clock behind them, and the timestamps line up to the second. And here is the part that costs us: our lab repository is private, so not one of those 4 is a link you can open today. You have the hashes and you have our word, and that is a weaker thing than what this report asks of everybody else. On the other 2 we cannot prove the order at all, in either direction: the registration, the model and the results entered history in a single commit, at the same second, so the ordering exists only in the file itself and in our telling you about it. The case this episode leans on hardest — the prediction we lost on camera — is one of those two.

Envelope two was then edited 5 more times over the next 4 days (b09f1ff, 0a4e68d, b11bc18, 499fe45, bf3f0c8), every one of them after the results already existed. Each edit is in the history with its own timestamp, which is the only reason we can tell you about them. A bar you can rewrite is still a bar, but only if the rewriting is as visible as the writing.

Envelope four is the study whose registered bar caught a sizing defect in our own engine; it has its own episode and its own report, here. It is the strongest ordering we have and the one furthest out of your reach: that repository is not going to be published at all.

Envelope one is the lab whose kill our own errata reversed (§5). Its bar is as checkable as anything on this page, and it still did not save the verdict, because a bar can only check the number it was handed, and the number it was handed was wrong. A timestamp is the floor, not the ceiling.

§7 · The hand-scored ledger — all 27 rows

All 27 rows here are Tier 1: registered priors in labs whose results publish an explicit per-item verdict. Each carries a pre-registration line reference and a results line reference that were opened and read back. Labs whose registrations are decision rules rather than author priors, and labs that published no per-item verdict at all, are not scored here — they appear in §3 as unscored-with-reason. A row absent from this table is not a passing row, and an unscored row is not a passing row: 27 of about 143 registered items in the corpus carry a hand verdict, and the remainder are simply unscored by this pass. The deviation direction column is assigned only to non-HIT rows and is a judgement read off quoted text, never a computed quantity — every assignment carries the line it was read from, so you can overrule it. 4 of the 12 labs appearing in the tables on this page are shown as ‘held lab N’ rather than by name. Their episodes have not aired, and this report is a census of pre-registrations — so naming them here would publish a registered prediction and its scored outcome ahead of the video, which is the exact thing pre-registration exists to prevent. Every one of them is counted: the denominator, the hit rate and the deviation shares on this page are computed over all 27 rows and none of them move. The names appear automatically once each episode ships. Check our arithmetic: the CSV below is the same file the figures above are computed from.
Download all 27 hand-scored rows (CSV)
#LabRegistered itemPREREG refRESULTS refOutcomeDeviation directionHow it was scored
1d05_dca_vs_lumpsumP1PREREG.md:64-75RESULTS.md:11-16HIT—Scored in the RESULTS prior table; overall line at RESULTS.md:8 'Prior scoring — 4 hits, 1 miss.'
2d05_dca_vs_lumpsumP2PREREG.md:64-75RESULTS.md:11-16HIT—Per the RESULTS prior table.
3d05_dca_vs_lumpsumP3PREREG.md:64-75RESULTS.md:11-16HIT—Per the RESULTS prior table.
4d05_dca_vs_lumpsumP4PREREG.md:70-72RESULTS.md:15MISSunderstated usRESULTS.md:15 'median win +7.29%, median loss -6.02% -> backwards | X'. Direction quoted from RESULTS.md:8 'The miss moved in the specimen's favour.' and RESULTS.md:111 'My P4 prior said the opposite and was wrong.' Published as a loss, on camera (the D05 script, line 159).
5d05_dca_vs_lumpsumP5PREREG.md:64-75RESULTS.md:11-16HIT—Per the RESULTS prior table.
6d21_copytrade_subscription_barQ0PREREG.md:49RESULTS.md:183HIT—flat-equivalent 0.451% inside the registered 0.2-0.5% band.
7d21_copytrade_subscription_barQ1PREREG.md:50RESULTS.md:184HIT—RESULTS marks it 'arithmetic - low information'.
8d21_copytrade_subscription_barQ2PREREG.md:51RESULTS.md:185HIT—predicted ~$333,000; actual $333,333.
9d21_copytrade_subscription_barQ3PREREG.md:52RESULTS.md:186NEARunderstated usRESULTS.md:186 'near - I predicted it *harder* to explain than it is' (12-16%/yr registered vs 11%/yr measured). Direction corroborated at RESULTS.md:196.
10d21_copytrade_subscription_barQ4PREREG.md:53RESULTS.md:187UNSCORABLEunderstated usRESULTS.md:187 'UNSCORABLE per Amendment 2'. Two independent reasons at RESULTS.md:177-179: an unbounded hedge clause AND a denominator the lab later banned. Direction from RESULTS.md:192 'the informative clause missed low ... in the understating direction'.
11d21_copytrade_subscription_barQ4aPREREG.md:54RESULTS.md:188HIT—reproduces within 2.5 pp.
12d21_copytrade_subscription_barQ4bPREREG.md:55RESULTS.md:189HIT—Scored HIT but RESULTS.md:189 annotates it '(understated)' - predicted 'tens of percentage points', measured 95.6 pp. Counted as HIT per the file's own verdict; the understatement is noted at RESULTS.md:196 as part of the same directional pattern.
13d21_copytrade_subscription_barQ5PREREG.md:56RESULTS.md:190HITunderstated usOMISSION ROW. Registered in the PREREG, absent from the scoring table for three doctor rounds / 27 lens-runs (RESULTS.md:169,171); added by Amendment 3 on 2026-08-01 and it is a HIT. Direction from RESULTS.md:173 'D21's hides a HIT and under-sells us.' Direction is assigned to the OMISSION, not to the prior, which hit.
14d20_app_venture_barQ0PREREG.md:42RESULTS.md:137HIT—$20,171, low end of the registered $20-24k band.
15d20_app_venture_barQ1PREREG.md:42RESULTS.md:138HIT—H* infinite at his run-rate.
16d20_app_venture_barQ2PREREG.md:42RESULTS.md:139MISSunderstated usRESULTS.md:139 'missed low' - registered $100-150k, measured $96,569. Direction from RESULTS.md:144 'One miss (Q2), and it moved in the specimen's favour'.
17d20_app_venture_barQ3PREREG.md:42RESULTS.md:140HIT—both clauses held.
18d20_app_venture_barQ4PREREG.md:42RESULTS.md:141HIT—$365, inside the registered $350-450 band.
19d20_app_venture_barQ5PREREG.md:42RESULTS.md:142MISSflattered usTHE FLAGSHIP FLATTERING ROW. RESULTS.md:142 still shows Q5 as a HIT; the same file's superseded banner at RESULTS.md:9 says it is a MISS and the correct score is four of six. Ground truth: results.json:188 'q5_direction_holds': false. Caught at the D20 script review, round 2, line 39 'Q5 is a miss. The script says Six predictions. Five held. Truth: four of six.' Direction from d21_copytrade_subscription_bar/RESULTS.md:173 'D20's omission hid a MISS and flattered us'.
20held lab 3P1PREREG.md:41-43RESULTS.md:65HIT—held until this lab’s episode ships
21held lab 3P2PREREG.md:44-46RESULTS.md:66HIT—held until this lab’s episode ships
22held lab 3P3PREREG.md:47-48RESULTS.md:67MISSflattered usheld until this lab’s episode ships
23held lab 3P4PREREG.md:49-50RESULTS.md:68HIT—held until this lab’s episode ships
24held lab 1P1PREREG.md:32RESULTS.md:8HIT—held until this lab’s episode ships
25held lab 1P2PREREG.md:33RESULTS.md:8HIT—held until this lab’s episode ships
26held lab 1P3PREREG.md:34RESULTS.md:8HIT—held until this lab’s episode ships
27held lab 1P4PREREG.md:35RESULTS.md:23NEARflattered usheld until this lab’s episode ships

§8 · What would change our mind

  1. Somebody who publishes a timestamped bar and then publishes a loss against it. We feature them by name, on camera, as the counterexample this report could not find. It takes all four: a verifiable pre-result timestamp; a published loss against that criterion; a criterion bounded on both sides; and a real funnel, so the bar had something to cost.
  2. Evidence that pre-registration costs accuracy, not just comfort — a demonstration that bars fixed in advance produce systematically worse decisions on the same data than post-hoc analysis does. That is a real argument against the discipline and we would run it.
  3. This ledger re-run against the blind arm the concurrent session registered. That registration covers the labs this pass had already observed and registers predictions over the remainder. A blind re-score that contradicts the direction finding in §5 would change the closing claim of this report.
  4. A registered criterion of ours that could not have failed. We had one candidate and it stopped qualifying: its own results file retracted the argument that made it unfailable, and the test now passes 9 of 1,008. Finding another one in our corpus remains an open bounty against us, and we will publish it.

§9 · What survives

The portable version is three questions, and each takes about five seconds on any backtest anybody shows you.

Where is the bar, and when was it written? Not whether the result is impressive — whether a criterion existed before the result did. If the success criterion cannot be dated earlier than the number it blesses, the number is a description, not a test.

Is the bar bounded on both sides? A criterion with an open end cannot lose in the direction the result actually lands. This is the one we failed on ourselves: our own direction prediction never said which rows it would be scored against, so it scored 62.5% one way and 35.3% the other, and we had no principled way to choose.

Which way do the corrections run? Everybody publishes errata. The question is whether they are random-signed. Ours are not: 8 of the 9 post-publication corrections and unregistered deviations we found moved toward the version that had flattered us.

And the thing worth carrying out of our own numbers: 13 of 13 of our registered labs wrote the bar down, and at least 9 registered items across 6 of them were never read back. Writing it down is the cheap half. The discipline is not self-executing — not theirs, and not ours.

§10 · Want to run a test like this yourself?

Everything we make is free — the reports, the ledgers, all of it. The only thing that costs us real money is the market data.

Where the numbers on this page came from — and it is not a data vendor. This report uses no market data at all. It is a file-reading census of our own lab notebook: every figure on it is read or recomputed, by the generator that writes this page, from four files in the lab behind this episode — the pre-registration, the results file, the enumerator’s ledger and the 27 hand-scored rows — and the generator refuses to write the page if those rows do not regenerate the published tallies. Two things come from elsewhere and say so where they appear: the envelope rack in §6 is read from the commit logs of the two repositories it names, and where a row quotes another lab’s results file, that file’s own line is cited on the row. No vendor produced a number here and none is credited for one; the link below has nothing to do with how this page was built.
Buying market data? Going through here supports Ground Truth (affiliate)
The firewall: going through that link pays us a small commission at no extra cost to you. It is a way to support the channel, not a description of our pipeline — the note directly above says that no vendor produced a number on this page, and we would rather say so plainly than let a commission blur the two. That is the only money this channel takes. Never from anyone whose claims we test — and never for anything inside a category we review.

Get every report + the 7 Questions one-pager (free)