Review story 2.2: coordinate projection and base map loading passes all ACs

All 10 review criteria pass without fixes. Deferred two tech-debt items
(equirectangular distortion at high latitudes, missing dimension assertion
in basemap.load()). Story and sprint-status marked done.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt Edholm
2026-04-22 23:12:14 -04:00
parent 037ce3e193
commit 34e3736c10
3 changed files with 17 additions and 3 deletions
@@ -1,6 +1,6 @@
# Story 2.2: Coordinate Projection & Base Map Loading # Story 2.2: Coordinate Projection & Base Map Loading
Status: review Status: done
## Story ## Story
@@ -92,3 +92,17 @@ Description: The `POST /submit` handler is fully synchronous — the browser con
Story: `2-1-aircraft-data-model-and-fetcher` Story: `2-1-aircraft-data-model-and-fetcher`
Category: Runtime verification Category: Runtime verification
Description: `HttpFetcher` is tested with mocks only. Live feed at `http://localhost:8080/data/aircraft.json` can only be verified on device with an RTL-SDR dongle connected and dump1090 running. No automated test covers the real HTTP path to dump1090. Description: `HttpFetcher` is tested with mocks only. Live feed at `http://localhost:8080/data/aircraft.json` can only be verified on device with an RTL-SDR dongle connected and dump1090 running. No automated test covers the real HTTP path to dump1090.
---
## Story 2.2: Coordinate Projection & Base Map Loading
### [2-2] Equirectangular projection distortion at high latitudes or large radius
Story: `2-2-coordinate-projection-and-base-map-loading`
Category: Technical debt
Description: The equirectangular projection corrects only for longitude convergence at the home latitude (`cos(home_lat)`). For large radius values (e.g. >150nm) or locations above ~60°N, distortion accumulates toward the display edges. Aircraft positions at the map boundary can be displaced by several pixels from their true screen location. Acceptable for a ~100nm display centred on a UK airfield, but worth revisiting if radius or latitude range is extended.
### [2-2] basemap.load() does not verify image dimensions
Story: `2-2-coordinate-projection-and-base-map-loading`
Category: Technical debt
Description: `basemap.load()` opens and returns whatever image is at `BACKGROUND_PATH` without asserting it is 800×480. A mismatched tile composite (e.g. from a re-provisioning at a different zoom level) will be silently accepted and the rendered output will be corrupted. Future hardening: add a dimension assertion and raise `ValueError` if the image does not match `DISPLAY_WIDTH × DISPLAY_HEIGHT`.
@@ -35,7 +35,7 @@
# - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended) # - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended)
generated: 2026-04-22 generated: 2026-04-22
last_updated: 2026-04-22 # 2-1 done, 2-2 review, epic-2 in-progress last_updated: 2026-04-22 # 2-1 done, 2-2 done, epic-2 in-progress
project: planeMapper project: planeMapper
project_key: NOKEY project_key: NOKEY
tracking_system: file-system tracking_system: file-system
@@ -54,7 +54,7 @@ development_status:
# Epic 2: Live Radar Display # Epic 2: Live Radar Display
epic-2: in-progress epic-2: in-progress
2-1-aircraft-data-model-and-fetcher: done 2-1-aircraft-data-model-and-fetcher: done
2-2-coordinate-projection-and-base-map-loading: review 2-2-coordinate-projection-and-base-map-loading: done
2-3-home-marker-and-airspace-outlines: backlog 2-3-home-marker-and-airspace-outlines: backlog
2-4-altitude-colour-bands-and-aircraft-type-icons: backlog 2-4-altitude-colour-bands-and-aircraft-type-icons: backlog
2-5-per-aircraft-drawing: backlog 2-5-per-aircraft-drawing: backlog