Repository navigation
docs(spec): ActionSchema.params states the same-name param rule - #28752
Conversation
Co-Authored-By: Claude <noreply@anthropic.com>
…tion Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
… same-name sentence Co-Authored-By: Claude <noreply@anthropic.com>
📓 Docs Drift Check1 anchor(s) derived from 1 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run. What this run could not see
Coarse fallback — 168 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 878b64eed05f134b2b1395196a54af2159bbf599 && git checkout 878b64eed05f134b2b1395196a54af2159bbf599
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 7e6e8a464799af6271410ec6b4b3e119716e2f3a 157212e35382baefae19cf88da5c942d587fcaf5 && git checkout -B drift-repro 7e6e8a464799af6271410ec6b4b3e119716e2f3a && git merge --no-ff 157212e35382baefae19cf88da5c942d587fcaf5
node scripts/docs-audit/affected-docs.mjs --json 7e6e8a464799af6271410ec6b4b3e119716e2f3a |
|
domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH Contract reviewServed-tier: Inputs read: card #28732 body and its three comments (triage ① Derived judgments
② Semver level
Clause-②: no — judged from the tree, not from the PR body: the authoring input type of ③ Boundary flags
④ Design judgment
Each clause of the sentence, read against the code:
Attempts to break it:
Findings:
Implemented-by: VERDICT: PASS |
|
domain:server#3 · os-project-manager · session_01FEkQ5kE5BrPUPNMMyv6oCH 席位核对 · ACCEPT · PR #28752 · 2026-11-01T17:32ZHead-sha: 维护者速读(席位终稿)
核对六项
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 41332169945 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by Leehom · project thread
Fixes #28732
Clause-②: no
Metadata-protocol: none
维护者速读
ActionSchema.params的描述多了一句同名参数规则:参数名(name,或字段型参数的field)只能为同一个输入的按门控分身重复(visible/requiresFeature不同);只有每一处声明都必填时才算必填;值形状按第一处声明(type、multiple、options)。生成的参考文档随之更新。validateActionParams按这条规则合并同名声明,但规则只写在校验函数的注释里。写动作元数据的作者和 AI 读的是 schema 描述,看不到它。packages/spec/src/ui/action.zod.ts(params的.describe()那一行);content/docs/references/ui/action.mdx(生成的参考表)。grep -n "may repeat only for per-gate variants" content/docs/references/ui/action.mdx,预期两行(Action与InlineAction两张表的params行)。What changes
packages/spec/src/ui/action.zod.ts: theparamsmember's.describe()keeps its first sentence and gains one more, stating the rulevalidateActionParams(packages/spec/src/ui/action-params.zod.ts) has applied since fix(platform-objects): Setup Create User marks Email required while phone sign-in is off #28707: a param name (itsname, or thefielda field-backed param reads) may repeat only for per-gate variants of ONE input, declarations that differ invisible/requiresFeature; the params check treats the name asrequiredonly when EVERY declaration requires it, and judges the value by the FIRST declaration's shape (type,multiple,options), so that shape should stay identical across them.pnpm --filter @objectstack/spec gen:schema && gen:docs, no hand edits:content/docs/references/ui/action.mdx(two rows:ActionandInlineAction),ui/component.mdx,data/object.mdx,kernel/metadata-plugin.mdx. The JSON Schema underpackages/spec/json-schema/is build output, not tracked, and carries the same text after a build..changeset/28732-action-params-same-name-rule.md:@objectstack/specpatch. The description ships: it is indist(the zod.describe()), injson-schema/and insrc/**/*.zod.ts, all in spec'sfiles[].Tests
No behaviour moved, so there is no new test and no ablation (os-dev: a description is not tested behaviour). The suites that read the schema stay green at head
157212e3:pnpm --filter @objectstack/spec test:Test Files 785 passed (785),Tests 23206 passed | 1 todo (23207).pnpm --filter @objectstack/spec typecheck: exit 0,check:test-typecheck: OKwith the ledger held.eslint packages/spec/src/ui/action.zod.ts --no-inline-config: exit 0.Acceptance notes
name; the only repeated name in the tree,sys_user.create_user'semail, is declared throughfield({ field: 'email', … }twice). The resolver keys byname ?? field(ResolvedActionParam.name: "inlinename, or the resolved field name"), so the sentence names both spellings. Without it an author reading "a paramnamemay repeat" could not tell a field-backed repeat falls under the same rule.create_user'semail, and its two declarations read the same field, so their shape cannot differ. No producer writes a drifting pair, so no open question is raised (「新增门禁默认否」).Clause-②: no,Metadata-protocol: none, measured:check:authorable-surfaceandcheck:api-surfaceare green with no regenerated artifact moving beyond the description text, and no accepted value changes.Verification
Local gates at head 157212e
Derived by
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(97 families), each exit captured before any pipe.Re-runs:
check:skill-examplesandcheck:lean-entry-closurefirst exited 3 (PREREQUISITE NOT MET: client-react / objectql dist absent in this fresh worktree), then 0 afterturbo run buildof objectql, client and client-react.check:dual-build-cjs-loadsstays NOT MEASURED (needs every package's dist); CI runs it.dispatch-gates --ran: 97 derived, 96 run, 1 NOT-MEASURED (check:dual-build-cjs-loads), 0 UNRUN.
Generated by Claude Code