Repository navigation
Description
What problem would this solve?
The mobile shell has processors, durable sessions, effects, permissions and recovery code, but the installed App deliberately advertises native navigation as unavailable because the foreground graph is not composed. Browser planning/fallback paths and shell capability boundaries remain separate; isolated native components are not proof of usable installed navigation.
What would you like to be able to do?
Connect the existing foreground coordinator/processor graph, validated bridge command dispatch, permission controller, effect ports, driver, narration/notifications and active-session description in the production shell. Preserve one native owner for location and durable navigation. Enable each mode/capability only after its real runtime is ready. Out of scope: a new renderer, offline route engine, voice recognition, car UI or station-entrance data pipeline. Resolve exact supported first-release modes and device matrix during triage; land independently verified mode/lifecycle slices rather than one unreviewable rewrite.
Verified current state
Rechecked against main at a8e03bc3efc49207d91f7c1855402c6cf149b8fd on October 7, 2026.
- App intentionally leaves foreground composition absent.
- Bridge options/default capability reporting and installed-shell regression expectations.
- Existing effect ports and ordered execution, navigation processor and recovery controller.
Acceptance criteria
- Installed Android and iOS apps can start, pause, resume and end each advertised navigation mode through the authenticated bridge.
- Permission denial/revocation and foreground-only/background availability are explicit; unimplemented modes remain gated.
- Background/foreground, WebView reload, process death and recovery preserve coherent session ownership with no duplicate location driver.
- Narration and notifications handle interruption/mute; failed effects do not prevent essential cleanup.
- Stale/untrusted document commands are rejected, active-session handshake reflects durable state, and browser fallback remains valid.
- Real-device lifecycle evidence, automated integration tests, capability docs and screenshots are supplied before declaring modes production-ready.
Verification approach
Add production App composition tests spanning valid bridge commands, permission outcomes, driver ownership and recovery; retain channel rejection and effect-failure cases. Run pnpm mobile:verify, pnpm mobile:prebuild:check, pnpm mobile:bundle:check, appropriate pnpm mobile:smoke/QA evidence, and root lint/type/test checks. Actual-device Android/iOS interruption/background/recovery checks remain required; passing mocks or one simulator is not certification.
Dependencies and decisions
No data-provider change is required. Use the comparison/replay corpus as it becomes available; #309 is a completed web arrival handoff, not native composition. Background permission, runtime effect-port choices and supported mode matrix are blocking design decisions. Offline routing, recognition and car integration depend on this composition, not vice versa.
Alternatives or workarounds
Advertising capabilities before composing their ports would create false promises. Replacing the native architecture discards tested session/recovery groundwork; continuing browser-only behavior is the valid fallback until composition is verified.
Additional context
Area
Other / cross-cutting
Ownership and status
Maintainer-owned backlog; implementation has not started. Resolve the named decisions during triage before scheduling work.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Effort
Activity
[-]Compose native navigation in the installed mobile shell[/-][+]Connect native navigation in the installed mobile app[/+]fix(mobile): start the installed app and keep its bridge on Android (#…
feat(mobile): run native ground and transit navigation in the install…
Medformatik commentedon Nov 3, 2026
Progress update, 3 November 2026: native navigation is composed on Android and ran on a physical device.
Four merged PRs make the installed Android app start and run native navigation:
crypto) and an Android bridge that broke on the page's firstreplaceState.createForegroundNavigationintoApp.tsx. Every page command goes to theNavigationCoordinator, the background location task feeds the same coordinator, and the handshake reports real capabilities. It also fixes four failures found on the device: a crash on the first location update (RECEIVE_BOOT_COMPLETED), "database is locked", speech failing on a cold start, and native screens under the status bar.Status against the acceptance criteria:
mobile-architecture.mddescribes the composition, and the PRs include device screenshots.Remaining for this issue:
#404, #405 and #406, which depend on this issue, were rewritten today to ask for implementation.