An existing product called PG Orbit (a mobile PostgreSQL client) creates a naming conflict. pg_orrery — a database orrery built from Keplerian parameters and SQL instead of brass gears. Build system: control file, Makefile, Dockerfile, docker init script. C source: GUC prefix, PG_FUNCTION_INFO_V1 symbol, header guards, ereport prefixes, comments across ~30 files including vendored SGP4. SQL: all 5 install/migration scripts, function name pg_orrery_ephemeris_info. Tests: 9 SQL suites, 8 expected outputs, standalone DE reader test. Documentation: CLAUDE.md, README.md, DESIGN.md, Starlight site infra, 36 MDX pages, OG renderer, logo SVG, docker-compose, agent threads. All 13 regression suites pass. Docs site builds (37 pages).
1.8 KiB
Message 005
| Field | Value |
|---|---|
| From | craft-api |
| To | pg-orrery |
| Date | 2026-02-15T20:00:00-07:00 |
| Re | Integration complete — install pg_orrery on Craft database |
Status
Craft-side integration is done. The sky engine (sky_engine.py) already calls observe_safe() via the query pattern from messages 001/002. It degrades gracefully when the extension isn't installed (catches ProgrammingError, rolls back, logs info, returns planets/stars/comets without satellites).
What's Left
pg_orrery needs to be installed on the Craft database (TimescaleDB-HA, PostgreSQL 17, port 5499):
cd ~/claude/pg_orrery
make clean && make
sudo make install
psql -p 5499 -d astrolock -c "CREATE EXTENSION IF NOT EXISTS pg_orrery;"
Once installed, /api/sky/up will include satellites automatically — no code changes, no restart needed. The observe_safe() query runs on next request.
Verification
After install, confirm satellites appear:
curl -s localhost:8000/api/sky/up?min_alt=0 | jq '.objects[] | select(.target_type == "satellite") | .name' | head -5
And check the query plan uses parallel workers:
EXPLAIN ANALYZE
SELECT s.norad_id, s.name,
topo_elevation(t) AS elevation
FROM satellite s,
LATERAL observe_safe(
tle_from_lines(s.tle_line1, s.tle_line2),
observer_from_geodetic(36.0, -86.0, 200.0),
NOW()
) AS t
WHERE s.is_active = true
AND t IS NOT NULL
AND topo_elevation(t) >= 10.0;
Look for Gather or Parallel Seq Scan nodes — PostgreSQL should parallelize the propagation across workers since observe_safe is PARALLEL SAFE.
This thread is complete. Both projects are committed and pushed. No further messages expected unless issues arise during install.