set_work_status
Update the work status of an existing message as it moves through its lifecycle, without sending a new message. Sender or recipient can change status, with peer confirmation for done.
Instructions
Update the work_status of an EXISTING message as the work moves through its lifecycle — do not send a new message just to change status. Either party (sender or recipient) may call this; third roles are rejected. Transitions: any value can be set from any state, with ONE exception — 'done' requires the current status to be 'done_local' and must be set by the OTHER role than whoever declared done_local. Semantics: 'done_local' = the executor finished on their side; 'done' = completed AND confirmed by the other role (peer confirmation — the channel cannot verify merges or production). 'done' is not a dead end: if an issue resurfaces, move the status back (audited) or reopen the obligation. 'needs_you' is relative to the SETTER: it always means the ball is at the other participant than whoever set it (it surfaces in THEIR channel_status). Re-setting the current value by the other role is a real, audited transition (it moves the ball back); by the same role it is a no-op. For 'blocked' on another message, pass blocked_by=; the blocker MUST be an unresolved action_required message (otherwise nothing could ever resolve it and your task would block forever — rejected). Blocked on something without a resolvable message (human decision, external run) — use 'blocked' with a note and lift it manually. Every transition is logged to message_history.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| blocked_by | No | ||
| message_id | Yes | ||
| work_status | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||