docs(闸分域): 判据由路径前缀改文件性质——game/ 内 .md 归文档域

- 合回闸与 run_all_gates.sh 同口径:代码域=game/ 下非 .md 的行为载体;
  game/ 内 .md 与 game/ 外一切路径=文档域;两类都有仍跑全量档
- 回执对齐(covers_tip)与 dirty_game 同步改只看代码面
- 修 git diff 默认 quotepath 把中文路径写成转义串、后缀判 .md 必失效的缺陷
- 同步 AGENTS/process-conventions/architecture/roadmap/tests README 与四份技能
- 规则评估样例:c25daa30(旧判 full、新判 docs);本批自身(docs)
This commit is contained in:
DKChan committed 2026-10-26 01:38:25 +08:00
1 parent 95a9df272f
commit 57b0c3a59e
7 files changed
+23 -36

No files matched your search

+11 -11
View File
@@ -7,19 +7,19 @@
# .zcode/hooks/worktree-guard.sh 在主工作区 git merge 时校验本回执,缺或红即拦截。
#
# 本脚本是合回前的终局动作:跑之前先冻结(代码与断言不再改)并把 master 并入本分支;每批只跑
# 一次。回执必须覆盖住分支尖的 game/ 面——闸后再改 game/ 一点,回执即作废须重跑;跑闸时若
# game/ 还带着未提交改动,回执会标 dirty_game,合回闸拒绝采信。
# 一次。回执必须覆盖住分支尖的代码面(game/ 下非 .md 的行为载体)——闸后再改一个代码面文件,
# 回执即作废须重跑;跑闸时若代码面还带着未提交改动,回执会标 dirty_game,合回闸拒绝采信。
#
# 用法:tools/run_all_gates.sh [--code|--docs|--quick]
# --code 只跑代码域闸(00 冒烟测试/01 系统测试/02 单元与集成测试/03 探针 --click/
# 04 探针 --full/05 渲染闸/09 静态扫描/11 回放确定性对拍+10 熵增闸)
# ——本批改动触及 game/ 时用(游戏工程的唯一代码验收域)。
# ——本批改动含 game/ 下非 .md 的行为载体(代码/测试脚本/探针/场景/数据表/素材)时用。
# --docs 只跑文档域闸(06 gdd_lint/07 doc_link/08 doc_term/08c 流水线闸/08d 引用可核
# +10 熵增闸)
# ——本批改动不触及 game/ 时用:design/、根规则文件、tools/ 工具脚本、.zcode/ 配置等
# 一切非 game 改动的本域验收。
# ——本批改动只有文档件时用:game/ 内的 .md(README、生成清单)、design/、根规则文件、
# tools/ 工具脚本、.zcode/ 配置等一切非代码面改动。
# --quick 全量档的中段自检形态:跳过渲染闸(窗口化,需开显示器)与静态扫描;完成出库禁用。
# 不带参数 = 全量档(两域全跑),触发条件=同批混触 game/ 与文档面。闸件(tools/ 下机检脚本
# 不带参数 = 全量档(两域全跑),触发条件=同批既有代码面改动又有文档件改动。闸件(tools/ 下机检脚本
# 与闸壳)自身的改动不占合回全量——其质量义务=落批时人工确认闸可跑通且判据口径未变;
# 闸真崩溃时合回闸 fail-closed(跑不出回执即拦),不以全量为兜底。
# **域划分只在本脚本里定义一处**——文档只写「按改动域跑本脚本」,禁另列闸清单(清单散落多处
@@ -58,12 +58,12 @@ done
# 与基线比必判「红项清单变化」假红)、末尾汇总自身崩掉打不出结论。
export PYTHONIOENCODING=utf-8
# game/ 面是否带着未提交改动(只算已跟踪文件——闸件自身产物都落在 gitignore 面)。
# 脏树跑出来的回执记的是 HEAD,验的却是别的字节,合回闸据此拒收。
# 代码面(game/ 下非 .md 的行为载体)是否带着未提交改动(只算已跟踪文件——闸件自身产物都落在
# gitignore 面)。脏树跑出来的回执记的是 HEAD,验的却是别的字节,合回闸据此拒收。
DIRTY_GAME=0
if [ -n "$(git -C "$REPO" status --porcelain -uno -- game/ 2>/dev/null)" ]; then
if [ -n "$(git -C "$REPO" -c core.quotepath=false diff HEAD --name-only -- game/ 2>/dev/null | grep -viE '\.md$')" ]; then
DIRTY_GAME=1
echo "[gates] 警告:game/ 有未提交改动——本次回执将标 dirty_game,不能用于合回(先提交再跑)。"
echo "[gates] 警告:代码面(game/ 下非 .md)有未提交改动——本次回执将标 dirty_game,不能用于合回(先提交再跑)。"
fi
# 回执与日志是中间产物(不入库),但 .gitignore 本身必须入库——漏了就等于把它们纳入版本管理。
@@ -378,7 +378,7 @@ stock = [n for n, e in zip(names, exits) if e not in ("0", "SKIP")]
if stock:
print("【存量红·对基线零新增】" + "、".join(stock))
if dirty_game == "1":
print("【回执不可用于合回】跑闸时 game/ 有未提交改动——先提交到分支、再重跑这一次。")
print("【回执不可用于合回】跑闸时代码面(game/ 下非 .md)有未提交改动——先提交到分支、再重跑这一次。")
if all_green:
print("【验收通过】闸况与基线一致,无新增红。")
sys.exit(0)