Commit 2bdabe6
docs(spec): ApprovalDecisionResult records what the stranded-decision throw carries (#16983)
The contract already declared the posture: a decision that finalises a
flow-bound request and cannot resume its own run throws rather than
answering `resumed: false`, because a recorded decision whose flow never
advances is #4420's zombie half-state. What it never said is that the
throw is now readable.
The maintainer ruling #13807 (2026-09-04, decision batch #37) owes both
halves — "throws with the decision and run identified; the fields are the
published way to read it" — and only the first half was written down. The
`resumed` docblock now names the second: the 500-class `RESUME_FAILED`
carries `finalized`, `decision`, `runId` and `repairable` on its ERROR
body as `StrandedDecisionDetails` (`@objectstack/types`, attached by
`strandedDecisionFailure`, read back by `strandedDecisionDetails`, merged
into the response by the REST approvals door), and the status code does
not move because a durable decision over a run that will not advance is
still a failure.
Prose only. No member is added: the four facts ride the ERROR, so putting
them on this success shape would declare a shape that never carries them,
and the docblock says so explicitly. It also keeps them distinct from
`resumeFailure`, which reports the #16472 family's different event — a
resume failure told behind an answer that still succeeded.
The changeset is owed on the second half of the two-part test, not the
first: `src/contracts/approval-service.ts` is outside `packages/spec`'s
`files[]`, but the changed docblock text is emitted into
`dist/contracts/index.d.ts` and `index.d.mts`, which `files[]` publishes.
Claude-Session: https://claude.ai/code/session_016N6xmWt5hYm94ffVEwGH8x
Co-authored-by: Claude <noreply@anthropic.com>1 parent 3030369 commit 2bdabe6
2 files changed
Lines changed: 31 additions & 0 deletions
File tree
- .changeset
- packages/spec/src/contracts
Lines changed: 11 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
735 | 735 | | |
736 | 736 | | |
737 | 737 | | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
738 | 758 | | |
739 | 759 | | |
740 | 760 | | |
| |||
0 commit comments