diff --git a/tools/run_all_gates.sh b/tools/run_all_gates.sh index 1ace0fc5..4f7597f1 100644 --- a/tools/run_all_gates.sh +++ b/tools/run_all_gates.sh @@ -14,6 +14,8 @@ # --code 只跑代码域闸(00 冒烟测试/01 系统测试/02 单元与集成测试/03 探针 --click/ # 04 探针 --full/05 渲染闸/09 静态扫描/11 回放确定性对拍+10 熵增闸) # ——本批改动含 game/ 下非 .md 的行为载体(代码/测试脚本/探针/场景/数据表/素材)时用。 +# 影响面选闸:本批 game/ 改动全在测量面(game/tests、game/sim)时,00/03/04/05 记 +# SKIP(测量面不触开机路径/场景树/渲染输出;映射定义在脚本中部,判定保守)。 # --docs 只跑文档域闸(06 gdd_lint/07 doc_link/08 doc_term/08c 流水线闸/08d 引用可核 # +10 熵增闸) # ——本批改动只有文档件时用:game/ 内的 .md(README、生成清单)、design/、根规则文件、 @@ -152,6 +154,23 @@ fi declare -a NAMES=() EXITS=() LOGS=() FAILED=0 +# ── 影响面选闸(2026-10-28 用户裁):本批 diff 相对 master 分叉点的 game/ 改动若全部落在 +# 测量面(game/tests/**、game/sim/**——测试与模拟驱动件,不触开机路径、场景树与渲染 +# 输出),则 00 冒烟/03/04 探针/05 渲染闸记 SKIP。判定保守取向:diff 含任一行为面 +# 文件即全部实跑;01/02/09 恒跑(测试宿主与静态扫描正是测量面改动的验证载体)。 +# 触发面映射只在本脚本一处定义;SKIP 与 --quick 同构,回执记 not_run,不作闸况变化。 +NONBEHAVIOR=0 +if in_domain code; then + _base="$(git -C "$REPO" merge-base master HEAD 2>/dev/null || true)" + _gfiles="$(git -C "$REPO" -c core.quotepath=false diff --name-only "${_base:-HEAD}" HEAD -- game/ 2>/dev/null || true)" + # 反选(测量面之外的行)非空=含行为面。不用 grep -q:本机 git-bash 的 -q -v 组合退出码反常。 + _behavior="$(echo "$_gfiles" | grep -vE '^(game/tests/|game/sim/)' || true)" + if [ -n "$_gfiles" ] && [ -z "$_behavior" ]; then + NONBEHAVIOR=1 + echo "[gates] 影响面选闸:game/ 改动全在测量面(tests/sim)——00 冒烟/03/04 探针/05 渲染闸 → SKIP" + fi +fi + echo "闸机跑批 · 域=$DOMAIN · 仓库 $REPO" echo "起跑 commit: $(git -C "$REPO" rev-parse --short HEAD 2>/dev/null || echo '非git目录')" echo "python: $PY" @@ -197,21 +216,32 @@ gate_unit() { # run_all 是 --script 模式,退出码为唯一判据 # ══ 代码域(0–5)══ if in_domain code; then # ── 0. 冒烟测试(极小启动场景:真实开机路径存活检查,零逻辑判定,秒级)── -gate "00 冒烟测试" "smoke_boot.log" "$PY" "$REPO/tools/run_smoke.py" +if [ $NONBEHAVIOR -eq 1 ]; then + NAMES+=("00 冒烟测试"); EXITS+=("SKIP"); LOGS+=("") + echo ""; echo "[gates] 00 冒烟测试 → SKIP(影响面选闸:测量面改动不触开机路径)" +else + gate "00 冒烟测试" "smoke_boot.log" "$PY" "$REPO/tools/run_smoke.py" +fi # ── 1. 系统测试(真实玩法路径断言面;宿主=game/tests/system_test.gd,缺省 --script 由 run_system_test.py 持有)── 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 # ── 4. 场景探针 · 断言段(iter27 漏跑的就是这一段)── -gate "04 探针 --full" "probe_full.log" bash "$REPO/tools/probe_gate.sh" "$GAME" --full -# ── 5. 渲染面(窗口化,依赖 PIL)── -if [ $QUICK -eq 0 ]; then - gate "05 渲染闸" "render.log" bash "$REPO/tools/render_gate.sh" "$GAME" +if [ $NONBEHAVIOR -eq 1 ]; then + NAMES+=("03 探针 --click"); EXITS+=("SKIP"); LOGS+=("") + NAMES+=("04 探针 --full"); EXITS+=("SKIP"); LOGS+=("") + echo ""; echo "[gates] 03/04 探针 → SKIP(影响面选闸:测量面改动不触场景树与探针断言面)" else + gate "03 探针 --click" "probe_click.log" bash "$REPO/tools/probe_gate.sh" "$GAME" --click + gate "04 探针 --full" "probe_full.log" bash "$REPO/tools/probe_gate.sh" "$GAME" --full +fi +# ── 5. 渲染面(窗口化,依赖 PIL)── +if [ $QUICK -eq 1 ] || [ $NONBEHAVIOR -eq 1 ]; then NAMES+=("05 渲染闸"); EXITS+=("SKIP"); LOGS+=("") - echo ""; echo "[gates] 05 渲染闸 → SKIP(--quick)" + echo ""; echo "[gates] 05 渲染闸 → SKIP(--quick 或 影响面选闸:测量面改动不触渲染输出)" +else + gate "05 渲染闸" "render.log" bash "$REPO/tools/render_gate.sh" "$GAME" fi fi # ══ 文档域(6–8c)══ diff --git a/待办清单.md b/待办清单.md index cca3a59c..fc8c0dd8 100644 --- a/待办清单.md +++ b/待办清单.md @@ -2,14 +2,6 @@ 本清单是流水线的唯一登记处:要做的事先在此登记一条,随流水线段推进改状态,做完整条删除;各系统文档的「待办」节只留一行指路存根,不再自建条目。条目格式(标题=登记元数据含可选优先级,正文=实况/缺口/改动面/状态四属性)与状态机以 [doc-conventions §12.1](design/engineering/doc-conventions.md) 为权威。 -#### 闸机影响面选闸——代码域闸件 diff 触发面判定与 SKIP 记账(2026-10-28 登记,来源=会话提及) - -**实况**:证据=术语修正批(三件测试夹具字串)跑了全代码域闸含 02 数值验证;tools/run_all_gates.sh 已有同型先例(11 回放对拍的触面判定+SKIP 记账,PARITY_TOUCH_FACES 机制)。2026-10-28 用户裁推广:按本批 diff 推每闸触发面,未触面闸记 SKIP+理由入回执;触发面映射只写在 run_all_gates.sh 一处;判定保守取向——判不了就跑,不因映射缺漏出假绿。 - -**改动面**:工具代码 - -**状态**:待执行 - #### gdstyle 存量债全量清偿——216 键按病根分波整改(2026-10-26 登记,来源=会话提及,优先级=P0) **实况**:S13 闸实测存量债 216 键/60 文件(2026-10-26,master f3b148ce,gdstyle v0.4.0 默认阈值;基线登记 234 键=实存 216+陈旧 18)。全量清单、波次方案与纪律见清点报告(本条目裁决源)。2026-10-26 用户裁:撤销「一条总账」与「按病根拆多条」两案,并为本条单账(存量债全部清除,紧急优先级);原「gdstyle 基线陈旧键待人工清理」条目并入波 0(基线对账刷新),原「结构审查未立项小件候审」条目并入波 7(卡已写;iter38 施工停卡后经用户裁于 2026-10-26 修订定稿 v1.3,待编排)。**2026-10-26 设计段闭合(逐波裁定全数落定)**:①段组织=逐波开设计段,纯代码波(波 0/2/3/4/5/6/8)写卡前确认零设计改动+按当时 master 重测读数即可写卡;②波 2 各文件内部拆、波 6 视图内部拆私有函数、波 8 config_db 纯代码收敛(三处零设计改动);③波 1 拆件定稿=轴甲两件——battle_orchestrator 拆出 BattleFxHost(效果引擎宿主域)+RewardGrant(奖励授予域),宿主保留状态机/facts 缓冲/订阅/段驱动/行发射基建/呈现投影,attune 族原位保留(迭代 39 副卡语义领地),emit 经 bind 注入 Callable,行数恶化债(c4c69701 挂账)本波还债归绿,残留债「改善非清零」口径预计 8–10 键;定稿落文 architecture.md v1.18(功能层两新件行+「战斗编排域拆件定稿」节);**同日独立审查折入**(grilling+godot-master 双子代理并行、双判回炉补裁级——骨架成立、接线未闭合):阻断 8 条去重 6 组+建议 5 条全数折入 v1.18——跨件单向接线裁死(RewardGrant 持 fx 件引用/fx 兑付走注入 Callable,禁 RefCounted 环)、settlement/ 段类随动(直持三引用封转发壳)、12 随迁键卡内收敛义务(禁波 0 refresh 吸收)、两新件消费依赖列补全+引用束注入、treasure_interact_controller 三触点分家(现值回调双取值面)、_fx_revealing 再入闸归 fx 件(裁定全文见清点报告 §六第 6 条);④全部波不改游戏规则与玩家可见行为,design/gdd/systems/ 零修订预期;波 5 已实查落定纯代码(open_ticket 12 参=单据声明形态)。波 7 的 wr5/wr6 验收载体重裁为写卡段用户裁点(卡 v1.2 在册,写卡补呈报)。裁定全文见清点报告 §六。