Skip to content

docs(spec): FieldWidgetPropsSchema 的 required/error JSDoc 不再教 objectui#3222 裁掉的双份显示 - #6062

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-5920-widget-props-jsdoc
Aug 7, 2026
Merged

docs(spec): FieldWidgetPropsSchema 的 required/error JSDoc 不再教 objectui#3222 裁掉的双份显示#6062
os-zhuang merged 2 commits into
mainfrom
claude/issue-5920-widget-props-jsdoc

Conversation

@qq9340100

Copy link
Copy Markdown
Collaborator

Fixes #5920

问题

packages/spec/src/ui/widget.zod.tsFieldWidgetPropsSchema 的两段 JSDoc,教的正是 objectui#3222 裁定反对、且已在 objectui PR #3289 落地的两件事:

原文 为什么是反向指导
required:"Widget should indicate required state visually and validate accordingly." 必填标记 * 归宿主 FormLabel(objectui form.tsx:1484 起);widget 再画一遍就是同一个星号两遍。objectui 的 widget props 里干脆没有 required 布尔键,spec-symbol-batch7.test.ts_RequiredIsAbsent 钉住
error:"When present, widget should display the error in its UI." 校验消息文案归宿主 FormMessage(objectui form.tsx:1614);widget 只把 error信号驱动 aria-invalid(form.tsx:1563-1574)。再画一遍就是同一句文案两遍

这与 #4866 / PR #5914 是同一处失实的两层:文档那层(widget-contract.mdx)已修,而 #4866 的边界明确写死「不改 widget.zod.ts」,所以 schema 这层留到了本单。

危害面不是最终用户——实测这两句不进 content/docs/references/(生成文档只吃 .describe())——而是读 schema 源码的人和 AI:AGENTS.md 要求 agent grep spec 判断契约,spec-property-retirement playbook 也把这个文件当权威。

改法

仅改 JSDoc 散文,4 行原文换成新的两段:

  • required:必填标记归宿主 label,widget 不自己画;校验同属宿主(它持有表单状态);widget 把状态反映到控件上的 aria-required —— AriaAttributes 已声明该键,无需新增契约键(objectui#3290)。
  • error:活动校验消息,字段有效时为 undefined;当信号用驱动 aria-invalid(控件是宿主够不到的那个元素),文案由宿主渲染,widget 再画一遍就是双份显示。

⛔ 边界(严格按 issue 与认领评论):.describe()('Required field flag' / 'Validation error message')、键名、类型一律未动;同文件其它散文未动;#4866 / PR #5914 已修的 docs 面未动。

#5055 的关系

#5055(同文件的 ADR-0049 enforce-or-remove,pm:on-hold / target:v18)问的是「这套词表该不该存在」。本 PR 只动散文、不动契约面,无论 #5055 最终选退役还是选给载体,这两段都该是现在这个说法,因此不构成前置也不被它阻塞。

验证

  • pnpm --filter @objectstack/spec build + check:generated:10/10 全绿,零生成物漂移(含 check:docs)—— 与预期一致,JSDoc 不进 .describe() 生成流,工作树在 gate 跑完后仍然干净。
  • pnpm --filter @objectstack/spec typecheck:通过(tsc --noEmit + check:test-typecheck OK)。
  • pnpm --filter @objectstack/spec test:全绿。
  • node scripts/check-nul-bytes.mjs:OK;另对改动文件做了控制字符自扫,无命中。

Changeset

comment-only(纯 JSDoc 散文),不发布任何用户可见变更 ⇒ 无 changeset,建议 skip-changeset


🤖 Generated with Claude Code

https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY


Generated by Claude Code

…i#3222 裁掉的双份显示

`required` 原文教 widget「indicate required state visually」、`error` 原文教
widget「display the error in its UI」——这两件事正是 objectui#3222 裁定反对、
并已在 objectui PR #3289 落地的:必填标记 `*` 归宿主 label,校验消息文案归宿主
`FormMessage`,widget 只把 `error` 当信号驱动 `aria-invalid`,再画一遍就是双份显示。

仅改 JSDoc 散文;`.describe()`、键名与类型一律不动(#5055 的 ADR-0049 决策面不受影响)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 6, 2026 11:50pm

Request Review

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

112 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@qq9340100
qq9340100 marked this pull request as ready for review August 7, 2026 00:16
@qq9340100
qq9340100 added this pull request to the merge queue Aug 7, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 31134114618 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Test Core (2/3) — 失败步骤: Verify pnpm version(日志不可读,点进 job 看)

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 72 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 在其他 PR 的同类评论里搜同名测试;出现过 ⇒ flaky 实锤,开 issue 修/隔离那条测试。修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

@os-zhuang
os-zhuang added this pull request to the merge queue Aug 7, 2026
@claude

claude Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

队列管家:原样重投(命中 #5810 台账跨仓通用表第 1 行:基础设施抖动)

踢出事实(两读数判据,⛔ 未看 auto_merge 字段):队列分支 pr-6062-e3ef52b5…(tip 6807db7d)于 00:29Z 出队,origin/main 未含本 PR ⇒ 踢出,非落地。失败 run:CI 31134114618(00:17:16Z 创建)。

完整签名(取完整 job 归档判读,⛔ 未看 tail —— SKILL notes 7):

读数
run 内 job 14 个,job 级 failure 2 条:Test Core (2/3) + 因它而红的聚合 Test Core
致命 step step 5 Verify pnpm versioncompleted/failure
报错串 Error when performing the request to https://registry.npmjs.org/pnpm/-/pnpm-10.31.0.tgz[cause]: TypeError: fetch failed[cause]: Error: read ECONNRESET
后续 step Install dependencies(9)、Compute this shard's package set(10)、Run this shard's tests(11) 全部 skipped测试一行未跑
时长旁证 本 job 存活 16 秒(00:17:31→00:17:47);同 run 的兄弟分片 Test Core (1/3) 跑满 9 分 25 秒success

⚠️ 该 job 的 Test completeness guard 步骤为 success —— 这正是 notes 7 第一条所指的形状:「completeness check 绿」≠「测试通过」。本判读未采信该绿。

台账依据:跨仓通用表第 1 行「GitHub Actions runner 丢失 / npm registry 5xx / 网络超时(基础设施抖动,与 diff 无关)」⇒ 判定 已知环境抖动,处置 原样重投。本 PR 为 docs-only 的 spec JSDoc 改动,与 corepack 取包路径无任何交集。

已核让行(SKILL「双向让行」):处置前两次读本 PR 最近 30 分钟评论,仅有 00:29:54Z 的 merge-queue-triage 自动评论,无车道 PM 动作 ⇒ 无让行对象,本座位处置。

已执行:重新挂 auto-merge(GraphQL),PR 保持 open / 非 draft / mergeable_state=clean未改一行代码、未 rebase、未 force。按 notes 2 的追记纪律,本次为纯计数命中(未改变修法作用域),⛔ 不去 flaky issue 追记。

⛔ 本座位未合并、未切 ready/draft、未撤队、未重跑(rerun 复用原合并 ref,对本形态无效)、未动认领。


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

protocol:ui size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FieldWidgetPropsSchema 的 JSDoc 仍在教 objectui#3222 裁掉的双份显示:required「visually」+ error「display in its UI」

3 participants