Skip to content

feat(security): permission-set package provenance + bootstrapDeclaredPermissions (ADR-0086 P1)#2566

Merged
os-zhuang merged 1 commit into
mainfrom
claude/adr-0086-p1-permission-provenance
Jul 4, 2026
Merged

feat(security): permission-set package provenance + bootstrapDeclaredPermissions (ADR-0086 P1)#2566
os-zhuang merged 1 commit into
mainfrom
claude/adr-0086-p1-permission-provenance

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

概述

落地 ADR-0086 P1(framework 侧)(#2561 P1 首项;ADR 正文见 #2559):权限集的包来源轴 + 声明式播种,让「包为自己的对象自带默认访问」成立,并关闭 stack.permissions 的 ADR-0078 惰性元数据违规。

与 objectui#2221(ADR-0086 P0,Access 矩阵按包限定作用域)是同一 ADR 的两端:本 PR 落地记录级 package_id 后,前端切片合并可以直接用来源轴,不必依赖 manifest 对象清单的临时方案。

变更

Spec(ADR-0086 D3)

  • PermissionSetSchema.packageId —— 包携带的权限集的属主包(缺省 = 环境自建)
  • PermissionSetSchema.managedBy —— 每记录来源,复用 metadata-persistence 既有词汇(package | platform | user),不引入新轴
  • sys_permission_set 对象新增 package_id / managed_by 列 + package_id 索引(卸载/升级按包查询)

播种(ADR-0086 D5)

新增 bootstrapDeclaredPermissions——bootstrapDeclaredRoles 的严格同构兄弟,kernel:ready 时把 stack.permissions 物化进 sys_permission_set:

已存在行的状态 行为
不存在 插入,managed_by:'package' + package_id(registry _packageId 优先,spec packageId 兜底;二者皆无 → warn + 跳过)
managed_by:'package' 且同包 重播种到声明内容(幂等,天然覆盖版本升级,无需版本簿记)
managed_by:'package' 且异包 拒绝 + warn(D4:包永不写入外包记录)
platform / user / 无来源(遗留行,含 bootstrapPlatformAdmin 默认集) 永不沾染

护栏

  • 一致性矩阵新行 declarative-permission-seeding(enforced,ADR-0056 D10)——播种不可能再静默退回惰性
  • dogfood 证明 showcase-permission-seeding.dogfood.test.ts
  • liveness 账本补 packageId / managedBy 两条(live + 证据)
  • changeset(spec minor + plugin-security minor)

验证

  • 单测:6 个新用例(播种/幂等升级/不沾染环境行/拒绝异包/无属主跳过/spec 兜底)
  • 套件:plugin-security 7 文件、spec 245 文件、liveness 门 ✓、dogfood 37 文件全绿
  • 真实应用实测(showcase --fresh 启动,登录 admin 后查 API):
admin_full_access         managed_by= None     package_id= None
member_default            managed_by= None     package_id= None
showcase_contributor      managed_by= package  package_id= com.example.showcase
showcase_member_default   managed_by= package  package_id= com.example.showcase

声明集带来源落库、平台默认集保持环境所有——与 D3/D5 语义逐条对应。

关联

🤖 Generated with Claude Code

https://claude.ai/code/session_014y5kiH3aPLWtRRRGcVrXcT


Generated by Claude Code

@vercel

vercel Bot commented Jul 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 4, 2026 9:01am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling labels Jul 4, 2026
@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 3 package(s): @objectstack/dogfood, @objectstack/plugin-security, @objectstack/spec.

95 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/authorization.mdx (via packages/dogfood, packages/plugins/plugin-security, packages/spec)
  • content/docs/concepts/cloud-artifact-api.mdx (via packages/spec)
  • content/docs/concepts/cluster-semantics.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/implementation-status.mdx (via @objectstack/plugin-security, @objectstack/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/concepts/packages.mdx (via @objectstack/plugin-security, @objectstack/spec)
  • content/docs/concepts/setup-app.mdx (via @objectstack/spec)
  • content/docs/concepts/skills.mdx (via @objectstack/spec)
  • content/docs/concepts/webhook-delivery.mdx (via @objectstack/spec)
  • content/docs/getting-started/architecture.mdx (via @objectstack/spec)
  • content/docs/getting-started/cli.mdx (via @objectstack/plugin-security, @objectstack/spec)
  • content/docs/getting-started/core-concepts.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/guides/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/guides/ai-capabilities.mdx (via @objectstack/spec)
  • content/docs/guides/airtable-dashboard-analysis.mdx (via @objectstack/spec)
  • content/docs/guides/analytics-datasets.mdx (via @objectstack/spec)
  • content/docs/guides/api-reference.mdx (via @objectstack/spec)
  • content/docs/guides/business-logic.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/error-catalog.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/field-type-gallery.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/field-validation-rules.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/permissions-matrix.mdx (via packages/plugins/plugin-security, @objectstack/spec)
  • content/docs/guides/cheatsheets/protocol-diagram.mdx (via packages/spec)
  • content/docs/guides/cheatsheets/query-cheat-sheet.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/quick-reference.mdx (via @objectstack/spec)
  • content/docs/guides/client-sdk.mdx (via @objectstack/spec)
  • content/docs/guides/common-patterns.mdx (via @objectstack/spec)
  • content/docs/guides/contracts/auth-service.mdx (via packages/spec)
  • content/docs/guides/contracts/cache-service.mdx (via packages/spec)
  • content/docs/guides/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/guides/contracts/index.mdx (via @objectstack/spec)
  • content/docs/guides/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/guides/contracts/storage-service.mdx (via packages/spec)
  • content/docs/guides/data-modeling.mdx (via @objectstack/spec)
  • content/docs/guides/driver-configuration.mdx (via @objectstack/spec)
  • content/docs/guides/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/guides/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/guides/external-datasources.mdx (via @objectstack/spec)
  • content/docs/guides/formula.mdx (via @objectstack/spec)
  • content/docs/guides/hook-bodies.mdx (via packages/spec)
  • content/docs/guides/kernel-services.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/dashboard.mdx (via @objectstack/plugin-security, @objectstack/spec)
  • content/docs/guides/metadata/field.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/flow.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/index.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/object.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/validation.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/workflow.mdx (via @objectstack/spec)
  • content/docs/guides/packages.mdx (via @objectstack/plugin-security, @objectstack/spec)
  • content/docs/guides/plugin-development.mdx (via @objectstack/spec)
  • content/docs/guides/plugins.mdx (via @objectstack/plugin-security, @objectstack/spec)
  • content/docs/guides/project-scoping.mdx (via @objectstack/spec)
  • content/docs/guides/public-forms.mdx (via @objectstack/spec)
  • content/docs/guides/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/guides/runtime-services/index.mdx (via packages/spec)
  • content/docs/guides/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/guides/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/guides/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/guides/security.mdx (via @objectstack/plugin-security, @objectstack/spec)
  • content/docs/guides/seed-data.mdx (via @objectstack/spec)
  • content/docs/guides/skills.mdx (via @objectstack/spec)
  • content/docs/guides/solutions/approval-workflow.mdx (via packages/spec)
  • content/docs/guides/solutions/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/guides/solutions/data-automation-interface-access.mdx (via packages/plugins/plugin-security)
  • content/docs/guides/solutions/role-based-interfaces.mdx (via packages/plugins/plugin-security)
  • content/docs/guides/standards.mdx (via @objectstack/spec)
  • content/docs/guides/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/guides/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via packages/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 packages/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v9.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.

…Permissions (ADR-0086 P1)

Packages now ship working default access for their own objects, with a
machine-checkable metadata↔config boundary:

- spec (D3): PermissionSetSchema.packageId (owning package; absent =
  env-authored) + per-record managedBy provenance on the existing
  metadata-persistence axis (package | platform | user). Persisted on
  sys_permission_set as package_id / managed_by (+ package_id index for
  uninstall/upgrade queries).
- seeding (D5): bootstrapDeclaredPermissions — the sibling of
  bootstrapDeclaredRoles — materializes stack.permissions into
  sys_permission_set at boot with managed_by:'package' + package_id.
  Idempotent + upgrade-aware: own rows re-seeded to the shipped
  declaration every boot; foreign-package rows refused loudly (D4: a
  package never writes into a foreign record); env-authored
  platform/user/legacy rows (incl. bootstrapPlatformAdmin defaults)
  never clobbered. Closes the ADR-0078 inert-metadata violation for
  stack.permissions.
- conformance matrix row declarative-permission-seeding (ADR-0056 D10)
  + dogfood proof (showcase-permission-seeding) pin the behavior;
  liveness ledger entries for the two new spec props.

Verified: plugin-security 7 files / spec 245 files / dogfood 37 files
green; live showcase boot shows showcase_contributor +
showcase_member_default seeded with package provenance while
admin_full_access / member_default stay env-owned.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014y5kiH3aPLWtRRRGcVrXcT
@os-zhuang
os-zhuang force-pushed the claude/adr-0086-p1-permission-provenance branch from 007d196 to 2159184 Compare July 4, 2026 08:58
@os-zhuang
os-zhuang marked this pull request as ready for review July 4, 2026 09:10
@os-zhuang
os-zhuang merged commit 7709db4 into main Jul 4, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/adr-0086-p1-permission-provenance branch July 4, 2026 09:10
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 tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants