{
"mode": "macp.mode.quorum.v1",
"initiator": "agent://coordinator",
"participants": [
"agent://alice",
"agent://bob",
"agent://carol"
],
"mode_version": "1.0.0",
"configuration_version": "cfg-1",
"policy_version": "",
"ttl_ms": 60000,
"messages": [
{
"sender": "agent://alice",
"message_type": "Approve",
"payload_type": "macp.modes.quorum.v1.ApprovePayload",
"payload": {
"request_id": "r1",
"reason": "lgtm"
},
"expect": "reject",
"expected_error_code": "INVALID_ENVELOPE"
},
{
"sender": "agent://coordinator",
"message_type": "ApprovalRequest",
"payload_type": "macp.modes.quorum.v1.ApprovalRequestPayload",
"payload": {
"request_id": "r1",
"action": "deploy",
"summary": "Deploy v2",
"required_approvals": 2
},
"expect": "accept"
},
{
"sender": "agent://alice",
"message_type": "Approve",
"payload_type": "macp.modes.quorum.v1.ApprovePayload",
"payload": {
"request_id": "r1",
"reason": "lgtm"
},
"expect": "accept"
},
{
"sender": "agent://coordinator",
"message_type": "Commitment",
"payload_type": "macp.v1.CommitmentPayload",
"payload": {
"commitment_id": "c1",
"action": "quorum.approved",
"authority_scope": "test",
"reason": "done",
"mode_version": "1.0.0",
"policy_version": "policy.default",
"configuration_version": "cfg-1",
"outcome_positive": true
},
"expect": "reject",
"expected_error_code": "INVALID_ENVELOPE"
},
{
"_comment": "RFC-MACP-0011 Section 5 rule 3: a second, distinct ballot from a sender who already cast one for the same request_id MUST be rejected, even when it repeats the same ballot type; the first accepted ballot stands.",
"sender": "agent://alice",
"message_type": "Approve",
"payload_type": "macp.modes.quorum.v1.ApprovePayload",
"payload": {
"request_id": "r1",
"reason": "still lgtm, resending"
},
"expect": "reject",
"expected_error_code": "INVALID_ENVELOPE"
},
{
"sender": "agent://bob",
"message_type": "Approve",
"payload_type": "macp.modes.quorum.v1.ApprovePayload",
"payload": {
"request_id": "r1",
"reason": "agree"
},
"expect": "accept"
},
{
"_comment": "RFC-MACP-0011 Section 5 rule 3: the per-request_id cap is counted across Approve, Reject, and Abstain combined -- a cross-type second ballot (Reject after an accepted Approve) from the same sender MUST be rejected regardless of the type of either ballot.",
"sender": "agent://bob",
"message_type": "Reject",
"payload_type": "macp.modes.quorum.v1.RejectPayload",
"payload": {
"request_id": "r1",
"reason": "actually changed my mind"
},
"expect": "reject",
"expected_error_code": "INVALID_ENVELOPE"
}
],
"expected_final_state": "Open"
}