Two smaller list-vs-stream asymmetries found while reviewing #680. Both are the same shape as #679 (the backfill carries a field the live feed does not), and neither is covered by that fix.
1. message/edit stream events omit reactors
message list --format json emits reactors (emoji → member ids) alongside reactions (emoji → count) on every message (cli/src/commands/message.rs:434). The stream's message and edit events emit only reactions (cli/src/api.rs, message_event_json). The stream's reaction event does carry reactors, so the gap is specific to the message-shaped events.
Effect: a bridge reading the live feed sees that a message has two 👍 but not from whom, until a subsequent reaction change produces a reaction event. Reading it from the backfill and then from the live feed gives two different shapes for the same message.
(Whether those ids should carry full keys is #682; this issue is only about the field being absent.)
2. reply_to.author_id has no full-key sibling
reply_to carries author_id, a real MemberId (cli/src/api.rs, reply_to_json), on both surfaces. Every other member id riverctl emits in JSON now has, or is proposed to have, a collision-proof companion; this one does not. Lower priority — a reply's quoted author is display context rather than something acted on — but it is the remaining bare id in the message payload, and #682's option 3 (a per-event member_verifying_keys map) would cover it for free.
[AI-assisted - Claude]
Two smaller list-vs-stream asymmetries found while reviewing #680. Both are the same shape as #679 (the backfill carries a field the live feed does not), and neither is covered by that fix.
1.
message/editstream events omitreactorsmessage list --format jsonemitsreactors(emoji → member ids) alongsidereactions(emoji → count) on every message (cli/src/commands/message.rs:434). The stream'smessageandeditevents emit onlyreactions(cli/src/api.rs,message_event_json). The stream'sreactionevent does carryreactors, so the gap is specific to the message-shaped events.Effect: a bridge reading the live feed sees that a message has two 👍 but not from whom, until a subsequent reaction change produces a
reactionevent. Reading it from the backfill and then from the live feed gives two different shapes for the same message.(Whether those ids should carry full keys is #682; this issue is only about the field being absent.)
2.
reply_to.author_idhas no full-key siblingreply_tocarriesauthor_id, a realMemberId(cli/src/api.rs,reply_to_json), on both surfaces. Every other member id riverctl emits in JSON now has, or is proposed to have, a collision-proof companion; this one does not. Lower priority — a reply's quoted author is display context rather than something acted on — but it is the remaining bare id in the message payload, and #682's option 3 (a per-eventmember_verifying_keysmap) would cover it for free.[AI-assisted - Claude]