Nauwkeurigheid is waarop een gebruiker je stilletjes controleert via Astrodienst. Wijkt een geboortehoroscoop een boogminuut af, dan komt er snel een klacht. En het ergste is dat nauwkeurigheid ongemerkt kapot kan gaan: één refactor in de efemeridencode, en de helft van de endpoints schuift stilletjes een paar boogseconden op.
Zo voorkomen we dat.
Eén kern voor twee omgevingen
Section titled “Eén kern voor twee omgevingen”Planeetposities worden berekend door Swiss Ephemeris. Het belangrijkste: onze app en de API delen één rekenkern, één codebase. Er zijn geen twee implementaties die uit elkaar kunnen lopen, dus er is niets dat kan afwijken.
Voor datums buiten het hoofdbereik van de efemeriden is er een analytische fallback (Moshier), iets grover, maar zonder sprongen op de grenzen. Bewuste eerlijkheid: we noemen publiekelijk geen specifieke engineversie, omdat de werkelijke versie van de kern lager is dan de nieuwste upstream, en een indrukwekkend getal noemen zou een leugen zijn.
Bevroren snapshots
Section titled “Bevroren snapshots”Elk rekenendpoint heeft een set bevroren snapshots: 888 JSON-fixtures op het moment van deze build. De runner draait het endpoint op referentiehoroscopen en vergelijkt het resultaat byte voor byte (binnen een tolerantie) met de fixture. Elke afwijking in planeetlengte groter dan 5e-5° (0.18″) laat de test falen.
De referentiehoroscopen zijn zo gekozen dat ze de randen raken, niet alleen het “handige” midden:
- Monroe, Diana, Einstein, Bowie: historische horoscopen met bekende geboortegegevens
- polaire breedte: waar huizensystemen ontaarden
- equatoriale breedte: waar ze zich anders gedragen
- zuidelijk halfrond: controle op spiegeling
Randgevallen vangen precies de regressies die je op de horoscoop van een doorsnee Kyivenaar niet ziet.
Triangulatie tegen externe bronnen
Section titled “Triangulatie tegen externe bronnen”Snapshots vangen regressies ten opzichte van zichzelf. Om de absolute waarheid te controleren, wordt elke release vergeleken met onafhankelijke bronnen:
| Waartegen | Wat het controleert | Afwijking |
|---|---|---|
| swetest CGI (Astrodienst) | planeetlengtes, huiscuspen | 0.000″ |
| Kerykeion (Python, pyswisseph) | onafhankelijke implementatie van SwEph | < 0.2″ |
| Prokerala (sidereal Lahiri) | siderische posities | 8-17″, een systematisch verschil in de ayanamsa-formule, niet in de engine |
| NASA 5-Millennium Eclipse Catalog | tijdstip en type van eclipsen | < 1 min |
De afwijking met Prokerala is geen fout: het zijn verschillende implementaties van de Lahiri-formule, en we documenteren dat expliciet in plaats van het te verbergen. Met swetest, de industriestandaard, is de drift nul.
Astrocartografische lijnen worden apart geometrisch gecontroleerd: de nauwkeurigheid op de evenaar is beter dan 1.5 km.
Wat er bij elke PR draait
Section titled “Wat er bij elke PR draait”Nauwkeurigheid is een CI-gate, geen eenmalige controle:
api-accuracy.yml: draait bij elke PR op de backendcode de volledige set snapshots plus de triangulatie. Een rode test blokkeert de merge.check-eclipse-accuracy.yml: vergelijkt eens per jaar de eclipsen met de NASA-catalogus; een afwijking boven de drempel opent automatisch een issue.check-sweph-updates.yml: houdt wekelijks de upstream van Swiss Ephemeris in de gaten; een nieuwe versie wordt een issue voor review, zonder automatische merge (een update van de efemeridenengine is te gevoelig voor een automatische update).
Wat dit de integrator oplevert
Section titled “Wat dit de integrator oplevert”De garantie is eenvoudig: planeetposities liggen binnen < 0.1 boogseconde van de referentie-Swiss Ephemeris, en die grens wordt bewaakt door automatisering, niet door een belofte in een README. Duikt er ooit een regressie op, dan faalt die in onze CI, niet in een klacht van jouw gebruiker.
De publieke versie van deze cijfers, met een tabel van afwijkingen per horoscoop, staat op de pagina Nauwkeurigheid.
Posities tot op de boogseconde in 4 regels code.
Gratis sleutel zonder kaart. 5.000 calls per maand tot de eerste betaling.