Skip to content

[自动合并 P3-1] gate 定义上移至 org required workflows(枢轴) #95

Description

@randypanding

目标

【枢轴卡】把 gate 的审判逻辑上移到 PR 改不动的地方:用 org ruleset 的 required workflows 规则,把 gate 指向中心仓 CI-Workflows 的固定 ref。完成这一步,C1 的 owner-merge 才具备取消的前提;不做这一步,人类瓶颈永远在。

背景(源自 #81 §3.3——"整件事的枢轴")

pull_request 事件使用包含 PR 变更的 workflow 定义。所以一个 PR 可以把 gate.yml 里的 adr-required、gitleaks、断言逻辑掏空,保留 job 名叫 gate,required check 照样绿。现在唯一防线是 .github/ 属于 C1 → owner-merge(人)——这正是要去掉的人。#81 给出 A/B 两案,采用 A(推荐):org ruleset required workflows 指向中心仓固定 ref,审判逻辑来源不再是被审仓库自身。(已有雏形:hygiene 已钉 commit hash 复用 CI-Workflows,本卡是把整个 gate 上移这一思路的完成态。)

涉及文件

  • org ruleset(新增或改造:required workflows 规则,指向 Cloudbird-Software/CI-Workflows 的 gate workflow @ 固定 commit)
  • CI-Workflows/.github/workflows/(新增组织级 gate workflow:聚合 hygiene + P2 各门,作为 required workflow 本体)
  • 各业务仓本地 .github/workflows/gate.yml(退役或降级为非 required 的快捷反馈)
  • governance/rulesets/(ruleset 定义落盘)+ governance/expected-state.json(对账:required workflow 的 repo、path、ref 三者全部钉死)
  • governance/GOVERNANCE.yaml(BP-2 的 platform 声明更新)

执行步骤

  1. 在 CI-Workflows 构建组织级 gate workflow(workflow_call 形态之外,需满足 required workflows 的规则约束:单一文件、固定 ref),聚合现有全部检查 + P2 新增各门。
  2. 新增 org ruleset:required workflows 规则,repository 选择器覆盖全部受管仓,workflow 指向 CI-Workflows 的 gate @ 固定 commit SHA。
  3. 与原 main-protection 的 required_status_checks(context: gate)并存运行一段观察期,确认等价后退役本地 gate 的 required 地位。
  4. expected-state 对账:required workflow 的 repo/path/ref、ruleset 启用状态、bypass actors 全部进对账。
  5. 升级 CI-Workflows 的 gate 变更流程:改 gate = 改信任根,CI-Workflows 仓本身的 gate 变更保护(该仓的 C1 属性)在本卡内一并声明。

验收标准

  • 攻击测试通过:PR 掏空本地 gate.yml 后仍被拦(见 T1)。
  • required workflow 从中心仓固定 ref 执行,各仓 PR 的 required check 正常上报。
  • ref 漂移(有人改 ruleset 指向别的 ref/仓)被 drift-check 检出。
  • 观察期内新旧两轨判定一致率 100%。

测试方法(预先指定)

T1 自我削弱攻击测试(核心中的核心,负向)

  1. 在测试仓开 PR:把本地 .github/workflows/gate.yml 的断言逻辑全部删除,只留一个名叫 gate、永远 exit 0 的 job(模拟 agent 自我削弱)。
  2. 断言:该 PR 的 required 判定由中心仓固定 ref 的 gate 执行——本地掏空版本不被采信;PR 因真实检查(hygiene/adr-required 等照常运行)被正确判定;若该 PR 同时含违规内容(如 C1 无 ADR),必须红。
  3. 若 PR 能绿着合并——本卡失败,回滚并回报 自动合并计划 #81

T2 ref 钉死验证(负向)

  1. 断言 ruleset 中 required workflow 的 ref 为完整 commit SHA(非 tag/branch)。
  2. 手动在 org ruleset UI 把 ref 改成别的值 → 触发 drift-check → 断言报漂移开 issue;apply 还原后 issue 关闭。

T3 双轨一致性(观察期)

  • 新旧两轨并行期间,对连续 ≥10 个真实 PR 比对两侧判定结论,断言 100% 一致;任一不一致必须定位原因后才允许退役旧轨。

T4 中心仓保护(负向):向 CI-Workflows 开 PR 修改 gate workflow → 断言该仓自身 required 检查 + C1 保护生效(治理仓属性),普通 agent 身份无法直接合并。

依赖

  • P1-3(aggregator 严格断言——上移后的 gate 必须携带该语义)
  • P2-6(自动 revert 已就位——枢轴切换出事时有事后兜底)
  • 建议在 P2 各门稳定后执行;它是 P3-2(取消 C1 owner-merge)的硬前提

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    auto-merge自动合并计划(#81)工作卡gateGate 工作流相关governance治理体系相关

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions