Repository navigation
fix(plugin-grid): over the 5000-record cap, the select-all-matching bulk bar says only the first 5000 matching records will be processed - #28606
Merged
Conversation
…ord cap when the match set is larger resolveBulkRows and the bulk bar now read one constant, BULK_SELECT_ALL_MATCHING_CAP. Over it, the select-all button, the banner, the count chip and the selection's context-menu label name the cap and the total; at or under it they keep today's text. Three new grid.* strings in all ten packs. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jTrUjyA3Jhqgsi86rz
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jTrUjyA3Jhqgsi86rz
Contributor
Author
|
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y Contract reviewServed-tier: ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Contributor
Author
|
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y 席位核对 · ACCEPT · 2026-11-01T08:02ZHead-sha:
Generated by Claude Code |
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.
Requested by Steedos · project thread
Fixes #28552
Clause-②: yes (widening)
Metadata-protocol: none
维护者速读
resolveBulkRows)读同一个常量BULK_SELECT_ALL_MATCHING_CAP。grid.*文案;取数逻辑、上限数值、接口都不变。回滚即还原本 PR。ui/packages/plugin-grid/src/components/BulkActionBar.tsx(overCap三处分支)、ui/packages/plugin-grid/src/bulkSelectAllMatchingCap.ts、BulkActionBar.selectAllMatchingCap-28552.test.tsx。pnpm --dir ui exec vitest run packages/plugin-grid/src/__tests__/BulkActionBar.selectAllMatchingCap-28552.test.tsx packages/plugin-grid/src/__tests__/bulkFanoutHostParams.test.tsx,预期 2 个文件、16 个测试全绿。What changes
ui/packages/plugin-grid/src/bulkSelectAllMatchingCap.tsholdsBULK_SELECT_ALL_MATCHING_CAP(5000) andexceedsBulkSelectAllMatchingCap(totalMatching).resolveBulkRowsinObjectGrid.tsxstops its paged fan-out at that constant (it was a local literal), and every string below reads the same constant. The module is not exported from the package entry.BulkActionBar): the select-all button readsgrid.bulkSelectAllMatchingCapped("Select the first 5000 of 7200 matching"), the banner after selecting readsgrid.bulkAllMatchingSelectedCapped("Only the first 5000 of 7200 matching records will be processed."), and the count chip readsgrid.bulkSelectedAllMatchesCapped("5000 selected (of 7200 matches)").SelectionContextMenuItemsinRowContextMenu.tsx) countedtotalMatchingwith the samegrid.bulkSelectedAllMatcheskey; over the cap it now reads the same capped key. This is the same defect on the second surface that renders the count, so it is fixed here.count, as before.@object-ui/i18n,gridnamespace, all ten built-in packs): three new keys interpolatingcapandtotal. They take nocount, so they are not i18next count families. Inruandarthe total stands alone (in parentheses or after a preposition with no noun) so no noun has to agree with it; the cap is always 5000.@object-ui/plugin-gridpatch,@object-ui/i18npatch. Nopackages/spec/**, no server change, no metadata key.Why
Ruling 6545938831 on #28345, item ④, verbatim: 「bulk-select-all-matching: file a product defect card — the banner names the cap (e.g. 「将处理前 5000 条」); the checklist gains one criterion pinning it.」 The checklist criterion rides #28551, not this PR.
Clause-② reading (measured on the built declaration closure, objectstack
a2e75562,turbo run build --filter='@object-ui/plugin-grid^...', 49/49 tasks): plugin-grid exports no language pack (itspackage.jsonhas only the.entry). The grid strings live in@object-ui/i18n, which publishes./localesand./locales/*and re-exportsenandtype TranslationKeys(typeof en) from its.entry; the builtdist/locales/en.d.tsdeclares each leaf as a readonly string literal. So the three new keys widen the published declaration ofenandTranslationKeys:Clause-②: yes (widening), as amended on the card's Claim. Nothing is narrowed and no metadata author surface moves:Metadata-protocol: none, patch.Tests
ui/packages/plugin-grid/src/__tests__/BulkActionBar.selectAllMatchingCap-28552.test.tsx, nine cases, strings read from the packs and the cap from the constant:zhthe banner reads thezhpack; the selection's context menu reads the capped key;bulkFanoutHostParams.test.tsx, "still honours HARD_CAP over a match set larger than the cap": in the same ObjectGrid run that delivers 5000 of 6000 records to the bulk delete, the banner now reads the capped key filled withBULK_SELECT_ALL_MATCHING_CAPand 6000, and the delivered length equals the constant. So the number shown and the number delivered are pinned in one run.Acceptance notes
canOfferSelectAllMatching), unchanged.Verification
All at head
a9224125(this branch mergedorigin/maincd065d36; the merge touched none of this diff's packages, and the delta against main is still these 17 files, +246 / -15), in a worktree, every build and test underscripts/pm/os-verify-lock.sh.Tests, ablations, type-check, lint
Tests 9 passed (9).node scripts/ablation-replace.mjs,BulkActionBar.tsx, anchorconst overCap = exceedsBulkSelectAllMatchingCap(totalMatching);replaced byconst overCap = false && exceedsBulkSelectAllMatchingCap(totalMatching);, anchor x1 to x0) over the new file andbulkFanoutHostParams.test.tsx:Tests 4 failed | 12 passed (16), the three bar cases over the cap and the fan-out case; the context-menu case stays green because it reads the cap on its own. Restored: blob equal to HEAD.RowContextMenu.tsx, anchor? exceedsBulkSelectAllMatchingCap(totalMatching)replaced by? false && exceedsBulkSelectAllMatchingCap(totalMatching)) over the new file:Tests 1 failed | 8 passed (9), the context-menu case. Restored: blob equal to HEAD.pnpm --dir ui exec vitest run packages/plugin-grid/(before the merge of main, at08c376a5):Test Files 270 passed (270),Tests 2349 passed (2349).pnpm --dir ui exec vitest run packages/i18n/(at08c376a5):Test Files 94 passed (94),Tests 1438 passed | 13 skipped (1451); this includescount-families-11445andall-locales-key-parity.a9224125: the new file,bulkFanoutHostParams,BulkActionBarandrowContextMenu-28434:Test Files 4 passed (4),Tests 41 passed (41).pnpm --filter @object-ui/plugin-grid run type-check && pnpm --filter @object-ui/i18n run type-check:VERDICT command-exit 0; plugin-grid'stsconfig.test.jsonlists both touched test files.enandzhpacks: 0 errors; the 30 warnings are existinganys, and this diff adds noany.pnpm check:new-line-citations(fromui/):0 new citation(s).Derived dispatch gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 35 commands over the 17 paths, the same list before and after the merge of main; every one exited 0, the 29 that are neither a suite nor a PR-body gate re-run ata9224125.--ran: 35 derived, 35 run, 0 NOT-MEASURED. The PR-body gates (check-closing-keyword-parity,check-adr-0087-registration --base origin/main,check-changeset-no-major --base origin/main,check-empty-changeset --base origin/main) ran against this body throughGITHUB_EVENT_PATH.pnpm --dir ui exec vitest run scripts/(at08c376a5; the merge of main changed no ui script):Test Files 169 passed | 2 skipped (171),Tests 4900 passed | 2 skipped (4902).node scripts/check-sdui-manifest.mjs: present and intact (106 components); CI's Build & E2E UI regenerates and compares it.pnpm check:type-check-debt(ata9224125):0 raw tsc error(s) total, none above its recorded number.🤖 Generated with Claude Code
https://claude.ai/code/session_01QsR2jTrUjyA3Jhqgsi86rz
Generated by Claude Code