Does one purely local constraint — a walker that may never revisit a site, the minimal model of a polymer that cannot pass through itself — change the walk's GLOBAL geometry, i.e. swell ⟨R²⟩ ∝ N^{2ν} from the diffusive ν = 1/2 to a genuinely new universal exponent?
Units: dimensionless (Flory exponent ν, ⟨R²⟩ ∝ N^{2ν}, 2-D square-lattice SAW; secondary knowns: RW ν = 1/2 exact, 3-D SAW ν = 0.587597(7))

▶ Run this simulationRead how it works
One local rule — never step on yourself — moves a walk to a new universality class, and the SCREEN now measures it with the oracle's own instrument: the shipped module's headline is the Madras–Sokal pivot ensemble (N ∈ [10,160], 4×500 samples per N, ln⟨R²⟩ = c + 2ν lnN + b/N), and executed over 24 seeds it reads ν = 0.74731 ± 0.00186 against Nienhuis' EXACT 3/4 (−0.36%, 1.4 SE) — 0.48σ from the oracle's own 0.74939 ± 0.00331, where the retired on-screen estimator sat −2.5% away; the identical machinery with the constraint off gives ν = 0.50031 ± 0.00028 (diffusion, exact 1/2), rejecting 'a walk is a walk' by 880σ, an exponent gap no prefactor can bridge; the dimension sweep tracks excluded-volume theory (cubic lattice 0.59412 ± 0.00176 vs Clisby 0.587597, +1.1% disclosed corrections floor); and the two biased GROWTH samplers stay on screen as the labelled contrast — kinetic 0.640, Rosenbluth 0.734 — so the viewer sees that how you sample changes the exponent you read
Generator = the pivot algorithm (Madras–Sokal 1988) coded from local ingredients only: a fixed-N walk starts as a straight rod; each move picks a random interior site and applies a random non-identity lattice point-group symmetry (7 elements in 2-D, 47 signed permutations in 3-D) to the tail, accepting iff the result never revisits a site (hash-set check). This Markov chain samples the UNIFORM fixed-N SAW ensemble. ⟨R²⟩ is the sample mean of the squared end-to-end distance at N ∈ {25…566} (geometric grid), 12 seeds × 3000 samples per N, thermalized 2N accepted pivots. ν is the lnN-coefficient of the fit ln⟨R²⟩ = c + 2ν lnN + b/N — the 1/N term is the standard ANALYTIC finite-chain correction, justified in 2-D because the leading non-analytic correction exponent Δ₁ = 3/2 is subleading to 1/N; without it the plain slope reads 0.7458 ± 0.0010, a −0.6% corrections floor (measured, disclosed). Gates: (A) 2-D ν = 3/4 (tol 1.2% ≈ 3.5 SE); (B) RW control ν = 1/2 exact, constraint switched off, same machinery; (C) rival falsified ≥ 50σ both directions; (D) unweighted kinetic-growth sampling reads ν ≥ 20σ below 3/4 (estimator honesty); (E) dimension sweep — cubic lattice ν vs Clisby 0.587597 within the disclosed +1% effective-exponent floor, ordered ½ < ν₃ < ν₂; (F) ⟨R²⟩_SAW/⟨R²⟩_RW rises monotonically (relevant perturbation, not prefactor); (G) the on-screen GROWTH contrast, mirrored independently at pinned seeds, ordered kinetic < Rosenbluth < 3/4; (H) scoring self-test. Rung 6 adds the executed-module certificate: (I) the SHIPPED src/modules/SelfAvoidingWalkModule.ts sha-pinned against the reference, mechanically type-stripped (65 exact-once rules + 3 counted ones, TS scan empty), Math.random present only in the seed default, and the whole measurement slice naming no known value and never touching the live-walk PRNG; (J) that stripped class EXECUTED in Node against recorder stubs, its 35 measured numbers (pooled ⟨R²⟩ at 9 chain lengths × 3 ensembles, every ν, every displayed SE, both growth contrasts) Object.is-identical to an independent replica written from the spec; (K) 600 fixedUpdate+render calls in lockstep — 9000 lane states plus 102 thin-instance floats, i.e. every trail cube the render wrote is the lattice site the walker actually occupied; (L) all 100 HUD writes identical to the replica's own composition, the displayed digits equal to the measured ν/SE at 3 dp and the disclosed 3-D excess equal to the arithmetic it claims; (M) the screen-vs-oracle gate — the module's own estimator over 16 fresh seeds against 3/4 and against gate A's recovery; (N) the HUD's sampling-bias claim executed rather than asserted. 3/4, 1/2 and 0.587597 are loaded from the reference ONLY to score.
Nienhuis (1982), Coulomb-gas solution of the O(n→0) model: the 2-D self-avoiding walk has ν = 3/4 EXACTLY (Flory's mean-field 3/(d+2) happens to be exact in d = 2). The unconstrained walk has ⟨R²⟩ = N exactly (ν = 1/2). In 3-D the same constraint gives ν = 0.587597(7) (Clisby 2010; Flory's 3/5 is close but not exact).
14/14 pass in 26 s. Tampers, each ⇒ exit 1: reference known_value 0.75 → 0.6 flips A/D/G/M with the recovered ν = 0.74939 byte-unchanged; module sha (a single appended space) ⇒ I; pivot stops rejecting self-intersections ⇒ J at the first chain (⟨R²⟩ 9.81 vs 27.92), L, M (screen collapses to 0.4996, the diffusive value) and N; the analytic 1/N fit term dropped ⇒ J (ν 0.7360 vs 0.7477), L, N and M at 1.24% vs its 1.2% tolerance — the closest call of the set, and the reason the lockstep rather than the tolerance is what actually guards the estimator; thermalization 2N → 0 accepted pivots ⇒ J + L; sample gap 2 → 1 ⇒ J + L; HUD digits 3 dp → 2 dp ⇒ L. A tamper whose anchor text no longer matches now aborts with exit 2 instead of silently 'passing'.
The exactly-solved 2-D self-avoiding-walk critical exponent ν = 3/4 (Nienhuis 1982, Coulomb-gas / O(n→0)) and its excluded-volume dimension dependence (Clisby 2010 in 3-D; Flory 1953 mean-field), sampled by the Madras–Sokal pivot algorithm. Non-circular because the generator codes ONLY the local step set, the self-avoidance hash, and lattice symmetries as pivot moves: no exponent, no ⟨R²⟩ ∝ N^{2ν} law, and no polymer theory enters generation or measurement — ν is a plain regression coefficient and every known value lives exclusively in the scorer. The recovery is sharper than a 'the coil looks bigger' demo: it pins the exponent to 0.08% of an EXACTLY known nontrivial critical exponent (one of very few in physics), separates it from the diffusive class by hundreds of SE under identical machinery, and shows the exponent tracks dimensionality. Two disclosed estimator facts, both measured rather than hidden: (1) the plain log-log slope at N ≤ 566 carries a −0.6% analytic finite-chain correction, absorbed by the theoretically-justified 1/N fit term (2-D's non-analytic Δ₁ = 3/2 is subleading); (2) the module's on-screen Rosenbluth estimator at N ≤ 60 reads ν ≈ 0.71–0.73 (−2 to −4% vs the oracle) from short-chain corrections plus the Rosenbluth ratio estimator's fat-tail undersampling bias — which is also why the oracle uses the pivot sampler rather than inheriting the module's estimator. Limits: the 3-D gate has a +1.1% effective-exponent floor at N ≤ 400 (leading correction N^{-0.528}) and cannot distinguish Flory-3D 0.6 from the exact 0.5876; the connective constant μ and the enumeration exponent γ are not measured here; the kinetic-growth walk's own asymptotic class is not resolved (it is gated only as a biased SAMPLER of the equilibrium ensemble at N ≤ 60, ν_eff ≈ 0.64).
RUNG 6 (this run): the module was changed so that the screen and the oracle are ONE instrument. It used to headline the Rosenbluth-weighted GROWTH estimator at N ≤ 60, which reads ν ≈ 0.713–0.742 (−2 to −4% vs 3/4) from short-chain corrections plus the ratio estimator's fat-tail undersampling — a gap that could not be closed by re-explaining it, only by changing what the screen measures. It now runs this oracle's own estimator: the Madras–Sokal pivot ensemble on N ∈ [10, 160], four blocks of 500 samples per N, ν from the 1/N-corrected fit, with the displayed ± taken from the four-block scatter. Measured by EXECUTING the shipped file over 24 seeds: ν_2D = 0.74731 ± 0.00186 (seed spread 0.0091, range 0.7293–0.7617), i.e. −0.36% from the exact 3/4 at 1.4 SE and 0.48σ from the oracle's pivot recovery; the displayed ± averages 0.0110 against that true 0.0091 spread (mildly conservative) and covered 3/4 on 21 of 24 seeds. Two systematics remain, both disclosed ON SCREEN rather than in a comment: (1) the 3-D line is an EFFECTIVE exponent — 0.59731 ± 0.00089, +1.65% above Clisby's 0.587597 because the leading 3-D correction decays as N^{−0.528}, too slowly to fit away at N ≤ 160 — and the HUD prints that percentage, computed live from the same fit (gate L checks the printed number IS the arithmetic); (2) the two growth samplers stay on screen beside the headline, labelled as the biased estimators they are (kinetic 0.6417 ± 0.0011, Rosenbluth 0.7345 ± 0.0026 over the same 24 seeds), which turns the old systematic into the world's actual teaching point: how you sample changes the exponent you read. Cost: init 372 ms (the retired estimator cost ~800 ms). The oracle's gate G was RE-POINTED at the contrast rather than left predicting digits nobody displays any more.
Rung 5 → 6 (validated → validated + honest-module). Prototype-first: seven scratchpad prototypes (fit bases, N-grids, block/thermalization settings, executed-module surveys) before any module edit, then 2 harness fixes and 0 science retries. Two honesty bugs the run found in its own work, both worth keeping: (a) the first certificate 'passed' a sha tamper because gate I printed the hash without comparing it to anything — a pin that is not compared is decoration, so module_sha256 now lives in the reference and gate I scores it; (b) a tamper whose anchor string had gone stale (it still named the `theory` field the module had just stopped carrying) applied nothing and reported PASS — the harness now exits 2 if a tamper is a no-op. Gate I also failed honestly at first, because the known exponents sat inside _measure as a `theory` column; they were moved to a display-only static table so that the measurement slice provably names none of them — the structure was changed to satisfy the gate, not the gate to fit the structure. The retired Rosenbluth headline is not deleted: it is still computed and displayed, as the contrast that makes the sampling lesson visible.
npm run derisk -- saw (scripts/saw-derisk.mjs)scripts/oracles/saw.reference.jsonB. Nienhuis, Phys. Rev. Lett. 49, 1062 (1982); P. J. Flory, 'Principles of Polymer Chemistry' (Cornell, 1953); N. Madras & A. D. Sokal, J. Stat. Phys. 50, 109 (1988); N. Clisby, Phys. Rev. Lett. 104, 055702 (2010); M. N. Rosenbluth & A. W. Rosenbluth, J. Chem. Phys. 23, 356 (1955).