dev.superpipeline.gate (embedded card)
A superpipeline approval gate as it rides inside the prose message under the dev.superpipeline.gate content key: the body of the legacy dev.superpipeline.gate.v1 event without its body. schema_version is a floor. Answered by dev.superpipeline.gate.decision.v1 referencing the carrying message. Readers ignore properties they do not know. x-uniqueBy lists paths whose values must not repeat (JSON Schema cannot say so): a[].b is field b of each item of list a.
How it rides
Section titled “How it rides”A card inside the prose message’s content, under the content key dev.superpipeline.gate.
Who sends it, who reads it
Section titled “Who sends it, who reads it”- Sent by AgentPod, SuperExchange.
- Read by SuperMessage.
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 |
|---|---|---|---|---|
schema_version |
integer | yes | at least 1 | |
board_id |
string | yes | ||
card_id |
string | yes | ||
gate_id |
string | yes | at least 1 character | |
stage_key |
string | yes | ||
return_stage_key |
string | yes | ||
card_title |
string | yes | ||
produced_by |
string | yes | ||
prompt |
string | yes | ||
handoff_summary |
string | no | ||
options |
array of object | yes | at least 1 item; at most 3 items | |
options[].id |
one of "approve", "request_changes", "reject" |
yes | ||
options[].label |
string | yes | ||
deep_link |
string | no |
The schema also states these rules across fields, as written:
{ "allOf": [ { "description": "Fields dropped deliberately (tenant_id, run_id, task_id, expires_at): a sender that has them was built against a superseded sketch.", "not": { "anyOf": [ { "required": [ "tenant_id" ] }, { "required": [ "run_id" ] }, { "required": [ "task_id" ] }, { "required": [ "expires_at" ] } ] } } ]}x-uniqueBy: the values at these paths must not repeat, the one rule JSON Schema cannot state. a[].b is field b of each item of list a.
options[].id
Example
Section titled “Example”From fixtures/matrix-events/examples.json, case “built: the same gate as the embedded card”:
{ "schema_version": 2, "board_id": "brd_7c1f", "card_id": "crd_6b40", "gate_id": "gate_8f3a", "stage_key": "review", "return_stage_key": "draft", "card_title": "Ship the release notes", "produced_by": "agt_31d0", "prompt": "Approve \"Ship the release notes\"?", "handoff_summary": "Release notes for 0.4, three sections.", "options": [ { "id": "approve", "label": "Approve" }, { "id": "request_changes", "label": "Request changes" }, { "id": "reject", "label": "Reject" } ], "deep_link": "https://superpipeline.dev/b/brd_7c1f/c/crd_6b40"}Refused
Section titled “Refused”Each of these must fail. The corpus says why:
- an option id outside GateDecision (refused by
schema) - no options: nothing to answer with (refused by
schema) - an empty gate_id: nothing to address an answer to (refused by
schema) - two approve options (refused by
unique)
Source
Section titled “Source”- Schema:
schemas/matrix/dev.superpipeline.gate.json - In the package:
import schema from "@superjackfruitlabs/treaty-matrix-events/schemas/dev.superpipeline.gate.json" with { type: "json" };