{
 "generatedAt": "2026-09-16 21:18",
 "engineHash": "433450e0f1d2",
 "engineFiles": [
  "js/astronomy.js",
  "js/asteroids.js"
 ],
 "unit": "arcminutes",
 "sweep": {
  "span": "1600–2200",
  "step": "5d",
  "query": "EPHEM_TYPE=OBSERVER, CENTER='500@399', QUANTITIES='31' (geocentric apparent ecliptic longitude)",
  "measuredAt": "2026-09-16 20:49",
  "engineHash": "433450e0f1d2",
  "minutes": 11
 },
 "substitutions": {
  "mars": {
   "measured": true,
   "worst": 0,
   "n": 609,
   "span": "1950–2000 at 30d"
  },
  "jupiter": {
   "measured": true,
   "worst": 0.0011639999999601969,
   "n": 609,
   "span": "1950–2000 at 30d"
  },
  "saturn": {
   "measured": true,
   "worst": 0.0008460000000809487,
   "n": 609,
   "span": "1950–2000 at 30d"
  },
  "uranus": {
   "measured": true,
   "worst": 0.0037740000001917906,
   "n": 609,
   "span": "1950–2000 at 30d"
  },
  "neptune": {
   "measured": true,
   "worst": 0.00014399999997749546,
   "n": 609,
   "span": "1950–2000 at 30d"
  },
  "pluto": {
   "measured": true,
   "worst": 0.001464000000055421,
   "n": 609,
   "span": "1950–2000 at 30d"
  }
 },
 "problems": [],
 "rows": [
  {
   "id": "saturn",
   "subject": "Saturn",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 10.395511610095696,
   "worstAt": "2177-11-20",
   "mean": 2.2662715010543844,
   "p99": 7.445155251032816,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": null,
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "uranus",
   "subject": "Uranus",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 9.888266633303573,
   "worstAt": "1600-10-27",
   "mean": 2.115515054389821,
   "p99": 8.210130033661187,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": null,
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "jupiter",
   "subject": "Jupiter",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 7.098953413102151,
   "worstAt": "1763-11-29",
   "mean": 1.7898453528677538,
   "p99": 5.585847889051081,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": null,
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "moon",
   "subject": "The Moon",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 6.237823670766858,
   "worstAt": "2008-11-14",
   "mean": 1.3663874354617072,
   "p99": 4.1264253498388825,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": "On a truncated ELP-2000/82 series, which is a great deal more work than the short version and is the reason the Moon lands within arcminutes rather than tenths of a degree.",
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "neptune",
   "subject": "Neptune",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 4.416576352042512,
   "worstAt": "1662-01-13",
   "mean": 1.365578171144937,
   "p99": 4.08319278574254,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": null,
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "mars",
   "subject": "Mars",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 4.1209769267553575,
   "worstAt": "1625-09-11",
   "mean": 0.59814663528259,
   "p99": 2.216955180255127,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": null,
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "chiron",
   "subject": "Chiron",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 3.7633858852885282,
   "worstAt": "2187-12-23",
   "mean": 0.38963801816957705,
   "p99": 1.9500772030460212,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": "A Centaur, shepherded by Saturn and Uranus, so no fixed set of elements describes it for long. It was up to 3° out on a hand-calibrated orbit, and the error oscillated rather than sitting still, which is the signature of propagating the wrong orbit rather than the wrong epoch.",
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "venus",
   "subject": "Venus",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 1.7615778318679531,
   "worstAt": "2073-03-01",
   "mean": 0.4861004760808489,
   "p99": 1.1687090357710872,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": null,
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "pluto",
   "subject": "Pluto",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 1.6502603020376228,
   "worstAt": "2048-08-11",
   "mean": 0.41821325391366665,
   "p99": 1.288773957213536,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": "Two methods, each used only where it is the better one: a periodic series inside 1885–2100, and a JPL element grid outside it. The series alone was 65′ out in the far past, and the grid alone is worse than the series in the modern era.",
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "mercury",
   "subject": "Mercury",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 1.5440189795713977,
   "worstAt": "2002-04-05",
   "mean": 0.5036194418182183,
   "p99": 1.2401924685258336,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": null,
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:49",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "sun",
   "subject": "The Sun",
   "group": "chart",
   "authority": "NASA/JPL Horizons",
   "span": "1600–2200",
   "worst": 0.26777997749263704,
   "worstAt": "2199-12-10",
   "mean": 0.03710437138725036,
   "p99": 0.24459989841147944,
   "sample": 43836,
   "sampleWord": "positions",
   "weak": false,
   "note": "On a truncated VSOP87 series. The Schlyter series it replaced was 23″ out on average, which passes any longitude tolerance you would write while being thirteen minutes of clock on a solar return.",
   "source": "node tools/error-budget.mjs --sweep",
   "measuredAt": "2026-09-16 20:52",
   "engineHash": "433450e0f1d2",
   "status": "current"
  },
  {
   "id": "lilith",
   "subject": "True Lilith, the lunar apogee",
   "group": "derived",
   "authority": "NASA/JPL Horizons",
   "span": "1920–2044",
   "worst": 6.5,
   "worstAt": null,
   "sample": 12,
   "sampleWord": "moments",
   "weak": false,
   "note": "The same amplifier as the node, and the reason two more lunar points were built, measured, found wrong and withdrawn before they ever shipped.",
   "source": "node test/lilith-horizons.js",
   "status": "current",
   "measuredAt": "2026-09-16 21:18",
   "engineHash": "433450e0f1d2"
  },
  {
   "id": "node",
   "subject": "True lunar node",
   "group": "derived",
   "authority": "NASA/JPL Horizons",
   "span": "1920–2044",
   "worst": 0.63,
   "worstAt": "1929-08-21",
   "sample": 17,
   "sampleWord": "moments",
   "weak": false,
   "note": "A derived point can be far worse than the body it comes from. Near the node the Moon's latitude is multiplied by about eleven, and this one was 38.7′ out with nothing watching it.",
   "source": "node test/node-horizons.js",
   "status": "current",
   "measuredAt": "2026-09-16 21:18",
   "engineHash": "433450e0f1d2"
  },
  {
   "id": "asteroids-past",
   "subject": "Main-belt asteroids past number 6,214",
   "group": "small",
   "authority": "NASA/JPL Horizons",
   "span": "a 1950 birth",
   "worst": 69.9,
   "worstAt": null,
   "sample": 100,
   "sampleWord": "bodies",
   "weak": true,
   "note": "This is the weakest thing in the product and the row to read first. Each of these carries a single orbit measured for 2026, propagated all the way back, and the further back the looser it gets. More than a degree is enough to put an asteroid on the wrong side of a sign line.",
   "source": "node test/mainbelt-drift-ceiling.js",
   "status": "current",
   "measuredAt": "2026-09-16 21:18",
   "engineHash": "433450e0f1d2"
  },
  {
   "id": "asteroids-neo",
   "subject": "Near-Earth asteroids, all 183 of them",
   "group": "small",
   "authority": "NASA/JPL Horizons",
   "span": "four moments each",
   "worst": 27.5,
   "worstAt": "2005-01-01",
   "sample": 732,
   "sampleWord": "checks",
   "weak": false,
   "note": "The worst case is one body 0.3596 AU from the Earth, close enough that a small error in the orbit is a large one in the angle. 95% of the checks land within 1.7′.",
   "source": "node test/nea-population.js",
   "status": "current",
   "measuredAt": "2026-09-16 21:18",
   "engineHash": "433450e0f1d2"
  },
  {
   "id": "comets",
   "subject": "Comets, all 21 of them",
   "group": "small",
   "authority": "NASA/JPL Horizons",
   "span": "1920–2044",
   "worst": 5.6,
   "worstAt": null,
   "sample": 168,
   "sampleWord": "positions",
   "weak": false,
   "note": "A comet's orbit changes enough that one set of elements is wrong within months, so these run on a five-year grid of them. One comet was 80° out for a 1920 birth before that went in.",
   "source": "node test/comet-horizons.js",
   "status": "current",
   "measuredAt": "2026-09-16 21:18",
   "engineHash": "433450e0f1d2"
  },
  {
   "id": "asteroids-grid",
   "subject": "Main-belt asteroids, numbers 1 to 6,214",
   "group": "small",
   "authority": "NASA/JPL Horizons",
   "span": "1901–2088",
   "worst": 1.2,
   "worstAt": "1966",
   "sample": 2223,
   "sampleWord": "body checks",
   "weak": false,
   "note": "Each of these is carried from NASA/JPL's own orbit for the nearest 4-year mark between 1900 and 2100, rather than one orbit propagated across a century.",
   "source": "node test/mainbelt-drift-ceiling.js",
   "status": "current",
   "measuredAt": "2026-09-16 21:18",
   "engineHash": "433450e0f1d2"
  },
  {
   "id": "speculum",
   "subject": "Speculum and rising times",
   "group": "technique",
   "authority": "an independent implementation",
   "span": "one reference chart",
   "worst": 2.2,
   "worstAt": null,
   "sample": 73,
   "sampleWord": "values",
   "weak": false,
   "note": "The declinations, oblique ascensions and rising times a traditional astrologer works from, which nothing else here would have exercised. A further 372 right-ascension cells are checked in the same run.",
   "source": "node test/speculum.js",
   "status": "current",
   "measuredAt": "2026-09-16 21:18",
   "engineHash": "433450e0f1d2"
  },
  {
   "id": "primary",
   "subject": "Primary directions, in mundo",
   "group": "technique",
   "authority": "an independent implementation",
   "span": "one reference chart",
   "worst": 1.7999999999999998,
   "worstAt": null,
   "sample": 35,
   "sampleWord": "arcs",
   "weak": false,
   "note": "Not an ephemeris question: these are arcs of right ascension converted to years, and the two routes to them have to agree.",
   "source": "node test/primary-directions.js",
   "status": "current",
   "measuredAt": "2026-09-16 21:18",
   "engineHash": "433450e0f1d2"
  }
 ]
}