{
  "basis": "JPL Horizons (DE441) over 1000-3000; the 1850-2150 figures remain vs Swiss Ephemeris 2.10. Frame-free (ICRF astrometric) position error; the of-date apparent figures carry a uniform ~3.3\" IAU1976/1980-vs-Vondrak2011 precession-convention term that is not a position error. Swiss Moshier is not a trustworthy oracle over the wide span (it drifts from DE441: Neptune 10\", Pluto 30\"), so the wide band is measured against JPL directly.",
  "range": "1000-3000",
  "unit": "arcsec",
  "bodies": [
    {
      "name": "Sun",
      "max": "0.5",
      "rms": "0.2",
      "note": ""
    },
    {
      "name": "Moon (precise tier)",
      "max": "2.5",
      "rms": "0.9",
      "note": "JPL DE423 fit (2010); DE423 vs DE440 is <0.1″ over this span"
    },
    {
      "name": "Moon (embedded series)",
      "max": "9.6",
      "rms": "2.8",
      "note": "60-term ELP abridged"
    },
    {
      "name": "Mercury",
      "max": "0.6",
      "rms": "0.2",
      "note": ""
    },
    {
      "name": "Venus",
      "max": "0.8",
      "rms": "0.2",
      "note": ""
    },
    {
      "name": "Mars",
      "max": "0.7",
      "rms": "0.2",
      "note": ""
    },
    {
      "name": "Jupiter",
      "max": "0.9",
      "rms": "0.3",
      "note": ""
    },
    {
      "name": "Saturn",
      "max": "1.0",
      "rms": "0.4",
      "note": ""
    },
    {
      "name": "Uranus",
      "max": "1.9",
      "rms": "0.7",
      "note": "series truncation; complete VSOP87 holds ≤1″"
    },
    {
      "name": "Neptune",
      "max": "4.6",
      "rms": "2.2",
      "note": "series truncation; complete VSOP87 holds ≤1″"
    },
    {
      "name": "Pluto",
      "max": "3.4",
      "rms": "1.0",
      "note": "JPL Horizons barycenter Chebyshev pack (1000-3000, true error 8.3e-7 AU ≈ 0.005″); supersedes the Meeus ch.37 series. Bound is vs SE's own Moshier Pluto over the modern era"
    },
    {
      "name": "Chiron",
      "max": "1.0",
      "rms": "0.3",
      "note": "JPL Horizons fit, 1600-2484 (Horizons serves small bodies only over ~1600-2500)"
    },
    {
      "name": "Mean node",
      "max": "0.1",
      "rms": "0.1",
      "note": ""
    },
    {
      "name": "True node",
      "max": "0.8",
      "rms": "0.4",
      "note": "vs full JPL DE431 files; vs Swiss Ephemeris's BUILT-IN (Moshier) ephemeris expect up to ~1′ (measured: 50″ max, 8″ median, 300 epochs) — that is the built-in lunar theory's own node error, not ours"
    },
    {
      "name": "Ascendant / MC",
      "max": "3.2",
      "rms": "—",
      "note": ""
    },
    {
      "name": "Placidus cusps (all 12)",
      "max": "3.2",
      "rms": "—",
      "note": ""
    },
    {
      "name": "Mean Lilith",
      "max": "1.6",
      "rms": "0.5",
      "note": "mean lunar apogee on the inclined orbit; latitude ≤0.1″"
    },
    {
      "name": "Sidereal longitudes",
      "max": "—",
      "rms": "—",
      "note": "ayanamsa model vs SE ≤0.005″ (Vondrák 2011, same model both sides); sidereal longitudes inherit each body's tropical bound"
    },
    {
      "name": "RA / Dec",
      "max": "2.6",
      "rms": "—",
      "note": "rotation is exact; bound tracks each body's ecliptic accuracy (Moon worst)"
    },
    {
      "name": "Topocentric Moon",
      "max": "2.7",
      "rms": "—",
      "note": "parallax model adds ≤0.1″ over the geocentric bound"
    },
    {
      "name": "House cusps, 8 new systems",
      "max": "0.0",
      "rms": "0.0",
      "note": "Koch, Regiomontanus, Campanus, Alcabitius, Morinus, Meridian, Polich-Page, Vehlow: exact vs swe_houses_armc (200 polar-inclusive cases each)"
    },
    {
      "name": "Vertex / east point",
      "max": "0.0",
      "rms": "0.0",
      "note": "exact vs swe_houses_armc"
    },
    {
      "name": "Magnitudes",
      "max": "0.045 mag",
      "rms": "—",
      "note": "Mallama 2018; Moon (Allen law) valid to phase angle 140°"
    },
    {
      "name": "Rise/set/meridian transit",
      "max": "0.5 s",
      "rms": "—",
      "note": "vs swe_rise_trans, 48 polar-inclusive cases per body; Moon bound tracks its position accuracy"
    },
    {
      "name": "Crossings / lunar phases",
      "max": "4 s",
      "rms": "—",
      "note": "vs swe_solcross/swe_mooncross and elongation root-finds"
    },
    {
      "name": "Stations",
      "max": "55 s",
      "rms": "—",
      "note": "ill-conditioned by nature: speed-zero slope ~0.01°/day² turns sub-arcsecond model differences into minutes"
    },
    {
      "name": "True Lilith (osc. apogee)",
      "max": "214",
      "rms": "—",
      "note": "hypersensitive to the lunar theory (~1/e amplification); SE's own Moshier-vs-DE difference dominates. 'True Lilith' values disagree across software at this scale"
    },
    {
      "name": "Ceres, Pallas, Juno, Vesta, Pholus",
      "max": "1.0",
      "rms": "0.3",
      "note": "JPL Horizons fits 1600-2484 (true error <5e-6 AU); same geocentric pipeline as Chiron. No independent SE oracle here: SE's asteroid files are unavailable in Moshier mode"
    },
    {
      "name": "Uranian bodies (Cupido…Poseidon)",
      "max": "2.3",
      "rms": "—",
      "note": "Hamburg-school constant-element Kepler orbits, elements fitted to SE 2.10's built-in definitions (fit_uranian.py prints per-body figures; Zeus is fit-noise-limited at ~3″ heliocentric). Uranian practice works in arcminutes"
    },
    {
      "name": "Fixed stars (318-star catalog)",
      "max": "0.3",
      "rms": "—",
      "note": "HYG-derived catalog (ICRS J2000 + proper motions, full 3D space motion, Vondrák 2011 precession); vs swe_fixstar fed the same rows"
    },
    {
      "name": "Star-anchored ayanamsas",
      "max": "0.5",
      "rms": "—",
      "note": "galcent_0sag and true_citra computed from the apparent star; bound tracks the fixed-star chain (≤0.3″) plus the body's tropical accuracy"
    },
    {
      "name": "Gauquelin sectors",
      "max": "0.0001 sectors",
      "rms": "—",
      "note": "rise/set of disc center with refraction (SE method 3): exact to the rise/set bound"
    },
    {
      "name": "Eclipses (solar + lunar)",
      "max": "9 s",
      "rms": "—",
      "note": "times of maximum vs swe; types exact over 1990-2030 (92 lunar + 89 solar, zero mismatches); lunar magnitudes ≤0.0013 (Danjon parallax enlargement, recovered empirically). Contact times typically ≤15 s, minutes for grazing geometries. Global circumstances only — no ground paths"
    }
  ],
  "summary": [
    {
      "label": "Sun–Saturn",
      "bound": "≤ 1″"
    },
    {
      "label": "Uranus / Neptune",
      "bound": "≤ 1.9″ / ≤ 4.6″"
    },
    {
      "label": "Moon (1920–2080 tier)",
      "bound": "≤ 2.5″"
    },
    {
      "label": "Moon (series, embedded)",
      "bound": "≤ 10″"
    },
    {
      "label": "Pluto / Chiron",
      "bound": "≤ 3.4″ / ≤ 1″"
    },
    {
      "label": "Angles & Placidus cusps",
      "bound": "≤ 3.2″"
    },
    {
      "label": "True node",
      "bound": "≤ 1′ vs SE built-in (≤ 1″ vs JPL DE431)"
    },
    {
      "label": "Mean Lilith",
      "bound": "≤ 1.6″"
    },
    {
      "label": "8 new house systems",
      "bound": "exact (0.0″)"
    },
    {
      "label": "Rise/set/transit",
      "bound": "≤ 0.5 s"
    },
    {
      "label": "Crossings & phases",
      "bound": "≤ 4 s"
    },
    {
      "label": "Asteroids (big 4 + Pholus)",
      "bound": "≤ 1″"
    },
    {
      "label": "Uranian bodies",
      "bound": "≤ 2.3″"
    },
    {
      "label": "Fixed stars",
      "bound": "≤ 0.3″"
    },
    {
      "label": "Sidereal (7 ayanamsas)",
      "bound": "≤ 0.005″ added"
    },
    {
      "label": "Eclipses",
      "bound": "types exact; max ≤ 9 s"
    }
  ],
  "v03_harness": "python/validate_swiss.py regenerates the modern-era figures against pyswisseph 2.10 (Moshier mode); python/validate_horizons.py measures the wide band (1000-3000) against JPL Horizons directly, both the of-date apparent basis and the frame-free astrometric basis. Over the wide span the JPL figures are the oracle, since Swiss Moshier drifts from DE441 there",
  "true_node_vs_builtin": "1′",
  "counts": {
    "house_systems": 12,
    "sidereal_ayanamsas": 7,
    "mcp_tools": 35,
    "default_bodies": 13
  }
}
