Precisión es lo que el usuario silenciosamente verifica en Astrodienst. Si la carta actual se descompone en una hora de cuadrante, la queja llegará pronto. Y lo peor de esto es que la precisión se puede romper fácilmente de manera imperceptible: un refactoring en el código de ephemeris y la mitad de los puntos finales de los endpoints se han ido a las horas de la esfera.
Aquí es cómo evitamos que esto suceda.
Un núcleo para dos entornos
Sección titulada «Un núcleo para dos entornos»Las posiciones planetarias se calculan con Swiss Ephemeris, compilado en WASM. La clave: es el mismo núcleo tanto en el navegador del nuestro aplicación como en el servidor API. Una sola base de código core/, conectada en el backend a través de alias de repositorio cruzado e integrada en el paquete en el build. No hay “implementación del navegador” y “implementación del servidor” que puedan divergir - divergen de nada.
Para las fechas fuera del rango principal de ephemeris, hay un fallback analítico (Moshier), un poco más crudo, pero sin roturas en los límites. Honestidad conocida: no declaramos públicamente la versión real del motor, porque la versión real del núcleo es inferior a la más reciente upstream, y escribir una cifra sonora sería una mentira.
Congelados en snapshots
Sección titulada «Congelados en snapshots»Cada punto de cálculo tiene un conjunto de snapshots congelados - 873 JSON-fichas en el momento de este build. El ranner ejecuta el punto de cálculo en las cartas de referencia y lo compara con la ficha. Cualquier desviación en la longitud planetaria mayor que 5e-5° (0,18”) invalida el test.
Las cartas de referencia se seleccionan para golpear en los bordes, no solo en el “centro cómodo”:
- Monroe, Diana, Einstein, Bowie - cartas históricas con datos de nacimiento conocidos
- polar latitud - donde los sistemas de casa se vuelven
- ecuatorial - donde se comportan de manera diferente
- sur hemisferio - la verificación de la simetría
Los casos límite atrapan exactamente las regresiones que no se ven en la carta del condicional.
Triangulación contra fuentes externas
Sección titulada «Triangulación contra fuentes externas»Los snapshots atrapan las regresiones en relación con sí mismos. Para verificar la verdad absoluta, cada lanzamiento se compara con fuentes independientes:
| Contra qué | Lo que verifica | Desviación |
|---|---|---|
| swetest CGI (Astrodienst) | longitudes planetarias, cuadrantes de casa | 0.000" |
| Kerykeion (Python, pyswisseph) | implementación independiente de SwEph | < 0.2" |
| Prokerala (sidereal Lahiri) | posiciones sidereales | 8-17", diferencia de sistema de fórmula Ayanamshi, no motor |
| NASA 5-Millennium Eclipse Catalog | hora y tipo de eclipse | < 1 min |
La desviación con Prokerala - no es un error: es diferentes implementaciones de la fórmula Lahiri, y lo documentamos de manera explícita, no ocultamos. Con swetest, que es el estándar de la industria, el desplazamiento es cero.
Las líneas astronómicas de cartografía se verifican geométricamente por separado - la precisión en el ecuador es mejor que 1.5 km.
Lo que se persigue en cada PR
Sección titulada «Lo que se persigue en cada PR»La precisión es un CI-gate, no una verificación de una sola vez:
api-accuracy.yml- en cada PR, el backend ejecuta el conjunto completo de snapshots + triangulación. El test rojo bloquea la fusión.check-eclipse-accuracy.yml- una vez al año, compara eclipses con el catálogo de NASA; desviación mayor que el umbral automáticamente crea un problema.check-sweph-updates.yml- cada semana, vigila la actualización de Swiss Ephemeris y el paquete WASM; nueva versión - problema en la revisión, sin autómerg.
Lo que da al integrador
Sección titulada «Lo que da al integrador»La garantía es simple: las posiciones planetarias dentro de < 0.1 segundos de arco de Swiss Ephemeris estándar, y esta frontera está protegida por automatización, no por promesa en README. Si alguna vez aparece una regresión, caerá en nuestro CI, no en la queja de tu usuario.
La versión pública de estas cifras, con la tabla de desviaciones en cartas específicas, vive en la página Precisión.
El mismo Swiss Ephemeris que en Solar Fire - en 4 líneas de código.
Clave gratuita sin tarjeta. 5 000 llamadas al mes antes del primer pago.