Uh oh!
There was an error while loading. Please reload this page.
docs(skills): mark the two non-canonical row-predicate spellings as deprecated - #6865
Merged
zhuangjianguo merged 1 commit intoAug 30, 2026
Merged
Conversation
…eprecated
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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de
This was referenced Aug 30, 2026
os-zhuang
approved these changes
Aug 30, 2026
zhuangjianguo
marked this pull request as ready for review
August 30, 2026 07:26
Uh oh!
There was an error while loading. Please reload this page.
zhuangjianguo
deleted the
claude/issue-5759-row-predicate-deprecation-note
branch
August 30, 2026 07:39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#5759
Prose-only annotation of the three-way row-predicate sentence in the published skills guide
skills/objectui/guides/schema-expressions.md(List-view/CEL tier). It presentedrecord.status, barestatusanddata.statusas peers, labellingrecord.*merely "canonical" — a word that reads as a style preference — while since Phase 1 (#5330 / PR #5737) the other two emit a one-time dev-console deprecation warning and retire once a stored-metadata survey sizes the window.What changed
One sentence, at :307.
record.*is now stated as the canon; barestatusanddata.statusare stated as deprecated here (still bound, warned once in dev, retiring after the survey), pointing atpackages/core/src/evaluator/rowPredicateCanon.ts; and the card's sharper point is carried:data.*is the trap — the server's authoring oracle accepts it silently and it then binds nothing at runtime, a constantfalserather than an error."Deprecated here" is deliberate, not hedging:
rowPredicateCanon.tsscopes the deprecation to the runtime record layer, becausedatais the canonical root of a metadata-editing form (ADR-0089 D3). An unqualified sentence in this corpus would contradict that.No example was rewritten — the nearby data-model-tier and conditional-formatting examples are already
record.*.State verified on this branch, not taken from the card
The card was filed 2026-08-23; the words had to describe what is measurable now. Read at base
aca70f6:listConditional.ts:273still binds all three —{ ...(opts.scope ?? {}), ...rowObj, data: rowObj, record: rowObj }. No spelling has been retired or turned into a refusal, so "still bound" is accurate and "retiring after a stored-metadata survey" is the correct tense.listConditional.ts:317callswarnNonCanonicalRowSpelling(predicateText, rowObj, !opts.rowless, opts.label)on the CEL path, so both non-canonical spellings do warn on this tier, anddatanames the row here (notrowless), which is the condition the detector needs.rowPredicateCanon.tsstill reads Phase 1: "the binding is UNCHANGED and every spelling still resolves", warn-once, "removable only after a stored-metadata survey".Phase 2 (#5741) has not advanced past "warned".
Three-engine boundary held
Only the List-view/CEL row-predicate tier changed. The
${…}/On-suffix tier earlier in the file (SafeExpressionParser, wheredata.*is correct) and the flow tier (isFieldVisibleWhen,previews/screen-spec.ts) are untouched. The one-time-warning sentence at :316-317 belongs to legacy-syntax routing, a different mechanism from these spellings, and is untouched — the diff hunk stops above it.Line-count readings (2026-08-21 whole-package ruling)
PM-set budget for this card: +4 lines max net on the file.
skills/objectui/guides/schema-expressions.md(whole file).mdunderskills/git diff --stat: 1 file changed, 7 insertions(+), 3 deletions(-). The budget is met exactly; the wording was cut three times to reach it (measured by wrapping each candidate at the file's 78-column prose width before editing).Gates — each line is the gate's own verdict, re-run on the final commit
7bcfefcThe vitest set is every test file that reads this corpus:
packages/components/src/__tests__/skill-guide-data-table-binding.test.tsx,scripts/__tests__/check-skills-paths.test.ts,scripts/__tests__/check-control-bytes.test.ts,scripts/__tests__/doc-version-claims.test.ts.check-skills-pathsgot a positive control rather than a bare green: calling its own exportedextractPathTokenson the edited file returns the new token —{ line: 310, token: 'packages/core/src/evaluator/rowPredicateCanon.ts', pattern: false }— so the 94/95 verdict demonstrably includes the path this PR added.No changeset:
skills/**is not published source of a released package, and the gate says so in its own words above.Two declared narrowings
check:doc-snippetswas NOT RUN. Its own exit is 2 — "PRECONDITION NOT MET ... This is 'I could not run', NOT 'I ran and found errors'" — because it needs 21 package build closures, a repo-wide build this shared box cannot host in a foreground window. Instead its judged population was measured directly through its own exported extractor,scanFences:scanFencescollects onlyts/tsxfenced blocks; this file has exactly 1, at line 250 — above the edited hunk (307-313).aca70f6and 1 at head, samefenceLine250, bodies byte-identical.pnpm lintwas narrowed to nothing, on eslint's own answer.eslint --no-inline-config --format jsonon the changed file reports"File ignored because no matching configuration was supplied"— the repo's flat config matches no.mdfile at all, so the file count eslint judges in this diff is 0. No type-aware linting is configured, and the diff is one markdown file, so no untouched file's verdict can move either.CI runs the full farm regardless; these two are the cheap local half, declared rather than silently skipped.
Governed-face handling
Left as draft for the PM's review chain — not flipped ready, not queued, no auto-merge. Note for the record: this repo's
AGENTS.md§"受管面" explicitly places rootskills/**outside the governed surface (only.claude/**,AGENTS.md,CLAUDE.md,docs/adr/**are governed there) and would permit self-merge on green. The dispatch treats the published skills corpus as governed for this fleet's review chain, which is the stricter of the two, so draft-only satisfies both. Flagged so the divergence is visible rather than assumed.Generated by Claude Code