← All runs · issue #93 · program: round A complete

#93 kickoff: what four papers changed, the operator's questions answered, and a 3-day recursive program that is ready to launch

analysis + planning 2026-07-25 baseline: #90 PRF exact-k, 600/600 no collapse code launch-ready on 93-mismatch-control-kit round A complete: 5 arms, 20.1 GPU-h, NO winner a5 is the only arm to reverse the gap: -6.18 nats PROGRAM COMPLETE: 12 arms, 14 runs, PRF exact-k holds PRF exact-k IS NOW THE DEFAULT (verl PR #33 merged) FRLR rejected at horizon: crossover at step 424

0. TLDR

The program in one line: five 120-step codec arms race against the #90 baseline, the winner gets a dense-view probe and an adaptive KL controller for 200 steps, and the final config runs 600 steps with validation and OOD evals; every mechanism is implemented, tested, and one command away from launching the moment the dense control finishes.

Final status, 2026-07-28. The program is complete.

DONE c600-a9-anchorq-val600 finished 600/600 on the staging fix, with pg_clipfrac exactly 0 at every one of its 600 steps, confirming the operator's bug is gone. It is also the run that settles the program against its own family: the FRLR gap crosses the incumbent at step 424 and ends 2.12x worse, while the optimizer's gradient median climbs 9.25x. Section 28 predicted exactly this crossing and section 29 scores it. KILLED a10 at step 62 on two registered triggers: the codec's bias is what buys FRLR's entire gap advantage, see section 26. DONE a5b, a6, a7, a8, a9, each scored against a bar registered before its data existed. All twelve arms have now been re-scored on stability rather than reward; the ranking is section 29 and its own page.

a8's terminal val came in at 0.6613, BELOW a7's 0.6713, so the training window and the held-out set rank the two arms oppositely and the honest reading is a tie. On a 499-problem val set that is five problems, smaller than the incumbent's own 0.0120 checkpoint spread. What survives is the weaker but sufficient claim: slowing the Q refresh cost no measurable capability, which was a7's open question. With capability tied, the gap trend is the sole discriminator, and there a8 wins decisively: slope +0.001262 against a7's +0.016351, thirteen times flatter and negative (-0.026533) over 61-120.
cellcodectoken-ISgap @200true drift @200actor/kl_lossterminal valverdict
90-prf-exactk-600PRF exact-koff~14.3no probe0.9085 @6000.6613incumbent, 600 steps
a5bFRLRon + bnorm5.370.0167542.22620.6593FAIL G3
a6PRF exact-kon + bnorm14.130.0267930.29180.5391FAIL G1
a7FRLRoff8.180.0082005.82460.6713best, gap-slope FAIL
a8FRLR, q cadence 20off6.83 @window0.00701 @1500.10640.6613G1+G2-level PASS, slopes FAIL; capability TIED with a7
a9FRLR, anchor-owned Qoff7.00 @199 lowest0.008594.13300.6713flattest LATE trend; slope FAIL at the registered window
a10FRLR, anchor-owned + unbiasedoff14.88 @41-600.00242 @600.1775n/aKILLED @62: gap = incumbent level
c600-a9FRLR, anchor-owned, 600 stepsoff31.10 @5990.0276220.50600.6633gap crosses at 424, grad drift 9.25x
The decision waiting on the operator now has four supports. Across the three probe-bearing cells Spearman(actor/kl_loss, val) = +1.00 and Spearman(probe/kl_dense, val) = -1.00: the gated metric is ordered the wrong way against capability in every cell, and the codec-free one is ordered correctly in every cell. a7 sits at 5.82 nats, inside the historical 3-8 nat collapse band, holding the best capability measured. Any gate on that band kills the winner. Recommendation: demote actor/kl_loss to a labelled diagnostic, promote probe/kl_dense, require a cadence-5 probe on every cell, gate promotion on val and OOD.

Ledger about 43 of 100 GPU-h. a9 and a10 are chained as one sequential process on the box, so neither handoff idles the GPU; if a9 dies before step 30 the chain diverts to the 600-step durability run rather than repeating a9's failure in a10. The three finished cells' checkpoints (37G each, R2 sink was off) are uploading to R2 now, verified byte-exact before any local delete.

1. The operator's questions, answered (committed before reading, corrected after)

Protocol: answers were written down first from current understanding, then two dedicated subagents read the four papers in full, then each answer was re-checked. Changes are flagged.

Q1. Does PRF distort the weights more than dense training does?

No evidence that it does, and the papers explain why the fear is misdirected. "PRF accumulates extra movement" was a statement about the measured policy KL, not the weights. The codec-view KL mixes real policy drift with the codec's distortion of the measurement itself; the probe (section 4) is the instrument that separates them, and until it runs the honest bound is "at most ~60x dense in the codec's own view, far less in the real view". On the weights directly: movement is tiny in every regime (cosine-to-base ~1.0, relative change 0.03-0.13 percent), and the papers add the decisive detail that this is below the bf16 realization floor of 0.195-0.391 percent per weight, so most individual weights are bitwise unchanged. Capability evidence agrees: val held 0.451 to 0.661 over 600 steps and the 10-benchmark OOD suite showed parity with dense at step 100.

Refined after reading: the structural protection (KL-leashed, off-principal, spectrum-preserving updates) is conditional on the update stream being unbiased. Unbiased codecs (PRF, stochastic rounding) keep the protection; a biased coherent codec (PowerSGD held-Q) defeats it silently at unchanged update magnitude, which is exactly the early-layer-shift collapse we measured. Consequence: monitor geometry (spectral shift, principal angles), not weight norms.

Corrected bookkeeping: the train-inference gap series rose 13.88 to 14.66 but 87 percent of that is the sampler sharpening; the training-view component crept 14.46 to 14.74 (+0.28). And "RL updates 5-30 percent of parameters" is probe-dependent: bf16-aware probing revises it to ~46 percent changed for our 1.5B math class.

Q2. How do we exploit the RL-update properties (sparse subnetworks, off-principal movement)?

Three sound mechanisms adopted; one of our pre-reading ideas withdrawn.

Q3. Is unbiased activation compression a regularizer or just a cost?

The evidence so far favors "benign, possibly mildly regularizing" for unbiased codecs and "destructive" for biased ones. OOD dose-response: the compressed policy matched dense on all 10 benchmarks at step 100 and beat dense@150 on two, despite a ~1000x codec-view KL ratio. The #89 dropout arm (the classic noise regularizer) was benign; PowerSGD (biased) collapsed. The papers supply the mechanism (unbiased noise leaves the geometry routing intact; biased error defeats it), and the controlled test is now scheduled where it belongs: round C compares the winner to the dense control on the OOD suite at matched dense-view training KL, probe-measured. Pre-registered expectation: parity or slight codec advantage.

2. What the four papers say (and what we adopted)

papercore findingwhat we adopted
2505.11711 RL Finetunes Small SubnetworksRL updates 5-30 percent of parameters yet the update is 99+ percent full-rank; the subnetwork is consistent across seeds and algorithms; training it alone recovers full accuracy.No naive low-rank compression of updates or sign traffic; LayerNorm droppable from sign traffic; subnetwork consistency motivates mask-based ideas but see next row.
2511.08567 The Path Not TakenThe visible sparsity is a precision artifact plus geometry routing bias; with a bf16-aware probe it is 36-92 percent. Three gates: KL leash, off-principal steering, bf16 realization floor. Safe mask (~70 percent) tracks dense RLVR; principal-aligned training is worst; spectrum preserved.Safe-mask sign traffic + bf16-delta refresh encoding (phase 2); geometry monitors (this program); the conditional-protection frame for biased vs unbiased codecs; RELEX cautions.
2602.01826 Mismatch is an Optimization ProblemGradient noise and the train-inference gap escalate in tandem; gradient error bounded by C times response-length squared; triggered LR halving stabilizes where constant LR collapses.The static/creep decomposition of our gap; log E[rho] slope as the noise early-warning; a dormant LR brake (detect and log; never primary, since our collapse mode does not discriminate on update magnitude); response-length trigger for phase 2.
2606.08779 Discrepancy-Constrained MDPConstrain the per-token absolute probability difference between training and inference views under a budget c via a dual multiplier; ratio-free, so it survives where importance sampling degenerates; never drive the gap to zero (tolerance region).The controller's dual/PI form, bounds, and nonzero setpoint; CVC mode (b) advantage shaping with dual lambda; the principled reason token-IS is dead on PRF but this is not.

3. Fresh data: the baseline pair

Reference KL: the baseline pair the program must beat PRF exact-k (run 90, codec view) dense control (90-dense-600, live) 0.0001 0.001 0.01 0.1 1 0 100 200 300 450 600 global step log scale; G(t) = ratio of the curves: 17@50, 41@100, 53@150, 60@288, decelerating
Why ratio-based fixes are dead on PRF: token overlap collapses 170x E[rho] = k3_kl - kl + 1 (mean untruncated token-IS weight) 0.0001 0.001 0.01 0.1 0 100 200 300 450 600 global step IS-viability floor used by the program

Dense control (live, protocol-identical): reference KL 0.0074@288 and concave; its train-inference gap settles at ~0.0002 nats with E[rho] = 1.0000. The gain G(t) between the curves grew 17 to 60 and is decelerating; whether the excess is real dense-view drift or mask adaptation is exactly what the probe measures in round B. Baseline gate card at step 100-120 (what every round-A arm must beat): reference KL 0.156-0.203, gap 14.24 nats, E[rho] 0.0014, training score 0.63-0.68 with slope 0.0032/step, entropy 7.81.

