Uh oh!
There was an error while loading. Please reload this page.
docs(spec): wrong-layer guidance for group/hideFields/rowColor on object userActions - #12606
Conversation
…ect userActions (#11459) Add three curated `guidance` entries to the object-level `userActions` strictObject in packages/spec/src/data/object.zod.ts, mirroring the existing sort/search/filter/editInline wrong-layer wording convention: group, hideFields and rowColor are VIEW `userActions` keys (adopted at #11195) that share a name with nothing on the object block, so an author who learned them on the view writes them here and previously got only the generic unknown-key rejection. Nothing changes about what parses — all three keys were already refused by name on the object block; only the refusal's message gains the same curated pointer the other four wrong-layer keys already carry. Mirrors the existing pin for `sort` with a new test asserting the "VIEW" pointer for all three keys, alongside the pre-existing disjoint-vocabulary check. The #5013 alias-integrity audit judges the three new entries automatically (each is a key the object shape rejects).
…ject-useractions-guidance
📓 Docs Drift CheckThis PR changes 1 package(s): 2 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 3 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 126 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 36b8799dd04d06ec620746aa9672ad953928632d && git checkout 36b8799dd04d06ec620746aa9672ad953928632d
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 23d52f99c728d3af6acb14594726993be515de36 a413af29ca951b819a2cb611fc59069884cd3afd && git checkout -B drift-repro 23d52f99c728d3af6acb14594726993be515de36 && git merge --no-ff a413af29ca951b819a2cb611fc59069884cd3afd
node scripts/docs-audit/affected-docs.mjs --json 23d52f99c728d3af6acb14594726993be515de36
|
os-zhuang
commented
Aug 27, 2026
Contract review released by the maintainer (2026-08-27, in-session, verbatim 「12606 绿了」) — Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#11459
What
Adds three curated
guidanceentries to the object-leveluserActionsstrictObjectinpackages/spec/src/data/object.zod.ts—group,hideFields,rowColor— mirroring the existingsort/search/filter/editInlinewrong-layer wording convention.Why
ui/view.zod.ts'sUserActionsConfigSchemaadoptedgroup/hideFields/rowColorat #11195 (merged via #11458). Those three keys share a name-collision trap with the object block's ownuserActions(disjoint vocabulary, same key names elsewhere): an author who learned them on the view writes them on the object and, until this PR, got only the generic unknown-key rejection with an edit-distance suggestion — which has nothing useful to offer over the object block'screate/import/edit/delete/exportCsvshape.Acceptance is byte-identical. All three keys were already rejected by name on the object block before this change (measured on
origin/mainpre-PR) and are rejected after it; only the refusal's message gains the same curated pointer the other four wrong-layer keys already carry. Clause-② does not apply — the accept/reject set does not move.Changes
packages/spec/src/data/object.zod.ts— threeguidanceentries (group,hideFields,rowColor), placed aftereditInline; updated the block's leading comment to note the three keys now carry curated pointers too.packages/spec/src/data/object-strictness-batch20.test.ts— new testuserActions.group / .hideFields / .rowColor name the VIEW block, same as sort (#11459), asserting the "VIEW" pointer for all three, mirroring the existingsortpin. The pre-existing disjoint-vocabulary test (which already asserted these three are rejected by name) is untouched..changeset/object-useractions-view-key-guidance.md— patch changeset, following the precedent set by the prior pure-guidance-text change (visible-when-alias-guidance.md, docs(spec): alias guidance for visible/showWhen/disabled on the visibleWhen shapes (#7832) #7884): guidance/describe-text changes on@objectstack/specget a real changeset, notskip-changeset.Verification
Local commands run under
scripts/pm/os-verify-lock.sh, on merge commita413af29c(merge base23d52f99coforigin/main):pnpm --filter @objectstack/spec build— clean, 34/34 declared.d.tspresent.pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 src/data/object-strictness-batch20.test.ts src/shared/alias-integrity.test.ts src/data/object.test.ts— 253 passed (253), including the ReportSchema 的filter别名指向filters—— 一个 ReportSchema 同样拒绝的键(#4001 战役自己的假处方,第 5 例) #5013 alias-integrity audit (no guidance key is itself a declared key— the three new entries are keys the object shape rejects, so they pass automatically) and the new pin.pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2(full package) — 432 test files / 11499 tests passed.pnpm --filter @objectstack/spec check:generated— all 14 generated artifacts up to date, no regeneration needed (guidance prose is not a.describe()/authorable key).pnpm --filter @objectstack/spec run typecheck— clean (tsc --noEmit,check:scripts-typecheck,check:test-typecheck).pnpm build(needed as a prerequisite forcheck:dev-prereqs/check:type-check-debt) — 71/71 tasks successful.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackderivation, and every gate it named for this diff — all green:check:authorable-surface,check:cross-package-test-inputs(both the pnpm script and the raw script invocation),check:doc-authoring,check:doc-formula-expressions,check:empty-state,check:liveness,check:merge-driver,check:objectql-double-limit,check:page-declaration-shape,check:published-files,check:slot-lookup,check:spec-parsed-alias,check:strictness-ledger,check:test-source-alias,check:type-source-resolution,check:variant-docs,check:ci-filter-parity,check:comment-mask-adoption,check:dev-prereqs,check:plugin-teardown-shape,docs-audit/check-affected-docs,docs-audit/check-drift-comment.check:type-check-coverage(OK),check:type-check-debt --re-measure(31 ledger entries re-measured, none above their recorded ceiling),check:query-options-erasure,check:engine-double-contract(689 pinned / 134 debt / 3 exempt, unchanged),check:where-matcher(303/303) — all green.check:changeset-gate-self-tests,check:objectui-changeset,check-adr-0087-registration.mjs,check-changeset-no-major.mjs,check-empty-changeset.mjs,release-rehearsal-clone.mjs --self-test— all green.eslint --no-inline-configover the two touched source files (object.zod.ts,object-strictness-batch20.test.ts): 0 errors / 0 warnings, 2 files (per--format json). Collapse to this scope is a measured, not assumed, safe narrowing:eslint --print-configon the touched file confirms noparserOptions.projectis set for this tree (no type-aware linting), so the diff cannot move any judgment on an untouched file.grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]') — clean.Per this batch's constraints,
packages/spec/src/api/**andpackages/rest(sibling PR #12605's surface) are untouched, andcontent/docs/releases/**is untouched.Generated by Claude Code