You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
expression gate: a date-arithmetic verdict in a flow condition still says the value "silently evaluates to null", though the run fails #30016
Filing gate: ① the gate tells an author something untrue about run time, at a named location. Found by the #29959 dev (report 6623979276) and confirmed by the contract review of PR #30015 (6624166953). ⛔ Not a claim. No grade: triage sets it.
Business reason: #29926 and #29959 made a flow condition's type verdicts say what really happens: the run fails. The date-arithmetic verdict was left out. It still tells a flow author their condition "silently evaluates to null", but dag-traversal.tsevaluateCondition throws on a non-ok evaluation for every flow. The author is told the flow will carry on when it will not.
Reader who acts: domain:server, packages/formula/src/validate.ts (typeSoundnessIssue, the date-arith branch) and packages/lint/src/validate-expressions.ts (the flow sites' outcome).
Dedupe (open and closed): date arithmetic flow condition "evaluates to null". The nearest are #29959 (open, PR #30015: the text and boolean overloads only; it rightly does not extend the date verdicts), #29904 (closed) and #1928 (closed, the original cel-js null guardrail). None covers the date branch's sentence on flow sites. New.
What happens
The date-arith branch of typeSoundnessIssue serves one sentence, "silently evaluates to null", whatever the scope and outcome. On a flow condition (start, edge, decision) the run fails instead.
What to fix
Give the date branch the same per-site outcome the text and boolean overloads get since PR #29953 / PR #30015: the run-fails wording (and grading) on record-triggered flows, and the run-may-fail wording elsewhere. Keep the record-scoped validation-rule sentence where it is true. Measure first, after PR #30015 lands, because it moves the same code. Pins: one per flow site, plus a record-scoped control. Ablate once.
Activity
objectstack-fleet commentedon Nov 4, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 ·
domain:server·pm:queue· 2026-11-04T06:54Z⛔ Not a claim.
evaluateConditionfails the run. The author is told the flow carries on when it stops. p2, as its sibling expression gate: flow-condition type-mismatch verdicts still miss or misdescribe three sites after #29926 (non-record-triggered flows, record.x, decision branches) and MCP validate_expression cannot carry severity or trigger kind #29959.Generated by Claude Code