Repository navigation
Apply revocations at once, retry their saves, and bound refusals in the access log - #1538
Merged
Merged
Conversation
…n decrypted traffic A refusal now evicts only an older refusal, by event rather than device id. A pending connection or pairing that ends with no Client transport message decrypted on it logs nothing, so it cannot move Last seen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BurrowRuntime.revoke is synchronous, on neither queue; an approval running behind it re-applies it at publish. The service holds every revocation from that moment until a saved ACL carries it, and retries on a timer, on any revoke attempt, and at dispose and shutdown. An id whose revocation is unsaved can be revoked again, which saves again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o adds a push row Narrows the revocation guarantee to what holds while a save fails, and states what remains as a known gap. Says display text where the ACL record does keep other phone-supplied fields, and notes that a revoked phone's session can also hold off new connections. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A revoke answers once its save failed or has run past the retry interval, which is also what puts it in Settings. Folds the save helpers into one, narrows the held-device helper, shares the row head in the paired-phone lists, and uses messageOf. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iring's log entry Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deploying mouseterm with
|
| Latest commit: |
32e6138
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://7e4b46e7.mouseterm.pages.dev |
| Branch Preview URL: | https://revocation-and-access-log-ha.mouseterm.pages.dev |
dormouse-bot
reviewed
Nov 3, 2026
dormouse-bot
left a comment
Collaborator
There was a problem hiding this comment.
This PR overlaps #1530 and #1528. All three edit service.ts #revokeDevice/revoke, acl.ts, access-log.ts, PairedDevices.tsx, and the revocation rows in security-remote.md. #1530 removes dor remote and the by requester. This PR still names dor remote revoke <id> as the way to save an unsaved revocation again, both in its body and in the guarantee row it rewrites. Whichever PR lands second will need that wording reconciled, along with the revocationRequester(params?.by) call in #revokeDevice.
One inline finding below.
…ne's save An id naming no phone or two, and a target naming nothing, still try the held saves again, but behind the answer: they neither wait on that write nor report its failure as theirs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dormouse-bot
approved these changes
Nov 3, 2026
Resolves against the removal of the dor remote command: Settings is now the one path that saves an unsaved revocation again, and a Relay-named revocation is held the same way, its id listed there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dormouse-bot
approved these changes
Nov 3, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dormouse-bot
approved these changes
Nov 3, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dormouse-bot
approved these changes
Nov 3, 2026
This was referenced Nov 3, 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.
Hardens how a revocation takes effect and is saved, and what the access log keeps.
Revocation
BurrowRuntime.revokeis synchronous and on neither queue, so a stuck ACL write delays only the save. An approval that overtook a revocation re-applies it at publish. If the revocation names the phone being paired, the pairing is refuseduser-deniedand opens no window.BurrowServiceholds a revocation from the moment it applies until a saved ACL carries it. A write whose snapshot predates the revocation ends no hold.REVOCATION_SAVE_RETRY_MS, on any revoke attempt, and at dispose and host shutdown. A stopped Burrow's revocation is now held and retried too; before, a failed save revoked nothing.revokeDevicewith that phone's id. A revocation the Relay named is held and listed the same way.docs/specs/security.md-> "Known gaps", and the guarantee row indocs/specs/security-remote.mdis narrowed to match.Access log
ACCESS_LOG_MAX_REFUSALSofACCESS_LOG_MAX_ENTRIES), so a refusal evicts only an older refusal. Every other event now shares the remaining 400.Wording
docs/specs/remote-security-model.mdnow says "display text" where the ACL record does hold other phone-supplied fields.docs/specs/security.mdsays a revoked phone's session can also hold off new connections.Compatibility
No wire or on-disk format changes.
pairedDevicesgains an optionalunsavedRevocations, absent when empty and read as none from an older broker. A stored log longer than the new shares is trimmed when read.Not changed
A store write still has no deadline. A stuck write is waited out and never overlapped, so no retry runs until it ends. A deadline would need a guard against a late write overwriting a newer ACL.
Testing
pnpm test,tsc -binlib, andtsc --noEmitinstandalone/andvscode-ext/pass on the merge withmain.UnsavedRevocationstory adds one snapshot in each Argos browser, awaiting approval.🤖 Generated with Claude Code