Skip to content

Commit 65202aa

Browse files
committed
docs(approvals): the 'never resume directly' rule is now enforced, not advisory (#3801)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013gvN32u1EiuvY9uQEMJiMR
1 parent bc77921 commit 65202aa

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

content/docs/automation/approvals.mdx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,13 @@ curl -b cookies.txt -X POST \
288288
`actorId` defaults to the caller. The actor **must** be in `pending_approvers`
289289
or the call returns 403 (`FORBIDDEN: actor '…' is not a pending approver`); a
290290
request that isn't pending returns 409 (`INVALID_STATE`). Always go through
291-
these endpoints — never resume the flow run directly.
291+
these endpoints — never resume the flow run directly, and since #3801 you
292+
**cannot**: `POST /api/v1/automation/{flow}/runs/{runId}/resume` answers 403 for
293+
a run parked on an `approval` node (including via a `subflow` pause) and changes
294+
nothing — the request stays pending and the run stays parked, so the real
295+
decision still lands. The approver slate, the `sys_approval_action` row and the
296+
status mirror all live on this path; it is the only one that produces a
297+
consistent outcome.
292298

293299
A decision may carry **file attachments**`attachments: string[]` of `sys_file`
294300
ids — recorded on its audit row (e.g. a signed contract on the approve):

0 commit comments

Comments
 (0)