Skip to content

Commit 59c8358

Browse files
committed
docs(spec): correct the 17.4.0 entry that restated the retired M9.2 promise
The `ef3a138` entry under `## 17.4.0` restates the M9.1 / M9.2 phase promise that #17323's ruling retired: a two-phase roadmap chartered by no ADR. Three passages are corrected in place in the #17026 shape — the published words are kept as marked quotations, the correction follows each, and one dated erratum line closes the entry. The blockquote quoting `EVALUATED_EXPRESSION_SOURCE_REQUIRED` is left exactly as 17.4.0 shipped it; a paragraph under it says what the constant reads now. Nothing this release published is changed. Claude-Session: https://claude.ai/code/session_01JbZnqu8bt6YqfJsr9vaFb3 Co-authored-by: Claude <noreply@anthropic.com>
1 parent 79a046f commit 59c8358

1 file changed

Lines changed: 23 additions & 10 deletions

File tree

‎packages/spec/CHANGELOG.md‎

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,14 +1098,24 @@
10981098
> that is blank after trimming, would validate and register and then fault at
10991099
> run time. Write `{ dialect: 'cel', source: '…' }`.
11001100

1101+
That blockquote is `EVALUATED_EXPRESSION_SOURCE_REQUIRED` as 17.4.0 shipped it,
1102+
and the parenthetical inside it now reads "(the canonical persisted form)" —
1103+
the phase clause is gone from the constant and nothing else in the sentence
1104+
moved. The rule, the slot it reports at and the prescription it carries are
1105+
unchanged.
1106+
11011107
- **`ExpressionSchema` is NOT narrowed.** It is the persistence contract —
1102-
`source` OR `ast` — and its docblock declares that `ast` becomes required in
1103-
build output at phase M9.2. The new export `EvaluatedExpressionSchema` (and
1108+
`source` OR `ast`. As published, that sentence continued "and its docblock
1109+
declares that `ast` becomes required in build output at phase M9.2"; the
1110+
promise is retired — `ast` is accepted as an optional opaque structured
1111+
value and carries none. The new export `EvaluatedExpressionSchema` (and
11041112
its type `EvaluatedExpression`) is a sibling: the same envelope with `source`
11051113
required and non-blank, spelled once and composed by every evaluated slot, so
1106-
when AST-only evaluation lands the flip is one edit there rather than a
1107-
per-slot unwinding. The rule is worded as "an evaluated slot requires whatever
1108-
the engine can actually evaluate"; what that is today is `source`.
1114+
if AST-only evaluation is ever chartered the flip is one edit there rather
1115+
than a per-slot unwinding. (As published that clause read "when AST-only
1116+
evaluation lands", which carries the same retired promise.) The rule is
1117+
worded as "an evaluated slot requires whatever the engine can actually
1118+
evaluate"; what that is today is `source`.
11091119
- **The notion of blank is the engine's own** — `.trim()`, which
11101120
`cel-engine.ts`'s helpers already apply — not a third one beside the shape
11111121
rule's `min(1)` and `validateExpression`'s trim.
@@ -1116,17 +1126,20 @@
11161126
grew a rule of its own.
11171127

11181128
**What an author does with a refused envelope.** An assignment value that
1119-
carried only `ast` has no evaluable form under M9.1: author its `source`. A
1120-
whitespace-only `source` was never an expression: delete the entry, or write
1121-
the expression. Every envelope with a non-blank `source` is unchanged, and
1122-
nothing is renamed, retired or rewritten — the refusal itself carries the
1123-
prescription.
1129+
carried only `ast` has no evaluable form: author its `source`. (As published
1130+
that clause read "no evaluable form under M9.1"; the phase id is retired, the
1131+
prescription is not.) A whitespace-only `source` was never an expression:
1132+
delete the entry, or write the expression. Every envelope with a non-blank
1133+
`source` is unchanged, and nothing is renamed, retired or rewritten — the
1134+
refusal itself carries the prescription.
11241135

11251136
Not touched here: the `predicate` half of the same seam — `evaluateCondition`'s
11261137
silent `false` on an envelope without a `source` — is a behaviour change on a
11271138
live path with its own card, and the edge-condition schema that carries that
11281139
envelope is narrowed in a follow-up once the in-flight change to
11291140
`automation/flow.zod.ts` lands.
1141+
1142+
*Erratum, 2026-09-17 — the M9.1 / M9.2 phase promise this entry restated was retired by the ruling on #17323 (2026-09-12), which found a two-phase roadmap chartered by no ADR: `ast` is an accepted optional structured value with no promise of becoming required. Three passages above are corrected in place; the blockquote is left as shipped and nothing this release published is changed. (Corrected after publication, #17849.)*
11301143
- 68d5dfd: feat(spec): `ExecutionStepMetrics` gains an optional `failures` slot, and `FlowRunSummary.failed` is declared as the fold INCLUDING what a delegating node rolled up from its child (maintainer ruling 2026-09-06 on #15617, spec half)
11311144

11321145
Additive. Nothing an author writes is renamed, retired or narrowed; no accept

0 commit comments

Comments
 (0)