Files
HomeAgent/.github
JianFeeeee efe0cf119b fix(ci): 排除表断言从「查提示文案」改为「查可执行判空逻辑」
## 缺陷(真实存在,已实测复现)

check-ci-gates.py 里「排除表每项必须写原因」这条断言原本写成:

    check(any("没有写原因" in r for _n, r in race), ...)

它只检查**提示文案还在**,完全不看校验逻辑本身。

实测取证:把 ci.yml 第 245 行的
    if [ -z "${reason// /}" ]; then
改成
    if false; then
(提示文案一字未动、校验实际彻底失效):
  · 该步骤实跑 EXIT=0 ——「无原因必须失败」这条保证彻底破掉
  · 而 check-ci-gates.py 仍然通过(GATES_EXIT=0)

也就是说:判据被文案顶包了。这正是本脚本 docstring 里批判的
「run: | 里的 # 是字符串不是注释 ⇒ 注释能骗过断言」,自己又犯了一次。

## 修法

断言改为在**剥掉 shell 注释后的可执行行**上,同时要求:
  · `${reason// /}`(判空变量)存在
  · `exit 1` 存在
只有文案、没有真逻辑 ⇒ 不通过。

## 验证(先证能红,再证不误伤)

  注入 if false 变异(保留文案)→ 修复前 EXIT=0(漏),修复后 **EXIT=1**(咬住)
  还原 → EXIT=0
  回归另两个变异(去掉 cmd/gui 剔除、去掉 -count=1)→ 均仍 EXIT=1,未被这次修改削弱

## 门禁

go build ./... = 0|go vet ./... = 0|go test ./internal/kernelboot/modules/ = ok
check-ci-gates.py = 0|gofmt 本线文件干净

边界:只改这一个脚本文件,未动 ci.yml、未动业务逻辑;未 push、未开 PR。
2026-10-24 11:59:00 +08:00
..