Listening for events…

Scope freeze — launch Eventdex kind

Frozen 2026-06-26. A terrestrial event kind: one slot = one spaceflight launch that actually happened, lifting off from a real pad at a real spaceport. Unlike the cosmic-origin kinds (gw/uhecr/neutrino/transient), a launch has a ground position, so the dossier carries a geocoded launch-site point.

The source

launch_library (already live in PG, LaunchLibraryFetcher) — Launch Library 2 (ll.thespacedevs.com), the community spaceflight database. The fetcher re-snapshots each launch many times as its status evolves (Go for Launch then Launch Successful), so one launch appears in many observation rows. No spine-reload script: the kind is built directly from the live source by collapsing the snapshots to one slot per launch.

The slot

  • One slot = one launch (slot ID = the Launch Library launch_id UUID). An launch's many snapshot rows collapse to its most-advanced captured status.
  • Terrestrial: the launch site is a real ground point. The feed names the pad and spaceport but carries no coordinates, so each launch is anchored to its spaceport centroid by geocoding the location string (see Coordinates).
  • Roster: 86 measured launches (84 successful, 2 failure) over the live source's window so far (ingestion began 2026-03-28). This is a rolling recent window, not deep history; the kind grows as the feed confirms more launches.

Measured reality — happened launches only (Mike's bright line, 2026-06-26)

A launch is a measured event only once it has happened. Launch Library statuses split cleanly:

  • Measured (IN): Launch Successful, Launch Failure, Launch in Flight — the vehicle physically left the pad.
  • Planned (OUT): Go for Launch, To Be Determined, To Be Confirmed, On Hold — these are schedules, not measurements. They are excluded even when the scheduled date has already passed: a past-dated Go for Launch in our snapshot is a stale plan with no confirmed outcome, not evidence the launch occurred. Clean per feedback_measured_reality_only.

Of 131 distinct launches in the current window, 86 have a terminal status (kept) and 45 are still scheduled (excluded).

Slot contents

  • Identity: launch_id, full name, vehicle (the rocket, parsed from the "<rocket> | <mission>" name), provider, mission name, mission type.
  • Outcome: subtype success / failure / in_flight, plus the raw Launch Library status. An in_flight launch is flagged provisional (not yet terminal).
  • Place: pad name, spaceport location string, geocoded lat/lon, geocoded flag.
  • Time: liftoff time (the observation timestamp).
  • Source fields: the chosen snapshot's native fields, verbatim.

Coordinates (geocoded, flagged not hidden)

The feed gives a named pad and a spaceport string ("Cape Canaveral SFS, FL, USA") with no coordinates. Each launch is anchored to its spaceport centroid via the project geocoder (forward_geocode, OSM Nominatim, throttled to 1 req/s and cached at data/launch_library_cache/geocode.json), flagged geocoded="spaceport". Of 86 launches, 77 geocoded; 9 are from three sites OSM could not resolve from their exact strings (Haiyang Oriental Spaceport; Rocket Lab LC-1, Mahia; Taiyuan SLC) and remain coordinate-less, flagged null. Pad-level precision (the feed's pad ids carry exact coordinates in the full API the fetcher does not capture) is deferred-v2.

Storage

  • Source launch_library (unchanged; already live and active).
  • Slots in the shared data/event_storehouse/launch/, reusing the event_storehouse write + disk-rebuilt-index machinery.

Gotchas (reuse-critical)

  • Heavy snapshot duplication. ~9 rows per launch; never count distinct launch rows as launches. Dedup on launch_id, keep the most-advanced status.
  • extra_json is TEXT — cast ::jsonb for SQL on launch_id/status/etc.
  • Status, not date, decides measured-vs-planned. A past-dated Go for Launch is still a plan; filter on terminal status, never on timestamp < now().
  • No coordinates in the feed — spaceport geocode required; some non-US sites fail to resolve and stay null.

Frozen vs deferred-v2

  • Frozen (this brick): measured-launch roster (86 now, growing) as terrestrial event slots; vehicle/provider/mission/outcome; spaceport-geocoded point; catalog index.
  • Deferred-v2: exact pad coordinates from the full Launch Library API; a ground-sensor sweep near the pad; payload-mass / orbit enrichment; backfill of pre-ingestion historical launches if a bulk source is wired.
Live Feed