From 8cfb3e095166f5332eaffb615500681b3d71f9d6 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sun, 25 Oct 2026 07:57:54 +0800 Subject: [PATCH] =?UTF-8?q?ci(race):=20ID:10/ID:17=20=E6=94=B6=E5=B0=BE=20?= =?UTF-8?q?=E2=80=94=E2=80=94=20=E6=92=A4=E6=8E=89=20kernelmod/all=20?= =?UTF-8?q?=E7=9A=84=20KERNEL-REGISTRY-SETLOCK=20=E6=8E=92=E9=99=A4?= =?UTF-8?q?=E9=A1=B9=EF=BC=8C=E8=A1=A8=E7=95=99=E6=98=BE=E5=BC=8F=E7=A9=BA?= =?UTF-8?q?=E8=A1=A8=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Registry 的 Set* 已在 bf44654(本分支已并入)全部改为取写锁,证据步②会据此判红, 故撤除该排除行。表删空后保留一行 `# none`,与 check-ci-gates.py 的显式空表守卫配套, 避免「删空」与「漏写」不可区分(ID:19)。 --- .github/scripts/check-ci-gates.py | 20 ++++++++++++++++++-- .github/workflows/ci.yml | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/scripts/check-ci-gates.py b/.github/scripts/check-ci-gates.py index e25d3e10..e0137dc3 100755 --- a/.github/scripts/check-ci-gates.py +++ b/.github/scripts/check-ci-gates.py @@ -168,16 +168,32 @@ else: "守卫不能把「排除项删干净」与「漏写标记」混为一谈") # ── 反向:空体没有任何标记 ⇒ 必须红(这就是 ID:19 的假绿入口)── - for _bad_name, _bad_inner in [ + # + # ★ 样本数必须被断言(ID:19 变异 M8 抓出来的缺口): + # 上面这组反向自测自己也可能被改坏 —— 把容器换成 `[] and [...]` + # 或 `[] or [...]` 后循环空转、一条都不跑,而**没人发现**。 + # 实测:那份变异下本脚本 exit=0、零失败(自测静默死掉)。 + # 所以先把样本集固化成一个常量,再断言它的长度, + # 这样"改坏容器"与"删掉样本"都会红。 + _EMPTY_BAD_CASES = [ ("完全空体", ""), ("只有空行", "\n"), ("只有空行+空白", "\n \n"), ("非显式标记的注释", "# 无排除项"), - ]: + ] + if len(_EMPTY_BAD_CASES) != 4: + fails.append("空表反向样本数变了(期望 4,实际 %d)—— 除新增样本,否则说明样本被删" + % len(_EMPTY_BAD_CASES)) + for _bad_name, _bad_inner in _EMPTY_BAD_CASES: if _run_body(_replace_table(_bad_inner)).returncode == 0: fails.append( "空表形态「%s」竟通过 ⇒ 空表显式声明守卫已失效" "(表被删空与有意清空无法区分,排除项漏删会静默变绿)" % _bad_name) + # 且必须真的跑了 4 条(防容器被换成 `[] and [...]` 这类空转写法) + _ran = sum(1 for _n, _i in _EMPTY_BAD_CASES + if _run_body(_replace_table(_i)).returncode != 0) + if _ran != 4: + fails.append("空表反向自测实际只咬了 %d/4 条 —— 自测自身被改坏或空转" % _ran) _probe = "test|internal/probe/synthetic|TestSyntheticProbe" # 只打 reason:reason 空、ticket 有效 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f1bbfd27..ac6f0a90 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -225,7 +225,7 @@ jobs: set -euo pipefail # 列名:粒度|目标|原因|修复单号 (用 | 分隔,原因内可含空格) read -r -d '' TABLE <<'EOF' || true - pkg|internal/kernelmod/all|*(整包)|该包把真实整机装起来(bootgraph_test.go 的整机判据) ⇒ 第 4 层 agent 与 plugin-host 并行 Init 时,双方都无锁直写同一 plugin.Registry 的 7 个 Set*(SetLuaVM/SetBaseAPIKey/SetSupervisor/SetTracker/SetConfig/SetStageHost/SetIndexer,registry.go:231-284)。竞争在**内核装配**里,不在本包代码里;任何装整机的用例都会撞上。★ 目标包随 ID:13 迁到此(原 internal/kernelboot/modules 已删)|KERNEL-REGISTRY-SETLOCK + # none EOF tests=""; pkgs=""; n=0