Skip to content

治理体系客观问题证据(仅列事实,不含处置建议) #17

Description

@randypanding

以下为对 .github 治理仓所做的静态推演中,可被本仓文件与代码客观证明的事实。仅陈述行为与证据位置,不给出处置建议。

A. 同一 GitHub App 在仓库内存在两种拼写

  • scripts/create-cloudbird-agent-app.html L12:manifest "name": "cloudbird-agent"
  • scripts/new-repo-init.sh L30-31:select(.app_slug == "cloudbrid-agent")
  • governance/expected-state.json L37:"name": "cloudbrid-agent"
  • governance/GOVERNANCE.yaml L90:App(cloudbrid-agent)
  • scripts/gh-app-token.sh L2/L7/L14/L19/L51/L69 注释:cloudbird-agent
    → 同一对象在本仓内同时出现 cloudbird-agentcloudbrid-agent

B. gate 不校验 ADR 存在性,也不覆盖 expected-state.json

  • .github/workflows/gate.yml L19-28:仅 yaml.safe_load 解析 yaml;L29-32:仅 jq -e . 校验 rulesets/*.json 语法;L37-44:仅查 REPOS.yaml 重名。
  • governance/GOVERNANCE.yaml L194-195:C1 要求 ADR(新建或引用编号) 并注明“无 ADR 不合并”。
  • jq 遍历范围仅为 governance/rulesets/*.json(gate.yml L32);governance/expected-state.json 为 JSON,既非 *.yaml 也非被遍历的 ruleset。
    → 变更 GOVERNANCE.yaml / expected-state.json 且不含 ADR 时,gate 仍通过。

C. 治理“语义”削弱无法被机器检出,仅能与现状自洽

  • governance/drift-check.sh L42-45:把线上 ruleset 与“落盘文件本身”做同构裁剪后 diff,期望值取自被测文件;不对 GOVERNANCE.yaml 的 intent/strength 字段做任何比对。
    → 将 enforcementactive 改为 evaluate,或从 required_status_checks 移除 gate,只要落盘与线上一致,drift-check 判定 OK。

D. 治理变更分级(C1/C2/C3)无机器强制

  • governance/GOVERNANCE.yaml L191-200 定义 C1/C2/C3 及各自 scope。
  • .github/workflows/gate.yml 无任何“按文件路径判定某次变更属哪一级”的逻辑。
    → 以 C3(文档)提交实际改动 C1 范围文件(如 expected-state.jsonGOVERNANCE.yaml),gate 无感知。

E. org admin 令牌被注入公开仓 workflow,且其存在未登记于期望状态

  • 本仓为 public:profile/README.md L3;governance/REPOS.yaml L20-25(visibility: public)。
  • .github/workflows/governance-drift.yml L21/L27:GH_TOKEN=${{ secrets.GOVERNANCE_TOKEN }}
  • governance/drift-check.sh L8/L19-22:注明需“org admin GH_TOKEN”,api() 以其鉴权访问 org 全部 rulesets / actions / code-security / repos / collaborators。
  • governance/expected-state.json L32-35:org_secrets_required[CB_APP_ID, AGENT_APP_SECRET],不含 GOVERNANCE_TOKEN
    → org admin 级令牌被用于公开仓 workflow,且治理期望状态未登记该令牌。

F. 三个 ruleset 的 bypass 均为 OrganizationAdmin(always)

  • governance/rulesets/main-protection.json L21-27、codeql-gate.json L9-14、release-tags.json L9-14:bypass_actors = [OrganizationAdmin, always]
    → 任一 OrganizationAdmin 可绕过 BP-1/BP-3/SC-1 对应 ruleset。

G. 漂移 issue 只创建/追加,无自动关闭

  • .github/workflows/governance-drift.yml L29-47:仅 if: failure() 时,按固定标题在同一 open issue 上幂等 comment(L43-45)或 create(L47);body L42 硬编码 @randypanding;没有任何关闭 issue 的步骤。
    → 漂移被修复后,已存在的漂移 issue 不会被自动关闭。

H. 若干漂移类别无 apply.sh 修复路径

  • governance/apply.sh 仅覆盖:step1 ruleset(L20-34)、step2 actions(L36-41)、step3 workflow 权限(L43-45)、step4 code-security default(L48-59)、step5 仓基线(L61-69)。
  • governance/drift-check.sh 会检出的部分类别在 apply.sh 中无对应修复操作:§5 org secrets 缺失(L93-98)、§6 App 权限出现禁用项/App 缺失(L101-114)、§7 REPOS.yaml 未申报(L131-134)、§8 直推(L150-158)、§9 admin 数量≠1(L180-188)。
    → 上述漂移被检出时,apply.sh 存在不可修复的类别。

I. §8 直推检测以 commit 消息后缀为唯一判据

  • governance/drift-check.sh L150-151:将“不匹配字面模式 [(]#[0-9]+[)]$(#数字) 结尾)”的 commit 判为直推漂移;即把 squash 合并产生的 (#N) 结尾当作“已走 PR”的唯一证据。
    → 直推 commit 的消息若以 (#数字) 结尾,不会被识别为漂移。

J. 治理审批与 admin 唯一性全部唯一依赖单一人,且写死在代码里

  • CODEOWNERS L4-10、.github/CODEOWNERS L3:全部路径仅 @randypanding
  • governance/rulesets/main-protection.json L43 require_code_owner_review: true,L41 required_approving_review_count: 0
  • governance/drift-check.sh L163:OWNER_LOGIN="${OWNER_LOGIN:-randypanding}";L180-184:强制每仓 admin 数量==1 且 == OWNER_LOGIN。
    → 治理变更审批与 admin 唯一性校验唯一依赖 randypanding;drift-check 将其硬编码为默认值。

K. 新仓挂载失败不会中断脚本

  • scripts/new-repo-init.sh L37-42:挂载返回非 204 时仅 echo 手动路径,不触发非零退出(脚本 L8 set -euo pipefail);随后 L44-50 继续执行“验证”,L51-57 打印“完成”。
    → App 挂载失败时脚本仍以退出码 0 结束并输出“完成”。

L. 新仓标准流程从公开 main 未固定拉取脚本并在 admin 上下文中执行

  • scripts/new-repo-init.sh L54-56:bash <(curl -sS https://raw.githubusercontent.com/$ORG/.github/main/scripts/new-repo-init.sh) <name>,未 pin commit/tag,且 .github 为 public(见 E)。
    → 脚本内容随 main 变化,未固定的远端脚本在持有 admin 凭据的上下文中被执行。

M. 本仓缺少其自身声明的契约/机制文件

  • governance/GOVERNANCE.yaml L138(CG-1)声明 AGENTS.md 契约;本仓根目录无 AGENTS.md
  • standards/agent/agent.schema.yaml L23-24 注明六机制原型“声明于 standards/archetype-profiles.yaml”;该文件在本仓不存在。
    → 上述被本仓引用的文件不存在。

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions