Cadence
Reference

Checks

Define a space's checks, and set or invalidate a check result on a task.

A check is a named assertion about a task — "tests pass", "reviewed", "deployed". You define the checks a space uses in its registry, and each task carries a result for a check: pending, passed, or failed. A check rule ties a check to a stage, either creating a pending result on entry or gating entry until the check passes.

See Authentication for the role each level needs. Replace https://cadence.example.com with your instance's address.

The check registry

GET/POST /api/v1/spaces/:space_key/checks, PATCH/DELETE .../checks/:code; MCP checks_registry_list, checks_registry_create, checks_registry_update, checks_registry_delete; the space settings Checks section. Every one of these needs admin — including listing the registry.

A registry entry has a code and an optional description. The code must be lowercase letters, digits, and underscores, starting with a letter — for example tests_pass. It is immutable once created; an update only changes the description.

curl -X POST https://cadence.example.com/api/v1/spaces/OPS/checks \
  -H "Authorization: Bearer smc_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{ "code": "tests_pass", "description": "The test suite is green" }'

Updating over the API rejects any field other than description with 422 and unpermitted_fields. Deleting a check that a rule or a result still references is refused with check is referenced by a rule or result and cannot be deleted — remove those first.

Check results on a task

GET/POST /api/v1/tasks/:task_key/check_results; MCP checks_list, checks_set. Listing needs read; setting needs member.

Set a result by check_code and state, where state is pending, passed, or failed:

curl -X POST https://cadence.example.com/api/v1/tasks/OPS-42/check_results \
  -H "Authorization: Bearer smc_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{ "check_code": "tests_pass", "state": "passed" }'

A check_code that is not registered in the task's space is refused with unknown_check_code — over the API, no Check with that code is registered in the task's Space; over MCP, unknown check_code for the task's space.

Setting a check to passed is what satisfies a require check rule, letting the task move on. It is also what a sentinel rule reads to decide whether to advance the task on its own — so setting a check can trigger that evaluation. See What moves a task without a person.

Invalidate a result

The web interface can invalidate a check result — POST /spaces/:space_key/tasks/:id/invalidate_check — which resets it to pending. This needs member. There is no /api/v1 route or MCP tool for it; to reset a result elsewhere, set it back to pending with checks_set.

On this page