|
1634 | 1634 | "title": "The flow-dispatch HTTP status contract: every never-dispatched, ran-and-failed and non-terminal outcome answers its own status + ADR-0112 code, at every door that dispatches a flow", |
1635 | 1635 | "since": "v17", |
1636 | 1636 | "status": "active", |
1637 | | - "revision": 8, |
| 1637 | + "revision": 9, |
1638 | 1638 | "priority": "P1", |
1639 | 1639 | "surface": "api", |
1640 | 1640 | "personas": ["seeded admin (admin@objectos.ai / admin123)", "org member for the resume 403 arm — created by the admin with POST /api/v1/auth/admin/create-user and past its password change (POST /api/v1/auth/change-password): a held session answers 403 PASSWORD_RESET_REQUIRED, the right status for the wrong reason"], |
|
1690 | 1690 | "evidence": "the 400 bodies from both doors, keys shown" |
1691 | 1691 | }, |
1692 | 1692 | { |
1693 | | - "clause": "every RESUME refusal answers its own status and code, and the retryable ones LEAVE THE SUSPENSION INTACT: 403 PERMISSION_DENIED, 400 INVALID_SIGNAL, 400 INVALID_SCREEN_INPUT, 409 RESUME_IN_PROGRESS, 503 STORE_UNAVAILABLE all keep the run paused; 404 RUN_NOT_FOUND and 400 FLOW_FAILED are terminal", |
| 1693 | + "clause": "every RESUME refusal answers its own status and code, and the retryable ones LEAVE THE SUSPENSION INTACT: 403 PERMISSION_DENIED, 400 INVALID_SIGNAL, 400 INVALID_SCREEN_INPUT, 409 RESUME_IN_PROGRESS, 409 RESUME_CHILD_PENDING, 503 STORE_UNAVAILABLE all keep the run paused; 404 RUN_NOT_FOUND and 400 FLOW_FAILED are terminal", |
1694 | 1694 | "oracle": "api", |
1695 | 1695 | "verify": "per reachable arm: the (status, code) pair, THEN a re-read of the run proving it is still paused and a subsequent valid resume still succeeds. The intact-suspension half is what separates these arms from the terminal ones and no status shows it. 503 STORE_UNAVAILABLE has no stock trigger: drive it with the qa-flow-status-doors recipe's step 5 (sys_automation_run renamed away in the boot's telemetry database for one resume, then back), and only then re-read and resume. ⛔ Never infer it from the code being registered; a run that cannot edit the telemetry file (a non-file datasource) records the arm blocked(fixture), with packages/runtime/src/domains/automation-resume-refusal-codes.test.ts (the in-process 503 mapping) beside it as evidence of its own layer only (RUNNER rule 6)", |
1696 | 1696 | "evidence": "per-arm response + the post-refusal run state + the successful later resume" |
|
1728 | 1728 | "resume · 400 INVALID_SIGNAL — signal wrote the engine's $ namespace, retryable", |
1729 | 1729 | "resume · 400 INVALID_SCREEN_INPUT — bag violates the screen's field contract, retryable", |
1730 | 1730 | "resume · 409 RESUME_IN_PROGRESS — a concurrent resume holds the run, retryable", |
| 1731 | + "resume · 409 RESUME_CHILD_PENDING — a parent-id resume of a map whose item run is still suspended; the message names the item run to resume, retryable. No stock flow reaches it: showcase_release_signoff's item parks on an approval, which answers 403 PERMISSION_DENIED first, so a run stages a map over a raw-resumable item (a screen) and resumes the map's own run id", |
1731 | 1732 | "resume · 503 STORE_UNAVAILABLE — durable store unreadable, retryable", |
1732 | 1733 | "resume · 404 RUN_NOT_FOUND — no such suspension, or a STALE one; terminal", |
1733 | 1734 | "resume · 400 FLOW_FAILED — the resumed run consumed its pause and failed; terminal", |
|
1793 | 1794 | "date": "2026-10-27", |
1794 | 1795 | "change": "acceptance[0], the variants and fixtures.knownGaps name classifyFlowRefusal's fifth trigger row, 422 FLOW_INPUT_SCHEMA_INVALID. Checklist-accuracy finding of the 18.2.0 wave 2 (QA run #26476, release-18.2.0-w2-manual-api, at 756220c4; wave anchor #25807, slice A): the clause said 'every TRIGGER row' and listed four, while packages/runtime/src/flow-dispatch-status.ts classifyFlowRefusal answers five; the run did not drive the fifth. Re-read at base e4ba846f (flow-dispatch-status.ts table and classifyFlowRefusal; service-automation engine.ts InputSchemaViolationError arm). The new knownGaps line says no stock flow reaches the row, so it scores not-run until a run stages one", |
1795 | 1796 | "ref": "#25807" |
| 1797 | + }, |
| 1798 | + { |
| 1799 | + "revision": 9, |
| 1800 | + "date": "2026-10-30", |
| 1801 | + "change": "acceptance[4] and the variants name the resume door's map-item refusal, 409 RESUME_CHILD_PENDING (PR #27951): a parent-id resume of a map whose item run is still suspended is refused before anything moves, naming the item run. Read at base f6adf480 (run-resume.ts refuseMapItemSkip; runtime automation.ts code→status table)", |
| 1802 | + "ref": "#27971" |
1796 | 1803 | } |
1797 | 1804 | ] |
1798 | 1805 | }, |
|
0 commit comments