From 4488278236e187ac0a78a27ac410169b28756766 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 22 Oct 2026 21:13:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E9=97=B8=E6=9C=BA):=20=E6=89=B9=20A=20?= =?UTF-8?q?=E9=97=B8=E9=94=AE=E6=98=A0=E5=B0=84=E6=8D=A2=E4=BB=A3=E2=80=94?= =?UTF-8?q?=E2=80=94=E6=96=B0=E5=A2=9E=2000=20=E5=86=92=E7=83=9F=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=EF=BC=88=E6=8E=92=E6=9C=80=E5=89=8D=EF=BC=8Ctools/run?= =?UTF-8?q?=5Fsmoke.py=20=E8=B7=91=20smoke=5Fboot=20=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=EF=BC=89=EF=BC=9B01=20=E5=86=92=E7=83=9F=E5=85=A8=E9=87=8F?= =?UTF-8?q?=E2=86=9201=20=E7=B3=BB=E7=BB=9F=E6=B5=8B=E8=AF=95=EF=BC=88?= =?UTF-8?q?=E8=BF=87=E6=B8=A1=E6=9C=9F=E4=BB=8D=E5=90=83=20smoke=5Fall.gd?= =?UTF-8?q?=EF=BC=8C=E8=BF=90=E8=A1=8C=E5=99=A8=E6=8D=A2=20run=5Fsystem=5F?= =?UTF-8?q?test.py=EF=BC=89=EF=BC=9B02=20=E5=8D=95=E5=85=83=E5=A5=97?= =?UTF-8?q?=E4=BB=B6=E2=86=9202=20=E5=8D=95=E5=85=83=E4=B8=8E=E9=9B=86?= =?UTF-8?q?=E6=88=90=E6=B5=8B=E8=AF=95=EF=BC=88run=5Fall.gd=20manifest=20?= =?UTF-8?q?=E5=90=AB=201=20=E6=9D=A1=E9=9B=86=E6=88=90=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=EF=BC=8C=E5=90=8D=E4=BB=8E=E5=AE=9E=EF=BC=89=EF=BC=9B=E5=85=B6?= =?UTF-8?q?=E4=BD=99=2012=20=E9=94=AE=E4=B8=8D=E5=8A=A8=EF=BC=9B=E5=A4=B4?= =?UTF-8?q?=E9=83=A8=E6=B3=A8=E9=87=8A=E4=B8=8E=E8=B7=91=E6=89=B9=E6=A8=AA?= =?UTF-8?q?=E5=B9=85=E5=90=8C=E6=AD=A5=E3=80=82baseline.json=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=94=B9=E9=94=AE+=E6=96=B0=E5=A2=9E=2000=20=E7=BB=BF?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=EF=BC=88note=20=E8=AE=B0=E7=BC=98=E7=94=B1?= =?UTF-8?q?=E4=BB=BF=2008c=20=E5=85=88=E4=BE=8B=EF=BC=89=EF=BC=9B09=20?= =?UTF-8?q?=E9=9D=99=E6=80=81=E6=89=AB=E6=8F=8F=E5=9F=BA=E7=BA=BF=20exit?= =?UTF-8?q?=3D1=20=E7=B3=BB=E6=BB=9E=E5=90=8E=E7=BA=A2=E2=80=94=E2=80=94?= =?UTF-8?q?=E5=8D=95=E8=B7=91=E5=AE=9E=E6=B5=8B=20exit=3D0=20=E6=A0=B8?= =?UTF-8?q?=E7=BB=BF=E5=90=8E=E6=94=B9=E5=9B=9E=E7=BB=BF=E3=80=82static=5F?= =?UTF-8?q?scan.sh=20S11=20=E8=AE=BE=E3=80=8C=E5=8E=BB=E9=87=8D=E9=97=B8?= =?UTF-8?q?=E3=80=8D=E5=90=8C=E5=BD=A2=E5=BC=82=E4=B9=89=E8=B1=81=E5=85=8D?= =?UTF-8?q?=EF=BC=88=E6=9C=BA=E5=88=B6=E8=AF=8D=E5=90=AB=E9=80=80=E5=BD=B9?= =?UTF-8?q?=E8=AF=8D=E5=AD=90=E4=B8=B2=EF=BC=8C=E5=AE=88=20smoke=5Fall.gd?= =?UTF-8?q?=20=E5=9C=A8=E5=86=8C=E6=96=AD=E8=A8=80=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=EF=BC=89=EF=BC=9Bdoc=5Fterm=5Faudit=20=E8=AF=8D=E8=A1=A8?= =?UTF-8?q?=E6=89=BF=E6=8E=A5=E5=9B=9B=E7=BA=A7=E6=B5=8B=E8=AF=95=E5=B1=82?= =?UTF-8?q?=E5=BA=9F=E5=BC=83=E8=AF=8D=EF=BC=88=E3=80=8C=E9=87=8D=E9=97=B8?= =?UTF-8?q?=E3=80=8D=E8=B4=9F=E5=90=91=E6=96=AD=E8=A8=80=E6=8E=92=E9=99=A4?= =?UTF-8?q?=E3=80=8C=E5=8E=BB=E9=87=8D=E9=97=B8=E3=80=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/tests/.gates/baseline.json | 16 ++++++++++------ game/tests/static_scan.sh | 6 ++++++ tools/doc_term_audit.py | 7 +++++++ tools/run_all_gates.sh | 21 ++++++++++++--------- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/game/tests/.gates/baseline.json b/game/tests/.gates/baseline.json index 3574e164..ed38e64b 100644 --- a/game/tests/.gates/baseline.json +++ b/game/tests/.gates/baseline.json @@ -1,11 +1,15 @@ { - "note": "存量基线·首次自动生成;闸况变化时本脚本会判红,需人工确认后重生成;2026-10-17 人工确认重生成 06 条目:af94ce97 把 gdd_lint 记为存量红(01 篇 R5),该红已由 fcb8c3f8 补流程图消除,实测 --docs 域 06 exit=0,故基线改回绿。2026-10-18 新增闸件 08c 流水线闸(tools/pipeline_gate.py 注册上电),手工加入绿记录(roadmap 压缩批实测 --docs 域 exit=0),其余条目原样保留。", + "note": "存量基线·首次自动生成;闸况变化时本脚本会判红,需人工确认后重生成;2026-10-17 人工确认重生成 06 条目:af94ce97 把 gdd_lint 记为存量红(01 篇 R5),该红已由 fcb8c3f8 补流程图消除,实测 --docs 域 06 exit=0,故基线改回绿。2026-10-18 新增闸件 08c 流水线闸(tools/pipeline_gate.py 注册上电),手工加入绿记录(roadmap 压缩批实测 --docs 域 exit=0),其余条目原样保留。2026-10-22 测试术语与层级重构批 A 改键:01 冒烟全量→01 系统测试(同一断言面 smoke_all.gd,运行器换 tools/run_system_test.py,过渡期判定口径不变)、02 单元套件→02 单元与集成测试(同一 run_all.gd 入口,名从实)、新增 00 冒烟测试(tools/run_smoke.py+game/tests/smoke_boot.tscn,重写后单跑实测 17 项 0 失败 PASS);09 静态扫描基线 exit=1(fp=4354b2aa72a7)系滞后红,本批单跑实测 exit=0(与 2026-10-22 16:20 回执一致),基线改回绿;其余条目原样保留。", "gates": { - "01 冒烟全量": { + "00 冒烟测试": { "exit": "0", "fp": "green" }, - "02 单元套件": { + "01 系统测试": { + "exit": "0", + "fp": "green" + }, + "02 单元与集成测试": { "exit": "0", "fp": "green" }, @@ -42,8 +46,8 @@ "fp": "green" }, "09 静态扫描": { - "exit": "1", - "fp": "4354b2aa72a7" + "exit": "0", + "fp": "green" }, "10 熵增闸": { "exit": "0", @@ -58,4 +62,4 @@ "fp": "green" } } -} \ No newline at end of file +} diff --git a/game/tests/static_scan.sh b/game/tests/static_scan.sh index 0c87d6a2..62c66885 100644 --- a/game/tests/static_scan.sh +++ b/game/tests/static_scan.sh @@ -96,6 +96,9 @@ fi # ── S11 — 代码注释禁用词 ── # 禁「板级」「门票」「正主」「落籍」「完美排雷」等退役词进注释面(完整词表见术语表解析) # 权威出处:design/gdd/术语表.md「退役词对照」节+「对外命名纪律」节 +# 同形异义豁免:机制词「去重闸」(封印重判去重的玩法判别器)与某闸档退役词后二字同形—— +# 行内含「去重闸」即整行跳过(2026-10-22 测试术语重构批随闸档用语入表增设,否则 smoke_all.gd +# 在册断言标签成片误红;代价=该行同时出现的真闸档用词也不报,靠文档域 08 闸兜住) # 扫描面:game/ 全域 .gd/.tres/.md/.json/.sh(.txt 不收=第三方许可证非本仓库文本) # 注释文本提取:.gd/.sh 取 # 后文本;.tres 取 ; 后文本;.md 取整行;.json 无注释语法(保留扩展名但不产生注释段) # 三层豁免依序:①闸门自指(行内含检查/禁令形态即跳过)②显式留档豁免单 4 处 ③非注释面天然不取 @@ -145,6 +148,7 @@ else for(i=1;i<=nw;i++){ if(index(cmt,words[i])>0){ if($0~/contains\(|find\(|grep|has_char\(|禁「|禁『|零「|零『/)next + if(index(cmt,"去重闸")>0)next if(FILENAME~"enemy.tres"&&FNR==653)next if(FILENAME~"level_runner"&&FNR==832)next if(FILENAME~"adventure_runner"&&FNR==403)next @@ -164,6 +168,7 @@ else for(i=1;i<=nw;i++){ if(index(cmt,words[i])>0){ if($0~/contains\(|find\(|grep|has_char\(|禁「|禁『|零「|零『/)next + if(index(cmt,"去重闸")>0)next if(FILENAME~"enemy.tres"&&FNR==653)next print FILENAME":"FNR":"words[i] next @@ -179,6 +184,7 @@ else for(i=1;i<=nw;i++){ if(index($0,words[i])>0){ if($0~/contains\(|find\(|grep|has_char\(|禁「|禁『|零「|零『/)next + if(index($0,"去重闸")>0)next print FILENAME":"FNR":"words[i] next } diff --git a/tools/doc_term_audit.py b/tools/doc_term_audit.py index b6b4688e..5bfeab55 100644 --- a/tools/doc_term_audit.py +++ b/tools/doc_term_audit.py @@ -69,6 +69,13 @@ RETIRED_TERMS = [ ("金币", "2026-10-18", "GP(唯一正式命名)", "GP 命名统一批——「金币」全库禁用"), ("插旗|标旗", "2026-10-18", "封印(正式动作名,全库统一)", "术语刷新批——「旗」概念退役"), ("完美排雷", "2026-10-19", "完美封印(正式名见 design/gdd/术语表.md 退役词对照)", "迭代 32 卡①反哺批 2026-10-21 用户裁入表——代码注释面由 S11 承接,文档正文面由此条承接"), + # —— 测试术语与层级重构批(2026-10-22 用户裁):权威=design/gdd/术语表.md「退役词对照」—— + # 标准四级测试层(冒烟/单元/集成/系统)+UI 探针与 golden;闸档用语随三条频率规则消亡。 + # 「重闸」用负向后行断言排除机制词「去重闸」(封印重判去重判别器,在役非退役)。 + ("系统级断言套件|冒烟全量", "2026-10-22", "系统测试", "测试术语重构批——标准四级层命名(裁决录=reports/提案-测试术语与层级重构方案-2026-10-22.md §二)"), + ("单元套件", "2026-10-22", "单元测试", "测试术语重构批——标准四级层命名"), + ("启动探针|秒级冒烟探针|L0[–-]L3", "2026-10-22", "冒烟测试", "测试术语重构批——极小启动场景"), + (r"(?/dev/null || echo '非git目录')" echo "python: $PY" echo "godot: $GODOT" @@ -139,7 +140,7 @@ gate() { # gate <名称> <日志名> <命令...> } gate_unit() { # run_all 是 --script 模式,退出码为唯一判据 - local name="02 单元套件" + local name="02 单元与集成测试" echo "" echo "════════════════════════════════════════════" echo " $name(--script 模式,退出码为唯一判据)" @@ -158,11 +159,13 @@ gate_unit() { # run_all 是 --script 模式,退出码为唯一判据 return 0 } -# ══ 代码域(1–5)══ +# ══ 代码域(0–5)══ if in_domain code; then -# ── 1. 系统级断言面(冒烟三闸:退出码+摘要失败数+SCRIPT ERROR 扫描,判定无洞)── -gate "01 冒烟全量" "smoke.log" "$PY" "$REPO/tools/run_smoke.py" -# ── 2. 单元套件 ── +# ── 0. 冒烟测试(极小启动场景:真实开机路径存活检查,零逻辑判定,秒级)── +gate "00 冒烟测试" "smoke_boot.log" "$PY" "$REPO/tools/run_smoke.py" +# ── 1. 系统测试(真实玩法路径断言面;过渡期宿主=game/smoke/smoke_all.gd,断言迁移归批 B)── +gate "01 系统测试" "system_test.log" "$PY" "$REPO/tools/run_system_test.py" +# ── 2. 单元与集成测试 ── gate_unit # ── 3. 场景探针 · 行为走查段 ── gate "03 探针 --click" "probe_click.log" bash "$REPO/tools/probe_gate.sh" "$GAME" --click