Celestine accuracy

Celestine finds all 50 solar and lunar eclipses of 2020–2030 in the NASA Five Millennium Canon; the worst greatest-eclipse time differs by 17.1 s. Against JPL Horizons, Sun through Pluto stay within 4.64″ in longitude (worst: Neptune) and the Moon within 7.58″. Ascendant and MC match ERFA within 0.0011″.

Celestine 0.8.0 · run 2026-10-29 (UTC) · Node v22.23.4

Reproduce: npm run build && npm run bench:accuracy

Summary

Area / referenceWorst residual
Eclipses vs NASA canon50/50, 17.1 s
Sun–Pluto vs Horizons4.64″ (Neptune)
Moon vs Horizons7.58″
Chiron precise vs Horizons0.402″
Mean node vs ERFA faom030.124″
ASC/MC vs ERFA0.0011″
ΔT 1955–2026 vs USNO tables0.104 s
Lunar phases vs USNO59.7 s
Sign ingresses vs Horizons (excluding Pluto)41.6 min

Eclipses

NASA Five Millennium solar and lunar canons, greatest-eclipse instants in TT, 2020-01-01 inclusive through 2031-01-01 exclusive. Each reference is matched once to the nearest same-kind event within one day. Residuals compare TT directly, without applying NASA’s ΔT to civil times.

KindCanon / foundType agreesMax / median (s)Magnitude max |Δ|Umbral max |Δ|Penumbral max |Δ|
solar24 / 2424/2417.1 / 4.370.00053300
lunar26 / 2626/2611.5 / 5.680.0007010.0007010.0007
combined50 / 5050/5017.1 / 4.940.0007010.0007010.0007

2026–2028 catalog validation

TD is TT. UT residuals use NASA’s predicted ΔT separately from Celestine’s model. Magnitude is solar, lunar umbral, or lunar penumbral for penumbral-only events.

DateKindNASA / Celestine typeTD error (s)UT error (s)Magnitude ΔGamma Δ
2026-02-17solarannular / annular4.019.91-0.00002180.000231
2026-03-03lunartotal / total4.9910.9-0.000203-0.0000641
2026-08-12solartotal / total-10.5-4.70.0000009860.0000703
2026-08-28lunarpartial / partial10.816.6-0.0002740.000152
2027-02-06solarannular / annular-1.555.17-0.00001050.000168
2027-02-20lunarpenumbral / penumbral-8.93-2.2-0.000615-0.000281
2027-07-18lunarpenumbral / penumbral-2.544.10.0001550.000188
2027-08-02solartotal / total-2.863.77-0.000000278-0.000113
2027-08-17lunarpenumbral / penumbral3.339.95-0.0002860.0000793
2028-01-12lunarpartial / partial5.6912.20.000076-0.0000698
2028-01-26solarannular / annular1.718.23-0.00001630.000233
2028-07-06lunarpartial / partial-5.272.160.0001220.0000364
2028-07-22solartotal / total5.4512.9-0.00000882-0.00022
2028-12-31lunartotal / total-6.490.8360.0000341-0.0000586
Greatest-eclipse residual (s, TT)Greatest-eclipse residual (s, TT)-20-1001020202020252030
Violet circles: solar; outlined diamonds: lunar. Horizontal axis: TT year.

Positions

Apparent geocentric longitude and latitude, TT input, mean ecliptic and mean equinox of date. These reuse the Horizons LT+S vectors and frame transformations checked by the precision tests, including their independent quantity-31 cross-check. Longitude residuals wrap to ±180°. Precise Chiron uses only epochs inside PRECISE_RANGE. Every committed sample is measured.

BodyNLon max (″)Lon median (″)Lat max (″)
Sun1800-01-01 to 2200-01-011230.3050.08890.148
Moon1900-01-01 to 2100-01-011237.581.751.28
Mercury1800-01-01 to 2200-01-011761.120.2170.722
Venus1800-01-01 to 2200-01-011480.5790.1170.439
Mars1800-01-01 to 2200-01-011481.170.1620.682
Jupiter1800-01-01 to 2200-01-011231.360.3630.636
Saturn1800-01-01 to 2200-01-011231.660.3951.03
Uranus1800-01-01 to 2200-01-011233.340.5020.662
Neptune1800-01-02 to 2199-12-291234.641.760.359
Pluto1885-01-01 to 2099-01-01913.160.4780.35
Chiron1950-01-01 to 2050-01-0112319,8002,3802,200
Chiron precise1950-01-01 to 2050-01-011230.4020.120.438
Maximum and median longitude residual by bodyLongitude error (″, log scale)0.010.1110100100010⁴10⁵SunMoonMercuryVenusMarsJupiterSaturnUranusNeptunePlutoChironChiron precise
Violet: maximum; slate: median. Values below 0.01″ are plotted at 0.01″.

Lunar node

Public getNorthNode is the true-node default. Its finite perturbation series is compared with the instantaneous geometric osculating node of the Moon about Earth from Horizons ELEMENTS. These definitions differ; the residual includes that model difference. Orbit normals are rotated from fixed ICRF/J2000 ecliptic coordinates to mean ecliptic and equinox of date with ERFA ecm06 (IAU 2006), using TT. Mean node is compared with ERFA faom03, the IERS 2003 fundamental argument already referred to the mean equinox of date.

MetricNMax (″)Median (″)
true611,110317
mean610.1240.0489

Ascendant and MC

