Context
@objectstack 7.6 ships ADR-0032 phase 1: build-time and runtime expression validation. The template packages are pinned to ^7.4.1.
objectstack build (compile) now validates every flow start/decision/edge condition, plus object validation-rule and field-formula predicates, against the resolved object schema, and fails the build on:
- single-brace
{field} inside a CEL expression ({…} parses as a CEL map literal and fails) — write bare CEL: record.field;
- references to fields that don't exist (
record.<unknown>), with a "did you mean…" hint.
At runtime, a malformed condition now throws loudly instead of silently evaluating to false.
Note: the flow conditions across the template packages already look clean (no brace-in-CEL found). The likely surfacing here is validation rules / field formulas that reference a field that doesn't exist or have a CEL typo — these previously failed silently at runtime and will now be caught at build time.
Action items
Optional (new in 7.6)
{{ path | formatter }} template holes (currency/date/number/percent/upper/lower/truncate/default) with defined value→string semantics. Single-brace {…} node-field templates still work, so no template migration is required yet (that's a later breaking step).
Refs: ADR-0032 (docs/adr/0032-unified-expression-layer.md in framework).
Filed on behalf of @os-zhuang after the 7.6 release.
Context
@objectstack7.6 ships ADR-0032 phase 1: build-time and runtime expression validation. The template packages are pinned to^7.4.1.objectstack build(compile) now validates every flowstart/decision/edgecondition, plus object validation-rule and field-formula predicates, against the resolved object schema, and fails the build on:{field}inside a CEL expression ({…}parses as a CEL map literal and fails) — write bare CEL:record.field;record.<unknown>), with a "did you mean…" hint.At runtime, a malformed condition now throws loudly instead of silently evaluating to
false.Action items
@objectstack/*from^7.4.1→^7.6(latest 7.6.x) across the workspace;pnpm install.objectstack buildfor each template package (and theallaggregate). Fix every expression-validation error it reports — each is located, with the offending source + a corrective message.{field}in a condition →record.field(bare CEL).record.<unknown>→ correct the field name (build suggests the nearest match).Optional (new in 7.6)
{{ path | formatter }}template holes (currency/date/number/percent/upper/lower/truncate/default) with defined value→string semantics. Single-brace{…}node-field templates still work, so no template migration is required yet (that's a later breaking step).Refs: ADR-0032 (
docs/adr/0032-unified-expression-layer.mdin framework).Filed on behalf of @os-zhuang after the 7.6 release.