QA-source: #21845 · approvals.sla-escalation · acceptance[4]
Clause A5 of approvals.sla-escalation (rev 2) fails in the follow-up run #21845 (subject 316be321e); an independent verifier (RUNNER rule 7) reproduced it: low-medium, predates 17.6.0.
Reproduction
- In a scratch copy of the showcase, add a flow whose approval node has
escalation {…, bogusKey: 1} (or the timeout alias).
objectstack validate → exit 0; objectstack compile → exit 0, and the key is copied into dist/objectstack.json.
- Boot: the flow is dropped with only a WARN; the server stays healthy.
Mechanism
packages/spec/src/automation/flow-node-config-refusals.ts:94-111 holds config contracts for the 13 built-in node types; plugin node types (approval) are not consulted at build time. The timeout alias is correctly refused (aliases only drive the "did you mean" text).
Done when
The build consults registered plugin node descriptors (or a declared contract map) and refuses unknown keys and invalid values; a test pins the approval escalation case.
Generated by Claude Code
QA-source: #21845 · approvals.sla-escalation · acceptance[4]
Clause A5 of
approvals.sla-escalation(rev 2) fails in the follow-up run #21845 (subject316be321e); an independent verifier (RUNNER rule 7) reproduced it: low-medium, predates 17.6.0.Reproduction
escalation {…, bogusKey: 1}(or thetimeoutalias).objectstack validate→ exit 0;objectstack compile→ exit 0, and the key is copied intodist/objectstack.json.POST /api/v1/automationhard-refuses an undeclared node config key but accepts an unknown nodetype#7545).Mechanism
packages/spec/src/automation/flow-node-config-refusals.ts:94-111holds config contracts for the 13 built-in node types; plugin node types (approval) are not consulted at build time. Thetimeoutalias is correctly refused (aliases only drive the "did you mean" text).Done when
The build consults registered plugin node descriptors (or a declared contract map) and refuses unknown keys and invalid values; a test pins the approval escalation case.
Generated by Claude Code