Coelevate Documentation
API ReferenceContext Repository

Record a gap

Records a piece of context debt at version 1 under the release named in `opened_release` (the latest when omitted).

POST /context/v1/gaps

Records a piece of context debt at version 1 under the release named in opened_release (the latest when omitted). A gap takes effect at once, needs no review and no release. Two open gaps cannot share a kind and a detail: recording one that is already open is a 409 duplicate_key naming the gap that holds it; a hole found again after its gap was closed opens a new gap. A gap names no kit: add it to a kit with the kit members call, using the gap's id.

Requires the context:gaps scope.

Request body

FieldTypeRequiredDescription
detailstringyesWhat is missing and what it was needed for, in plain language.
evidencestringnoThe excerpt or reasoning that surfaced it.
idstring or nullnoLeave out: the service mints the gap's id.
kindstringyesA short label for the sort of debt, such as missing_tool, missing_skill or missing_knowledge. Any short label is accepted.
metadatamap of stringnoFree-form key-value pairs.
opened_releaseinteger or nullnoThe context release the gap is opened under. Leave out for the latest release.
origin_context_idstring or nullnoThe recorded run it was discovered in.
rationalestringnoWhy, recorded in the gap's journal.
tagsarray of stringnoFree-form labels.

Responses

StatusMeaning
200OK
201The 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.
422The request was not valid: a parameter or the body failed validation.

The 200 response body:

FieldTypeRequiredDescription
closed_releaseinteger or nullnoThe release that covered the gap. Empty while the gap is still open.
content_keystringyesWhat makes two reports one open debt: a digest of the kind and the detail.
detailstringyesWhat is missing and what it was needed for.
evidencestringyesThe excerpt or reasoning that surfaced it.
idstringyesThe gap's id.
kindstringyesA short label for the sort of debt: missing_tool, missing_skill, missing_knowledge or any other short label.
kitsarray of GapKitRecordyesThe kits that carry this gap.
last_changed_bystring or nullnoWho last changed the gap.
last_changed_by_kindstring or nullnoperson or automation.
last_updatedstring or nullnoWhen the gap last changed.
last_updated_bystring or nullnoWhether the last change was made by a person (human) or by an automation (ai).
metadatamap of stringyesThe gap's free-form key-value pairs.
namestring or nullnoThe gap's canonical name, projects/{project}/gaps/{id}. It is null when the id cannot be written in a canonical name.
opened_releaseinteger or nullnoThe context release the gap was opened under. Provenance only: a gap is served from live state.
origin_context_idstring or nullnoThe recorded run it was discovered in.
retiredbooleanyesWhether the gap has been closed.
tagsarray of stringyesThe gap's free-form labels.
versionintegeryesThe gap's version. It moves each time the gap is changed, retired or reverted.

Shapes

The named shapes used above.

GapKitRecord

A kit that carries a gap.

FieldTypeRequiredDescription
idstringyesThe kit's id.
titlestringyesThe kit's title.
versionintegeryesThe kit version that holds the gap.

Example

curl -sS -X POST "$API_URL/context/v1/gaps" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d @body.json