Record numerical strategy validation and remaining convergence limits

This commit is contained in:
2026-09-17 12:40:48 -04:00
parent c82e68dd7e
commit 10adf7ec37
3 changed files with 96 additions and 11 deletions

View File

@@ -21,6 +21,17 @@ positive repair fraction whose candidate subsequently fails descent. Historical
artifacts must retain these qualifications rather than being retroactively
interpreted as complete work counters.
The regression is a repeat of that bounded combined rotating case, checking
unchanged accepted states and residual history while accounting for all
successful relift work. No extra numerical fixture or solver change is needed.
The final `c82e68d` replay passes 30 provenance, trajectory, state, and report
checks. Its accepted-state file is bitwise identical; trial records and all
non-timing Newton fields match exactly. With the corrected source, its solve
and iteration counts remain 20 / 681. This establishes that the actual case
returns during enthalpy repair, before another gravity relift. The positive
slope therefore identifies a non-descent repair family. This replay does not
exercise the separate post-relift non-descent branch found by source review.
The source fix builds and passes the complete targeted regression selection
(43 serial cases / 1,886 assertions and 37 supported cases per MPI rank).
`models_v3_direction/direction_regression_comparison.json` records pinned old
and new source revisions, immutable executable/input hashes, every comparison,
and the conditional failure localization. It emits no localization if its
checks fail. The numerical controls and acceptance decisions are unchanged.

View File

@@ -81,5 +81,8 @@ a failed initial inner solve while retaining its finite true defect and counters
No new stellar fixture or numerical behavior is introduced. The source-level
success-then-early-failure path is covered by the unconditional shared reset;
a separate expensive campaign is not justified for this reporting change.
Build/run of the added assertions is deferred until the running immutable
production campaign completes.
The final `c82e68d` build passes the targeted serial suite: 43 cases and
1,886 assertions, including these added checks. The supported two-rank suite
passes 37 cases per rank (1,108 / 949 assertions). Full stellar MPI fixtures
retain their existing one-rank interpolation restriction. Immutable final
build/test evidence is in `tests_v4` of the numerical-strategies campaign.

View File

