From be32469284e331bd1b24d0108e682a563cb77fee Mon Sep 17 00:00:00 2001 From: Matt Edholm Date: Wed, 22 Apr 2026 23:23:37 -0400 Subject: [PATCH] =?UTF-8?q?review(2-4):=20pass=20story=202-4=20=E2=80=94?= =?UTF-8?q?=20altitude=20colour=20bands=20&=20aircraft=20type=20icons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All 7 ACs verified. No code fixes required: boundary logic (<=), category map, callsign prefix guard, altitude fallback thresholds, empty-category guard, and type annotations are all correct. 89/89 tests pass, ruff clean. Added two deferred items: hardcoded _AIRLINE_PREFIXES subset and A-category military aircraft misclassification. Story and sprint-status marked done. Co-Authored-By: Claude Sonnet 4.6 --- ...ltitude-colour-bands-and-aircraft-type-icons.md | 2 +- .../implementation-artifacts/deferred-work.md | 14 ++++++++++++++ .../implementation-artifacts/sprint-status.yaml | 4 ++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/_bmad-output/implementation-artifacts/2-4-altitude-colour-bands-and-aircraft-type-icons.md b/_bmad-output/implementation-artifacts/2-4-altitude-colour-bands-and-aircraft-type-icons.md index dd78d5e..7047a33 100644 --- a/_bmad-output/implementation-artifacts/2-4-altitude-colour-bands-and-aircraft-type-icons.md +++ b/_bmad-output/implementation-artifacts/2-4-altitude-colour-bands-and-aircraft-type-icons.md @@ -1,6 +1,6 @@ # Story 2.4: Altitude Colour Bands & Aircraft Type Icons -Status: review +Status: done ## Story diff --git a/_bmad-output/implementation-artifacts/deferred-work.md b/_bmad-output/implementation-artifacts/deferred-work.md index 70618f7..0dadd12 100644 --- a/_bmad-output/implementation-artifacts/deferred-work.md +++ b/_bmad-output/implementation-artifacts/deferred-work.md @@ -120,3 +120,17 @@ Description: `draw_airspace()` skips any GeoJSON feature whose `geometry.type` i Story: `2-3-home-marker-and-airspace-outlines` Category: Technical debt Description: If a GeoJSON feature has `"geometry": null` (valid per GeoJSON spec for featureless features), `feature.get("geometry", {})` returns `None` rather than `{}`, and the subsequent `.get("type")` call raises `AttributeError`. Acceptable for MVP given controlled OpenAIP input, but real-world GeoJSON files can contain null geometry. Future hardening: guard with `if not geom or not isinstance(geom, dict): continue`. + +--- + +## Story 2.4: Altitude Colour Bands & Aircraft Type Icons + +### [2-4] _AIRLINE_PREFIXES is a hardcoded subset of ICAO airline codes +Story: `2-4-altitude-colour-bands-and-aircraft-type-icons` +Category: Technical debt +Description: `_AIRLINE_PREFIXES` contains 23 hand-picked ICAO 3-letter designators. Any airline callsign not in this set (e.g. "SXS", "WJA", "FDX") will fall through to the altitude fallback and may be misclassified as GA_LIGHT, PRIVATE_JET, or AIRLINER depending on altitude rather than as COMMERCIAL. Acceptable for MVP display purposes, but notable for any use case that relies on accurate airline/GA distinction. Future hardening: source the full ICAO airline prefix list from a static CSV bundled with the package. + +### [2-4] Military aircraft with A-category ADS-B codes are misclassified +Story: `2-4-altitude-colour-bands-and-aircraft-type-icons` +Category: Technical debt +Description: `_CATEGORY_MAP` maps only ADS-B B-categories (B1–B4) to `AircraftType.MILITARY`. Military aircraft that transmit A-category ADS-B codes (e.g. training jets advertising as A3) or no category at all will fall through to the callsign/altitude fallback and be misclassified. A military callsign prefix list (e.g. "RRR", "GAF", "USAF") would improve detection but is not required by any story AC. diff --git a/_bmad-output/implementation-artifacts/sprint-status.yaml b/_bmad-output/implementation-artifacts/sprint-status.yaml index 64c0161..1959d14 100644 --- a/_bmad-output/implementation-artifacts/sprint-status.yaml +++ b/_bmad-output/implementation-artifacts/sprint-status.yaml @@ -35,7 +35,7 @@ # - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended) generated: 2026-04-22 -last_updated: 2026-04-22 # 2-1 done, 2-2 done, 2-3 done, 2-4 review, epic-2 in-progress +last_updated: 2026-04-22 # 2-1 done, 2-2 done, 2-3 done, 2-4 done, epic-2 in-progress project: planeMapper project_key: NOKEY tracking_system: file-system @@ -56,7 +56,7 @@ development_status: 2-1-aircraft-data-model-and-fetcher: done 2-2-coordinate-projection-and-base-map-loading: done 2-3-home-marker-and-airspace-outlines: done - 2-4-altitude-colour-bands-and-aircraft-type-icons: review + 2-4-altitude-colour-bands-and-aircraft-type-icons: done 2-5-per-aircraft-drawing: backlog 2-6-stateful-renderer-and-display-interface: backlog 2-7-operational-radar-loop-startup-screen-and-systemd-wiring: backlog