review(2-4): pass story 2-4 — altitude colour bands & aircraft type icons
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 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# Story 2.4: Altitude Colour Bands & Aircraft Type Icons
|
# Story 2.4: Altitude Colour Bands & Aircraft Type Icons
|
||||||
|
|
||||||
Status: review
|
Status: done
|
||||||
|
|
||||||
## Story
|
## Story
|
||||||
|
|
||||||
|
|||||||
@@ -120,3 +120,17 @@ Description: `draw_airspace()` skips any GeoJSON feature whose `geometry.type` i
|
|||||||
Story: `2-3-home-marker-and-airspace-outlines`
|
Story: `2-3-home-marker-and-airspace-outlines`
|
||||||
Category: Technical debt
|
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`.
|
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.
|
||||||
|
|||||||
@@ -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 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: planeMapper
|
||||||
project_key: NOKEY
|
project_key: NOKEY
|
||||||
tracking_system: file-system
|
tracking_system: file-system
|
||||||
@@ -56,7 +56,7 @@ development_status:
|
|||||||
2-1-aircraft-data-model-and-fetcher: done
|
2-1-aircraft-data-model-and-fetcher: done
|
||||||
2-2-coordinate-projection-and-base-map-loading: done
|
2-2-coordinate-projection-and-base-map-loading: done
|
||||||
2-3-home-marker-and-airspace-outlines: 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-5-per-aircraft-drawing: backlog
|
||||||
2-6-stateful-renderer-and-display-interface: backlog
|
2-6-stateful-renderer-and-display-interface: backlog
|
||||||
2-7-operational-radar-loop-startup-screen-and-systemd-wiring: backlog
|
2-7-operational-radar-loop-startup-screen-and-systemd-wiring: backlog
|
||||||
|
|||||||
Reference in New Issue
Block a user