Repository navigation
Add "Sign out and forget this phone" to Pocket - #1251
Merged
Merged
Conversation
Plain Sign out keeps the paired records, so signing in again restores access without pairing. A phone that is leaving now has a second, explicit exit: asked inline first, it runs Remove for every record (each delivery id tombstoned before its record goes, the queue drained once), clears the passkey cache and the push-endpoint digest, unsubscribes the browser's push subscription, and signs out. Offline, the tombstones stay queued as Remove already leaves them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deploying mouseterm with
|
| Latest commit: |
966c3b0
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://5e808f56.mouseterm.pages.dev |
| Branch Preview URL: | https://pocket-forget-this-phone.mouseterm.pages.dev |
dormouse-bot
approved these changes
Oct 20, 2026
nedtwigg
requested a deployment
to
hosted-preview
October 20, 2026 17:39 — with
GitHub Actions
Waiting
This branch is waiting to be deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pocket's plain Sign out keeps the paired-Burrow records, the passkey cache, and the push digest, so signing in to the same account again restores access without pairing. That stays as it is. This adds a second, explicit exit beside it for a phone that is leaving: Sign out and forget this phone.
Behavior
remote-security-model.md→ Revocation propagation), so the copy points at Disconnect.PocketClient.forgetThisPhone():#removeRecord, now shared withforgetBurrow) for everyKnownBurrowV1, across all accounts. Each delivery id is written toPendingDeliveryDeletionV1before its record is deleted.:passkey:cache and the:push-endpointdigest (newPocketStorage.clearRegisteredPushEndpoint), then signs out.unsubscribeFromPushInBrowser(), which is best-effort and never throws, and lands on the auth screen as a first visit. A Relay row that no tombstone can retire, such as another account's, now points at a dead address and is pruned on its next delivery (404/410).Tests
pocket-client.test.ts→ "forgetting this phone", run offline (no deletion route): every record is removed, every delivery id is queued under its account, the passkey cache and push digest are wiped,hasPriorUse()is false, and the session is cleared in memory and storage. Run online, every row is retired. Another account's record is tombstoned for that account. A last case checks that plainsignOut()keeps the records, passkey cache, and digest.pocket-client.test.ts→localStoragePocketStorageforgets the passkey cache and the push digest in both the tab mirror and storage.push-subscribe.test.tscovers thatunsubscribeFromPushInBrowserdrops the scope's subscription and never throws.App.scan.test.tsx→ "forgetting this phone" checks that the action asks first and that Cancel forgets nothing. It checks that confirming callsforgetThisPhone, unsubscribes push, and lands on the auth screen, and that a failure stays on the list with the error and does not unsubscribe. The existing sign-out case now also checks that plain sign-out forgets nothing.Pocket/BurrowsView→ForgetThisPhoneConfirm. Its play step opens the confirmation.Specs
pocket-app.md→ "What Pocket stores" now describes both exits. The delivery-mapping paragraph now says only forgetting this phone drops the scope'sPushSubscription. The rationale explains why the subscription is dropped. The word budget is ratcheted from 3500 to 3600.security.md→ the "Revocation has no mechanism" known gap now notes that a phone can only forget its own pairings, with this action.🤖 Generated with Claude Code