Modal ephemeris architecture
R121 makes the approved per-widget ephemeris modes an explicit production contract rather than an implementation convention.
Authoritative widget policy matrix
ephemeris_policy.py is the final production authority. The selection is modal: each widget receives only the dynamics, output profile, scheduler and cache approved for its scientific task.
| Widget | Dynamics | Output profile | Scheduling | Cache |
|---|---|---|---|---|
| WVisual | DE440s N-body | Astrometric position | Serial series | Memory trajectory |
| WCCD | DE440s N-body | Astrometric position | Serial series | Memory trajectory |
| WStack | DE440s N-body | Astrometric position | Serial series | Memory trajectory |
| WPlanner | DE440s N-body | Planner full | Comet intervals | Persistent validated segments |
| WLightCurves | Two-body | Photometric geometry | Missing physical coverage / point batches | Canonical memory geometry |
Output profiles
Astrometric position
WVisual, WCCD and WStack require RA/Dec-capable astrometric results. They retain DE440s Cowell-DOP853 N-body propagation, reception/emission light-time and the established in-memory trajectory cache.
Planner full
WPlanner retains N-body and the complete planner result needed for visibility, topocentric conversion, displayed fields and best-time logic. It prepares comet intervals and can reuse validated persistent polynomial segments.
Photometric geometry
WLightCurves uses the R116 two-body photometric geometry kernel. The profile supplies r, delta and phase for analytical curves, is not RA/Dec-capable and must not import N-body/DOP853 astrometric execution.
Scheduling and cache boundaries
- WVisual, WCCD and WStack use serial series scheduling and memory trajectory reuse.
- WStack must create no process jobs and must not own persistent N-body segments.
- WLightCurves uses the global point-batch route, one canonical memory-geometry identity and deterministic ordering; process scheduling is allowed only above the approved missing-point threshold.
- A process worker must never start another process scheduler.
- Qt and Matplotlib objects are forbidden from process payload modules.
- Stale-result rejection, shared Cancel and transactional cache commit remain release-blocking contracts.
| Deterministic R121 fixture | Contract |
|---|---|
| Ordinary analytical workload | 10,000 points; local batch |
| Process threshold | 200,000 missing points |
| Point-batch bounds | 256–2,048 points |
| One 10,000-point apparition | At least 16 internal batches |
| 12 × 20-point small apparitions | One coalesced batch |
| Cosmetic redraw | Zero new physical calls |
| Planner forward interval | 500 points |
| Planner cold/warm integration count | 1 / 0 |
| Planner worker maximum | 4 while reserving one CPU |
| WStack process jobs | 0 |
Planner persistent validated segments
Planner prepares dynamic comet interval jobs and fits validated persistent segments. The persistent cache is an acceleration layer, not a new scientific model: segment degree, validation tolerances, schema and disk limit remain unchanged. Atomic writes prevent partially committed cache files.
The deterministic reference requires one integration for a cold 500-point forward interval and zero integrations after reopening a valid warm segment. Planner may use at most four workers while reserving one CPU.
Preserved scientific invariants
R121 changes no N-body force, DOP853 tolerance, two-body conic equation, light-time equation, element/apparition selection, adaptive curve sampler, H0/n law, phase correction, Planner best-time rule or displayed field. The modal architecture prevents a valid specialized kernel from being replaced by a heavier or scientifically inappropriate route.
See N-body internal ephemeris, Analysis performance and the R121 release gate.