Cassette Build Report 050 — The Trainer Loaded the Base and Did Not Use It
S21 began with a convincing training machine whose frozen model entered memory, then left the loss untouched; the repair made the base, operations, recovery evidence, and oracle load-bearing.

Scope note: This report covers the initial S21 training review, its repair, and the closeout. It is about whether the trainer’s advertised update and recovery semantics are real; it does not claim that Cassette is a finished general-purpose training system.
S21 was the first Cassette step that had to learn. Not merely write a child checkpoint, not merely move a cursor, not merely preserve a transaction after interruption. The frozen parent had to remain the authority while a bounded live window changed around it.
The first tree did a great deal correctly. store.py was the sole writer of staged pages and child roots. A killed job could resume from its optimizer step, data cursor, random seed, and page identities. The parent stayed byte-identical while a non-callable branch accumulated deltas. Publication moved only after the child and its dependencies verified. MLX memory was measured. The machine looked like a trainer.
Then the central fact failed. The frozen base was loaded, traced, and retired without entering the update. Four advertised operations—adapter SFT, continued pretraining, offline adapter DPO, and compiled recovery—were labels over one fixed two-by-three calculation. Tier-B calibration records were validated and stored but could not change the result. The independent fixture oracle repeated the same equation, so both sides agreed with impressive precision about the wrong thing.
The page was physically present and mathematically absent.
Opus 5 Max’s first review gave the machinery substantial credit. Its mutation battery showed that several persisted-checkpoint guards could be removed while the fixture stayed green. Kimi K3 Max confirmed the missing base dependency and built a separate numerical oracle. Sol then traced the actual update and refused to call the step training until the base, the operations, and the evidence roles changed the result.
The repaired update makes the dependency visible:
def _update_delta(base_payload, adapter_state, batch, operation):
loss_case, optimizer_case = _TRAINING_CASES[operation]
base_values = _BASE_VALUES.unpack(base_payload)
def effective(value):
base = _dequantize(base_values, value)
return mx.add(base, mx.multiply(scale, mx.matmul(factor_b, factor_a)))
The training update in trainer.py is the relevant change. The parent is decoded through an explicit I8 scale and zero-point path and then participates in the effective weight. Change the base window and the committed delta changes. The base is no longer a loaded prop in a trace. It is an input to the calculation.
The adapter initialization had to move too. A nonzero A factor and zero B factor let B move on the first update and unlock A after that. SFT and continued pretraining now keep distinct durable evidence roles even though they can share a mean-squared-error primitive. DPO uses a pairwise logistic objective. Tier B uses calibration loss to update its recovery tensors. The operation labels no longer carry the entire meaning.
Kimi checked the repair with a rank-one SFT oracle that shared no code with the fixture’s expected calculation. The maximum absolute difference was 0.0. Kimi then ran DPO beside MSE on identical evidence and got different deltas. Two calibration records produced different Tier-B recoveries, while Tier A refused the evidence and Tier B refused its absence. These are narrow tests, but they answer the question the first tree avoided: does the advertised distinction reach the number?
Opus found eight guards that now died when removed. One mutation survived: changing the runtime’s DPO loss-case lookup to MSE left the tests green. Its first explanation was too broad. The persisted manifest and the numerical branch still named and executed DPO. The real problem was quieter. The runtime had duplicated the derivation of which generated dispatch row to validate, so it could validate the MSE row while executing DPO. Sol deleted the duplicate derivation. The operation table now supplies the shared dispatch fact, while the objective specification supplies the independent semantic check.
The harness itself also lied during this review. Opus’s mutation matcher looked for the text 1 passed. Once the fixture grew to three tests, the output 2 failed, 1 passed contained that string and was mistaken for a surviving mutation. The base-removal mutation had actually killed two tests. A positive control at the start of a campaign was not enough; every batch needed its own controls.
This is why the two Entry 62 accounts remain together in the source. Opus described the first machine and its measurement failure. Kimi re-read the moved tree and verified the repair from a separate oracle. Sol made the numerical and persistence authorities agree. Their accounts overlap because the work overlapped. I did not turn the overlap into a cleaner story by deleting the uncertainty.
After the duplicate derivation was removed, the focused trainer and pager surface passed six tests. The full macOS suite passed forty of forty in 64.85 seconds. The ledger was clean. The hostile checkpoint test attacked cursor drift, hidden master state, missing trace pages, false peaks, foreign page and base tuples, substituted codecs, malformed arity, and non-finite values.
S21 closed when the trainer did more than preserve a training-shaped transaction. The frozen base entered the loss. The operations changed the update. Recovery evidence changed recovery. The oracle was separate. The mutation harness had to prove that its own reading of the result was true.
That is the standard I wanted from Cassette. A model is not trained because its bytes were loaded, its process resumed, or its manifest named an operation. It is trained when the claimed authority can be changed, measured, and refused at the point where the result is made.
