An independent computation of a fluid-dynamics blowup exponent, and a verification harness built to refuse its own author's results.
The physics: the 2D Boussinesq equations develop a singularity at a corner of the domain, and the rate at which it forms is a number, alpha. This repository computes alpha = -0.34240 +- 3e-5 with a corner-regularized spectral Newton solver, reproducing a published value by a method disjoint from the original.
The part that is probably more interesting: every number here regenerates from raw data by one command, is graded against a frozen standard, and the claims that did not survive are kept on the page rather than deleted.
./boussinesq/bootstrap.sh # regenerate the data (~12 min)
python boussinesq/verify.py # 15 checks, three tiersClaims are separated into three tiers, because they are not equally attackable:
| tier | what it is | how a skeptic breaks it |
|---|---|---|
| ARITH | pure arithmetic from stated inputs | recompute by hand |
| EXACT | reference value forced by an identity of the equations, fixed before any measurement exists | rerun on your own regenerated bytes |
| FIT | a regression | rerun with a different window and get a different number |
The EXACT tier is the load-bearing one. The equations have an exact amplitude symmetry, so a run at 2A is the run at A viewed at half the time with fields doubled. That forces two ratios to be 1/sqrt(2) and 1 with no free parameters anywhere. Measured: 0.706891 against 0.707107, and 0.999746 against 1. Worst deviation on the tier: 3e-4.
FIT-tier checks initially failed — and that is the point. They only reproduce when the fit protocol (gate, window, trim) ships as executable code alongside the claim. The verifier went 10/15 to 15/15 when the protocol was encoded rather than described.
A watcher (watch_verify.sh) reruns all 15 every 20 minutes and files a
regression report if any number drifts.
Grading rules are frozen in STANDARD.md.
ESTABLISHED — provenance, tier label, exact anchor, structure identity, two independent streams, adversarial pass
alpha_0 = -0.34240, two disjoint methodssigma_Lambda = +1.00 +- 0.03for the inviscid corner flow, anchored by the exact symmetry above and by a 2x2 off-ray grid factorial (spread 0.029)- A viscous sign inversion of the same quantity, reproduced across a 4x grid refinement
ABDUCED — one stream, second one named
c_l = -1/alpha = 2.92056, the physical scaling exponent, by far-field matching- the known branch family accumulating at
alpha_inf = -0.4722
DEAD — refuted by this repository's own machinery, kept deliberately
- a "reciprocal branch" that was invented, not measured
- a Batchelor-saturation interpretation, refuted within an hour of proposing it
- a viscous monotonicity trend that was grid-dependent
- a radial-scale variability factor first reported as 8.9x, which collapsed to 2.5x under three independent estimators
OPEN — stated exactly, not hedged
- whether a certain geometric exponent lies in the strip [-1/2, 0]
- whether generic orbits settle or wander. Blocked, and the blocker is quantified: the linearization has transient growth up to 5807x, so any measurement spanning 1-2 e-foldings is inside the transient and cannot distinguish the two. Not a compute limit.
- Nothing about Navier-Stokes regularity. The Millennium problem is not addressed here.
- No novelty. No literature kill-search has been run. Theorem skeletons in
THEOREMS.mdhave relatives in Constantin-Fefferman (1993) and its descendants. Treat every novelty implication as open. - No individual eigenvalue of the linearized operator. Two independent routes agree on the rightmost to 1.3e-9 while two grids disagree by 2.14e-1: well-posed as linear algebra, unconverged as discretization.
- No unconditional stability. What is measured is Hurwitz-ness of a corner-clamped linearization, in the raw collocation norm, on a truncated wedge.
boussinesq/
bootstrap.sh regenerate the verification data
verify.py the 15 checks
STANDARD.md the frozen grading rules (S1-S7)
DONE.md falsifiable exit conditions; done.sh checks them
mythos.py confound engine: the ways each claim could be false
faults_freshpass.py 14 faults from six independent blind reviewers
criticality.py criticality atlas, calibrated on 2D Navier-Stokes
polar_cornerreg.py the profile solver
dedalus_axisym.py the axisymmetric Euler / Navier-Stokes engine
archive/ superseded scripts, kept for provenance
Python 3.12, Dedalus v3, numpy, scipy, h5py.
bootstrap.sh needs Dedalus; verify.py alone needs only numpy/scipy/h5py
once the data exists.
Six agents were given a conclusion-free description of the experiment and asked
what was wrong with it, with no access to any result. Seven faults were
unanimous. Two of their findings invalidated results that had been reported
minutes earlier — including one that only a single reviewer raised. That
registry is in faults_freshpass.py, and the faults it found are recorded with
what each one killed.
Apache-2.0. Part of EPAGOGE: systems built adversarially, with claims graded and the failures kept on the page.