Category: spec-conformance Severity: blocker
Location: crates/arcp-core/src/messages/control.rs:96-103
Spec: ARCP v1.1 §6.3
What
The SDK models only the legacy resume payload, and run_connection has no dispatch arm for MessageType::Resume or a v1.1 session.resume. There is no resume-token rotation, no last_event_seq replay, and no RESUME_WINDOW_EXPIRED response path.
Evidence
/// Payload for the SDK's legacy `resume` envelope.
///
/// The v1.1 resume contract is `session.resume` (ARCP v1.1 §6.3) carrying
/// `last_event_seq` and `resume_token`; this older shape
/// (`after_message_id` / `checkpoint_id`) is retained for backward
/// compatibility with v1.0 peers.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ResumePayload {
Proposed fix
Add the v1.1 session.resume message shape, issue and rotate resume tokens on welcome/accepted, replay buffered events by last_event_seq, and return RESUME_WINDOW_EXPIRED when coverage is gone.
Acceptance criteria
Category: spec-conformance Severity: blocker
Location:
crates/arcp-core/src/messages/control.rs:96-103Spec: ARCP v1.1 §6.3
What
The SDK models only the legacy
resumepayload, andrun_connectionhas no dispatch arm forMessageType::Resumeor a v1.1session.resume. There is no resume-token rotation, nolast_event_seqreplay, and noRESUME_WINDOW_EXPIREDresponse path.Evidence
Proposed fix
Add the v1.1
session.resumemessage shape, issue and rotate resume tokens on welcome/accepted, replay buffered events bylast_event_seq, and returnRESUME_WINDOW_EXPIREDwhen coverage is gone.Acceptance criteria
(resume_token, last_event_seq)and receive only later buffered events; stale or uncovered sequence requests returnRESUME_WINDOW_EXPIRED.