Repository navigation
Retire a push tombstone only under the account that owns its row - #1239
Merged
Merged
Conversation
A tombstone now records the record's `accountId`, and `retirePendingDeletions` sends and clears only the signed-in account's tombstones. The Relay's push deletion is account-scoped and answers 204 for a row it does not hold, so clearing on another account's 204 left the first account's row in place. A tombstone queued before this change carries no account and drains as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deploying mouseterm with
|
| Latest commit: |
f115a23
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://a51d9faa.mouseterm.pages.dev |
| Branch Preview URL: | https://pocket-push-tombstone-accoun.mouseterm.pages.dev |
nedtwigg
requested a deployment
to
hosted-preview
October 20, 2026 15:22 — with
GitHub Actions
Waiting
dormouse-bot
left a comment
Collaborator
There was a problem hiding this comment.
No findings on the diff. Approval is held only because Workflow Lint is red at this head: zizmor flags the hash pin at ci.yml:403 for a mismatched version comment. This PR doesn't touch workflows, and the latest main run of the same workflow (at ed40d01) fails too, so the fix belongs on main.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dormouse-bot
approved these changes
Oct 20, 2026
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.
Hardening for Pocket's durable push-deletion queue.
When Pocket forgets a delivery id (Remove, an authenticated
pairing-required, or a re-pair that mints a new id), it queues a tombstone so the Relay row can still be deleted later. The Relay'sDELETE /api/push/subscriptions/:deliveryIdis scoped to the caller's account and answers 204 whether or not it held the row. Until now the tombstone named no account, so if the phone was signed in to another account when the queue drained, that account's 204 cleared it and the first account's row stayed.PendingDeliveryDeletionV1inlib/src/remote/client/pocket-db.tsnow carriesaccountId, taken from theKnownBurrowV1the delivery id belonged to.retirePendingDeletionsinlib/src/remote/client/pocket-client.tssends and clears only tombstones for the signed-in account. Others stay queued until that account signs in. The immediate delete after apairing-requireduses the same gate.accountIdand drains under any session, as before. No IndexedDB version bump is needed because the store keeps records as written.Tests
lib/src/remote/client/pocket-client.test.ts→ "the durable deletion queue":forgetBurrowon a record from another account queues the deletion under that record's account and sends nothing;The first two fail when the gate is removed.
Specs
docs/specs/pocket-app.md→ the delivery-mapping retirement rule: the tombstone records the record's account, and only a session of that account sends or clears it. The rationale is added, and the word budget is ratcheted to 3500.🤖 Generated with Claude Code