@@ -19,13 +19,13 @@ auto report = solve.evaluate();
The enthalpy choices are `SampledEnthalpy` and `PolynomialEnthalpy`. Gravity choices are `MonolithicGravity`, `GravityCurvatureCorrection`, and `EliminatedGravity`. Their combinations are concrete C++ types. Unregistered policy types are rejected by concepts. Block identities come from the compiled equation form; mesh sizes, FE eligibility, arithmetic values, and distributed preparation generations are checked at runtime.
The context owns each prepared workspace. Numerical calls are statically dispatched; only destruction of the selected context-owned storage is erased. Workspaces are constructed when a solve selects them and are destroyed before their borrowed operator/backend dependencies. Reduced gravity recovers the outer backend prescription through `GetConfiguration()`; custom backends need that capability only when selecting elimination. Polynomial direction repair currently requires the normalized residual metric, because its derivative supplies the line-search slope.
The context owns each prepared workspace. Strategy dispatch is static; only destruction of the selected context-owned strategy storage is erased. The existing MFEM operator and solver application interfaces still use virtual dispatch. Workspaces are constructed when a solve selects them and are destroyed before their borrowed operator/backend dependencies. Reduced gravity recovers the outer backend prescription through `GetConfiguration()`; custom backends need that capability only when selecting elimination. Polynomial direction repair currently requires the normalized residual metric, because its derivative supplies the line-search slope.
## 1. Polynomial enthalpy feasibility
The implementation transforms the actual nodal polynomial to a tensor Bernstein representation using outward-rounded interval arithmetic. Adaptive subdivision either certifies nonnegativity, proves negativity through a negative polynomial value, or reports unresolved bounds. A negative Bernstein coefficient alone is never classified as a negative polynomial. Exact zero traces are retained algebraically.
The production adapter works in physical enthalpy coordinates; a general diagonal normalization need not preserve the polynomial encoded by normalized coefficients. It supports conforming scalar H1 hexahedral elements with the supported closed nodal tensor bases and runtime polynomial order. Unsupported spaces fail explicitly. Unsafe fast-math compilation is rejected. Gradual underflow and immutable FE spaces remain prerequisites.
The production adapter works in physical enthalpy coordinates; a general diagonal normalization need not preserve the polynomial encoded by normalized coefficients. It supports conforming scalar H1 hexahedral elements with the supported closed nodal tensor bases and runtime polynomial order. The stellar adapter requires a specific-enthalpy carrier and the recognized `eos::SpecificEnthalpyFromPressure` surface relation at compile time; it collectively checks zero prescribed surface pressure and the EOS reference `h(P=0)=0` at runtime. Unsupported spaces and surface prescriptions fail explicitly. Unsafe fast-math compilation is rejected. Gradual underflow and immutable FE spaces remain prerequisites.
An invalid or uncertifiable initial polynomial is rejected before a residual-based convergence declaration. For a valid base, a certified initial enthalpy field provides an immutable anchor. The repair family is
@@ -47,7 +47,7 @@ G_z(y)\,\delta z=-\{G(y)-G(x)-\alpha G'(x)p\}.
The right side removes only the nonlinear remainder. It vanishes on an affine gravity path even when the base gravity residual is nonzero; it is second order in the trial length when the operator is smooth. The base residual and Jacobian action are captured before trial preparation. The candidate inverse is refreshed before solving. Only the candidate's gravity coordinates change.
A fresh complete preparation verifies the intended gravity target and evaluates the full merit. A failed inner solve, failed preparation, or unacceptable corrected merit does not commit a state. Trial observers must publish the corrected physical and normalized vectors together. The tangent is distinct from the secant of this curved trial path.
A fresh complete preparation checks the intended gravity target and evaluates the full merit. Its consistency allowance is `256 epsilon` times the sum of separately measured gradient, potential, source, correction-action, and residual norms. The fresh affine-prediction discrepancy must fit this allowance; the target defect must fit the measured inner true defect plus that allowance. This is a heuristic arithmetic estimate, not a rigorous forward-error bound. Separate field contributions account for cancellation hidden by the small total gravity residual. The inner true-residual gate, lifted full-Jacobian gate, and full nonlinear convergence/merit criteria retain their original tolerances. A failed inner solve, failed preparation, or unacceptable corrected merit does not commit a state. Trial observers must publish the corrected physical and normalized vectors together. The tangent is distinct from the secant of this curved trial path.
## 3. Gravity elimination
@@ -59,7 +59,7 @@ For the partitioned Jacobian, the reduced action is
S=F_u-F_zG_z^{-1}G_u.
\]
Right-hand-side condensation includes any remaining gravity defect, and lifting reconstructs the corresponding full correction. The retained projection of the supplied full inverse preconditions the reduced system. Every lifted outer correction must satisfy the original full normalized Jacobian residual tolerance. Candidate gravity completion is separately checked after fresh nonlinear preparation.
Right-hand-side condensation includes any remaining gravity defect, and lifting reconstructs the corresponding full correction. The retained projection of the supplied full inverse preconditions the reduced system. Every lifted outer Newton correction must satisfy the original full normalized Jacobian residual tolerance. A later enthalpy feasibility repair changes that correction and is instead checked for its relift, strict merit descent, and nonlinear acceptance; it is not claimed to retain the Newton forcing tolerance. Candidate gravity completion is separately checked after fresh nonlinear preparation.
Tolerance-stopped inner Krylov solves approximate a linear Schur action. Flexible outer preconditioning does not make this action exact. Tight inner tolerances, directional derivative checks, and the full lifted residual gate control this limitation. Inner failure propagates explicitly. Operator actions never prepare or mutate the physical state.
@@ -69,7 +69,7 @@ The reference implementation restricts the full operator and supplied inverse. T
The complete nonlinear residual remains the merit and convergence authority. Gravity residual reduction alone does not establish a stellar equilibrium. The existing physical checker separately requires solver convergence and all eight energy/force, enthalpy/density, and quadrature-order virial measurements to pass `1e-5`; it also reports local EOS, force, sign, and conservation diagnostics.
For elimination, a successful linear backend report describes the reduced system; the lifted full-system true residual is a separate diagnostic. A propagated inner failure describes the gravity subsystem. Nested gravity solve times overlap the outer reduced solve time, and backend solve time excludes some condensation/lifting work. Use complete iteration and campaign wall times for performance comparisons, not a sum of these overlapping measurements.
For elimination, a successful linear backend report describes the reduced system; the lifted full-system true residual is a separate diagnostic. An inner failure propagated by the outer `Solve` describes the gravity subsystem. A later feasibility-relift or trial-completion failure can leave the previously stored outer report converged in reduced coordinates; its auxiliary failure is recorded separately. The report-space label always belongs to the retained outer report. Nested gravity solve times overlap the outer reduced solve time, and backend solve time excludes some condensation/lifting work. Use complete iteration and campaign wall times for performance comparisons, not a sum of these overlapping measurements.
## Reproducibility and evidence
@@ -80,6 +80,9 @@ Branches:
- `research/gravity-reduced-newton-20260917`
- `research/gravity-compact-application-20260917` (equivalent block applications)
- `research/gravity-prepared-roundoff-20260917` (prepared-equation consistency)
- `research/polynomial-endpoint-certification-20260917` (read-only final polynomial checks)
- `research/gravity-trial-diagnostics-20260917` (per-attempt reporting)
- `research/gravity-direction-diagnostics-20260917` (work accounting on rejected repaired directions)
- `research/numerical-strategies-20260917` (combined production integration)
The campaign runner builds a committed clean source revision, copies an immutable executable, and records source, mesh, executable, input-state, and output hashes. Serial execution keeps timing comparisons interpretable. Each new run uses a fresh output directory. Frozen probes preserve accepted buffers and verify restoration; they never certify a final physical model.
@@ -95,4 +98,72 @@ The first immutable build is retained in the workspace under `diagnostics/numeri
- **Reduced frozen action:** Schur action and retained lifted full action differ by `6.71e-19`; minimum central-difference relative error is `1.39e-6`. The original difference grid has only one point sufficiently above the checker's arithmetic floor, so its trend result is honestly **incomplete**. The next build uses larger differences without relaxing thresholds.
- **Production curvature run:** intentionally stopped after six trial rejections at iteration zero, despite converged inner solves. Review identified that the fresh-equation consistency allowance omitted large cancelling gravity contributions. This incomplete run is preserved, including the explicit interruption record; it is not a convergence result.
Final tests and updated production results follow after execution.
### Verified implementation (`0bf260f` C++ source, `b21fa40` campaign manifest)
The serial targeted suite passed **40 test cases and 1,842 assertions**. Coverage includes interval polynomial certification and repair, compile-time policy/normalization contracts, gravity block restriction, curvature algebra, Schur condensation/lifting, real stellar compact/full applications with and without the central-density border, explicit auxiliary failure, rollback, FGMRES, and observer exception safety. The checker suite passed **18 Python tests**.
Three separately tagged prepared-arithmetic tests also passed (28 assertions) in serial and on two ranks, bringing this revision to 43 verified serial cases. The original supported two-rank subset passed **34 cases per rank**, with 1,080 assertions on rank zero and 921 on rank one. Running the larger serial selection on two ranks also exposed five failures, all at the existing logical radial surface interpolation restriction to one MPI rank (three new full-stellar fixtures and two existing fixtures). Those failures are retained in `tests_v2/mpi2.log`; full stellar MPI operation is not validated by these results. The low-level distributed gravity and positivity tests pass.
The updated frozen n=1.5 capture passed **all 124 algebraic and invariant checks**. Those probes use inner relative/absolute tolerances `1e-9`/`1e-13` and a 160-iteration cap; production uses `1e-10`/`1e-14` and a 300-iteration cap. The full production outer forcing tolerance is `0.03`, with a cap of 200 outer Krylov iterations per Newton solve, restart 160, and nonlinear relative tolerance `1e-8` (zero absolute tolerance). Larger finite-difference steps resolve the second-order central-difference trend without relaxing checker tolerances; relative Schur errors at steps `0.1`, `0.03`, and `0.01` are approximately `1.26e-2`, `1.13e-3`, and `1.26e-4`, with `1.39e-6` at `0.001`. Restoration and retained-state invariants remain exact.
Three dense directions give **zero difference** between compact and root-restricted gravity operator and inverse outputs on the actual stellar FEM system. Operator applications take about `0.018 s` versus `0.244 s` (approximately 14 times faster), but inverse applications improve only from approximately `0.205 s` to `0.160 s`. The first matched tight gravity solve takes `7.25 s` versus `18.36 s` previously, with the same 40 iterations and numerical result. The approximately 2.5-fold inner-solve improvement must not be described as a 14-fold improvement to Newton or to the complete model campaign.
### Final build and regression (`c82e68d`)
The final `tests` and `plateau_diagnostic` targets build successfully. The targeted serial suite passes **43 cases and 1,886 assertions**, including the per-attempt reporting regressions. The supported two-rank subset passes **37 cases on each rank**, with **1,108 / 949 assertions**. The full-stellar MPI restriction above still applies. `tests_v4` retains the immutable executable, source and binary hashes, build log, test commands, and complete outputs; serial execution took `441.75 s`. The preceding `tests_v3` build was intentionally interrupted when review found the omitted-relift reporting path, with an explicit interruption record and no test result claimed.
### Agreement between converged controls
The n=1 polynomial, curvature, and eliminated endpoints agree in every stored physical block. The largest absolute individual-coefficient difference over all pairs is `2.632e-11` (surface coefficients); density and enthalpy relative coefficient differences are at most `1.18e-11`. Radius spread is `6.095e-13`, density-pressure virial-error spread `1.652e-13`, and the q18 EOS maximum spread is `1.493e-12`. There is no evidence here of materially different discrete equilibria. The apparent EOS maximum difference between earlier summaries was q14 (`3.7882e-4`) versus q18 (`4.2355e-4`) sampling, shared by all three endpoints. These coefficient comparisons are not continuum error estimates. Hash-verified details are in `n1_endpoint_comparison/`.
### Independent endpoint certificates (`c82e68d`)
All three available unguarded endpoints certify nonnegative enthalpy: n=1 curvature, n=1 elimination, and the unconverged n=1.5 curvature state. Each check covers all 832 stellar elements with no subdivision, takes approximately `3.46–3.59 ms`, and has a lower enclosure of exactly zero. The known-negative rotating capture is correctly rejected with a negative witness in element 450 at reference coordinates `(0.41015625, 1, 0.00390625)`; its approximately `3.87 ms` check visits 1,365 subcells. Enclosure bounds are not measured extrema.
All four executed diagnostics pass eight buffer/preparation invariants each; the helper performs no preparation, Jacobian action, or linear solve. Context construction and the wrapper's restoration are outside those helper counters/timings. The timed-out n=1.5 reduced model has no final snapshot and is explicitly `endpoint_unavailable`, with no certificate attempted. The assessment completes with exit 2 solely because that requested endpoint is unavailable; the negative control passes and there is no process/provenance/invariant failure. The n=1.5 curvature certificate does not turn its nonconverged, density-invalid state into a physical pass. Full provenance and classifications are in `endpoint_certificates_v1/assessment.json`.
### Physical validation caveats
Enthalpy certification applies to the represented enthalpy polynomial. It does not constrain the independently projected density polynomial or prove continuum accuracy. Pressure-from-enthalpy diagnostics extend the EOS as zero for nonpositive enthalpy; their finite-value flag alone therefore cannot establish enthalpy admissibility. Unguarded solver endpoints need a separate polynomial certificate. For the converged n=1 curvature control at quadrature order 18, the maximum scaled EOS density mismatch is `4.23549e-4` (RMS `8.56537e-5`), scaled mean-subtracted Bernoulli RMS is `1.13918e-4`, and the raw hydrostatic-gradient RMS is `0.00548097`. These are mesh/sample diagnostics with different meanings and units, not a uniform accuracy norm. No refinement study or local acceptance tolerance is claimed here.
The n=1.5 initial density is already negative at some diagnostic quadrature samples. At quadrature order 18, its minimum is approximately `-5.79e-4`, negative mass fraction `4.51e-5`, and 9,600 of 832,000 samples are negative. The initial diagnostic file is byte-identical to four earlier runs, establishing that this predates the new strategies. The nonnegative radial seed is projected into its independent order-two density space; the projection does not preserve positivity. Pressure-from-density virials are undefined for that state. A small pressure-from-enthalpy virial alone does not pass the full physical gate, and nonlinear convergence is reported separately. This work does not silently clip or replace density to improve the diagnostic.
### Updated production results
| Model and policy | Accepted steps | Final normalized residual | Maximum of eight virials | Newton wall time | Outcome |
|---|---:|---:|---:|---:|---|
| n=1, J=0, curvature | 6 | `6.51136e-14` | `3.73092e-7` | 273.71 s | Solver and virial pass; enthalpy polynomial certified |
| n=1, J=0, eliminated | 6 | `8.98743e-14` | `3.73092e-7` | 869.67 s | Solver and virial pass; enthalpy polynomial certified |
| n=1.5, J=0, curvature | 6 | `1.48794e-5` | Undefined density-pressure entries | 711.72 s | Outer linear iteration limit; not converged |
| n=1.5, J=0, eliminated | 5 | `4.47888e-6` (last accepted) | Unavailable | 1821.79 s completed steps | External 2400 s cap; sixth attempt interrupted |
| n=1, J=0.1, polynomial | 3 | `7.13059e-3` | Undefined density-pressure entries | 265.03 s | Outer linear iteration limit; not converged |
| n=1, J=0.1, polynomial + curvature | 1 | `8.40387e-3` | Undefined density-pressure entries | 127.05 s | Outer linear iteration limit; not converged |
| n=1, J=0.1, polynomial + eliminated | 1 | `2.72634e-2` | Undefined density-pressure entries | 149.83 s | Direction fails descent check before second line search |
The n=1.5 curvature run reduced the seed residual from `2.73659e-4` to `1.48794e-5` (about 18-fold), but stopped on the seventh Newton attempt (zero-based iteration 6), after six accepted steps, when 200 outer Krylov iterations reached only `0.059017` relative defect against the required `0.03`. Accepted step lengths were `1, 1/16, 1/32, 1/16, 1/16, 1/16`. All 14 auxiliary gravity solves / 583 inner iterations passed, and no prepared-consistency failure occurred. Thus the original auxiliary rejection was fixed, while difficult globalization and outer linear conditioning remain. The q18 enthalpy-pressure virial is `4.34868e-6`; this does not establish nonlinear convergence or make the undefined density-pressure checks pass.
The n=1.5 eliminated run reached the 2,400-second external wall cap during its sixth attempted step. Its five accepted steps used lengths `1, 1/2, 1/4, 1/128, 1/2048`, with 5, 25, 29, 44, and 57 outer iterations. The last accepted residual was `4.47887932690e-6`, about 61-fold below the seed but still about 1.64 million times above the nonlinear target. The last step improved the residual by only 0.00565%. All five completed lifted corrections passed the full-Jacobian gate. Nineteen completed trial records contain five acceptances, twelve merit rejections, and two pressure-force preparation rejections; none reports an auxiliary-solve rejection. The last accepted gravity residual is approximately `3.27e-14`, while retained closure, shape, hydrostatic, and mass residuals remain of order `1e-6`. This supports stagnation in the retained equations/globalization despite completed gravity, rather than the anticipated inner-tolerance/full-gate obstruction.
Completed Newton-step times total `1821.79 s`, including `1343.99 s` in the backend and `361.69 s` in trial preparation. The remaining process time includes initialization and interrupted work; it cannot be assigned to a completed sixth solve. No final snapshot or cumulative auxiliary report was emitted, so its final physical validation and total inner-solve counts are unavailable. This is an external timeout, not a solver-reported convergence failure or an equilibrium result.
At n=1, prescribed J=0.1, polynomial positivity alone accepted three steps (`1, 1, 1/64`) and stopped at residual `7.13059e-3`. The fourth linear solve exhausted 200 iterations with relative true defect `0.0331634` against `0.03`. One direction repair used fraction `0.9152726503`; all six line-search rejections were for the full residual merit, with no pressure-preparation rejection. Total outer Krylov iterations were 428 (including the failed fourth solve) and campaign time `331.79 s`. The q18 enthalpy-pressure energy/force virials were `2.39722e-3` / `2.77991e-3`, both above the milestone; negative independent density made the density-pressure virials undefined.
Adding curvature correction reduced the first-step residual from `0.0330653` to `0.00840387` using a bitwise-identical first Newton tangent. It then exhausted 200 outer iterations on its second step at relative defect `0.0826534`. Its one auxiliary gravity solve (45 iterations, `8.07 s`) passed both checks; no enthalpy repair was reached. The q18 enthalpy-pressure energy/force virials were `5.44539e-4` / `6.15376e-4`, and density-pressure entries remained undefined. Thus the initial curvature improvement is real, but neither trajectory converged or passed physical validation.
The combined polynomial + eliminated rotating run accepted one full step to `0.0272634`. Its next reduced solve and lifted full-Jacobian check passed (relative defect `0.0101847`), but the direction check rejected a non-descent proposal before line search: the stored merit derivative was `+1.02028e-4` at repair fraction `0.487323`. This is distinct from the outer-iteration limits above. The old report records 20 gravity solves / 681 inner iterations with no failures, but can omit a successful final relift when its subsequent descent check returns early. Those counters alone cannot localize the rejection before versus after that relift. The source-level reporting gap is corrected in `c82e68d`; the original counters alone remain ambiguous, and the replay below resolves the actual failure path. The q18 enthalpy-pressure energy/force virials are both approximately `0.0298894`; density-pressure entries are undefined. No equilibrium milestone is reached.
The final `c82e68d` replay passes all 30 provenance, trajectory, state, and report comparisons. The accepted-state file is bitwise identical; trial records and all non-timing Newton fields match exactly. The corrected diagnostic still records 20 auxiliary solves / 681 iterations, establishing that the failed enthalpy repair returned **before** another gravity relift. The nonzero repair counter includes the rejected proposal; it does not mean two repaired steps were accepted. This corrects the initial provisional interpretation that rejection followed a relift. The replay validates unchanged behavior and the location of this failure; it does not exercise a post-relift non-descent branch. The complete replay took `223.13 s`, with `150.20 s` in Newton and `122.98 s` of overlapping auxiliary work. Details and pinned source hashes are in `models_v3_direction/direction_regression_comparison.json`.
Both nonrotating n=1 controls took six full steps and required no relaxed tolerance. The eliminated run performed 107 inner gravity solves / 3,875 inner iterations, spending 702.21 seconds in those solves; the curvature control performed six solves / 115 iterations, spending 20.92 seconds there. Complete campaign times, including initialization and physical diagnostics, are 941.87 and 336.92 seconds respectively. Nested times overlap outer solve times. Elimination is a verified alternative formulation, but it is not currently a performance improvement for this control.
### What these experiments establish
These remain optional research strategies. Polynomial certification cheaply detects an obstruction that quadrature sampling can miss, but its anchor-based repair family can leave little decrease or fail the full-merit descent check. Gravity curvature correction removes the measured second-order remainder and improves a matched rotating first step. Neither result establishes that the complete coupled system will converge. The outer iteration caps identify a linear-solver/preconditioner problem to investigate; they do not by themselves isolate its cause.
Elimination has a verified Schur action and agrees with the converged control, but is currently expensive because of nested gravity solves. Completing gravity does not remove the pressure-preparation or retained-equation plateau in the harder unguarded run. No demonstrated tolerance mismatch justifies loosening the accuracy gates. Independent density admissibility and local discretization accuracy remain separate validation gaps. None of these J values has been mapped to a fraction of critical rotation, so this campaign makes no claim of reaching the 50% or 99% targets.
### Artifact locations and reproduction
The complete evidence is stored in [the task evidence directory](/Users/tboudreaux/.codex/.chatgpt-projects/g-p-6a6b3f2194ec8191bebcd59075897f1d/diagnostics/numerical_strategies_2026-09-17). `frozen_v1` and `models_v1` preserve the earlier trials, including the intentional interruption; `tests_v2`, `frozen_v2`, and `models_v2` contain the earlier verified build's tests and campaigns. `models_v2_rotation` completes the rotating cases using that same immutable executable; `tests_v4` contains final regression results and `models_v3_direction` the final reporting replay. `endpoint_certificates_v1` preserves independent endpoint and negative-control results, including the explicit unavailable case. Each campaign retains an immutable executable and hashes. `DENSITY_VALIDATION_INTERPRETATION.md` records density provenance. `TOLERANCE_COUPLING_REVIEW.md` distinguishes the fixed inner tolerance from the outer full-Jacobian forcing gate; it is a risk analysis, not evidence that the observed models failed for that reason.
The committed production cases are in `experiments/numerical_strategy_cases_2026-09-17.json`. The original b21 campaign did not request per-iteration state snapshots; the final manifest enables the existing capture option at every attempted iteration to record the accepted base at each attempted iteration, including when that iteration later times out. This adds recording, not a numerical change. The immutable case manifest stored with each campaign remains the authority for reproducing that specific run. Run `experiments/run_plateau_campaign.py --help` for its clean-revision, fresh-output invocation, and use `experiments/check_plateau_physics.py` on every completed model. Frozen checks use `experiments/check_numerical_strategies.py`; their pass status is an algebraic result and is not an equilibrium acceptance criterion.