@@ -539,11 +539,15 @@ def __post_init__(self) -> None:
539539 "A cancellation notification for an in-flight request stops the server-side handler, and the "
540540 "receiver does not send a response for the cancelled request - no result and no error."
541541 ),
542- note = (
543- "The 2025-era streamable HTTP wire has no way to end a request but a response, so that "
544- "one transport terminates the settled request with REQUEST_CANCELLED (-32800) instead of "
545- "staying silent; see transport:streamable-http:cancelled-request-terminated. The 2026-07-28 "
546- "MUST NOT applies to stdio and the 2026 wire, where nothing is sent."
542+ divergence = Divergence (
543+ note = (
544+ "The 2025-era streamable HTTP transport still answers a cancelled request, with a "
545+ "REQUEST_CANCELLED (-32800) error - deliberate and era-scoped: that wire ends a request's "
546+ "stream only with a response for its id, so silence would leave the POST (and any "
547+ "resuming client's replay) open. Every other transport sends nothing, and the "
548+ "2026-07-28 MUST NOT applies only there. Retires with the legacy transport; see "
549+ "transport:streamable-http:cancelled-request-terminated."
550+ ),
547551 ),
548552 arm_exclusions = (
549553 ArmExclusion (reason = "requires-session" , transport = "streamable-http-stateless" ),
@@ -2558,19 +2562,19 @@ def __post_init__(self) -> None:
25582562 note = "Only observable over streamable HTTP: JSON-response mode is an HTTP framing option." ,
25592563 ),
25602564 "transport:streamable-http:cancelled-request-terminated" : Requirement (
2561- source = f" { SPEC_BASE_URL } /basic/utilities/cancellation#behavior-requirements " ,
2565+ source = "sdk " ,
25622566 behavior = (
25632567 "A request cancelled through notifications/cancelled is terminated with a REQUEST_CANCELLED "
25642568 "(-32800) error response, completing its POST - the JSON body in JSON-response mode, the "
25652569 "final event of its stream in SSE mode."
25662570 ),
25672571 transports = ("streamable-http" ,),
25682572 note = (
2569- "Deliberate SHOULD-level divergence, era-scoped: the 2025-era wire ends a request's stream "
2570- "only with a response for its id (and stores it so a resuming client's replay terminates "
2571- "too), so this transport answers where the dispatcher writes nothing. Written through the "
2572- "same ordered channel as the request's other messages, so it cannot overtake anything "
2573- "already queued for the request."
2573+ "An SDK choice, not spec-mandated ( the spec-side gap is the Divergence on "
2574+ "protocol:cancel:in-flight): this era's wire ends a request's stream only with a response "
2575+ "for its id, and stores it so a resuming client's replay terminates too. The terminator is "
2576+ "written through the same ordered channel as the request's other messages, so it cannot "
2577+ "overtake anything already queued for the request."
25742578 ),
25752579 ),
25762580 "transport:streamable-http:stateless" : Requirement (
@@ -3384,17 +3388,12 @@ def __post_init__(self) -> None:
33843388 source = f"{ SPEC_BASE_URL } /basic/utilities/cancellation#cancellation-flow" ,
33853389 behavior = (
33863390 "At 2025-era revisions, abandoning an in-flight request POSTs exactly one "
3387- "notifications/cancelled naming its request id, and releases the abandoned request's own "
3388- "response stream so it neither stays parked nor resumes."
3391+ "notifications/cancelled naming its request id."
33893392 ),
33903393 transports = ("streamable-http" ,),
33913394 removed_in = "2026-07-28" ,
33923395 superseded_by = "client-transport:http:cancel-closes-stream" ,
3393- note = (
3394- "HTTP-only by nature: pins that the frame travels as its own POST on the legacy HTTP wire. "
3395- "The frame, not the released stream, is the signal - a 2025 server treats the disconnect "
3396- "as nothing."
3397- ),
3396+ note = "HTTP-only by nature: pins that the frame travels as its own POST on the legacy HTTP wire." ,
33983397 ),
33993398 "client-transport:http:concurrent-streams" : Requirement (
34003399 source = "sdk" ,
0 commit comments