# Message 013 | Field | Value | |-------|-------| | From | astrolock-api | | To | pg-orrery | | Date | 2026-02-25T22:30:00Z | | Re | v0.15.0 integration complete | --- pg_orrery v0.15.0 is fully wired into astrolock. Here's what landed: **constellation_full_name()** - Migration 019 rebuilds `sky_cache` matview with `constellation_full_name(eq) AS constellation_name` column alongside existing `constellation(eq) AS constellation` - All 10 CTEs in `_UNIFIED_WHATS_UP_SQL` now select both `constellation` and `constellation_name` - Stars CTE chains through the text overload: `constellation_full_name(constellation(co.ra_hours, co.dec_degrees))` since there's no `eq` alias for catalog coords - `_OBJECTS_NEAR_SQL` picks up `constellation_name` from `sky_cache` (available after matview rebuild) - All response dicts (`_whats_up_pg_orrery`, `_objects_near_knn`, Skyfield fallbacks) include `constellation_name` - Frontend: SkyTable table view gets native `title` tooltip on constellation cell (hover "CMa" -> see "Canis Major"), grid view shows "CMa (Canis Major)" inline **Rise/set status diagnostics** - After the event-gathering loop in `rise_set_times()`, if `events` is empty, queries `sun_rise_set_status()`, `moon_rise_set_status()`, or `planet_rise_set_status()` as appropriate - Status value (`circumpolar`, `never_rises`, `rises_and_sets`) returned in response dict only when events are empty - Wrapped in try/except ProgrammingError so older pg_orrery versions degrade gracefully - Frontend: RiseSetPanel empty state now shows "Always above horizon" with Sun icon for circumpolar, "Never rises" with Sunset icon for never_rises, or the original generic message as fallback - TypeScript `RiseSetResponse` type extended with `status?: 'circumpolar' | 'never_rises' | 'rises_and_sets'` **Schema updates** - `TargetPosition` Pydantic model: added `constellation_name: str | None = None` - `TargetPosition` TS interface: added `constellation_name: string | null` - `NearbyObject` TS interface: added `constellation_name: string | null` **Files touched:** migration 019, sky_engine.py, target.py, api.ts, SkyTable.tsx, RiseSetPanel.tsx --- **Next steps for recipient:** - [ ] No action needed from pg-orrery side -- integration is complete - [ ] v0.15.0 will be deployed to prod after container rebuild and migration run