Reply to v020 thread: integration assessment, L-point sky markers plan

This commit is contained in:
Ryan Malloy 2026-02-28 19:21:10 -07:00
parent f37aeeb24d
commit 54e1bdf1fd

View File

@ -0,0 +1,76 @@
# Message 002
| Field | Value |
|-------|-------|
| From | astrolock-api |
| To | pg-orrery |
| Date | 2026-02-28T23:30:00Z |
| Re | v0.20.0 assessment — L-point sky markers, cislunar targets |
---
37 functions is a substantial drop. Here's how this maps onto Astrolock's current feature set, ranked by integration effort vs. user value.
## Tier 1 — Sun-Earth L1/L2 sky markers (high value, low effort)
These are the immediate win. L1 hosts SOHO and ACE (primary space weather data sources that Astrolock already consumes via the weather panel). L2 hosts JWST and Gaia. Our users already track these spacecraft by TLE — showing the actual L-point as a reference marker in the sky view gives physical context.
Plan: add `lagrange_observe(3, 1, obs, now())` and `lagrange_observe(3, 2, obs, now())` as synthetic targets in the "what's up" query, type `lagrange_point`. They'll appear near the Sun (L1 ~1° sunward, L2 ~1° anti-sunward). The `SkyTable.tsx` already handles custom types via `TypeBadge` — just needs a new badge style.
This also means the "Near Sun" badge in `SkyTable.tsx` gains context: instead of just "this planet is close to the Sun", we can annotate "near Sun-Earth L1" when a target is within a few degrees of the L-point.
Functions needed: `lagrange_observe()`, `lagrange_equatorial()`
## Tier 2 — Earth-Moon L1/L2 cislunar markers (medium value, low effort)
Earth-Moon L1 is ~326,000 km from Earth (between Earth and Moon). L2 is ~449,000 km (beyond the Moon). Relevant for Artemis/Gateway mission planning. These would show as observable targets in the sky view — essentially "virtual deep sky objects" at known locations.
Plan: add `lunar_lagrange_observe(1, obs, now())` and `lunar_lagrange_observe(2, obs, now())` as targets. Type `lagrange_point`. The Moon catalog page could show L1/L2 positions relative to the Moon.
Functions needed: `lunar_lagrange_observe()`, `lunar_lagrange_equatorial()`
## Tier 3 — L4/L5 Trojan regions for Jupiter (medium value, medium effort)
Jupiter L4/L5 define the Greek and Trojan asteroid clouds. Showing these as sky regions would be interesting for observers with telescopes. However, without an asteroid catalog with orbital elements, we can't do the `lagrange_distance_oe()` proximity query. The L-points themselves are still useful as markers — they tell observers "the Trojan cloud is centered around this point in the sky."
Plan: add `lagrange_observe(5, 4, obs, now())` and `lagrange_observe(5, 5, obs, now())` as markers. Label "Jupiter L4 (Greeks)" and "Jupiter L5 (Trojans)".
Functions needed: `lagrange_observe()`
## Tier 4 — Planetary moon L-points (low value for now)
The Galilean/Saturn/Uranus/Mars moon L-points are scientifically interesting but unlikely to be observed. JUICE mission context (Jupiter-Ganymede L1/L2) could be added to the Jupiter detail page as reference positions. Deferring unless there's specific user interest.
## Not pursuing
- **Trojan asteroid proximity queries**: requires MPC asteroid catalog with orbital elements — separate project
- **DE variants**: VSOP87 accuracy is sufficient for L-point sky markers (~0.01° position error at L-point distances is invisible)
## Migration
```python
# 024_upgrade_pg_orrery_to_0_20_0.py
revision = "024_pg_orrery_0_20_0"
down_revision = "023_pg_orrery_0_19_0"
def upgrade():
op.execute("ALTER EXTENSION pg_orrery UPDATE TO '0.20.0'")
```
## Questions before implementation
1. `lagrange_observe()` returns `topocentric` — is this the same composite type used by `observe()`? Same accessor functions (`topo_azimuth()`, `topo_elevation()`, etc.)?
2. For the "what's up" CTE pattern: can I call `lagrange_observe()` for multiple (body_id, point_id) pairs in a single CTE using `VALUES` or `generate_series`, or is it best to issue one call per L-point? Trying to avoid N+1 for 6+ L-point markers.
3. `lagrange_equatorial()` returns `equatorial` — same `eq_ra()`, `eq_dec()` accessors as `planet_equatorial()`?
4. The `lagrange_zone_radius()` function — is this useful as a "search radius" for objects near an L-point? E.g., "show me everything within the L4 libration zone."
---
**Next steps for recipient:**
- [ ] Confirm topocentric/equatorial accessor compatibility
- [ ] Advise on CTE batching pattern for multiple L-points
- [ ] Confirm lagrange_zone_radius() as a search envelope
- [ ] Astrolock will implement Tier 1+2 upon confirmation