4. The program (issue #93, plain language)

Baseline to beat: the #90 PRF exact-k 600-step run. One clarification the operator asked for: the every-25-step dense pass is a probe: it recomputes the batch's log-probabilities once with the codec switched off, measurement only, and never touches the weights. It feeds an adaptive coefficient on the always-on reference-KL leash (a dual-ascent controller with a nonzero setpoint tied to the dense control's curve). The channel that touches weights on a cadence remains the anchor (sign of a gradient EMA every 20 ticks, modeling the real-world slow sync).

The 3-day loop at a glance (~35 GPU-h in 8 runs, strictly one at a time; hours to scale) R0 dense finish (6h) A1 sr b1 SR (3h) A2 RN ctl (3h) A3 parity (3h) A4 PRF+CVC (3h) A5 FRLR+IS (3h) B1 winner+controller (4.5h) C winner 600 + val + OOD (13h)
roundrunsstepswhat it decides
R0 (running)dense control finishes600full G(t), val at 300/450/600, the controller setpoint table
A: codec ladder5 (sr_quant SR, sr_quant RN, byte-parity hybrid, PRF+CVC, FRLR+token-IS)120 eachwhich arm shrinks the gap at the source without paying KL; SR vs RN decides the unbiasedness mechanism; CVC decides "can the gap be trained down"; FRLR+IS probes the never-tried small-gap corrected-drift quadrant
B: control plane1-2200winner + probe + controller; first direct measurement of real dense-view drift under compression; controller must hold it under 2x dense
C: validation1600beat the #90 card end to end: val parity, no tripwires, OOD parity vs dense (also the regularizer test)

Rules: validation only in round C (gate cells use the free training reward slope); checkpoints only in round C (R2 sink); every decision rule is pre-registered in the issue; anything ambiguous goes to the analyst verdict, not a relitigated debate. Full equations for all nine mechanisms are in the issue body, section 4.

5. Implementation status (branch 93-mismatch-control-kit)

itemwhatcommittestsknobs
I1sr_quant codec: blockwise-absmax stochastic-rounding activation quantization, forward + backward, SR/RN modes, boot gated891b533in the 205-test pre-program baselineCOMM_EFF_QUANT_BITS / _BLOCK_SIZE / _ROUNDING
I2log-ratio distribution metrics (p10/p50/p90, std, agree_frac_1nat): the tail-variance early-warning the optimization panel asked for001769fein baselinenone (always on with rollout correction metrics)
I3dense-view probe every K steps (codec-off logprob recompute, measurement only) + kl_gain + dual/PI controller on the reference-KL coefficient + dormant LR-brake detectorc260642438 new, all passCOMM_EFF_PROBE_EVERY / _CTRL_ENABLED / _KL_TARGET_TABLE / _KL_TARGET_FLOOR / _KL_TARGET_GAIN / _CTRL_KI / _CTRL_KP / _CTRL_BETA_MIN / _CTRL_BETA_MAX
I4CVC both modes: (a) CE loss term on the codec view with warmup ramp, (b) DC-GRPO ratio-free advantage shaping with dual lambdaca158ef919 new, all passCOMM_EFF_CVC_LAMBDA / _WARMUP_STEPS; COMM_EFF_DC_ENABLED / _ETA / _TARGET (explicit, fail-loud) / _LAMBDA0 / _LAMBDA_MAX
I5byte-parity subset quantization (PRF exact-k subset + 2-bit block SR, 1233 vs 1232 incumbent bits) + the run_93_cell.sh launcher for every cell in the matrixf563c3cd9 + 10 new, all pass; bash -n on all launchersCOMM_EFF_QUANT_SUBSET_K; ROLLOUT_IS / ROLLOUT_IS_THRESHOLD; run_93_cell.sh ARM contract with DRY_RUN
I6FRLR r48 k28 + decoupled token-IS threshold 2.0 (the never-tried quadrant)config only (arm a5)launcher-lint asserts the resolved configARM=a5

Suite: 281 tests pass at HEAD f563c3cd; the branch is pushed to origin so any cell launches on the box with one command (DRY_RUN=1 echoes the resolved config first). A single short verification pass over the final wiring returned LAUNCH_READY with all five checks passing (default-off safety, probe correctness, controller delivery, launcher contract, within-step identity). Known caveats recorded in the issue: the round-B/C setpoint table must be baked from the finished dense control before b1/c can launch (the launcher fails loud without it), and the step-600 val must be backfilled from train.log per the known WandB teardown race.

6. The 3-day recursive loop and who runs it

A dedicated planning subagent published the plan of record into issue #93 (deep tier, labeled awaiting:approval). It is ONE long-running recursive trial-and-error experiment, up to 3 days on exactly one H200, under a strict loop: run, observe, decide, next run, with every round designed from what the previous round found. One box serves every consecutive cell; no teardown between cells.

loop stagewho runs itwhat happens
1. launchexperiment-runnerbuilds the payload, launches the cell from 93-mismatch-control-kit with one command, registers the ledger row, tees the heartbeat log
2. observe (every cycle)machine-monitorcheap numeric health polls: step advance, ppo_kl identity, reference KL, entropy, reward, gap, grad norm, memory, NaN
3. observe (anomaly only)training-log-monitorthe classifier, dispatched only when the machine-monitor escalates
4. gate readWorkflow fan-outpulls the finished cell's WandB history, computes the pre-registered gate numbers
5. decideanalystONE bounded PASS / REVISE / STOP verdict per cell against the fixed gates; no verification loops
6. nextloopwithin a round the next cell auto-launches on a non-STOP verdict (no idle GPU); round boundaries are hard money/kill reads
7. closelog-writerSUMMARY row + PR when the program ends

7. Round A results: five arms, 20.1 GPU-h, no winner

Round A ran to completion on 2026-07-25: a1, a3, a4 and a5 to 120 steps each, a2 stopped at step 60 under its pre-authorised kill. Every threshold below was committed in writing before a4 and a5 produced a single step, so none of it can have been fitted to the results.

The blind-committed lexicographic criteria produce no winner. Eligibility leaves the incumbent, a4 and a5; the drift veto then eliminates a4 and a5. a3 is excluded on wire budget by 0.5 bits, an overdetermined exclusion since it also fails both objective clauses. The incumbent survives its own vetoes by construction and fails the objective at 3.7x the settling bar.

armwire bitsV1 drift slope @100-120V2 grad max/meanV3 score levelgap slope 61-120gap levelE[rho]
dense (uncompressed)n/a0.0000160.07 / 0.050.6587-0.0000000.00021.0000
incumbent PRF exact-k12320.0021764.17 / 1.650.6577+0.00186714.24580.0021
a1 1-bit SR23040.003887 (1.79x)0.70 / 0.650.6529+0.00326513.75110.0025
a2 1-bit RN2304killed@60, 6.86x, z=+159.15 / 8.20n/an/an/an/a
a3 parity hybrid1232.50.001616 (0.74x)5.25 / 2.890.6569+0.00130014.99240.0017
a4 PRF + CVC-CE12320.003955 (1.82x)3.62 / 1.840.6491+0.00168514.24730.0025
a5 FRLR + token-IS12320.004584 (2.11x)0.20 / 0.140.5908-0.0020494.48420.3985

a3 and a5 are complementary failures. a3 clears every safety veto and moves the objective nowhere. a5 moves the objective decisively and fails two vetoes. No arm clears both, so the pre-registered decision ladder has no matching row and the registered judgment fallback governs: escalate to the operator, launch nothing.

8. The one figure that matters: a5 is the only arm whose gap goes down

The program's registered success criterion is a train-inference gap that settles. Four compressed arms rise. One falls.

0 4 8 12 16 1 30 60 90 120 training step nats a5 4.36 incumbent 14.27 dense 0.00 a1/a3/a4
armgap at step 1gap latechange
incumbent13.879414.6529+0.7735
a113.182213.7523+0.5701
a314.528414.9928+0.4645
a413.799414.2482+0.4487
a510.75644.5810-6.1754
dense0.00040.0002-0.0003

Named series direct-labelled; a1, a2 and a3 drawn as one muted band. Palette validated for colour-vision deficiency (worst adjacent pair ΔE 9.2 deutan, 27.6 normal).

The fall is genuine codec convergence, not a lower instrument offset: a5's training-view log-perplexity fell 9.9623 to 4.4848 while its sampler held near 0.19, and the gap is essentially the difference between the two throughout. FRLR's rank-48 basis warm-starts into an accurate reconstruction.

But a5 is not promotable, and the reason is not the gap. Its reference-KL slope accelerates monotonically (0.000225 to 0.004619 across windows) where the incumbent's peaks at steps 61-80 and then settles. Matched on progress rather than step, a5 shows 1.508x the drift per unit learning (0.8619 versus 0.5717 nats per unit score). Per unit of capability actually acquired it moves further from the base model.

9. Drift: a5 is closer to the base model at every measured step, and still fails the veto

0 0.05 0.1 0.15 0.2 10 30 60 90 120 training step nats a5 0.165 incumbent 0.189 dense 0.004

Only the three arms whose reference KL is comparable in level are drawn. a1 (2.284 nats) and a3 (0.923) are excluded because each carries a large stochastic-rounding view offset, so plotting them on one axis would repeat exactly the incomparable-levels error documented in section 10. a4 sits at 0.206, close to the incumbent. Series start at step 10 to exclude a5's warm-start transient, which peaks at 2.798 nats at step 2.

The veto fired on a leading indicator (slope), not a realised harm (level). a5's reference-KL level sits below the incumbent's in every window: 0.375x at 61-80, 0.584x at 81-100, 0.838x at 100-120, and 0.980x at step 120 exactly, with the fitted crossing about step 122.

Whether that acceleration saturates is not resolvable from 120 steps. The incumbent's own slope saturates after step 80 and its real 600-step trajectory is benign (0.19 at 120, 0.31 at 200, 0.45 at 300, 0.62 at 400, 0.91 at 600), nowhere near the 3-8 nat collapse band. An earlier draft of this analysis extrapolated a5's power law (exponent 2.65, self-consistent to 4 percent) to 3 nats by step 334 and stated it as fact; that was overclaimed from a 2.8x horizon extension and is recorded here as conditional.

10. What round A established as science

Coherence, not magnitude, gates capability damage

a1 and a2 differ in exactly one environment variable, making a clean single-knob factorial. Varying noise energy 2.7x at zero bias moved drift not at all. Flipping to biased rounding at identical wire budget moved it 6.9x (z = +15). Provenance is unusually tight: one shared launcher branch, identical logical wire budget, and 6 of 7 confinement counters bit-identical at matched step 60.

The theory then predicted a5's failure

Token-IS at threshold 2.0 downweights about 87 percent of tokens, which is a strong constant-direction estimator bias. So the a1/a2 law predicts a5's drift failure from arms it was never fitted to, and three checks agree: the fitted exponent 2.65 is bias-like (constant-direction bias grows as t squared, unbiased noise as t, and step size moves only the coefficient); a5 shows about 25x the incumbent's drift per unit gradient norm despite 12x smaller effective steps; and updates dominated by the ~13 percent agreement-region tokens explain the falling gap and the rising drift simultaneously. This resolves what looked like a paradox: smaller steps producing more drift.

Most of the headline metrics were measuring instruments, not behaviour

This cost two near-miss decisions and is now quantified. The codec inflates the entropy reading about 43x: the dense control reads 0.1815 nats with its own sampler at 0.1792, agreeing to 1 percent as they must for an uncompressed run, while every compressed arm reads 7.79 to 7.94 against a sampler value of 0.18. Separately, 87 percent of a3's apparent gap-level disadvantage was step-1 offset measured with zero training done. a5's falling entropy read as textbook collapse and was nearly killed on it; Pinsker plus Fannes-Audenaert over the 151,936-token vocabulary caps any true policy-entropy change at 0.575 nats against an observed 2.24, so the drop was mathematically forced to be view movement.

CVC in cross-entropy mode cannot work by construction

The gap moves through rollout-view sharpening (-0.80 nats); the training view CVC-CE targets moves -0.035. Matched-window slopes agree within one HAC standard error in all five windows and a4's level is slightly higher. It bought nothing measurable (z = -0.91) for 82 percent worse drift. That is direct evidence for the registered DC-mode fallback, which is ratio-free.

Precision allocation is closed at deployable budget

Measured elasticity 0.494 nats of gap per e-fold of noise energy implies 6.5 to 8.5x the wire budget to reach the target. A pre-registered prediction that a3 would land near 13.6 nats failed (actual 14.99) for a structural reason: deletion and quantization are orthogonal variance axes (the deletion term is 18.948 for the incumbent, 2.116 for a3, 0 for a1), so a one-parameter fit through two arms cannot reach their mixture.

11. What happens next, and what is still missing

Recommended: one pre-registered 120-step probe, about 4 GPU-h, before committing 28 h to rounds B and C. The knob is rollout_is_batch_normalize, which defaults to False and which core_algos.py:2409 documents as normalising IS weights to mean 1.0. It restores about 6.03x of the observed 12.55x gradient attenuation. An earlier draft recommended widening the IS threshold instead; that was wrong, because only 0.33 percent of tokens sit at the cap while 88.4 percent are in the low tail, so raising it buys at most 1.11x.

Three riders fix round A's structural gaps: save checkpoints at 0/60/120 (round A saved none, so none of these five arms can ever be re-analysed); log actor-versus-reference KL through the anchor's existing paired dense replay, which yields a true-view drift channel essentially free and retires the codec-view ambiguity; and run step-120 validation plus two OOD benchmarks.

The deepest open objection. Nothing in round A is linked to capability. No validation, no OOD, no checkpoints. This program's own earlier work found a compressed arm matching dense on all ten benchmarks despite roughly 1000x the reference KL, with damage appearing only at collapse. So gap and drift levels are not capability measures pre-collapse; they are defensible only as collapse lead indicators. The proposed re-anchoring is from gap level to predicted time-to-collapse in the dense-view channel, subject to the wire budget, with step-0 and terminal validation plus saved checkpoints made mandatory in every future cell so a capability dose-response accumulates for free.

Ledger at the boundary: 20.1 of 100 GPU-h, about $67. Awaiting the operator's decision; nothing is launching.

12. The probe round: two cells, and the incumbent still stands

Round A ended with no winner and one live lead, a5's falling gap. Two cells followed, each pre-registered before launch with thresholds hardcoded into the scoring script, because a bar that can be passed on the command line is not a pre-registered bar.

a5b: FRLR plus token-IS plus batch normalisation

gatemeasuredbarcall
G1 learning, score level0.6277≥ 0.6248COIN FLIP +0.52 Newey-West SE, bootstrap CI [0.6173, 0.6389] contains the bar, P(pass) 0.629
G2 gap level4.4486< 14.2458PASS 0.31x
G2 gap slope+0.000358≤ +5.0e-4pass, but one sample flipped it
G3 drift slope+0.008091≤ 3.264e-3FAIL 2.48x

Two things about that scorecard are worth more than the verdict. G2's slope clause is not a well-posed test, and this was demonstrated rather than argued: at 20 rows it read +0.001408, a fail at 2.8x, and adding step 120 moved it to +0.000358, a pass. The gap oscillates about 0.295 nats inside the 20-step window while the bar targets 0.010 nats, so a 20-step slope reports oscillation phase, not trend. It is recorded as passed and uninformative, and it would have been discounted had it failed.

And a5b validated at parity. Its terminal val is MATH accuracy 0.6593 against the incumbent's 0.6613 at step 150 and 0.6633 at step 300, while carrying 2.45x the incumbent's entire 600-step reference KL. The incumbent's own val wobbles across a range of 0.0120 between its four checkpoints and ends exactly where it started, so a5b sits inside its noise floor. The verdict's reasoning, that this was a bad trade under the rule against damaging the base model, was contradicted by that measurement. Section 13 explains why, and the explanation is not the one the verdict assumed.

13. The finding that changes the program: codec-view drift is not drift

a6 carries the same weighting as a5b on the incumbent's codec, and both cells run a dense probe: a forward pass on the same weights with the codec silent, no backward and no weight change. So probe/kl_dense is the policy's KL to the reference, and actor/kl_loss is that quantity seen through the codec.

A. codec view (actor/kl_loss) nats 0.00 0.23 0.45 0.68 0.90 0 50 100 150 training step B. codec FREE (probe/kl_dense) nats 0.000 0.003 0.006 0.009 0.012 0 50 100 150 training step a5b, FRLR + token-ISa6, PRF + token-ISincumbent PRF, no IS

Both panels are clipped to step 150, a6's extent when the figure was drawn, so the two arms are compared over an identical range. Left: what the matrix was gated on, where a5b sits far above a6 and above the incumbent. Right: the same two runs measured with the codec silent, where a6 is the higher line. The vertical scales differ by roughly 75x and the ordering of the two arms reverses between the panels. An earlier draft of this figure ran each series to its own last step, which let a5b's longer curve overtake and made it read as worse in both panels: the same cross-window error this report warns about, in graphical form.

a5b's "2.23 nats of drift" is 0.0168 nats of drift and a 133x measurement offset

stepcodec viewcodec FREEinflation
250.003480.00025213.8x
1000.190110.00385749.3x
1500.806990.00871092.6x
2002.226160.016754132.9x

This dissolves the val result rather than deepening it. a5b validating at parity was never surprising, because the base model was barely moved. No appeal to damage being collapse-only is required.

The two channels rank the arms in opposite order

channela6 (PRF)a5b (FRLR)who looks worse
codec view, 81-1000.080370.14971a5b, by 1.86x
codec FREE, step 1000.0065610.003857a6, by 1.70x

In codec view a6 is the safest arm in the matrix, with a drift slope of +0.001404 against the incumbent's +0.002176. In truth it drifts more than a5b, and the ratio widens: 1.22x, 1.44x, 1.70x at steps 50, 75, 100. The mechanism is the one the probe was added to test. PRF exact-k draws each mask from a fixed stationary distribution, so its offset is roughly constant and the inflation falls, 134.6x to 14.3x. FRLR refreshes its basis every step, so its offset adapts and the inflation rises, 13.8x to 132.9x. Codec-view drift is a real quantity times a codec-specific, time-varying, non-monotonic factor spanning an order of magnitude in each direction.

What this invalidates. Any cross-codec comparison of actor/kl_loss, which includes round A's drift column and the V1 veto as applied across arms. Round A ran no probes at all, so its drift numbers cannot be repaired retrospectively. Listed as open rather than refuted: the a1/a2 factorial behind "coherence, not magnitude". That was a within-codec-family comparison at identical wire, so it may well survive, but rounding mode is exactly the kind of change that shifts a view offset, and neither arm has probe data. Unaffected: the gap findings, established structurally at step 1 and cross-checked against the dense channel; the wire budgets, computed from source; and a5b's val, a direct capability measurement.

14. a6: batch normalisation is gap-conditional, and it explodes at 14 nats

a6 fails G1 at 0.4854 against the 0.6248 bar, 0.74x the incumbent, and it is not the onset delay that a5b showed. a5b closed from 0.71x to 0.98x across this span; a6 sits flat at 0.79x, 0.76x, 0.76x, 0.74x, 0.78x and does not move. Same weighting, same normalisation, opposite trajectory, so the deficit is an interaction rather than a property of the weighting alone.

windowa5b ESSa6 ESSa5b IS meana6 IS meana5b grad_norma6 grad_norm
41-600.23570.00190.17720.00240.669229.79
81-1000.26960.00070.17320.00070.964741.65
121-1500.26440.00060.15860.00050.698757.12

a6's effective sample size is 0.0006, so a 128-sequence batch does the statistical work of about 0.08 sequences, with 99.97 percent of tokens in the low tail. rollout_is_batch_normalize divides by the mean weight, so at 0.0005 it amplifies the surviving mass by roughly 1600x to 2000x, and that mass rests on a handful of tokens. Gradient norm reaches 57.1 against the incumbent's 1.73, a factor of 33, still climbing, with a maximum of 248.8 excluding the step 1-3 transient.

The cause is the gap itself. The weight is exp(log πtrainer − log πrollout). At PRF's 14.1 nats that exponential is essentially zero for nearly every token; at FRLR's 4.4 nats the mean lands at a workable 0.17. The amplification factor is 1/mean_weight and mean_weight shrinks as the gap grows, so batch normalisation converts a large gap into a gradient explosion.

This reverses an earlier reading. From a6 matching the incumbent's gap, an interim note concluded that token-IS buys nothing on the gap and could therefore be dropped from future FRLR cells. The first half stands. The inference is backwards: FRLR's low gap is precisely what makes the weighting usable at all. They are complementary, not independent. A cheap guard follows directly, namely refusing the knob whenever the measured mean IS weight falls below about 0.05, which a5b clears at 0.17 and a6 misses by 100x.

Health is impaired rather than degenerate: entropy flat at 7.8086, aborted ratio 0.0000, score still slowly rising, response length falling from 674.7 to 592.7.

15. Running now: a7, FRLR with no token-IS at all

The two finished cells jointly establish that the 3.2x gap reduction is FRLR's alone, since a6 reproduces the incumbent's gap to 0.8 percent while carrying the same weighting, and that the weighting is only viable because the gap is low. Neither shows the weighting is necessary. The corner of the design nobody has run is FRLR on its own.

token-IS offtoken-IS on + bnorm
PRF exact-kincumbent: gap 14.25, learns 1.00xa6: gap 14.14, learns 0.78x, ESS 0.0006
FRLR r48/k28a7, running nowa5b: gap 4.45, learns 0.98x, true drift 0.0168

a7 answers two questions in one cell. Does FRLR alone deliver the gap win with no importance-sampling estimator at all, and therefore no ESS, no truncation bias, no normalisation amplification and no onset delay? And does token-IS add true, codec-free drift? a7 against a5b is the same codec with the weighting on and off, with a dense probe on both, which is the one attribution that was otherwise impossible because the incumbent has no probe.

Four predictions are registered so the read is falsifiable: gap lands at 4.2 to 5.0 nats; learning clears 0.6248 without a5b's onset delay, so its score at 41-60 exceeds 0.3728; codec-free drift at step 200 comes in at or below a5b's 0.016754; and no rollout_is_* metrics appear at all, which is itself the check that the arm is configured as intended. Codec verified byte-identical to a5b by diffing the resolved config, so the only difference is the weighting.

16. The terminal validations: the drift gate is anti-correlated with capability

Both probe cells ran a terminal validation, which round A did not. Put the gated quantity next to the capability it was supposed to protect.

cellcodec-view drift @200codec-FREE drift @200terminal valvs incumbentgate said
incumbent0.9085 @600no probe exists0.6613 @1501.000xreference
a5b FRLR + token-IS2.22620.0167540.65930.997xFAIL 2.48x
a6 PRF + token-IS0.29180.0267930.53910.815xPASS

Read the second and fifth columns together. a5b carries 7.63x a6's codec-view drift and has 1.22x its capability. The registered gate passed a6, whose drift slope of +0.001404 beat the incumbent's +0.002176, and failed a5b at 2.48x over threshold. The capability outcome is the exact reverse of both calls.

So the earlier phrasing in this report was too gentle. Section 13 said codec-view drift is not a valid cross-codec comparison. On this pair it is worse than that: it is anti-correlated with capability. A veto that reliably points the wrong way is more harmful than no veto, and round A killed arms on it. The codec-free channel gets the sign right, with a6 at 1.60x the true drift and 0.82x the validation accuracy.

What a6's validation does not show

It is not damage below baseline. a6's val of 0.5391 tracks its own training score of 0.4932 at step 200, and both arms started near 0.357, so a6 improved on the base model and simply improved less. Calling it capability damage would overstate the evidence.

What it does show is movement without benefit. Taking the common starting score as a proxy for base val, which is a proxy because both cells ran with validation before training disabled:

celltrue driftcapability gaineddrift per unit gained
a5b0.0167540.3020.0554
a60.0267930.1820.1471

a6 moved 2.66x further from the base model per unit of capability acquired. That is what an effective sample size of 0.00067 and a gradient norm of 64 actually cost: not a broken model, an inefficient one that spends weight movement without buying accuracy.

Neither recorded verdict changes. Both cells were scored against bars registered before their data existed, which is the only reason this evidence is worth anything.

17. a7: FRLR with no importance weighting, and a prediction I mis-specified

a7 is the corner of the design nobody had run. It answers the two questions a5b and a6 left open, and at step 51 of 200 it has already settled the first.

windowgapscoregrad_norm
incumbenta5ba7incumbenta5ba7incumbenta5ba7
2-2013.74955.68155.65090.36030.35750.36552.13913.4376.391
21-4013.84504.54744.52070.39200.35240.38831.8450.6422.273
41-5114.01674.72784.47490.49340.36040.48311.8630.6201.718

The gap win is the codec alone, confirmed from both sides

a7 carries no importance weighting of any kind and reproduces a5b's gap to within 5 percent at every window, the same 3.1x reduction at the same 1232-bit wire. Together with a6, which carried the weighting on the incumbent's codec and reproduced the incumbent's gap to 0.8 percent, the attribution closes from both directions: token-IS contributes nothing to the gap and FRLR contributes all of it.

Token-IS caused the onset delay

a7 shows no onset delay at all, tracking the incumbent from the first window and reaching 0.979x by 41-51 where a5b sat at 0.730x and had not begun learning. Gradient norm tells the same story: a7 runs at 1.72 against the incumbent's 1.86, where a5b was suppressed to 0.62 by the IS weights and a6 amplified to about 30 by normalisation at a large gap. a7 is the only compressed arm in this program whose gradients look normal.

A prediction I mis-specified, recorded before the data lands rather than after. I registered that a7's codec-free drift at step 200 would come in at or below a5b's 0.016754. It is already 2.10x a5b's at step 50 (0.001576 against 0.000752) and widening, so it will probably fail. But that prediction conflated absolute drift with harmful drift. a7 gained 0.126 of score by 41-51 where a5b gained 0.003, and a model that learns must move its weights, so suppressing learning suppresses drift trivially, which is precisely what token-IS did to a5b. The defensible measure is drift per unit capability gained, the same one that made a6 look bad: 0.0125 for a7 against 0.25 for a5b here, though that flatters a7 while a5b has barely started. P3 as written is likely to fail and its failure should not count against a7, and this is logged at step 51 so that discounting it later cannot look like moving a goalpost.

Nothing is settled until the registered window at 100-120 and the terminal validation. But no previous cell has had this combination: the full gap reduction, incumbent-speed learning, normal gradients, no importance-sampling machinery, at the incumbent's exact wire budget.

18. a7's terminal validation, and the sharpest observation in the program

All three probe-bearing cells finished with a terminal validation, which round A did not have. Putting the gated quantity beside the capability it was meant to protect gives the program's clearest result.

cellactor/kl_loss @200codec-FREE drift @200terminal val
a6 PRF + IS + bnorm0.29180.0267930.5391
a5b FRLR + IS + bnorm2.22620.0167540.6593
a7 FRLR, no IS5.82460.0082000.6713

Spearman(actor/kl_loss, val) = +1.00. Spearman(probe/kl_dense, val) = -1.00. Higher codec-view "drift" goes with better capability in every cell; higher real drift goes with worse capability in every cell. With n = 3 a perfect ordering arises by chance one time in six, so this is consistent evidence rather than proof, but the effect sizes are large and it matches the mechanism in section 13.

a7 carries 5.8246 nats of actor/kl_loss, inside the 3-to-8 nat band this program has treated as its danger zone, while holding the best capability ever measured here. Its real drift is 0.0082 nats and its inflation factor 710.2x. Any gate defined on that band would have killed the winning arm.

The val, stated carefully

a7's 0.6713 is +0.0090 over the incumbent interpolated at step 200, and the incumbent's own checkpoint-to-checkpoint spread is 0.0120. So this is not a clear win over the incumbent: a7's margin is smaller than the reference's own variability. The fair framing is the step count, since a7 reaches at 200 steps what the incumbent needed about 450 steps to reach, and it exceeds three of the incumbent's four checkpoints.

An observation that cuts against this program's own premise

a7 cut the train-inference mismatch 3x and its capability advantage is within the reference's noise. Meanwhile the incumbent ran 600 steps at 14.6 nats of mismatch and finished at the same validation accuracy it had at step 150.

The most parsimonious reading of all the evidence is that at this model scale and horizon, a 14-nat train-inference mismatch is simply not harmful, which partly undercuts minimising it as the objective. That is a hypothesis rather than a proof: the mismatch may bite beyond 600 steps or at larger scale, and this program has not tested either. But it belongs on the table alongside the codec comparison.

19. a8: the slow-Q lever, and a design flaw in my own cell

a7's one real defect is that its gap stops settling. The mechanism points at a single existing knob: frlr_q_cadence=1 means Q is rebuilt every step and chases a policy that a7 moves faster than any prior arm, so the basis lags further as learning accelerates. a8 is a7's exact codec with the cadence raised to 20, mirroring the PowerSGD governance in which Q moved only at anchor fires.

gap windowa7, cadence 1a8, cadence 20
2-205.650910.7863
21-404.520711.7151
41-554.48079.5046
slope 21-55-0.00141-0.09397

At step 55 a8's gap is about 2x higher in level than a7's though falling fast, and its inflation at step 50 is 376.7x against a7's 71.6x, the opposite of what the hypothesis predicted.

A confound I should have caught when designing the cell. At cadence 20 over 200 steps Q receives only 10 power iterations in total, where a7 received 200. So a8 changes both the view stationarity, which was intended, and the total amount of Q fitting, which was not. Its high gap is more likely an under-fitted Q than a stale one, and cadence 5 (40 refreshes) would have separated the two. a8 will still be scored at its registered window with this caveat attached, but it is a weaker test of the hypothesis than intended.

20. Theory: why the Q-based gap starts low and then climbs

The train-inference gap is driven by the reconstruction error the codec injects into the trainer's forward pass. Both codecs send exactly 77 numbers out of a 1536-dimensional activation. They differ in what those numbers buy.

Why it starts low: anisotropy, and specifically alignment

Transformer activations are strongly anisotropic, so the covariance spectrum decays fast and a rank-48 subspace aligned to the top eigenvectors captures far more than its nominal 48/1536 = 3.1 percent of the energy. PRF's coordinate deletion captures exactly k/H = 5 percent regardless of structure, because the coordinate axes have nothing to do with the principal directions.

The measurement confirms it is alignment and not the low-rank form. At step 1, where Q is a deterministic seeded frame and therefore a random subspace, FRLR is only 1.29x better than PRF (13.8794 against 10.7259), and the energy accounting says the two capture 5.0 and 4.9 percent respectively, which is a tie. By step 20, once the power iteration has fitted Q, the advantage is 2.98x.

Why PRF stays flat and FRLR does not

PRF's reconstruction error is rotation-invariant: it depends only on the fraction of coordinates kept, so it is indifferent to how the activation distribution moves during training. FRLR's error is alignment-dependent, so it must track a moving target. That single asymmetry explains both trends. PRF buys a permanently worse but stationary gap (13.75 to 14.65 over 600 steps, +0.00085/step); FRLR buys a better but chasing one.

Why it climbs: estimator variance, not staleness

The obvious explanation is that Q goes stale between fits. Cell a8 refutes that. Freezing Q for 20 steps should make staleness worse, and instead the trend flattened by 13x:

at window 100-120a7, cadence 1a8, cadence 20
score0.65590.6602
gap level5.08496.8293
gap slope+0.016351+0.001262
gap slope 61-120rising-0.026533
true drift0.004380.00459

a8's gap runs 11.7151 -> 8.0304 -> 6.8293, falling monotonically, where a7's rose to 8.1849 by step 200. So the mechanism is estimator variance in Q. At cadence 1 the basis is re-derived every step from a single batch's sketch with one power iteration, so it jitters, and that jitter grows as the policy's activations diversify. At cadence 20 the sketch accumulates over 20 batches before orthonormalising, so Q is estimated from 20x more data and stops jittering. a8's higher level is the flip side of the same fact: only 10 refreshes in 200 steps, so it converges from its random start more slowly.

What this rules in and out

candidate mechanismstatus
Q estimator variance (under-averaged basis)supported by a8's 13x flatter slope
Estimator bias (the capped gamma norm matching)still open, and now scheduled. a8 flattening while still biased shows variance is sufficient to explain much of the trend, not that bias is excluded. See section 22.
Activations becoming less compressible as RL proceedsnot measurable: no FRLR spectrum diagnostic exists (rank1_evr_mean is the anchor's RELEX predictor, not the codec basis)

An earlier section of this report attributed the climb to Q going stale. That reading is superseded by a8 and is corrected here rather than edited away. It was also nearly acted on: a step-55 read of a8 looked bad enough to justify killing the cell, and killing it would have destroyed the only evidence that identifies the mechanism.

The practical consequence points where the operator's architectural constraint already pointed. Anchor-owned Q is the limit case of what a8 tested, namely refresh rarely from a large accumulated sketch, and it has a second benefit: if Q lives in the anchor then its broadcast rides the slow circuit, which this program already does not charge to the wire budget, so the 1233.4-against-1232 discrepancy from the Q correction disappears entirely.

21. a8 scored: the codec-view inflation runs BACKWARDS between two arms that differ only in how often Q moves

a8's registered window is complete at 21 rows. It passes G1 and the G2 level and fails both slope clauses, and it is the arm to build on: best learning in the program, less than half the incumbent's gap, the flattest gap trend of any FRLR arm by 13x, the lowest codec-free drift, no importance-sampling machinery, wire parity to 0.1 percent.

gatea8 measuredbarcall
G1 learning, score level0.6602≥ 0.6248PASS, 1.004x the incumbent
G2 gap level6.8293< 14.2458PASS, 0.48x
G2 gap slope+0.001262≤ +5.0e-4FAIL 2.5x, but 13x flatter than a7 and negative over 61-120
G3 drift slope+0.006967≤ 3.264e-3FAIL 2.1x, codec view, no physical content
G4 wire1233.4 bits1232parity to 0.1%

The sharpest number in this section

a7 and a8 run the identical codec. The only difference is that a8 refreshes Q every 20 steps instead of every step. Their codec-view drift readings:

probe/kl_gain firstlastdirectionactor/kl_loss
a7, cadence 171.6x @50710.2x @200rising5.8246
a8, cadence 205641.4x157.4xfalling0.1064
The gated drift metric differs by 55x between two arms whose policies do not differ by anything like 55x. Nothing about the model changed by that factor; what changed is how often the codec's basis is refitted to the policy it is compressing. a7's inflation rises because Q chases the current policy while the frozen reference is reconstructed ever worse. Slow the refresh and the inflation behaves like PRF's, which also falls (134.6x to 10.9x) because its mask is policy-independent. This is third-configuration support for the mechanism in section 13, from a pair that isolates it perfectly.

Codec-free, a8 is the cleanest cell measured: probe/kl_dense = 0.007006 at step 150 with a full-run slope of +5.1e-05, and probe/gap_dense averaging 0.000302 nats. So the codec accounts for a factor of 22619 in the measured gap: essentially all of the 6.83 nats is codec view, not policy divergence. The LR brake fired 0 of 30 probes, against a7's 1.

The confound I built in, restated so it is not forgotten. At cadence 20 over 200 steps Q gets only 10 power iterations against a7's 200, so a8 varies both view stationarity (intended) and total Q fitting (not). Its higher gap level against a7 (6.83 vs 5.08) is most likely that under-fitting rather than a cost of the slow cadence. Cadence 5 would have separated them; the operator's architectural instruction supersedes the question, so no cell is being spent on it.

22. Correcting myself: the unbiased test goes back in, because "sufficient" is not "exclusive"

In section 20 I concluded that estimator bias is "not the main driver" of the gap climb, on the grounds that a8 flattened the trend while still being the biased variant. The operator pushed back and asked why there would be no point testing the unbiased mode, given that the program's divergence and collapse had been attributed to directional bias in the first place. That pushback is right and my reasoning was bad in two distinct ways.

my claimwhat was wrong with it
"a8 flattened while biased, so bias is not the driver"a8 shows variance is sufficient to explain much of the trend. It does not show bias is excluded. Two mechanisms can both contribute, and I treated sufficiency as exclusivity.
Reasoning about the 200-step gap trendThe question asked was about divergence and collapse, a different quantity. a8's gap trend says nothing about whether the codec's bias causes divergence at 600 steps.

On the question actually asked, the program's strongest evidence is the operator's: the a1/a2 factorial killed the biased round-to-nearest arm at step 60 with 6.9x worse drift at z = +15, while the unbiased stochastic-rounding arm survived. One environment variable apart. And the two codecs in this program differ on exactly that axis: PRF exact-k is unbiased (constant 1/(1-p) gain, exact to 0.26%), FRLR as run is biased (a capped, detached, data-dependent gamma). It has never been isolated within FRLR.

The caveat that keeps it open rather than settled either way. The a1/a2 result was measured on actor/kl_loss, the channel section 13 shows ranks the wrong way against capability, and neither arm carries a probe. So "bias causes drift" is open, not established. That cuts in both directions, and what settles the argument is cost: one variable, 6.5 GPU-h, ahead of a 20-hour 600-step commitment. Going into that commitment with a known bias when the unbiased variant is one environment variable away is bad sequencing.

The three runs, each changing one thing

#runwhat moves vs the previouscost
1a9-frlr-anchorq-200Q governance only: harvested from the anchor's clean stale-weight forward, refreshed only when the anchor fires. Two things a cadence knob cannot do: Q is fitted to the slow net so it cannot chase the policy at all, and the broadcast rides the uncharged slow circuit, restoring exact 1232-bit parity.~6.5 h
2a10-frlr-anchorq-unbiased-200Bias only: the residual gain becomes the constant H/k, so E[ĥ|h,Q] = h exactly, at negative wire cost (the per-token norm scalar stops being sent, 76 numbers rather than 77).~6.5 h
3600 steps of the winnerHorizon only. PRF is the sole arm proven at 600; every other result here is 200 steps. Not yet authorized.~20 h

Anchor-owned FRLR needed code, not a flag. The config validator rejected the combination outright on the stated premise that the codec "has no PowerSGD basis Q for the anchor to own". That is true of the plain PRF mask and false for FRLR, which does carry a per-boundary basis. And the mask codec had no ownership plumbing at all. Both landed with 25 new tests (159 pass, lint clean), including one that caught a real bug before it reached the GPU: the harvest gate read is_grad_enabled() from inside a no_grad block, where it is False by construction, so the sketch would never have accumulated.

23. a9 at step 20: one counter proves both halves of the anchor-owned Q instruction

The registered bar is scored at 100-120 and is not evaluable yet. This section records one thing only: whether the code does what it was written to do.

[comm_eff][frlr-anchor-q] refreshed global_step=20 anchor_step=20 boundaries=7 refreshes=7
Zero Traceback, AssertionError or FATAL in the log.

Why refreshes=7 is decisive rather than merely encouraging

The refresh counter is incremented in two places: the fast path's cadence branch, and the anchor's update. Under anchor ownership the fast branch is skipped outright, so the counter can only move inside the anchor. The model has 7 masked boundaries at pp_size=8, and one anchor fire refreshes all 7.

if...counter after 20 stepsobserved
the anchor is the sole Q writer (intended)7 (one fire x 7 boundaries)7
the fast path were still writing Q at cadence 1about 140 (20 fires x 7)not observed

So the arithmetic confirms both halves of the instruction at once: the anchor IS the Q writer and the fast path is NOT. That is a much stronger check than "it did not crash", and it is exactly the property that could have failed silently, leaving an arm that reported itself as anchor-owned while behaving like a7.

The fail-closed assert not tripping is itself information

The engine asserts a non-empty sketch before refreshing. Passing it means the entire harvest chain executed: the validator accepted prf_mask with owns_q, the state plumbed the flag onto the codec, the engine registered the codec on the anchor clone, and the hook's harvest branch ran ahead of the confinement assert with path_tag=None. That last step is where the bug a unit test caught would have bitten: the harvest gate read is_grad_enabled() from inside a no_grad block, where it is False by construction, so the sketch would have stayed empty and this assert would have fired at step 20 instead of at test time. Timing was as predicted as well: one optimizer tick per step at batch 128 / mini 128, and an anchor cadence of 20 ticks puts the first fire at exactly step 20.

A methodological correction that belongs in the record

Three times in this session I extrapolated from a window far too short to carry the claim: a9 read as 1.7x slower than a8 from four step times (its per-step times in fact match a8's), R2 upload concurrency judged on four minutes of part counts, and R2 throughput projected at 2.2 MB/s where 20.6 minutes of data gives 5.78 MB/s, which is the difference between "the back-fill will not finish" and "it takes 6.7 hours". Each was corrected within the hour, and one error of the same class nearly justified killing a8, the cell that identified the gap mechanism.

The program had already written down that early windows lie. Writing it down is evidently not the same as applying it, so the rule is now mechanical rather than advisory: no rate or trend claim from under 15 minutes of wall clock or fewer than about 10 samples, and no gate read before its registered window. a9's five pre-registered predictions are scored at 100-120 and nowhere else.

24. a9 scored: anchor-owned Q is a trade-off, and Q governance turns out not to touch real drift at all

gatea9barcall
G1 learning, score level0.6612≥ 0.6248PASS, highest window score in the program
G2 gap level5.9232< 14.2458PASS, 0.42x
G2 gap slope+0.009262≤ +5.0e-4FAIL 18.5x
G3 drift slope+0.024098≤ 3.264e-3FAIL, codec view, no physical content
G4 wire1232 bits1232PASS, now literally: Q rides the uncharged slow circuit

The mechanism works, verified by arithmetic rather than by absence of a crash. Five anchor fires at steps 20/40/60/80/100 with the refresh counter at 7/14/21/28/35, exactly 7 per fire. Under anchor ownership that counter can only move inside the anchor, so 35 after 100 steps proves the fast path never wrote Q; at cadence 1 it would read about 700.

Four predictions of five, and the failure is the informative one

P2 (gap level between a7 and a8), P3 (learning within 0.02 of a7), P4 (inflation falls rather than rises) and P5 (wire exactly 1232) all confirmed. P1 failed: I predicted the slope would be at or below a8's +0.001262 because anchor ownership is "the limit case" of a8's mechanism. It came in 7.3x higher. The middle outcome pre-committed in the a9 pre-read is the one that fired.

at 100-120scoregap levelgap slopeactor/kl_loss
incumbent PRF0.657714.2458no probe0.9085 @600
a7 fast Q, cadence 10.65595.0849+0.0163515.8246
a8 fast Q, cadence 200.66026.8293+0.0012620.1064
a9 anchor-owned Q0.66125.9232+0.0092620.7003

a9 is second on both gap measures, and the 0.0053 learning spread across all four arms is well inside the incumbent's own 0.0120 checkpoint spread, so that ordering carries no weight. Anchor ownership buys a better level than a8 and a flatter slope than a7, and is worse than each on the other axis. Neither FRLR arm dominates.

The finding: three arms, identical real drift, 55x different gated drift

A matched-step check stopped me publishing the opposite claim. a9's codec-free drift reads 0.005265 at step 120, a8's quoted figure was step 150 and a7's step 200, and drift grows with steps, so "a9 has the lowest drift in the program" would have been an artifact of comparing different points on the same curve.

probe/kl_dense, codec-FREEa5ba7a8a9
step 500.0007520.0015760.0015200.001498
step 1000.0038570.0039920.0042820.004319
step 120-0.0050950.0053290.005265
a7, a8 and a9 are within 4 percent of each other at step 120 and within 8 percent at every measured step. Three arms whose only difference is how Q is governed (refreshed every step, every 20 steps, or only by the anchor from stale weights) drift from the reference identically, while their actor/kl_loss reads 5.8246, 0.1064 and 0.7003, a 55x spread. So Q governance moves the gap and it moves the codec view, and it moves neither capability nor real drift. This is the strongest form of section 13 yet: not merely that the gated metric is mis-calibrated, but that a single knob swings it 55x while the physical quantity it claims to measure does not move.

a5b sits lower at steps 50 to 100 for the reason already established: token-IS suppressed its learning, and a model that learns less moves less.

What this forces

The run-3 selection rule was built on a false premise. It read "flattest gap slope among {a9, a10}", which presumed a9 would dominate a8. It does not, so as written it would send a 7.3x worse slope into the 20-hour run.

The operator's architectural constraint has a measurable cost, and it is reported as a cost rather than absorbed. a8 is the best arm on the program's registered criterion (+0.001262) but refreshes Q on the fast path, which the instruction "Q update only in the anchor and only when it fires" excludes. a9 is the best constraint-satisfying arm, at 7.3x worse slope. Since capability and real drift are identical across all three, that choice rests entirely on the deployment requirement and on which codec-view quantity one believes matters. If the constraint is hard, a9 is the candidate; if it is negotiable, a8 is better on the bar.

The obvious untested cell, one variable from a9: anchor-owned Q accumulating its sketch over several anchor fires before orthonormalising, instead of one minibatch per refresh. a9 beats a8 on gap level using a single minibatch of sketch data against a8's twenty steps' worth, which says slow-net alignment buys the level; a8's flatter slope says sample size buys the slope. Nothing in the matrix has both. Not scheduled, and it is new spend.

And the question the program keeps circling. Within the FRLR family the gap spans 5.08 to 6.83 and the slope +0.0013 to +0.0164, while capability and real drift are flat. Nothing measured in 200 steps distinguishes these arms on any quantity that matters to the deployment. That does not make the gap unimportant; it means its importance is unestablished at this horizon, which is exactly what the 600-step run exists to test.

25. a9's full trajectory reverses the a8 comparison, and no arm settles

a9 finished 200/200 with zero errors and ten anchor fires, refresh counter 70, exactly 7 per fire throughout. Its terminal validation is 0.6713426853707415, which is identical to a7's to the digit: both are 335 of 499 problems. A coincidence at the problem level, but it settles the capability question between them.

stepa7 gapa8 gapa9 gap
604.45469.50675.7190
1205.19766.82925.9989
1506.06816.41956.5184
1997.76187.22497.0031
OLS gap slopea7a8a9
100-120 (REGISTERED)+0.016351+0.001262+0.009262
121-150+0.026249-0.007288+0.016096
150-199 (late)+0.038535+0.018366+0.012172
a8 was still FALLING until step 143 (its minimum is 6.1173 there). Its registered window 100-120 therefore sits on the descending arm of a U, and its 121-150 slope is outright negative. So its +0.001262 is a real measurement of that window and the bottom of a curve that then rises at +0.018366. In the late window the ordering inverts: a9 is flattest, and at step 199 a9 also holds the lowest gap.

Why the registered criterion is NOT being rescored

The registered window is 100-120, a8 wins it, and switching to the window that ranks arms the way one now prefers is exactly the goalpost move this program has been disciplined about. Stated precisely: on the registered criterion a8 is the best arm, and that stands. What the late data shows is a reliability problem with using that number to predict 600-step behaviour, since a slope measured at a curve's turning point extrapolates badly by construction, and the 100-199 figure gives a8 +0.001485 only because its fall cancels its rise.

The one thing true of all three arms: none settles. Every one accelerates by 150-199 (a7 +0.0385, a8 +0.0184, a9 +0.0122). The program's registered success criterion is a settling gap, and no FRLR arm achieves it at 200 steps.

Correcting the constraint-cost claim made earlier today

Section 24 states that the operator's anchor-Q constraint "has a measurable cost" of 7.3x on the registered criterion. That was measured at a8's turning point and overstates the case.

measurebest arm
registered gap slope, 100-120a8
late gap slope, 150-199a9
gap level at step 199a9
terminal validationa9 = a7
codec-free drift, matched stepsall three identical

On three of five measures a9 is at least tied best, and of the two where a8 leads, one is the turning-point artifact. So the honest revision is that the constraint's cost is not established and may be zero. Recorded as a correction rather than by editing the earlier claim away.

An operational finding that changes how a 600-step run should be configured

a9 was the first cell with the in-training R2 checkpoint sink enabled, and it turned teardown from a8's roughly two minutes into a bandwidth-bound wait. The log reports the upload as queued "async", and it is async with respect to training but not with respect to process exit: a9 sat at step 200 with the GPU at 0 percent while 19G uploaded, and exited within a minute of those uploads being killed. Measured progress was 16 of 74 parts in 7 minutes, so the full wait would have been about 55 minutes of idle GPU; stopping it cut the handoff to 11 minutes, and the checkpoint was never at risk because it sits on local disk with deletion disabled. For a 600-step run with three saves that is roughly 2.5 hours of idle GPU. Either make the sink genuinely asynchronous or leave it off and back-fill, which is what a5b through a8 did at no cost to occupancy.

26. a10: the codec's BIAS is what buys FRLR's entire gap advantage

a10 was a9's exact configuration plus frlr_unbiased=true, so the residual gain becomes the constant H/k and the reconstruction is exactly unbiased. One environment variable. It was killed at step 62 on two pre-registered triggers, per the instruction not to wait 200 steps when the signal is clear.

triggermeasured 41-60thresholdresult
a10 gap level14.8751≤ 8.7078 (1.5x a9's)KILL, 2.56x a9
gap at step 6014.9201≤ 12.0KILL
score level0.5179≥ 0.40pass
gap slope+0.008671≤ +0.016pass
a10's gap is 14.8751, which is the incumbent's own operating point (PRF exact-k sits at 14.2458). So FRLR's entire 2.4x gap advantage over the incumbent comes from the BIASED, capped, per-token norm-matching gain. Make the codec unbiased and FRLR is no better than the mask it was built to beat.

And the question the arm existed to answer

probe/kl_dense, codec-FREEa9 biaseda10 unbiasedratio
step 250.0002850.0002560.90x
step 500.0014980.0014710.98x
step 600.0025110.0024190.96x

Removing the bias lowers real drift by 2 to 10 percent. Consistently in the predicted direction at all three probe points, so probably a real effect, and the same order as the 4 to 8 percent arm-to-arm noise already established across a7/a8/a9. Against a gap penalty of 2.56x, the trade is not close. The mechanism is the one the pre-registration named: the constant H/k gain is unbiased in expectation but has higher per-token variance, and the gap is a per-token KL, so it is exactly the quantity variance inflates.

a10 is also the only arm below the wire budget, at 1216 bits: 76 coordinates rather than 77, because the unbiased gain makes the per-token norm scalar unnecessary. Verified from the runtime mask_ratio of 0.9505208 = 1 - 76/1536 rather than from the config alone. It bought 16 bits and paid 9 nats.

What this settles, and what it does not

claimstatus
For FRLR, directional bias drives reference driftREFUTED. The unbiased arm drifts 2-10% less while its mismatch is 2.56x worse
The a1/a2 factorial (biased arm killed at step 60, 6.9x worse drift)NOT overturned. That was sr_quant 1-bit, where bias is a rounding error on EVERY coordinate; a10's is a single detached per-token scalar on a low-rank residual. Structurally different objects
FRLR's advantage rests on a biased estimatorESTABLISHED, and new. A real property of the proposed method, not previously characterised
The operator was right to insist this be tested and I was wrong to demote it. My reasoning had been that a8 flattening while still biased showed bias was irrelevant, which confused "sufficient" with "exclusive". The correct reason to run it was that the question was open and the test was cheap, and the answer turned out to be worth having for a reason neither of us anticipated: not the drift result, but the discovery that the method's headline advantage depends on the bias.

Run 3 is now running

The pre-registered selection rule was "flattest gap slope at 100-120 among {a9, a10}". a10 is disqualified, so a9 wins by the rule, and a9 satisfies the anchor-Q constraint. c600-a9-anchorq-val600 launched 23:45:53Z: a9's config at 600 steps, val at 300 and 600, probe cadence 5, and the R2 sink deliberately OFF because a9 showed the in-training sink idles the GPU at teardown, which for three saves would cost about 2.5 hours. Idle across the handoff was about 6 minutes. Kill triggers: the gap crossing the incumbent's 14.3, or val at 300 below 0.65.

What it decides. PRF exact-k is the only arm ever proven at 600 steps. Every FRLR result is a 200-step result, and no FRLR arm settles. a9 ran 5.92 at its registered window and 7.00 at step 199 with a late slope of +0.012172; continued linearly that reaches about 12 by step 600, still under the incumbent's 14.3, but if it accelerates as a7 did it crosses.

27. The bug the operator found: a spurious PPO ratio at every anchor fire

The operator sent two WandB plots showing actor/pg_clipfrac and actor/pg_clipfrac_lower spiking at exactly steps 20, 40 and 60, and asked why the clip fraction peaks when the anchor fires. It was a bug I introduced the same day, and it also falsifies a claim written into this program's notes repeatedly as fact: that pg_clipfrac is zero by construction because train_batch == ppo_mini makes the ratio identically 1.

armQ governancenonzero pg_clipfrac steps
a7fast path, cadence 10 of 200
a8fast path, cadence 200 of 200
a9anchor-owned9, all multiples of 20, values 0.18 to 0.35
a10anchor-owned3, all multiples of 20
c600 (first attempt)anchor-owned3, all multiples of 20

The mechanism

The anchor fires at the top of train_batch, which is after that step's old_log_probs were recomputed in a separate call. My anchor_update_basis published the new basis immediately. So within one step the old-logprob forward reconstructed activations through Qt and the train forward through Qt+1. The PPO ratio exp(logp_new - logp_old) then departs from 1 because the measurement apparatus changed, not because the policy moved, and PPO dutifully clips it, truncating the gradient for 20 to 35 percent of tokens at 5 percent of steps.

This is the program's own subject matter appearing inside the trainer. The entire study concerns a codec-induced ratio between a sampler view and a trainer view; here the same pathology was manufactured between two trainer forwards of a single step. Having spent the session characterising it at the rollout boundary, I introduced it in the optimizer.

The fix, which the codebase already documented

PowerSGD's anchor path solves this by staging: anchor_update_basis(staged=True) writes a candidate, and engine_workers.py publishes it only after every PPO minibatch sharing those old_log_probs has completed. Its comment states the reasoning verbatim. I had ported the harvest half of that contract and omitted the staging half. The fix adds _pending_frlr_basis, activate_staged_frlr_basis() and discard_staged_frlr_basis() (so a candidate from an update that did not commit cannot leak into a later policy pair), with four new tests including one that reproduces the bug: unstaged, the two forwards of one step differ; staged, they are byte-identical. 163 tests pass.

Scope: which results are affected

resultstatus
a5b, a6, a7, a8, round A, the incumbentUNAFFECTED. Fast-path Q refreshes at the first boundary fire of a step and is held for every forward in it, which is exactly why their clipfrac is 0
a10: bias buys the whole gap advantageSAFE. a9 and a10 both carried the artifact, so the comparison is apples-to-apples
Anchor-owned Q works mechanicallySAFE. The refresh-counter arithmetic concerns Q writes, not clipping
Q governance does not touch real driftSTRENGTHENED. a9 carried the artifact and still matched a7's drift within 4 percent
a9 beats a8 on late slope and terminal gapCONFOUNDED. a8 clean, a9 not. Provisional until the rerun
The anchor-Q constraint costs nothingPROVISIONAL, since it rests on those a9 numbers

The rerun repairs the confound for free. Because it passes through step 200 on clean code, its own 100-120 window is a proper a9-equivalent, so the comparison that was provisional is settled by the same run that answers durability. Cost of the restart: 64 steps, about two hours.

28. Specification of the 600-step durability run

c600-a9-anchorq-val600, restarted 2026-07-27T02:05:56Z on commit f2ac3c6. Values below are the resolved config read from WandB, not the launcher's intent, because the engine truncates its log at start and launcher defaults do not always survive Hydra.

groupsetting
Model / dataQwen/Qwen2.5-Math-1.5B, MATH (EleutherAI/hendrycks_math), prompt 1024 / response 2048
GRPOadv_estimator grpo, train_batch 128, ppo_mini 128 (so ONE optimizer tick per step and the PPO ratio is structurally 1), rollout n=8, AdamW lr 1e-6, reference KL low_var_kl coef 0.001
Codecprf_mask with FRLR: rank 48 + residual k=28 + 1 norm scalar = 77 of 1536 coordinates, mask_ratio 0.94987. frlr_unbiased=false, i.e. the capped detached per-token norm-matching gain (the biased one, which section 26 shows is where the gap advantage comes from). No token-IS: rollout_is=None
Boundariespp_size=8, giving 7 masked boundaries on the 28-layer model. Masking also applied to the old-logprob recompute and the reference forward, so the three forwards are codec-consistent
Wire1232 bits/token/boundary (77 x 16), exact parity with the PRF incumbent. Under anchor ownership the Q broadcast rides the slow circuit, which this program does not charge, so parity is literal rather than approximate
Anchorenabled, owns_q=true, cadence 20 and delay_K 20 optimizer ticks (so 30 fires over 600 steps), batch_scope rollout_batch, snapshot on CPU, paired dense replay, spectral signed-EMA enabled
Probeprobe/kl_dense every 5 steps, controller OFF. Codec-silent and forward-only, so it measures the policy's true KL to the reference with no codec inflation
Schedule600 steps, validation at 300 and 600, checkpoints every 200. No step-0 validation: it is hard-set off for these cells and the base checkpoint is shared with earlier arms
R2 sinkOFF, deliberately. Section 25 showed the in-training sink is asynchronous to training but not to process exit, idling the GPU through the upload. Three saves would cost about 2.5 h. Checkpoints stay local and are back-filled
Hardware1x H200 NVL, single node, vLLM gpu_memory_utilization 0.72

Duration, from measured rather than assumed rates

a9 is the identical arm and ran 199 logged steps: median 108.9 s/step, mean 115.3 s, p10 99.8 and p90 133.4, and its wall clock over 200 steps implies 115.0 s/step including overheads. So:

quantityvalue
600 steps at the measured mean19.2 h
plus two validationsabout 0.3 h
expected finishabout 21:50Z on 2026-07-27
honest band from the p10 to p90 spread17 to 22 h, so 20:00Z to 01:00Z
cost at $3.344/habout $65, taking the ledger to roughly 72 of 100 GPU-h

What it decides, and the kill triggers

PRF exact-k is the only arm ever proven at 600 steps; every FRLR result is a 200-step result, and section 25 established that no FRLR arm settles. Compare against the incumbent's validations at 150/300/450/600 of 0.6613 / 0.6633 / 0.6733 / 0.6613 and its gap of about 14.3.

a9 ran a gap of 5.92 at its registered window and 7.00 at step 199, with a late-window slope of +0.012172. Continued linearly that reaches about 12 by step 600, still under the incumbent's 14.3; if it accelerates as a7 did, it crosses. Kill triggers: the gap crossing 14.3, or validation at 300 below 0.65, which is under every incumbent checkpoint.

29. Re-scored on stability rather than reward: the ranking of all twelve arms

The reframe. Every cell in this program was scored against a bar that leads with capability. That was the wrong bar. The objective is the most stable training under internet-grade activation compression, and capability turned out to be a tie: a7 and a9 land on 0.6713426853707415 to the digit, a8 and the incumbent both on 0.6613, the 600-step FRLR run on 0.6633 against the incumbent's 0.6613, and the three 600-step runs finish within 0.006 of each other on training reward. A metric that cannot separate the arms cannot carry the conclusion.

Full analysis, three figures and the corrections ledger: the stability ranking page. The short version is below.

Section 28's prediction, resolved

Section 28 registered the kill trigger as "the gap crossing 14.3" and reasoned that a9's late slope extrapolated to about 12 by step 600, "still under the incumbent's 14.3; if it accelerates as a7 did, it crosses". It accelerated and it crossed.

The FRLR advantage is real, and then it inverts: train-inference gap over 600 steps 0 5 10 15 20 25 30 0 100 200 300 400 500 600 global step nats crossover, step 424 FRLR is worse from here to the end FRLR (c600) 31.10 PRF exact-k 14.66 step 100: FRLR 5.58, PRF 14.24 (2.55x better) OLS slope 100-599: PRF +0.000848, FRLR +0.045972 nats/step, 54.2x steeper

First step at which FRLR exceeds the incumbent: 417. First step after which it stays above for the rest of the run: 424. This is the rotation-invariant versus alignment-dependent split that section 20 derived before the run existed: PRF's codec error does not care where the activations point, so its gap is stationary; FRLR's tracks a subspace the policy keeps moving, so it is excellent while the basis is fresh and degrades as the policy walks away from it.

Two metrics that are not allowed to rank anything

actor/kl_loss is real drift multiplied by a codec-view inflation factor that itself moves 50x, and it spans 55x across a7, a8 and a9, three arms whose codec-free drift is identical to within 4 percent at matched step 120. actor/entropy is disqualified because the dense control sharpens the same way, so its decline is ordinary GRPO on maths, not compression damage. Neither appears in the ranking.

The ranking

Twelve program arms on gap stationarity, gradient behaviour and non-collapse. The incumbent and the dense control are references, not entrants. Twelve arms were run to beat the incumbent and none of them did.

#armcodecgap slope (window)gap drift grad driftgrad maxstepsoutcome
refincumbentPRF exact-k +0.000848 (100-599)1.0290.85x4.65600 the bar: stationary on every axis
refdensenone0 (no codec)n/a 0.76x0.11600uncompressed control, val 0.6774
1a3sr_quant 2-bit k493 +0.000101 (100-120)1.0010.71x7.28 120flattest gap in the program, no horizon evidence
2a4PRF exact-k + CVC +0.001542 (100-120)1.0020.91x3.62120 most incumbent-like arm, the natural horizon candidate
3a1sr_quant 1-bit SR+0.002825 (100-120) 1.0030.77x0.90120 tightest gradients ever measured here, but 1.87x over wire parity
4a8FRLR, q_cadence 20+0.001485 (100-199) 0.9860.05x53.82200 best FRLR arm; only arm ending below its step-100 gap
5a9FRLR, anchor-owned Q+0.012203 (100-199) 1.1920.40x24.70199 carried the clipfrac bug; its corrected continuation is c600
6a7FRLR, fast Q cadence 1+0.028329 (100-199) 1.5511.86x68.01200 worst gap trend of any arm that finished
7a5bFRLR + token-IS + bnorm+0.006673 (100-199) 1.1500.86x204.39200 looks calm because IS suppressed the update; spike ratio 284x
8a5FRLR + token-IS-0.005037 (100-120) 1.0161.00x2.91120 most stationary numbers in the program, on a run that barely learned
9a10FRLR, unbiased+0.009809 (30-60)1.018 1.31x2.2961 killed for futility, not instability: unbiased FRLR has no advantage left
10c600FRLR, anchor-owned Q, 600 steps +0.045972 (100-599)5.1229.25x 176.37600 the horizon test, and it fails. Accuracy held at 0.6633
11a2sr_quant 1-bit RN, biased +0.014397 (30-60)1.0330.49x62.2462 killed at 60; run-minimum grad norm 6.15 exceeds a1's run-maximum 0.90
12a6PRF + token-IS + bnorm +0.000413 (100-199)1.0022.27x608.81200 flat gap, collapsed model (val 0.5391)

Gap drift is the end level over the level at step 100; grad drift is the median of the last fifth over the median of the first fifth. A drift far below 1.0 (a8 0.05x, a9 0.40x, a2 0.49x) is a decaying startup transient, not a calm run, so it must be read next to the run maximum.

The two counterexamples that discipline the reading

a6 has the flattest gap of any 200-step arm and it collapsed (slope +0.000413, drift 1.002, val 0.5391, gradients to 608.81). Gap stationarity alone is not stability. a5 and a5b look like the calmest runs in the program and they were merely idle: a5's gradient drift is exactly 1.00x because token-IS suppressed the update, and its training reward over 101-200 is 0.5895, second-worst in the field. A flat metric on a run that is not learning is worthless.

What we would actually ship

PRF exact-k, 77 of 1536 coordinates with a constant 1/(1-p) rescale and a mask that is a pseudo-random function of seed, step and layer. It is unbiased, there is no side channel because the mask is derived rather than transmitted, there is no basis to broadcast and no anchor coupling to get wrong, and it is the only configuration in this program with 600 steps of evidence that the optimizer stays in a steady state: gradient block medians flat at 1.50 to 1.82 across all twelve blocks, a block maximum never above 4.645, a gap that moved 0.42 nats in 500 steps, and four validations inside 0.6613 to 0.6733. The two upgrades worth a horizon run, in order, are a4 (PRF exact-k plus CVC cross-entropy, same family, lowest risk) and a3 (sr_quant 2-bit byte-parity, a genuinely independent shot). FRLR is out for long-horizon work in every governance variant tested.

Stated at the width the evidence supports: on the short matched window 100-120 the incumbent is fourth, not first, behind a3, a5b and a6. Its win is a horizon win, and a3 and a4 are unproven rather than beaten. Codec-free drift cannot compare the two families at all, because the incumbent carries no probe. And compression costs about 1.4 to 1.6 points of validation against the dense control at 600 steps, a price both families pay equally.