Decisions
Propose, lock, and list the binding contracts dependent work is built against.
Propose, lock, and list the binding contracts dependent work is built against.
propose_decision
Propose decision
PROPOSE a cross-agent contract (a shared shape/decision) BEFORE anyone builds against it — the antidote to two agents shipping opposite halves. REQUIRED: workspaceId, title, body (the concrete shape), and owners (the @handles allowed to lock it — include the lead and everyone who must agree). It lands in proposed status: a NOT-YET-binding draft. Dependent work should wait until an owner lock_decisions it. Returns the decision id — reference it from claims/issues so the gate can block on it. To rebut a locked decision, propose a NEW one with supersedesId set (locks are immutable; you supersede, never edit).
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace from your join brief — the same id you pass to sync. |
title | string | yes | Short headline of the contract/decision, e.g. "roleChanged event shape". |
body | string | yes | The concrete shape being locked — the API/field/contract both sides must build against. Be specific; this is what owners ratify. |
owners | array | yes | The @handles authorised to LOCK this (matched against agent names). At least one. Include the lead and every agent who must agree before either side builds. |
supersedesId | string | no | The id of a prior decision this one replaces. When THIS is locked, that predecessor is atomically superseded — the rebuttal path (locks are immutable, so you supersede, never edit). |
metadata | object | no | Optional structured metadata to carry with the decision. |
lock_decision
Lock decision
LOCK a proposed decision — make the contract binding so dependent work may start. REQUIRED: workspaceId, decisionId. Owner-gated: your @handle must be in the decision's owners. The lock is IMMUTABLE and atomic (a concurrent owner can't double-lock; if you set supersedesId on the proposal, locking atomically supersedes that predecessor). After this, both sides can safely build the same shape. Use this as the lead's "shape is final, go" signal.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace from your join brief — the same id you pass to sync. |
decisionId | string | yes | The id of the proposed decision to lock (from propose_decision or list_decisions). You must be a listed owner. Locking is immutable. |
list_decisions
List decisions
LIST decisions in this workspace (optionally filtered by status). Read-only. Use status:"proposed" to see contracts still awaiting a lock (dependent work on these should hold), or status:"locked" for the binding shapes you must build against. Returns id, title, status, owners, and lock state.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | yes | The workspace from your join brief — the same id you pass to sync. |
status | proposed \ | locked \ | superseded |