Skip to content

fix(runtime): dispatcher 面 /share-links 整体透传 ExecutionContext 给 enforcement (#6551) - #6647

Merged
os-project-manager merged 3 commits into
mainfrom
claude/issue-6551-sharelinks-full-envelope
Aug 8, 2026
Merged

fix(runtime): dispatcher 面 /share-links 整体透传 ExecutionContext 给 enforcement (#6551)#6647
os-project-manager merged 3 commits into
mainfrom
claude/issue-6551-sharelinks-full-envelope

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes #6551

缺陷

packages/runtime/src/domains/share-links.ts 在 dispatcher 面(cloud 每环境 kernel 的设计主面,registerShareLinkRoutes: false 时的唯一入口)把已解析完整的 ExecutionContext 重新裁成 { userId, tenantId } 两个字段,再喂给三个裁决方法(createLink / listLinks / revokeLink)。按 #6511 契约,这三个方法的 context 形参是完整 ExecutionContext,TSDoc 写明调用方 MUST NOT rebuild a subset;结构化子类型让两字段对象照样编译通过,tsc 报不了。这是 #6206(plugin-sharing 面,PR #6552)同一条 enforcement 路径的另一张脸,两处互不覆盖。

前提已在当前 origin/main(e39dd66e7)复核:裁剪在 share-links.ts:77-78,消费点 :217(create)/:237(list)/:244(revoke),401 判定 :199

修法(与 #6552 同形)

不再重建 callerCtx:const ec = context.executionContext,三个裁决调用整体透传 ec;路由自己的 401 判定只读 ec?.userId(鉴别"是否登录"不需要授权信封,#6552isAuthenticated 同理)。dispatcher 侧 resolveExecutionContext 产出的信封本身已带 isSystem: false,不需要 #6552 那样的 { ...authz, isSystem: false } 重组——无 cargo-cult 字段。实现面仅 share-links.ts 一个文件(同时删掉了旧的 ec: any,svc 是契约类型,透传处由 tsc 实际检查)。

复现与测试(packages/runtime/src/domains/share-links-enforcement-context.test.ts)

真实件:handleShareLinksRequest(被测的产线入口)、@objectstack/plugin-sharing 的真 ShareLinkService([Finding-2] 可见性读)、@objectstack/plugin-security整个 SecurityPlugin 中间件(照该包自己的 vama-write-path-convergence.test.ts 样板起真件,tenancy 姿态经产线路径 tenancy 服务下发;Layer 0 墙与 Layer 1 RLS 都是产线裁决,不是重实现)。双件:仅存储(内存表;写动词以生产方的 assertEngineUpdateDispatch / assertEngineDeleteDispatch 开门)。错误信封用 runtime 真的 apiErrorResponse 构造,error.code/status 断言对着 ADR-0112 真形状。

测试放在 runtime 自己的测试树(派发单默认位置;动用扩展 plugin-security 测试文件的预授权)。为此给 packages/runtime 加了 devDependency @objectstack/plugin-sharing(sharing 不依赖 runtime,直接或传递均无环;plugin-security 本来就是 runtime 生产依赖)。未动 packages/plugins/plugin-sharingpackages/specresolve-execution-context.ts

反向验证(预测先于测量,记录于 scratchpad)

工作树临时恢复两字段截断重跑本测试文件,预测:4 红(group 属主 201→403 FORBIDDEN、MOAC 201→403、single position 支 201→403、缝 pin 点名 9 个被丢 key)+ 4 绿(组织外 403、显式缺 set 403、基线控制 403、401——修前修后同判,如实排除在修复 pin 之外)。实测与预测逐条一致:4 failed | 4 passed,三个建链例 expected 403 to be 201,缝 pin 红为 dropped/altered keys: expected [ 'email', 'isSystem', …(7) ] to deeply equal [](9 个被丢 key)。方向为常规"红"类,无 #5009 式反转。恢复修复后 8/8 绿。

本地验证

  • pnpm --filter @objectstack/runtime test:112 文件 / 1619 用例全绿(含新文件 8/8)。
  • pnpm --filter @objectstack/runtime typecheck:通过。
  • pnpm lint:通过。
  • lint.yml 全部 check:* 门:32 个根门 + spec 全套(check:generated --reconcile-only / authorable-surface / docs / api-surface / dual-source-exports / exported-any / skill-* / spec-changes / upgrade-guide / react-blocks / spec tsc)+ check:i18n / check:i18n-coverage / check:type-check-coverage / check:driver-conformance / check:stall-guard / check:doc-formula-expressions / downstream-contract 与 examples typecheck 全部 PASS(check:type-check-debt 在全量构建后复跑,结果见 PR 评论/报告)。

变更集

@objectstack/runtime patch:dispatcher 面授权判定结果改变(group 姿态下对可读记录建链 403→201、position 绑定可见性恢复),用户可见。

🤖 Generated with Claude Code

https://claude.ai/code/session_017uFVNMmTxLpmfQYiuKM1Yx


Generated by Claude Code

@vercel

vercel Bot commented Aug 8, 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 8, 2026 8:33am

Request Review

@github-actions github-actions Bot added the size/l label Aug 8, 2026
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

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

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

  • content/docs/api/client-sdk.mdx (via packages/runtime)
  • content/docs/api/index.mdx (via @objectstack/runtime)
  • content/docs/api/wire-format.mdx (via @objectstack/runtime)
  • content/docs/automation/hook-bodies.mdx (via @objectstack/runtime)
  • content/docs/concepts/metadata-lifecycle.mdx (via @objectstack/runtime)
  • content/docs/concepts/north-star.mdx (via packages/runtime)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/runtime)
  • content/docs/deployment/index.mdx (via @objectstack/runtime)
  • content/docs/deployment/production-readiness.mdx (via @objectstack/runtime)
  • content/docs/deployment/single-project-mode.mdx (via @objectstack/runtime)
  • content/docs/deployment/vercel.mdx (via @objectstack/runtime)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/runtime)
  • content/docs/kernel/cluster.mdx (via @objectstack/runtime)
  • content/docs/permissions/authentication.mdx (via @objectstack/runtime)
  • content/docs/permissions/authorization.mdx (via packages/runtime)
  • content/docs/plugins/packages.mdx (via @objectstack/runtime)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/runtime)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/runtime)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/runtime)
  • content/docs/releases/implementation-status.mdx (via @objectstack/runtime)
  • content/docs/releases/v17.mdx (via @objectstack/runtime)

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.

@github-actions github-actions Bot added documentation Improvements or additions to documentation dependencies Pull requests that update a dependency file tests tooling labels Aug 8, 2026
@os-project-manager
os-project-manager marked this pull request as ready for review August 8, 2026 08:50
@os-project-manager
os-project-manager added this pull request to the merge queue Aug 8, 2026
Merged via the queue into main with commit 378d8b1 Aug 8, 2026
26 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-6551-sharelinks-full-envelope branch August 8, 2026 09:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation size/l tests tooling

Projects

None yet

2 participants