Skip to content

fix(runtime): honor app-declared default profile on the artifact-serve path (ADR-0056 D7)#2136

Closed
xuyushun441-sys wants to merge 3 commits into
mainfrom
fix/dev-app-default-profile-rerun
Closed

fix(runtime): honor app-declared default profile on the artifact-serve path (ADR-0056 D7)#2136
xuyushun441-sys wants to merge 3 commits into
mainfrom
fix/dev-app-default-profile-rerun

Conversation

@xuyushun441-sys

Copy link
Copy Markdown
Contributor

取代 #2132(GitHub 未对该 PR 的 synchronize/reopen 事件触发 CI —— 其他分支正常,属该 PR 的触发故障。新分支用 opened 事件重新跑 CI)。

问题

objectstack dev/serve/start 从编译产物(dist/objectstack.json,无 host objectstack.config.ts)启动时,不应用 app 声明的默认权限集 profile(isProfile + isDefault),而带 config 启动时会。表现:默认 profile 携带 readScope(如 ADR-0057 unit_and_below)的 app,在 artifact 启动路径下被忽略,所有用户回退到内置 owner-only 的 member_default

根因

dev 没有独立启动路径,它把 serve --dev 当子进程拉起;无 config 时走 artifact 启动路径。产物本身保留了 permissions/isDefault,但 createStandaloneStack(packages/runtime)只把 objects/requires/manifest 浮到顶层,漏掉了 permissions[]/roles[]。于是 serve.tsappDefaultProfileName(config.permissions) 拿到 undefined,SecurityPlugin 回退到 member_default。config 加载路径未受影响(originalConfig.permissions 在展开时幸存)。

修复

createStandaloneStack 把产物 bundle 的 permissions[]/roles[] 一并浮到顶层,与现有 objects/requires/manifest 一致。artifact 启动路径自此与 config 路径行为相同。

验证

  • packages/runtime/src/standalone-stack.test.ts:artifact 路径浮出 permissions/roles(含 readScope),驱动 appDefaultProfileName
  • packages/dogfood/test/showcase-scope-depth-fallback.dogfood.test.ts:profile 按名字作 fallbackPermissionSet 解析,矩阵按 unit_and_below 放宽(配合参考层级 resolver),无 resolver 时 fail-closed。
  • 全量:runtime 401、dogfood 145 通过。

🤖 Generated with Claude Code

os-zhuang and others added 2 commits June 21, 2026 22:41
…e path (ADR-0056 D7)

`createStandaloneStack` (the boot path used by `objectstack dev`/`serve`/`start`
when serving a compiled `dist/objectstack.json` with no host
`objectstack.config.ts`) surfaced `objects`/`requires`/`manifest` from the
artifact bundle but dropped `permissions[]` and `roles[]`. So the CLI's
`appDefaultProfileName(config.permissions)` saw `undefined` and SecurityPlugin
fell back to the built-in owner-only `member_default` — an app `isDefault`
profile carrying e.g. `readScope: 'unit_and_below'` was silently ignored. The
config-load path was unaffected (the app's `permissions` survived via the
original stack object).

Surface `permissions[]` and `roles[]` from the artifact bundle, mirroring the
existing `objects`/`requires`/`manifest` handling, so the artifact-serve path
applies the app default profile exactly like the config-load path.

Tests:
- packages/runtime/src/standalone-stack.test.ts — the artifact-serve path now
  surfaces permissions/roles (incl. readScope) and drives appDefaultProfileName.
- packages/dogfood/test/showcase-scope-depth-fallback.dogfood.test.ts — a
  profile resolved by name as fallbackPermissionSet widens the visibility matrix
  (unit_and_below) with the reference hierarchy resolver, and fails closed
  without it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The first createStandaloneStack call cold-loads heavy deps (objectql/metadata/
driver-memory) via dynamic import, which on a cold CI worker (Node 20) exceeded
vitest's default 5s test timeout — failing only the first case. Move the
one-time boot into a beforeAll with a 60s timeout and have the assertion cases
read the shared result (also removes 4 redundant boots).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 21, 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 Jun 21, 2026 3:15pm

Request Review

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@xuyushun441-sys

Copy link
Copy Markdown
Contributor Author

核心修复已随 #2133 合入 main,配套的测试超时修复已由 #2145 合入。本 PR 是 CI 触发故障期间产生的重复,关闭清理。

@xuyushun441-sys
xuyushun441-sys deleted the fix/dev-app-default-profile-rerun branch June 22, 2026 00:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants