AstroWay/api v2.325.2 · blog
усі системи в нормі

Як ми тримаємо точність під контролем: CI проти swetest і NASA

Точність в астро-API легко деградує від одного рефакторингу ефемерид. Розбираємо захист: одне обчислювальне ядро для застосунку й API, звірка з NASA JPL Horizons, сотні заморожених снапшотів на еталонних картах і триангуляція кожного PR проти swetest CGI, Kerykeion, Prokerala та каталогу затемнень NASA.

Точність - це те, за чим користувач мовчки перевіряє тебе на Astrodienst. Якщо натальна карта розійшлась на кутову хвилину, скарга прилетить швидко. І найгірше в цьому те, що точність легко зламати непомітно: один рефакторинг у коді ефемерид, і половина ендпоінтів тихо поїхала на секунди дуги.

Ось як ми не даємо цьому статися.

Одне ядро на два середовища

Section titled “Одне ядро на два середовища”

Планетні позиції рахуються на наших власних серверах, без стороннього API, з точністю до кутової секунди, звіреною з NASA JPL Horizons. Ключове: у нашого застосунку і в API одне обчислювальне ядро, одна кодова база. Немає двох реалізацій, які можуть розійтися, тож розходитися нічому.

Для дат поза основним діапазоном 1800-2399 є аналітична ефемерида, трохи грубша (близько 0.1″), але без розривів на межах.

Кожен розрахунковий ендпоінт має набір заморожених снапшотів - 888 JSON-фікстур на момент цього білда. Раннер проганяє ендпоінт на еталонних картах і побайтово (в межах толерансу) звіряє з фікстурою. Будь-яке відхилення планетної довготи більше ніж 5e-5° (0.18″) валить тест.

Еталонні карти підібрані так, щоб бити по краях, а не тільки по “зручному” центру:

  • Monroe, Diana, Einstein, Bowie - історичні карти з відомими даними народження
  • полярна широта - де системи домів вироджуються
  • екваторіальна - де вони поводяться інакше
  • південна півкуля - перевірка дзеркальності

Граничні випадки ловлять саме ті регресії, які не видно на карті умовного киянина.

Триангуляція проти зовнішніх джерел

Section titled “Триангуляція проти зовнішніх джерел”

Снапшоти ловлять регресії відносно самих себе. Щоб перевіряти абсолютну правду, кожен реліз звіряється з незалежними джерелами:

Проти чогоЩо перевіряєРозходження
NASA JPL Horizonsпланетні позиції231 з 231 у межах допуску, медіана 0.052″
swetest CGI (Astrodienst)планетні довготи, куспіди домів0.000″
Kerykeion (Python, pyswisseph)незалежна open-source бібліотека< 0.2″
Prokerala (sidereal Lahiri)сайдеричні позиції8-17″, системна різниця формули аянамші, не рушія
NASA 5-Millennium Eclipse Catalogчас і тип затемнень< 1 хв

Розходження з Prokerala - не помилка: це різні реалізації формули Lahiri, і ми документуємо це явно, а не ховаємо. Зі swetest, референсним виводом Astrodienst, дрейф на цих картах нульовий.

Астрокартографічні лінії окремо перевіряються геометрично - точність на екваторі краща за 1.5 км.

Що гоняється на кожному PR

Section titled “Що гоняється на кожному PR”

Точність - це CI-gate, а не разова перевірка:

  • api-accuracy.yml - на кожен PR у бекенд-код проганяє весь набір снапшотів + триангуляцію. Червоний тест блокує merge.
  • check-eclipse-accuracy.yml - раз на рік звіряє затемнення з каталогом NASA; розходження понад поріг автоматично заводить issue.

Гарантія проста: планетні позиції звірені з NASA JPL Horizons, а від референсного виводу swetest розходяться з медіаною 0.0013 кутової секунди (максимум 0.561″, Хірон), і ця межа захищена автоматикою, а не обіцянкою в README. Якщо колись зʼявиться регресія, вона впаде в наш CI, а не у скарзі твого користувача.

Публічна версія цих цифр, з таблицею розходжень по конкретних картах, живе на сторінці Точність.

MakSeong · AstroWay

Роблю AstroWay API: загортаю астрологічну математику до кутової секунди у чистий REST і пишу про нудні деталі, які насправді важливі.

// побудуй на цьому

Позиції до кутової секунди у 4 рядках коду.

Безкоштовний ключ без картки. 5 000 викликів на місяць до першої оплати.

Більше з блогу усі дописи →

Engineering 2026-07-15

Три офіційні SDK: TypeScript, Python, PHP замість сирого curl

Сирий HTTP працює, але типізований клієнт економить години: автодоповнення шляхів, типи запиту й відповіді, вбудований retry на 408/409/429/5xx і Stainless-style ієрархія помилок. Розбираємо три офіційні SDK - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - і чим вони згенеровані з одного OpenAPI-контракту.

Engineering 2026-06-05

X-Cache header: видимий cache-status для оптимізації клієнтських інтеграцій

Кожна response API тепер несе X-Cache: MISS | HIT | BYPASS - клієнт відразу бачить чи запит обчислений з нуля, чи витягнутий з кешу. Це відкриває cache hit % колонку в /dashboard/usage та дозволяє оптимізувати інтеграцію без guesswork.

Ephemeris 2026-06-02

Eclipse path, cosmogram і Vedic-карти: pure-SVG візуалізатори без headless-Chrome

Шість ендпоінтів сімейства /v1/render/* для специфічних візуалізацій - три Vedic-картки (North/South/East Indian), Hamburg-School 90° cosmogram, equirectangular eclipse-path та stereographic star-map. Усі рендери - чистий SVG-стрінг, без браузерного worker-а.