Is there a sharp threshold transmissibility T_c above which a local spatial-SIR outbreak becomes a lattice-spanning epidemic, and is it the exact square-lattice bond-percolation threshold ½ — well above the well-mixed / mean-field prediction ⅓ for a 4-contact graph — because the SIR rule is bond percolation in disguise?
Units: dimensionless (open-bond probability = transmissibility T; square-lattice bond-percolation threshold, exact — Kesten 1980). Secondary knowns: triangular-lattice bond threshold 2·sin(π/18)=0.3472963 exact; Bethe/tree branching threshold at coordination z=4 is 1/(z−1)=0.33333.
▶ Run this simulationRead how it works
The threshold that isn't ⅓: the module's spatial-SIR rule — each infected cell infects every susceptible 4-neighbour once with probability T, then recovers — is bond percolation in disguise (Grassberger), so its epidemic threshold is the EXACT square-lattice bond-percolation threshold ½, recovered from the finite-size crossing of the spanning probability at T_c = 0.5007 ± 0.0005 SE (+0.13%, a disclosed free-boundary bias: the (20,40) crossing 0.5031 falls to the (40,80) crossing 0.4994, converging on ½ as the transition sharpens toward a step — no closed form coded); the well-mixed / branching rival that predicts R₀=1 at T=1/(z−1)=⅓ is falsified — the SAME transmit-w.p.-T rule on a loopless z=4 tree percolates at 0.332, a full 0.168 below ½, because the lattice's short loops waste infections the tree never wastes; the IDENTICAL estimator returns the exact triangular-lattice bond threshold 2sin(π/18)=0.3474 (vs 0.34730), so ½ is the square lattice's own number, not the ruler's; and the shipped module is now CERTIFIED BY EXECUTION (gates H–L: sha-pinned, type-stripped, 9000-call bit-exact lockstep at fl(1/120) over a 542,045-draw live stream), which corrects this finding's own previous disclosure: the screen does NOT read the 0.4950 quoted here before — that is gate F's fine-grid crossing, while the module's coarse 0.03-grid chord estimator executes to 0.4978 ± 0.0007 (6 seeds × 600 epidemics), confirmed to 0.0002 by an independent route, so the screen's two systematics have OPPOSITE signs and partly cancel
Generator = plain bond percolation on an L×L square lattice with free boundaries, edge-for-edge identical to EpidemicModule's transmission rule: each nearest-neighbour bond is opened independently with probability p (= the transmissibility T), clusters found by weighted union-find, and 'spanning' = a single cluster touches both the y=0 and y=L−1 rows (two virtual electrodes). This is the same physics as the module's single-seed SIR outbreak (Grassberger's mapping: each susceptible-infected bond is tested exactly once w.p. T, so the ever-infected set is the seed's bond-percolation cluster), but uses full random occupancy + top-bottom spanning — the standard finite-size-scaling observable — so the threshold is unbiased by the single-seed centre geometry. T_c is recovered from the crossing of the spanning probability Πₗ(p): the Π₄₀ and Π₈₀ curves cross at the threshold (linear interpolation of Π₈₀−Π₄₀). No ½, no percolation-threshold formula, no closed form appears in the generator or the estimator; every known number (½, ⅓, 2sin(π/18)) is loaded from the reference ONLY to score. Gates: (A) HEADLINE — the (40,80) crossing within 1% of the exact ½ and in [0.49,0.51]; (B) UNCERTAINTY — per-seed crossings, mean ± SE, worst seed within 0.02; (C) PERTURBATION — the (20,40) and (40,80) crossings both in a band around ½ and converging monotonically toward it as L doubles, the transition sharpening toward a step; (D) RIVAL — the SAME transmit-w.p.-T rule on a loopless z=4 tree must percolate at ≈⅓ (<0.42), separated from the lattice ½ by >0.08; (E) ESTIMATOR SELF-CHECK — the identical Πₗ crossing on the triangular lattice must return the exact 2sin(π/18)=0.3473 within 2%, proving the ruler unbiased and ½ the square lattice's own value; (F) MODULE SYSTEMATIC — reproduce the module's outbreak rule and geometry (single seed, centre, L=151, boundary-touch spanning) on a FINE grid and gate that its crossing reads below the headline ½; (G) SCORING SELF-TEST — hand-tampering known_value flips gates A/C to FAIL with the recovered T_c unchanged. HONEST-MODULE CERTIFICATE (this run) — gates H–L EXECUTE the shipped src/modules/EpidemicModule.ts, sha-pinned and mechanically type-stripped, against recorder stubs and an independent hand replica: (H) pin + strip + RNG accounting — one Math.random site (the no-seed fallback, executed: 0 draws seeded / exactly 1 unseeded, seed === (draw·0xffffffff)>>>0) and four rng() draw sites, ALL inside _stepEpidemic which fixedUpdate calls (a fixedUpdate-slice token scan alone reports zero draws and would wrongly read as a frozen-init world), with init proven to draw nothing (stream position 0 vs a fresh mulberry32); (I) EXECUTED init — statics pinned to independently hardcoded values (G 151, CXY 75, 2 steps/tick, 44 hold ticks, 3 trials/bin, fl(1/60), the ten swept T, pitch 0.12, cell 0.108), lattice + wavefront + bins + both 16·151²-float instance buffers bit-equal to the replica, plus mesh/material/camera/env/DOM census; (J) LOCKSTEP — 9000 calls at the engine's fl(1/120) bit-exact at EVERY call (lattice, wavefront, removed, spanned, bins, trial counters, render buffers, HUD), tick census {0:4500, 1:4500} pinned since 2·fl(1/120) === fl(1/60) exactly (budget-4 and acc-overflow branches DEAD by execution), 49 banked epidemics and 16 bin advances at pinned calls, 542,045-draw stream fingerprint — the draws per step are VARIABLE (0–4, one per in-bounds susceptible neighbour), so no stream-position formula exists and the lockstep IS the stream proof; (K) DISPLAY + ANSWER-FREE — HUD byte-equal at all 1800 %5 writes (980 distinct, the warm-up flipping to the numeric branch at a pinned call), final HUD sha-pinned, and the literal 0.5 in _estimateTc proven to be the PROBABILITY level rather than the known value it coincides with by feeding the EXECUTED estimator synthetic bins that cross ½ at 0.405 / 0.555 and getting 0.405 / 0.555 back (the '½' glyph appears only in the render template, never in the measurement slice); (L) CLOSURE — the executed on-screen T_c measured over 6 seeds at two sweep depths and cross-checked against an independently computed coarse-grid limit.
SIR-to-percolation mapping (Grassberger 1983; Newman 2002): each infected site tests each susceptible neighbour once and transmits w.p. T, so every edge is an independent Bernoulli(T) transmission route and the final ever-infected set is the seed's cluster in bond percolation at p = T. The epidemic threshold therefore equals the bond-percolation threshold p_c, which on the 2-D square lattice is ½ EXACTLY (Kesten 1980, by self-duality). This is well above the well-mixed / branching prediction 1/(z−1) = ⅓ for the 4-neighbour graph: the lattice's short loops waste infections on already-reached neighbours, so a spatial epidemic is harder to sustain than mean field says. The threshold is lattice-specific — the triangular lattice (z=6) gives 2sin(π/18)=0.347296 — so the recovered value tracks the lattice, not any fixed constant.
12/12 pass in ~95 s (deterministic; gates A–G unchanged at 7/7, honest-module certificate H–L added this run). Tampers: known_value → 0.58 ⇒ A/C FAIL, exit 1, every recovery byte-unchanged (0.5007 / 0.4950 / 0.4979), restored by hand; cert sha flip ⇒ only H fails; science tamper (the downward transmission removed in the EXECUTABLE, coordination 4 → 3) ⇒ J fails at call 2 on the very first step's draw stream, K fails (the HUD prints the tampered sweep, 576 distinct strings vs 980), L fails with the executed on-screen threshold moving 0.4979 → 0.5586 — the physically correct direction for a less-connected lattice — while H and I stay green
The exact square-lattice bond-percolation threshold p_c = ½ (Kesten, Commun. Math. Phys. 74, 41 (1980); identified by duality by Sykes & Essam, J. Math. Phys. 5, 1117 (1964)), reached through Grassberger's mapping of the general epidemic (SIR) process onto bond percolation (Math. Biosci. 63, 157 (1983)) and recovered by the standard finite-size-scaling crossing of the spanning probability (Stauffer & Aharony). Non-circular because the generator is bare bond percolation — open each edge w.p. p, union-find the clusters, ask whether one spans — with no ½, no threshold formula, and no closed form anywhere in the generation or the estimator; T_c is the intersection of two measured spanning-probability curves, and the known value lives only in the scorer (proven by the tamper self-test: change it and the recovered T_c is byte-identical while gates A/C flip). The recovery is sharper than 'there is a threshold' in three ways: it returns ½ with a quantified ±0.0005 SE over 4 seeds and a monotone finite-size convergence (0.5031 → 0.4994) that identifies a real second-order transition; it demonstrates the CAUSE by falsification — the identical rule on a loopless z=4 tree gives the mean-field ⅓, isolating the lattice's short loops (not the local rule per se) as what raises the threshold to ½; and it self-checks the ruler on the triangular lattice, recovering the exact 2sin(π/18)=0.3473, so ½ is a property of the square lattice, not the estimator. This is a validation against an EXACT theorem (p_c = ½ is proven, not empirical like DLA's 1.71), within a disclosed +0.13% free-boundary finite-size band at the reachable lattice sizes (L ≤ 80), shown to converge toward ½ as L grows.
MEASURED BY EXECUTING THE SHIPPED MODULE (gates H–L), which corrects this field's previous, estimated version. The screen reports a different estimator from the oracle in TWO independent ways, and the old text conflated them: (1) GEOMETRY (−0.0057). The module measures a SINGLE infected seed at the centre of a 151×151 lattice with 'spanned' = the outbreak reaches any boundary cell, where the oracle measures full random occupancy with top-to-bottom spanning at L=40/80. Gate F reproduces the module's rule and geometry on a fine p-grid: that crossing is 0.4950, below the oracle headline 0.5007, because at criticality the probability that the ORIGIN's cluster reaches an L=151 boundary crosses ½ slightly below p_c; it drifts up toward ½ as the lattice grows. (2) THE ESTIMATOR GRID (+0.0028) — missed until this run. The previous finding asserted gate F reproduced 'that exact estimator' and that the screen therefore reads 0.4950. It does not. The module sweeps its OWN coarse grid, TS = 0.36…0.63 in steps of 0.03, and interpolates a straight chord between the two adjacent bins that straddle a spanning fraction of ½ (0.48 and 0.51, where the executed spanning fractions run 0.178 → 0.720). Because the spanning curve is S-shaped across an interval that wide, the chord crosses ½ ABOVE the true crossing. Executing the shipped module over 6 seeds × 600 banked epidemics gives an on-screen T_c of 0.4979 ± 0.0007 SE, and an independent route agrees to 0.0002: feeding the executed _estimateTc high-statistics (2000-trial) spanning fractions measured at the module's own grid points yields 0.4978. NET: the screen reads 0.4979, i.e. −0.0027 vs the oracle headline 0.5007 and −0.4% vs the exact ½ — closer to ½ than gate F's honest single-seed crossing, but partly by luck, since the geometry error (−0.0057) and the coarse-grid chord error (+0.0028) have opposite signs and cancel about halfway. A viewer at realistic watch depth sees a bit more: at 120 banked epidemics (a few minutes of wall time) the executed reading is 0.4992 ± 0.0010, because the crossing is a RATIO of two noisy bin fractions and is convex in the low-T one; the same first-crossing rule can also snap the display DOWN onto a grid point when a low-T bin fluctuates to ≥ ½ (executed instance: seed 12345 shows 0.480 when bin 0.48 draws 6 spans in 12 trials, a ~2% binomial event against its true 0.178). Certified answer-free: the literal 0.5 inside _estimateTc coincides numerically with the known threshold but is the PROBABILITY level of the crossing, proven by execution — synthetic bins that cross ½ at 0.405 and 0.555 return exactly 0.405 and 0.555 — and the '½' glyph appears only in the render template, never in the measurement slice. The measurement is also independent of the render (the thin-instanced cubes are cosmetic), so the display cannot contaminate the number. No module code was changed this run (oracle + finding + fragment only); the module's doc comment still quotes the older ≈0.495 figure for the screen, a prose-only overclaim of 0.003 left untouched so the certificate's sha pin stays stable. Aligning the on-screen estimator with the oracle at the digit level — a finer sweep grid, or locating the crossing on the module's own curve rather than by a wide chord — remains available as a future module change.
npm run derisk -- epidemic (scripts/epidemic-derisk.mjs)scripts/oracles/epidemic.reference.jsonS. R. Broadbent & J. M. Hammersley, 'Percolation processes I', Proc. Camb. Phil. Soc. 53, 629 (1957) — percolation introduced. M. F. Sykes & J. W. Essam, 'Exact critical percolation probabilities for site and bond problems in two dimensions', J. Math. Phys. 5, 1117 (1964) — square bond p_c = ½ and triangular bond p_c = 2sin(π/18) by duality/star-triangle. H. Kesten, 'The critical probability of bond percolation on the square lattice equals ½', Commun. Math. Phys. 74, 41 (1980) — rigorous proof. P. Grassberger, 'On the critical behavior of the general epidemic process and dynamical percolation', Math. Biosci. 63, 157 (1983) — the SIR-to-bond-percolation mapping. M. E. J. Newman, 'Spread of epidemic disease on networks', Phys. Rev. E 66, 016128 (2002). D. Stauffer & A. Aharony, 'Introduction to Percolation Theory', 2nd ed. (Taylor & Francis, 1994) — finite-size scaling of the spanning probability.