Skip to content

feat(network): log the network path and name cellular-denied failures - #999

Merged
bmc08gt merged 1 commit into
mainfrom
feat/network-path-diagnostics
Oct 7, 2026
Merged

bmc08gt merged 1 commit into
mainfrom
feat/network-path-diagnostics

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

A user on 5G had every request fail with Network is down (ENETDOWN) until they force-quit. Cellular Data was on and no VPN was active. Our logs record nothing about what iOS thinks of the network, so the cause is still open.

Changes

  • NetworkPathMonitor logs every NWPath change under flipcash.network-path: status, unsatisfiedReason, interfaces, expensive/constrained, and IPv4/IPv6/DNS support. The next report will show whether iOS considered the path usable while requests failed.
  • When the path is unsatisfied with .cellularDenied, connection-error dialogs say Cellular Data is off for Flipcash and offer Open Settings. Otherwise they show the existing copy.
  • Session.showConnectionFailure(_:) chooses between the two. Send, tip, conversation, deep-link and username-lookup errors use it.

The cellular-denied dialog was checked on a device with Wi-Fi off and Flipcash's Cellular Data switch off.

Not in this PR

I tried re-resolving gRPC hosts on path changes (plan in .claude/plans/2026-10-06-grpc-reresolve-on-path-change.md) and reverted it: on device, lookups on Wi-Fi and cellular returned the same addresses, including the one the user was stuck on, and it worked over cellular. If the new logging shows a satisfied path during the failures, the next candidate is rebuilding the gRPC clients after repeated ENETDOWN.

A user on 5G saw every request fail with ENETDOWN until they force-quit
the app. The log had no record of what iOS reported about the network,
so the cause couldn't be pinned down.

NetworkPathMonitor logs each NWPath change: status, unsatisfied reason,
interfaces, and IPv4/IPv6/DNS support. When iOS reports cellularDenied,
connection-error dialogs now say Cellular Data is off for Flipcash and
offer Open Settings instead of "We couldn't reach the network".
Session.showConnectionFailure(_:) picks the dialog for the send, tip,
conversation, deep-link and username-lookup error paths.
@bmc08gt bmc08gt self-assigned this Oct 6, 2026
@bmc08gt
bmc08gt merged commit 9419d87 into main Oct 7, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant