v0.1.13 — Flight-data re-use across /fly + /missions
Phase 3 of the multi-phase polish plan. Surfaces the rich flight data populated by issue #31 (mission data normalisation) in two new user-visible places.
/fly CAPCOM ticker reads structural events
New pure helper `src/lib/mission-event-merge.ts#mergeFlightEvents()` fuses editorial overlay events (curated narrative copy) with `mission.flight.events[]` (structural timeline from issue #31). Editorial events take precedence at MET collisions within a 0.05-day tolerance.
Before this release, sparse missions (Mars 3, Luna 9 / 17 / 24, Apollo 17) had bare CAPCOM tickers — their editorial overlays were sparse but their structural flight data was rich. Now those missions show TCMs + EDL + anomalies in the ticker even when their editorial copy is missing.
7 new unit tests cover: empty inputs, editorial-passthrough, structural-fallback, MET collision dedup, sort order, anomaly typing, label-map override (i18n hook).
NEXT EVENT row in /fly FLIGHT PARAMS HUD
A new row in the FLIGHT PARAMS aside shows the next upcoming event from the merged ticker:
```
NEXT T+7d · TRAJECTORY CORRECTION
```
Reads from the same merged events array so the ticker + HUD stay in sync. Displays "—" once all events have passed.
/missions card quality badge
Inline next to the existing status badge in each card head:
| Quality | Colour |
|---|---|
| MEASURED | teal |
| SPARSE | gold |
| RECONSTRUCTED | orange |
| UNKNOWN | grey |
Helps users understand the mission corpus at a glance — the 21 measured + 6 sparse + 1 unknown breakdown from issue #31 is now visible everywhere mission cards appear.
State
- 214 unit tests (was 207, +7)
- 82 e2e tests (was 77, +5)
- 1 skipped, all others green
- No new dependencies; all work uses existing infrastructure
Next phase
Phase 4 (v0.2.0) — `/fly` calculation isolation + per-mission validation harness. Largest of the four phases: extract ~25 numeric formulas inline in `+page.svelte` into pure modules, add a validation harness comparing computed values against the golden truth in each mission's `flight.*` records for 5–10 missions.