key_missing | 401 | No Authorization: Bearer header reached VOLAT. | Check the header and the environment variable that fills it. |
key_malformed | 401 | Not an mk_ key, or its checksum fails. | Copy the whole key again. |
key_unknown | 401 | VOLAT does not know this key. | Ask for a new key. |
key_expired | 401 | The key has expired (90 days by default). | Ask for a new key. |
key_revoked | 401 | The key was revoked. | Ask for a new key. |
key_paused | 403 | The owner paused this key (HTTP 403). | Stop and tell Yan. Keep the same key; it works again once resumed. |
key_check_failed | 503 | VOLAT could not check the key just now (HTTP 503). The call was refused and nothing changed. | Retry once; if it repeats, tell Yan. |
scope_denied | 403 | The key lacks the scope for that action, or it is limited to one app and the action writes workspace-wide docs. A key limited to one app gets not_found for anything of another app. | Use a read action, or approval.request with type change_agent_permissions. |
forbidden | 403 | This needs a person. | Ask Yan, or request an approval. |
not_found | 404 | No such ticket, release or page for this key. | Check the identifier with issue.list or release.list. |
invalid | 400 | An argument is missing or wrong. | Fix the argument named in the message and call again. |
rate_limited | 429 | Too many calls for this key. | Wait for the retry-after header, or pause with a note. |
budget_exceeded | 429 | The key's daily write budget is used up. | Wait, or pause with a note. |
loop_detected | 429 | The same call failed three times in a row. | Change the approach; Yan has been flagged. |
checkout_held | 409 | Another agent holds the ticket. | Pick another ticket; the refusal names who holds it. |
checkout_required | 409 | You must take the ticket first. | Call issue.start or checkout.take. |
release_frozen | 409 | The release is frozen. | Ask for an approval instead of retrying. |
undo_conflict | 409 | Later work touched the same thing, so undo would overwrite it. | Leave it, or change it by hand. |
conflict | 409 | Someone changed this first. | Read it again, then retry. |
receipt_required | 422 | Moving to review needs a receipt for the current commit. | File issue.receipt (or use issue.finish). |
finish_incomplete | 422 | issue.finish or release.close_tickets found several things missing; the message lists every one. | Fix them all, then call issue.finish once more. |
done_means_unmet | 422 | A done-means item has no evidence. | Add the evidence to the receipt. |
scan_blocked | 409 | The commit has an open high security finding, so it cannot be approved. | Fix it and record a new issue.scan for the new commit, or ask Yan to accept the finding on the ticket. |
approval_not_pending | 409 | The approval was already decided. | Read it with approval.get. |
approval_expired | 410 | The approval expired without a decision (HTTP 410). | Do not go ahead. If still needed, approval.request again. |
relation_cycle | 409 | That relation would make a ticket depend on itself. | Pick a different relation. |
person_only | 403 | Only a person can do this: tick a person-only checklist item, unfreeze a release, or make an internal release public. | For a checklist item, send release.tick with a note of what you checked; Yan ticks it from the note. Otherwise ask Yan. |
level_too_low | 403 | The ticket is harder than this key's level allows (MSH-208). | Pick a ticket at or below your level (briefing.today can_take). Yan can let lower-level agents take this one. |
difficulty_locked | 403 | Agents may raise a ticket's difficulty, never lower or clear it. | Leave it, or ask Yan to change it. |
not_ready | 409 | The release is not ready to ship. | Read release.readiness for what blocks it. |
internal_only | 409 | The release is internal only, so it is never shipped as public. | Ship the next version, or clear internal_only with release.set_internal. |
release_focus | 409 | Agents work on the app's current release only (release focus, MSH-226); this ticket is in a later version, or has no release. | Pick a ticket in the current release (briefing.today, GET /api/v1/tasks). Hotfixes are always open; Yan can allow a ticket early. |
internal | 500 | VOLAT hit an unexpected error and changed nothing. | Retry once; if it repeats, tell Yan. |