Phase E: UI — map, planner, live view, via-waypoints#23
Conversation
… attrs Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…outes Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eals; dialog escape
|
[errors / Medium — no inline anchor: file enters the diff with the fix] |
|
[tests / High, product bug — no inline anchor: file enters the diff with the fix] |
…rsistence surfacing
|
The two non-inline findings (worker plan timeout; listPlans corrupt-row isolation) also landed in 2162bd2 — both files are now in the diff with tests. All 15 inline threads resolved; suite 356/356; the five-lens cycle is complete. |
|
Record correction: the fix-wave report for 2162bd2 claimed all 22 items landed with none skipped, and the map-error-banner thread was resolved on that basis — but item 14 (MapView |
Summary
Phase E delivers the complete user interface — eight tasks, each implemented and reviewed with fix loops, browser-verified end-to-end against real data, closed by a whole-branch gate review (verdict: ready to merge).
Verification
330 tests across 38 files (~235 s incl. the real-mask solver acceptance suite), strict + exactOptionalPropertyTypes typecheck, lint, build — all clean. Browser-verified complete real flows (17+ screenshots): plan Flensburg→Glücksburg with real Open-Meteo wind, route on map, rig tabs, reload → saved plan loads with ZERO new wind requests (network-log proven), via add/drag/remove replanning from stored data (request count pinned at 2 for the whole session).
Gate hardening (whole-branch review findings, fixed pre-merge)
Stale via-replan clobber guard (planIdRef; watched-vs-background asymmetry documented); stationary-GPS NaN heading → null (the berth is the most common Live-view start); initial-run coincident-via dedupe (B13 gap); Escape priority; canPlan during replan.
Phase F inheritances (tracked in ledger)
F1 precache list (incl. mask.meta.json for offline About); F2 E2E flows (via dedupe, multi-via drag); F3 BASE_URL sub-path verification + documented map-label language limitation.
Closes #4
🤖 Generated with Claude Code