Spelunk sign-in: end it with a refused DodoSSH resume, keep the token the check rotated, and send the token by the sign-in's own address

A DodoSSH resume the provider refuses now signs the device out of every Spelunk as well, as the check
before a Spelunk connection already did, so the README's "an account the provider no longer signs in is
signed out of DodoSSH and of every Spelunk" holds whichever finds it first. The forced refresh that check
makes is written down at once rather than at the next sync pass, so a crash in between cannot cost a
browser sign-in on the next launch. The tunnel is opened at the sign-in's own address rather than the
route's: the same string, but the token going where it came from is now said where it is sent.

Relaunches in the shell tests use the scripted Spelunk sign-in too, so none can open a browser or send a
sign-out anywhere real. Fixes a doc comment the account-refused handler had split, a README line still
pointing at the key picker, and the Android composition's comment on which redirect Spelunk allows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
laurensandClaude Opus 5.5 committed 2026-10-20 16:41:11 +02:00
1 parent 57d3d3c801
commit abd7e56bb5
7 files changed
+84 -15

No files matched your search

@@ -9666,7 +9666,11 @@ public sealed partial class ShellFlowTests : IAsyncLifetime
TimeProvider.System,
ssh,
CheapProfile,
resume);
resume,
// The same stand-in as the first launch's, so a relaunch neither opens a browser at Spelunk nor
// sends a sign-out anywhere real.
spelunkAccounts: spelunkAccounts);
private async Task SignedInAsync()
{