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 — #7084GroupingConfigSchema.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.tsbuildLevel 唯一停止条件是 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 — #7085NotifyConfigSchema.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

vercelBot commented Aug 9, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 9, 2026 5:05pm

Request Review

@github-actions

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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationprotocol:uisize/steststooling

Projects

None yet

2 participants

@os-project-manager@claude