Design 25 §2: the eaten reply address is verified, not assumed
A claim the whole enrolment handshake rests on, now measured against a running server rather than reasoned from documentation — and held by a test so it cannot become folklore if a server version changes.
This commit is contained in:
@@ -97,7 +97,14 @@ exactly the current declaration and nothing older. That is the wire-level answer
|
|||||||
*is* the order, and a node that sees sequence n refuses n−1 by construction.
|
*is* the order, and a node that sees sequence n refuses n−1 by construction.
|
||||||
|
|
||||||
**A reply-to travelling through a JetStream stream is carried in the payload, never in the
|
**A reply-to travelling through a JetStream stream is carried in the payload, never in the
|
||||||
transport `Reply` field.** Revision, first review: core NATS request/reply sets the requester's
|
transport `Reply` field.** *Verified against a running server, 2026-09-27*: a caller published
|
||||||
|
asking for a reply to `_INBOX.LCr3M83q…`, and the consumer saw a `Reply` field of
|
||||||
|
`$JS.ACK.PROBE.probe_consumer.1.1.1…`. The address is replaced, not merely at risk — so the
|
||||||
|
payload-borne reply subject below is necessary rather than defensive, and the check is a test
|
||||||
|
rather than a note, because a future server that stopped doing this would leave enrolment
|
||||||
|
working and the reason for the field quietly becoming folklore.
|
||||||
|
|
||||||
|
Revision, first review: core NATS request/reply sets the requester's
|
||||||
ephemeral inbox as the message's `Reply` field, and a plain responder answers it directly — but a
|
ephemeral inbox as the message's `Reply` field, and a plain responder answers it directly — but a
|
||||||
message a JetStream consumer delivers has already had that field claimed for the consumer's own
|
message a JetStream consumer delivers has already had that field claimed for the consumer's own
|
||||||
ack address (`$JS.ACK.<stream>.<consumer>...`), so by the time the controller (§3's CONTROL
|
ack address (`$JS.ACK.<stream>.<consumer>...`), so by the time the controller (§3's CONTROL
|
||||||
|
|||||||
Reference in New Issue
Block a user