工程(场景探针单一形态·旗标退役): probe_gate --click/--full 两旗标退役改单一形态十件恒跑(默认五段+行为走查+扩展四件,各段调用行与原--click --full同传逐字节同形=零行为变化,参数面只剩[game目录]); run_all_gates 03调用去旗标+头注两处iter27提法改「漏跑场景探针扩展段」; render_gate头注fx_probe归属改指03场景探针闸; tests/README工具行改单一形态; architecture probe_gate行十件恒跑+代码域闸列去双旗标; process-conventions:52与体验验证清单核销注记两处历史叙述保留在案(记录当时事实); 起因=2026-11-04用户裁勘误:55a8f270两闸并一闸时旗标应一并收掉,误保留为开发期单跑开关; 验证: bash -n三件+probe_gate无旗标整跑十段(9段绿+ui_probe首跑红=区缺未入库.import边车环境成因,补12件边车后最小单元复跑exit0绿)+--docs验收通过零新增红+grep收口零残留(豁免=两处历史句)

This commit is contained in:
DKChan committed 2026-11-04 08:29:30 +08:00
1 parent 3c26416041
commit 0ffa65ea01
5 files changed
+42 -48

No files matched your search

+35 -41
View File
@@ -3,31 +3,29 @@
# 三闸:①每段 timeout 守卫+超时整树回收(挂死=FAIL 不静默;taskkill /T 连引擎子进程一起杀,
# 不再只杀 wrapper 留孤儿)②段前预清+段后清本 game 目录孤儿 Godot
# (按命令行精确匹配本 game 路径,不误杀其他 worktree 会话的合法进程)③末尾残留清点=批末闸(必须 0)。
# 段:ui_input_probe=默认必跑;ui_struct_probe=默认必跑(
# 全 UI 屏结构断言:按钮互压/等宽/出屏/零尺寸/标题屏双列);ui_contrast_probe=默认必跑(
# UI 文字对比度机检 ≥4.5:1 无区域例外,测点表随改动维护);--click=加跑 ui_click_probe 行为走查
# (自退出+退出码闸;超时多半=探针未适配新停点层,需做探针适配)。
# layout_probe=默认必跑(分辨率几何断言,档位表是数据/断言是一份函数,
# 段(单一形态,十件恒跑):
# 默认段五件:ui_input_probe/ui_struct_probe(
# 全 UI 屏结构断言:按钮互压/等宽/出屏/零尺寸/标题屏双列)/ui_contrast_probe(
# UI 文字对比度机检 ≥4.5:1 无区域例外,测点表随改动维护)/screen_flow_probe(L3 屏壳切换)。
# 行为走查段:ui_click_probe(自退出+退出码闸;超时多半=探针未适配新停点层,需做探针适配)。
# layout_probe=默认段五件之一(分辨率几何断言,档位表是数据/断言是一份函数,
# 增删档位只改表内一行;用 content_scale_size 改逻辑视口,headless 下真生效——
# get_window().size 在 headless 下不改变视口,其「1920 档恒定」类断言是
# 永远为真的假断言,禁用)。
# 判定口径(三硬闸):每段走 verdict 函数——①退出码为唯一权威判据(PASS 串降级为日志)
# ②脚本错误扫描命中即红(tools/error_scan.py,标记与 run_smoke.py 同源)③PASS 串保留为附加判据。
# --full 段(扩展段):ui_probe/ui_tune_probe/t17_defer_probe/fx_probe
# 四件带断言探针;默认段断言面零删减零改动(--full 只增不改)。
# 扩展段(带断言探针四件):ui_probe/ui_tune_probe/t17_defer_probe/fx_probe。
# 渲染面归 render_gate.sh 正主(窗口化:shot_probe 七屏+fx_shot/board_shot 取证+棋盘 golden 逐像素)。
# 用法: tools/probe_gate.sh [game目录] [--click] [--full] 缺省 game 目录=脚本所在仓库的 game/(worktree 内自动指向该 worktree)
# 用法: tools/probe_gate.sh [game目录] 缺省 game 目录=脚本所在仓库的 game/(worktree 内自动指向该 worktree)
# 依赖: Git Bash(coreutils timeout/taskkill) + PowerShell(Windows 侧);macOS/Linux 走 tools/gate_platform.sh
# 共享跨平台件(Godot 路径两平台都可用 GODOT_BIN 环境变量覆盖)。
set -u
G="${GODOT_BIN:-/d/code/godot/Godot_v4.7.2-stable_win64_console.exe}"
REPO="$(cd "$(dirname "$0")/.." && pwd)"
. "$REPO/tools/gate_platform.sh" # 跨平台件(平台探测/路径形式/带超时执行/孤儿清杀)
GAME=""; WITH_CLICK=0; WITH_FULL=0
GAME=""
for a in "$@"; do
case "$a" in
--click) WITH_CLICK=1 ;;
--full) WITH_FULL=1 ;;
*) GAME="$a" ;;
esac
done
@@ -160,41 +158,37 @@ st=$?
grep -E "screen_flow_probe" "$TMP/sfp.log" | tail -3
verdict "screen_flow_probe" "$TMP/sfp.log" "$st" "screen_flow_probe" || _rc=1
if [ "$WITH_CLICK" -eq 1 ]; then
echo "======== ui_click_probe 行为走查 ========"
run_suite 240 "$TMP/clk.log" res://probe/ui_click_probe.tscn
st=$?
grep -E "click_probe" "$TMP/clk.log" | tail -4
verdict "ui_click_probe" "$TMP/clk.log" "$st" "click_probe" || _rc=1
fi
echo "======== ui_click_probe 行为走查 ========"
run_suite 240 "$TMP/clk.log" res://probe/ui_click_probe.tscn
st=$?
grep -E "click_probe" "$TMP/clk.log" | tail -4
verdict "ui_click_probe" "$TMP/clk.log" "$st" "click_probe" || _rc=1
# ── --full 段(四件带断言探针入闸;实测时长 ui_probe 17.4s/
# ── 扩展段(四件带断言探针;实测时长 ui_probe 17.4s/
# ui_tune_probe 49.6s/t17_defer_probe 63.0s/fx_probe 21.9s,timeout 120=2-7×余量) ──
if [ "$WITH_FULL" -eq 1 ]; then
echo "======== ui_probe(--full 收编) ========"
run_suite 120 "$TMP/flp.log" res://probe/ui_probe.tscn
st=$?
grep -E "\[ui_probe\]" "$TMP/flp.log" | tail -2
verdict "ui_probe" "$TMP/flp.log" "$st" || _rc=1
echo "======== ui_probe(扩展段) ========"
run_suite 120 "$TMP/flp.log" res://probe/ui_probe.tscn
st=$?
grep -E "\[ui_probe\]" "$TMP/flp.log" | tail -2
verdict "ui_probe" "$TMP/flp.log" "$st" || _rc=1
echo "======== ui_tune_probe(--full 收编) ========"
run_suite 120 "$TMP/flt.log" res://probe/ui_tune_probe.tscn
st=$?
grep -E "\[tune_probe\]" "$TMP/flt.log" | tail -2
verdict "ui_tune_probe" "$TMP/flt.log" "$st" || _rc=1
echo "======== ui_tune_probe(扩展段) ========"
run_suite 120 "$TMP/flt.log" res://probe/ui_tune_probe.tscn
st=$?
grep -E "\[tune_probe\]" "$TMP/flt.log" | tail -2
verdict "ui_tune_probe" "$TMP/flt.log" "$st" || _rc=1
echo "======== t17_defer_probe(--full 收编) ========"
run_suite 120 "$TMP/fld.log" res://probe/t17_defer_probe.tscn
st=$?
grep -E "\[t17_defer\]" "$TMP/fld.log" | tail -2
verdict "t17_defer_probe" "$TMP/fld.log" "$st" || _rc=1
echo "======== t17_defer_probe(扩展段) ========"
run_suite 120 "$TMP/fld.log" res://probe/t17_defer_probe.tscn
st=$?
grep -E "\[t17_defer\]" "$TMP/fld.log" | tail -2
verdict "t17_defer_probe" "$TMP/fld.log" "$st" || _rc=1
echo "======== fx_probe(--full 收编) ========"
run_suite 120 "$TMP/flx.log" res://probe/fx_probe.tscn
st=$?
grep -E "\[fx_probe\]" "$TMP/flx.log" | tail -2
verdict "fx_probe" "$TMP/flx.log" "$st" || _rc=1
fi
echo "======== fx_probe(扩展段) ========"
run_suite 120 "$TMP/flx.log" res://probe/fx_probe.tscn
st=$?
grep -E "\[fx_probe\]" "$TMP/flx.log" | tail -2
verdict "fx_probe" "$TMP/flx.log" "$st" || _rc=1
echo "======== 残留检查(批末闸) ========"
left="$(orphans | wc -l | tr -d ' ')"
+1 -1
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# 渲染闸正主——窗口化自动闸。
# 范围(渲染五闸的机器面:shot_probe/golden_compare/board_shot 三件入闸;
# fx_probe 逻辑层归 probe_gate --full;1920 档布局机检面待补)。
# fx_probe 逻辑层归 03 场景探针闸;1920 档布局机检面待补)。
# 骨架复用 probe_gate:①每段 timeout 守卫(挂死=FAIL 不静默)②段前预清+段后清本 game 目录孤儿
# Godot(按命令行精确匹配本 game 路径,不误杀其他 worktree 会话)③末尾残留清点=批末闸(必须 0)。
# 段:
+3 -3
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# 验证闸唯一入口(全部验证闸的清单与域划分)——
# 闸清单的唯一定义处。文档只写「验证跑本脚本」,禁在文档里另列闸件清单(那正是 iter27
# 漏跑 probe_gate --full 的成因:清单散落三份文档、彼此不一致、且无机器校验)。
# 漏跑场景探针扩展段的成因:清单散落三份文档、彼此不一致、且无机器校验)。
#
# 跑完写回执 game/tests/.gates/receipt.json(commit+内容树哈希+各闸退出码+存量基线比对+时间戳);
# 强制验证点=合回 master 后 post-merge 钩子推送触发的远端跑批;远端结果用 tools/ci_check.sh 现查(只呈报、
@@ -26,7 +26,7 @@
# 与闸壳)自身的改动不占合回全量——其质量义务=落批时人工确认闸可跑通且判据口径未变;
# 闸真崩溃时合回闸 fail-closed(跑不出回执即拦),不以全量为兜底。
# **域划分只在本脚本里定义一处**——文档只写「按改动域跑本脚本」,禁另列闸清单(清单散落多处
# 正是既往漏跑 probe_gate --full 的成因)。
# 正是既往漏跑场景探针扩展段的成因)。
#
# 判定口径:每道闸与 game/tests/.gates/baseline.json 里的存量基线比对——
# 基线绿 + 现绿 → 绿
@@ -410,7 +410,7 @@ if [ $NONBEHAVIOR -eq 1 ]; then
NAMES+=("03 场景探针"); EXITS+=("SKIP"); LOGS+=("")
echo ""; echo "[gates] 03 场景探针 → SKIP(影响面选闸:测量面改动不触场景树与探针断言面)"
else
gate "03 场景探针" "probe.log" bash "$REPO/tools/probe_gate.sh" "$GAME" --click --full
gate "03 场景探针" "probe.log" bash "$REPO/tools/probe_gate.sh" "$GAME"
fi
# ── 5. 渲染面(窗口化,依赖 PIL)──
if [ $QUICK -eq 1 ] || [ $NONBEHAVIOR -eq 1 ]; then