ERFA gmst82 and obl80 mirror chart conventions: UT treated as UT1, mean sidereal time plus east-positive longitude, mean obliquity evaluated at UT. No GAST, nutation or ΔT enters the angles. Independent vector geometry determines the eastern horizon intersection. The reference grid has 208 cases spanning 1900–2100, latitudes −65° to +65° and varied longitudes. Celestine uses its public calculateAngles with its own GMST and obliquity. This isolates implementation residuals under that convention, without validating Earth-rotation forecasts.

MetricNMax (″)Median (″)
ascendant2080.00110.000211
midheaven2080.0005460.000235

ΔT

TT minus UT1 model against the USNO historic and monthly tables, including their overlap as separate observations. Decimal years use JD = 2451545 + (year − 2000) × 365.25, exactly as the existing tests. Residuals measure agreement with those tables, not observational uncertainty. The pre-1800 rows characterize a reference disagreement; the model follows NASA’s newer historical polynomial there.

MetricNMax (s)Median (s)
1657–179928612.73.61
1800–18992001.350.216
1900–19541100.320.0522
1955–20267050.1040.0247
ΔT model − USNO (s)ΔT model − USNO (s)-15-7.507.5151700180019002000
Violet: signed residual for every committed USNO table row. Horizontal axis: decimal year.

Event timing

All events in the committed fixtures are used; no sampling. USNO phases and seasons compare returned jdUT against minute-rounded reference UT (up to 30 s of the residual can be rounding). Searches convert UT year boundaries to TT. Horizons stations use ±10-day TT windows; ingresses use ±0.2-day TT windows. Mean-frame comparisons use jdMean; true-equinoctial comparisons use native jd and includeNutation: true. Station types and USNO event counts must agree.

Reference / frameNMax |error|Median
USNO phases994559.7 s16.1 s
USNO seasons80442.5 s15.3 s
Horizons stations mean16062.8 min0.447 min
Horizons stations true16065.7 min0.613 min
Horizons ingresses mean120195 min0.214 min
Horizons ingresses true120178 min0.202 min

Sign ingresses by body

BodyMean frame (min)True frame (min)
Sun0.1130.119
Moon0.1820.182
Mercury0.10.101
Venus2.322.23
Mars1.561.57
Jupiter5.335.56
Saturn10.510.7
Uranus21.621.7
Neptune41.641.6
Pluto195178

Stations by body

BodyMean frame (min)True frame (min)
Mercury0.8330.85
Venus0.4180.275
Mars1.882.12
Jupiter4.835.6
Saturn4.636.7
Uranus1.754.79
Neptune4.348.06
Pluto62.865.7

Known gaps

Method

Residuals are absolute for maxima and medians. Medians average the two central values for even counts. Signed residuals and every measured row are preserved in accuracy.json, together with thresholds, fixture paths, version and run date. Longitude and angular residuals use the shortest wrapped separation. Results are deterministic apart from the run date and recorded runtime version.

References: JPL Horizons API; NASA solar canon; NASA lunar canon; pyerfa and ERFA; USNO API; USNO historic ΔT and monthly ΔT. Fixture READMEs document retrieval and frame conversion.

Thresholds are deterministic regression guards, approximately 1.5 times the measured worst residual rounded upward to a clean value. They are not physical uncertainty estimates. Eclipse counts, unique matches, types, station types and USNO counts are also checked.

Guard thresholds (44 metrics)
MetricMeasured maxThresholdUnit
eclipses.solar17.126s
eclipses.lunar11.518s
eclipses.combined17.126s
eclipses.solarMagnitude0.0005330.0008
eclipses.lunarUmbralMagnitude0.0007010.0011
eclipses.lunarPenumbralMagnitude0.00070.0011
positions.Sun.longitude0.3050.46″
positions.Sun.latitude0.1480.23″
positions.Moon.longitude7.5812″
positions.Moon.latitude1.282″
positions.Mercury.longitude1.121.7″
positions.Mercury.latitude0.7221.1″
positions.Venus.longitude0.5790.87″
positions.Venus.latitude0.4390.66″
positions.Mars.longitude1.171.8″
positions.Mars.latitude0.6821.1″
positions.Jupiter.longitude1.362.1″
positions.Jupiter.latitude0.6360.96″
positions.Saturn.longitude1.662.5″
positions.Saturn.latitude1.031.6″
positions.Uranus.longitude3.345.1″
positions.Uranus.latitude0.6621″
positions.Neptune.longitude4.647″
positions.Neptune.latitude0.3590.54″
positions.Pluto.longitude3.164.8″
positions.Pluto.latitude0.350.53″
positions.Chiron.longitude19,80030,000″
positions.Chiron.latitude2,2003,400″
positions.Chiron precise.longitude0.4020.61″
positions.Chiron precise.latitude0.4380.66″
node.true1,1101,700″
node.mean0.1240.19″
angles.ascendant0.00110.01″
angles.midheaven0.0005460.01″
deltaT.1657–179912.720s
deltaT.1800–18991.352.1s
deltaT.1900–19540.320.49s
deltaT.1955–20260.1040.16s
timing.USNO phases59.790s
timing.USNO seasons42.564s
timing.Horizons stations mean62.895min
timing.Horizons stations true65.799min
timing.Horizons ingresses mean195300min
timing.Horizons ingresses true178283min

Reproduce with npm run build && npm run bench:accuracy. Validate thresholds with node scripts/bench/accuracy.mjs --check. The report reads committed fixtures without network requests. Documentation deployment runs this check after TypeDoc.

Provenance: event fixtures, position fixtures, ΔT tables, angle convention, node conversion.