Akurasi adalah hal yang diam-diam diperiksa pengguna pada Astrodienst. Jika peta natal menyimpang satu menit sudut, keluhan akan datang cepat. Dan yang terburuk adalah akurasi mudah rusak tanpa terlihat: satu refactoring pada kode ephemeris, dan setengah endpoint diam-diam melenceng beberapa detik busur.
Begini cara kami mencegah hal ini terjadi.
Satu inti untuk dua lingkungan
Section titled “Satu inti untuk dua lingkungan”Posisi planet dihitung oleh Swiss Ephemeris, yang dikompilasi ke WASM. Kuncinya: ini adalah inti yang sama baik di browser aplikasi kami maupun di server API. Satu basis kode core/, di‑pull ke backend melalui alias cross-repo dan dibundel pada build. Tidak ada implementasi “browser” atau “server” yang dapat berbeda – tidak ada perbedaan.
Untuk tanggal di luar rentang utama, ephemeris memiliki fallback analitik (Moshier), sedikit lebih kasar, tapi tanpa celah di batas. Kejujuran sadar: versi spesifik mesin tidak kami umumkan, karena versi inti yang sebenarnya lebih rendah dari upstream terbaru, dan menyebutkan angka besar akan menjadi kebohongan.
Snapshot yang dibekukan
Section titled “Snapshot yang dibekukan”Setiap endpoint perhitungan memiliki sekumpulan snapshot yang dibekukan - 873 fixture JSON pada build ini. Runner menjalankan endpoint pada peta referensi dan membandingkan byte‑per‑byte (dalam toleransi) dengan fixture. Penyimpangan panjang planet lebih dari 5e-5° (0.18″) akan membuat tes gagal.
Peta referensi dipilih agar menguji tepi, bukan hanya pusat yang “nyaman”:
- Monroe, Diana, Einstein, Bowie - peta historis dengan data kelahiran yang diketahui
- polarna lintang - tempat sistem rumah terdegradasi
- ekatorial - tempat mereka berperilaku berbeda
- selatan belahan bumi - pemeriksaan simetri
Kasus batas menangkap regresi yang tidak terlihat pada peta pengguna hipotetis.
Triangulasi melawan sumber eksternal
Section titled “Triangulasi melawan sumber eksternal”Snapshot menangkap regresi relatif terhadap dirinya sendiri. Untuk memverifikasi kebenaran absolut, setiap rilis dibandingkan dengan sumber independen:
| Melawan apa | Apa yang diperiksa | Perbedaan |
|---|---|---|
| swetest CGI (Astrodienst) | panjang planet, cusp rumah | 0.000″ |
| Kerykeion (Python, pyswisseph) | implementasi SwEph independen | < 0.2″ |
| Prokerala (sidereal Lahiri) | posisi siderial | 8-17″, perbedaan sistem formula ayanamsa, bukan mesin |
| NASA 5-Millennium Eclipse Catalog | waktu dan tipe gerhana | < 1 хв |
Perbedaan dengan Prokerala bukanlah kesalahan: itu adalah implementasi berbeda dari formula Lahiri, dan kami mendokumentasikannya secara jelas, bukan menyembunyikannya. Dengan swetest, yang merupakan standar industri, driftnya nol.
Garis astrokartografi diperiksa secara terpisah secara geometris – akurasi di ekuator lebih baik dari 1,5 km.
Apa yang dijalankan pada setiap PR
Section titled “Apa yang dijalankan pada setiap PR”Akurasi adalah gerbang CI, bukan pemeriksaan satu kali:
api-accuracy.yml- pada setiap PR backend code menjalankan seluruh set snapshot + triangulasi. Tes merah memblokir merge.check-eclipse-accuracy.yml- sekali setahun membandingkan gerhana dengan katalog NASA; perbedaan di atas ambang secara otomatis membuat issue.check-sweph-updates.yml- setiap minggu memantau upstream Swiss Ephemeris dan paket WASM; versi baru - issue untuk review, tanpa auto‑merge (pembaruan mesin ephemeris terlalu sensitif untuk auto‑update).
Apa manfaatnya bagi integrator
Section titled “Apa manfaatnya bagi integrator”Jaminannya sederhana: posisi planet berada dalam < 0.1 detik sudut dari Swiss Ephemeris referensi, dan batas ini dilindungi otomatisasi, bukan janji di README. Jika suatu saat muncul regresi, itu akan jatuh di CI kami, bukan di keluhan penggunamu.
Versi publik dari angka‑angka ini, dengan tabel perbedaan pada peta spesifik, tersedia di halaman Akurasi.
Swiss Ephemeris yang sama dengan Solar Fire - dalam 4 baris kode.
Kunci gratis tanpa kartu. 5.000 panggilan per bulan sebelum pembayaran pertama.