mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-06 03:38:23 +00:00
Sending in a cordn room left no trace in the room that sent it. Your own traffic comes back recognised by cursor and reported as Delivery.Echo, whose branch adds nothing, and no send path added anything either — so a message, a reaction, an edit, a deletion, a pin, an attachment and a voice note all appeared to do nothing at all. Deleting your own message looked like a no-op until somebody else's traffic refreshed the fold. - send/post now return CordnDeliveredMessage rather than CordnEnvelope, carrying the cursor the coordinator assigned. Guessing one would put your own message in the wrong place until the echo corrected it, since CordnGroupChatroom.ORDER sorts on it. - trySend adds the result to the room. add() is keyed on the envelope id and idempotent, so a later re-sync that does hand the message back cannot double it. - The three annotation paths that bypassed trySend — delete, pin toggle, and unpin from the ribbon — go through it now, so they report failures too. PinnedRibbon takes an onUnpin callback instead of a manager: a ribbon that posted for itself could neither report nor record. - Attachments and voice notes add their own message the same way. The list is reverseLayout with the rows reversed to match, so a room opens on its newest message and an arrival while you sit at the bottom keeps you there instead of pushing the conversation out of view. amy's `cordn send --json` gains a "cursor" field, which is where the message landed in the stream — previously discarded. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012BfD4txdnsaPRXmNXbup9n