Přesnost je to, co si uživatel potichu ověřuje na Astrodienstu. Když se natální horoskop rozejde o úhlovou minutu, stížnost přiletí rychle. A nejhorší na tom je, že přesnost se dá snadno rozbít nenápadně: jeden refaktoring v kódu efemerid a polovina endpointů se tiše posune o obloukové vteřiny.
Takhle tomu bráníme.
Jedno jádro pro dvě prostředí
Sekce “Jedno jádro pro dvě prostředí”Pozice planet počítá Swiss Ephemeris. Podstatné je, že naše aplikace i API mají jedno výpočetní jádro, jednu kódovou základnu. Nejsou tu dvě implementace, které by se mohly rozejít, takže se nemá co rozcházet.
Pro data mimo hlavní rozsah efemerid existuje analytický fallback (Moshier), o něco hrubší, ale bez skoků na hranicích. Vědomá poctivost: konkrétní verzi enginu veřejně neuvádíme, protože skutečná verze jádra je nižší než nejnovější upstream a psát tam efektní číslo by byla lež.
Zmrazené snapshoty
Sekce “Zmrazené snapshoty”Každý výpočetní endpoint má sadu zmrazených snapshotů: 873 JSON fixtur v okamžiku tohoto buildu. Runner spustí endpoint na referenčních horoskopech a porovná výsledek s fixturou bajt po bajtu (v mezích tolerance). Jakákoli odchylka planetární délky větší než 5e-5° (0.18″) test shodí.
Referenční horoskopy jsou vybrané tak, aby mířily na okraje, a ne jen na “pohodlný” střed:
- Monroe, Diana, Einstein, Bowie: historické horoskopy se známými údaji o narození
- polární šířka: kde systémy domů degenerují
- rovníková: kde se chovají jinak
- jižní polokoule: kontrola zrcadlení
Hraniční případy chytají právě ty regrese, které na horoskopu běžného Kyjevana vidět nejsou.
Triangulace proti externím zdrojům
Sekce “Triangulace proti externím zdrojům”Snapshoty chytají regrese vůči sobě samým. Aby se ověřovala absolutní pravda, každé vydání se porovnává s nezávislými zdroji:
| Proti čemu | Co ověřuje | Odchylka |
|---|---|---|
| swetest CGI (Astrodienst) | planetární délky, hroty domů | 0.000″ |
| Kerykeion (Python, pyswisseph) | nezávislá implementace SwEph | < 0.2″ |
| Prokerala (sidereal Lahiri) | siderické pozice | 8-17″, systémový rozdíl ve vzorci ajanámši, ne v enginu |
| NASA 5-Millennium Eclipse Catalog | čas a typ zatmění | < 1 хв |
Odchylka od Prokeraly není chyba: jde o různé implementace vzorce Lahiri a dokumentujeme to otevřeně, místo abychom to schovávali. Se swetestem, který je oborovým standardem, je drift nulový.
Astrokartografické linie se navíc ověřují geometricky: přesnost na rovníku je lepší než 1.5 km.
Co běží na každém PR
Sekce “Co běží na každém PR”Přesnost je CI gate, ne jednorázová kontrola:
api-accuracy.yml: na každém PR do backendového kódu projede celou sadu snapshotů a triangulaci. Červený test blokuje merge.check-eclipse-accuracy.yml: jednou ročně porovná zatmění s katalogem NASA; odchylka nad prahem automaticky založí issue.check-sweph-updates.yml: každý týden sleduje upstream Swiss Ephemeris; nová verze znamená issue k review, bez automatického merge (aktualizace enginu efemerid je na automatický update příliš citlivá věc).
Co z toho má integrátor
Sekce “Co z toho má integrátor”Záruka je jednoduchá: pozice planet v mezích < 0.1 obloukové vteřiny od referenčního Swiss Ephemeris, a tuto hranici hlídá automatizace, ne slib v README. Pokud se někdy objeví regrese, spadne v našem CI, ne ve stížnosti tvého uživatele.
Veřejná verze těchto čísel s tabulkou odchylek na konkrétních horoskopech je na stránce Přesnost.
Stejný Swiss Ephemeris jako v Solar Fire - ve 4 řádcích kódu.
Zdarma klíč bez karty. 5 000 volání za měsíc do první platby.