Skip to content

feat(spec,cli): 治理最后 9 个元数据类型 —— 活性账本覆盖注册表全集,PENDING_GOVERNANCE 清空 (#4488) - #4510

Merged
os-zhuang merged 1 commit into
mainfrom
claude/datasource-config-validation-i7wdmo
Aug 1, 2026
Merged

feat(spec,cli): 治理最后 9 个元数据类型 —— 活性账本覆盖注册表全集,PENDING_GOVERNANCE 清空 (#4488)#4510
os-zhuang merged 1 commit into
mainfrom
claude/datasource-config-validation-i7wdmo

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Closes #4488

结论

app / book / doc / email_template / job / mapping / seed / translation / validation 九个类型全部入账(约 150 条判定,全部 verifiedAt 2026-08-01),PENDING_GOVERNANCE 清空——注册表里的 27 个类型现在每一个都有账本#4487 建的闸门从"承认缺口"走到了"没有缺口";ratchet 保留,新注册类型不入账即红。

方法(#4487 的边界结构法,逐类型复用)

每个类型先找"到达执行点的结构"再判定:seed 的边界是 SeedLoaderService、doc/book 是 REST 读层 + resolveBookTree、job 是 IJobService.schedule + 三个 adapter、mapping 是 import 管线、validation 是 evaluateValidationRules、translation 是 resolver 家族、app 是 filterAppForUser + objectui shell。grep 只证存在,结论一律闭合调用图(objectui 证据钉在 @940ba24)。

审计发现(都已记录在账本注记,enforce-or-remove 追踪在 #4509

四个"授权门断连"——不是死键,是整扇门通向空地:

  1. email_template 整个可授权表面 dead(最严重):sendTemplate 只读 sys_email_template 行,行的唯一写入者是内置模板 + 代码构造的插件选项;stack/文件/Studio/PUT-meta 四扇授权门全部落进没人读回的元数据存储(包导入路径还显式排除它)。管理员在 Studio"修好"密码重置邮件 → 保存成功 → 用户继续收到内置版。认证邮件上的 ADR-0078 false compliance。warn 按 webhook 先例载于 name(每工件一条)。
  2. job 运行时条目永远不被调度allowRuntimeCreate: true,但只有编译 bundle 的 jobs 到达调度器(handler 也只能从 bundle 函数表解析)。
  3. validation 独立条目绑不到对象:schema 没有对象绑定键、没有合并代码;Studio 里建一条 state_machine 规则(ADR-0020!)保存成功、从不拦截。规则词汇本身全活——经由 object.validations 内嵌路径,evaluator 确证 active/events/priority/severity 全部强制执行(zod 头注释那句"只读 type/condition/…"是陈旧散文)。
  4. action 导航项点不动:渲染、门控一切正常,点击派给宿主 onAction——没有任何 shipped shell 传它。

失效开放的门app.areas[].visible / areas[].requiredPermissions 无人评估——"隐藏"的区域对所有人渲染,而条目级同名键在服务端+客户端都强制执行(#4001 自己说的"fail open 是 silent-strip 最坏形状")。都已 authorWarn,hint 指向强制执行的条目级/应用级替代。

平台亲手立的假路标(capabilities.readOnly 系列 +2):translation.validationMessages 无人解析,而 #3778 自己的 legacy-key 迁移表把 errors: 作者引向它;book.translations 两处 inline map 无人读,而两个文件之外的 doc.translations 在每条读路径上都工作。

险些误判translation.messages 差点判死——resolver 家族里确实没人读它;真正的消费者是 plugin-audit 用拼接键t()messages.activityCreated…),按组名 grep 永远找不到。

工具修复

  • walker 看不见 z.preprocessunwrap() 对 pipe 一律取 in 侧,而 preprocess 的 in 是 transform——translation 的注册 schema 在本 PR 前根本走不了查--dump translation 直接抛错)。现在 in 侧是 transform 时取 out 侧。
  • CLI lint:六个带 authorWarn 的新类型注册进 TYPE_COLLECTIONS;测试补五组 pin(21 通过),含"schema 默认值物化不得误报"的反向 pin——mapping.errorPolicy/batchSize、selector includeAll/placement 因默认值在编译期物化而不可 warn_authorWarnSkipped,default(true) 布尔规则的非布尔实例)。

README 计数口径(#4488 点名要的决定)

表镜像 check-liveness.mts --jsonbyStatus——CI 强制执行的那个数,取代数账本 JSON 行的 python 片段(它漏 marker 解析、框架 overlay 自动 live、childrenDefault 扇出,#4487 写作期间用它机械重写产生过两处回归)。全表从一次运行重新生成;webhook 行两代陈旧(还在说"整个表面 dead"——#3489/#3494 早已修完,现 11/0/0),重写为现状并保留为"dead 判定是工单不是墓碑"的范例。

验证

  • check:liveness / empty-state / authorable-surface / strictness-ledger —— 全 PASS(27 类型全分类、零 orphan、零 stale-pending、证据路径 280 本仓解析 + 81 外仓标注)
  • @objectstack/spec —— 7051 tests passed
  • @objectstack/cli utils —— 288 tests passed(含新 pin)
  • spec + cli 依赖图 typecheck —— 55/55

Generated by Claude Code

…rage complete (#4488)

Nine new ledgers (app, book, doc, email_template, job, mapping, seed,
translation, validation; ~150 verdicts, all verifiedAt-stamped), emptying
PENDING_GOVERNANCE: every registered metadata type is now governed.

- check-liveness.mts: unwrap() sees through z.preprocess pipes (takes the
  OUT side when IN is a transform) — translation's registered schema was
  unwalkable before this.
- CLI lint TYPE_COLLECTIONS registers the six new types carrying authorWarn
  entries, with pins in the test suite (21 tests).
- liveness/README.md: the count-table method is decided and recorded (mirrors
  check-liveness --json byStatus); all rows regenerated, the stale webhook
  row rewritten to the post-#3489/#3494 state.

Key findings, all recorded in ledger notes and tracked in #4509:
- email_template: the ENTIRE authoring surface is disconnected from
  sendTemplate (false compliance on auth mail).
- app: areas[].visible / areas[].requiredPermissions are fail-open dead
  gates; homePageId dead; selector includeAll deliberately ignored.
- translation.validationMessages: read by nothing while #3778's own
  migration table steers authors into it.
- job / validation: runtime-authoring doors disconnected from their
  execution points.

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

vercel Bot commented Aug 1, 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 1, 2026 2:08pm

Request Review

@os-zhuang
os-zhuang enabled auto-merge August 1, 2026 14:08
@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling size/xl labels Aug 1, 2026
@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/cli, @objectstack/spec.

113 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 packages/cli, @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/data-flow.mdx (via @objectstack/cli)
  • content/docs/api/environment-routing.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/cli, @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/cli, 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 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 @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/backup-restore.mdx (via @objectstack/cli)
  • content/docs/deployment/cli.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/deployment/self-hosting.mdx (via @objectstack/cli)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via packages/cli, @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/cli, @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/data-service.mdx (via packages/cli)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/cli, 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/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authentication.mdx (via @objectstack/cli)
  • 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/cli, @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/cli, @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 @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/cli, @objectstack/spec)
  • content/docs/protocol/kernel/realtime-protocol.mdx (via @objectstack/cli)
  • 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 @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/cli, @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/cli, @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/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 added this pull request to the merge queue Aug 1, 2026
Merged via the queue into main with commit 4f13be2 Aug 1, 2026
18 checks passed
@os-zhuang
os-zhuang deleted the claude/datasource-config-validation-i7wdmo branch August 1, 2026 14:31
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 size/xl tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

活性账本覆盖 worklist:9 个已注册 metadata type 仍未治理(#4487 建立闸门后的剩余债务)

2 participants