Every experiment in the replication, with its protocol, its data, and whether its prediction was registered before the measurement or written after it.
This page exists so the claims in the report can be checked rather than taken on anyone's word. It is addressed to the authors of NaLa and secant: the studies below were run against their code, and several of them correct things this review itself got wrong.
The work was done against the repositories on 10–14 September. arXiv:2609.14127 appeared on 12 September and every finding here has since been checked against it: none of them contradicts a claim the paper makes. The criticisms in the report are aimed at the toolkit's README, and the paper scopes those claims differently. §05 sets out what is left once that is taken into account.
One limit, stated up front. The code,
data and protocols live in a fork that is private, and stays private until the
authors say otherwise — it was closed when leochlon/nala became unreachable
mid-review, out of deference to that. So everything below can be read and audited, and
nothing below can be re-run by a reader who has not been given access. That is a real
limit on this document and not a formality.
← The report NaLa Under Replication the argument these measurements support, in twenty-one sections
Three things distinguish a measurement here from an assertion, and each is recorded per study rather than claimed in general.
Registered or not. Six of the eleven studies froze their predictions in a committed file before any inference, with the falsification conditions and the uninformative outcomes written down in advance. The others were exploratory and are labelled as such. A result from an exploratory study is a description; a result from a registered one is a test.
Recorded data. Every study writes a machine-readable record into
replication/ in the fork, alongside the script that produced it. Where a claim cannot
be re-derived even from those records, that is stated — there is one such case and it is
called out below. The records exist; access to them is the authors' to grant.
What would have falsified it. A prediction that could not fail is not a test. Several checks in this work were mutation-tested: the code was deliberately broken to confirm the check notices. Where that was done, it is recorded.
The mathematics survives everything. The engineering survives everything. One behavioural claim generalises — the ranking beats chance at every scale tested. The headline repair does not generalise, and three separate accounts of why an edit works have been proposed and refuted, two of them mine. What remains is a necessary condition with no sufficient one attached.
| Study | Registered | Scope | Result | Data |
|---|---|---|---|---|
| Identity verification docs/MATH.md |
exploratory | 336 (layer, head) pairs, live model; 4 choices of μ | Holds at 6.4e−14. Only the uniform mean works; the other three fail by 1015×. The identity is a constraint, not a definition. | capture_all_layers.npz |
| Prompt controls issue #1 |
exploratory | 8 arms, deterministic, run twice | A prompt does repair the recorded case — the repo's own definition emphasis scores 6/6. Falsifies “no prompt could”. |
— |
| Predicted vs executed issue #5 |
exploratory | 75 candidates, natively executed | r = 0.97, sign agreement 97.3%. Converts “a prediction with no bound” into a measured, good result. In the method's favour. | prediction-envelope.json |
| Exact vs linearised issue #3 |
exploratory | all 109,080 candidates, 5 magnitudes | First-order ranks the same top candidate at every magnitude. The README's selection claim does not survive; its magnitude claim does, and is stronger. | capture_all_layers.npz |
| Model scaling protocols/model-scaling.md |
registered | 4 checkpoints, 0.5B→7B | The repair reproduces at 0.5B and nowhere above. Two amendments declared in flight; both were my own errors. | scaling.json |
| Second family docs/FAMILIES.md |
registered | Qwen3, 4 checkpoints, matched sizes | The pattern replicates in an independently trained family. Two ladders, never conflated. Identity holds on a second architecture. | scaling-qwen3.json |
| Multi-site edits protocols/multi-site.md |
registered | 48 executed arms, 8 checkpoints | Crossing zero is necessary (48/48) and not sufficient (11 crossings, no repair). The registered hypothesis was falsified. | multisite-preregistration.json multisite-results.json |
| Prediction envelope docs/VALIDATION.md |
exploratory | 75 candidates, −7.25 to +11.36 | Calibrates a gate from data rather than choosing a threshold: sign conflict above a floor that 0 of 35 comparable candidates trip. | prediction-envelope.json |
| Ranking vs chance protocols/control-battery.md |
registered | 640 edits, 8 checkpoints | 480 random edits, zero repairs. All four predictions held 8/8. The one positive result that generalises. | control-qwen2.5.json control-qwen3.json |
| Case variation protocols/case-variation.md |
registered | 60 cases / 12 decisions, 180 runs | The necessary condition survives a new axis: 29 distinct cases, zero violations. Sufficiency fails in 29 of 32 crossings. | cases.json |
| Executed-guided search protocols/executed-search.md |
registered | 3 arms, measurement inside the loop | The proxy was weak but not the binding constraint: +0.07 to +0.87 nats, no verdict changed. Closes a stated caveat. | executed-search.json |
| Third family protocols/third-family.md |
registered | SmolLM2 135M–1.7B, outside the Qwen lineage | The registered prediction was falsified, and it was one of mine. A 360M model — smaller than any checkpoint measured here — does not repair, at gain/deficit 0.47, among the large models. Size is not the variable. The winning site holds at ten of ten across three tokenizers. | scaling-smollm2.json |
Ten corrections, all to my own work, all found and published rather than quietly fixed. They are listed here because a review that never corrects itself is not measuring anything — and because several of them are the same defect I filed against the repository, reproduced in the code I wrote to test for it.
| What I claimed | What was wrong | Where it was corrected |
|---|---|---|
| The unit step increases E in 56% of heads | Pooled across all 24 layers of the wrong checkpoint. On the paper's own layer it is 11% — far weaker, in the paper's favour. | secant#1, title and body |
| A large perturbation may simply jolt the model | Refuted by my own control battery: 60 random edits of identical magnitude, zero repairs. | issue #2 |
| Executed gains of +8.03 and +10.83 above 0.5B | Measured on an off-path quantity. Correctly +3.14 and +3.93 — a third as strong. | issue #15 |
| The winning site is the same token at all four scales | Three of four. The fourth was an artefact of a mis-posed objective. | issue #15 |
| Identity residual ~1e−14 at every scale | The check could not fail: it returned 0.00e+00 for μ = the zero vector. It verified float64 associativity, not the construction. | issue #15, PR #18 |
| Repair follows the authoritative source | Refuted by my own issue #2 before it reached registration, and withdrawn. | protocols/multi-site.md |
| Repair follows the answer token, wherever it sits | Registered, measured, falsified: at 7B an arm editing task prose containing no occurrence of the answer name crossed and wrote the correct program. | PR #20 |
| 48 generated cases; 18 of 18 defeat every prompt | 24 distinct cases, 8 of them counted 4× each. The compose arm is at most 4 distinct cases. | issue #10, title and body |
| Compose cases defeat every source-pointing prompt | Their prompt forbade the nested answer they require, so every control was asked for something impossible. Re-measured with the permission restored, the conclusion survives. | issue #10, PR #23 |
| The repair reproduces at the smallest checkpoint and nowhere above it | True of both Qwen ladders and not a fact about size. Registered, measured, falsified: a 360M model smaller than either sits at gain/deficit 0.47, among the large ones. | issue #15, PR #27 |
Three checks in this work were mutation-tested — the code was deliberately broken to confirm the check notices. Dropping the denominator from the multi-site closed form fails 32 assertions; letting the region search leak outside its region fails 4; swapping the GQA head mapping for a modulo leaves the old tests green and is caught only by the new ones, where it trips the package's own numerical gate. A check that cannot fail is not a check, and this review shipped one before it learned that.
These are the commands that produced every number on this page. They run on CPU with no network and need no pretrained download, and the shipped capture means the whole 109,080-candidate ranking reproduces with no model at all. They are listed so the method is inspectable and so the work can be re-run the moment the repository is opened — which today it is not. Read them as a specification of what was done, not as an invitation you can currently accept.
python test_all.py --require-models # 216 tests, no pretrained downloads
python scripts/study_scaling.py --family qwen3 # the second ladder
python scripts/study_control_battery.py --family qwen3 # ranking against chance
python scripts/study_cases.py # 60 cases, 12 decisions
python scripts/study_executed_search.py # measurement inside the loop
python scripts/scaling_figures.py # every figure, from the data
The figures regenerate byte-identical from the committed data, so the charts in the report and
the JSON in replication/ cannot drift apart without a test noticing.
Access to the fork is the operators' to offer and yours to decline or accept; it will not be opened unilaterally. If you would like to run any of it, or would rather have a narrower public copy carrying only the replication assets — the captures, the protocols, the recorded results and the scripts that read them — that can be arranged on your say-so. Until then this page is a record of what was measured, and the numbers in it are the part you can hold this review to.
The per-case results behind the generator study's 18/18,
10/18 and 9/9 figures were never written to
replication/ — only the aggregates survive. That is its own defect, it is why the
follow-up study records per-case rows, and it is the reason those particular numbers are reported
here as corrected rather than as re-verified.