Severity: medium · relay crates/broker/src/node_control.rs:522-570 (FleetDeliveryBook, explicit comment at :531-536); engine side: ephemeral seq:0 frames from nodeDeliver.ts
Reactions, read-receipts, and action results all share seq: 0 and are deduped only by msg_id within a 512-entry FIFO window on the broker (the seq cursor can't dedup them). A redelivered seq-0 frame after 512 intervening seq-0 frames can be re-injected into the agent.
The engine-side fix is the durable one: assign real per-agent seqs to these fan-out events (folding them into the mailbox cursor), or dedup them by delivery_id (unique) instead of a bounded msg_id window. Related: the completion fan-back at-most-once issue — both stem from the ephemeral seq:0 side-channel bypassing the mailbox's guarantees.
Found during a multi-agent cross-repo architecture review of the relay tool/protocol.
Severity: medium · relay
crates/broker/src/node_control.rs:522-570(FleetDeliveryBook, explicit comment at:531-536); engine side: ephemeralseq:0frames fromnodeDeliver.tsReactions, read-receipts, and action results all share
seq: 0and are deduped only by msg_id within a 512-entry FIFO window on the broker (the seq cursor can't dedup them). A redelivered seq-0 frame after 512 intervening seq-0 frames can be re-injected into the agent.The engine-side fix is the durable one: assign real per-agent seqs to these fan-out events (folding them into the mailbox cursor), or dedup them by
delivery_id(unique) instead of a bounded msg_id window. Related: the completion fan-back at-most-once issue — both stem from the ephemeralseq:0side-channel bypassing the mailbox's guarantees.Found during a multi-agent cross-repo architecture review of the relay tool/protocol.