Until now ① (the answer-defining ruler) was hand-written Ec. This round trains it: permute the solving order M ways, force ONE model to explain all of them — the order (an accident) cannot be stored, the rule (shared) survives. GRAM's eps-KL is the MDL knob. Then the honest negative: the learned ruler cannot replace the hand rule in the search's hard-candidate seat (solve ≈ 0 vs 0.30/0.66) — and the probe says why, at the cell level.
Order-MDL (rule part). Solve one puzzle in M different forced-move orders. Every trajectory visits different intermediate states, but the thing that decides which digits are legal at each state — the rule — is the same. Train one Rφ (a GRAM instance, weights shared across all orders) to predict the legal-set at every state of every order. To fit M orders at once, the model would need M separate explanations — unless it compresses: the order is incompressible accident, the rule is the shared program. The eps-KL term GRAM already carries is exactly the description-length pressure that forces this choice. No new architecture; no energy gradient; the target is the hand verifier's legal-set, so Sudoku is the principle testbed, not the prize.
The easy 1-step target saturated (every arm ≈ F1 1.0 — no headroom), so the ladder was promoted to the kstep target: the legal-set of the naked-single fixpoint, which requires the ruler to internally propagate, not just locally exclude. That headroom split the arms decisively — and inverted our first reading:
Real training curves (kstep, BCE per epoch-window). The plateau-then-unlock shape is the same grokking-like signature seen in the overfit probe; deterministic arms die inside the plateau.
| arm (kstep target) | legal-F1 heldout | I(z;order) ↓ | orbit |ΔF1| | verdict |
|---|---|---|---|---|
| C0 · canonical single order | 0.966 | 0.266 | 0.002 | learns, least invariant |
| C1 · orders×4, deterministic DEAD | 0.000 | — | — | BCE never moves — stuck at the saddle |
| c1single · same steps, 1 random order DEAD | 0.000 | — | — | confound control, also stuck |
| C2 · orders×4 + eps + KL 0.01 | 0.993 | 0.170 | 0.001 | best + most order-invariant |
Sign flip. On the easy 1-step target the same KL over-compresses (F1 1.0 → 0.30, posterior collapse); on the hard kstep target it is essential and best. The MDL knob hurts when the task is easy and carries you when it is hard — and eps noise is what gets a deterministic recursion off the saddle. (eps and KL were code-coupled; the eps-only control is running now — see §5.)
The real claim ①×② needs is that the learned ruler can sit where the hand rule sits. We built the fair swap: one identical solver (solve_with — singles-to-fixpoint propagation + MRV branching, acceptance only by sound verification), and changed only the per-state candidate map [81×9]: hand legal_sets vs Rφ's thresholded prediction.
| candidate source (budget 400, n=100) | held-out solve | weak-OOD solve | target-OOD solve | wrong accepts |
|---|---|---|---|---|
| hand rule (oracle ceiling) | 0.30 | 0.66 | 0.02 | 0 |
| learned ruler C2 (F1 0.993) DEAD | 0.01 | 0.00 | 0.00 | 0 |
| learned ruler C0 DEAD | 0.00 | 0.00 | 0.00 | 0 |
The consumption-locus law, extended. Energy-as-gradient died; energy-as-observation lived. Now: ruler-as-hard-candidate dies even at F1 0.99 — that seat demands ~100% per-cell accuracy, because one pruned true digit kills the whole branch. Seats that average a signal (observation, branch ordering, dense teaching) tolerate noise; seats that decide on it don't. Where a hand rule is exact and free, a learned approximation can only degrade — the learned ruler's value exists only where no hand rule exists (ARC / crystal). Sudoku just measured that cleanly.
Our first hypothesis — the ruler collapses on off-path states (after a wrong branch fill) it never saw in training — was half wrong. The probe (600 on-path + 400 off-path states per set) shows off-path F1 barely moves (0.925 → 0.905 held-out; weak-OOD even ties). The killers are per-cell and live on perfectly clean states:
| failure mode (C2, sigmoid>0.5) | held-out | weak-OOD | why it kills search |
|---|---|---|---|
| true-digit false negative (on-path) | 12.5% | 13.7% | pruning the solution digit at ANY of ~50 blanks kills the branch: (1−0.125)50 ≈ 0.1% survival — this alone explains solve≈0 |
| false dead-end on a live state | 17.5% | 20.5% | some blank cell gets an all-empty row → solver abandons a correct branch |
| true dead-end recall | 55% | 58% | misses ~45% of real contradictions → wasted budget (inefficiency, not fatal) |
All three are amplified by the hard 0.5 binarization, which throws calibration away. So the cheap decisive follow-up is a consumption fix, zero training: sweep the threshold down (recall up — false positives only cost budget) and give empty rows an argmax fallback. If solve recovers, the gap was consumption, not representation — and either way it tells Stage G to feed the generator soft pseudo-labels, never 0.5-binarized ones.
running A serial single-GPU chain is completing the untested axes right now: R1 parametric-MDL test-time adaptation (per-puzzle zH descent under a code-length prior, weights frozen — built this week, never yet run), eps-only control (eps 1.0, KL 0 — disentangles noise-escape from compression in C2's win), then the τ-sweep coupling rerun (0.5 → 0.05 + argmax fallback) that §4 demands.
Next — Stage G, the novelty's real test. The ruler was never meant to out-race a hand oracle at search. It was meant to teach: train the generator with the learned ruler's dense per-cell pseudo-labels, no gold, no augmentation. Four arms — gold ceiling / hand-rule teacher / learned-ruler teacher / no teacher — and one number that travels: the recovery ratio (learned−floor)/(hand−floor). ARC and crystal have no hand teacher; that ratio is exactly what transfers.
MatterGPT_RL build log · 2026-07-12 · all numbers from autoresearch/order_mdl-260711/ (ladder_kstep, couple_hand_vs_ruler, offpath_c2_kstep) · back to overview