Skip to content

feat(spec,objectql,rest): 发布 audit-provenance 与 import-coercion 词表 (#3786, #4173) - #4197

Merged
os-zhuang merged 1 commit into
mainfrom
claude/spec-checklist-drift-investigation-ewgd6l
Jul 30, 2026
Merged

feat(spec,objectql,rest): 发布 audit-provenance 与 import-coercion 词表 (#3786, #4173)#4197
os-zhuang merged 1 commit into
mainfrom
claude/spec-checklist-drift-investigation-ewgd6l

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

#3786 系列的两笔收尾,同一形状打包:spec 导出一份、消费方全部派生、派生够不到的地方加一致性测试。前置:#4178 已合并。

A. AUDIT_PROVENANCE_FIELDS —— 跨两仓至少四份拷贝的 4 元清单

created_at / created_by / updated_at / updated_by 这份清单存在于:registry 的注入 if 链(源头)、rule-validator 的 preserveAudit 白名单(注释写「Kept in sync with the registry's auto-injected audit fields」—— 靠什么?什么都没有)、以及 objectui 两处渲染面。

现在:

消费方 方式
registry.ts 注入 if 链改数据表,以 spec 元组为键,satisfies Record<AuditProvenanceField, …> —— spec 加名字没配定义、或定义了 spec 删掉的名字,都是编译错误(APPROVER_VALUE_BINDINGS 的老纪律)
rule-validator.ts AUDIT_TIMELINE_FIELDS = new Set(AUDIT_PROVENANCE_FIELDS) —— 派生
FIELD_GROUP_SYSTEM_FIELDS audit 前缀改为 spread 元组 —— 同一个文件内部也只声明一次
objectui AUDIT_FIELD_BY_ROLE 已有 subset 断言钉着;本版本发布后可直接 import(objectui 侧后续一行改动)

注入行为逐字节不变 —— 新增一致性测试把每个注入列的形状(type/label/reference/readonly/system/required/description)钉在重构前的定义上。这是「派生管不到的那半」:spec 元组决定哪些列存在,注入表决定每列长什么样,后者仍是 registry 的本地事实,所以用测试钉。

B. import-coercion 词表 —— Closes #4173

IMPORT_BOOLEAN_TRUE_TOKENS / IMPORT_BOOLEAN_FALSE_TOKENS / IMPORT_REFERENCE_TYPES@objectstack/spec/data 导出(与 REFERENCE_VALUE_TYPES 同处,#4173 建议的位置)。rest/import-coerce.tsBOOL_TRUE/BOOL_FALSE/REFERENCE_TYPES 全部改为派生;IMPORT_REFERENCE_TYPES 按 issue 的「顺带」把 legacy 'reference' 拼写纳入,两端各自 + 'reference' 的字面量残留一并退役

词表自身的纪律有测试:两集不相交、每个 token 已预归一化(lowercase + trimmed,否则永远匹配不上、却读起来像被接受的拼写)、中文与勾叉 token(是/对/✓/√、否/错/✗/×)逐名钉住 —— 丢一个就是两端同时的静默行为变化。

objectui 侧的退役路径对方已写在 importCoercionContract.ts 的头注释里(objectui#3043),等本版本发布即可执行。

验证

  • spec 7142 tests / 275 files 全绿;六个生成物闸门全 PASS
  • 本 diff 触及的 objectql 套件(registry + rule-validator,159 tests,含新一致性用例)全过
  • 本地可见的 objectql/rest 失败在干净树上逐一复现且数目完全相同(24=24、1=1)—— 是 sibling dist 过期的环境噪音(main 今日大幅前移),非本改动;CI 全新构建是最终裁决
  • 行为零变化:每个派生值与被替换的字面量逐字节相同

系列状态

至此 #3786 排查出的全部已知手抄清单要么已派生、要么已加闸门:framework 4 个 PR(#4120 / #4148 / #4170 / #4178)+ 本 PR,objectui 2 个(#3019 / #3043,后者为并行 agent 完成),cloud 1 个(#931)。仍开放的是两项产品决策(cloud#933 / cloud#934)与 .strict() 收紧的排期 —— 后者现在有 #4178 的证据基座。


Generated by Claude Code

…rcion vocabularies (#3786, #4173)

Two more hand-copied lists retired the same way: one spec export, derivation at
every consumer, and a conformance test where derivation alone cannot reach.

AUDIT_PROVENANCE_FIELDS (spec/data): the four columns applySystemFields injects
on audit-tracked objects. The list existed in at least four copies across two
repos — the registry's injection if-chain, the rule-validator's preserveAudit
allowlist ("Kept in sync with the registry" — by nothing), and two objectui
render surfaces. The registry's injection is now table-driven, keyed by the
tuple with `satisfies Record<AuditProvenanceField, …>` so an undeclared member
is a compile error; the rule-validator derives its set from the same tuple;
FIELD_GROUP_SYSTEM_FIELDS' audit prefix derives from it too. Injection is
byte-identical — a conformance test pins every injected column's shape against
the pre-refactor definitions.

IMPORT_BOOLEAN_TRUE_TOKENS / IMPORT_BOOLEAN_FALSE_TOKENS /
IMPORT_REFERENCE_TYPES (spec/data): the /import coercion vocabulary #4173
asked for. rest's import-coerce.ts derives BOOL_TRUE / BOOL_FALSE /
REFERENCE_TYPES from them; IMPORT_REFERENCE_TYPES ships with the legacy
'reference' spelling included, retiring the `+ 'reference'` literal both ends
carried separately. objectui's mirror retires once this publishes — the path
is written in that file's own header (objectui#3043).

Verified: spec 7142 tests green, six gates PASS; the objectql suites this diff
touches (registry, rule-validator: 159 tests, incl. the new conformance case)
pass; the objectql/rest failures visible locally reproduce identically on a
clean tree (24 = 24, 1 = 1 — stale sibling dist, not this change).

Closes #4173.

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

vercel Bot commented Jul 30, 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 Jul 30, 2026 2:54pm

Request Review

@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation protocol:data tests tooling labels Jul 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 3 package(s): @objectstack/objectql, @objectstack/rest, @objectstack/spec.

110 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/connect-mcp.mdx (via @objectstack/rest)
  • 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/rest, @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/rest, @objectstack/spec)
  • content/docs/automation/approvals.mdx (via packages/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 @objectstack/objectql, packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/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 packages/objectql, @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/migration-from-objectql.mdx (via @objectstack/objectql)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/deployment/vercel.mdx (via @objectstack/objectql)
  • 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 packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/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 packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/objectql, @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/objectql, @objectstack/spec)
  • content/docs/permissions/authentication.mdx (via @objectstack/objectql)
  • 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/objectql, @objectstack/rest, @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/objectql, @objectstack/rest, @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/i18n-standard.mdx (via packages/rest, @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/objectql, @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.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 packages/objectql, @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/objectql, @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/objectql, @objectstack/rest, @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/rest, @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/objectql, @objectstack/spec)
  • content/docs/ui/actions.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/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.

@os-zhuang
os-zhuang marked this pull request as ready for review July 30, 2026 15:21
@os-zhuang
os-zhuang merged commit 8d895ff into main Jul 30, 2026
18 checks passed
@os-zhuang
os-zhuang deleted the claude/spec-checklist-drift-investigation-ewgd6l branch July 30, 2026 15:21
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:data size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

spec 应导出 import 布尔 token 表(BOOL_TRUE/BOOL_FALSE)—— objectui 预检还抄着最后一份手抄清单(承 #3786)

2 participants