Skip to content

docs(spec): align GroupingConfig.fields & NotifyConfig sourceObject/sourceId describes with the measured acceptance face (#7084, #7085) - #7111

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-7084-7085-describe-align
Aug 9, 2026
Merged

docs(spec): align GroupingConfig.fields & NotifyConfig sourceObject/sourceId describes with the measured acceptance face (#7084, #7085)#7111
os-project-manager merged 1 commit into
mainfrom
claude/issue-7084-7085-describe-align

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes #7084
Fixes #7085

#7084 / #7085 两条 16:24Z 分诊结论打包的 axis-① describe 对齐卡(#6918 逐项清单评审模式):两处均为纯文案对齐,验收面逐字节不变(domain:spec-surface),不加任何 bound、不加 refine。

Item 1 — #7084 GroupingConfigSchema.fields

  • Before: Fields to group by (supports up to 3 levels)
  • After: Fields to group by, in nesting order — the first entry is the outermost group and each later entry nests one level deeper (at least one field)

逐项核对:

  • 锚点在 fresh main @ f5a9bc2f3 复核:packages/spec/src/ui/view.zod.ts:562,.min(1) 无上界,原句仍在。
  • 探针矩阵在 fresh main 重跑,与卡片一致:0 层 rejected [too_small]、未知键 rejected [unrecognized_keys](双侧对照),1/3/4/5/10/50 层全部 ACCEPTED。
  • E17 硬规则:新文案不含任何固定数字上限("up to N" 类同缺陷),只陈述形状(数组顺序=嵌套顺序、首项最外层、至少一个字段,与 .min(1) 一致)。
  • 消费端实测(objectui @ origin/main = 65bb513,只读):packages/plugin-grid/src/useGroupedData.ts buildLevel 唯一停止条件是 depth >= fields.length,递归条件 depth + 1 < fields.length,无 slice、无深度上限 —— 渲染器渲染全部配置层级,数组下标即嵌套深度。
  • "3 levels" 语料普查(双仓、双向):objectstack 侧仅命中锚点本身与其生成页 content/docs/references/ui/view.mdx:343(本 PR 一并再生);无手写文档副本。objectui 侧无 grouping 相关 "3 levels" 主张(CONTRIBUTING.md 的 "max 3 levels" 是代码嵌套风格规则,无关)。另测得:objectui 的编辑器 grouping-editor.tsx 默认 maxLevels = 3(ViewSettingsPopover.tsx:203maxLevels={3})—— 这是 authoring UI 的加号按钮上限,不是接受面或渲染上限;新文案对此不作任何主张,已记入报告。
  • Pin(view.test.ts,GroupingConfigSchema.fields describes "(supports up to 3 levels)" but the gate is .min(1) with no upper bound — 50 levels parse green #7084 用例):非空 arm 在前;/nesting order/、/outermost/、/at least one/ 语义 arm;负向 arm 断言不得回归固定计数(\bup to \d+\b\b\d+\s+levels?\bmax N 三种拼法)。

Item 2 — #7085 NotifyConfigSchema.sourceObject / sourceId

  • Before: … (writes sys_notification.source_object). Requires sourceId. / … (writes sys_notification.source_id). Requires sourceObject.
  • After: … Only takes effect together with sourceId — a half-specified click-through target is dropped at execute time, so the inbox never renders a dead link.(sourceId 侧对称)

逐项核对:

反向验证(方向先于运行预测,#6918 模板)

  • Arm A(git checkout origin/main -- 恢复两个 zod 旧文案,pin 不动)→ 预测:两条 pin 各自 RED → 实测 RED:item 1 首个失败 arm /nesting order/i,item 2 首个失败 arm /only takes effect together/i;其余 236/238 用例保持绿。
  • Arm B 反空洞(三处 .describe(''))→ 预测:恰经非空 arm RED(负向 arm 对 '' 空洞通过)→ 实测 RED,失败信息即非空 arm 自带标签:fields .describe() must not be emptysourceObject .describe() must not be empty
  • Pin 覆盖预检(fix(spec): aria 墓碑不再指向同一大版本里已退休的落点 (#6756) #6854,字面量 + toMatch 两种拼法检索):此前无任何针对这两段 describe 的既有 pin,新增即全部覆盖。

Lane admission(验收面逐字节不变)

pnpm --filter @objectstack/spec build && check:generated:check:authorable-surface(含 authorable-surface/**authorable-defaults/.base.json、JSON schemas)与 check:api-surface(api-surface/**)全绿零 diff;两段 describe 字符串本就不落入上述任何验收工件(grep 验证)。git status 亦仅四个源/测试文件 + 两个再生 mdx + changeset。

生成物

恰好两个引用页变更(与预期一致,生成器输出直接提交,未手改):

  • content/docs/references/ui/view.mdx(1 行)
  • content/docs/references/automation/io-node-config.mdx(2 行)

未触碰 content/docs/releases/

验证汇总

  • pnpm --filter @objectstack/spec test:355 files / 9273 passed(含 2 条新 pin)。
  • pnpm --filter @objectstack/spec typecheck:绿。
  • pnpm --filter @objectstack/spec check:generated:11/11 up to date(含 check:docscheck:test-typecheck)。
  • Ledger test-typecheck-debt.json 前后不变:src/ui/view.test.ts: 8(新 pin 曾引入第 9 个 tsc error,已通过收窄类型断言修复回 8,而非改账本);io-node-config.test.ts 不在账本(0 错误)且保持 0。
  • node scripts/check-nul-bytes.mjs:OK。
  • Changeset:.changeset/grouping-notify-describe-align.md(@objectstack/spec: patch,非 breaking,无需 ADR-0087 标记)。

界外发现(不在本 PR 修)

  • Studio 表单描述符 packages/services/service-automation/src/builtin/notify-node.ts:166/:170 携带同样的 "Requires sourceId." / "Requires sourceObject." 文案(表单面,io-node-form-zod-ledger.test.ts 只对账键集不对账 description,故与本修不冲突)—— 已按 Prime Directive chore: version packages #10 另行建档,不在本卡范围。

🤖 Generated with Claude Code

https://claude.ai/code/session_018ffcE95NaMJcL9XJ9VDYgk


Generated by Claude Code

…/sourceId describes with the measured acceptance face

- GroupingConfigSchema.fields: drop the '(supports up to 3 levels)' claim —
  the gate is .min(1) with no upper bound and the grid renderer recurses over
  all configured levels; state the shape instead (array order = nesting
  order, first entry outermost, at least one field). Fixes #7084.
- NotifyConfigSchema.sourceObject/sourceId: replace 'Requires ...' with the
  module JSDoc's recorded tolerance — the pair only takes effect together; a
  half-specified click-through target is dropped at execute time, so the
  inbox never renders a dead link. Fixes #7085.
- Pin tests for both describes (non-empty arm first so the negative arms are
  non-vacuous); regenerated the two reference pages; changeset (patch).

Acceptance face unchanged: check:authorable-surface and check:api-surface
green with zero diff on authorable-surface/**, json-schema.manifest/**,
authorable-defaults/, authorable-surface.base.json, api-surface/**.

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

vercel Bot commented Aug 9, 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 9, 2026 5:05pm

Request Review

@github-actions github-actions Bot added the size/s label Aug 9, 2026
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

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

106 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/permissions/system-context.mdx (via packages/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/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)

7 release-owned page(s) also reference the affected code. These are read-only:

  • 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/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

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.

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

Labels

documentation Improvements or additions to documentation protocol:ui size/s tests tooling

Projects

None yet

2 participants