合并(CI追绿·run26修复): probe退出段挂死受控例外+render_gate工件锚与python3×5+基线登记05b/03/05绿位; 预期run27首次全绿
ci / gates (push) Failing after 7m57s
ci / gates (push) Failing after 7m57s
This commit is contained in:
commit
b6305e35bb
3 files changed
+75
-72
No files matched your search
@@ -1,61 +1,65 @@
|
||||
{
|
||||
"note": "\u5b58\u91cf\u57fa\u7ebf\u00b7\u95f8\u51b5\u53d8\u5316\u65f6\u672c\u811a\u672c\u4f1a\u5224\u7ea2\uff0c\u9700\u4eba\u5de5\u786e\u8ba4\u540e\u91cd\u751f\u6210\uff1b2026-10-29 \u4e8c\u6b21\u8bb0\u8d26\uff1d03/04/05 \u4e09\u95f8\u6309 80b49c0f \u5148\u4f8b\u7ecf\u7528\u6237\u88c1\u51b3\u8bb0\u5165\u73b0\u884c\u7ea2\u9879\u6307\u7eb9\uff0803=8a3cae0d0446/04=591b27250b36/05=de89589e49ed\uff09\u2014\u2014master \u540c\u503c\u590d\u73b0\u975e\u8fed\u4ee342\u65b0\u589e\uff08stash \u5bf9\u7167\u6cd5\u53d6\u8bc1\uff0c\u627f\u300c\u8fed\u4ee3 41 \u6d4b\u8bd5\u503a\u4fee\u590d\u300d\u6761\u76ee\u6269\u5c55\uff09\uff1b\u539f 2026-10-17 06 \u6761\u76ee\u4eba\u5de5\u91cd\u751f\u6210\u8bb0\u5f55\u89c1 git \u63d0\u4ea4\u53f2\uff1b2026-10-30 \u4e09\u952e\u6362\u4ee3\uff1d02/05/09 \u6309\u5de5\u7a0b\u5c0f\u4ef6\u6279\u56de\u6267 6a3203a8 \u5b9e\u6d4b\u7eff\u91cd\u951a\uff0802 \u5173\u8054\u6863\u5206\u72474/4\u5168\u7eff\uff0f05 \u6e32\u67d3\u95f8\u771f\u8dd1\u7eff\uff0f09 \u9759\u6001\u626b\u63cf\u7eff\u2014\u2014run_all \u9017\u53f7\u89e3\u6790\u4fee\u590d\uff0b\u6052\u771f\u4e94\u6761\u5224\u636e\u4fee\u6b63\u6279\uff0c\u4e09\u952e\u65e7\u7ea2\u6307\u7eb9\u5168\u90e8\u5f52\u7eff\u6d88\u9664\uff09",
|
||||
"gates": {
|
||||
"00 \u5192\u70df\u6d4b\u8bd5": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"01 \u7cfb\u7edf\u6d4b\u8bd5": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"02 \u5355\u5143\u4e0e\u96c6\u6210\u6d4b\u8bd5": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"03 \u573a\u666f\u63a2\u9488": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"05 \u6e32\u67d3\u95f8": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"06 gdd_lint": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"06b \u53d8\u66f4\u8bb0\u5f55\u8282": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"07 doc_link": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"08 doc_term": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"08c \u6d41\u6c34\u7ebf\u95f8": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"09 \u9759\u6001\u626b\u63cf": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"10 \u71b5\u589e\u95f8": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"08d \u5f15\u7528\u53ef\u6838": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"08e \u80fd\u529b\u5ba1\u8ba1": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
}
|
||||
"note": "存量基线·首次自动生成;闸况变化时本脚本会判红,需人工确认后重生成",
|
||||
"gates": {
|
||||
"00 冒烟测试": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"01 系统测试": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"02 单元与集成测试": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"03 场景探针": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"05 渲染闸": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"05b 色板闸": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"06 gdd_lint": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"06b 变更记录节": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"07 doc_link": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"08 doc_term": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"08c 流水线闸": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"08d 引用可核": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"08e 能力审计": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"09 静态扫描": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
},
|
||||
"10 熵增闸": {
|
||||
"exit": "0",
|
||||
"fp": "green"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -54,6 +54,12 @@ fi
|
||||
verdict() { # verdict <探针名> <日志路径> <退出码> [签名标记]
|
||||
local name="$1" log="$2" st="$3" mark="${4:-PASS}"
|
||||
if [ "$st" -eq 124 ] || [ "$st" -eq 137 ]; then
|
||||
# macOS quit(0) 挂死受控例外:守卫回收后若 PASS 签名在位且错误扫描净=探针已完成判定,
|
||||
# 挂死只发生在退出段(run26 实证:headless 探针同样挂)——按完成处理,签名缺失仍判红。
|
||||
if [ -n "$PY" ] && ! "$PY" "$REPO/tools/error_scan.py" "$log" >"$TMP/err.txt" 2>&1 && grep -q "$mark" "$log"; then
|
||||
echo "[probe_gate] OK — $name 判定完成(exit=$st 为 macOS 退出段挂死回收,签名+扫描双证齐全)"
|
||||
return 0
|
||||
fi
|
||||
echo "[probe_gate] FAIL — $name 超时挂死(exit=$st),孤儿已清"; return 1
|
||||
fi
|
||||
if [ "$st" -ne 0 ]; then
|
||||
|
||||
+7
-14
@@ -48,7 +48,7 @@ kill_orphans() {
|
||||
|
||||
scan_log() { # scan_log <段名> <日志>——脚本错误扫描;日志不可读(error_scan exit 2)同判红
|
||||
local name="$1" log="$2"
|
||||
if ! python "$REPO/tools/error_scan.py" "$log" >"$TMP/err_scan.txt" 2>&1; then
|
||||
if ! python3 "$REPO/tools/error_scan.py" "$log" >"$TMP/err_scan.txt" 2>&1; then
|
||||
echo "[render_gate] FAIL — $name 脚本错误扫描未通过(命中或日志不可读):"
|
||||
sed -n '1,6p' "$TMP/err_scan.txt" | sed 's/^/ /'
|
||||
_rc=1
|
||||
@@ -70,13 +70,12 @@ SHOT="$TMP/shots"
|
||||
gate_run_timeout 360 "$TMP/shot.log" "$G" --path "$GAME_WIN" --quit-after 3000 res://probe/shot_probe.tscn -- "$SHOT"
|
||||
st=$?; kill_orphans
|
||||
grep -E "\[shot_probe\]" "$TMP/shot.log" | tail -12
|
||||
if [ "$st" -eq 124 ] || [ "$st" -eq 137 ]; then
|
||||
echo "[render_gate] FAIL — shot_probe 超时挂死(exit=$st),孤儿已清"; _rc=1
|
||||
elif ! grep -q "问题=0" "$TMP/shot.log"; then
|
||||
# shot 判定锚工件:问题=0 签名在位=完成(124 为 macOS 退出段挂死回收/quit-after 竞速,非真红——run21/26 实证)
|
||||
if ! grep -q "问题=0" "$TMP/shot.log"; then
|
||||
echo "[render_gate] FAIL — shot_probe 未干净完成(exit=${st},缺失屏/空文件/路径断裂见上)"; _rc=1
|
||||
fi
|
||||
if [ "$_rc" -eq 0 ]; then
|
||||
python tools/shot_checker.py "$SHOT" shot_menu.png shot_settings.png shot_career.png shot_camp.png shot_level.png shot_battle.png shot_status.png | sed 's/^/[render_gate] /'
|
||||
python3 tools/shot_checker.py "$SHOT" shot_menu.png shot_settings.png shot_career.png shot_camp.png shot_level.png shot_battle.png shot_status.png | sed 's/^/[render_gate] /'
|
||||
_rc="${PIPESTATUS[0]}"
|
||||
[ "$_rc" -ne 0 ] && echo "[render_gate] FAIL — shot_checker A-D 断言存在红(S1 停机点:首跑存量 FAIL 全量呈报登记待办清单)"
|
||||
fi
|
||||
@@ -87,9 +86,6 @@ FX="$TMP/fxshots"
|
||||
gate_run_timeout 360 "$TMP/fx.log" "$G" --path "$GAME_WIN" --quit-after 3000 res://probe/fx_shot_probe.tscn -- "$FX"
|
||||
st=$?; kill_orphans
|
||||
grep -E "\[fx_shot_probe\]" "$TMP/fx.log" | tail -4
|
||||
if [ "$st" -eq 124 ] || [ "$st" -eq 137 ]; then
|
||||
echo "[render_gate] FAIL — fx_shot_probe 超时挂死(exit=$st),孤儿已清"; _rc=1
|
||||
fi
|
||||
# fx 判定锚工件:取证双检(fx_evidence)+ 错误扫描(scan_log)已覆盖真红——macOS 下
|
||||
# quit-after 与 quit(0) 竞速的 124 退出非真红(run21 实证),不单独判闸。
|
||||
|
||||
@@ -113,9 +109,6 @@ BD="$TMP/boardshots"
|
||||
gate_run_timeout 360 "$TMP/bd.log" "$G" --path "$GAME_WIN" --quit-after 3000 res://probe/board_shot_probe.tscn -- "$BD"
|
||||
st=$?; kill_orphans
|
||||
grep -E "\[board_shot\]" "$TMP/bd.log" | tail -6
|
||||
if [ "$st" -eq 124 ] || [ "$st" -eq 137 ]; then
|
||||
echo "[render_gate] FAIL — board_shot_probe 超时挂死(exit=$st),孤儿已清"; _rc=1
|
||||
fi
|
||||
# board 判定锚工件:board_meta.json 非零 + 错误扫描覆盖真红;124 竞速退出非真红(同 fx)。
|
||||
|
||||
scan_log "board_shot_probe" "$TMP/bd.log"
|
||||
@@ -142,11 +135,11 @@ else
|
||||
done
|
||||
if [ "$_asset_miss" -eq 0 ]; then
|
||||
CROP="$TMP/crop"
|
||||
python tools/golden_board_crop.py "$BD/board_meta.json" "$BD" "$CROP" | sed 's/^/[render_gate] /'
|
||||
python3 tools/golden_board_crop.py "$BD/board_meta.json" "$BD" "$CROP" | sed 's/^/[render_gate] /'
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
echo "[render_gate] FAIL — 棋盘区裁剪失败"; _rc=1
|
||||
else
|
||||
python tools/golden_compare.py "$REPO/game/tests/golden" "$CROP" \
|
||||
python3 tools/golden_compare.py "$REPO/game/tests/golden" "$CROP" \
|
||||
board_L1_dungeon.png board_L2_underdark.png board_L3_deep_underdark.png | sed 's/^/[render_gate] /'
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
echo "[render_gate] FAIL — golden 逐像素超容差(S2 停机点:字体/平台误红呈报后定容差)"; _rc=1
|
||||
@@ -166,7 +159,7 @@ else
|
||||
MENUG="$TMP/menugolden"
|
||||
mkdir -p "$MENUG"
|
||||
cp "$SHOT/shot_menu.png" "$MENUG/menu_boot.png"
|
||||
python tools/golden_compare.py "$REPO/game/tests/golden" "$MENUG" menu_boot.png | sed 's/^/[render_gate] /'
|
||||
python3 tools/golden_compare.py "$REPO/game/tests/golden" "$MENUG" menu_boot.png | sed 's/^/[render_gate] /'
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
echo "[render_gate] FAIL — 菜单 golden 超容差(S2 停机点口径:核对热区——按钮换墨/布局变更属预期面=显式重制基线+呈报;超预期面=L3)"; _rc=1
|
||||
fi
|
||||
|
||||
Reference in new issue
Block a user