Denying nearby-device or location permissions currently blocks the entire app, including internet channels and Nostr DMs. This change permits onboarding and returning-user initialization without local transport permissions, adds a skip action to the permission and location checks, and pauses local transports instead of failing initialization after revocation.
Addresses #580 and #323 together. The explicit skip choice uses the existing BLE/Wi-Fi Aware master controls, so it survives restarts and identity resets; the explanation describes re-enabling mesh later. Notification permission remains optional. Background location is offered only after local foreground permissions are granted. Unsupported local hardware also retains a route to internet conversations.
The Bluetooth observer checks the current onboarding state instead of a stale composition capture. Enable callbacks advance only the corresponding check screen, preserving the selected internet-only route.
Validation: phone compilation and 7 focused Robolectric tests pass (5 new permission-flow cases and 2 existing notification-permission cases). The new tests keep real permission state and onboarding callbacks, stubbing only resource-dependent diagnostic logging because this repository's JVM tests do not load app resources. Wear compilation also passes. Hosted full unit-test/lint and debug APK build jobs pass; release reproducibility checks and the local combined build/lint/contract run are still running. A passing lint job does not imply an empty lint report. No physical devices, live location, production relay traffic, keys, or user data were used.
Related to #461: the Bluetooth observer now reads the current check state when Bluetooth is enabled after startup. The full radio-toggle recovery scenario still requires physical validation.
Required before marking ready: passing app/Wear builds and tests, lint/contracts, before/after UI screenshots using synthetic state, and physical Mesh Lab validation for permission revocation/re-grant, radio toggles, nearby messaging, internet-only messaging, background behavior, and identity reset. The draft does not assert these gates have passed.
Activity
6This fixes the permission-denial startup blocker in my offline Android emulator checks. Skipping local permissions and denying the system prompts both completed startup and returned to chat after force-stop/relaunch. The same denial sequence shows “Setup Not Complete” before this change. The 23 focused Robolectric cases pass too.
Codex Review Summary
This comment shows the latest Codex review activity on this pull request.
| Review | Status | Commit | Review trigger |
|---|---|---|---|
| 📝 Code Review | ✅ Completed 2026-10-14T11:25:06.315016Z | b642366 | Draft marked ready |
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review" or "@codex security review".
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.
This pull request is a draft
Merging is unavailable until it is marked ready for review.
reviewed internet-only onboarding, persisted transport disabling and restart/permission-revocation guards. the required visible-ui and physical transport validation remains a merge gate; this pass is source review only.