Skip to content

SessionPermissionProfileChangedParams

Experimental

session/permissionProfileChanged params: the fold of the durable profile-commit audit fact — fired on every accepted POST-EPOCH-ONE profile commit, never for a mode-only change (that writes no such fact and keeps folding session/approvalModeChanged from its own reconfigure fact) and never for a reviewer-attachment change. It folds on EVERY PermissionProfileCommittedV1 EXCEPT the epoch-one initialization fact and fork/child derivation facts — their causes (newSessionDefault, launchCli at start, fork, childSpawn, legacyInitialization, launchOverrides) are unreachable on the wire until a later commit carries them — so an omitted-profile start and an empty-cut fork fold nothing and their ""-cursor rules hold byte-for-byte. A held id recommitting under a changed definition or an managed refresh folds too (the profileId may equal the prior), exactly as the approvalMode precedent folds per accepted change. The session/approvalModeChanged member pattern with profileId in place of mode; additive-optional under (clients predating it skip the unknown method); subscription-gated as view events are.

  • clientName — Experimental
  • commandId — Experimental
  • profileId — Experimental
  • sessionId — Experimental
  • source — Experimental
  • sourceRange — Experimental
  • viewCursor — Experimental
Source

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

{
"description": "`session/permissionProfileChanged` params:\nthe fold of the durable profile-commit audit fact — fired on every accepted\nPOST-EPOCH-ONE profile commit, never for a mode-only change (that writes no\nsuch fact and keeps folding `session/approvalModeChanged` from its own\nreconfigure fact) and never for a reviewer-attachment change. It folds on EVERY\n`PermissionProfileCommittedV1` EXCEPT the epoch-one initialization fact and\nfork/child derivation facts — their causes (`newSessionDefault`, `launchCli`\nat start, `fork`, `childSpawn`, `legacyInitialization`, `launchOverrides`)\nare unreachable on the wire until a later commit carries them — so an\nomitted-profile start and an empty-cut fork fold nothing and their\n`\"\"`-cursor rules hold byte-for-byte. A held id recommitting\nunder a changed definition or an managed refresh folds too (the\n`profileId` may equal the prior), exactly as the approvalMode precedent folds\nper accepted change. The `session/approvalModeChanged` member pattern with\n`profileId` in place of `mode`; additive-optional under (clients\npredating it skip the unknown method); subscription-gated as view events\nare.",
"properties": {
"clientName": {
"description": "The requesting client's `clientInfo.name`, read from the\ncommitted fact's durable `PermissionCommandLinkV1.client_name` seat.\n`null` when no client recorded the change: the Initialization/\nManagedRefresh causes, native picker commits, and facts written before\nthe seat existed.",
"type": [
"string",
"null"
]
},
"commandId": {
"description": "The command that changed it; `null` on an Initialization- or\nManagedRefresh-kind fold that no accepted command produced (only the\n`livePicker`/`resumeCli` causes carry it — the `lastCommandId: null`\nprecedent).",
"type": [
"string",
"null"
]
},
"profileId": {
"description": "The profile now in effect; `null` when the committed source is a launch\noverride (`LaunchOverrides` pins `id: None`) — 's served-site rule.",
"type": [
"string",
"null"
]
},
"sessionId": {
"description": "The owning session.",
"type": "string"
},
"source": {
"$ref": "#/$defs/PermissionProfileSource",
"description": "How the profile took effect."
},
"sourceRange": {
"$ref": "#/$defs/SourceRange",
"description": "The durable records this event folded from."
},
"viewCursor": {
"description": "Opaque, strictly monotonic view cursor.",
"type": "string"
}
},
"required": [
"clientName",
"commandId",
"profileId",
"sessionId",
"source",
"sourceRange",
"viewCursor"
],
"type": "object",
"x-msp-descriptor": "session/permissionProfileChanged",
"x-msp-stability": "experimental"
}