Part of #6155(维护者 2026-08-07 裁决 Q2=**A** + Q3=**A**;services 座位转移立单,落点在运行时发布门——域标签交分诊按落点文件定)。 ## 裁决口径 - **Q2=A**:平台级定时流程的 org 由作者在 `create_record` 的 `fields.organization_id` **显式声明**(#6153 的 fill-only 已保证作者值优先——该半边**零新代码**,既有能力); - **Q3=A**:护栏**只落运行时发布门**——给 `assertRuntimeAuthoringRules` → `evaluateRuntimeAuthoringGate` 补两个缺失输入(**写入 org** 与 **部署形态** `postureEnforcesWall(resolveTenancyPosture())`),CLI 纯函数侧 ⛔ 不判(构建机 env 是假信号); - 拒绝组合:多组织部署 && 平台级流程 && schedule 触发 && 含 `create_record` && 未在 `fields` 显式给 `organization_id` ⇒ **发布时拒绝**(与 #2308/#5378 lint 面同族,照抄形状不发明新面)。 ## #6155 dev 探针已量出的两个输入缺口(实现起点,勿重查) 1. 部署形态:`postureEnforcesWall(resolveTenancyPosture())` 是进程级 env 读数,`AUTHORING_RULES` 纯函数签名不含它——按 Q3=A 从 gate 侧注入; 2. 写入 org:在 `saveMetaItem` 手里但 `assertRuntimeAuthoringRules` 未传给 `evaluateRuntimeAuthoringGate`; 3. ⚠️ **待确认的短路**:`assertRuntimeAuthoringRules` 现有 `if (this.environmentId === undefined) return;`——控制面 kernel 上整条 gate 不跑。实现前先答「这是既有设计还是遗漏」:若短路使护栏在关键部署形态不可达,STOP 上报,⛔ 不得擅自拓宽 gate 激活面(#6155 dev 原话:无把握,未擅自改动)。 ## 依赖 Blocked-by: #6283(spec 半边 flip——Q1=B 落地后「org 归属的 flow」不复存在,本护栏的拒绝组合语义才是终态)。 Refs:#6155(裁决与探针证据)、#6153(fill-only 先例)、#2308/#5378(lint 面同族)、ADR-0118 D1。
Part of #6155(维护者 2026-08-07 裁决 Q2=A + Q3=A;services 座位转移立单,落点在运行时发布门——域标签交分诊按落点文件定)。
裁决口径
create_record的fields.organization_id显式声明(fix(service-automation): runAs:'system' 的 create_record 按 ADR-0118 染全三列——组织、属主、创建者禁 NULL (#5494) #6153 的 fill-only 已保证作者值优先——该半边零新代码,既有能力);assertRuntimeAuthoringRules→evaluateRuntimeAuthoringGate补两个缺失输入(写入 org 与 部署形态postureEnforcesWall(resolveTenancyPosture())),CLI 纯函数侧 ⛔ 不判(构建机 env 是假信号);create_record&& 未在fields显式给organization_id⇒ 发布时拒绝(与 fix(security): surface schedule/user-less flow runAs fail-open (#1888 follow-up) #2308/Author-time expression validator is blind to registry-injected system columns —record.owner_id/created_at/organization_idare rejected as unknown fields #5378 lint 面同族,照抄形状不发明新面)。#6155 dev 探针已量出的两个输入缺口(实现起点,勿重查)
postureEnforcesWall(resolveTenancyPosture())是进程级 env 读数,AUTHORING_RULES纯函数签名不含它——按 Q3=A 从 gate 侧注入;saveMetaItem手里但assertRuntimeAuthoringRules未传给evaluateRuntimeAuthoringGate;assertRuntimeAuthoringRules现有if (this.environmentId === undefined) return;——控制面 kernel 上整条 gate 不跑。实现前先答「这是既有设计还是遗漏」:若短路使护栏在关键部署形态不可达,STOP 上报,⛔ 不得擅自拓宽 gate 激活面(Schedule 触发器不携带任何 org 上下文——定时 runAs:'system' 清扫在多组织部署里仍会产出 organization_id=NULL 的行(#5494 的用户缺席半边) #6155 dev 原话:无把握,未擅自改动)。依赖
Blocked-by: #6283(spec 半边 flip——Q1=B 落地后「org 归属的 flow」不复存在,本护栏的拒绝组合语义才是终态)。
Refs:#6155(裁决与探针证据)、#6153(fill-only 先例)、#2308/#5378(lint 面同族)、ADR-0118 D1。