From 7bcfefc6c197d3b13eb1cbc7487945ec6aeaf5bc Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 30 Aug 2026 07:14:24 +0000 Subject: [PATCH] docs(skills): mark the two non-canonical row-predicate spellings as deprecated MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The List-view/CEL row-predicate sentence in the published skills guide still presented `record.status`, bare `status` and `data.status` as peers, labelling `record.*` merely "canonical" — a word that reads as a style preference. Since Phase 1 (objectui#5330) the other two emit a one-time dev-console deprecation warning and retire once a stored-metadata survey sizes the window, and `data.*` is the arm the server's authoring oracle accepts silently while binding nothing at runtime (a constant `false`, not an error). Prose only, +4 lines net, scoped to the List-view/CEL tier: the `${…}`/`On` tier (SafeExpressionParser, where `data.*` is correct) and the flow tier are different engines and are untouched, as is the legacy-syntax routing sentence below. The deprecation is stated as layer-scoped ("deprecated **here**"), matching rowPredicateCanon.ts — `data` stays canonical in a metadata-editing form per ADR-0089 D3. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de --- skills/objectui/guides/schema-expressions.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/skills/objectui/guides/schema-expressions.md b/skills/objectui/guides/schema-expressions.md index 43fe556c06..0c9f63999f 100644 --- a/skills/objectui/guides/schema-expressions.md +++ b/skills/objectui/guides/schema-expressions.md @@ -304,9 +304,13 @@ paid_on: Field.date({ } ``` -The predicate binds the row three ways — `record.status` (canonical), bare -`status`, and `data.status` (legacy) — plus the host predicate scope -(`features.*`, `user.*`). The legacy ObjectUI shapes still work and are +The predicate binds the row three ways — `record.status` (**canon**), bare +`status` and `data.status` (both **deprecated** here: still bound, warned +once in dev, retiring after a stored-metadata survey — see +`packages/core/src/evaluator/rowPredicateCanon.ts`) — plus the host +predicate scope (`features.*`, `user.*`). `data.*` is the trap: the server's +authoring oracle accepts it silently, then binds nothing at runtime — a +constant `false`, not an error. The legacy ObjectUI shapes still work and are translated to CEL transparently: the native `{ field, operator, value }` form (`operator` ∈ `equals` / `not_equals` / `greater_than` / `less_than` / `contains` / `in`) and the `{ expression: "${…}" }` template form. A string