Repository navigation
fix(plugin-grid): fill a bulk confirmText's param holes with the params' display values - #26217
Merged
Merged
Conversation
… run's record count
The bulk dialog printed an authored confirmText as written, so a template
slot's {{ count }} reached the person as braces. bulkConfirmText now fills
the slot over the protocol's bulk-confirm count root through core's
fillTemplateHoles (the shared template engine, whitelisted formatters, no
logic), keeping a hole-less sentence, the default sentence and a refused
source as they were. Param roots stay unbound at this step.
Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS
Co-authored-by: Claude <noreply@anthropic.com>
… change Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS Co-authored-by: Claude <noreply@anthropic.com>
…-0ml7qr # Conflicts: # scripts/sdui-manifest.record.json
Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS Co-authored-by: Claude <noreply@anthropic.com>
…-0ml7qr # Conflicts: # scripts/sdui-manifest.record.json
Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS Co-authored-by: Claude <noreply@anthropic.com>
…-0ml7qr # Conflicts: # scripts/sdui-manifest.record.json
Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS Co-authored-by: Claude <noreply@anthropic.com>
…-0ml7qr # Conflicts: # scripts/sdui-manifest.record.json
Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS Co-authored-by: Claude <noreply@anthropic.com>
…-0ml7qr # Conflicts: # scripts/sdui-manifest.record.json
…ging main Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS Co-authored-by: Claude <noreply@anthropic.com>
…ms' display values bulkConfirmText now fills the protocol's whole bulk-confirm scope (bulkConfirmTemplateRoots): count, then each param bound to its display value: option label (multi joined with ', '), a picker's resolved record name (the id until it resolves), the entered value otherwise so the engine's formatters apply. count wins over a param of that name. Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
席位核对ACCEPT ·
|
…-0ml7qr # Conflicts: # scripts/sdui-manifest.sources/plugin-grid.json
…ging main Claude-Session: https://claude.ai/code/session_016zsTRTJ3SP3dpjEkyLrzWS Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
|
Seat 2 · head update · 2026-10-26T18:46Z Patch round at head
Seat's route: ready + auto-merge. #25884 follows on the plugin-grid line. |
This was referenced Oct 26, 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.
Requested by Steve · project thread
Fixes #25942
Clause-②: no
Metadata-protocol: none
What
Step 2 of ruling B on #24798, the renderer half. Step 1 was #26030, merged as
66769910. A bulk action'sconfirmTexthole that names one of the def's params is now filled with that param's display value, following the rule the spec states on the slot (packages/spec/src/ui/bulk-action.zod.ts, theconfirmTextdescribe).ui/packages/plugin-grid/src/components/bulkConfirmText.ts:bulkConfirmParamDisplayValue(param, value, lookupLabels):label, and a multi-value param shows its labels joined with ', ';lookup/ user param shows the picked record's display name from the confirm step's resolved names, and the id until that name resolves;{{ amount | currency:EUR }},{{ due | date:iso }});undefined, so it prints empty and{{ x | default:'none' }}can name it.bulkConfirmTemplateScope(scope)builds the roots over the spec's closed scope,bulkConfirmTemplateRoots. It writescountlast, socountwins over a param of that name, as the spec declares.bulkConfirmText(confirmText, { count, params, values, lookupLabels })fills the slot throughfillTemplateHoles, exactly as in step 1.BulkActionDialog.tsxpassesparams,valuesandlookupLabelsinto the confirm sentence. The lookup names that resolve after the confirm step opens re-render the sentence, because it is computed in render.scripts/sdui-manifest.sources/plugin-grid.jsonis re-recorded (node scripts/gen-sdui-manifest-node.mjs). Nothing else in the manifest set moved..changeset/25942-bulk-confirm-param-holes.md,@object-ui/plugin-gridpatch.The ruling, verbatim: "Nothing else moves: no CEL inside holes, no change to the default text, no change to where the confirm step sits." The default sentence, the confirm step and the value summary under it (
describeValue) are untouched, and the display value is computed apart fromdescribeValue, whose output is a string and would not take a formatter.Verification (head
4a874ae1)bulkConfirmParams-25942.test.tsx, with 10 tests:defaultformatter naming it;countwinning over a param namedcount; a hole outside the closed scope printing empty.Move 2 account(s) to Silver?), and a lookup name arriving after the step opened (… to u1?, then… to Ada Lovelace?, withfindOne('sys_user', 'u1')).bulkConfirmParams-25942,bulkConfirmCount-25942,bulkConfirmTextEnvelope-13183): Test Files 3 passed, Tests 30 passed.aaf4a4ac, run withscripts/ablation-replace.mjs; each leg was restored to its HEAD blob andgit status --porcelaincame back empty:{ count: rows.length }(anchor 1 → 0, blob76a683a69c71→c1b43e1f66ea):Tests 2 failed | 8 passed(both dialog tests).393b2f5ce8bb→557d7171d747):Tests 5 failed | 5 passed.cd ui && pnpm exec vitest run --maxWorkers=2 packages/plugin-grid/gave Test Files 251 passed (251), Tests 2246 passed (2246), VERDICT command-exit 0.pnpm --filter @object-ui/plugin-grid run type-checkexited 0, afterpnpm --filter '@object-ui/plugin-grid^...' run build, under the same lock run as the re-record.node scripts/check-sdui-manifest.mjsexited 0.4a874ae1: 47 commands, all exit 0.--ranwith exit codes reports 47 derived, 47 run, 0 NOT-MEASURED, 0 UNRUN. CI owns the type-check lanes,Test Coreand the repo-wide scans.Acceptance notes
en-US, and a param namedlocalewould set the locale for the whole sentence. The seat ruled that this is fixed in the engine on its own card, so it is not folded in here.true/false, and an array value on a param with no options is joined with ', '. Both follow the spec's "the entered value otherwise".ObjectGrid.tsx,ui/.github/**and the rootci.yml.Generated by Claude Code