Repository navigation
fix(spec): the ui-bulk-action-param-unknown-keys-refused migration text names the promoted field-backed bulk route - #22888
Merged
objectstack-fleet[bot] merged 2 commits intoOct 11, 2026
Conversation
…cked route The major-18 semantic entry ui-bulk-action-param-unknown-keys-refused said the bulk surface has no field-backed param route. Since objectui 29b99490 (carried by the console pin) a promoted bulk action resolves its field-backed params through the single-record dialog's resolver, and accept / maxSize arrive from the field. The replacement and reason clauses now say the AUTHORED bulkActionDefs[].params surface has no such route and name the promoted one, in the wording BulkActionParamSchema's rejection text uses. Claude-Session: https://claude.ai/code/session_01KNKBCRDJCu5tGy3TEbvtrF Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 139 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
…lk-param-route-text
Contributor
Author
Landing pre-checks at
|
objectstack-fleet
Bot
deleted the
claude/issue-22858-bulk-param-route-text
branch
October 11, 2026 22:31
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 #22858
Clause-②: no
What changed
Text only, in one file:
packages/spec/src/migrations/entries/semantic/18.ui-bulk-action-param-unknown-keys-refused.ts, the major-18 D3 entry thatobjectstack migrate metaprints. Two clauses said the bulk surface has no field-backed param route. Since objectui29b99490(an ancestor of the console pin), a PROMOTED bulk action resolves its field-backed params through the single-record dialog's resolver. Both clauses now say that the AUTHOREDbulkActionDefs[].paramssurface has no such route, name the promoted route, and name its two keys (accept/maxSizearrive from the field). The wording follows what581ca7d4e4landed inpackages/spec/src/ui/bulk-action.zod.ts: the module comment at:151-:170, thefieldguidance at:211-:221, and the widget-config prescription at:252-:267.Plus a
patchchangeset for@objectstack/spec. No regeneration commit:registry.ts,spec-changes.jsonand the upgrade guide are git-ignored.packages/spec/CHANGELOG.mdis not touched; it is release-owned.Before and after (evaluated strings, clause by clause; every other clause is byte-identical)
replacement, before:replacement, after:reason, before:reason, after:The diff also re-wraps two string-concatenation lines with no byte change to the evaluated text. That was proved by evaluating
entryat the base75b6d6a048and at this head, splitting each field at clause boundaries, and diffing: only the clauses quoted above differ, andsurface/acceptanceCriteriaare identical.The claim, verified at the console pin
.objectui-shaat the base is4997995022(the card was filed against0df67f237c; the pin has moved since).git merge-base --is-ancestor 29b99490 4997995022exits 0, which is self-proving even in a shallow checkout. All readings usegit show 4997995022:…in objectui:packages/plugin-grid/src/ObjectGrid.tsx:5174-:5183:resolveDialogParamscallsresolvePromotedBulkParams(def, { objectName, objects, fieldLabel, fieldOptionLabel, locale })when the dialog opens, for a def carryingactionDef(a promoted one).packages/plugin-grid/src/resolveBulkActions.ts:197-:212: that function passes the action's params toresolveActionParamsfrom@object-ui/fields, the single-record dialog's resolver, then maps each result throughtoBulkParam.accept/maxSizearrive.packages/fields/src/resolveActionParams.ts:781-:782(field-backed branch):accept: param.accept ?? field.accept,maxSize: param.maxSize ?? field.maxSize.resolveBulkActions.ts:172-:173:toBulkParamforwards both.packages/plugin-grid/src/components/bulkParamToField.ts:163,:167: the...extraspread carries them onto the widget's field bag.lookupFilters/lookupColumns/lookupPageSize/descriptionFieldare resolved, then dropped.resolveActionParams.ts:757,:759-:761resolve them (with the snakeid_fieldread at:756).toBulkParam(resolveBulkActions.ts:159-:175) emits none of them; its docblock at:146-:149says so.resolveActionParams.ts:766-:784, with the lookup extras at:754-:762) reads nomin,max,step,precision,scale,rows,crop,capture,dimensions,defaultName,allowCreate,picker,subtitleoravatarFieldoff the field.carryOver/defaultFromRow/requiresFeaturestay unimplemented on the promoted route too, which is why the replacement keeps that clause.toBulkParamforwards neithercarryOvernorvisible(the target thatrequiresFeatureis lowered into), and the resolver context atObjectGrid.tsx:5177-:5183passes norow, sodefaultFromRowhas nothing to read.STEP18_RATIONALEinpackages/spec/src/migrations/registry.ts.templatecarries no fragment for this entry: the sorted list goes fromui-ai-chat-window-retired(:2747) toui-form-layout-inline-grid-retired(:2762), and the template has zerofield-backedhits. So nothing moves there.The new text carries no tracker id.
packages/cli/test/migrate-meta-engine-guidance.test.tsrefuses a hash sign followed by four or five digits in the printed block.Verification
Every reading below is at head
30e041142c(base75b6d6a048), in a fresh worktree, with each verdict read from the tool's own line.@objectstack/specbuild (lock):VERDICT command-exit 0. It runsgen:migration-registry(build-migration-registry --self-test: ok, wrote 422 semantic entries). The new text is in the generatedregistry.ts(git-ignored) and indist/migrations(one hit each), and the old sentence has zero hits. The build leftgit statusclean.@objectstack/spectest (localproject): 648 files, 19375 passed, 1 todo, exit 0. typecheck: exit 0 (tsc --noEmit,check:scripts-typecheck,check:test-typecheckOK).scripts/step18-rationale-merge.test.ts(repoproject, the onerepotest that reads the template): 9/9 passed, exit 0.turbo run build --filter='@objectstack/cli^...' --concurrency=2: 58/58 tasks successful,VERDICT command-exit 0.packages/cli/test/migrate-meta-engine-guidance.test.ts(--project integration, after that build): 3/3 passed, exit 0. It spawnsos migrate meta --all, finds every semantic entry's block verbatim in stdout (this one included), and refuses a tracker id in it.node scripts/check-adr-0087-registration.mjs --base origin/main:this PR adds no declared-breaking changeset (1 non-breaking changeset(s) seen).node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(no paths): 82 commands, of which 81 were run, all exit 0. Three of them first answeredPREREQUISITE NOT MET(exit 3:doc-formula-expressions,dts-closure,lean-entry-closure, which need built workspace packages). They were re-run after the CLI closure build and exit 0.--ranreconciliation:82 derived, 81 run, 0 NOT-MEASURED, 1 UNRUN.pnpm check:dual-build-cjs-loads: NOT MEASURED, reason: it needs a whole-workspace build, which this dispatch rules out.dist(check:api-surface,check:authorable-surface,check:docs,check:spec-changes,check:upgrade-guide,check:liveness,check:strictness-ledgerand the rest, 18 in all) ran after the spec build.check:authorable-surfaceprints only the allowedbaseRev-lag info line.os-dev-reportcomment on the card, not here: this body is written once.origin/main: two commits have landed since the base (72b26ed4f5and40bc51f3f9). Neither touches either path in this diff. The PR's merge ref and the merge queue test the joint state.Acceptance notes
acceptanceCriteriais left untouched, as ruled. Its closing sentence still says that where a widget-config key's behaviour is gone, "the remedy is a spec issue asking for the key, not a local workaround". Foraccept/maxSizethere is now a second remedy: the landed prescription's "foraccept/maxSizemove the param onto a promoted action". Thereasonclause printed just above it now states that remedy, so the printed block is not wrong, only incomplete in its last sentence. Whether to align that sentence is a call for the reviewing seat. Carrier: the seat reviewing this PR. Noted here; no card is filed.Generated by Claude Code