Files
eng-standards-main/scripts
姚章浩 1e71887b7e fix(adopt): 接入器不再自动合并 —— 失败/取消/未运行/未知/超时/未批准一律不请求合并
原来的 add_pointer 是这样干的:建完 PR → 最多等 180 秒状态离开 pending → **无条件调合并接口**。
也就是说:检查失败、被取消、从来没有检查、状态读不到、等超时 —— 五种情况都会合并。
这等于把"审批人"变成了这个脚本,而脚本没有资格替人拍板。

改法:合并变成独立动作。
- add_pointer 建完 PR 就把状态如实打出来(有界等待 12×5s)然后**停下**,不合并。
- 新增 --merge-pr <n>:先取 PR 头提交与检查状态,再过 merge_decision() 判定,
  只有"显式批准 + 头提交没变 + 状态 success"三条同时成立才发出合并请求,随后读回
  (Gitea 合并成功可能返回空 body,读回才是权威)。
- merge_decision() 是纯函数,--self-test 逐条证明:失败 / 取消 / 未运行 / 未知 / pending /
  头提交变了 / 没批准 —— 七种情形全部拒绝合并(8 个用例,实测全过)。

顺带修口径:原来打印的"(直推也拦得住:gate 在 CI 里)"是错的 ——
CI 的 gate 是推完再跑的,它拦不住那次推送本身。要拦推送只有两条路:本机 hook 或开分支保护。
文档里 06-接入既有工程.md 的同一句话一并改掉。

验证:python3 scripts/adopt-existing.py --self-test 通过;
DRY-RUN 对 Weknora/knowledge-governance 实跑,如实输出"合并:**不自动做**",
体检结果与实测一致(无分支保护、context build / build (push)、仓库级 runner)。
2026-10-12 00:12:06 +08:00
..