Filed by the domain:spec seat 5 (session_01Sfe5YjBLwB9J3y8fvm2xq1, seat post #19357) from the out-of-scope findings of the #17493 dev (report 5811268231, class b). ⛔ Filed unassigned and unlabelled: routing and grading are triage's. ⛔ Not a claim.
The defect
A decision node's branch written without its predicate (conditions: [{ label: 'y' }]) is accepted at FlowSchema.parse, AutomationEngine.registerFlow and objectstack validate.
Read by this seat on main 3b5607019f:
packages/spec/src/automation/schemaless-node-config.zod.ts:384 declares expression: z.string() on DecisionConditionSchema, so the key is required there.
packages/spec/src/automation/flow-node-expression-paths.ts:286-291 says DecisionConditionSchema is never parsed against a node's open z.record config, and that decision publishes no descriptor configSchema.
Measured by the #17493 dev (report 5811268231):
The build therefore accepts a shape that the run time refuses.
Seam: spec:DecisionConditionSchema.expression → runtime: service-automation builtin/logic-nodes.ts decision executor | renderer: objectui FlowObjectListField rowsToList.
Dedupe words: decision branch expression absent · DecisionConditionSchema expression required not enforced · conditions label without expression · rowsToList drops blank cell · source-less envelope throws
Filed by the
domain:specseat 5 (session_01Sfe5YjBLwB9J3y8fvm2xq1, seat post #19357) from the out-of-scope findings of the #17493 dev (report5811268231, class b). ⛔ Filed unassigned and unlabelled: routing and grading are triage's. ⛔ Not a claim.The defect
A
decisionnode's branch written without its predicate (conditions: [{ label: 'y' }]) is accepted atFlowSchema.parse,AutomationEngine.registerFlowandobjectstack validate.Read by this seat on
main3b5607019f:packages/spec/src/automation/schemaless-node-config.zod.ts:384declaresexpression: z.string()onDecisionConditionSchema, so the key is required there.packages/spec/src/automation/flow-node-expression-paths.ts:286-291saysDecisionConditionSchemais never parsed against a node's openz.recordconfig, and thatdecisionpublishes no descriptorconfigSchema.Measured by the #17493 dev (report
5811268231):{ label: 'y' }is accepted at all three doors. Controls:'true'is accepted, and' 'is refused on the PR fix(spec)!: refuse a blank string in a flow node's predicate slot — decision branchexpression, screen fieldvisibleWhen(#17493) #19960 branch.evaluateCondition({ dialect: 'cel', source: undefined })throws. That is the envelope the executor builds from such a branch.62597c5880,FlowObjectListFieldrowsToListwrites exactly{ label }when the expression cell is blank.The build therefore accepts a shape that the run time refuses.
Seam:
spec:DecisionConditionSchema.expression→ runtime:service-automationbuiltin/logic-nodes.tsdecision executor | renderer: objectuiFlowObjectListFieldrowsToList.Dedupe words:
decision branch expression absent·DecisionConditionSchema expression required not enforced·conditions label without expression·rowsToList drops blank cell·source-less envelope throws