## 背景 B2/B4(ADR-0095 D2/D3,#2938)在 `resolve-authz-context.ts` 算出并携带了显式 `ctx.posture`(`PLATFORM_ADMIN > TENANT_ADMIN > MEMBER > EXTERNAL`)。但在修复租户墙 org_admin 越墙(#2946 / Finding 2)时实测确认:**该字段没有被 plumb 进 enforcement 中间件收到的 `ExecutionContext`**——`rest-server.ts`(~L1197-1215)与 `runtime/resolve-execution-context.ts`(~L143-204)构建执行上下文时**都丢弃了 `authz.posture`**。 后果:任何 enforcement 侧插件若直接读 `context.posture` 会永远 undefined → 静默 no-op。#2946 因此改用「平台专属能力探针」(`hasPlatformAdminPosture`)绕开,而非用 posture 作豁免门。 ## 缺口 posture 目前是一个「算出来但传输层丢弃、enforcement 拿不到」的半成品字段。它已被 explain 引擎消费(report 侧),但 enforcement 侧不可用。这也是 security review 发现的 explain-vs-enforcement posture 分叉的根因之一。 ## 建议 若要让 enforcement 真正按 posture 裁决(ADR-0095 D2/D3 的完整意图),需在两处补 plumbing: - `packages/rest/src/rest-server.ts` 构建 ExecutionContext 时带上 `posture: authz.posture` - `packages/runtime/src/security/resolve-execution-context.ts` 同上(覆盖 runtime/MCP 入口) 并把 `ExecutionContext` 类型加上可选 `posture` 字段。之后 #2946 的 `hasPlatformAdminPosture` 能力探针可考虑收敛为读 `ctx.posture`(单一真相)。 **注意**:这是「posture 透传进 enforcement」的一部分——B2 刻意止步于解析器层。是否让 enforcement 全面按 posture 重写是更大的 ADR 级决策;本 issue 只跟踪「把已算出的 posture 传下去」这一具体 plumbing 缺口。 ## 关联 ADR-0095 D2/D3 · #2938(B2/B4)· #2946(租户墙修复,用能力探针绕开)· tracking #2920 发现于 #2920 的安全审查。
Activity
fix(plugin-security): explain posture 证据对齐 enforcement 派生(消除标签漂移) (#2949
fix(authz): carry derived posture rung on ExecutionContext (#2947) (#…
os-zhuang commentedon Jul 15, 2026
已实现并合并于 #2956:
ExecutionContextSchema新增可选posture字段,rest-server与 runtimeresolveExecutionContext两个入口都透传authz.posture(此前被丢弃)。行为保持——enforcement 尚未按 posture 裁决(那是更大的 ADR 级决策,见 #2920 讨论)。关闭。Generated by Claude Code
os-zhuang commentedon Jul 15, 2026
已在 PR #2956(commit
c11e24b,已合并 main)修复:ExecutionContextSchema加可选posture字段;rest-server.ts与resolve-execution-context.ts两个入口均透传authz.posture(guest 不设)。纯加法、行为不变(当前无 enforcement 消费 posture,是否按 posture 重写 enforcement 属更大 ADR 级决策,不在本 issue 范围)。中文「关闭 #2947」未触发 GitHub 自动关联,故手动关闭。
Generated by Claude Code