Repository navigation
fix(plugin-list): an ungrouped list asks for the declared nameField - #13158
Merged
objectstack-fleet[bot] merged 1 commit intoOct 20, 2026
Merged
Conversation
ListView's $select harvest gains a declaredNameField(objectDef) arm, through addSpeculative's known-field and FLS gates, so the bulk confirm step names records instead of falling to the Record #ID floor when no column shows the name field. Fetched, not drawn. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
objectstack-fleet
Bot
deleted the
claude/issue-13116-listview-namefield
branch
October 20, 2026 05:17
This was referenced Oct 20, 2026
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 free
to 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 #13116
Clause-②: no
What this changes
An ungrouped list view fetches its rows through
plugin-listListView. Its$selectharvest (addSpeculative) had arms for view bindings, grouping,rowColor,settledWhenandreferenceVia, but none for the object's declarednameField. So when no column showed that field, the rows arrived without it, and the bulk confirm step (BulkActionDialog, objectui#13107) fell to theRecord #IDfloor.This adds one arm,
addSpeculative(declaredNameField(objectDef)), beside thereferenceViaarm.declaredNameFieldis the same@object-ui/corehelperObjectGridgetSelectFieldsuses for this field (PR #13112), and plugin-list already imports@object-ui/core. The arm goes through the gates every other arm uses: the known-field gate (the object must declare it) and the FLS gate (the viewer may read it). It is fetched, not drawn: it joins the projection, not the columns.requiredis a set, so anameFieldthat is already a column is sent once. Nothing else moves; no export, prop or type member is added.Pins (
packages/plugin-list/src/__tests__/ListView.nameFieldSelect-13116.test.tsx)The data source honours
$selectthe way a server does: a row carries the selected keys only. plugin-list does not depend on plugin-grid, so a stub grid stands in, and the confirm step's name is asked of the rule that step applies (recordDisplayValueAt(row, declaredNameField(def)), thengetRecordDisplayName) against the rows the grid is handed. The real dialog is pinned on plugin-grid's side bybulkConfirmNameField-13107.test.tsx.full_nameasnameField, columnsfirst_name/last_name/title: the$selectcarriesfull_name, no grid column is drawn for it, and the rows nameJohn SmithandMarcus Reed.nameFieldsends the same$selectas before (body,id,subject).nameFieldthat is a column is sent once.Ablation (one-off, via objectstack
scripts/ablation-replace.mjs; no permanent test)Dropped the arm (anchor
addSpeculative(declaredNameField(objectDef));, count 1 to 0). Blobecffd5bc77e4became978e1d188f1f. Pin (a) went red:expected [ 'first_name', 'id', …(2) ] to deeply equal [ 'first_name', 'full_name', …(3) ]; the two controls stayed green (1 failed, 2 passed). Restored: blob equals HEAD (ecffd5bc77e4),git diff HEADempty, anchor count back to 1.Gates (head
00aa971518)pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-list^...' build: exit 0.pnpm --filter @object-ui/plugin-list run type-check(tsc --noEmit && tsc -p tsconfig.test.json): exit 0.--listFileson the test config lists the new test file.$selectfamily (the 26 plugin-list test files that name$select, the new one included): 26 files, 430 tests passed.packages/plugin-list/directory: NOT MEASURED locally. It ran past the foreground ceiling on the shared test lock and was stopped; it is declared to CI.--no-inline-config,--format json): 2 files, 0 errors.ListView.tsxcarries 205 warnings, the same count as onorigin/main. The config is not type-aware, so this diff moves no verdict on an untouched file.check:phantom-deps,check:self-import,check:unreferenced-sources,check:doc-example-readers,check:handler-key-reads,check:side-effects-array,check:element-data-source-declaration,check:spec-symbols,check:action-forward-parity,check:designer-field-key-parity,check:icon-record-names,check:i18n-keys,check:i18n-drift,check:i18n-designer-parity,check:control-bytes,scripts/check-hand-rolled-comment-mask.mjs,scripts/check-changeset-fixed.mjs,scripts/check-changeset-presence.mjs,check:new-line-citations.check:spec-floors: exit 1,no-artifact(the workspace is not fully built here). Recorded, not fixed, per the dispatch.Acceptance notes
@object-ui/plugin-listpatchchangeset:.changeset/13116-listview-namefield.md.Implemented in session
https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB.Generated by Claude Code