Skip to content

record v1

A board event a push config subscribes to as a record event. The body names the cards and nothing else: a subscriber reads them back with its own credential, so a push never carries more than that credential could read. Mirrors SuperPipeline’s RecordPushBody (apps/api/src/push/events.ts).

Every event below carries dataschema https://raw.githubusercontent.com/SuperJackfruitLabs/treaty/main/schemas/superpipeline/record.v1.json.

Body event CloudEvents type Subject
card.created com.superjackfruit.superpipeline.card.created.v1 evt.<workspace>.superpipeline.card.created
card.updated com.superjackfruit.superpipeline.card.updated.v1 evt.<workspace>.superpipeline.card.updated
card.moved com.superjackfruit.superpipeline.card.moved.v1 evt.<workspace>.superpipeline.card.moved
card.advanced com.superjackfruit.superpipeline.card.advanced.v1 evt.<workspace>.superpipeline.card.advanced
card.completed com.superjackfruit.superpipeline.card.completed.v1 evt.<workspace>.superpipeline.card.completed
card.rejected com.superjackfruit.superpipeline.card.rejected.v1 evt.<workspace>.superpipeline.card.rejected
card.failed com.superjackfruit.superpipeline.card.failed.v1 evt.<workspace>.superpipeline.card.failed
card.blocked com.superjackfruit.superpipeline.card.blocked.v1 evt.<workspace>.superpipeline.card.blocked
card.deleted com.superjackfruit.superpipeline.card.deleted.v1 evt.<workspace>.superpipeline.card.deleted
card.resumed com.superjackfruit.superpipeline.card.resumed.v1 evt.<workspace>.superpipeline.card.resumed
card.comment.added com.superjackfruit.superpipeline.card_comment.added.v1 evt.<workspace>.superpipeline.card_comment.added
card.comment.deleted com.superjackfruit.superpipeline.card_comment.deleted.v1 evt.<workspace>.superpipeline.card_comment.deleted
gate.resolved com.superjackfruit.superpipeline.gate.resolved.v1 evt.<workspace>.superpipeline.gate.resolved
link.added com.superjackfruit.superpipeline.link.added.v1 evt.<workspace>.superpipeline.link.added
link.removed com.superjackfruit.superpipeline.link.removed.v1 evt.<workspace>.superpipeline.link.removed

The subject is the NATS subject the relay files it under; <workspace> is the board’s workspace. See the envelope and subjects.

Record events are not relayed. SuperPipeline pushes them directly to each endpoint that has a push config subscribed to them, and treaty names no product that reads them.

Readers ignore properties they do not know, so a field may be added without a new version.

Field Type Required Description Constraints
event one of "card.created", "card.updated", "card.moved", "card.advanced", "card.completed", "card.rejected", "card.failed", "card.blocked", "card.deleted", "card.resumed", "card.comment.added", "card.comment.deleted", "gate.resolved", "link.added", "link.removed" yes
boardId string yes
seq integer yes at least 0
ts string yes format date-time
cardIds array of string yes The cards the event is about: one, or a link’s two ends.

From fixtures/superpipeline-events/examples.json, case “card-moved”:

{
"event": "card.moved",
"boardId": "brd_134a0ddb6d434478",
"seq": 412,
"ts": "2026-11-10T09:30:00.000Z",
"cardIds": [
"crd_0f3c9a2b7d4e4a11"
]
}

The corpus has 3 valid cases in all:

link-added
{
"event": "link.added",
"boardId": "brd_134a0ddb6d434478",
"seq": 413,
"ts": "2026-11-10T09:30:00.000Z",
"cardIds": [
"crd_0f3c9a2b7d4e4a11",
"crd_1a2b3c4d5e6f7a8b"
]
}
gate-resolved
{
"event": "gate.resolved",
"boardId": "brd_134a0ddb6d434478",
"seq": 414,
"ts": "2026-11-10T09:30:00.000Z",
"cardIds": [
"crd_0f3c9a2b7d4e4a11"
]
}

Each of these must fail. The corpus says why:

  • only record events
  • seq is an integer
  • cardIds is required