# Integration Rules for Coding Assistants

Use only the public objects exported by `ephemeris_core` unless the programmer
explicitly asks to audit or modify the numerical model.

## Required input decisions

1. Obtain a frozen osculating element set `e, q, tp, w, om, i`.
2. Preserve any complete fitted/covariance element set and its TDB epoch. The
   core uses it as the stable propagation origin, especially across close
   encounters; the top-level element epoch is the fallback.
3. Record the TDB element epoch, source, and solution ID.
4. Resolve the observing site to WGS84 longitude, latitude, and height.
5. Supply output times explicitly in UTC.
6. Preserve nongravitational parameters and covariance when supplied.
7. Offer `CalculationOptions()` as the fast default. Preserve its critical
   object warnings and use `CalculationOptions(calculation_mode="precise")`
   whenever the user requests maximum accuracy or a warning is raised.

## Never infer silently

- Never invent an observatory or station coordinate.
- Never treat JD UTC as JD TDB.
- Never replace missing covariance by zero.
- Never discard orbit warnings or the source/solution ID.
- Never discard a covariance element epoch merely because a newer top-level
  osculating epoch is available.
- Never introduce Find_Orb, Horizons, MPC, SBDB, a proxy, or another network
  service as a hidden runtime fallback.
- Never replace locally generated and verified N16 data with the legacy 2010
  NAIF 300-asteroid SPK or describe that old file as a current Horizons model.
- Never download N16 data silently. Generation is an explicit, separate user
  action through the supplied tool.
- Never claim identical JPL output unless the input solution and comparison
  conditions have been demonstrated to be identical.

## Reproducible handoff

A generated program should save the exact orbit values, time scales, observer,
requested times, package version, and selected result fields beside its output.
For close approaches it should also save a same-elements validation result.

The numerical routines intentionally do not fetch or normalize orbit data. If
an application needs that surrounding behavior, implement it outside this
package and keep the boundary visible.
