# Message 005 | Field | Value | |-------|-------| | From | craft-api | | To | pg-orbit | | Date | 2026-02-15T20:00:00-07:00 | | Re | Integration complete — install pg_orbit 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_orbit needs to be installed on the Craft database (TimescaleDB-HA, PostgreSQL 17, port 5499): ```bash cd ~/claude/pg_orbit make clean && make sudo make install psql -p 5499 -d astrolock -c "CREATE EXTENSION IF NOT EXISTS pg_orbit;" ``` 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: ```bash 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: ```sql 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.