Files
esh-pfi-infrastructure/persistent-memory.d/2026-08-27-mix-specified-in-the-wrong-unit.md
vh 98e7d4886a memory: snapshot — run 3 gated DO-NOT-SERVE, run 3c held on a tripped breaker
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.
2026-08-27 07:27:41 -07:00

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.