Repository navigation
docs(spec): a promoted bulk lookup param carries its field's picker settings, and the spec now says so - #27255
Conversation
…r settings The bulk adapter's toBulkParam forwards lookupFilters, lookupColumns, lookupPageSize and descriptionField since the plugin-grid fix landed, so the BULK_PARAM_WIDGET_CONFIG_KEYS JSDoc, its refusal prescription, the list.bulkActionDefs liveness row and the v18 migration entry stop saying they are dropped. idField / titleFormat still do not travel. Prose only; the accept set does not change. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGufzh5MQsqK7dBe3KZ9Aa
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGufzh5MQsqK7dBe3KZ9Aa
📓 Docs Drift Check1 anchor(s) derived from 1 changed package(s); no hand-written page names any of them. What this run could not see
Coarse fallback — 148 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin dbe66a251a851f07014285798a8d7f6992911795 && git checkout dbe66a251a851f07014285798a8d7f6992911795
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 9ff8154cf694c616de5d467b35af21e037de1509 0b20e1f14256008e02bbb74712e5adaba7b94632 && git checkout -B drift-repro 9ff8154cf694c616de5d467b35af21e037de1509 && git merge --no-ff 0b20e1f14256008e02bbb74712e5adaba7b94632
node scripts/docs-audit/affected-docs.mjs --json 9ff8154cf694c616de5d467b35af21e037de1509 |
Contract reviewServed-tier: Inputs read: card #27050 (body, triage 6460237597, claim 6468678025, os-dev-report 6469779552), PR #27049 as merged ( ① Derived judgmentsEvery sentence the diff rewrites, judged against the cited reader on
Non-blocking observation (pre-existing wording, not introduced here): both the prescription and the entry end "…and the rest are never read off the field", while the resolver does read ② Semver level
Clause-②: no ③ Boundary flagsDev flags (os-dev-report 6469779552 and the PR body), each answered:
Required contexts on All 49 check-runs on the head completed (polled to completion, last read 13:30Z):
Advisory and informational runs: Landing: the file list touches no governed surface, so this record is the schema-face review the Clause-② queue gate's Implemented-by: VERDICT: PASS |
维护者速读 (席位终稿)
席位意见:接受。契约复核 PASS(6470336310):每句新文字在 main 上都有对应的读取方,旧说法在全仓库已清零,迁移条目的文字改动不影响任何门禁。 席位核对 · ACCEPT ·
|
Requested by Yibo Wang · project thread
Fixes #27050
Ruling-ref: none (triage 6460237597)
Claim: 6468678025
Clause-②: no
Metadata-protocol: none
维护者速读
bulk-action.zod.ts中BULK_PARAM_WIDGET_CONFIG_KEYS上方的 JSDoc 与拒收处方、liveness/view.json的list.bulkActionDefs行、v18 迁移条目ui-bulk-action-param-unknown-keys-refused的升级说明,改为:批量操作的字段型查找参数会把字段的lookupFilters/lookupColumns/lookupPageSize/descriptionField带到选择栏的选择器,与单条记录对话框一致;idField/titleFormat仍不带。packages/spec/src/ui/bulk-action.zod.ts(拒收处方字符串那一段)。git grep -n -E "dropped (by|on) the bulk|drops the lookup settings" -- packages ':!**/CHANGELOG.md'预期零命中。What changes
Prose only. The accept set of
BulkActionParamSchemadoes not change, and no key is added to or removed fromBULK_PARAM_WIDGET_CONFIG_KEYS.packages/spec/src/ui/bulk-action.zod.ts, JSDoc aboveBULK_PARAM_WIDGET_CONFIG_KEYS. The promoted route now carries the field's lookup settingslookupFilters/lookupColumns/lookupPageSize/descriptionFieldto the selection bar's picker, as the single-record dialog does. "From THIS list onlyacceptandmaxSizemake the trip" becomes "only those four andaccept/maxSize", "all but two of these keys" becomes "all but six", and "declare it on the field and let the dialog inherit" is right for those six. TheidFieldsentence stays:idFieldhas noFieldSchemaspelling, and the resolver's snakeid_fieldread is still not carried onto the bulk param.BULK_PARAM_WIDGET_CONFIG_KEYSrefusal prescription. It now lists the four picker settings among what the promoted route carries, says onlyaccept/maxSizeand those four arrive that way, and its remedy says "for one of those six move the param onto a promoted action".packages/spec/liveness/view.json, rowlist.bulkActionDefs. "…and drops the lookup settings." becomes "…and that field's lookup settingslookupFilters,lookupColumns,lookupPageSizeanddescriptionField, which reach the selection bar's picker as they reach the single-record dialog's (objectstack#26951);idField/titleFormatare still not carried."packages/spec/src/migrations/entries/semantic/18.ui-bulk-action-param-unknown-keys-refused.ts. Itsreplacementandreasonsaid onlyaccept/maxSizereach the dialog and the four picker settings are "resolved and then dropped on the bulk path". Both now name the six keys. This is the upgrade guidanceos migrate metaprints, so it ships in the package.packages/spec/src/ui/bulk-action.test.ts. One comment said "onlyaccept/maxSizemake that trip"; it now names the four picker settings too. The assertions are unchanged and still hold: the prescription still contains the textaccept/maxSize.@objectstack/specpatch (the prescription and the migration entry text ship in the package).Not touched: the
packages/spec/CHANGELOG.md/packages/rest/CHANGELOG.mdlines that quote the old text (release history).skills/**,content/docs/**andui/**hold no copy of the claim (grep below), so this PR is not governed. Nothing generated reads these strings: the grep finds no generated copy of the prescription, the JSDoc or the liveness note, so there is nothing to regenerate.Measure first
ui/packages/plugin-grid/src/resolveBulkActions.tstoBulkParamonorigin/maind745bb5e(PR #27049 merged asc4ad55ca, an ancestor:git merge-base --is-ancestor c4ad55ca HEAD→ exit 0):and its JSDoc: "
idField/titleFormatare still not carried: the resolver reads them off undeclared snake keys only, and no bulk reader has asked for them."toBulkParamhas noidFieldortitleFormatline. The resolver (ui/packages/fields/src/resolveActionParams.ts) fills them fromfield.id_fieldandfield.title_format, and the other four fromfield.descriptionField,field.lookupColumns,field.lookupFiltersandfield.lookupPageSize, whichFieldSchemadeclares (packages/spec/src/data/field.zod.tsL1823–1835).Copy sweep:
git grep -n -E "dropped (by|on) the bulk|resolved and then dropped|drops the lookup settings|dropped with the lookup settings|make the trip|only .?accept.? (and|/) .?maxSize"overpackages/**,ui/**,skills/**andcontent/docs/**, CHANGELOGs excluded. On base it found the three sentences on the card, the migration entry (two places) and the test comment. On head, every hit of the last two patterns names the six keys, and the first four patterns have zero hits (git grepexit 1).Verification
Base
origin/maind745bb5e; head0b20e1f14. Every reading below is from that head.Spec tests and typecheck
pnpm --filter @objectstack/spec buildunderos-verify-lock→ exit 0.pnpm --filter @objectstack/spec test && pnpm --filter @objectstack/spec typecheckunderos-verify-lock→VERDICT command-exit 0; Test Files 743 passed (743), Tests 22263 passed, 1 todo;check:test-typecheck: OK.test:reponot run locally: the diff edits no repo-project test and the derived list does not name it. CI's Test Core runs it.Gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack→ 83 commands, each run serially and recorded asCMD :: exit N.check-adr-0087-registration --base origin/main,check:liveness,check-changeset-no-major. Two first exited 3 on a prerequisite and were re-run after it was met:check-plugin-teardown-shape --self-test(pinned fixture commit fetched) → exit 0;check:doc-formula-expressions(formula and lint built) → exit 0.check:dual-build-cjs-loadsandcheck:lean-entry-closureexit 3, PREREQUISITE NOT MET (they load every package's built entry points, which needs a full build). CI's Build Core runs them.dispatch-gates --ran→✓ 83 derived famil(ies) accounted for — 81 run, 2 NOT-MEASURED.check-changeset-no-majorwith this body as a pull_request event → exit 0 (Metadata-protocol: none, patch).🤖 Generated with Claude Code
https://claude.ai/code/session_01WGufzh5MQsqK7dBe3KZ9Aa
Generated by Claude Code