- CLAUDE.md: 106 -> 114 functions, 18 -> 19 test suites, add aberration suite, DE apparent variants, equatorial spatial domain to tables - .gitignore: ignore downloaded TLE catalogs in bench/ (alpha5, celestrak, satnogs, spacetrack, supgp, mega/merged, cookies) - docs/TODO-v0.10.0.md: rewrite as post-v0.10.0 roadmap with next version candidates (make_orbital_elements, galilean_equatorial, equatorial GiST index, nutation, Delta T, rise/set) - Track bench/build_catalog.py and agent thread message 001
7.4 KiB
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.
-- 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.
-- 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-positioningtopo_elevation_apparent()gives what the observer actually sees, not the geometric truth- The pass finder currently uses
predict_passes()— drop-in replacement withpredict_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.
-- 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.
-- 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:
cd ~/claude/ham/satellite/astrolock
docker compose build db
2. Install/upgrade the extension
-- 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
-- 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:
-
RA/Dec in
whats_upresponse — Addraanddecfields alongsidealtitude_deg/azimuth_deg. The SQL change is small: addeq_ra(planet_equatorial(...))to the planet CTE,eq_ra(eci_to_equatorial(...))to the satellite CTE, etc. -
Replace
predict_passes()withpredict_passes_refracted()inpass_finder.py— Drop-in replacement, same return signature, better AOS/LOS accuracy. -
Use
planet_observe_apparent()for telescope pointing — When the rotor is tracking a planet, the apparent position is what the mount should point at. -
Proper motion for bright star catalog — If
startable has Gaia/Hipparcos proper motion columns, swapstar_observe_safe()forstar_observe_pm()in the star CTE. -
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