Methods
Caelus is written from the published record, then checked against two independent references before any figure is quoted. The per-body numbers live on Validation; the source citations live on Provenance. This page covers how a model gets from a paper to a tested result.
Reference-first
Every model lands first in the Python reference. That reference emits golden fixtures: position and event values at fixed instants, written to JSON. The TypeScript engine is a port of the same math, and a conformance suite replays the fixtures against it on every commit. The port has to reproduce the reference to the last digit the fixture records. A red run blocks merge.
The core reads no files and makes no network calls. Coefficient tables are compiled in or loaded as plain data, so the same code path runs in the browser, on an edge runtime, and in Node. A model is not shipped until the reference, its fixtures, and the port all agree.
Two independent yardsticks
Swiss Ephemeris 2.10 is the calibration oracle. It shares the apparent-place definition used here, geocentric ecliptic longitude at the true equinox of date, so a comparison at random instants across 1900–2099 shows whether the model matches the field standard. No Swiss Ephemeris code or coefficient ships in Caelus. It is a test target only.
JPL Horizons is the independent reference. Its apparent geocentric right ascension and declination come from a different source and a different frame, sampled at a separate set of epochs. Agreement with Swiss alone could mean two implementations of the same textbook share a bias; agreement with Horizons as well shows the result tracks the underlying ephemeris. The Sun and inner planets sit near a tenth of an arcsecond against Horizons, the Moon near two tenths, and the giant planets within a few arcseconds.
Recovering effects by fitting
Some effects are not published as a formula you can apply directly. Where that happens, the coefficient or rule is recovered by fitting to a reference and then frozen as data, with the raw samples kept for reproducibility.
- Minor bodies. Chiron and the asteroids are Chebyshev fits of JPL Horizons samples across 1850–2150, with residuals under 5×10⁻⁶ AU. They use the same geocentric pipeline as the planets.
- Lunar eclipse magnitude. The Danjon enlargement of Earth's shadow is recovered empirically against Swiss, which brings lunar magnitudes within 0.0013.
- Uranian points. The Hamburg-school bodies use constant-element Kepler orbits whose elements are fit to Swiss Ephemeris's built-in definitions.
- Rise, set, and Gauquelin sectors. Disc-center geometry with refraction is matched to the Swiss rise and set method.
What gets reproduced, and how it is checked
| Layer | Check |
|---|---|
| Planet and Moon longitudes | Swiss across 1900–2099, plus JPL Horizons at independent epochs |
| House cusps, 8 added systems | exact against swe_houses_armc, polar cases included |
| Vertex and east point | exact against swe_houses_armc |
| Rise, set, meridian transit | root-finds against swe_rise_trans |
| Crossings and lunar phases | against swe_solcross and swe_mooncross |
| Eclipse types | exact over 1990–2030, zero mismatches |
Full per-body bounds, including root-mean-square figures, are on Validation.
Where the method reaches its limit
A few quantities are ill-conditioned, and the accuracy table says so rather than smoothing it over. A planetary station is a speed-zero root with a slope near 0.01° per day squared, so a sub-arcsecond position difference turns into a timing difference of seconds to about a minute. The osculating lunar apogee, sold as "true Lilith", amplifies the lunar theory's own error by roughly a factor of 1/e, which is why its values disagree across every software package at that scale. Numbers like these are quoted with the reason they are large.