Skip to content

fix(spec): variant/doc 闸门对 YAML 是瞎的,而一条豁免正把这个盲区记录成文档缺口 - #4287

Merged
os-zhuang merged 1 commit into
mainfrom
claude/unknown-key-stripping-strictness-h3a3zt
Jul 31, 2026
Merged

fix(spec): variant/doc 闸门对 YAML 是瞎的,而一条豁免正把这个盲区记录成文档缺口#4287
os-zhuang merged 1 commit into
mainfrom
claude/unknown-key-stripping-strictness-h3a3zt

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

起因

审计 variant-docs.json 里 7 条 generated-reference-only 豁免。这是 ledger 两种豁免里较弱的一种 —— 它并不主张变体不可授权,只说「还没人给它写指南」。所以每一条要么是真缺口、要么是错归档,而它们自写下之后从未复核过。

发现

一条两者都不是。 content/docs/protocol/objectui/widget-contract.mdx 有一节 Widget Source,把 inline / npm / remote 三个变体逐个写了完整示例 —— 而且一直都有。但写法是 YAML,闸门的覆盖匹配器只认 type: 'npm'(带引号)和 `npm`(反引号)。YAML 不给标量加引号,所以闸门什么也看不见,ledger 于是记录了一个并不存在的文档缺口,而真正的缺口 —— 一个对仓库半数示例方言视而不见的匹配器 —— 始终不可见。

这条豁免掩盖的是闸门自己的 bug,不是文档的问题。

改动

1. 匹配器补 YAML 形式(scripts/check-variant-docs.mts)
新增第三种「已提及」形式:整行的 YAML 映射(允许尾随 # 注释)。锚定到行首行尾,和带引号形式一样紧。

2. widget implementation → governed,绑定 widget-contract.mdx。治理数 5 → 6,该页正式进入棘轮。

3. 两条重分类为 not-authorable —— tenant isolation strategy 与 settings-manifest handler。它们自己的 reason 早就写着 operator-setconsumed by Setup/Studio,只是标签跟内容不一致。

4. 其余豁免把缺口写实,不再拿生成参考页当作已经回答了问题:

  • connector authentication ×2 —— 标为最值得动手的一条。ADR-0097 让声明式 connectors: 成为租户手写内容,auth type 明确是作者写的,但仓库里根本没有任何手写的连接器页(唯一的散文是 flows.mdx 里关于 connector_action 节点的一段)。另外顺手纠正了一处:窄版 union(EnvironmentArtifactSchema.metadata.connectors[].auth)缺 oauth2 是因为 authorization-code/refresh 属企业层(ADR-0015),不是因为部署产物做了收窄 —— 我最初的推断是错的,查了 connector-auth.zod.ts 才写实。
  • job schedule —— 真空缺,并写明 flows.mdx 里的 schedule: { type: 'cron' }另一个面(flow start 节点自己的 config;flow.zod.ts 还专门给顶层 schedule 立了墓碑),既不记录也不治理这个 union,免得下一个人重复我刚做的排查。
  • sync mapping transform —— 真空缺,优先级低于连接器(变体集封闭且自解释)。

5. ledger 顶部 $comment 增加审计说明,记录这次复核的结论与判据,让下一次复核有起点。

验证

范围说明

写一份完整的连接器授权指南远超本次审计 PR 的范围,所以我把它作为结论写进 ledger(连同「写好后绑上并删掉这条豁免」的指示),而不是顺手补一份半成品。

关联:#4001(母 issue)、#4177(闸门本体)、ADR-0097 / ADR-0015。


Generated by Claude Code

…was recording that as a doc gap

Audit of the seven `generated-reference-only` exemptions in
variant-docs.json. That class is the weaker of the two the ledger uses:
it does not claim a variant is un-authorable, only that nobody has
written a guide for it — so each one is either a real gap or a
mis-filing, and none had been re-checked since it was written.

One was neither. protocol/objectui/widget-contract.mdx carries a
'Widget Source' section documenting all three of inline / npm / remote,
and has all along — but in YAML examples, and the coverage matcher only
accepted `type: 'npm'` or ``npm``. YAML does not quote scalars, so the
gate saw nothing and the ledger recorded a doc gap that did not exist
while the real gap — a matcher blind to half the repo's example dialect
— stayed invisible. The matcher now accepts a whole YAML mapping line;
that entry is governed, and the page is under the ratchet (5 → 6
governed).

Two more were mis-labelled rather than gapped: tenant isolation strategy
and settings-manifest handler are not-authorable, which their own
reasons already said (operator-set, consumed by Setup/Studio).

The rest are genuine gaps and now say so instead of naming the generated
page as if that settled it. Connector authentication is called out as
the one worth acting on: ADR-0097 makes it tenant-authored, and the repo
has no hand-written connector page at all.

Verified the new form bites and stays tight: removing one YAML variant
line fails the gate; the same variant as a bare word in prose, or
embedded mid-sentence, still does not count.

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

vercel Bot commented Jul 31, 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 31, 2026 3:00am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling size/s labels Jul 31, 2026
@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 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 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/cli.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 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/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/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/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/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/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 31, 2026 03:14
@os-zhuang
os-zhuang merged commit 22b5e54 into main Jul 31, 2026
18 checks passed
@os-zhuang
os-zhuang deleted the claude/unknown-key-stripping-strictness-h3a3zt branch July 31, 2026 03:14
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/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants