Mobile Navigation Authority
Preserve one action, one owner, and one committed transition across app navigation and geographic navigation. Keep the two domains explicit.
Standalone Use And Scope
This skill does not require sibling skills. References to other skills below are optional: use them only if available and relevant. Otherwise follow the target repository's instructions, existing owners, and tests; ask when missing domain policy prevents a safe decision. Do not install a missing skill automatically.
Match the user's request: review or planning does not authorize edits. Instructions here do not grant permission for unrelated installs, credential access, destructive actions, deployment, or publication.
Establish The Authorities
- Run
git status --short --branchand preserve unrelated work. - Trace the user or system action through its state owner, navigation or route service, screen handoff, cleanup, and recovery path.
- Inspect the root navigator, route types, link configuration, affected navigator, and reset helpers for app navigation.
- Inspect affected route services, map services, route state, camera owner, persistence, and direct callers for geographic navigation.
- Write
event | owner | prior state | commit condition | next state | stale or recovery outcome.
App Navigation Domain
- Preserve the current navigation library, root container, stacks, and tabs. An isolated change does not authorize a second container or routing migration.
- Keep route params typed and link parsing centralized. Treat auth callbacks and notification links as claimed inputs, not ordinary screen props.
- Emit one navigation action from one owner. Prevent a press, notification, callback, or recovery event from also navigating through a sibling effect.
- Keep navigation chrome visibility route-scoped; mounted inactive screens must not override the active route.
- Make start or handoff parameters immutable and consume them once. Late results must not replace a newer screen intent.
- Model Android Back, iOS back gestures, modal dismissal, and programmatic resets through the same state contract.
- Use shared terminal reset helpers so completion, deletion, or sign-out cannot reveal stale navigation history.
Geographic Navigation Domain
- Represent preview, approach, active guidance, arrival, completion, and recovery as distinct states. Keep destination identity separate from route geometry and camera presentation.
- Give each route request an immutable identity tied to its destination and owner. Suppress stale results after replacement.
- Label geometry provenance. Do not promote an optimistic line, cached preview, fallback, or provider response to committed active geometry without validation.
- Reuse the existing directions, navigation, state-machine, and persistence owners. Do not create a second route engine inside a screen or hook.
- Define off-route evidence, reroute thresholds, retry limits, partial failure, and the commit that replaces prior geometry. Preserve the last safe state while replacement remains unproven.
- Request camera changes through one camera owner. User gestures, manual zoom, route handoff, resume catch-up, active route, and arrival retain explicit priorities.
- Treat external maps as a handoff. Validate the destination and report launch success separately from continued in-app navigation.
- On restart or foreground return, reconcile persisted session, destination, route, and camera evidence before resuming.
Route Adjacent Ownership
- Use
mobile-session-location-safetyfor session lifecycle, GPS truth, permission state, background location, and cleanup policy. - Use
async-effect-authorityfor request replacement and late awaited publication; keep transition and route policy here. - Use
expo-platform-engineeringfor URL schemes, associated domains or app links, Android intent filters, config plugins, and native link setup; keep parsing and transitions here. - Use
react-native-engineeringfor component, sheet, HUD, and accessible camera-control presentation; keep camera priority and route transitions here. - Use
mobile-app-qa-proofto keep static transition tests separate from simulator, provider, GPS, background, and physical-device evidence.
Verify Transitions
For late camera recovery and inactive-tab chrome, read the intent-ownership example.
- Test each event once, a rapid duplicate, A-late-after-B, back or gesture dismissal, terminal reset, and restart or background recovery at the production seam.
- For geographic routes, test missing or malformed geometry, stale response, no-route, off-route reroute, camera contention, and external-app failure.
- Inspect available scripts and run narrow navigation or route tests, the repository's type check when typed code changed, and
git diff --check. - Keep static state-machine proof separate from simulator navigation, provider, GPS, background, and physical-device proof.