[AZ-700] gps-denied-render-map: HTML map of estimated vs truth tracks

New operator-side console-script renders a self-contained HTML map
(folium / Leaflet) comparing the estimator's JSONL track against
the tlog ground-truth track. Pinned visual style: red truth + blue
estimated polylines, start/end markers per track, 100 m + 50 m
scale circles, optional AZ-699 accuracy-summary banner, and an
--offline-tiles mode (with optional local tile-URL template) for
Jetsons without internet.

folium is gated behind a new [operator-tools] optional-dep so the
airborne binary's cold-start NFR is unaffected (C12 binary doesn't
import the new module). 14 new unit tests pin polyline count,
marker count, scale-circle radii, summary embedding, offline-tile
behaviour, and full CLI smoke. Zero mypy --strict errors.

Refines the 2026-05-20 Jetson-only test policy: unit tests may run
locally, e2e/perf/resilience/security stay Jetson-only. Documented
in _docs/02_document/tests/environment.md (Where each tier runs)
and .cursor/rules/testing.mdc (Test environment for this project).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-05-20 17:04:01 +03:00
parent dcde602f61
commit b66b68ff76
8 changed files with 943 additions and 17 deletions
+9
View File
@@ -130,9 +130,18 @@ telemetry = [
"jetson-stats>=4.2",
"pynvml>=11.5",
]
# AZ-700: operator-side post-flight analysis tools. NOT installed on
# the airborne binary (folium pulls ~5 MB of JS + Leaflet assets that
# regress the cold-start NFR if pulled into the runtime image).
# Activate with `pip install gps-denied-onboard[operator-tools]` on
# a developer / analyst workstation.
operator-tools = [
"folium>=0.16,<1.0",
]
[project.scripts]
gps-denied-replay = "gps_denied_onboard.cli.replay:main"
gps-denied-render-map = "gps_denied_onboard.cli.render_map:main"
operator-orchestrator = "gps_denied_onboard.components.c12_operator_orchestrator.cli:main"
[tool.setuptools]