mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-05 19:28:25 +00:00
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>