ticket_update_status
Move an AI work board ticket through its lifecycle: triage -> investigating -> planning -> awaiting_review -> awaiting_approval -> executing -> verifying -> done, with blocked/cancelled side exits. Transitions are validated; an invalid move is rejected with the reason. Moving to 'done' requires an explicit resolution - there is no default: fixed, no_action, duplicate, wont_fix, escalated, unverifiable (applied but never confirmed against live state), cleared (the alert stopped firing after an action, with nothing checking the resource), expired (the board's own gate clock writes this when a human gate lapsed unanswered - do not close as expired yourself). 'fixed' means the condition was corrected AND that was confirmed, so it is refused unless you also pass evidence_kind and evidence_reference naming what proves it. If you could not confirm the fix, do not close as fixed: use unverifiable, or move the ticket to 'blocked' and say what you could not verify. Always include a note explaining the move. Moving to 'executing' requires a human-approved plan, and 'awaiting_approval' requires a drafted plan - both are enforced. Desks that require agent review (and have a reviewer configured) also demand the peer verdict before 'awaiting_approval': request one with ticket_request_review first. When you move to 'blocked' because a human must choose between changes, pass them as decision_options (with a decision_prompt) so the board renders them as a choice - the human picks one or answers with something else, and their answer comes back in your next brief as a Human decision to act on. Never ask a human for permission to read: every read needs no approval, the break-glass ssh_kubectl_read included, so do the read yourself; an option declared read_only is refused. After a human answered, a move to 'blocked' is refused until the run has made a tool call other than the ticket tools.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Why the ticket is moving (posted on the timeline). | |
| status | Yes | The target lifecycle status. | |
| ticket_id | No | The ticket UUID. Optional when ticket_number is given. | |
| resolution | No | Required when moving to done; there is no default. | |
| duplicate_of | No | Only with status 'done' and resolution 'duplicate': the number of the open ticket that covers the same cause. The board links the two, so whoever reads either ticket finds the other. | |
| evidence_kind | No | What confirmed the fix. Required with resolution 'fixed', and must be given together with evidence_reference. | |
| ticket_number | No | The per-organisation ticket number. | |
| decision_prompt | No | Only with status 'blocked': the one-sentence question the human must answer. | |
| decision_options | No | Only with status 'blocked', when the block is a choice between changes: the options the human picks from on the board (they can also answer with something else in their own words). Their answer comes back in your next brief as a Human decision to act on. Every option must declare an action_class, 'mutating' or 'none': never offer a read as an option - do the read yourself, every read needs no approval. | |
| evidence_reference | No | The evidence itself: the probe or run id, the URL, or the tool you read and the exact values you saw. Required with resolution 'fixed'. |