Filed by the os-dev implementing objectui#5741 (dispatch of session_01BAZFhALsQsGqxui8sNqM8s). Observation class: comment prose only, no behaviour. These files are outside #5741's declared surface (its scope is the two binding sites, the canon module, the pins and the changeset; app-shell source is read-only on that card), so the stale prose is recorded here rather than edited there. No assignee.
Blocked-by: #5741
The prose that goes stale when #5741 lands
Once usePredicateRecordContext returns { record: row } and evalRowPredicate's scope bag is { ...hostScope, record: rowObj }, every comment that says the row is "bound the three canonical ways" describes a binding that no longer exists. Sites, measured on origin/main 52cac388:
Each is a one-sentence rewrite to "bound as record.* through the shared helper (objectui#5741)"; the helper's own docblock in packages/react/src/hooks/useExpression.ts already carries the full statement after #5741, so the sites can point rather than restate.
One related observation, not a defect claim
page:header (containers.tsx, the headerPredicateScope memo) also builds a ctx.* namespace — ctx: { user, record: predicateRecord, data: predicateRecord, … } — as a server-CEL-parity alias (objectui#2358). After #5741 the top-level data no longer names the row, but ctx.data still does, on that one surface. That is a separate namespace with its own rationale and was not part of the #5330 / #5741 ruling; it is noted here so the next reader of the canon does not mistake it for a missed binding site.
Filed by the os-dev implementing objectui#5741 (dispatch of
session_01BAZFhALsQsGqxui8sNqM8s). Observation class: comment prose only, no behaviour. These files are outside #5741's declared surface (its scope is the two binding sites, the canon module, the pins and the changeset; app-shell source is read-only on that card), so the stale prose is recorded here rather than edited there. No assignee.Blocked-by: #5741
The prose that goes stale when #5741 lands
Once
usePredicateRecordContextreturns{ record: row }andevalRowPredicate's scope bag is{ ...hostScope, record: rowObj }, every comment that says the row is "bound the three canonical ways" describes a binding that no longer exists. Sites, measured onorigin/main52cac388:packages/components/src/renderers/action/action-button.tsx:82— "bound the three canonical ways —record.status, bare …"packages/components/src/renderers/action/action-group.tsx:75,:160("Same three-way binding asInlineActionButton"),:230packages/components/src/renderers/action/action-icon.tsx:76packages/components/src/renderers/action/action-menu.tsx:81,:196packages/components/src/renderers/layout/containers.tsx:1443-1445— "The record binds three ways insideevalRowPredicate—record.status(spec/canonical), barestatus(the row-action shorthand) anddata.status(legacy)"packages/plugin-detail/src/renderers/record-alert.tsx:194-199— the finding: record:alert 是唯一没接 #4075/#4077 行绑定的谓词面 —— 裸 { record } 作用域下 row-action 简写与 data.* 拼法 unbound,fail-soft 使作者门控的横幅永远显示 #4807 rationale ("the two spellings objectui#5330 kept never reached the row")packages/react/src/SchemaRenderer.tsx:638— points at "whatusePredicateRecordContextstates for theuseConditiontier" (the statement it points at has changed, the pointer still resolves)packages/app-shell/src/views/DeclaredActionsBar.tsx:138— "the record bound the THREE ways the platform's row surfaces bind it" (app-shell source, read-only on Carrier for Phase 2 of the row-predicate deprecation: the stored-metadata survey that must size the removal window before any spelling retires #5741)Each is a one-sentence rewrite to "bound as
record.*through the shared helper (objectui#5741)"; the helper's own docblock inpackages/react/src/hooks/useExpression.tsalready carries the full statement after #5741, so the sites can point rather than restate.One related observation, not a defect claim
page:header(containers.tsx, theheaderPredicateScopememo) also builds actx.*namespace —ctx: { user, record: predicateRecord, data: predicateRecord, … }— as a server-CEL-parity alias (objectui#2358). After #5741 the top-leveldatano longer names the row, butctx.datastill does, on that one surface. That is a separate namespace with its own rationale and was not part of the #5330 / #5741 ruling; it is noted here so the next reader of the canon does not mistake it for a missed binding site.