Run 3 trained, gated and dispositioned do-not-serve on a measured 44pp self-harm guardrail regression that its own preregistered rule passed -- a pooled preserve-list test cannot see a single-axis collapse. Run 3c (lr 20x cut, single variable) launched, killed by an Anaheim power-breaker trip at step 80, relaunched, then stopped by the operator at step 22 pending a weekend power triage. Also captured: the corpus mix was specified in a unit the optimiser never sees (45.8% dialogue by context, 24.2% by loss); the dose-response says benefit and damage are one direction in weight space, so the merge-back measures the problem rather than fixing it; four guests including the storage SPOF had onboot unset and never came back from the outage, now fixed with dependency ordering; and a transport failure that enters a measurement as a value looks like whatever you hoped to find -- which found a live defect in another agent's instrument an hour after it was reported. Auto-archived 8 entries to archival-memory.md (Recent decisions: 8, Tried and abandoned: 0); 4 held back on open deferred-work pointers.
2.1 KiB
[2026-08-27] The corpus mix was specified in a unit the optimiser never sees
Run 3's recipe specified its mix as context shares — dialogue 45.8% / kvasir 38.0% / fireball 16.2% — and was approved, built and trained on that basis.
As TRAINED the gradient was 24.2% dialogue and 75.8% prose.
effective_mix, adapter provenance.json, LOSS shares
kvasir 0.5310
fireball 0.2271 prose 75.81%
c2-logs 0.0861
cwm 0.0763
bluemoon 0.0796 dialogue 24.20%
Not a reinterpretation — the trainer wrote both numbers into the same manifest and nobody read the second one, across three runs.
The mechanic
F2/F3/F4 mask loss off dialogue turns while leaving their context in place. So the harder the dialogue filters work, the more prose-dominant the gradient becomes. Every mix ruling was made in the wrong unit.
Why it survived review
infra-ops set kvasir's subset to 38.0% of context because that is the unit the recipe stated a share in, and because fireball's 12% landed exactly on context — which was read as confirmation the recipe meant context throughout. It did. The specification was in the wrong unit and it was matched faithfully, which is a worse failure mode than an arithmetic error because every check agreed with it.
The fix — a RENAME, not a reordering
Harness commit dd5a12e (eitri-smithy). Both numbers were already printed, adjacent, with
context first — and that was enough for three runs of people reading the wrong one. Demoting
context would not have stopped a fourth.
[mix] LOSS share is what the optimiser sees. ctx share is a memory budget, NOT the mix.
[mix] kvasir loss 0.5310 [memory budget: ctx 0.3800]
Calling it a memory budget makes "the mix is 38% kvasir" a sentence someone has to actively mis-say. Found by brokkr-smithy-dev's CPU arm after the run-3 gate.
See also 2026-08-27-dose-response-entanglement — the wedge this finding produced was consistent with four separate failures and was still not the whole story.