Native Kotlin + MapLibre mapping/atlas application for Android, descended
from the Sovereign Mantle TacMap lineage. Single host app in
apps/atlas-android/ — no other runtimes, no cross-platform layer.
Offline-first field mapping: GPS location + compass heading, measure, waypoints + journal, track recording, Go-To navigation, offline tile packs (plan/download/render from an embedded localhost tile server), base-layer picker (OSM, Esri, OpenTopoMap, USGS, CARTO), graticule, range rings, radio link calculator, session geofence, GPX export, follow mode.
Pure-logic modules (core/, geo/, camera/, layers/, field/,
measure/, goto/, track/, offline/, tactical/) carry zero
MapLibre/Android/Compose imports. Rendering and platform sources live
in map/ + ui/ + location/ + heading/. Boundary rules in
ARCHITECTURE.md; operating law in RULES.md; live state in
SESSION_HANDOFF.md.
Host gate (no device, no build), once per phase:
# from apps/atlas-android with JAVA_HOME + ANDROID_HOME set
# Prefer the atlas_gates tool: it sets both variables and reports real counts.
.\gradlew.bat :app:testPlayDebugUnitTest :app:testEnterpriseDebugUnitTest --console=plainThere is no :app:testDebugUnitTest — the two product flavors make that name
ambiguous, and Gradle fails on it. The human builds in Android Studio; device runs
are explicit-ask only. See AGENTS.md for the one-gate-per-phase rule.
blueprints/ + docs/ preserve the retired Dart/Flutter history
(engine packages, golden fixtures, slice closures, ADRs/DECs) as
read-only context. The MGRS-001 golden stays schema-only by
governance; terrain-aware LOS is reserved to a future DEM source
(RADIO-002). Phase 13 (productization/release) was never executed.