Skip to content

Latest commit

 

History

History
714 lines (586 loc) · 46 KB

File metadata and controls

714 lines (586 loc) · 46 KB

009 — why do two independently-seeded few-shot fits land on the same behaviour in a world that is demonstrably action-sensitive?

Status: GO — M-B (single basin) (2026-07-30). COLLAPSE / TIE_end = 0.909 / 1.000 / 0.957 at room seeds 0/1/2 (bar 0.70, all three); the M-B corroborator holds at all three — DRIVE = 0.667 / 0.792 / 0.770 (bar ≥ 0.30) and TRAVEL_medRHO_50 in every cell. The tie mass is a single basin, not read-out blindness (BLIND_cond = 0.0 in all nine cells) and not under-search (DRIVE is 4–8× its own M-A bar). Per Consequence, this licenses exactly one lever: a successor gate registered on goal-set / task design, carrying a displacement-matched control from the start. See Result below, including two errata that qualify the corroborator.

Registration text preserved verbatim below; nothing in it was edited after a number was seen. Pre-registered BEFORE any degeneracy number was measured: the three mechanisms, the exact tie-mass identity, the RHO ladder, R_RAND, NUM_GOALS, the local-LCG seed base and its screening set, every bar, the seed/variant plan and the reproduction contract were frozen in the commit that registered this file and did not move.

