Coelevate Documentation
API ReferenceContext Repository

Decide several staged ops

Approves or rejects the named ops together, as one decision.

POST /context/v1/changeset/decisions

Approves or rejects the named ops together, as one decision. Name every op of each review item you include: naming only part of an item is a 409, and nothing is widened for you. Use it to settle exactly the ops you reviewed; use POST changeset/decide-outstanding only when you mean to decide everything undecided, including ops other people staged. Same rules and responses as deciding one op.

Requires the context:review scope.

Request body

FieldTypeRequiredDescription
decisionstring, one of approved, rejected, undecidedyesapproved or rejected; undecided returns one op to review (it is refused when deciding every undecided op).
expected_revisioninteger or nullnoThe changeset revision you were looking at. When it has moved the call is a 409, so a decision never lands on something you did not see.
op_idsarray of stringyesThe ops to decide together, as GET changeset lists them. Name every op of a review item or none of it.
provenanceobject or nullnoWho decided and why, for the revision journal. Omit to have it filled in from the key.
reasonstring or nullnoWhy, kept with the decision. Worth giving for a rejection.

Responses

StatusMeaning
200The request succeeded.
401The token is missing, expired or invalid.
403The token does not carry the scope this operation requires.
404No such project, or the token belongs to a different project.

The 200 response body:

FieldTypeRequiredDescription
cascaded_op_idsarray of stringyesOps rejected because they depend on an op this call rejected.
changesetChangesetRecordyesThe open changeset as it stands after the decision.
decided_op_idsarray of stringyesThe ops whose decision this call changed.

Shapes

The named shapes used above.

ChangesetRecord

The open changeset: the proposed change and where review stands.

FieldTypeRequiredDescription
base_releaseintegeryesThe release the changeset was opened against. Send it back when staging.
base_repository_revisionstringyesA fingerprint of the repository state the changeset was opened against.
changeset_idstringyesThe changeset's id.
decision_summaryDecisionSummaryyesHow many ops have been decided.
invalidated_by_releaseinteger or nullnoThe release that made this changeset impossible to merge, if one did.
merge_claimed_atstring or nullnoWhen a publication claimed the changeset, while one is in progress.
next_seqintegeryesThe position the next staged op will take.
opened_atstringyesWhen the changeset was opened.
opened_byobjectyesWho opened it and why.
opsarray of ChangesetOpyesEvery op staged so far, in order.
project_idstringyesThe project the changeset belongs to.
published_releaseinteger or nullnoThe release it produced, once published.
revisionintegeryesThe changeset's revision. It changes every time the changeset does; send it back when staging.
settled_atstring or nullnoWhen it was published or abandoned.
settled_byobject or nullnoWho settled it.
statusstringyesWhether the changeset is open or how it was settled.
superseded_op_idsarray of stringyesOps that a later op overwrote.

DecisionSummary

How many ops review has decided.

FieldTypeRequiredDescription
approvedintegeryesOps approved.
rejectedintegeryesOps rejected.
undecidedintegeryesOps still waiting for a decision.

ChangesetOp

One staged op and what has been decided about it.

FieldTypeRequiredDescription
carried_fromstring or nullnoThe changeset the op was carried over from, if it was.
carried_tostring or nullnoThe changeset the op was carried over to, if it was.
cascaded_fromstring or nullnoThe op whose rejection caused this one to be rejected, if any.
conflictstring or nullnoWhy the op cannot merge as it stands, when something it depends on has moved; null otherwise.
decided_atstring or nullnoWhen it was decided.
decided_byobject or nullnoWho decided and why, once someone has; null while the op is undecided.
decisionstringyesWhere review stands: undecided, approved or rejected.
decision_historyarray of objectyesEvery decision made about the op, oldest first.
opobjectyesThe op as it was sent; its op field names the kind. GET changeset leaves out an upsert's content and the value of a patch's edit, which GET changeset/ops returns.
op_idstringyesThe id the service assigned when the op was staged. Use it to remove the op.
reasonstring or nullnoThe reason given for a rejection.
review_keystringyesGroups the ops a reviewer decides together.
seqintegeryesThe op's position in the changeset, in staging order.
staged_atstringyesWhen the op was staged.
staged_byobjectyesWho staged it and why.
statusstringyesThe op's state in the changeset.

Example

A request body (ids and values are placeholders), saved as body.json:

{
  "decision": "approved",
  "expected_revision": 3,
  "op_ids": [
    "csop_example"
  ]
}
curl -sS -X POST "$API_URL/context/v1/changeset/decisions" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d @body.json