Skip to content

feat(spec)!: Studio 授权面收紧(#4001 批 7) - #4541

Merged
os-zhuang merged 1 commit into
mainfrom
claude/strict-schema-authz-surface-s8vnok
Aug 2, 2026
Merged

feat(spec)!: Studio 授权面收紧(#4001 批 7)#4541
os-zhuang merged 1 commit into
mainfrom
claude/strict-schema-authz-surface-s8vnok

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

#4001 批 7。批 1–6e = #4514#4534,均已合并(25 个注册类型的完整性闸门已到位)。

studio/ 全部 27 个形状收紧:插件清单、flow builder、object designer。

这些是 Studio 扩展作者手写的配置,而这里被丢弃的键,安静得正是本战役在意的那种:插件加载了、画布渲染了、设计器打开了——每一个都比它作者声明的贡献得少。一个从没出现在视图切换器里的 viewer,看起来像注册出了 bug,而不是拼写出了 bug

这一批的核心不是转换,是验证分类

三个文件都挂着原始 triage 的 (p),而 plugin.zod.ts 标的是 mixed——备注栏是空的

一个没有理由的判定,正是「暂定」标签能活下来的方式。

读完就清楚了:八个形状全是 VS Code 式插件清单上的贡献点,全部手写。没有 wire 那一半。 判定改为 authorable

定案的方法值得留下,因为原来的 triage 根本没有方法:

三个文件各自导出一个 define* 工厂,解析的是作者写的字面量。define* 工厂就是那扇授权门。

这和注册类型批次用的是同一个透镜,而且比推理「谁消费输出」便宜得多。已写进账本,留给下一个需要摘 (p) 的行。

清单的 guidance,是这个文件自己招来的

它明写着自己是「package.json 的等价物」、contributes「类比 VS Code 的」。

这个类比既是卖点也是陷阱——懂 VS Code 的作者会伸手去拿那套词汇,而每一个近似键在那边都是对的

写成 实际
displayName name
publisher author
contributions contributes
activation / events activationEvents

对根本没有对应物的键(main · engines · categories · keywords · repository · icon · dependencies),给的是一句「该用什么」。

main 是最值得点名的那个:

作者声明了入口文件,拿到一个加载了、但什么都没贡献的插件——看起来和 activate() 写坏了一模一样。

现在拒绝信息说:没有入口点键;贡献在清单里声明,运行时组件在 activate() 里命令式注册。

一件这个 checkout 没能验证的事(写进账本,不含糊过去)

objectui 不在这个 checkout 里,所以「它会不会也程序化地构造这些 config、带着内部键去解析」我确认不了。

如果会:收紧把它变成它构建时一个响亮的 422(带改名建议),而不是现在这种静默收窄。那正是整场战役做的交易,而残余风险写在账本里,好让有 objectui 权限的人去关掉它,而不是重新发现它。

验证

  • 全仓测试套件 132 / 132 任务全绿
  • @objectstack/spec7241 用例tsc --noEmit 干净
  • 8 个生成物 up-to-date10 个 spec check:* 全绿(含 check:strictness-ledger,它会对账本里的站点计数和分类逐行核)

授权影响:这些形状没声明的键从「静默丢弃」变成「拒绝」——本来就已经被忽略。

剩余

只剩批 8ui / automation / data 长尾,~190 站点,逐 schema 按分类规则判定)。不阻塞任何东西。

🤖 Generated with Claude Code

https://claude.ai/code/session_01WnqGjQFQMqd5k81LYV8SCY


Generated by Claude Code

All 27 shapes across `studio/` — plugin manifests, the flow builder, the object
designer. These are the configs a Studio extension author writes by hand, and a
dropped key here is quiet in the way this campaign cares about: the plugin
loads, the canvas renders, the designer opens, each contributing less than its
author declared. A viewer that never appears in the switcher looks like a
registration bug, not a spelling one.

The triage verdicts were provisional and verifying them found one wrong. All
three files carried `(p)`; `plugin.zod.ts` was `mixed` with an EMPTY note, which
is how an unexamined label survives. Reading it settles it: all eight shapes are
contribution points on a hand-written manifest, no wire half.

The method is the part worth keeping, because the original triage had none —
each file exports a `define*` factory that parses an author-written literal, and
a `define*` factory IS the authoring door. Same lens the registered-type batches
used, and cheaper than reasoning about who consumes the output. Recorded in the
ledger for the next row that needs promoting out of `(p)`.

The manifest gets the guidance it invites: this file says outright that it is
"the package.json equivalent" and that `contributes` is "analogous to VS Code's".
That analogy is the point and the hazard — every near-miss is a word that is
correct over there. `displayName` → `name`, `publisher` → `author`,
`contributions` → `contributes`; and for keys with no counterpart (`main`,
`engines`, `categories`, `keywords`, `repository`, `icon`, `dependencies`) a
sentence saying what to use instead. `main` is the dangerous one: an author
declares an entry point, gets a plugin that loads and contributes nothing, and
it looks exactly like a broken `activate()`.

What this checkout could not settle is stated in the ledger rather than glossed:
whether objectui also CONSTRUCTS these configs programmatically and parses them
with extra internal keys. If it does, strictness makes that a loud 422 at its
build, with the rename suggested, instead of the silent narrowing it replaces.

Verified: full monorepo suite 132/132 tasks, spec 7241 tests, tsc clean,
8 generated artifacts current, all 10 spec gates green.

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

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

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling size/m and removed documentation Improvements or additions to documentation tooling labels Aug 2, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 2, 2026 01:29
@github-actions

github-actions Bot commented Aug 2, 2026

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 @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 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 enabled auto-merge August 2, 2026 01:29
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 2, 2026
Merged via the queue into main with commit 800bdb0 Aug 2, 2026
21 checks passed
@os-zhuang
os-zhuang deleted the claude/strict-schema-authz-surface-s8vnok branch August 2, 2026 01:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants