Files
amethyst/commonsUI
Vitor PamplonaandClaude Opus 5.5 bb796b71fb feat(marmot): notice a group this device fell out of sync with, and offer a way back
A device that forked off a group's epoch chain (the own-commit echo bug fixed in
#4232 left such groups behind) never recovers: the other members hold no copy
of its epoch, it cannot apply theirs, and every message they send fails with
'decrypts on no canonical epoch'. Nothing told the user; the chat just went
quiet.

MarmotDesyncDetector flags a group when peer messages NEWER than the last event
this device decrypted there keep failing that way (3 distinct events over at
least 60s). History from before we joined or past retention fails the same way
but is older than that baseline, so it never counts; one successful decrypt
clears the flag. The baseline is seeded on join/create and from the newest
persisted message on restore.

A flagged chat shows a notice with Reset: after a confirmation it drops the
local MLS state without publishing (a SelfRemove at a dead epoch decrypts for no
one), keeps the decrypted history on disk, and republishes a KeyPackage if
needed. The composer then asks the user to have an admin remove and re-add them.
The next Welcome joins normally because the group is no longer held locally. An
external join isn't possible, since nobody publishes a GroupInfo.

The inbound error log now names its group.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 23:43:32 -04:00
..