标识符面:flag_*→seal_ 族(含 Godot 信号 flag_judged→seal_judged 与连接/回调同名、 FACTS 两键 flags_count→seals_count/dug_under_flag→dug_under_seal 全链、 .tres 键名与 schema .gd 同批同步);显式豁免零改动=size_flags_*(Godot 布局属性)+_fatal_flag。 中文面:金币→GP(金币袋→GP 袋)/插旗→封印/雷格→危险格/惩罚格→危险格/旗→封印·封印印记族, game/ 内 *.gd/.tres/.md/.json 四类禁用词与 flag 双双零命中(V1/V4)。 守卫字面量不动(被检查的禁字不是使用):smoke_all V21 零「雷/旗」检查面、 ui_font_asset_test 字形集攻/雷/旗/封 保持原断言逻辑。 代拍板:板面单字槽 glyph「旗」→「封」(禁字纪律+单字位宽,消费面四处同名随动)。 素材换代(2026-10-18 用户裁案甲):assets/art/board/flag_seal.png→seal_mark.png(素材不入 git, 盘上改名+导入重刷),代码两处 res:// 字符串+COL_FLAG/CURSOR_FLAG 常量同步, 闸件四处随批(run_all_gates.sh/render_gate.sh/golden_baseline_refresh.sh/path_check.py)。 anchor.json 键名手改,重锚与改前改后 diff 随本卡收口(同裁案甲)。 基线读数(改前,主区 ed2dfaf6):冒烟 1151 检查 0 失败/单元 34 套全绿/探针 --click 存量红仅 screen_flow_probe(user:// 断点污染在册已知项)。 改后同批读数(本 worktree):冒烟 1151 检查 0 失败/探针 --click 同一存量红、其余全绿。
77 lines
3.9 KiB
Bash
77 lines
3.9 KiB
Bash
#!/usr/bin/env bash
|
||
# golden 基线换代辅助(迭代 19 卡① T2 2026-10-08——呈现类改动批专用;迭代 28 T4 扩菜单全屏基线路径)。
|
||
# 权限口径(Q6):呈现类改动批内 agent 自行换代+提交说明**强制写明触发原因**;数值/逻辑批禁碰。
|
||
# 前置条件(Q5/S3):素材必须齐盘(本脚本逐项守卫,缺位即拒跑退出 1=基线禁锚回退态;
|
||
# 缺位时先拷主区素材+导入边车再跑)。
|
||
# 模式:
|
||
# --menu(迭代 28 T4 新增):shot_probe 启动态菜单整屏帧 → game/tests/golden/menu_boot.png。
|
||
# 全屏基线可行性前置已验证:菜单连续帧差 0.0000%/max_diff=0(2026-10-15 帧差诊断——光柱为
|
||
# 程序生成静态贴片、零动画着色器,全屏基线不抖动);采集确定性=探针隔离档(无断点+出厂
|
||
# 设置 1280×800),与 render_gate 的 shot_menu 对比段同源同帧。
|
||
# 缺省(棋盘,原口径):board_shot_probe 抓 L1-L3 整屏帧+board_meta.json → golden_board_crop.py
|
||
# 按 meta 取样坐标裁棋盘区(禁硬编码像素)→ 覆盖 game/tests/golden/ 三张基线。
|
||
# 过程截图落 mktemp 临时区即弃(Q2),只有基线产物入库。
|
||
# 用法: tools/golden_baseline_refresh.sh [game目录] [--menu] 触发原因写进当批提交说明(强制)。
|
||
set -u
|
||
G="${GODOT_BIN:-/d/code/godot/Godot_v4.7.2-stable_win64_console.exe}"
|
||
REPO="$(cd "$(dirname "$0")/.." && pwd)"
|
||
GAME=""
|
||
MODE="board"
|
||
for a in "$@"; do
|
||
case "$a" in
|
||
--menu) MODE="menu" ;;
|
||
*) if [ -z "$GAME" ]; then GAME="$a"; fi ;;
|
||
esac
|
||
done
|
||
GAME="${GAME:-$REPO/game}"
|
||
GAME_WIN="$(cygpath -m "$GAME")"
|
||
TMP="$(mktemp -d /tmp/goldenrefresh_XXXXXX)"
|
||
trap 'rm -rf "$TMP"' EXIT
|
||
|
||
if [ "$MODE" = "menu" ]; then
|
||
for a in assets/fonts/ui_font_fusion_pixel_zh_hans.ttf \
|
||
assets/art/ui/button_stone.png; do
|
||
if [ ! -f "$GAME/$a" ]; then
|
||
echo "[golden_refresh] 拒跑 — 菜单素材缺位: $a(S3 停机点口径:基线禁锚回退态,先补素材+导入边车)"
|
||
exit 1
|
||
fi
|
||
done
|
||
timeout 240 "$G" --path "$GAME_WIN" res://smoke/shot_probe.tscn -- "$TMP/shots" >"$TMP/run.log" 2>&1
|
||
st=$?
|
||
grep -E "\[shot_probe\]" "$TMP/run.log" | tail -3
|
||
if [ "$st" -ne 0 ] || [ ! -s "$TMP/shots/shot_menu.png" ]; then
|
||
echo "[golden_refresh] FAIL — shot_probe 退出码=$st(菜单截图缺失/探针自检红,见上)"
|
||
exit 1
|
||
fi
|
||
mkdir -p "$REPO/game/tests/golden"
|
||
cp "$TMP/shots/shot_menu.png" "$REPO/game/tests/golden/menu_boot.png" || exit 1
|
||
echo "[golden_refresh] 完成 — 菜单全屏基线已代入 game/tests/golden/menu_boot.png(提交说明须写明触发原因)"
|
||
exit 0
|
||
fi
|
||
|
||
for a in assets/fonts/ui_font_fusion_pixel_zh_hans.ttf \
|
||
assets/art/board/seal_mark.png \
|
||
assets/art/character/character_hero_idle.png \
|
||
assets/art/board/terrain_wall_n_dungeon.png assets/art/board/terrain_floor_dungeon_1.png \
|
||
assets/art/board/terrain_wall_n_underdark.png assets/art/board/terrain_floor_underdark_1.png \
|
||
assets/art/board/terrain_wall_n_deep_underdark.png assets/art/board/terrain_floor_deep_underdark_1.png; do
|
||
if [ ! -f "$GAME/$a" ]; then
|
||
echo "[golden_refresh] 拒跑 — 素材缺位: $a(S3 停机点口径:基线禁锚字形回退态,先补素材+导入边车)"
|
||
exit 1
|
||
fi
|
||
done
|
||
|
||
timeout 180 "$G" --path "$GAME_WIN" res://smoke/board_shot_probe.tscn -- "$TMP/shots" >"$TMP/run.log" 2>&1
|
||
st=$?
|
||
grep -E "\[board_shot\]" "$TMP/run.log" | tail -6
|
||
if [ "$st" -ne 0 ] || [ ! -s "$TMP/shots/board_meta.json" ]; then
|
||
echo "[golden_refresh] FAIL — board_shot_probe 退出码=$st(meta/截图缺失见上)"
|
||
exit 1
|
||
fi
|
||
python tools/golden_board_crop.py "$TMP/shots/board_meta.json" "$TMP/shots" "$TMP/crop" || exit 1
|
||
mkdir -p "$REPO/game/tests/golden"
|
||
for b in board_L1_dungeon.png board_L2_underdark.png board_L3_deep_underdark.png; do
|
||
cp "$TMP/crop/$b" "$REPO/game/tests/golden/$b" || exit 1
|
||
done
|
||
echo "[golden_refresh] 完成 — 三张基线已换代入 game/tests/golden/(提交说明须写明触发原因)"
|