Files
amethyst/commons
Vitor PamplonaandClaude Opus 5.5 ab5119b75b fix(marmot): send reactions and deletions inside the group, not as NIP-17 DMs
A Marmot message is an unsigned rumor, so the app's generic reaction and
deletion paths treated it as a NIP-17 private note: a reaction was gift-wrapped
to the author as a DM, and a deletion went the same way (or to nobody, for our
own message). Neither reached the MLS group. White Noise never showed an
Amethyst reaction or deletion, and group activity left the group's channel as
DMs. Only the CLI used the in-group builders, which is why the interop harness
passed.

Account.reactTo, delete and deletePrivately now check whether the target is a
Marmot message (MarmotGroupList.groupIdForNote) and send an inner kind:7 or
kind:5 through sendMarmotGroupMessage, like any other group message. Unreact
already goes through deletePrivately with the reacted-to message as its
target, so it is covered. Custom-emoji reactions carry their emoji tag, as on
the public path.

Verified on device (Amethyst tablet <-> White Noise Android, MDK 0.10.4):
react, unreact and delete from Amethyst all show in White Noise. No gift wraps
were sent for them.

The White Noise app only shows an incoming reaction after its chat is
reopened; wn's materialized timeline has it immediately, so that is
White Noise's live refresh.

Harness test 31 checks that an amy reaction appears in wn's MATERIALIZED
timeline (test 09 only checks the raw event log, which the app does not
render). Builder unit tests added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 15:38:31 -04:00
..