The Archive as an Instrument
Ongoing research. This is an experimental result from active work, not a settled conclusion. The numbers are what we measured and the method is described so you can judge it, but the programme is still running and later experiments may revise what it means. More about this programme.
EXPLORATORY. Not a preregistered study. No new experiments, no training, no GPU, no cost. Reads only the committed results/ bundles.
Program v2 tier 0. Three backlog items in one pass, because they share one loader:
- F10, build the meta-analysis harness over the archive.
- A9, does when the transition happens predict what the run ends up knowing?
- E4: first fit of a transition scaling law, and its variance decomposition.
Decisive computation: over analysis/archive_instrument.py. Output: src/latent_pretraining/analysis/archive.py. Reproduce with analysis/archive_instrument.jsonpython analysis/archive_instrument.py in about ten seconds.
F10: the instrument
latent_pretraining.analysis.archive is now the single loader for committed bundles. It reads experiment.json, run.json, summary.json, metrics.csv, and analysis/representation_trajectory.json into typed records, derives the preregistered transition features once, and emits three tidy tables: per run, per logged step, per capture step and layer. It is standard-library only and does not import torch, so the archive stays readable in an environment that cannot train.
This existed to be built because every pilot in analysis/ carried its own bundle walk, its own transition definition, and its own t-critical table. Four of the five discrepancies the 2026-08-22 review found were consequences of that duplication. There is now one definition of each, unit-tested in tests/unit/test_archive.py.
Regression check. Re-deriving the published H6 screen through the harness reproduces it exactly:
| Quantity | Harness | Published (H6 pilot) |
|---|---|---|
| Runs | 41 | 41 |
| Rise above own baseline | +0.2131 [+0.2082, +0.2181] | +0.2131 [+0.2082, +0.2181] |
| Peak offset from transition | +14.1 [+8.9, +19.4] | +14.1 [+8.9, +19.4] |
| Peak within 50 steps | 100% | 100% |
Inventory. 183 bundles: 133 tiny-gru on synthetic-delayed-copy-v1, 50 tiny-transformer on synthetic-v1. 133 logged held-out accuracy, 175 captured a representation trajectory, 57 are task-only, and 41 are task-only and eligible for transition work.
One thing the harness settles immediately, and it is not good news
The backlog's E4 entry assumed "the archive already seeds three of the four axes free". It does not. Across every committed delayed-copy bundle, only three quantities were ever varied: latent width (36 / 48 / 72), penalty weight (0 / 0.025 / 0.05), and retained rank (tied to width at W/6). Learning rate is 0.005, lag is 4, vocabulary is 32, and batch size is 64 in all 133 runs. The lr, lag, and vocabulary sweeps this project has published came from CPU pilots that wrote JSON, not bundles, so their trajectories are not in the archive at all.
That is a standing cost of the pilot convention and it is worth stating plainly: cheap pilots buy answers but do not accumulate an archive. Anything wanting to re-analyse a pilot later must re-run it.
A9: does transition timing matter to the outcome?
Kill test as written: |Spearman rho| < 0.3 between transition step and final held-out accuracy across eligible archived task-only runs.
Verdict: not answerable from the archive. Not a null and not a signal, the measurement does not have the resolution the question needs, in two independent ways.
The pooled correlation across all 41 runs is -0.679, which looks decisive and is worthless: width sets both variables. Wider models transition earlier (72.5 steps at width 72, 111.2 at width 36) and finish more accurate. Stratifying by width is mandatory, and it dissolves the result:
| Width | Runs | rho | Distinct transition values | Modal tie | Final-accuracy spread |
|---|---|---|---|---|---|
| 36 | 8 | -0.316 | 3 | 62% | 0.0485 |
| 48 | 25 | +0.503 | 3 | 72% | 0.0188 (ceiling-limited) |
| 72 | 8 | -0.444 | 2 | 75% | 0.0048 (ceiling-limited) |
The signs disagree. Only width 48 clears the 0.3 threshold, and it does so in the opposite direction to both other widths. Within width 48 the three contributing studies agree in sign (+0.504, +0.866, +0.308) but each is built on the same two problems:
- Timing is quantised to the logging interval. Every archived study logged every 10 steps, so the transition step takes 2–3 distinct values within a width and 72–75% of runs share the modal value. A rank correlation over three tied levels is a two- or three-group mean comparison wearing a correlation's clothes.
- The outcome is at the ceiling. Final accuracy spans
0.0048at width 72 and0.0188at width 48. There is almost nothing for timing to rank. This is the saturation problemCLAUDE.mdalready warns about, showing up in a new place.
Zero of the three strata have both enough timing levels and enough outcome spread to support the test. Reporting -0.679 as an A9 answer would have been this project's third confounded headline.
Second question: does anything at initialisation predict transition time? Pooled, this looks even stronger (initial final_norm effective rank against transition step: rho = -0.776). It is the same width confound: wider models start with higher effective rank and transition earlier. Within width, everything collapses:
| Width | Strongest initialisation predictor | rho | n |
|---|---|---|---|
| 36 | initial_loss | +0.591 | 8 |
| 48 | init_top_energy_share[embedding] | -0.511 | 25 |
| 72 | initial_loss | +0.252 | 8 |
No predictor is consistent across widths, and the two largest come from n = 8 strata where the 5% critical value for Spearman is about 0.71. Consistent with K1: initialisation does not predict transition time either.
What A9 actually needs, and it is cheap: a dedicated pilot at log_every = 1, on a task with real headroom (the E1 battery), across enough seeds to resolve a correlation. That is CPU minutes. A9 moves from "free, archive-only" to "cheap, needs tier 1": it depends on E1.
E4: first fit of a transition scaling law
Kill test as written: across-seed variance at fixed hyperparameters swamps the hyperparameter dependence, making prediction useless at the precision Bucket C needs.
Verdict: survives, on the one axis the archive varies.
| Width | Runs | Mean transition step | SD | Range |
|---|---|---|---|---|
| 36 | 8 | 111.2 | 6.4 | 100–120 |
| 48 | 25 | 92.0 | 5.0 | 80–100 |
| 72 | 8 | 72.5 | 4.6 | 70–80 |
- Width explains
eta^2 = 0.853of transition-step variance. - Between-cell mean spread: 38.8 steps. Within-cell spread: 5.2 steps, falling to 4.4 once the 10-step logging quantisation is removed in quadrature. Ratio 7.4x.
- Power law:
T ~ width^-0.615,R^2 = 0.859. - Implied scheduling precision: ±10 steps at 95%.
The exponent is the least trustworthy number here, three width points cannot establish a functional form, and the fit is reported for continuity with future sweeps, not as a law. The variance decomposition is the load-bearing part, and it says something the program cares about a great deal.
Program v2's central obstacle is that no online signal leads the transition (the geometry peak sits +2.1 steps after it). E4's premise was that this may not matter if timing is predictable from hyperparameters alone, and set the bar at "within a few hundred steps". On the width axis, at fixed everything else, it is predictable to ±10 steps, an order of magnitude better than the bar, on a transition that lands around step 90.
What this does and does not license. It does not deliver a leading indicator: predicting from hyperparameters is an offline schedule, not an online signal, and it is fitted on one axis with three points, at one architecture, on one task, at one learning rate. It does mean the oracle-timing version of A4 (the transition kick) has a non-oracle successor that is not obviously dead, and that a random-time-matched control is testable against a scheduled arm rather than only a retrospective one. The next thing E4 needs is the lr / lag / vocabulary axes measured as committed bundles rather than uncommitted pilots.
What changed in the backlog
| Item | Before | After |
|---|---|---|
| F10 | tier 0, platform | done |
| A9 | tier 0, free, archive-only | archive cannot answer it; needs E1 headroom task + log_every=1; moves behind tier 1 |
| E4 | tier 3-ish consequence, gated | first fit survives; width dependence is 7.4x seed noise, ±10-step precision; needs the other three axes as bundles |
| E1 | tier 1 platform | now also gates A9 |
Standing caveat carried forward: everything above is one architecture (tiny-gru), one task (synthetic-delayed-copy-v1), one optimizer (AdamW), one learning rate. D8 (does the phenomenon survive SGD?) and E3 (the architecture × task grid) still scope all of it.