Doğruluk, kullanıcının sizi sessizce Astrodienst ile karşılaştırarak kontrol ettiği şeydir. Bir doğum haritası bir yay dakikası saparsa şikâyet hızlı gelir. İşin en kötü yanı, doğruluğun fark edilmeden kolayca bozulabilmesidir: efemeris kodunda tek bir refactoring ve endpoint’lerin yarısı sessizce birkaç yay saniyesi kayar.
Bunun olmasını şöyle engelliyoruz.
İki ortam için tek çekirdek
Section titled “İki ortam için tek çekirdek”Gezegen konumlarını Swiss Ephemeris hesaplar. Kilit nokta: uygulamamız ve API aynı hesaplama çekirdeğini, aynı kod tabanını kullanır. Birbirinden sapabilecek iki ayrı uygulama yok, yani sapacak bir şey de yok.
Efemerislerin ana aralığının dışındaki tarihler için analitik bir fallback (Moshier) vardır; biraz daha kaba ama sınırlarda kopukluk olmadan. Bilinçli bir dürüstlük: motorun belirli bir sürümünü kamuya açık olarak belirtmiyoruz, çünkü çekirdeğin gerçek sürümü en yeni upstream’in gerisinde ve iddialı bir rakam yazmak yalan olurdu.
Dondurulmuş snapshot’lar
Section titled “Dondurulmuş snapshot’lar”Her hesaplama endpoint’inin bir dondurulmuş snapshot seti vardır: bu build itibarıyla 888 JSON fixture. Runner endpoint’i referans haritalar üzerinde çalıştırır ve sonucu fixture ile bayt bayt (tolerans dahilinde) karşılaştırır. Bir gezegen boylamındaki 5e-5°‘den (0.18″) büyük her sapma testi düşürür.
Referans haritalar yalnızca “rahat” ortayı değil, kenarları zorlayacak şekilde seçildi:
- Monroe, Diana, Einstein, Bowie: doğum verileri bilinen tarihi haritalar
- kutup enlemi: ev sistemlerinin dejenere olduğu yer
- ekvator: farklı davrandıkları yer
- güney yarımküre: ayna simetrisinin kontrolü
Sınır durumları, sıradan bir Kyiv doğumlunun haritasında görünmeyen gerilemeleri tam olarak yakalar.
Dış kaynaklara karşı üçgenleme
Section titled “Dış kaynaklara karşı üçgenleme”Snapshot’lar kendilerine göre gerilemeleri yakalar. Mutlak doğruluğu kontrol etmek için her sürüm bağımsız kaynaklarla karşılaştırılır:
| Neye karşı | Neyi kontrol eder | Fark |
|---|---|---|
| swetest CGI (Astrodienst) | gezegen boylamları, ev başlangıçları | 0.000″ |
| Kerykeion (Python, pyswisseph) | SwEph’in bağımsız bir uygulaması | < 0.2″ |
| Prokerala (sidereal Lahiri) | sidereal konumlar | 8-17″, motordan değil ayanamsa formülünden kaynaklanan sistematik fark |
| NASA 5-Millennium Eclipse Catalog | tutulmaların zamanı ve türü | < 1 хв |
Prokerala ile olan fark bir hata değildir: bunlar Lahiri formülünün farklı uygulamalarıdır ve bunu saklamak yerine açıkça belgeliyoruz. Sektörün referansı olan swetest ile sapma sıfırdır.
Astrokartografi çizgileri ayrıca geometrik olarak kontrol edilir: ekvatordaki doğruluk 1.5 km’den iyidir.
Her PR’da ne çalışır
Section titled “Her PR’da ne çalışır”Doğruluk tek seferlik bir kontrol değil, bir CI gate’idir:
api-accuracy.yml: backend koduna gelen her PR’da tüm snapshot setini ve üçgenlemeyi çalıştırır. Kırmızı bir test merge’ü engeller.check-eclipse-accuracy.yml: yılda bir tutulmaları NASA kataloğuyla karşılaştırır; eşiği aşan bir fark otomatik olarak issue açar.check-sweph-updates.yml: her hafta Swiss Ephemeris upstream’ini izler; yeni bir sürüm inceleme için issue açar, automerge yoktur (efemeris motorunu güncellemek otomatik güncellemeye bırakılamayacak kadar hassas bir iştir).
Entegratöre ne sağlar
Section titled “Entegratöre ne sağlar”Garanti basit: gezegen konumları referans Swiss Ephemeris’ten < 0.1 yay saniyesi içindedir ve bu sınır README’deki bir vaatle değil, otomasyonla korunur. Bir gün bir gerileme ortaya çıkarsa, kullanıcınızın şikâyetinde değil, bizim CI’ımızda düşer.
Bu rakamların, belirli haritalara göre fark tablosunu içeren kamuya açık sürümü Doğruluk sayfasında.
Yay saniyesi hassasiyetinde konumlar, 4 satır kodla.
Kart gerekmeden ücretsiz anahtar. İlk ödemeye kadar ayda 5.000 istek.