proposal.reviewcommandsince 0.1
Accepts or rejects operations of a pending proposal, each with a rationale.
Request
umwelt call story.umw proposal.review '{
"proposalId": "01a1cbd8-63fc-7ec1-aac1-c0b733797443",
"reviews": [
{
"operationIndex": 0,
"decision": "accepted",
"rationale": "Bob confesses on the page."
},
{
"operationIndex": 1,
"decision": "accepted",
"rationale": "Her belief gives way to what he told her."
}
]
}'Request
const result = await client.proposalReview({
proposalId: '01a1cbd8-63fc-7ec1-aac1-c0b733797443',
reviews: [
{
operationIndex: 0,
decision: 'accepted',
rationale: 'Bob confesses on the page.',
},
{
operationIndex: 1,
decision: 'accepted',
rationale: 'Her belief gives way to what he told her.',
},
],
});Request
var result = engine.ProposalReview(new ReviewPayload
{
ProposalId = "01a1cbd8-63fc-7ec1-aac1-c0b733797443",
Reviews = new()
{
new ReviewInput
{
OperationIndex = 0,
Decision = ReviewDecision.Accepted,
Rationale = "Bob confesses on the page.",
},
new ReviewInput
{
OperationIndex = 1,
Decision = ReviewDecision.Accepted,
Rationale = "Her belief gives way to what he told her.",
},
},
});Response
{
"id": "01a1cbd8-63fc-7ec1-aac1-c0b733797443",
"status": "pending",
"input": {
"projectId": "ball",
"event": {
"id": "confession",
"title": "The confession",
"position": { "tick": 10 },
"evidence": [],
"participants": ["bob", "duchess"],
"provenance": { "origin": { "kind": "human" } },
"type": "scene"
},
"records": [
{
"kind": "holding",
"id": "duchess-knows",
"holder": "duchess",
"claim": {
"subject": "bob",
"predicate": "stole",
"object": { "kind": "entity", "id": "necklace" },
"polarity": true,
"qualifiers": {}
},
"attitude": "knows",
"confidence": 1.0,
"accessibility": "available",
"acquisition": {
"kind": "told-by",
"intent": "honest",
"sourceHolderId": "bob",
"sourceRecordId": "bob-did"
},
"position": { "tick": 10 },
"provenance": { "origin": { "kind": "human" } }
}
],
"transitions": [
{
"status": "superseded",
"position": { "tick": 10 },
"provenance": { "origin": { "kind": "human" } },
"supersededBy": "duchess-knows",
"targetRecordId": "duchess-told"
}
]
},
"reviews": [
{
"id": "01a1cbd8-6401-7913-bf8f-3f6dfd9c4b8b",
"createdAt": "2026-11-11T18:21:58.6570787Z",
"decision": "accepted",
"operationIndex": 0,
"rationale": "Bob confesses on the page."
},
{
"id": "01a1cbd8-6401-7913-bf8f-3f77754a1c82",
"createdAt": "2026-11-11T18:21:58.6570954Z",
"decision": "accepted",
"operationIndex": 1,
"rationale": "Her belief gives way to what he told her."
}
]
}Payload
| Field | Type | Description |
|---|---|---|
proposalIdrequired | string | The proposal, by the id propose returned. |
reviewsrequired | ReviewInput[] | One per decision: operationIndex, decision (accepted or rejected) and rationale. |
Result
| Field | Type | Description |
|---|---|---|
idalways | string | The proposal’s id. |
inputalways | ProposeInput | The commit it holds: the event, records and transitions, as proposed. |
statusalways | "pending" | "applied" | "partially-applied" | "rejected" | pending until it is applied (applied, or partially-applied when some operations were rejected) or rejected. |
reviews | ProposalReview[] | Every review so far, oldest first. The latest one for an operation decides it. |
rejectionRationale | string | Why it was rejected, when it was. |
Rules
The latest review decides. An operation can be reviewed again; the newest review for it is the one that counts.
Unreviewed means not applied. Only accepted operations are applied by proposal.apply.
Errors
VALIDATION_FAILEDAn operation index is out of range.NOT_FOUNDThe proposal does not exist.INVALID_STATEThe proposal is no longer pending.HANDSHAKE_REQUIREDOver the protocol, hello was not sent first.Every code is listed in Errors.
See also
Was this page helpful?