(Direct discharge of Gate 008's own closing sentence: "the open question moves to fit/policy space — why do independently-seeded fits converge to the same behaviour in a world that is demonstrably action-sensitive? No world knob can answer that, so the sanctioned route is a new gate aimed at the fit, registered before it is built." This is that gate. It is a diagnostic, in the Gate 006/007 precondition sense: it fits no warm arm, creates no rung, and changes no metric. It decides which lever the next gate is allowed to pull.)

Numbering caveat — this is NOT M1's re-roll

ROADMAP earmarks "Gate 009" for M1's one permitted NOT-TESTABLE re-roll (a world re-roll with a published screening table). That allowance is a right, not a number. This gate takes 009 because it is the next gate to be registered. It touches no M1 knob: push_mode, SB_SEED_BLOCKS, FEW_ITERS_M1, the K4 admission rule and the SENS_occ bars are all left exactly as Gate 008 froze them, and nothing here re-measures SENS_occ. M1's re-roll allowance remains unspent and is still available to a later gate under its published-screening-table condition. Gate 008's own recommendation — that the evidence argues against spending it on the same world lever — stands and is not disturbed by this file.


What is already established, and the arithmetic that shapes this design

  • Gate 004 (STOP). NF = 0.0 in every (world, seed) cell: the median of |d_cold_a − d_cold_b| over held-out goals is exactly zero, so ≥50% of goals produce bitwise-equal endpoint scores from two independent full-budget cold fits. Published room numbers: R1 = Rc = 1.0, n_dec = 11 / 14 / 10 of 48 — i.e. ~0.77 of goals tie at the endpoint.
  • Gate 005 (STOP). Scoring the fit trajectory instead of its endpoint does not fix it: TIE_frac = 0.354 / 0.313 / 0.354 on the ladder-mean A. Those are bitwise ties across the whole ladder K = {1,2,4,8,16,29}, so ~a third of goals tie one ES step in.
  • Gate 008 (NOT-TESTABLE). The world-problem diagnosis that motivated M1's knobs is falsified by its own pre-fit probe: the base walls family already flips terminal occupancy on 0.56–0.88 of one-action perturbations (0.50–0.78 restricted to moves). The world was never the constraint.

Two numbers from src/ reshape the design, and both are stated here before any measurement so that the gate is testing a declared prior rather than fishing.

(i) The search is 32 samples in 294 dimensions. FEW_N = 32, POLICY_DIM = 294 (src/transfer.mojo:79, src/sandbox.mojo:72). The antithetic estimator sees ~11% as many samples as dimensions.

(ii) The registered order-of-magnitude prediction. evolve_fast_weights (src/esper_evolution.mojo:209-210) updates

W += alpha / (2*N*sigma) * Σ_i ( F(w+σε_i) − F(w−σε_i) ) · ε_i        (scale ≡ 1.0 for
                                                                       SandboxPolicyMemory)

so the per-coordinate step magnitude is ≈ alpha·std(ΔF) / (2·√N·σ). At alpha ≈ 0.1, σ ≈ 0.3, N = 32 the prefactor is ≈ 0.029, and ΔF is a difference of calculate_fitness values on an 18-dim BC whose occupancy dims live in ~[0, 0.15]. If std(ΔF) is of order 1e-2 the whole 30-step fit moves each coordinate by order 1e-3 — three decades below INIT_SCALE = 0.5. This registration therefore predicts mechanism M-A. The gate exists to give that prediction a way to fail visibly, and the probe ladder below is placed to bracket the predicted displacement by ±2 decades so it can.


The three mechanisms (mutually exclusive; each prescribes an opposite fix)

claim prescribed lever
M-A — under-search the fit barely moves behaviour; the terminal state is set by initialization + world dynamics, not by the ES fit budget / FEW_N / FEW_SIGMA* — a fit parameter, frozen here, moved only by a successor gate
M-B — genuine single basin behaviour moves a long way from init, and two seeds independently arrive at the same place goal-set / task design
M-C — read-out blindness parameters and rollouts genuinely differ, but the 18-dim BC (hence policy_score) collapses them the read-out — i.e. M4's relational BC key over GraphDomain, which Gate 007's GO already licensed building there

Two further outcomes are named now so they cannot be invented later:

  • M-D — policy-class floor. Behaviour barely varies with the policy at any displacement, so there is nothing for any fit-side decomposition to partition. This is a NOT-TESTABLE branch and it is the pre-fit gating clause below.
  • MIXED. No channel dominates. The saturation is over-determined and no single lever fixes it. This is the STOP branch: it refutes this gate's hypothesis.

Hypothesis

On the base walls family at the unchanged 30-iteration few-shot budget and with an unchanged policy_score, the endpoint tie mass that produced Gate 004's NF = 0.0 decomposes into three exhaustive, mutually exclusive channels — the two cold fits reaching a bitwise-identical terminal world state (COLLAPSE), reaching different terminal states that the 18-dim BC maps to identical vectors (BLIND), or to different BC vectors carrying bitwise-equal policy_score (ISO) — and exactly one of those channels carries ≥ 0.70 of the tie mass at all three seeds on the primary world; and, if that channel is COLLAPSE, the displacement-matched control decides whether the ES's direction (DRIVE ≥ 0.30 ⇒ M-B) or merely its magnitude (DRIVE < 0.10 ⇒ M-A) is responsible — so that exactly one named lever is prescribed.

Falsifiable both ways. If the tie mass is split (no channel ≥ 0.70 at ≥ 2 of 3 seeds), the hypothesis is refuted and the verdict is STOP: there is no single lever. If behaviour does not vary with the policy at all, the verdict is NOT-TESTABLE (M-D) and no fit is ever run.


Metric + consumer

Consumer. The number this gate decides is which lever the next gate is registered on, and the quantity it decomposes is read by a specific block of code, not a proxy: the NF / TIE_frac / decidable_count blocktests/test_cbr_retain.mojo::eval_cell, tests/test_anytime_metric.mojo:343-344 (decidable_count), and its Gate-008 copy at tests/test_m1_calibration.mojo:197 — which M2's Gauntlet driver inherits alongside src/transfer.mojo::run_family_select and src/ued.mojo. That block reads exactly one scalar per (arm, goal): d[g] = -policy_score(...)[0]. This gate partitions the event d_cold_a[g] == d_cold_b[g] and nothing else. It does not redefine d, does not add a scalar, and does not propose one.

Held-out currency. Unchanged: goals are rollout-generated terminal BCs never seen by the fit, and the fit closes a real gap against them. Nothing here is scored on a fit-side quantity — the parameter-space statistics (TRAVEL, CONV) are explanatory, never the verdict.

Rejected proxies. Fast-weight L2 change alone (a fit-side quantity that says nothing about behaviour); ES fitness on the demo (the thing being optimized, not the thing being read); BC distance without a rollout; "did the score improve" (a level of aggregation above the ties this gate exists to open up). Each is cheaper and each measures something other than the tie.


The decomposition (an exact identity, asserted in the harness)

For each held-out goal g, two cold fits w_a, w_b are run at the unchanged budget from the same zero initialization (memset_zero, exactly as run_family/run_family_select do), and each is rolled out once for measurement. sandbox_rollout already leaves the terminal grid in the caller's grid scratch and the terminal BC in bc, so the raw state is read with zero new src/ code and zero RNG draws.

Define, per goal, four mutually exclusive indicators:

S(g) = 1  iff  terminal grid bitwise identical (all SB_CELLS = 256 floats)
               AND terminal avatar cell identical                      -> COLLAPSE
B(g) = 1  iff  S = 0  AND  bc_a[0..17] bitwise identical to bc_b       -> BLIND
I(g) = 1  iff  S = 0  AND  bc differ  AND  d_a[g] == d_b[g] bitwise    -> ISO
U(g) = 1  iff  d_a[g] != d_b[g]                                        -> untied

S ⇒ B,I,U = 0; B ⇒ score tie (the BC is the score's only input). Therefore

TIE_end  =  COLLAPSE + BLIND_abs + ISO                (exact; the harness asserts equality)

with COLLAPSE = mean_g S, BLIND_abs = mean_g B, ISO = mean_g I, TIE_end = fraction of goals with d_a[g] == d_b[g] — the same TIE_frac Gates 004/005 published. Derived: BLIND_cond = BLIND_abs / (1 − COLLAPSE) = P(BC tie | terminal state differs), the readout's own collapse rate on behaviourally distinct policies.

Ladder of readouts (each strictly upstream of the next). Parameters → action trace → terminal state → 18-dim BC → scalar d. The identity locates the collapse on that ladder; the statistics below say how far up it starts.

stat definition
Dpar(p,q) ‖w_p − w_q‖₂ / √POLICY_DIM (RMS per-coordinate)
Dact(p,q) fraction of the SB_T = 64 ticks whose argmax action differs
Dgrid(p,q) fraction of the SB_CELLS = 256 terminal cells whose float differs
TRAVEL(g) Dpar(w_a, 0) — the fit's own per-coordinate displacement from its zero init
CONV(g) Dpar(w_a, w_b) / (√2 · ½(TRAVEL_a + TRAVEL_b)); known null = 1.0 for two independent isotropic displacements of equal magnitude from a common origin
FROZEN fraction of goals where w_a's terminal state is bitwise identical to the zero policy's terminal state (per Gate 008 erratum E1 the zero policy is always-up)
BMOVE median_g Dgrid(w_a, 0), with median_g Dact(w_a, 0) beside it
POSE_SPLIT share of ‖bc_a − bc_b‖² carried by the 2 pose dims vs the 16 occupancy dims, reported separately over tied and untied goals — diagnostic, no bar, no promotion
MDE median_g max(NF, DELTA_REL · d_cold_a[g]), MDE_rel = MDE / median_g d_cold_a[g], DELTA_REL = 0.02 — verbatim Gate 008 erratum E3, no new constant

The fit-free control curve (pre-fit, zero fits, zero global RNG)

RAND(ρ): a pair w1, w2 each drawn i.i.d. per coordinate from N(0, ρ²) — i.e. two random displacements of RMS magnitude ρ from the same zero origin, the exact structural analogue of two cold fits, differing only in that no ES produced them. ρ is therefore directly commensurable with TRAVEL. Note that ρ = 0.50 = INIT_SCALE is not an arbitrary rung: it is the scale at which gen_family_s (src/transfer.mojo:1162) draws the policies whose terminal BCs are the goals.

For each ρ the harness computes COLLAPSE_rand(ρ), BLIND_abs_rand(ρ), ISO_rand(ρ), TIE_rand(ρ), BLIND_cond_rand(ρ) — the identical partition, on the identical goals.

RHO = { 1e-4, 1e-3, 1e-2, 0.05, 0.15, 0.30, 0.50, 1.00 }        (8 rungs, 4 decades)
RHO_50 = the smallest ρ in RHO with COLLAPSE_rand(ρ) ≤ 0.50      (the behavioural resolution radius)

RHO_MAX = 1.00 is placed at the order of Σ_t alpha_t ≈ 1.5, the loosest bound on total per-coordinate displacement if every ES step were unit-normalized; RHO_MIN = 1e-4 sits two decades below the registration's predicted TRAVEL. The ladder brackets the prediction on both sides, which is what lets the prediction fail.

The matched control. DRIVE = COLLAPSE − COLLAPSE_rand(TRAVEL_med), where TRAVEL_med is the cell's median TRAVEL and COLLAPSE_rand is evaluated by log-linear interpolation in ρ over RHO (rule frozen now, before any TRAVEL is known). If TRAVEL_med falls outside [RHO_MIN, RHO_MAX] the value is clamped to the endpoint, the cell is flagged extrapolated, and a clamped cell may only support the verdict direction that the clamp makes harder.


Frozen constants

symbol value role
primary worlds room, scatter Gate 004/005's own cells, base dynamics (push_mode = OFF, no seeded blocks)
primary budget FEW_ITERS = 30, FEW_ALPHA0/1, FEW_SIGMA0/1 unchanged the budget the published NF = 0.0 was measured at
secondary (reported, non-gating) push_room with SB_PUSH_ON + SB_SEED_BLOCKS, FEW_ITERS_M1 = 12 + Gate 008's derived anneal endpoints and K4 admission tests whether the mechanism is budget/world-dependent
NUM_GOALS 48, fixed, no escalation Gate 004's escalated count; ties are plentiful, so the 24→48 hatch would only perturb the stream
RHO {1e-4, 1e-3, 1e-2, 0.05, 0.15, 0.30, 0.50, 1.00} the fit-free ladder
R_RAND 256 pairs per (world, seed, ρ) SE on a proportion ≈ 0.031
SHARE_MAJ 0.70 the channel-dominance bar
DRIVE_HI / DRIVE_LO 0.30 / 0.10 M-B / M-A split on the matched control
FROZEN_HI / FROZEN_LO 0.70 / 0.30 corroborating descriptor
DELTA_REL 0.02 inherited unchanged (Gate 005/008); feeds MDE only
seeds {0, 1, 2}, with variant = s Gate 008's disclosed limitation, fixed
PROBE_LCG_SEED_BASE 20260730 the pre-fit probe's local RNG (see below)
screening set {1, 12345, 20260101, 20260730, 99991} mandatory, at registration, not after

Sampling honesty. R_RAND = 256 gives per-cell SE ≈ 0.031 on every *_rand proportion — Gate 008's R_SENS = 32 (SE ≈ ±0.09) passed a bar by sampling luck, and this gate is sized so that its DRIVE bars sit ≥ 3 SE from the decision points. NUM_GOALS = 48 gives SE ≈ 0.072 on a channel share computed over the ~37 tied goals a TIE_end ≈ 0.77 cell yields; the SHARE_MAJ = 0.70 bar therefore sits ≈ 2.8 SE above an even 50/50 split, and is required at all three seeds.

Every RNG seed that feeds a scored number is registered. The pre-fit probe draws zero from the global stream (which is what makes it provably unable to move the fit stream); its randomness comes from a local LCG — the same one Gate 008's sens_lcg uses — Box–Muller'd into Gaussians, seeded by

probe_seed_for(kind, variant, seed_idx, rho_idx)
  = PROBE_LCG_SEED_BASE + 7919·kind + 104729·variant + 1299709·seed_idx + 15485863·rho_idx
PROBE_LCG_SEED_BASE = 20260730

Gate 008's erratum E6 had to screen an unregistered base after the fact. Here the screen is registered up front and is a delivery obligation: the pre-fit stage (seconds) is re-run at all five bases in the screening set and the full table published. If the named mechanism differs across bases, the verdict is downgraded to PARTIAL. Note that every fit-side statistic (TIE_end, COLLAPSE, BLIND_abs, ISO, FROZEN, TRAVEL, CONV) is LCG-independent; only the RAND(ρ) curve, hence DRIVE, RHO_50 and BLIND_cond_rand, depends on the base.


Thresholds (committed now)

Scored on the primary worlds room and scatter at base dynamics and FEW_ITERS = 30, three seeds ⇒ 6 cells; room is the world the verdict is read on (Gate 005's convention), scatter is the reported contrast and must not contradict it (see PARTIAL). The push_room cells are reported and never gate.

NOT-TESTABLE — checked first, in this order; nothing below is scored if any trips:

  1. any reproduction-contract clause fails (below);
  2. PF-0, rollout-replica fidelity — the harness's action-recording rollout does not reproduce sandbox_rollout's terminal grid, terminal BC and terminal cell key bitwise on ≥ 3 (world, ρ) draws;
  3. PF-1, the pre-fit gating clause (M-D, policy-class floor)COLLAPSE_rand(1.00) > 0.50 in any primary cell: two policies drawn two decades apart in the parameter space still produce the same terminal state more often than not, so behaviour is near-constant across the policy class and the tie mass cannot be attributed to the fit at all. Checked before any fit is run; the whole gate then costs seconds and publishes the curve;
  4. the phenomenon is absentTIE_end < 0.50 in ≥ 2 of the 6 primary cells. This gate's goal sets are not Gate 004's (see Seed plan), so the thing being decomposed must be shown to be present in this draw before it is decomposed. Reported as such, never rounded up.

GO — a single mechanism is named. All of:

  • the identity TIE_end = COLLAPSE + BLIND_abs + ISO holds exactly in every cell;
  • exactly one of COLLAPSE / TIE_end or (BLIND_abs + ISO) / TIE_end is ≥ SHARE_MAJ = 0.70, at all three room seeds;
  • and the corroborator for the named branch agrees at all three seeds:
named dominant share corroborator (must also hold)
M-A COLLAPSE / TIE_end ≥ 0.70 DRIVE < DRIVE_LO = 0.10 and TRAVEL_med < RHO_50
M-B COLLAPSE / TIE_end ≥ 0.70 DRIVE ≥ DRIVE_HI = 0.30 and TRAVEL_med ≥ RHO_50
M-C (BLIND_abs + ISO) / TIE_end ≥ 0.70 BLIND_cond ≥ 0.30 (the readout collapses behaviourally distinct policies at a non-trivial rate)

STOP — the hypothesis is refuted (fires at ≥ 2 of 3 room seeds):

  • neither share reaches 0.50 — the tie mass is genuinely split and no single lever applies. Reading: the saturation is over-determined; the sandbox transfer family is closed for M2 on the same terms Gate 008's freezing rule set, and M5 gains a fourth publishable negative.

PARTIAL — real but incomplete. Any of:

  • a share clears 0.70 at exactly 2 of 3 seeds (seed splits are never rounded up);
  • a share clears 0.70 but its corroborator disagrees, including the two named anomalies:
    • M-A′ "null-space travel"FROZEN ≥ 0.70 (the fit reproduces the zero policy's behaviour) while TRAVEL_med ≥ RHO_50 (it nonetheless moved past the resolution radius): the ES travels along a behavioural null space. Prescribes no lever without a follow-up gate;
    • M-C′ "fit-local blindness"BLIND_cond ≥ 0.70 while BLIND_cond_rand(TRAVEL_med) ≤ 0.05: the readout is blind only where the fits land, not in general. Prescribes goal set and readout jointly, and is explicitly not a licence to edit the BC;
  • DRIVE ∈ [0.10, 0.30) — the matched control is ambiguous;
  • room names one mechanism and scatter names a different one;
  • the LCG screening table names different mechanisms at different bases;
  • ≥ 2 of 6 primary cells are flagged extrapolated on the DRIVE interpolation.

PARTIAL licenses no lever. It licenses a successor gate that registers the ambiguity as its own question.

Reported, never scored: CONV (with a described-only split at 0.5 into M-B-par, the two fits converging in parameter space, vs M-B-fun, a many-to-one policy→behaviour map — these refine the recommendation and never change which of A/B/C is returned), POSE_SPLIT, BMOVE, Dact, the whole push_room block, and TIE_rand(ρ) at every rung.


Seed plan

Seeds 0, 1, 2 — three required, per the house rule; GO is AND-across-seeds, a STOP trigger fires at ≥ 2 of 3. seed(0) alone is repeatability, not robustness.

Each seed draws a genuinely different world. variant = s is passed to gen_walls_layout, which is already parametric on it — this is Gate 008's disclosed limitation ("all three seeds shared one wall layout") fixed at the cost of a constant. Seed 0 therefore is variant = 0, which keeps one cell in contact with every published number, while seeds 1 and 2 are independent layout draws. Each seed additionally redraws the goal set and both fit-RNG streams.

Within a cell the two cold fits are CRN-paired on one continuous fit-RNG stream, per goal, in a frozen draw order. The pre-fit stage and every measurement rollout consume zero global draws:

seed(s), variant = s
  for w in [room, scatter]:                          # PRIMARY, base dynamics, FEW_ITERS = 30
      gen_walls_layout(task, kind(w), variant = s)
      PRE-FIT STAGE            [local LCG only; 0 global draws, asserted]
          for rho in RHO:  R_RAND = 256 pairs -> COLLAPSE_rand / BLIND_abs_rand / ISO_rand /
                                                 TIE_rand / BLIND_cond_rand
          RHO_50 ; PF-0 fidelity ; PF-1 gating check ; PRE-C note
      goals: gen_family_s(empty EliteMap, task, ..., NUM_GOALS = 48)     [global stream]
      for g in 0..47:  cold_a@30 -> snapshot w_a ; cold_b@30 -> snapshot w_b   [global stream]
      measurement rollouts for w_a, w_b and w_init = 0                  [0 global draws]
  for w in [push_room]:                              # SECONDARY, reported only
      same shape at FEW_ITERS_M1 = 12 with Gate 008's K4 admission

Goals, and why they are not Gate 004's. gen_family_s is called unchanged, with a fresh empty EliteMap — the repertoire-disjointness filter exists so retrieval cannot return the answer, and this gate reads no repertoire (contract clause 4), so an empty map is the faithful realization, costs no build, and keeps the goal draw byte-identical to the consumer's own. De-duplication by cell key is retained. The consequence is stated rather than hidden: variant = s, the empty map and a different stream position mean this gate's cells are not Gate 004's, so TIE_end here is a re-measurement of the phenomenon, not a reproduction of 11 / 14 / 10. That is exactly why NOT-TESTABLE clause 4 exists. Bitwise reproduction of the published numbers is guaranteed separately, by the contract below.


Refuting controls

The one that reads ~nothing if there is nothing to decompose: PF-1. If COLLAPSE_rand(1.00) > 0.50, behaviour is near-constant across the policy class and no fit-side mechanism can be assigned; the gate stops in seconds, before a single ES iteration, and publishes the curve. That mechanism has now paid for itself twice in three gates (Gate 006's ceiling clause, Gate 008's SENS_occ), and it is the third-cheapest possible "no" here. Gate 008's SENS_occ makes it unlikely to fire — but SENS_occ perturbed the action sequence, not the policy, and those are different maps; assuming otherwise is exactly the inference Gate 008 was punished for.

The one that can take the claim away — the nuisance-matched control: RAND(ρ = TRAVEL). Gate 007's lesson is that the control must be matched on the nuisance dimension. Here the nuisance is parameter-space displacement magnitude: a fit that moves 1e-3 per coordinate would produce identical terminal states for reasons that have nothing to do with the ES, with basins, or with the goal set. RAND(ρ) is matched on everything — same world, same goals, same zero origin, same measurement rollout, same partition — and differs only in that no ES chose the direction. DRIVE is the difference. It is what makes M-A and M-B separable at all: without it, COLLAPSE ≈ 1 is compatible with both, and naming either would be a story rather than a measurement.

Each mechanism has a number that can come back "not me":

  • M-A dies if DRIVE ≥ 0.30, or if TRAVEL_med ≥ RHO_50, or if FROZEN ≤ 0.30.
  • M-B dies if DRIVE < 0.10, or if CONV ≈ 1 together with TRAVEL_med < RHO_50 (the fits went nowhere, in independent directions), or if COLLAPSE / TIE_end < 0.70.
  • M-C dies if COLLAPSE / TIE_end ≥ 0.70 (there is nothing behaviourally distinct for the readout to collapse), or if BLIND_cond is small.
  • All three die together under the STOP branch, and the gate says so.

The zero-RNG pre-fit finding that survives a broken fit block: PRE-C. If TIE_rand(1.00) ≥ 0.90 while COLLAPSE_rand(1.00) ≤ 0.10 — the score ties bitwise for essentially every behaviourally distinct random policy pair — M-C is established at its most extreme with zero fits. This does not stop the run (it must still be shown that the fits live in that regime), but it is registered now so that it can be reported even if the fit block fails.


Reproduction contract (checked FIRST; failure ⇒ NOT-TESTABLE)

  1. Zero src/ change of any kind. git diff --stat -- src/ is empty. Every readout this gate needs already exists: sandbox_rollout leaves the terminal grid in the caller's scratch, the BC in bc and the cell keys in cells; the action trace is reconstructed harness-side from the exported sandbox_obs / policy_forward / policy_argmax / sandbox_step (the pattern Gate 008's roll_open_loop already uses); gen_family_s, make_demos, fit_operator and policy_score are called as-is. This clause subsumes Gate 008's clauses 1 and 2 and makes the metric-identity check trivially true. If an src/ edit ever proves unavoidable, this gate reverts to Gate 008's clause structure and must re-capture baselines before the edit.
  2. Baselines captured BEFORE the first edit of any kind (the Gate 008 ordering lesson: run afterwards it only proves the tests are deterministic): md5 of the outputs of ./esper test fit_traced, ./esper test cbr_retain, ./esper test anytime_metric, plus Gate 004's room numbers R1 = Rc = 1.0, NF = 0.0, n_dec = 11 / 14 / 10. Re-verified after, and printed either way. Under clause 1 this is guaranteed; it is checked anyway, because a contract that is only true by argument is not a contract.
  3. Runtime asserts: BC_DIM == 18, POLICY_DIM == 294, SB_ACTIONS == 6, SB_T == 64, FEW_ITERS == 30, SEL_FIT_ITERS == 29, FEW_N == 32, INIT_SCALE == 0.5, FEW_SIGMA0 == 0.3.
  4. Arm-blindness. grep -nE 'nearest|nearest_k|select_uniform|\.weights' over the harness returns nothing (the empty-EliteMap construction is contains only). No warm arm, no retrieval, no repertoire read: no value frozen here could have been chosen to favour one.
  5. PF-0 fidelity (above), printed.
  6. Stream integrity. A random_float64 drawn immediately before and immediately after the pre-fit stage must equal the pair the stream would have produced with the stage removed — Gate 008's probe, re-used, and the reason the LCG exists.

Anti-stone-soup clause

The fits stay single COLD fits at the unchanged budget, one schedule for every cell. All of the following are scaffolding for this experiment, and a pass obtained with any of them is a documented negative regardless of the raw number:

  • Touching the fit while measuring it. Raising FEW_ITERS, FEW_N, FEW_SIGMA0/1 or FEW_ALPHA0/1 anywhere in this gate — including "just to see" — answers M-A by assumption and destroys the only thing that makes DRIVE interpretable. If M-A is named, the successor gate moves those constants; this one does not.
  • Warm-starting cold_b from cold_a, re-fitting goals that tied, running extra ES steps on tied goals, or any per-goal / per-world staging of the fit. Both fits are memset_zero starts at the identical budget, back to back on one stream.
  • Any mid-fit boost or mid-fit measurement. All measurement rollouts happen after fit_operator returns, consume zero RNG, and may never feed a fit — the Gate 005 instrumentation contract, tightened by clause 1 to "no src/ code at all".
  • Editing, re-weighting, re-scaling or dropping BC dimensions. This is the gate most tempted by that one-line fix, because it is the gate that measures blindness directly. A measured BLIND share does not license editing sandbox_bc, policy_score, calculate_fitness or BC_DIM. It licenses registering M4's relational key over GraphDomain as a new gate, where a readout is being designed rather than retro-fitted to a number already seen. Gate 005 returned STOP on a metric change; a second metric change proposed after that STOP is the forbidden move, and Gate 008 already refused this specific one.
  • Promoting any no-promotion diagnostic to a bar, in either direction, once its value is known: POSE_SPLIT, CONV, BMOVE, Dact, TIE_rand(ρ), the push_room block. The Gate 007 RECOV precedent.
  • Post-hoc movement of any frozen value: the RHO ladder (adding a rung that makes RHO_50 land conveniently is the sharpest available cheat here), R_RAND, NUM_GOALS = 48, SHARE_MAJ, DRIVE_HI/LO, FROZEN_HI/LO, DELTA_REL, PROBE_LCG_SEED_BASE, the screening set, the seed/variant set, the log-linear interpolation rule, the primary world list.
  • Re-drawing a goal set, a variant or a seed that produced an inconvenient share; raising max_tries to fish for goals; dropping the scatter contrast or the push_room block after seeing that it disagrees.
  • Best-of-seeds, dropped seed, dropped world, mean-over-cells when a per-cell condition fails.
  • Naming a mechanism the identity does not support — e.g. reporting M-C because BLIND_cond is large while BLIND_abs / TIE_end is small. The share of the tie mass is the scored quantity; conditionals are corroborators only.

Deliverables this gate inherits

Gate 008 could not publish the MDE that M2's gate is registered to consume, because its --fits block never executed. This gate runs fits, so it discharges that obligation, with the formula given at registration and taken verbatim from Gate 008 erratum E3 (it introduces no new constant — it is NF and DELTA_REL = 0.02 combined exactly as decidable_count combines them):

MDE     = median_g max( NF , DELTA_REL · d_cold_a[g] )
MDE_rel = MDE / median_g d_cold_a[g]

published per cell for the 6 primary cells (base family, FEW_ITERS = 30) and for the 3 push_room cells (M1 family, FEW_ITERS_M1 = 12). Stated plainly so it is not over-read: the push_room value is the one M2's registered consumer wants, and M2 is not licensed on that family by anything in this file; the base-family value is the one that matches Gate 004/005's published cells. If NF = 0.0 reproduces, MDE degenerates to 0.02 · median d, i.e. the floor is DELTA_REL, not the data — which is itself the honest thing for M2 to hear.

Also published, because it costs nothing and Gate 008 could not: the per-cell TIE_end / COLLAPSE / BLIND_abs / ISO table, the full RAND(ρ) curve at all 8 rungs, and the 5-base LCG screening table.


Compute cost

component cost
pre-fit stage: 8 ρ × 256 pairs × 2 rollouts × 3 worlds × 3 seeds ≈ 3.5e4 rollouts seconds
5-base LCG screen (pre-fit stage ×5) seconds
primary fits: 2 cold fits × 48 goals × 2 worlds × 3 seeds at 30 iters ~4–5 min CPU
secondary fits: 2 × 48 × 1 world × 3 seeds at 12 iters ~1 min CPU
measurement rollouts: 3 per goal (w_a, w_b, w_init), ~0.3% of the fits' own rollout cost negligible
total ~5–6 min CPU

Harness: new, tests/test_fit_degeneracy.mojo, default path ES-free (fast tier, seconds), fits behind an argv flag (--fits, # suite-tier: full) — Gate 007's --arms / Gate 008's --fits pattern. Reuses Gate 008's median_of, sens_lcg and roll_open_loop shapes by copy, not by editing tests/test_m1_calibration.mojo (whose ES-free default path runs in CI and must keep printing Gate 008's registered numbers unchanged).


Disclosure — the ways this gate is weaker than it looks

  1. It explains the tie; it does not license transfer. A named mechanism licenses one lever for one successor gate. It says nothing about whether warm-vs-cold transfer exists, and no result here may be read as reopening Gate 004 or Gate 005.
  2. Gate 008's --fits block is type-checked but has never executed. This gate's fit block is new code of the same shape, and first-run bugs no compile can catch are expected. Mitigation is structural, not optimistic: the exact identity TIE_end = COLLAPSE + BLIND_abs + ISO is asserted per cell, PF-0 asserts rollout fidelity bitwise, and clause 6 asserts stream integrity — three independent ways for a silently wrong harness to fail loudly.
  3. The registration predicts M-A on an arithmetic argument (the alpha/(2√N σ) prefactor above). That prediction is disclosed because it is a bias: a designer who expects M-A will place bars where M-A passes. The mitigation is that M-A's corroborator is the displacement-matched control, which is the one statistic a small-TRAVEL world does not automatically satisfy — DRIVE is a difference of two collapse rates at the same displacement, so it is exactly the number a "the fit went nowhere" prior cannot manufacture.
  4. ISO is pooled with BLIND in the scored share. They are different degeneracies (BC collapse vs equal-distance level sets), and pooling them is a deliberate simplification: both are read-out failures and both prescribe the same lever. They are reported separately and a successor may split them.
  5. The primary cells are the base family, not M1's. That is on purpose — the phenomenon to be explained (NF = 0.0, TIE_frac ≈ 0.31–0.35) was published there — but it means the answer is about the family Gates 004/005 measured. The push_room block is reported precisely so a mechanism that is budget- or world-dependent shows up as a disagreement rather than as silence.
  6. CONV's null of 1.0 assumes isotropy. Two ES fits from a common origin are not guaranteed isotropic; CONV is therefore reported and never scored.
  7. A GO does not make the named lever work. It makes it the only lever this evidence licenses spending a gate on.

Consequence

  • GO (M-A) ⇒ the successor gate is registered on the fitFEW_N, FEW_SIGMA*, budget — with RHO_50 as its pre-registered target: the fit must be shown to travel past the measured behavioural resolution radius before any transfer arm is fit.
  • GO (M-B) ⇒ the successor gate is registered on goal-set / task design, and must carry a displacement-matched control from the start.
  • GO (M-C) ⇒ the successor is M4's relational BC key over GraphDomain (Gate 007's GO already licensed building it there), designed against this gate's published BLIND_cond rather than retro-fitted to the sandbox's 18-dim BC, which stays untouched.
  • PARTIAL ⇒ no lever; the successor gate registers the named ambiguity (M-A′, M-C′, mixed collapse, seed split, or base-dependence) as its own question.
  • STOP ⇒ the tie mass has no single mechanism. M2 is not built on the sandbox transfer family, the approach closes for a measured reason, and M5 gains a fourth publishable negative.
  • NOT-TESTABLE (M-D or phenomenon-absent) ⇒ published curve, no lever, and no automatic re-roll: this gate carries no re-roll allowance of its own, and M1's remains unspent and unrelated.

Result — GO (M-B, single basin), 2026-07-30

Harness: tests/test_fit_degeneracy.mojo (new; ES-free default path 12.6 s warm, fits behind --fits, 43.6 s). Command: ./esper run tests/test_fit_degeneracy.mojo --fits.

Reproduction contract — all six clauses discharged

clause check result
1 git diff --stat -- src/ empty — zero src/ change of any kind
2 pre-edit baselines re-run fit_traced, cbr_retain, anytime_metric all bitwise identical (md5 match)
3 the 9 frozen constants verified at compile time (the chain folds to if False)
4 arm-blindness grep no matches; EliteMap constructed empty, contains the only method called
5 PF-0 rollout-replica fidelity 0 mismatching draws of 72 checked (bar: ≥ 3)
6 stream integrity probe passed — the pre-fit stage drew 0 from the fit stream

NOT-TESTABLE order — none tripped

  1. Reproduction contract: passed (above).
  2. PF-0: 0 / 72. Passed.
  3. PF-1: max COLLAPSE_rand(1.00) over the six primary cells = 0.0859 (bar > 0.50). Passed with a 5.8× margin — behaviour genuinely varies with the policy, so a fit-side decomposition is meaningful and M-D (policy-class floor) is refuted.
  4. Phenomenon present: TIE_end = 0.917–0.979 in all six primary cells (bar: < 0.50 in ≥ 2). Passed.

Primary cells (room, scatter; base dynamics, FEW_ITERS = 30, NUM_GOALS = 48)

cell TIE_end COLLAPSE share BLIND_abs ISO (B+I) share BLIND_cond TRAVEL_med RHO_50 DRIVE extrap. FROZEN CONV_med
room s0 0.9167 0.8333 0.9091 0.0 0.0833 0.0909 0.0 0.001539 1e-4 0.6666 no 0.2292 0.6535
room s1 0.9375 0.9375 1.0000 0.0 0.0 0.0 0.0 0.001632 1e-4 0.7921 no 0.2292 0.6491
room s2 0.9792 0.9375 0.9574 0.0 0.0417 0.0426 0.0 0.001482 1e-4 0.7703 no 0.1875 0.6402
scatter s0 0.9792 0.9375 0.9574 0.0 0.0417 0.0426 0.0 0.006933 1e-4 0.8063 no 0.2083 0.6250
scatter s1 0.9167 0.8958 0.9773 0.0 0.0208 0.0227 0.0 0.005527 1e-4 0.7735 no 0.2500 0.6351
scatter s2 0.9792 0.9583 0.9787 0.0 0.0208 0.0213 0.0 0.005628 1e-4 0.7943 no 0.2500 0.6326

TIE_end = COLLAPSE + BLIND_abs + ISO held exactly in every cell (asserted; a failure raises).

Secondary push_room (reported, never gating; FEW_ITERS_M1 = 12, K4 admission)

cell goals admitted TIE_end COLLAPSE share BLIND_cond TRAVEL_med DRIVE FROZEN CONV_med
push_room s0 12 / 48 1.0000 1.0000 1.0000 0.0 0.000718 0.8325 0.1667 0.8270
push_room s1 14 / 48 0.7143 0.7143 1.0000 0.0 0.000755 0.5683 0.2143 0.8662
push_room s2 18 / 48 0.9444 0.9444 1.0000 0.0 0.000641 0.7718 0.1667 0.8388

K4 admitted well under the requested 48 from the fixed CAL_POOL = 256. The pool may not be raised (anti-stone-soup), so these cells are reported at the goal counts they earned. They agree with the primary cells on the mechanism.

Scoring against the frozen thresholds

  • Dominant share. COLLAPSE / TIE_end ≥ 0.70 at all three room seeds (0.909 / 1.000 / 0.957). The read-out share (BLIND_abs + ISO) / TIE_end is 0.091 / 0.000 / 0.043 — nowhere near 0.70. Exactly one channel is dominant, as the GO clause requires.
  • Corroborator. The COLLAPSE branch splits M-A from M-B by the matched control.
    • M-A requires DRIVE < 0.10 and TRAVEL_med < RHO_50fails, decisively: DRIVE = 0.667 / 0.792 / 0.770.
    • M-B requires DRIVE ≥ 0.30 and TRAVEL_med ≥ RHO_50holds at all three room seeds, and at all six primary cells.
  • scatter (the reported contrast) must not contradict. It names M-B too: shares 0.957 / 0.977 / 0.979, DRIVE 0.806 / 0.774 / 0.794, TRAVEL_med ≥ RHO_50. No contradiction.
  • LCG screening table (5 bases × 6 primary cells). RHO_50 = 1e-4 in all 30 rows. Room-row COLLAPSE_rand at the bracketing rungs spans 0.129–0.223 across bases, so the interpolated COLLAPSE_rand(TRAVEL_med) stays ≤ 0.223 and DRIVE ≥ 0.61 at every base — M-B at every base. No base-dependence.
  • PARTIAL triggers, each checked and none met: share cleared 0.70 at 3 of 3 seeds (not exactly 2); the corroborator agrees rather than disagreeing; M-A′ null-space travel does not fire (FROZEN = 0.188–0.250, bar ≥ 0.70); M-C′ fit-local blindness does not fire (BLIND_cond = 0.0, bar ≥ 0.70); DRIVE is nowhere in the ambiguous band [0.10, 0.30); room and scatter name the same mechanism; the screening table names the same mechanism at every base; zero cells flagged extrapolated (bar: ≥ 2 of 6).
  • STOP (neither share reaches 0.50 at ≥ 2 of 3 room seeds): not met.

Verdict: GO — M-B, the single basin. The tie mass is not the read-out (BLIND_cond = 0.0 in all nine cells — the 18-dim BC never once mapped two distinct terminal states to the same vector), not under-search (DRIVE is 4–8× its own M-A bar), and not a policy-class floor (PF-1 passed 5.8×). Two independent cold fits travel a real distance in parameter space and land on the same terminal world state, far more often than two random displacements of the same magnitude do.

Sub-classification (described only, never scored — as registered): CONV_med = 0.654 / 0.649 / 0.640 at the room seeds, all ≥ 0.5, against a known null of 1.0. So the branch is M-B-fun, not M-B-par: the two fits are closer than chance in parameter space but nowhere near identical, yet produce identical behaviour. The policy→behaviour map is many-to-one.

Anti-stone-soup — confirmed clean

Single COLD fit at the unchanged budget, one schedule per cell; FEW_ITERS / FEW_N / FEW_SIGMA* / FEW_ALPHA* untouched; cold_b never warm-started from cold_a; no mid-fit boost or measurement (every measurement rollout runs after fit_operator returns and draws zero RNG); no BC dimension edited, re-weighted, re-scaled or dropped; max_tries not raised; CAL_POOL not raised; no goal set, variant or seed re-drawn; no best-of-seeds, no dropped seed, no dropped world, no mean-over-cells. POSE_SPLIT, CONV, BMOVE and the push_room block were reported and not promoted to bars. src/ diff empty.

Deliverables

MDE (inherited from Gate 008 erratum E3, verbatim formula, DELTA_REL = 0.02):

cell NF median d_cold_a MDE MDE_rel
room s0 0.0 0.003513 7.026e-05 0.0200
room s1 0.0 0.003405 6.809e-05 0.0200
room s2 0.0 0.002439 4.878e-05 0.0200
scatter s0 0.0 0.006491 1.298e-04 0.0200
scatter s1 0.0 0.004916 9.832e-05 0.0200
scatter s2 0.0 0.005095 1.019e-04 0.0200
push_room s0 0.0 0.003756 7.513e-05 0.0200
push_room s1 0.0 0.002454 4.908e-05 0.0200
push_room s2 0.0 0.001115 2.230e-05 0.0200

NF = 0.0 in every cell, reproducing Gate 004 exactly. MDE_rel = 0.02 in all nine — MDE is the relative floor everywhere and NF never binds, which is the concrete answer M2 was owed.

PRE-C did not fire: TIE_rand(1.00) ≈ 0.105, far below the 0.90 trigger (COLLAPSE_rand(1.00) was in range at 0.086, but both conditions are required).

Errata and findings — ways this result is weaker or different than the registration assumed

  • E1 (erratum, qualifies the corroborator). RHO_50 sits on the ladder floor in all six primary cells. COLLAPSE_rand is already ≤ 0.50 at ρ = 1e-4, the smallest displacement registered, so the ladder never resolves a "same behaviour" regime at all. This is a real property of the policy class, not a harness defect: at the zero origin every logit ties, so policy_argmax is maximally perturbation-sensitive exactly there, and two policies 1e-4 apart already diverge on ~80% of draws. Consequence: TRAVEL_med < RHO_50 is unsatisfiable for any non-degenerate fit, so that half of the M-A/M-B corroborator carries no information and DRIVE alone did the discriminating. The verdict is scored as registered — the criteria were frozen and were met, and DRIVE is a substantive matched control (0.83–0.96 collapse vs ~0.15 at the same displacement) — but a successor gate must not reuse a RHO_50 comparison without first checking the curve is non-degenerate, and should extend the ladder below 1e-4 if it wants that half back.
  • E2 (finding, sharpens the successor). The fits collapse onto a pose, not onto a world. BMOVE = Dgrid 0.0, Dact 1.0 in every one of the nine cells: the fitted policy's action trace differs from the zero policy's on all 64 ticks, yet its terminal grid is identical in the median — only the avatar moves. POSE_SPLIT says the same from the other side: where two fits do differ in BC, 100% of the squared gap sits in the 2 pose dims in five of nine cells (and 0.658–0.793 in the rest); occupancy is untouched. So the single basin M-B names is a basin in avatar position, and the 16 occupancy dims are along for the ride. This constrains the successor gate more sharply than the M-B label alone: a goal set that varies only what the 16 occupancy dims see is one the fit has no way to distinguish.
  • E3 (erratum, compute estimate). The registration budgeted ~5–6 min CPU for the fits; the actual fit block ran in 43.6 s, and the whole ES-free default path in 12.6 s warm. The estimate was ~7× pessimistic. No decision rested on it.
  • E4 (shortfall, disclosed). The secondary push_room cells admitted 12 / 14 / 18 goals of the 48 requested from the fixed CAL_POOL = 256. Raising the pool is forbidden by the anti-stone-soup clause, so they stand at the counts they earned. They are non-gating and they agree with the primary cells, so nothing rests on them.

Consequence, as registered

A GO on M-B licenses exactly one lever for the successor gate: goal-set / task design — carrying a displacement-matched control from the start. It says nothing about whether transfer exists and does not reopen Gates 004 or 005. The Cross-world transfer Road therefore stays OPEN: this gate named the mechanism behind the saturated noise floor, it did not clear the Road's question.