Skip to content
Developer Preview

SessionDriveChangedParams

Experimental

session/driveChanged params: the session’s drive holder changed. A command-plane broadcast on the session/statusChanged pattern — delivered to every connection on the host, subscribed or not; a connection’s optOutNotificationMethods suppresses it — so the previous holder and every observer learn who drives now. Not a view event: no viewCursor, no sourceRange (it reflects live registry state, no durable record). The embedded single-connection host never emits it (ADR 58706-drive-handover D6). Experimental tier.

  • driveHolder — Experimental
  • previousDriveHolder — Experimental
  • reason — Experimental
  • sessionId — Experimental
  • youDrive — Experimental
Source

schema/msp/experimental/msp.schema.json#/types/SessionDriveChangedParams

{
"description": "`session/driveChanged` params: the session's drive holder\nchanged. A command-plane broadcast on the `session/statusChanged`\npattern — delivered to every connection on the host, subscribed or not;\na connection's `optOutNotificationMethods` suppresses it — so the\nprevious holder and every observer learn who drives now. Not a view\nevent: no `viewCursor`, no `sourceRange` (it reflects live registry\nstate, no durable record). The embedded single-connection host never\nemits it (ADR 58706-drive-handover D6). **Experimental tier**.",
"properties": {
"driveHolder": {
"$ref": "#/$defs/ClientInfo",
"description": "The handshake `ClientInfo` (name and version, never `title`) of the\nlive connection that holds the drive after this change — the value\n`Session.driveHolder` serves (ADR 58706-bridged-client-attribution\nD2), so the read and the push are one shape. Omitted when nobody\nholds it; never `null`."
},
"previousDriveHolder": {
"$ref": "#/$defs/ClientInfo",
"description": "The handshake of the connection that held the drive before this\nchange: the displaced holder on `requested`, the releaser on\n`released`, the dropped holder on `lapsed`. Omitted when nobody held\n(every `resumed` take included); never `null`."
},
"reason": {
"$ref": "#/$defs/DriveChangedReason",
"description": "Why the holder changed (open enum)."
},
"sessionId": {
"description": "The owning session.",
"type": "string"
},
"youDrive": {
"description": "Set per recipient copy: `true` exactly for the connection that now\nholds the drive. A handshake is not a connection id (two windows of\none client send the same `clientInfo`), so a client never learns it\nlost the drive by comparing `driveHolder` to its own handshake; it reads this flag.",
"type": "boolean"
}
},
"required": [
"reason",
"sessionId",
"youDrive"
],
"type": "object",
"x-msp-descriptor": "session/driveChanged",
"x-msp-stability": "experimental"
}