The film
About 7:15, hosted by Tallow. It asks you one question and waits for your answer before it shows you. The guide's voice is not recorded yet, so for now the film plays with captions; the full words are also below.
Nothing loads until you press play.
The lab: redo the logbook's intervals
Pick a comparison and the lab reruns the scorer's bootstrap on the published per-row scores, in this page, with numpy's own random stream ported to JavaScript. With the scorer's seed, 8 intervals come out to the logbook's printed digits, among them the candidacy bar, +0.0425 [0.0354, 0.0498], and both readings of the held-out context score. Another seed moves the bounds in the third or fourth decimal.
The scores are loaded from this site and resampled on your computer. Nothing is sent anywhere.
Everything the film says
Our MMBU Challenge entry
Case study: our MMBU Challenge entry.
For two weeks this boatyard fine-tuned a small model for a public contest, writing down every bar before the result it would judge.
The contest
MMBU is a biomedical image benchmark from Stanford MARVL, built from 410 public datasets. A model answers each question about an image once, with no tools, and is scored on the answer and on context, such as what kind of image it is.
We trained small LoRA strips on two open Qwen 3.5 models, of 2.3 and 4.7 billion numbers, from 86 sources across all the runs, every one listed in our disclosure. This is benchmark work, not a medical tool, and every score tonight is from our own scorers, not the contest's judge.
The bar comes first
Before each result, we wrote down the comparison that would decide it and the bar it had to clear: usually, new model minus old on about 3,100 practice questions, with a bootstrap interval whose lower end sits above zero.
The fourth run added 20 public datasets, 17 of them ones we believe the benchmark draws on.
Seventeen of the benchmark's likely sources. Did the practice answers go up? (the film pauses here)
A miss, kept
No. The difference was -0.007, interval -0.018 to 0.004. Zero sits inside, so by the rule those rows did not go forward.
The fifth run gave the champion a second pass over its own rows: up 0.001, interval -0.007 to 0.009. Another miss, written down the same way a win is.
Between a guess and a cheat
Then a worrying number. The champion got 21.6 percent of the practice answers right. A guesser who could see the judge's options, which our model never sees, would average 20.7. A cheat giving each kind of question its most common answer, 23.7.
Was it even looking? Given blank pictures, the fourth run fell from 20.9 percent right to 8.2. It uses the picture. And 51 percent of its answers named none of the options at all.
Better at picking than at saying
So, for our eyes only, we showed the fifth run's model each option and measured how likely it found each one. Its favourite option was right 41 percent of the time; its written answer, 20.
Picking from a list is easier than writing, but much of the loss is in the words it writes. The rule chose the next step, training on the labels' own words, and on region questions the sixth run beat the fifth by 0.026, interval 0.008 to 0.044.
The rule that turned away its own champion
The sixth run cleared every answer bar but missed a format bar: valid replies 99.8 percent of the time, against a bar of 99.9. The champion it would replace scored only 99.6. As written, the bar turned away its own champion.
The verdict stood. For later runs we signed a new rule, while the seventh run was at step 20: replace the champion when every answer bar is met and the format is no worse. The seventh run met it, up 0.043 on our size-adjusted score, interval 0.035 to 0.050.
Whose words count
One number went the wrong way. On our held-out sources, the seventh run's context score fell 0.089 below the sixth run's.
It now answered in the benchmark paper's words, X-ray rather than X-ray imaging, while our answer key kept each source's old words. With the key rewritten in the paper's words, the same replies scored 0.152 higher. Neither key is neutral, and this re-score came after we saw the fall: a measurement, not a test.
Keeping the lamp lit
Each run takes a lock on the shared graphics card, saves every 50 steps, and has a watchdog. A shutdown mid-run lost nothing. Code that had never run idled the card for about 10 hours, and two trainers on one run cost 40 steps; now, when a check cannot tell if a trainer is alive, it counts it as alive.
What the logbook can prove
Every bar was fingerprinted into a ledger, and all 19 rule files still match it, 16 by full fingerprint and 3 by the short prefix it kept. But the ledger was meant to be pushed to GitHub, which stamps the time, before each result. Only entries up to 27 were, the last on 4 October.
Entries 28 to 89, every run tonight, were first pushed on 18 October, after the results; the ledger is now public. So the claim that each bar came before its score rests on our word. A fingerprint proves the bytes, not the hour.
Goodnight
The seventh run is the candidate; nothing has been submitted. The eighth stopped at step 500 of 1,918 when the author paused the work. The contest runs to 31 December 2026.
In the lab, redo eight of the logbook's intervals, digit for digit. Goodnight.
Sources
Every claim in the film, with where it comes from and what that source does not prove. The numbers about the model are computed from its weights, which you can load and check: facts.json, published.json, dev_per_row.json, heldout_context_per_row.json, heldout_task_per_row.json.
The MMBU benchmark paper. D'Cunha et al., MMBU: A Massive Multi-modal Biomedical Understanding Benchmark to Probe the Perception Capabilities of Vision-Language Models, arXiv 2606.06696, 4 June 2026. https://arxiv.org/abs/2606.06696
Used for: The benchmark curates 410 public datasets; each question pairs a biomedical image with a task; the paper's words for context fields (for example X-ray, Light Microscopy, specimen Human).
Does not prove: Anything about our models, or the hidden test set's contents.
The MMBU Challenge site and brief. MMBU Challenge, organized by Stanford MARVL: challenge site and participant brief, read 2 to 9 October 2026. https://akiranishii.github.io/mmbu-challenge/
Used for: One model, one pass per question, no tools or retrieval; answer (T) and context (C) scored, S = 0.8T + 0.2C; Track 3 for small models (the web page: at most 4B active and 12B total parameters; the brief of 9 October: a 4B model, counted as 4.66 billion total parameters), scaled by (4.66e9 / P)^0.1; training sources disclosed; deadline 31 December 2026, 23:30 Pacific (the organisers' Discord answer of 3 October).
Does not prove: How the organisers' judge scores a given reply, or the final leaderboard.
Organiser rulings. MMBU organiser answers on the challenge Discord, 3 to 14 October 2026, as recorded in our run notes.
Used for: "All datasets are acceptable as long as disclosed" (9 October); the public dev questions are for evaluation only; the 4B limit counts the vision tower and the embeddings.
Does not prove: Rulings after 14 October.
Our preregistrations. MMBU run records: train/PREREG.md and train/ft2 to ft8 PREREG-*.md, each fingerprinted into the prereg ledger.
Used for: Each run names its comparison and bar before its result: a paired bootstrap (10,000 resamples, seed 20261002, percentile) on the public dev questions, lower bound above zero unless a non-inferiority margin is stated. Our answer scorer JP1 agreed with a blind re-grade of 180 earlier dev answers on 175, with no false accepts; the re-grade was done by the Claude session leading the work, the same model family as the official judge.
Does not prove: That the files were written before the results; see the ledger source.
FT4 results. MMBU run records, train/ft4/bars_ft4_excl12.json (SHA-256 ca54d77a73c6); the run's preregistration, train/ft4/PREREG-FT4.md.
Used for: FT4 added 20 public sources, 17 of them inferred MMBU sources (tier Q2) and 3 more (RIVA_PAP, DERM12345, FDG_PET_CT), plus 1,039 format copies: 29,421 rows. H1, dev answers FT4_4B minus FT3A_4B: -0.007 [-0.018, 0.004], not met (decided on 3,102 rows; the same verdict on 3,091 after the 12-row exclusion). The format copies arrived with the new sources, so the result cannot separate them.
Does not prove: That those sources could not help with a different recipe.
FT5 results. MMBU run records, train/ft5/bars_ft5.json (SHA-256 b367b9703d49).
Used for: K1, one more epoch from FT3A_4B over FT3A's rows plus the format copies: +0.001 [-0.007, 0.009], not met.
Does not prove: Anything about longer schedules or other learning rates.
Baselines. MMBU run records, diag/baselines.json (SHA-256 d135ae4f7f0a); FT7_4B's dev answer score from train/ft7/bars_ft7.json (SHA-256 221bd716e8c9).
Used for: Chance among the judge's options 0.2074; the most common answer per question family, left one out (an oracle the model cannot use), 0.2368; FT7_4B 0.2294 (JP1).
Does not prove: What the official judge would score.
Blank-image audit. MMBU run records, diag/image_audit.json (SHA-256 6944a2c19847) (FT4_4B).
Used for: Real images 0.2087; mean-colour blank images 0.0819; real minus blank +0.127 [0.113, 0.141]; 74.7% of answers change.
Does not prove: That the model uses the image well, only that it uses it.
Where the model loses to the oracle. MMBU run records, diag/prior_gap.json (SHA-256 fcf37e9b3fd6) (FT4_4B).
Used for: 51% of answers name no option; chest radiograph regions, 82 rows: model right 2 times, the oracle 40; surgical instrument tips, 54 rows: 7 against 31.
Does not prove: Why the model words its answers off the option list.
Option-scoring readout. MMBU run records, diag/option_readout_FT5_4B.json (SHA-256 6aca907696fe); the rule was fixed in ledger entry 64 before the run.
Used for: FT5_4B on 2,654 single-label rows: its top-scored option right 0.414, its generated answer right 0.197, difference +0.217 [0.198, 0.236]; the rule chose answer-vocabulary rows. The readout calls the gap wording and label recall, partly inferred, since picking from a closed list is easier than open generation.
Does not prove: That option scoring could be used in the contest; it is an evaluation-only readout, since the rules allow one generated reply.
FT6 results. MMBU run records, train/ft6/bars_ft6.json (SHA-256 5fc665673356).
Used for: M2, region-question answers, FT6_4B minus FT5_4B on 860 rows: +0.026 [0.008, 0.044], met; M5, Pass 2 replies valid 0.9984 against a bar of 0.999, not met; M6, 3,090 of 3,091 Pass 1 replies hold an answer, not met.
Does not prove: Held-out behaviour beyond bar M4.
FT7 amendment 2. MMBU run records, train/ft7/PREREG-FT7-AMENDMENT-2.md (SHA-256 a8663983c53b), ledger entry 79: signed 07:13:43Z on 16 October 2026, while FT7 was at step 20 and no FT7 output existed.
Used for: The absolute format bars also rejected the standing candidate, FT3A_4B (Pass 2 valid 0.9958, 3,089 of 3,091). The new rule, for later runs: replace the candidate when every answer bar is met and the format is no worse than the candidate's.
Does not prove: The signing time, beyond our own record; see the ledger source.
FT7 results. MMBU run records, train/ft7/bars_ft7.json (SHA-256 221bd716e8c9).
Used for: N4, adjusted S, FT7_4B minus FT3A_4B: +0.043 [0.035, 0.050], met; N5, held-out answers: +0.021 [0.007, 0.036] (non-inferiority, margin 0.02), met; FT7_4B became the candidate.
Does not prove: The hidden test set's result.
Held-out vocabulary re-score. MMBU run records, train/heldout_vocab/heldout_vocab_ft7.json (SHA-256 6cb68387f23b); preregistration train/heldout_vocab/PREREG-HELDOUT-VOCAB.md; ledger entries 87 and 88.
Used for: FT7 minus FT6 held-out context: -0.089 [-0.103, -0.076] under the sources' own labels, +0.152 [0.135, 0.172] under labels rewritten to the paper's words (light microscopy 400 rows, X-ray 150, ultrasound 101, specimen 250). Post hoc for FT6 and FT7; preregistered for FT8 only.
Does not prove: Which key is right; neither is neutral.
The survival record. MMBU status notes (STATUS-2026-10-15.md) and ledger entries 54, 73 to 76 and 84.
Used for: Checkpoints every 50 steps; FT7 saved step 665 in 0.53 s on a shutdown and resumed about 6.2 hours later with no step lost; the FT5_4B init_lora crash idled the GPU about 10 hours; a duplicate trainer after an app restart cost 40 steps and about 30 minutes; the liveness check now fails closed; FT8 stopped at step 500 of 1,918 when the author paused the work on 16 October 2026.
Does not prove: That no other failure mode remains.
The prereg ledger. HarperZ9/prereg-ledger, ATTESTATIONS.md, read with git on 17 October 2026: entries to 89 in the local file; the remote holds entries to 27, last pushed 4 October 2026; the repository is private.
Used for: All 19 preregistration and amendment files match the ledger, 16 to a full SHA-256 and 3 to the 8-character prefix the ledger recorded (re-hashed 17 October 2026). Entries 28 to 89 were never committed or pushed, so no outside timestamp backs their order, and a file and its local fingerprint line could have been changed together.
Does not prove: When entries 28 to 89 were written.
Night School's re-derivation. media/school/mmbu/facts.json, written by tools/school/fill_mmbu.mjs: numpy's SeedSequence, PCG64 and integers ported to JavaScript (system/school/mmbu-rng.mjs, checked against numpy), and the scorers' bootstraps re-run on the published per-row scores (media/school/mmbu/data/). https://github.com/HarperZ9/HarperZ9.github.io/tree/main/media/school/mmbu
Used for: K1, M1, N1, N3, N4, N5 and both held-out vocabulary intervals reproduce to the printed digits.
Does not prove: That the per-row scores are right; they come from our local scorers.
What this lesson leaves out
Every score here comes from our own local scorers. The contest's judge was never called, and dev scores will not match the final leaderboard. Nothing has been submitted.
This is benchmark work. The images are benchmark data, and nothing here is a medical tool or a clinical claim.
The ledger's fingerprints still match the rule files, but only entries up to 27 were pushed to GitHub before the results, the last on 2026-10-04; entries 28 to 89, which cover every run in the film, were first pushed on 2026-10-18, after the results, and the ledger is now public. So the claim that each bar came before its result has no outside timestamp before that date for those runs.
The held-out vocabulary re-score (FT7 minus FT6: -0.08946 under the sources' words, +0.15225 under the paper's) was made after the fall was seen, so for these runs it is a measurement, not a test. The eighth run's reading was preregistered, but that run was paused before it was scored.
MMBU work is paused: the eighth run stopped at step 500 of 1,918 when the author paused it on 16 October 2026. The contest runs to 31 December 2026.
The lab re-derives the arithmetic from the published per-row scores. It does not check that those scores are right; they come from our scorers.
Before this: LoRA and fine-tuning (S19), Evaluating a language model (L16) and When the check can be fooled (E24). The same lesson about fingerprints, from the other side: A score that carries its receipt (E25).