Skip to content

fix(file-transfer): survive file-picker backgrounding (mobile reconnect) - #68

Merged
slaveofcode merged 1 commit into
developfrom
fix/file-transfer-mobile-reconnect
Aug 1, 2026
Merged

fix(file-transfer): survive file-picker backgrounding (mobile reconnect)#68
slaveofcode merged 1 commit into
developfrom
fix/file-transfer-mobile-reconnect

Conversation

@slaveofcode

Copy link
Copy Markdown
Owner

Reported: on mobile, opening the file dialog to select a file disconnects the peer and it can't reconnect.

Cause: the native file picker backgrounds the browser tab → WebRTC goes disconnected → the hook treated that as a terminal error with no recovery.

Fixes:

  • disconnected is now transient: 5s grace to self-heal, then re-establish via signaling (reconnect + renegotiate). failed re-establishes immediately. Manual mode still errors (no server).
  • Re-establishment reconnects signaling on demand and renegotiates a fresh peer; robust to either side reconnecting first.
  • Retry cap (4) → a clear 'add a TURN server' error instead of an infinite loop on unconnectable networks.
  • Sender can pick the file while waiting (queueFile) — it auto-sends when the channel opens, sidestepping the picker-backgrounding race for the common flow.

DO relay re-verified via local wrangler dev. 539 tests · lint clean · build green.

🤖 Generated with Claude Code

…e tab

Reported: opening the native file dialog on mobile disconnects the peer and it
can't reconnect. On a phone the file picker backgrounds the browser tab, which
drops the WebRTC connection to 'disconnected' — and the hook treated that as a
terminal error with no recovery.

Fixes:
- Treat ICE 'disconnected' as transient: a 5s grace period to self-heal, then
  re-establish through signaling (reconnect + renegotiate) instead of erroring.
  'failed' re-establishes immediately. Manual mode (no server) still errors.
- Re-establishment reconnects signaling on demand (signaling is closed once P2P
  is up to avoid churn) and re-negotiates a fresh peer; robust to either side
  reconnecting first.
- Cap consecutive re-establish attempts (4) → clear 'add a TURN server' error
  instead of an infinite reconnect loop on unconnectable networks.
- Let the sender pick the file WHILE waiting for the peer (queueFile); it
  auto-sends the moment the channel opens — sidesteps the picker-backgrounding
  race entirely for the common flow.

DO relay re-verified via local wrangler dev. 539 tests · lint clean · build green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@slaveofcode
slaveofcode merged commit 2ca58e1 into develop Aug 1, 2026
1 of 2 checks passed
@slaveofcode
slaveofcode deleted the fix/file-transfer-mobile-reconnect branch August 1, 2026 05:12
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