Repository navigation
fix(plugin-grid,types): read bulk confirmText as a string or a template envelope - #13319
Merged
objectstack-fleet[bot] merged 2 commits intoOct 22, 2026
Merged
objectstack-fleet[bot] merged 2 commits into
objectstack-fleet[bot] merged 2 commits into
Conversation
…te envelope
The bulk confirm step now reads confirmText through bulkConfirmTextSource:
the string itself, or a { dialect: 'template', source } envelope's source
verbatim; a blank or absent value keeps the default sentence. Holes are not
filled yet. Step 1 of the landing order for objectstack#24947.
Refs #13183
… schema The zod-mirror parity ledger compares ObjectGridBulkActionDefSchema with BulkActionDef member for member, so the mirror takes the same string or template-envelope union.
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
|
Contributor
Author
Seat review — PASS · objectstack
|
objectstack-fleet
Bot
deleted the
claude/issue-13183-confirm-text-envelope-reader
branch
October 22, 2026 08:25
This was referenced Oct 22, 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.
Refs #13183
Step 1 of the landing order for objectstack-ai/objectstack#24947 (the order set in the seat-hold comment 6296947690 on objectstack-ai/objectstack#24798): objectui reads a bulk action's
confirmTextin both shapes, so objectstack's.objectui-shacan move past this before objectstack-ai/objectstack#24947 lands. The fill step of #13183 ({{ count }}, then the param roots) is not part of this PR, so #13183 remains open.What changes
@object-ui/types:BulkActionDef.confirmTextisstring | { dialect?: 'template'; source: string }. The envelope arm is the shape feat(spec,lint): a bulk action's confirmText is a template slot over count and its params, judged at validate, compile and the publish gate objectstack#24947 serves: there a bare string is shorthand for{ dialect: 'template', source }, and a parsed def carries the envelope (read fromBulkConfirmTextSchemain feat(spec,lint): a bulk action's confirmText is a template slot over count and its params, judged at validate, compile and the publish gate objectstack#24947'spackages/spec/src/ui/bulk-action.zod.ts; a blank string still parses as itself there).@object-ui/typeszod mirror:ObjectGridBulkActionDefSchema.confirmTexttakes the same two arms. Thezod-mirror-parityledger (assertionDriftMatchesLedger) compares the mirror with the interface member for member and went red on the type change alone. This file was not in the claim's declared file surface; it is the same member's mirror in the same package.@object-ui/plugin-grid: new helperbulkConfirmTextSource(incomponents/bulkConfirmText.ts) returns the string, or the envelope'ssourceverbatim, andundefinedwhen the value is absent, blank or has no stringsource. It follows the precedent of core'sformatTitleTemplate, which readstitleFormatasstring | { source }.BulkActionDialog's confirm step renders through it and keeps the default sentence (grid.bulk.confirmDefault) when it returnsundefined. Holes are not filled..changeset/13183-bulk-confirm-text-envelope.md(patch, types + plugin-grid).Behaviour change to note: a blank
confirmText(''or whitespace) used to render an empty description, because the dialog used??. It now shows the default sentence, as the claim asked.Other readers of a bulk def's confirmText
Grepped every
confirmTextinpackages/*/srcandapps/*/src.BulkActionDialogis the only place that reads a bulk def'sconfirmTextfor display. The others either read an object action'sconfirmText(a different slot; objectstack-ai/objectstack#24947 does not change it), for exampletoBulkActionDefinresolveBulkActions.ts, which forwardsaction.confirmTextonly when it is a string, or just destructure it away (stripCollectedActionKeysinObjectGrid.tsx). No other TypeScript module outside plugin-grid and types importsBulkActionDef. objectui has no i18n extractor for bulk defs; the extractor gap is on the objectstack side and objectstack-ai/objectstack#24947 fixes it.Verification (head fef2d04)
pnpm exec vitest run --maxWorkers=2 packages/types/ packages/plugin-grid/: Test Files 629 passed (629), Tests 12745 passed (12745).packages/plugin-grid/src/__tests__/bulkConfirmTextEnvelope-13183.test.tsx, 10 tests. Reader: string, envelope, envelope withoutdialect, blank string or blank source, absent or null, envelope with no source. RealBulkActionDialog: the envelope's source is the sentence and[object Object]is absent; a plain string renders unchanged; absent and blank keep the default sentence.def.confirmText(committed fix first, mutation checked on disk, then restored withgit checkout HEAD; restore proven by an emptygit diff HEADand a matching HEAD blob hash), 2 failed and 8 passed: "renders an envelope's source, never [object Object]" and "keeps the default sentence when the slot is blank".pnpm --filter @object-ui/types --filter @object-ui/plugin-grid run type-check: exit 0, both scripts named in the output, after building plugin-grid's dependency closure (13 turbo tasks).apps/console/src/__tests__/registry-inputs-spec-parity.test.ts: 260 passed.no-explicit-anyand hook warnings already in the files plus twoas anycasts in the new test). The repo-wide lint is left to CI.check:new-line-citations,check:control-bytes,check:spec-symbols,check:changeset-claims,check:pending-changeset-literals,check:unreferenced-sources,check:test-path-rootsandscripts/check-changeset-presence.mjsall exit 0.Acceptance notes
@object-ui/typesmember is widened ahead of the installed spec, which still types the slot as a plain string. The claim's order asks for this (a renderer that reads both shapes, Clause-2 no). When feat(spec,lint): a bulk action's confirmText is a template slot over count and its params, judged at validate, compile and the publish gate objectstack#24947 is released and pinned here, thestringarm stays: a bare string is still valid authoring.bbb06a1f1carries aRefs #13183line in its message body. Force-push is not allowed in this repo, so it stays.Generated by Claude Code