# Test data provenance
## JPL Horizons DE441 — apparent solar ecliptic longitude
- **Source:** [JPL Horizons](https://ssd.jpl.nasa.gov/horizons/) system, DE441
ephemeris. Geocentric, **apparent** (airless) ecliptic longitude of the Sun,
hourly tables.
- **Use case:** Independent oracle for `solar_ecliptic_state().apparent_longitude_degrees`.
This is the same reference the TypeScript `stem-branch` validates against, so
the Rust port is checked against external ground truth rather than the TS
output (which would be circular).
- **Values:** 7 sampled `(JD_TT, apparent_longitude_deg)` tuples spanning
1900–2100 CE, embedded directly in `tests/de441_oracle.rs::CASES`. Includes
both round-time (00:00 / 12:00) and off-round (03:00 / 06:00) instants at full
Julian-day precision.
- **Independence:** the answer values are authored by JPL, not by us — an
external check, not a fixture we generated and then asserted against.
- **License / redistribution:** JPL Horizons output is a U.S. Government work and
is in the public domain.
Measured residual of the current model against these points: **max ≈ 0.08″**
(well under the 1″ test tolerance).
## npm_golden.txt — Rust↔npm port-fidelity corpus (tier 2, NOT independent)
- **Source:** this project's own npm/TypeScript engine (`@4n6h4x0r/stem-branch`),
**not** a third party. Generated by
[`scripts/gen-npm-golden.mjs`](../../../scripts/gen-npm-golden.mjs).
- **Purpose:** assert the Rust crate reproduces the npm engine to floating-point
noise (`tests/npm_parity.rs`) — a **port-fidelity** check. Because both share
the model and generated tables, this proves faithfulness, **not** correctness;
correctness comes from the independent oracles (JPL DE441 above, the new-moon
conjunction check, the published-almanac lunisolar dates, and — on the npm
side — sxwnl and cnlunar).
- **Contents:** 2,726 records — `solar`/`moon` states, `lunisolar` conversions,
and `solar-term` lookups across 1900–2100. Regenerate after any change to
either engine; drift surfaces immediately.