Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
059b422
feat(spec)!: hold a predicate to what the engine can run; declare its…
claude Sep 18, 2026
6120437
docs(adr): record ADR-0136 — predicate fault semantics are contract
claude Sep 18, 2026
4f9d0cf
chore(spec): changeset + regenerate the reference docs for the narrow…
claude Sep 18, 2026
d3c1071
fix(spec): declare what the expression author helpers actually emit
claude Sep 18, 2026
98b6fcd
Merge remote-tracking branch 'origin/main' into claude/issue-17778-fi…
claude Sep 18, 2026
8f8edb0
chore(spec): regenerate api-surface-declarations after merging origin…
claude Sep 18, 2026
e1978a0
test(dogfood): roster `PredicateInputSchema` as an expression-surface…
claude Sep 18, 2026
9f30a18
revert(spec): drop the predicate narrowing — #18638 owns every evalua…
claude Sep 18, 2026
a1840d7
docs(adr): renumber to ADR-0137; cite the rulings the record was sile…
claude Sep 18, 2026
b8805e4
test(dogfood): drop the `PredicateInputSchema` D7 roster entry — re-d…
claude Sep 18, 2026
89dfabb
chore(changeset): re-describe what this PR actually contains
claude Sep 18, 2026
1bbe8f5
docs(adr): cite the settings `visible` pair by symbol, not by line nu…
claude Sep 18, 2026
aa548ff
Merge remote-tracking branch 'origin/main' into claude/issue-17778-fi…
claude Sep 19, 2026
ec4bfc5
Merge remote-tracking branch 'origin/main' into claude/issue-17778-fi…
claude Sep 19, 2026
28ebef3
chore(spec): regenerate api-surface-declarations after merging origin…
claude Sep 19, 2026
f11ea36
docs(changeset): narrow the #17778 entry to what it delivers alone
claude Sep 19, 2026
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
13 changes: 13 additions & 0 deletions .changeset/17778-field-rule-predicate-fault-semantics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
"@objectstack/spec": patch
---

**ADR-0137 makes field-rule predicate fault semantics part of the contract** (#17778): what SUBMIT and RENDER do when a predicate cannot run.

Clause-②: no

**The predicate fault-semantics contract is recorded, not enforced, by this release.** ADR-0137 states what a field-rule predicate does when it cannot RUN: at SUBMIT a faulting predicate refuses the write and names the field and the rule (D2); at RENDER visibility stays fail-OPEN, so a rule that could not run never hides a control and lets the form write `null` over a column the user never saw (D3); a blank or faulting GATE predicate is diagnosed, never a silent `true` (D4); and the evaluation helper's fallback stays freely specifiable (D5), because fault-to-flag and fault-to-throw both exist only because it is a parameter. Those are consequences CONSUMERS deliver — `packages/spec` carries no business logic — and they land in the ObjectUI half. D1's authoring refusal (an `ast`-only envelope and a blank `source` are refused at authoring) is ruled by decision batch #122 item 2 and ships with the evaluated-slot narrowing that owns it, under that change's own ADR-0087 entry.

**ADR-0089 gains an addendum, not a reopening.** It unified the `visibleWhen` / `visibleOn` / `visibility` family under one name; ADR-0137 owns what that family does when a predicate cannot run, and ADR-0089 itself is unchanged by this release.

**Not carried by this entry: the `cel` / `expression` return-type narrowing to `EvaluatedExpression`.** This card touched that signature too, but main shipped the identical narrowing first, under #18638 (card #15811) — see that release's own changeset for the `EvaluatedExpression` story and the TS2322 it fixes. Restating it here would announce, a second time, a fact this release has already shipped under a different entry.
10 changes: 10 additions & 0 deletions docs/adr/0089-unify-visibility-predicate-naming.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@

---

> **Addendum (2026-09-18, #17778) — what the `*When` family does when it cannot RUN is decided by [ADR-0137](./0137-predicate-fault-semantics-are-contract.md), not here.**
> This record unified the family under one NAME and is unchanged by that one. ADR-0137 D1 holds a
> predicate slot to what the engine can actually run — an `ast`-only envelope and a `source` blank
> after trimming are refused at authoring, which is the field-rule row of the rule decision batch
> #122 item 2 gave across every evaluated slot; D2 refuses the SUBMIT loudly on a fault, naming the
> field and the rule; D3 keeps visibility fail-OPEN at RENDER. A reader who arrived here asking what
> a broken `visibleWhen` does should read that record.

---

## TL;DR

One concept — *"show this only when the CEL predicate is TRUE"* — is spelled three
Expand Down
Loading
Loading