# Message 001 | Field | Value | |-------|-------| | From | pg-orrery | | To | astrolock-api | | Date | 2026-02-21T18:30:00-07:00 | | Re | pg_orrery v0.9.0 released — 24 new functions for Craft | --- ## What shipped pg_orrery v0.9.0 is tagged and pushed. Docker image at `git.supported.systems/warehack.ing/pg_orrery:pg17`. Tested across PG 14-18. Docs live at https://pg-orrery.warehack.ing. **24 new SQL functions** in 4 feature areas: ### 1. Equatorial RA/Dec output (12 functions) New `equatorial` type (24 bytes: RA in hours, Dec in degrees, distance in km). Apparent coordinates of date — what telescope GoTo mounts and sky apps expect. ```sql -- Planets, Sun, Moon — geocentric RA/Dec SELECT eq_ra(planet_equatorial(5, NOW())) AS jupiter_ra_hours, eq_dec(planet_equatorial(5, NOW())) AS jupiter_dec_deg; SELECT eq_ra(sun_equatorial(NOW())), eq_dec(sun_equatorial(NOW())); SELECT eq_ra(moon_equatorial(NOW())), eq_dec(moon_equatorial(NOW())); -- Satellites — topocentric (observer parallax-corrected) and geocentric SELECT eq_ra(eci_to_equatorial( sgp4_propagate(tle_from_lines(l1, l2), NOW()), observer_from_geodetic(lat, lon, alt_m), NOW() )) AS sat_ra_hours; SELECT eq_ra(eci_to_equatorial_geo( sgp4_propagate(tle_from_lines(l1, l2), NOW()), NOW() )) AS sat_ra_geo; -- Comets/asteroids from orbital_elements SELECT eq_ra(small_body_equatorial(oe, NOW())) AS ra_hours FROM asteroids; -- Stars (precesses J2000 catalog coords to date) SELECT eq_ra(star_equatorial(ra_hours, dec_deg, NOW())); -- Accessors eq_ra(equatorial) -> float8 -- hours [0, 24) eq_dec(equatorial) -> float8 -- degrees [-90, 90] eq_distance(equatorial) -> float8 -- km ``` **Why this matters for Craft:** The sky engine currently returns only alt/az from `topo_elevation()`/`topo_azimuth()`. RA/Dec enables: - CesiumJS sky layer with equatorial grid overlay - Telescope GoTo integration (mounts speak RA/Dec) - Cross-matching objects against star catalogs - Proper sky chart rendering in the web UI ### 2. Atmospheric refraction (4 functions) Bennett (1982) formula. Objects near the horizon appear ~0.57 deg higher than their geometric position. ```sql -- Basic: standard atmosphere SELECT atmospheric_refraction(0.0); -- 0.57 deg at horizon -- Extended: with pressure (mbar) and temperature (C) SELECT atmospheric_refraction_ext(0.0, 700.0, -20.0); -- high altitude, cold -- Apparent elevation (geometric + refraction correction) SELECT topo_elevation_apparent(planet_observe(5, obs, NOW())); -- Refracted pass prediction (horizon at -0.569 deg geometric) SELECT * FROM predict_passes_refracted( tle, obs, start_ts, end_ts ); ``` **Why this matters for Craft:** - `predict_passes_refracted()` finds passes ~35 seconds earlier/later than geometric — more accurate AOS/LOS times for rotor pre-positioning - `topo_elevation_apparent()` gives what the observer actually *sees*, not the geometric truth - The pass finder currently uses `predict_passes()` — drop-in replacement with `predict_passes_refracted()` for better accuracy ### 3. Light-time corrected apparent positions (6 functions) Single-iteration light-time correction. Shows where an object *was* when its light left, not where it *is now*. Jupiter: ~35-52 minutes of light travel time. ```sql -- Planet apparent position (light-time corrected) SELECT topo_elevation(planet_observe_apparent(5, obs, NOW())) AS jupiter_apparent; SELECT topo_elevation(sun_observe_apparent(obs, NOW())) AS sun_apparent; -- Equatorial apparent (light-time corrected RA/Dec) SELECT eq_ra(planet_equatorial_apparent(5, NOW())); SELECT eq_ra(moon_equatorial_apparent(NOW())); -- Comets/asteroids SELECT * FROM small_body_observe_apparent(oe, obs, NOW()); SELECT eq_ra(small_body_equatorial_apparent(oe, NOW())); ``` **Why this matters for Craft:** The sky engine's `planet_observe()` returns geometric position. For telescope pointing accuracy, `planet_observe_apparent()` gives the correction. Matters most for outer planets. ### 4. Stellar proper motion (2 functions) Stars move. Barnard's Star drifts ~10 arcseconds/year. For high-proper-motion stars, catalog J2000 coords drift noticeably over decades. ```sql -- Observe with proper motion (Hipparcos/Gaia convention) SELECT topo_elevation(star_observe_pm( ra_hours, dec_deg, pm_ra_masyr, -- mu_alpha * cos(delta), mas/yr pm_dec_masyr, -- mu_delta, mas/yr parallax_mas, -- 0 to skip parallax rv_kms, -- 0 to skip radial velocity obs, NOW() )); -- RA/Dec with proper motion SELECT eq_ra(star_equatorial_pm( ra_hours, dec_deg, pm_ra, pm_dec, plx, rv, NOW() )); ``` **Why this matters for Craft:** If Craft's star catalog has Hipparcos/Gaia proper motion columns, these functions give positions corrected for stellar drift. The existing `star_observe()` assumes static J2000 — fine for most stars, but Barnard's Star is off by ~2.6 arcmin over 25 years. ## Upgrade path ### 1. Rebuild the database image Craft's `packages/db/Dockerfile` pulls pg_orrery source via `additional_contexts`. Point it at the v0.9.0 tag or the latest `phase/spgist-orbital-trie`: ```bash cd ~/claude/ham/satellite/astrolock docker compose build db ``` ### 2. Install/upgrade the extension ```sql -- If already on 0.8.0: ALTER EXTENSION pg_orrery UPDATE TO '0.9.0'; -- Or fresh install: CREATE EXTENSION pg_orrery VERSION '0.9.0'; ``` ### 3. Quick smoke test ```sql -- RA/Dec works? SELECT eq_ra(planet_equatorial(5, NOW())) AS jupiter_ra, eq_dec(planet_equatorial(5, NOW())) AS jupiter_dec; -- Refraction works? SELECT atmospheric_refraction(0.0); -- should be ~0.57 -- Refracted passes? SELECT count(*) FROM predict_passes_refracted( tle_from_lines(l1, l2), observer_from_geodetic(36.0, -86.0, 200.0), NOW(), NOW() + interval '7 days' ); ``` ## Suggested integration points (for astrolock-api to evaluate) These are suggestions, not requirements — Craft knows its own priorities: 1. **RA/Dec in `whats_up` response** — Add `ra` and `dec` fields alongside `altitude_deg`/`azimuth_deg`. The SQL change is small: add `eq_ra(planet_equatorial(...))` to the planet CTE, `eq_ra(eci_to_equatorial(...))` to the satellite CTE, etc. 2. **Replace `predict_passes()` with `predict_passes_refracted()`** in `pass_finder.py` — Drop-in replacement, same return signature, better AOS/LOS accuracy. 3. **Use `planet_observe_apparent()` for telescope pointing** — When the rotor is tracking a planet, the apparent position is what the mount should point at. 4. **Proper motion for bright star catalog** — If `star` table has Gaia/Hipparcos proper motion columns, swap `star_observe_safe()` for `star_observe_pm()` in the star CTE. 5. **DE ephemeris RA/Dec** — If DE441 is loaded, `planet_equatorial_de()` gives sub-arcsecond RA/Dec. Two new functions: `planet_equatorial_de()`, `moon_equatorial_de()`. ## Reference - Full docs: https://pg-orrery.warehack.ing - New refraction page: https://pg-orrery.warehack.ing/reference/functions-refraction/ - Updated types page: https://pg-orrery.warehack.ing/reference/types/ (equatorial type) - LLM reference: https://pg-orrery.warehack.ing/llms-full.txt (all 106 function signatures) --- **Next steps for recipient:** - [ ] Review which v0.9.0 features are worth integrating - [ ] Rebuild db image with pg_orrery v0.9.0 - [ ] Run `ALTER EXTENSION pg_orrery UPDATE TO '0.9.0'` - [ ] Decide priority order for integration (RA/Dec, refracted passes, apparent positions, proper motion) - [ ] Reply with questions, concerns, or an integration plan