Skip to content

dev.superpipeline.gate.decision.v2

A person’s answer to a gate.v2: any option id the gate offered (the carrier checks it against what it recorded), an m.reference to the gate’s message, and on a subject-bound gate the subject binding {id, digest} copied from what the person saw. Readers ignore properties they do not know.

An m.room.message whose content carries suite_event_type: "dev.superpipeline.gate.decision.v2".

The carrier is whichever service carries the board’s chat: AgentPod’s hub, or SuperExchange for a board that has moved to it.

Field Type Required Description Constraints
msgtype "m.text" yes
body string yes
schema_version integer yes at least 1
gate_id string yes at least 1 character
comment string or null no
m.relates_to object yes
m.relates_to.rel_type "m.reference" yes
m.relates_to.event_id string yes at least 1 character
suite_event_type "dev.superpipeline.gate.decision.v2" yes
option_id string yes at least 1 character; at most 200 characters
subject object no
subject.id string yes at least 1 character; at most 512 characters
subject.digest string yes at least 1 character; at most 512 characters

From fixtures/matrix-events/examples.json, case “an automatic approval of the publishing gate, bound to the subject the person saw”:

{
"msgtype": "m.text",
"schema_version": 1,
"suite_event_type": "dev.superpipeline.gate.decision.v2",
"gate_id": "gate_8f3a",
"body": "Approved — post automatically",
"option_id": "approve_automatic",
"comment": null,
"subject": {
"id": "aps_2c9e71",
"digest": "sha256:9b2f4e0c1a7d"
},
"m.relates_to": {
"rel_type": "m.reference",
"event_id": "$gateEventId"
}
}

The corpus has 6 valid cases in all:

request changes, with the comment that option needs
{
"msgtype": "m.text",
"schema_version": 1,
"suite_event_type": "dev.superpipeline.gate.decision.v2",
"gate_id": "gate_8f3a",
"body": "Requested changes",
"option_id": "request_changes",
"comment": "Say which release.",
"subject": {
"id": "aps_2c9e71",
"digest": "sha256:9b2f4e0c1a7d"
},
"m.relates_to": {
"rel_type": "m.reference",
"event_id": "$gateEventId"
}
}
choice: an automatic approval choosing the second variant
{
"msgtype": "m.text",
"schema_version": 1,
"suite_event_type": "dev.superpipeline.gate.decision.v2",
"gate_id": "gate_5d72",
"body": "Approved — post automatically",
"option_id": "approve_automatic",
"subject": {
"id": "aps_v2",
"digest": "sha256:v2d1"
},
"m.relates_to": {
"rel_type": "m.reference",
"event_id": "$gateEventId"
}
}
choice: a rejection of the whole set, with no binding
{
"msgtype": "m.text",
"schema_version": 1,
"suite_event_type": "dev.superpipeline.gate.decision.v2",
"gate_id": "gate_5d72",
"body": "Rejected",
"option_id": "reject",
"m.relates_to": {
"rel_type": "m.reference",
"event_id": "$gateEventId"
}
}
quorum: a second admin approving
{
"msgtype": "m.text",
"body": "Approved",
"schema_version": 1,
"suite_event_type": "dev.superpipeline.gate.decision.v2",
"gate_id": "gate_6e19",
"option_id": "approve",
"m.relates_to": {
"rel_type": "m.reference",
"event_id": "$gateEventId"
}
}
release: an approval of a held gate
{
"msgtype": "m.text",
"body": "Approved",
"schema_version": 1,
"suite_event_type": "dev.superpipeline.gate.decision.v2",
"gate_id": "gate_6e19",
"option_id": "approve",
"m.relates_to": {
"rel_type": "m.reference",
"event_id": "$gateEventId"
}
}

Each of these must fail. The corpus says why:

  • an answer to a subject-bound gate with no subject binding (refused by recorded)
  • an option that needs a comment, without one (refused by recorded)
  • an option the gate did not offer (refused by recorded)
  • no m.relates_to, exactly as for v1 (refused by schema)
  • choice: an approval with no binding: it chooses nothing (refused by recorded)
  • choice: a binding that names no variant of the gate (refused by recorded)
  • choice: choosing the variant whose preview was incomplete. It can be chosen on the board. (refused by recorded)