Modal ephemeris release gate

The standard-library-only R121 gate mechanically prevents cross-widget ephemeris modes, schedulers and caches from drifting away from the approved policy matrix.

R515 structural note: This page preserves feature/release contracts, but any flat-root Python filenames cited as implementation evidence are historical pre-convergence names. Current implementation ownership is canonical under src/kopr/; use the current package/API policy for imports and extension work.

Run the gate

python3 modal_ephemeris_release_gate.py
python3 validate_performance_release.py

The performance validator invokes this gate together with analysis_release_gate.py and the R144 wlightcurves_merger_release_gate.py.

Release-blocking regressions

The gate rejects:

  • a widget using a policy other than its approved constant;
  • process scheduling or persistent N-body segments in WStack;
  • N-body, DOP853 or astrometric calculations inside the analytical two-body kernel;
  • RA/Dec-capable output from the photometric geometry profile;
  • loss of canonical Comet Analyzer point batching or a reintroduced second analytical execution identity;
  • loss of Planner interval preparation, dynamic comet jobs or persistent segment fitting;
  • nested process pools or Qt/Matplotlib process payloads;
  • loss of stale-result rejection, transactional commit, shared Cancel or atomic writes.

Hardware-independent workload fixture

Deterministic R121 fixtureContract
Ordinary analytical workload10,000 points; local batch
Process threshold200,000 missing points
Point-batch bounds256–2,048 points
One 10,000-point apparitionAt least 16 internal batches
12 × 20-point small apparitionsOne coalesced batch
Cosmetic redrawZero new physical calls
Planner forward interval500 points
Planner cold/warm integration count1 / 0
Planner worker maximum4 while reserving one CPU
WStack process jobs0

The fixture also asserts the exact widget matrix, deterministic ordering and absence of nested pools.

Informational benchmark

Photometric-geometry pointsMedian observed time
100.00016 s
1,0000.0149 s
10,0000.1489 s
100,0001.4972 s

The 10,000-point probe formed 24 deterministic internal batches, with a maximum batch of 417 points, and remained local. A synthetic 500-point Planner probe performed one cold integration and zero warm integrations after reopening its persistent cache. These observations are not CI thresholds.

R121 release evidence

  • Focused R111/R114–R121 gate: 71 passed, 1 skipped, 0 failed.
  • Complete deterministic QA: 1,720 passed, 7 skipped, 0 failed.
  • Final manifests: 495 QA files and 153 CLEAN files.

The skipped checks require optional complete PyQt5 or Astropy FITS/time runtimes. Target-system cold/warm timing, CPU use and GUI Cancel remain smoke checks.

Open the supplied R121 release report.

R255 Planner supersession

This page records the historical R121 modal gate. The documented current Planner search/filtering remains legacy two-body followed by accepted-row N-body refinement; Generate maps then performs separate deferred authoritative N-body refinement for missing physical-track epochs. The R121 gate remains useful for the unchanged cross-widget routing foundation.

Current Planner architecture