Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .changeset/blank-node-condition-refused-at-registration.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ nodes:
```

> An expression in an evaluated slot needs a non-blank `source`: the expression
> engine evaluates `source` (the canonical persisted form of phase M9.1) and
> engine evaluates `source` (the canonical persisted form) and
> cannot evaluate `ast` alone, so an envelope carrying only `ast`, or a `source`
> that is blank after trimming, would validate and register and then fault at
> run time. Write `{ dialect: 'cel', source: '…' }`.
Expand Down
12 changes: 6 additions & 6 deletions .changeset/flow-edge-condition-evaluated-slot.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ edges:
```

> An expression in an evaluated slot needs a non-blank `source`: the expression
> engine evaluates `source` (the canonical persisted form of phase M9.1) and
> engine evaluates `source` (the canonical persisted form) and
> cannot evaluate `ast` alone, so an envelope carrying only `ast`, or a `source`
> that is blank after trimming, would validate and register and then fault at
> run time. Write `{ dialect: 'cel', source: '…' }`.
Expand All @@ -42,10 +42,10 @@ edges:
`invalid_union` issue at the slot carrying the sentence above; a blank
`source` inside an envelope surfaces as one `custom` issue at `source`.
- **`ExpressionSchema` / `ExpressionInputSchema` are NOT narrowed.** They remain
the persistence contract (`source` OR `ast`), whose docblock declares that
`ast` becomes required in build output at phase M9.2. When AST-only
evaluation lands, `EvaluatedExpressionSchema` is the one place to relax, and
every evaluated slot follows.
the persistence contract (`source` OR `ast`), where `ast` is accepted as an
optional opaque structured value and carries no promise of becoming required.
If AST-only evaluation is ever chartered, `EvaluatedExpressionSchema` is the
one place to relax, and every evaluated slot follows.
- **`structuralConditionRefusal` no longer admits an `ast`-only envelope** on
either structural condition slot (`config.condition` on a node,
`edge.condition`). #15662's refusal admitted it on purpose through a
Expand All @@ -70,7 +70,7 @@ edges:
it. None of them grew a rule of its own.

**What an author does with a refused edge condition.** An edge condition that
carried only `ast` has no evaluable form under M9.1: author its `source`. A
carried only `ast` has no evaluable form: author its `source`. A
whitespace-only condition — envelope or bare string — was never a predicate
(the engine answered `false`, so that edge never fired): remove the
`condition` key if the edge was meant to be unconditional, or write the
Expand Down
3 changes: 2 additions & 1 deletion content/docs/data-modeling/formulas.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ Formatters: `currency[:CODE]`, `number[:decimals]`, `percent[:decimals]`,

At **input** time you may write a bare string for shorthand — the spec
transforms it into the right envelope based on the field type. The compiled
artifact always contains the full envelope (and, after M9.2, the AST).
artifact always contains the full envelope: `source` is the canonical persisted
form, and `ast` is an optional opaque structured value.

{/* os:check */}
```ts
Expand Down
Loading