The result table, including the caveats.
A frozen comparison of PathFinder's deterministic output with NASA JPL Horizons, Swiss Ephemeris, and named IANA time-zone rules. Every measured row is below; none of this tests astrological interpretation or event prediction.
Public evidence, public kernel
The inputs, references, tolerances, outputs, errors, methodology, and MIT-licensed data remain public. The calculation kernel and benchmark runner are public under MIT at github.com/deliqs/pathfinder-calculation-kernel, immutable release v1.0.0; anyone can inspect and execute the kernel from source and reproduce its benchmark offline:
git clone --branch v1.0.0 --depth 1 https://github.com/deliqs/pathfinder-calculation-kernel.git
dotnet restore PathFinder.CalculationKernel.slnx --locked-mode
dotnet build PathFinder.CalculationKernel.slnx --no-restore -c Release
dotnet run --project tools/PathFinder.AccuracyBenchmark --no-build -c Release -- reproduce --offline --output artifacts/reproduction/local
Within this benchmark boundary, this is independent-source reproducibility. The published benchmark/results/results.json at v1.0.0 has SHA-256 d3622e983007e1854c6928be2a6e11dae7939a33a4c3725eae4829dac8be87df. The nupkg attached to the GitHub release has SHA-256 bbe3412af2afea5422cafdbdc85577e856485b3a2d640b1da9e946c49c8c3151, recorded in that release's SHA256SUMS. The copy served by nuget.org as PathFinder.CalculationKernel/1.0.0 carries nuget.org's repository signature and therefore hashes differently, while its contents are otherwise identical. The PathFinder app, API hosts, and interpretation layer stay private; this says nothing about prediction.
Frozen before measurement
Planet rows use the shortest circular difference from JPL Horizons observer quantity 31: apparent geocentric longitude in the true ecliptic of date. The Sun through Pluto use a 60-arcsecond floor; Chiron retains its separately certified 1,800-arcsecond floor.
House rows compare every cusp with Swiss Ephemeris 2.10.03 across Placidus, Koch, Regiomontanus, and Campanus. Polar rows request Placidus, Koch, Regiomontanus, and Campanus and truthfully report PathFinder's Porphyry fallback. The Tromsø Koch, Regiomontanus, and Campanus rows compare that documented Porphyry fallback with Swiss Porphyry, not Koch, Regiomontanus, or Campanus accuracy. Timing rows cover all three Mercury crossings of 20° Aries in the 2024 retrograde loop plus Mercury, Saturn, and Pluto stations. Civil-time rows resolve named IANA zones rather than accepting numeric offsets.
References: JPL Horizons API, Swiss Ephemeris programmer documentation, and IANA TZDB.
Apparent geocentric longitudes
Median error 1.86″. Largest Sun-through-Pluto error 12.77″. Chiron maximum 74.76″.
| Body | UTC instant | JPL | PathFinder | Error | Floor | Result |
|---|---|---|---|---|---|---|
| Sun | 1950-01-01 00:00:00 UTC | 280.004830° | 280.004687° | 0.51″ | 60″ | Pass |
| Sun | 2000-01-01 12:00:00 UTC | 280.368909° | 280.368739° | 0.61″ | 60″ | Pass |
| Sun | 2024-01-01 12:00:00 UTC | 280.548482° | 280.548527° | 0.16″ | 60″ | Pass |
| Sun | 2050-01-01 00:00:00 UTC | 280.748382° | 280.748509° | 0.46″ | 60″ | Pass |
| Moon | 1950-01-01 00:00:00 UTC | 61.415409° | 61.415389° | 0.07″ | 60″ | Pass |
| Moon | 2000-01-01 12:00:00 UTC | 223.323786° | 223.323891° | 0.38″ | 60″ | Pass |
| Moon | 2024-01-01 12:00:00 UTC | 161.907032° | 161.907737° | 2.54″ | 60″ | Pass |
| Moon | 2050-01-01 00:00:00 UTC | 18.675597° | 18.679144° | 12.77″ | 60″ | Pass |
| Mercury | 1950-01-01 00:00:00 UTC | 299.447252° | 299.446972° | 1.01″ | 60″ | Pass |
| Mercury | 2000-01-01 12:00:00 UTC | 271.889270° | 271.888912° | 1.29″ | 60″ | Pass |
| Mercury | 2024-01-01 12:00:00 UTC | 262.212013° | 262.210793° | 4.39″ | 60″ | Pass |
| Mercury | 2050-01-01 00:00:00 UTC | 270.059488° | 270.059741° | 0.91″ | 60″ | Pass |
| Venus | 1950-01-01 00:00:00 UTC | 316.979477° | 316.979260° | 0.78″ | 60″ | Pass |
| Venus | 2000-01-01 12:00:00 UTC | 241.565779° | 241.565233° | 1.97″ | 60″ | Pass |
| Venus | 2024-01-01 12:00:00 UTC | 243.220420° | 243.220427° | 0.02″ | 60″ | Pass |
| Venus | 2050-01-01 00:00:00 UTC | 281.248038° | 281.248592° | 2.00″ | 60″ | Pass |
| Mars | 1950-01-01 00:00:00 UTC | 182.211197° | 182.212262° | 3.84″ | 60″ | Pass |
| Mars | 2000-01-01 12:00:00 UTC | 327.963292° | 327.963899° | 2.19″ | 60″ | Pass |
| Mars | 2024-01-01 12:00:00 UTC | 267.679146° | 267.679388° | 0.87″ | 60″ | Pass |
| Mars | 2050-01-01 00:00:00 UTC | 227.714693° | 227.714707° | 0.05″ | 60″ | Pass |
| Jupiter | 1950-01-01 00:00:00 UTC | 306.505325° | 306.503535° | 6.44″ | 60″ | Pass |
| Jupiter | 2000-01-01 12:00:00 UTC | 25.253069° | 25.254200° | 4.07″ | 60″ | Pass |
| Jupiter | 2024-01-01 12:00:00 UTC | 35.584350° | 35.582853° | 5.39″ | 60″ | Pass |
| Jupiter | 2050-01-01 00:00:00 UTC | 121.691548° | 121.691524° | 0.09″ | 60″ | Pass |
| Saturn | 1950-01-01 00:00:00 UTC | 169.437422° | 169.436953° | 1.69″ | 60″ | Pass |
| Saturn | 2000-01-01 12:00:00 UTC | 40.395637° | 40.396124° | 1.76″ | 60″ | Pass |
| Saturn | 2024-01-01 12:00:00 UTC | 333.287907° | 333.286908° | 3.60″ | 60″ | Pass |
| Saturn | 2050-01-01 00:00:00 UTC | 297.574280° | 297.573249° | 3.71″ | 60″ | Pass |
| Uranus | 1950-01-01 00:00:00 UTC | 92.682721° | 92.682872° | 0.55″ | 60″ | Pass |
| Uranus | 2000-01-01 12:00:00 UTC | 314.809168° | 314.806105° | 11.03″ | 60″ | Pass |
| Uranus | 2024-01-01 12:00:00 UTC | 49.373055° | 49.373058° | 0.01″ | 60″ | Pass |
| Uranus | 2050-01-01 00:00:00 UTC | 170.732610° | 170.733582° | 3.50″ | 60″ | Pass |
| Neptune | 1950-01-01 00:00:00 UTC | 197.266039° | 197.264190° | 6.66″ | 60″ | Pass |
| Neptune | 2000-01-01 12:00:00 UTC | 303.193001° | 303.195442° | 8.79″ | 60″ | Pass |
| Neptune | 2024-01-01 12:00:00 UTC | 355.083496° | 355.086814° | 11.94″ | 60″ | Pass |
| Neptune | 2050-01-01 00:00:00 UTC | 53.603421° | 53.602663° | 2.73″ | 60″ | Pass |
| Pluto | 1950-01-01 00:00:00 UTC | 137.798381° | 137.798755° | 1.35″ | 60″ | Pass |
| Pluto | 2000-01-01 12:00:00 UTC | 251.454764° | 251.454735° | 0.11″ | 60″ | Pass |
| Pluto | 2024-01-01 12:00:00 UTC | 299.373176° | 299.372881° | 1.06″ | 60″ | Pass |
| Pluto | 2050-01-01 00:00:00 UTC | 337.533067° | 337.531776° | 4.65″ | 60″ | Pass |
| Chiron | 1950-01-01 00:00:00 UTC | 255.777288° | 255.798054° | 74.76″ | 1,800″ | Pass |
| Chiron | 2000-01-01 12:00:00 UTC | 251.617609° | 251.624558° | 25.02″ | 1,800″ | Pass |
| Chiron | 2024-01-01 12:00:00 UTC | 15.464911° | 15.464574° | 1.21″ | 1,800″ | Pass |
| Chiron | 2050-01-01 00:00:00 UTC | 246.587601° | 246.580693° | 24.87″ | 1,800″ | Pass |
House cusps
The compact table groups twelve published cusp rows per case across 19 location, epoch, and house-system combinations. All individual values remain in the raw JSON.
| Case | UTC instant | Lat, lon | System | Cusps | Max error | Result |
|---|---|---|---|---|---|---|
| london-j2000 | 2000-01-01 00:00:00 UTC | 51.5074, -0.1278 | Placidus | 12 | 11.80″ | Pass |
| new-york-eclipse | 2024-04-08 18:00:00 UTC | 40.7128, -74.0060 | Placidus | 12 | 5.73″ | Pass |
| sydney-historical | 1950-01-01 00:00:00 UTC | -33.8688, 151.2093 | Placidus | 12 | 2.41″ | Pass |
| tromso-polar | 2024-06-21 12:00:00 UTC | 69.6492, 18.9553 | Placidus → Porphyry | 12 | 2.54″ | Pass |
| london-j2000-koch | 2000-01-01 00:00:00 UTC | 51.5074, -0.1278 | Koch | 12 | 11.37″ | Pass |
| london-j2000-regiomontanus | 2000-01-01 00:00:00 UTC | 51.5074, -0.1278 | Regiomontanus | 12 | 11.77″ | Pass |
| london-j2000-campanus | 2000-01-01 00:00:00 UTC | 51.5074, -0.1278 | Campanus | 12 | 12.04″ | Pass |
| new-york-eclipse-koch | 2024-04-08 18:00:00 UTC | 40.7128, -74.0060 | Koch | 12 | 5.55″ | Pass |
| new-york-eclipse-regiomontanus | 2024-04-08 18:00:00 UTC | 40.7128, -74.0060 | Regiomontanus | 12 | 6.03″ | Pass |
| new-york-eclipse-campanus | 2024-04-08 18:00:00 UTC | 40.7128, -74.0060 | Campanus | 12 | 6.03″ | Pass |
| sydney-historical-koch | 1950-01-01 00:00:00 UTC | -33.8688, 151.2093 | Koch | 12 | 4.41″ | Pass |
| sydney-historical-regiomontanus | 1950-01-01 00:00:00 UTC | -33.8688, 151.2093 | Regiomontanus | 12 | 4.49″ | Pass |
| sydney-historical-campanus | 1950-01-01 00:00:00 UTC | -33.8688, 151.2093 | Campanus | 12 | 4.35″ | Pass |
| tromso-polar-koch | 2024-06-21 12:00:00 UTC | 69.6492, 18.9553 | Koch → Porphyry | 12 | 2.54″ | Pass |
| tromso-polar-regiomontanus | 2024-06-21 12:00:00 UTC | 69.6492, 18.9553 | Regiomontanus → Porphyry | 12 | 2.54″ | Pass |
| tromso-polar-campanus | 2024-06-21 12:00:00 UTC | 69.6492, 18.9553 | Campanus → Porphyry | 12 | 2.54″ | Pass |
| gothenburg-koch-midsummer | 2024-06-21 12:00:00 UTC | 57.7089, 11.9746 | Koch | 12 | 2.65″ | Pass |
| reykjavik-regiomontanus-midsummer | 2024-06-21 12:00:00 UTC | 64.1466, -21.9426 | Regiomontanus | 12 | 4.70″ | Pass |
| reykjavik-campanus-midsummer | 2024-06-21 12:00:00 UTC | 64.1466, -21.9426 | Campanus | 12 | 4.55″ | Pass |
Transit crossings and stations
Crossings use a 90-minute floor. Stations use six hours because longitude is nearly flat around a station.
| Case | Event | JPL-derived UTC | PathFinder UTC | Error | Floor | Result |
|---|---|---|---|---|---|---|
| mercury-20-aries-direct-before-retrograde | 20° Aries crossing | 2024-03-21 23:56:28.778947 UTC | 2024-03-21 23:56:07.96875 UTC | 0.35 min | 90 min | Pass |
| mercury-20-aries-retrograde | 20° Aries crossing | 2024-04-15 08:58:34.841376 UTC | 2024-04-15 08:56:29.0625 UTC | 2.10 min | 90 min | Pass |
| mercury-20-aries-direct-after-retrograde | 20° Aries crossing | 2024-05-05 18:38:26.863024 UTC | 2024-05-05 18:37:58.125 UTC | 0.48 min | 90 min | Pass |
| mercury-april-direct-station | Station | 2024-04-25 12:54:01.463415 UTC | 2024-04-25 12:51:45.916906191 UTC | 2.26 min | 360 min | Pass |
| saturn-june-retrograde-station | Station | 2024-06-29 19:10:00 UTC | 2024-06-29 19:06:54.17098049 UTC | 3.10 min | 360 min | Pass |
| pluto-may-retrograde-station | Station | 2024-05-02 17:15:00 UTC | 2024-05-02 17:30:15.478278664 UTC | 15.26 min | 360 min | Pass |
Historical IANA time zones
Resolved with TZDB: 2026c (mapping: 48.2). The Samoa gap is shifted forward under the documented product policy.
| Case | Requested local | Zone | Offset | Resolved UTC | Warning | Result |
|---|---|---|---|---|---|---|
| samoa-date-line-skip | 2011-12-30T12:00:00 | Pacific/Apia | +14 | 2011-12-30 22:00:00 UTC | dst_gap_adjusted | Pass |
| british-double-summer-time | 1941-07-01T12:00:00 | Europe/London | +02 | 1941-07-01 10:00:00 UTC | None | Pass |
| amsterdam-local-mean-time | 1850-01-01T12:00:00 | Europe/Amsterdam | +00:17:30 | 1850-01-01 11:42:30 UTC | None | Pass |
What the headline leaves out
- Lunar node
- Mean node. The South Node is exactly opposite. Neither node is included in the JPL body rows.
- Black Moon Lilith
- Mean lunar apogee, not true or osculating Lilith. Excluded from JPL body rows.
- Chiron
- Gravity-simulated from a J2000 state vector and judged at a 0.5° floor; it is not an Astronomy Engine body.
- Angles and houses
- Public contract ±1°. Placidus is default. Placidus and Koch fall back to Porphyry above 60° latitude; Regiomontanus and Campanus fall back to Porphyry above 66°.
- Aspects
- Custom per-aspect orb table with a 2° Sun/Moon bonus. Orb policy does not affect raw position rows.
- Claims boundary
- This benchmark tests calculation output only. It is not evidence that astrology predicts events, describes personality, or that an AI-written interpretation is accurate.