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.
How it rides
Section titled “How it rides”An m.room.message whose content carries suite_event_type: "dev.superpipeline.gate.decision.v2".
Who sends it, who reads it
Section titled “Who sends it, who reads it”- Sent by SuperMessage.
- Read by AgentPod, SuperExchange.
The carrier is whichever service carries the board’s chat: AgentPod’s hub, or SuperExchange for a board that has moved to it.
Fields
Section titled “Fields”| 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 |
Example
Section titled “Example”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" }}Refused
Section titled “Refused”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)
Source
Section titled “Source”- Schema:
schemas/matrix/dev.superpipeline.gate.decision.v2.json - In the package:
import schema from "@superjackfruitlabs/treaty-matrix-events/schemas/dev.superpipeline.gate.decision.v2.json" with { type: "json" };