Uh oh!
There was an error while loading. Please reload this page.
fix(plugin-grid): rowActionDefs is non-author surface, and stays read (#5091) - #5379
Merged
Merged
Conversation
#5091) The maintainer ruling of 2026-08-19 on objectui#5091 keeps `rowActionDefs` out of `GRID_QUERY_INPUTS`, knowingly reversing the 2026-08-18 line that had sent it in as `bulkActionDefs`'s "symmetric partner". Measurement falsified that premise: `app-shell/src/views/ObjectView.tsx:1968` DERIVES the key from `objectDef.actions` filtered by `locations: ['list_item']` while passing `bulkActionDefs` through from the view author, the spec's `strictObject` accepts `bulkActionDefs` and rejects `rowActionDefs` by name, and `@object-ui/types` declares only the former. Exemption comments at both read sites, and four more assertions in `gridNonAuthorKeys.test.tsx` covering the key. The fourth is the one with teeth: the renderer must STILL READ the key, on both of its channels — the row menu (`resolveLegacyRowActions`) and the `$select` projection (a def's `visible` predicate names fields no column shows). Deleting a read is what would silently blank a stored document. `GRID_QUERY_INPUTS` is byte-for-byte unchanged and every `ObjectGrid.tsx` edit is a comment (41 insertions, 0 deletions), so nothing generated moves and nothing publishes. Empty-frontmatter changeset accordingly. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RV6yuVCxymHYE16PL9vQkE
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
os-support-ai
marked this pull request as ready for review
August 20, 2026 03:10
Uh oh!
There was an error while loading. Please reload this page.
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#5091
The card's last open key. PR #5241 landed the other three; this one finishes it.
The ruling this executes
Maintainer, 2026-08-19, over the 27-card decision-inbox review, verbatim 「全部接受」
(comment 5339680589):
Option A —
rowActionDefsis non-author surface.That knowingly reverses one line of the maintainer's own 2026-08-18 ruling on
this same card, which had directed the key into
GRID_QUERY_INPUTSas the"symmetric partner" of
bulkActionDefs. The reversal was flagged as a reversalwhen it was accepted, because the symmetry premise had been falsified by
measurement. Nothing here re-derives it; the three measurements are recorded so a
future reader who finds the older ruling knows they have found history rather
than a contradiction.
What lands
packages/plugin-grid/src/ObjectGrid.tsxpackages/plugin-grid/src/__tests__/gridNonAuthorKeys.test.tsx.changeset/grid-row-action-defs-non-author-5091.mdGRID_QUERY_INPUTSis byte-for-byte unchanged (git diff origin/main -- packages/plugin-grid/src/index.tsxis empty), so the generated manifest and
sdui-intrinsics.d.tsdo not move andnothing publishes.
The read sites, located from the tree
The card body said
:748(twice) and:984; a round-6 re-measure said:803and
:1039; PR #5241 then added 45 lines of comments to the file. Both were stale.Measured on this branch's parent, the two cast reads are:
mainrowActionDefsListseed — the card's ":748 twice" is one line with two casts:838resolveLegacyRowActions→ the row menugetSelectFields, intolistViewPredicates(...):1074visiblepredicate adds its operands to$selectAfter the comments they sit at
:870and:1115. Neither read was deleted —that is the point of the fourth assertion, and the two are genuinely separate
channels, which the ablations below prove rather than assert.
Ablations — predicted before running, all three matched exactly
Predictions were written down before any of them was executed.
rowActionDefsList := [])$selectpin green.1 failed / 19 passed— exactly that testlistViewPredicates)$selectpin; render pin green. Plus 1 red inrecordIdFieldProjection.test.tsx2 failed / 24 passed— exactly those twoGRID_QUERY_INPUTS4 failed / 81 passed— exactly those, withexpected [ 'rowActionDefs' ] to deeply equal []A3's spec-rejection assertion staying green while the manifest pins go red is
the asymmetry the ruling rests on, reproduced independently: the spec is an
untouched published dependency, so declaring the key in objectui alone puts the
manifest at odds with the gate that stores the document.
Every leg was taken from the committed state and restored with
git checkout branch -- path;git statuswas empty after each restore, and allthree files are green again at the head below.
Build artifact between an edit and the thing under test: none, on every leg —
checked here rather than inherited from PR #5241. Root
vitest.config.mts:246-274aliases every
@object-ui/*to that package'ssrc/, and the suite imports../ObjectGridrelatively, so nodistis in the resolution path. Each ablation'sred is itself the positive proof: a stale artifact would have kept it green.
Verification — all at
33d48d662, tree cleanRun from the repo root throughout:
packages/plugin-gridowns a standalonevitest.config.tsthat does not re-export the root config, so a package-scopedrun would execute a different config than CI does.
pnpm exec vitest run packages/plugin-grid/→ 81 files, 726 tests passedpnpm exec vitest run apps/console/src/__tests__/registry-inputs-spec-parity.test.ts→ 65 passed — unmoved, the same 65 as before and after PR test(plugin-grid): record the three grid keys ruled non-author surface, and stop at the fourth #5241. An unchanged gate count is the positive evidence that option A publishes nothing.pnpm --filter @object-ui/plugin-grid type-check→ exit 0 (dependency closure built first — a fresh worktree answersCannot find module '@object-ui/types'otherwise)pnpm --filter @object-ui/plugin-grid lint→ 0 errorscheck-changeset-presence→ names the empty frontmatter as "the explicit exemption and a complete answer to this gate";check-changeset-no-major,check-changeset-fixed,check-control-bytes,check:phantom-deps,check:self-import,check:esm-specifiers,check:spec-symbols,check:action-forward-parity→ all OKcheck:published-distwas not run locally (it builds every published package,over budget on a shared container); the touched test file sits in the directory
that package's tsconfig already excludes, and CI runs it.
Out of scope, and untouched
schema.onNavigatebelongs to #5234 andschema.userActionsto #5240 — both arestill awaiting their own first grading. Neither is addressed here, and neither
appears in this diff.
Generated by Claude Code