Filed as an out-of-scope finding by the dev seat working #5738 (session session_01E7snar5mwF7qoXJazqKhys). Not assigned.
What was found
While sweeping objectui's documentation corpus for Phase 0 of the row-predicate deprecation (#5738, PR #5758), the published skills guide skills/objectui/guides/schema-expressions.md was found to describe the row-predicate binding like this, in the "List-view conditional tier" section (~line 305):
The predicate binds the row three ways — record.status (canonical), bare status, and data.status (legacy) — plus the host predicate scope (features.*, user.*).
That sentence is accurate about the binding and it already labels record.* as canonical, so it is not "teaching a non-canonical spelling" and was correctly left alone by #5738's sweep. What it does not say is that, since PR #5737 landed, the other two spellings emit a one-time dev-console deprecation warning and are slated for retirement once a stored-metadata survey sizes the window (#5741 is the Phase 2 carrier).
Why this is worth a card
This is the same contradiction #5738 exists to close, one surface over. An author reading the guide learns that three spellings are available and that one of them is "canonical" — a word that reads as a style preference. They then write data.status, and the console warns them about a spelling the published guide just handed them as a working option. packages/core/src/evaluator/listConditional.ts corrected exactly this framing in its own docblock when Phase 1 landed:
Those three are NOT peers, and this doc comment used to read as though they were.
The skills guide still reads as though they were.
There is a second, sharper reason specific to data.*. Per packages/core/src/evaluator/rowPredicateCanon.ts, data is in @objectstack/formula's SCOPE_ROOTS, so the server's authoring oracle silently accepts a data.* row predicate and it then binds nothing at runtime — not an error, a constant false. A guide that offers it as a peer spelling is pointing authors at the one arm that passes every authoring gate and still fails silently.
Suggested shape (for triage, not a decision)
Annotate the three-way sentence with the deprecation state — canonical / deprecated-and-warned / deprecated-and-warned — and point at the canon. The nearby data-model-tier and conditional-formatting examples in the same file are already written in record.*, so no example needs rewriting; this is prose only.
⚠️ Two constraints a doer should carry:
skills/** is the published skills corpus — the maintainer's 2026-08-21 ruling applies (「对外发布的 skills 是整个平台的最大价值,尤其要整体考虑和评估。」 /「……不能为了一个小功能扩写很多。」). This should be a small net-line-count change, and the PR owes the two line-count readings that ruling requires.- The
${…}/On-suffix tier earlier in the same file is a different engine (SafeExpressionParser) where data.* is correct, and the flow tier (isFieldVisibleWhen, previews/screen-spec.ts) is a third. Only the List-view/CEL row-predicate tier is in question here. Do not let a fix bleed across those boundaries.
Refs
Generated by Claude Code
Filed as an out-of-scope finding by the dev seat working #5738 (session
session_01E7snar5mwF7qoXJazqKhys). Not assigned.What was found
While sweeping objectui's documentation corpus for Phase 0 of the row-predicate deprecation (#5738, PR #5758), the published skills guide
skills/objectui/guides/schema-expressions.mdwas found to describe the row-predicate binding like this, in the "List-view conditional tier" section (~line 305):That sentence is accurate about the binding and it already labels
record.*as canonical, so it is not "teaching a non-canonical spelling" and was correctly left alone by #5738's sweep. What it does not say is that, since PR #5737 landed, the other two spellings emit a one-time dev-console deprecation warning and are slated for retirement once a stored-metadata survey sizes the window (#5741 is the Phase 2 carrier).Why this is worth a card
This is the same contradiction #5738 exists to close, one surface over. An author reading the guide learns that three spellings are available and that one of them is "canonical" — a word that reads as a style preference. They then write
data.status, and the console warns them about a spelling the published guide just handed them as a working option.packages/core/src/evaluator/listConditional.tscorrected exactly this framing in its own docblock when Phase 1 landed:The skills guide still reads as though they were.
There is a second, sharper reason specific to
data.*. Perpackages/core/src/evaluator/rowPredicateCanon.ts,datais in@objectstack/formula'sSCOPE_ROOTS, so the server's authoring oracle silently accepts adata.*row predicate and it then binds nothing at runtime — not an error, a constantfalse. A guide that offers it as a peer spelling is pointing authors at the one arm that passes every authoring gate and still fails silently.Suggested shape (for triage, not a decision)
Annotate the three-way sentence with the deprecation state — canonical / deprecated-and-warned / deprecated-and-warned — and point at the canon. The nearby data-model-tier and conditional-formatting examples in the same file are already written in
record.*, so no example needs rewriting; this is prose only.skills/**is the published skills corpus — the maintainer's 2026-08-21 ruling applies (「对外发布的 skills 是整个平台的最大价值,尤其要整体考虑和评估。」 /「……不能为了一个小功能扩写很多。」). This should be a small net-line-count change, and the PR owes the two line-count readings that ruling requires.${…}/On-suffix tier earlier in the same file is a different engine (SafeExpressionParser) wheredata.*is correct, and the flow tier (isFieldVisibleWhen,previews/screen-spec.ts) is a third. Only the List-view/CEL row-predicate tier is in question here. Do not let a fix bleed across those boundaries.Refs
data.*spellings the new warning now flags #5738 / PR docs(plugin-form): Phase 0 of the row-predicate deprecation — stop teaching the bare shorthand (#5738) #5758 — Phase 0 of this deprecation, which found this and left it (outside its declared file surface)record.*, or do the bare shorthand anddata.*spellings stay? (the uncarried "#4075 step 3" question) #5330 — the canon ruling (2026-08-20, option B); PR feat(core,react): declarerecord.*the row-predicate canon and warn on the two deprecated spellings #5737 — Phase 1 (canon statement + warning)tablecolumn aliases — prose documents thenamefallback and the example authorslabel#5473 — the sibling in shape: the published skills corpus teaching a retired spellingpackages/core/src/evaluator/rowPredicateCanon.ts— the canon statement and the server accept-set measurementGenerated by Claude Code