Files
amethyst/commons
Vitor PamplonaandClaude Opus 5.5 a3ac36dab8 fix(concord): a readmission keeps what the held entry knew
A readmission built the community's List entry from scratch and carried
over only heldRoots. So it dropped the seed, channel_cuts (letting a key
cut before the ban come back), retired channel keys and old private
channel keys. It also wrote that entry with follow() from a snapshot
taken before the join's suspensions, which the List's own contract
forbids.

`ConcordDirectInviteInbox.readmittedEntry` now puts the new base (root,
epoch, control key, relays, name, join time) over the held entry. It
keeps every held root plus the one being left, the seed and entry
extras, and moves each re-delivered channel key through withChannelKey,
which keeps the replaced key in `priors`. The join writes it through the
List's read-modify-write.

Verified on the emulator: amy bans Phone Tester in a Private community,
refounds, unbans and re-invites. After Accept the channel shows both the
pre-ban message and the post-refound one, and the composer is back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 10:51:31 -04:00
..