Skip to content
Developer Preview

ApprovalResolvedParams

approval/resolved params: the first durable terminal decision.

  • abortReason
  • amendment
  • approvalId
  • byClient — Experimental
  • decidedAt
  • decidedByCommandId
  • decision
  • itemId
  • policyResult
  • resolvedBy
  • sessionId
  • sourceRange
  • stageEvidence
  • subagentOrigin
  • turnId
  • viewCursor
Source

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

{
"description": "`approval/resolved` params: the first durable terminal decision.",
"properties": {
"abortReason": {
"description": "Why an `abort` was not a cancel, when the host knows: `lockEpochEnded |\nbrokerUnavailable`, an open vocabulary. Clients render an\nunknown value like an absent one.",
"type": "string"
},
"amendment": {
"$ref": "#/$defs/ApprovalAmendment",
"description": "The policy rule the decision created. Present only when the decision\ncreated one."
},
"approvalId": {
"description": "The approval that was decided.",
"type": "string"
},
"byClient": {
"$ref": "#/$defs/ClientInfo",
"description": "The client whose `approval/decide` won (ADR 73001 D4): absent\non policy, judge and interrupt terminals, for a connection with no\nrecorded handshake, and on older logs.",
"x-msp-descriptor": "approval/resolved.byClient",
"x-msp-stability": "experimental"
},
"decidedAt": {
"description": "The decision time as RFC3339, projected from the durable\n`DecisionApplied` record's own stamp (ADR 45450 D3): optional on the\nwire so decoders tolerate its absence, always populated by current\nhosts.",
"type": "string"
},
"decidedByCommandId": {
"description": "The `commandId` of the `approval/decide` command that won. Absent when\nno such command made the decision, for example a policy or LLM judge\ndecision.",
"type": "string"
},
"decision": {
"$ref": "#/$defs/ApprovalDecision",
"description": "The final decision."
},
"itemId": {
"description": "The `toolCall` view item this approval was holding.",
"type": "string"
},
"policyResult": {
"$ref": "#/$defs/ApprovalPolicyResult",
"description": "Whether the final decision lets the action run (`allow`) or blocks it\n(`deny`)."
},
"resolvedBy": {
"$ref": "#/$defs/ApprovalResolvedBy",
"description": "Who or what made the decision: `user`, `policy` or `llmJudge`."
},
"sessionId": {
"description": "The owning session.",
"type": "string"
},
"sourceRange": {
"$ref": "#/$defs/SourceRange",
"description": "The stored records this event was folded from: an opaque token clients\nmust not interpret."
},
"stageEvidence": {
"description": "For a `shell` approval, how each stage was resolved when the decision\nbecame final. Empty for other subject kinds, and it can be empty for\n`shell` too.",
"items": {
"$ref": "#/$defs/ApprovalStageEvidence"
},
"type": "array"
},
"subagentOrigin": {
"$ref": "#/$defs/ApprovalSubagentOrigin",
"description": "Present only for a child (native subagent) approval projected onto\nthe parent session's plane (ADR 36182); parent-own approvals omit it."
},
"turnId": {
"description": "The turn whose tool call this approval was holding.",
"type": "string"
},
"viewCursor": {
"description": "This event's view cursor: opaque, and strictly increasing within the\nsession.",
"type": "string"
}
},
"required": [
"approvalId",
"decision",
"itemId",
"policyResult",
"resolvedBy",
"sessionId",
"sourceRange",
"stageEvidence",
"turnId",
"viewCursor"
],
"type": "object"
}