decision.released v1
A held approval reached its release time and acted, or was blocked (charter 2026-11-09, an approval may wait for its release time §5-7). Mirrors SuperPipeline’s DecisionReleasedBody (apps/api/src/board/views.ts). Readers ignore properties they do not know.
CloudEvents
Section titled “CloudEvents”Every event below carries dataschema https://raw.githubusercontent.com/SuperJackfruitLabs/treaty/main/schemas/superpipeline/decision.released.v1.json.
Body event |
CloudEvents type |
Subject |
|---|---|---|
decision.released |
com.superjackfruit.superpipeline.decision.released.v1 |
evt.<workspace>.superpipeline.decision.released |
The subject is the NATS subject the relay files it under; <workspace> is the board’s workspace. See the envelope and subjects.
Who sends it, who reads it
Section titled “Who sends it, who reads it”- Produced by SuperPipeline, through the relay.
- Consumed by:
- SuperExchange: Posts it to the board’s room, for the boards it carries. Receives it through the relay.
- AgentPod: The hub’s board chat posts it, for the boards it still carries.
- SuperDispatch: Takes it as a nudge to look at the board soon, on a board opted into scheduling. Reads nothing from its data.
Fields
Section titled “Fields”Readers ignore properties they do not know, so a field may be added without a new version.
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
event |
"decision.released" |
yes | ||
boardId |
string or null | yes | Null only on a board not yet initialised; a carrier needs it to route the event. | |
cardId |
string | yes | ||
gateId |
string | yes | ||
decision |
string | yes | The gate’s decision that was held, such as approve_automatic. | |
releaseAt |
string | yes | format date-time |
|
releasedAt |
string | yes | format date-time |
|
outcome |
one of "released", "blocked" |
yes | ||
reason |
string | no | Why a release was blocked; only on outcome blocked. |
Example
Section titled “Example”From fixtures/superpipeline-events/examples.json, case “released”:
{ "event": "decision.released", "boardId": "brd_134a0ddb6d434478", "cardId": "crd_0f3c9a2b7d4e4a11", "gateId": "gat_5d1e2f3a4b5c6d7e", "decision": "approve_automatic", "releaseAt": "2026-11-10T10:00:00.000Z", "releasedAt": "2026-11-10T10:00:05.000Z", "outcome": "released"}The corpus has 2 valid cases in all:
blocked
{ "event": "decision.released", "boardId": "brd_134a0ddb6d434478", "cardId": "crd_0f3c9a2b7d4e4a11", "gateId": "gat_5d1e2f3a4b5c6d7e", "decision": "approve_automatic", "releaseAt": "2026-11-10T10:00:00.000Z", "releasedAt": "2026-11-10T10:00:05.000Z", "outcome": "blocked", "reason": "the approved subject changed before the release time"}Refused
Section titled “Refused”Each of these must fail. The corpus says why:
- the outcome is released or blocked
- releasedAt is a date-time
- decision is required
Source
Section titled “Source”- Schema:
schemas/superpipeline/decision.released.v1.json - In the package:
import schema from "@superjackfruitlabs/treaty-event-schemas/superpipeline/decision.released.v1.json" with { type: "json" };