Skip to content

docs(automation): 补上声明式 connectors: 的手写授权指南 (#4289) - #4293

Merged
os-zhuang merged 1 commit into
mainfrom
claude/connector-writing-guide-687260
Jul 31, 2026
Merged

docs(automation): 补上声明式 connectors: 的手写授权指南 (#4289)#4293
os-zhuang merged 1 commit into
mainfrom
claude/connector-writing-guide-687260

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Closes #4289(源头:#4287 豁免审计的结论项)。

缺口

ADR-0097 让连接器成为租户手写的声明式元数据——一条 connectors: 条目写上 provider,启动时被通用执行器物化成可派发的连接器,不用写插件代码。但全仓没有任何一页教怎么写:auth 是密钥面(credentialRef 的硬规矩只活在 schema 注释里)、providerConfig 是开放面(故意不由 stack schema 校验,写错 os validate 不报、直接硬启动失败)。人和 AI 作者都只能读 ADR 或读源码。

关于「connector 是流程的一部分、设计器里配、AI 在写」的疑问,会话里核实过:flow 的 connector_action 节点只是派发已物化的连接器;连接器实例本身是 stack 级元数据(packages/metadata/src/plugin.ts:88connectors: 集合映射为 kind connector),DEFAULT_METADATA_TYPE_REGISTRY 里没有它,Studio 元数据管理建不了。而「AI 在写」正是要写这页的原因——docs + skills 就是 AI 授权的供料面,指南落地后变体闸门还会强制它跟 schema 同步(见下)。

内容

新页 content/docs/automation/connectors.mdx(issue 建议 integration/,但 capabilities 页现有链接、物化器归属 service-automation、connector_action 都指向 automation 分区,单页新开顶级分区太重):

  • 三种条目形态:插件注册 / provider-bound 实例(ADR-0097)/ 目录描述符(enabled: false 惯例),何时用哪种;
  • 三个 provider 的 providerConfig 契约(rest 的 baseUrl+defaultHeaders→单 request 动作;openapi 的 spec 三形态+operationId 派生动作;mcp 的 transport+include→tools/list 派生动作),并明确写出「工厂在启动时校验、stack schema 故意不管」;
  • 五种 auth 变体逐个示例,credentialRef 解析路径(开源层=环境变量、企业层=vault resolver),basic 的 username 可留元数据、密码走 ref,api-keyheaderName/paramName,以及 oauth2 在声明式形态里是有意缺席(企业层,ADR-0015)——写明防止作者当成遗漏;
  • 内联密钥的拒绝:✗/✓ 对照 + 真实报错文案(ADR-0097 §3);
  • 失败模式表:配置错误(未装 provider、坏 config、解析不到 ref、重名、stdio 未 opt-in)= 硬启动失败 vs 运维故障(上游不可达)= degraded + 5s→5min 退避自愈;reload 软化语义;
  • stdio 默认拒绝的安全 Callout 与 declarativeStdio opt-in 写法;
  • 指向 showcase 可运行示例(不新编一份)。

导航接线:automation meta.json/index 卡片与 bullet、flows.mdx connector_action 段落、capabilities/integrations.mdx、ai/connect-mcp.mdx(注明与之相反方向)。

Ledger 同步(issue 的「落地时同步做」)

packages/spec/variant-docs.json 两条 connector-auth 豁免按其自述「when one is written, bind it and delete this exemption」换成 docs: 绑定,$comment 审计记录补一行闭环说明。check:variant-docs 从 6 governed 升到 8 governed / 12 exempt——此后 schema 每加一种 auth 变体,#4177 闸门强制同步本页。

验证(#4218 教训:每个示例对着真 schema 验过)

  • 临时脚本(已删)用 DeclarativeConnectorEntrySchema(比 defineConnector 更严,含 superRefine)runtime-parse 了页面全部 4 个完整示例 + 5 个 auth 片段,并断言 5 条文档声称的拒绝真的复现(内联 authentication、无 provider 的 auth/providerConfig、provider-bound 授权 actions、token 字段不存在);派发片段过 defineFlow:15/15 ✓
  • 4 个 {/* os:check */} 标记块进入 check:skill-examples,对 built dist 类型检查:202 例 ✓
  • check:variant-docs ✓、node scripts/check-doc-authoring.mjs ✓(215 files clean)
  • 写作过程中被「对着代码写」抓出并修掉的两处事实错误:registry 路径实为 GET /api/v1/automation/connectors(注释里的 GET /connectors 是简写);showcase 只有 rest/mcp 实例有派发流程,openapi 实例没有——页面措辞已按实际写
  • changeset:空(docs-only,循 docs(releases): record the #4212-family plugin-API retirements in the v17 notes and status matrix #4279/docs(skills): hook 示例改用 defineHook(),不再教裸 : Hook 字面量 (#4274) #4283 惯例)

🤖 Generated with Claude Code

…ative `connectors:` path gets its page (#4289)

ADR-0097 made connectors tenant-authored metadata, but no hand-written page
taught how to write an entry. New content/docs/automation/connectors.mdx
covers the three entry shapes, the per-provider `providerConfig` contracts
(rest / openapi / mcp — factory-validated at boot, invisible to `os validate`),
credentialRef-based auth incl. why `oauth2` is deliberately absent from the
declarative shape (enterprise tier, ADR-0015), the configuration-vs-operational
failure split, and the showcase as the runnable reference.

The two connector-auth exemptions in packages/spec/variant-docs.json flip to
governed docs bindings per their own "when one is written, bind it" note, so
the #4177 gate now enforces all five auth variants against the guide.

Every example parses against the real schemas: the four full examples and the
auth fragments via DeclarativeConnectorEntrySchema (including the documented
rejections: inline `authentication` on a provider-bound instance, auth /
providerConfig without provider, authored actions), the dispatch snippet via
defineFlow, and the four marked blocks type-check under check:skill-examples
(202 examples). check:variant-docs green at 8 governed / 12 exempt;
check-doc-authoring clean.

Closes #4289.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@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:40am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling size/m labels Jul 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

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

107 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/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 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 merged commit e919087 into main Jul 31, 2026
18 checks passed
@os-zhuang
os-zhuang deleted the claude/connector-writing-guide-687260 branch July 31, 2026 03:53
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/m tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

补一份手写的连接器指南:connectors: 是租户手写的(ADR-0097),但全仓没有任何一页教怎么写

1 participant