mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-06 03:38:23 +00:00
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>