379 lines
23 KiB
Markdown
379 lines
23 KiB
Markdown
# Pressure-preparation obstruction and shape curvature — September 17, 2026
|
||
|
||
The rotating plateau has a demonstrated local enthalpy-positivity obstruction:
|
||
the same interior polynomial sample approaches zero, while the surface trace
|
||
remains exactly zero. The late accepted polynomial is already negative between
|
||
production quadrature points. Separately, the n=1.5 full step is admissible but
|
||
nonlinear shape/field curvature raises its residual to 12.24 times the base.
|
||
The measured small-step behavior supports second-order curvature rather than a
|
||
first-order Jacobian defect along these directions. No production solver fix
|
||
or additional virial-qualified model is claimed.
|
||
|
||
## Scope and controlled source
|
||
|
||
This campaign adds experiment-only diagnostics to the preserved combined solver
|
||
at `95d9fba`. It changes no production operator, admissibility rule, normalization,
|
||
preconditioner, solver policy, or physics-facing API. The central-density
|
||
constraint remains optional. The working campaign branch is
|
||
`research/diagnostic-campaign-20260917`; pressure and shape helpers are retained
|
||
on separate hypothesis branches:
|
||
|
||
| Purpose | Branch | Retained revision |
|
||
|---|---|---|
|
||
| Preserved combined solver | `research/combined-20260916` | `95d9fba` |
|
||
| Pressure and surface diagnostic helper | `research/pressure-obstruction-20260917` | `c6572d3` |
|
||
| Shape/field diagnostic helper | `research/shape-curvature-20260917` | `b24e6e0` |
|
||
| Integrated captures and focused probes | `research/diagnostic-campaign-20260917` | tested `fd08f7b`, `9e1b65d`, `4280c53` |
|
||
|
||
The primary checkout remains on the diagnostic campaign branch. `main` remains
|
||
at `75cc638`. Existing untracked files were preserved. Source additions in this
|
||
campaign are confined to `experiments/`.
|
||
|
||
The capture executable records source `fd08f7b`. It copies observer spans without
|
||
calling the prepared operator during Newton. A first-trial direction is
|
||
reconstructed from candidate minus base divided by alpha; the exact candidate
|
||
is also saved. A zero candidate-reconstruction error does not prove recovery of
|
||
every bit of the original internal correction. Roundoff estimates and direct
|
||
candidate replay distinguish that limitation from the original rejection.
|
||
|
||
Raw artifacts, copied executables, manifests, input/output hashes and analysis
|
||
are retained under:
|
||
`/Users/tboudreaux/.codex/.chatgpt-projects/g-p-6a6b3f2194ec8191bebcd59075897f1d/diagnostics/pressure_shape_2026-09-17`.
|
||
|
||
## Trajectory fidelity
|
||
|
||
The full twelve-attempt n=1, J=0.1 replay exactly reproduces every non-timing
|
||
Newton column, every trial and block record, the initial/final physical CSVs,
|
||
layout, and accepted-state bytes from the September 16 combined run. Its
|
||
accepted-state SHA-256 is
|
||
`ba55e7295c05f0c9ac5f32490f74d87556502d1744aa42deb7964729b2be2018`.
|
||
The n=1.5 replay reproduces the first three guarded attempts exactly, including
|
||
all ten trials and all 42 block records. There is no archived three-step endpoint
|
||
for an independent final-state comparison with that shortened run.
|
||
|
||
Seven selected iterations save finite 178073-entry vectors. Independently
|
||
reconstructing each candidate gives zero componentwise round-trip error. The
|
||
late n=1 capture nevertheless has a direction-roundoff scale estimate of
|
||
1.40534e-8, about 4.88e-7 of its direction norm, because its first trial alpha is
|
||
1.90735e-6. The onset capture uses alpha=1 and has an estimate of 2.68e-14.
|
||
Exact candidate replay remains authoritative for the historical rejection.
|
||
|
||
## Pressure-preparation diagnosis
|
||
|
||
The exact saved first candidates from iterations 2, 3, 4, 7 and 11 all reproduce
|
||
`thermodynamic_domain / pressure_force / outside_domain` (enum values 2 / 6 / 5).
|
||
The production pressure source reaches this branch for finite negative enthalpy.
|
||
These are enthalpy-domain failures rather than inverted geometry. No new Krylov
|
||
solve is involved in the frozen replays.
|
||
|
||
All iteration labels below are zero-based. Physical quantities use the model
|
||
units M=R_reference=G=1; h values below are not normalized residual entries. The pressure limiter stays at local
|
||
stellar element 459, pressure quadrature point 50; the closure limiter is point
|
||
36 of its different production rule on the same element.
|
||
|
||
| Iteration | Pressure-point h | Direction dh there | Pressure alpha bound | Closure alpha bound | Live accepted alpha |
|
||
|---:|---:|---:|---:|---:|---:|
|
||
| 2 | 9.63674e-4 | -1.31441e-2 | 7.33159e-2 | 7.27489e-2 | 6.25e-2 |
|
||
| 3 | 1.42165e-4 | -2.11119e-3 | 6.73390e-2 | 7.15585e-2 | 6.25e-2 |
|
||
| 4 | 1.02159e-5 | -1.89704e-3 | 5.38520e-3 | 1.01581e-2 | 3.90625e-3 |
|
||
| 7 | 7.04574e-8 | -1.86569e-3 | 3.77648e-5 | 4.90600e-3 | 3.05176e-5 |
|
||
| 11 | 1.07227e-9 | -1.86493e-3 | 5.74963e-7 | 4.87083e-3 | 4.76837e-7 |
|
||
|
||
The pressure step budget falls by **127,514 times**. These are physical enthalpy
|
||
values and corrections evaluated with unchanged normalization at the same
|
||
production points. For consecutive captured states, the next h
|
||
agrees with `h + accepted_alpha * dh` to 2.01e-18. At the late state, the closure
|
||
bound is about 8,472 times looser than the pressure bound. The shrinking pressure
|
||
h explains the vanishing admissible steps along these measured directions; it
|
||
does not yet explain why the computed directions keep decreasing h there.
|
||
|
||
The element touches the stellar surface. Its limiting pressure point has
|
||
reference Cartesian radius 0.997553 and lies near the negative rotation pole
|
||
(about 8.66 degrees from the negative z axis at onset). This is an interior
|
||
quadrature point in a surface-adjacent element, not a surface boundary row.
|
||
Topology establishes adjacency, not distance to the deformed surface.
|
||
|
||
Both onset and late probes bracket the production enthalpy bound with 0.99 and
|
||
1.01 times that bound. Enthalpy-only steps reproduce the crossing rejection;
|
||
shape-only steps prepare successfully. Across the two 19-trial grids, no
|
||
geometry rejection occurs. Affine limiting-point h predictions agree with
|
||
independent point evaluations within 1.05e-17. Preparation success alone does
|
||
not imply merit acceptance.
|
||
|
||
At onset the closure bound is slightly tighter. The original large candidate
|
||
crosses both bounds, and pressure is prepared first, so its rejection stage
|
||
cannot identify the tighter family. The supplemental candidate at
|
||
alpha=0.07303236911639208 lies strictly between the two bounds. Its predicted
|
||
closure h is -5.01979e-6 while the limiting pressure h remains +3.72619e-6.
|
||
The production replay confirms that sequence: pressure preparation passes and
|
||
closure preparation rejects with `thermodynamic_domain / barotropic_closure /
|
||
outside_domain` (2 / 3 / 5). This distinguishes the first reported failure stage
|
||
from the tightest sampled bound.
|
||
|
||
The supplemental trace inspection uses the actual compiled surface carrier map.
|
||
All **866 surface enthalpy coefficients and directions are exactly zero** at
|
||
onset and late plateau. The exported indices also establish exact zero surface
|
||
enthalpy in all five captured physical bases and their five exact first-trial
|
||
candidates. Their contributions to h and dh at both limiting interior points
|
||
are exactly zero. The surface condition exists and is satisfied here; boundary
|
||
leakage does not explain this wall.
|
||
|
||
The limiting element is cubic, with 64 enthalpy FE nodes. At onset, a step of
|
||
1.01 times the sampled union bound leaves all 64 nodal h values nonnegative,
|
||
while closure and pressure interior samples have h=-1.28819e-5 and -2.11e-6,
|
||
respectively. At the late state, **even the full unit step leaves all nodes
|
||
nonnegative**, but h at the pressure limiting point is -1.86493e-3. This
|
||
establishes interior polynomial undershoot along these corrections. Nodal
|
||
positivity or exact zero surface trace is insufficient to prevent it. It does
|
||
not establish an interpolation implementation bug. The onset full unit step
|
||
also makes five nodes negative, so that larger step must not be described as
|
||
an exclusively between-node failure.
|
||
|
||
A final offline check reconstructs the two local tensor-Q3 polynomials from
|
||
those 64 physical FE nodal values. It reproduces all nodal values exactly and
|
||
both production limiting-point h/dh values within 6.94e-18. The same interior
|
||
sampling grid has 495,264 points per inspected state, including uniform spacing
|
||
1/64 and logarithmic distances from 1e-12 to 1e-1 from the zero-trace z=0 face.
|
||
|
||
| Local polynomial state | Minimum sampled h | Reference-element location | Interpretation |
|
||
|---|---:|---|---|
|
||
| Onset base | positive on this grid | — | No negativity detected; not a positivity certificate |
|
||
| Onset accepted alpha=0.0625 | positive on this grid | — | Same limited conclusion |
|
||
| Onset alpha=0.99 times production bound | -2.36406e-5 | (0.0130467, 0.515625, 0.01) | Negative between production samples |
|
||
| Late captured base | **-2.87114e-5** | (0.0130467, 0.515625, 0.01) | Existing pointwise violation before the next step |
|
||
|
||
The late base has 2,401 negative samples on that grid. This conclusion uses only
|
||
the captured base polynomial and is independent of direction-reconstruction
|
||
roundoff. A separate line evaluation at the pressure point's x,y coordinates
|
||
and reference z=0.005 gives h=-1.54933e-5. An independent 60-digit Decimal
|
||
reconstruction gives -1.5493345386780819e-5 at that point; its input hashes,
|
||
formula and production-point checks are retained in
|
||
`tensor_q3_independent_check.json`. The negative magnitudes are many orders
|
||
above interpolation-check discrepancies. They prove the existence of negative
|
||
values in this element; the sampled minimum is not a certified global minimum.
|
||
|
||
For the onset direction, the finer sampled step bound is 0.0665364 versus the
|
||
production union bound 0.0727489. For the late base, a positivity-preserving step
|
||
bound from an everywhere-admissible base cannot be asserted because the base
|
||
already has negative h. **Passing production quadrature preparation currently
|
||
does not ensure internal pointwise enthalpy positivity.** The inspected late
|
||
state is nonconverged and already fails the virial milestone; this finding does
|
||
not assert that the previously converged nonrotating/low-J controls share the
|
||
same defect. No new quadrature or EOS rule was installed.
|
||
|
||
## Shape and field curvature
|
||
|
||
Let p be the captured correction, p_s its actual surface-deformation block,
|
||
and p_f all remaining fields and scalars. The diagnostic prepares the same
|
||
frozen base before every Jacobian action and measures
|
||
|
||
`R_d(alpha) = F(x + alpha*p_d) - F(x) - alpha*J*p_d`.
|
||
|
||
The mixed component is the vector `R_full - R_shape - R_fields`, formed before
|
||
any norm. Each case uses six common alphas separated by decades; the largest
|
||
is capped by geometry and both enthalpy rules so all three directions can be
|
||
compared at the same step. Directions are not renormalized separately.
|
||
|
||
| Frozen case | Common alpha | ‖Ftrial‖/‖F0‖ | ‖L‖/‖F0‖ | ‖R‖ / alpha² | Gravity fraction of ‖R‖² |
|
||
|---|---:|---:|---:|---:|---:|
|
||
| n=1, J=0.1, iteration 2 | 0.058199106 | 0.94307844 | 0.94180757 | 0.062255721 | 99.8390% |
|
||
| n=1.5, J=0, iteration 1 | 1 | 12.243161 | 0.02576812 | 0.0021890295 | 99.7747% |
|
||
| n=3 constrained seed | 0.12194828 | 1.0237652 | 0.87826014 | 0.11177311 | 90.7812% |
|
||
|
||
For n=1.5 at iteration 1, the exact first candidate is preparation-admissible,
|
||
with positive minimum Jacobian 0.896116. Its residual norm reproduces the original
|
||
merit-rejected trial within 1.43e-17. The full-step linear prediction would leave
|
||
only 2.5768% of the starting residual, whereas the actual trial has **12.243 times**
|
||
the starting residual. At alpha=0.1, the actual ratio is still 1.02052 versus the
|
||
linear prediction 0.900070; at 0.01 it falls to 0.991209. This directly measures
|
||
curvature-driven merit rejection separately from the rotating enthalpy wall.
|
||
|
||
At this n=1.5 base, gravity-gradient shape and field action norms are 0.115959
|
||
and 0.116055, with cosine -0.999999831; their combined action norm is only
|
||
1.16990e-4. Poisson actions likewise nearly cancel (cosine -0.999996055).
|
||
Truncating just the shape block would destroy this measured first-order
|
||
cancellation. A full-step second-order remainder of 2.18903e-3 survives, with
|
||
99.7747% of its squared norm in the two gravity residual blocks.
|
||
|
||
The remainder divided by alpha squared stabilizes as alpha decreases, while
|
||
resolved gravity remainder slopes approach two. With shape held fixed, gravity
|
||
is affine in its other fields in the source, and the measured fields-only gravity
|
||
remainders remain at arithmetic scale. The n=1.5 maximum is 2.96e-14, 1.042 times
|
||
the diagnostic's heuristic floor; the strict below-floor flag is therefore false,
|
||
but that floor is not a certified assembly-error bound. This slight excess is
|
||
not evidence of nonlinear fixed-shape gravity. The smallest steps that reach the
|
||
arithmetic floor are excluded from slope claims.
|
||
|
||
| Frozen case | 2⟨L,R_shape⟩ | 2⟨L,R_fields⟩ | 2⟨L,R_mixed⟩ | ‖R_full‖² | Total curvature cost |
|
||
|---|---:|---:|---:|---:|---:|
|
||
| n=1, J=0.1, iteration 2 | -1.952454e-08 | -3.042692e-10 | 9.736527e-08 | 4.446556e-08 | 1.220020e-07 |
|
||
| n=1.5, J=0, iteration 1 | -7.601828e-10 | 1.587389e-12 | 1.185527e-09 | 4.791850e-06 | 4.792277e-06 |
|
||
| n=3 constrained seed | 1.458147e-09 | -9.452314e-08 | -9.285962e-09 | 2.762978e-06 | 2.660627e-06 |
|
||
|
||
Here `L = F0 + alpha*Jp` and the exact scalar identity is
|
||
`||Ftrial||² = ||L||² + 2<L,Rfull> + ||Rfull||²`.
|
||
The three signed projection terms add to `2<L,Rfull>`; the last squared term
|
||
contains cross terms between remainder components. Positive values worsen the
|
||
linear squared-merit prediction. At the n=1.5 full step, the dominant cost is
|
||
the squared remainder itself, not the small signed projections onto the nearly
|
||
zero linear prediction. At alpha=0.1, both shape and mixed projections are adverse.
|
||
At the admissible rotating onset step, curvature modestly worsens the prediction
|
||
but still allows residual decrease; its larger historical steps instead fail
|
||
enthalpy preparation.
|
||
|
||
These observations support genuine nonlinear shape/field curvature along the
|
||
measured directions, with no detected first-order Jacobian inconsistency there.
|
||
They do not certify every Jacobian column. The gravity-block aggregates include
|
||
both stellar and exterior domains and do not establish where the nonlinear
|
||
remainder originates. No physical importance is assigned to exterior accuracy
|
||
beyond its influence on the interior solution.
|
||
|
||
The n=3 seed retains its explicit central-density constraint. Its saved
|
||
restart-160 correction has true relative linear defect 0.0402590212946322,
|
||
exactly matching the earlier failed linear solve and exceeding the 0.03 gate.
|
||
No new solve was substituted. At the common cap the trial residual is 2.3765%
|
||
above the base despite a predicted 12.174% decrease. The mixed component is large,
|
||
but its signed projection is favorable; the positive squared-remainder term
|
||
outweighs all favorable projections. At one tenth the cap, the residual decreases
|
||
and net curvature slightly improves the linear prediction. This prevents a
|
||
blanket attribution of every failed step to an adverse mixed projection.
|
||
|
||
## Consequences and next experiments
|
||
|
||
The two mechanisms should be tested and treated separately.
|
||
|
||
1. **Pressure/closure feasibility.** A production-rule enthalpy step cap would
|
||
avoid known inadmissible trials. It would not, by itself, remove a wall where
|
||
the same h tends to zero while dh stays negative: the existing accepted steps
|
||
are already 72.5–92.8% of the sampled union bound. The next discriminating
|
||
numerical experiment is a tighter frozen linear solve, with local h-direction
|
||
and component defects measured explicitly, to test how strongly the local
|
||
direction depends on linear accuracy. A
|
||
persistent negative direction would still permit nonlinear-path or basin
|
||
effects; it would not prove that no admissible discrete root exists.
|
||
Preserve EOS admissibility and use quadrature/interior polynomial checks when
|
||
testing a positivity representation or constrained step; clipping nodal values
|
||
cannot prevent the demonstrated between-node undershoot. Test interior
|
||
polynomial positivity at accepted states as a separate validation check.
|
||
Increasing quadrature coverage can detect the violation earlier, but detection
|
||
alone is not a convergence remedy. A trial starting from the late base also
|
||
needs feasibility restoration if positivity is to be maintained everywhere.
|
||
Clipping h would
|
||
change the equations and would not establish internal correctness.
|
||
2. **Shape/field nonlinear balance.** Test a trial-only gravity completion at
|
||
fixed candidate shape and density, solving the linear mixed-gravity subsystem
|
||
there before reevaluating every coupled residual. Gravity completion changes the trial path and reduces the gravity defect by
|
||
construction. The test is whether that produces a better coupled trial,
|
||
interior solution and virial after every residual is reevaluated.
|
||
It is a hypothesis, not an implemented production change; other residuals,
|
||
pointwise interior checks and virial must all be measured. Shape-only damping
|
||
is poorly motivated by the strong first-order cancellation in these cases.
|
||
3. **Where the merit is spent.** Before changing normalization or exterior
|
||
weighting, partition the dominant gravity remainder by stellar/exterior
|
||
contribution and measure its effect on interior hydrostatic balance. These
|
||
whole-block probes do not justify demanding exterior accuracy for its own
|
||
sake, nor do they justify dropping exterior residuals that influence the star.
|
||
|
||
The present data do not single out preconditioner failure for the rotating or
|
||
n=1.5 captured steps: their current true linear defects still satisfy the 0.03
|
||
forcing gate. That gate is a global norm criterion, not proof that the local
|
||
enthalpy direction is adequate near a vanishing h. The n=3 frozen correction
|
||
fails that gate and is reported separately. No production preconditioner,
|
||
normalization, EOS admissibility or line-search rule has been altered here.
|
||
|
||
## Verification and reproducibility limits
|
||
|
||
The driver was built in Release with Homebrew Clang 22.1.8, IPO enabled,
|
||
profiling disabled and uniform polynomial order increment zero. Runs were
|
||
serial, on one MPI rank, using the same 1216-hex mesh (832 stellar, 384 vacuum)
|
||
and the unchanged production quadrature rules. Mesh SHA-256:
|
||
`ce11ae99e21e6c3bbfbee402acd2e191c1da0d8261d2227b4203f73f2f337a74`.
|
||
Case manifests and copied immutable executables retain the tested sources even
|
||
while the experiment branch acquires later diagnostic additions. Performance
|
||
was not compared in this campaign.
|
||
|
||
Two instrumented trajectory runs reached their requested iteration caps
|
||
(expected model exit 3). All eight focused cases and both supplemental cases
|
||
completed successfully (exit 0), with matching binary and input/output hashes.
|
||
The n=1.5 rejected-candidate residual norms agree with their historical values
|
||
to 1.43e-17 and 1.84e-18; the two norm implementations have different reduction
|
||
orders, so those numbers are roundoff comparisons rather than byte comparisons.
|
||
All captured base residual vectors reproduce exactly.
|
||
|
||
All ten frozen cases restore their final base residual exactly. Each shape case
|
||
has 22 admissible preparation events, for 66 total; all accepted normalized
|
||
states, physical states and residuals are unchanged. Direction partitions are
|
||
exact. The largest Jacobian partition error is 8.33e-17. Aggregate signed-merit
|
||
and projection identities agree to better than 6.8e-15 relative. All 38 pressure
|
||
crossing trials have complete, unique records and no geometry rejection.
|
||
Independent audits check vector copies, quadrature-bound identity, CSV coverage,
|
||
all surface coefficient statistics and nodal identities.
|
||
|
||
Implicit neighboring capture state/residual inputs are covered by the capture
|
||
output hashes as well as independent checks; the runner's explicit-input hashes
|
||
alone do not cover that auxiliary-read path. Late reconstructed directions retain
|
||
the subtraction-roundoff limitation documented above. The late recomputed true
|
||
linear defect differs from its historical value by 2.25e-9, while both remain
|
||
below 0.03; exact-candidate replay is independent of that reconstruction.
|
||
|
||
No production/library or public-header code changed relative to `95d9fba`;
|
||
the existing production C++ suite was not rerun for these experiment-only
|
||
changes. Validation instead includes compilation of the diagnostic executables,
|
||
exact trajectory comparisons, production candidate replays, independently
|
||
recomputed CSV identities, input/output hashes, and frozen-state restoration.
|
||
A zero diagnostic process exit means the observations completed. It does not
|
||
mean a stellar equilibrium converged.
|
||
|
||
This campaign establishes no additional virial-qualified model. The captured
|
||
rotating endpoint is exactly the previous nonconverged endpoint: its P(h)-based
|
||
virial errors remain approximately 4.75e-4 and 8.18e-4, above the required 1e-5.
|
||
The n=1.5 capture is intentionally only a three-step prefix; its eventual
|
||
convergence and pointwise accuracy are not inferred from these probes. J=0.1
|
||
is an angular-momentum input, not 10% of critical rotation. Critical-rotation
|
||
fractions were not computed.
|
||
|
||
## Reproduction and retained analyses
|
||
|
||
The three case manifests are `plateau_capture_cases_2026-09-17.json`,
|
||
`plateau_focused_cases_2026-09-17.json`, and
|
||
`plateau_supplemental_cases_2026-09-17.json` in `experiments/`. Their tested source
|
||
commits are respectively `fd08f7b`, `9e1b65d`, and `4280c53`. Each artifact folder
|
||
contains `provenance.json`, exact per-case commands, case input/output hashes,
|
||
logs and the copied executable. The midpoint candidate also retains a derivation
|
||
record and SHA-256. No raw state files or binary build products are committed.
|
||
|
||
Run a new numerical campaign with a compatible configured build and a fresh
|
||
output directory:
|
||
|
||
```sh
|
||
python3 experiments/run_plateau_campaign.py \
|
||
--source . --build cmake-build-release-homebrew --mesh sandbox.smesh \
|
||
--cases experiments/plateau_focused_cases_2026-09-17.json \
|
||
--cmake /Applications/CLion.app/Contents/bin/cmake/mac/aarch64/bin/cmake \
|
||
--jobs 8 --output /absolute/path/to/new-results
|
||
```
|
||
|
||
Use the corresponding tested source checkout for exact source reproduction.
|
||
The supplied case manifests reference the retained absolute capture paths;
|
||
relocating artifacts requires changing those paths consistently. The runner
|
||
checks committed source, rebuilds, records provenance and refuses reused output
|
||
directories. Replaying the copied executables with the recorded arguments and a
|
||
new output path is another way to retain the exact tested binary.
|
||
|
||
The portable analysis scripts under `experiments/plateau_analysis/` take the
|
||
artifact root containing `captures/`, `focused/`, and `supplemental/`:
|
||
|
||
```sh
|
||
python3 experiments/plateau_analysis/analyze_pressure.py /absolute/path/to/artifact-root
|
||
python3 experiments/plateau_analysis/analyze_shape.py --campaign /absolute/path/to/artifact-root
|
||
python3 experiments/plateau_analysis/audit_focused_outputs.py /absolute/path/to/artifact-root
|
||
python3 experiments/plateau_analysis/audit_surface_outputs.py /absolute/path/to/artifact-root
|
||
python3 experiments/plateau_analysis/sample_pressure_polynomial.py /absolute/path/to/artifact-root
|
||
```
|
||
|
||
They do not run the solver or alter raw case data. They regenerate compact
|
||
Markdown/JSON analyses alongside those data. See `pressure_analysis.md`,
|
||
`shape_analysis.md`, `pressure_polynomial_analysis.md`, `capture_validation.md`,
|
||
and `focused_method_validation.md`
|
||
in the retained artifact root for the detailed per-case checks.
|