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.
3.2 KiB
[2026-08-27] The dose-response says benefit and damage are ONE direction in weight space
vLLM cannot LoRA-serve Gemma-4-26B-A4B at all — it is an MoE and the LoRA manager has no
expert mapping (AttributeError: To support LoRA for MoE model, 'get_expert_mapping' must be implemented, vllm/lora/utils.py:398, v0.24.0). Found by trying it: one container start,
which is exactly what playbook §3.10 exists to buy.
So each scale point was pre-merged instead — merge_and_unload with the adapter's alpha
pre-scaled, which reproduces exactly what a LoRA at scale s would serve, on the same serving
path as the gate. Artifacts held at /tank/erp-tune/serve/merged-run03{,-s075,-s050,-s025}.
scale attractor gain kept noise@31 damage prose@40 cost
s=0.50 0.9684 0.0% 1.0000 0.00pp 0.00pp
s=0.75 0.8966 42.0% 0.9688 3.12pp 6.25pp
s=1.00 0.8049 100.0% 0.5938 40.62pp 15.62pp
first 42% of the gain costs 3.12pp of noise coherence
last 58% of the gain costs 37.50pp more -> 12x worse per point
Every axis is monotone in scale — attractor, distance, marker density, RP length, both coherence measures, even truncation count. No knee anywhere.
The conclusion, which is stronger than an exchange rate
An exchange rate says the trade is expensive. This says there is no trade to make: the adapter learned ONE direction and everything rides it. brokkr's framing, worth keeping: scaling moves you along the direction the adapter already learned; it cannot give you a different one.
That converts the merge-back from a candidate fix into a measurement of the problem. zerofata's MeroMero v1 ships the merge-back as its answer, so it was worth testing — and testing it is what proved it cannot be the answer here.
The T4 mechanism is NOT register capture
pad type base tuned
prose 1.0000 flat mild knee, onset ~1,600 tok
noise 1.0000 flat 1.0000 -> 0.5938 <- SEVERE
The prose-gradient "wedge" predicted prose should be the worst case. Instead prose is the
mild axis and shuffled tokens are where it collapses — a continuation prior has nothing to
continue in shuffled tokens. Every miss is wrong-name: correct format, on task, wrong answer.
State mis-tracking, not register capture.
brokkr: "The tune did not teach it to continue prose — it destroyed its ability to skip text that is not worth reading."
⚠ INSTRUMENT FLOOR — temperature 0 is NOT deterministic under concurrency
same seat, same items, temperature 0, --jobs 8
prose reps 31 0.9375 0.9688 0.9688 spread 3.12pp
noise reps 24 0.7500 0.7188 0.7188 spread 3.12pp
vLLM's continuous batching is not numerically invariant to batch composition. Any eval delta
under ~3.1pp at n=64/jobs=8 is inside the floor. Only --jobs 1 shrinks it; more n averages
over it. Also in auto-memory as
reference_vllm_temp0_not_deterministic_under_jobs.
Corollary: it retro-closes the window-2 concurrency worry — measured dirty-vs-clean divergence was 1.56pp, comfortably inside this floor.
See 2026-08-27-mix-specified-in-the-wrong-unit for the wedge this displaced.