工程(本地CI化改造批·验证模型换代): 合回后跑测试制落地——①机件四件: tools/ci_runner.sh(merge=合回验证点对master尖无条件全量/commit=仅CI红态追绿;锁mkdir+在跑尖端判定+rerun标记=跑完补跑coalesce连发触发只测最新尖端;起手--editor --quit刷类名缓存接管原合并后零复跑动作;读闸回执写ci-status.json+ci-history.jsonl红闸与关键日志行在案)+hooks/post-merge(主工作区merge落地即触发,worktree内合并不触发)+hooks/post-commit(红态追绿触发)+pre-commit换代(撤代码面拦截=主区直改全面放开,合并收尾提交MERGE_HEAD豁免,保留秒级文档闸);②guard瘦身: 合回闸回执六况校验与主区代码面Edit/commit拦截退役,留--no-verify拦截+iter数卡校验+规则闸;③run_all_gates.sh头注换代(强制验证点=合回后CI全量,手动档降开发期)+.gates/.gitignore收CI产物;④规约四份换代: AGENTS(运行验证首条/规范导航行/车道铁律/交付验收红线/改动四类)、process-conventions(§1四条重写=主区直改车道+合回后CI+worktree降为大批约定+执法三层,§3第8/9条=CI验证载体+重跑语义「同一份字节禁止第二次人手跑」)、test-conventions §4(开发期窄测+合回CI+追绿)、iter技能五处(闸域/T0/闸序列/总收口/坑速查);⑤待办条目登记。设计讨论会话内闭合零待裁点,用户已发令;收口=迭代44合回CI首跑

This commit is contained in:
DKChan committed 2026-10-30 16:48:00 +08:00
1 parent 7a2d19fd12
commit c91bbdddee
10 files changed
+159 -49

No files matched your search

+8 -24
View File
@@ -1,31 +1,15 @@
#!/usr/bin/env bash
# 直改车道闸(git pre-commit,2026-10-26 车道铁律)——staged 不含代码面的提交,提交点现场跑
# 文档域闸(tools/run_all_gates.sh --docs,秒级文本扫描):绿=落地,红=中止。
# 代码面=game/ 下非 .md 的行为载体(判据与改动域划分同一)。staged 含代码面时:
# 主工作区=拦(代码面唯一合法路径=worktree 批合回);任务 worktree=跳过(归批末闸+合回闸管,
# 不打扰迭代批中间提交)。--no-verify 绕过仅属用户(agent 侧由 worktree-guard 拦截)。
# 直改车道闸(git pre-commit,2026-10-30 本地 CI 化换代)——提交点现场跑文档域闸
# (tools/run_all_gates.sh --docs,秒级文本扫描):绿=落地,红=中止。
# 代码面提交不再拦(2026-10-30 用户裁:主区直改全面放开)——代码验证归合回后的本地 CI
# (tools/hooks/post-merge 全量跑批;CI 红态下 tools/hooks/post-commit 追绿复验)。
# 合并收尾提交跳过(MERGE_HEAD 在=冲突合并的收尾 commit)——内容归合回后的 CI 全量验。
# --no-verify 绕过仅属用户(agent 侧由 worktree-guard 拦截)。
set -u
REPO="$(git rev-parse --show-toplevel)"
# staged 路径集(首提交无 HEAD 时对 --root 比);空集放行,交回 git 自身报「无改动可提」
if git rev-parse --verify -q HEAD >/dev/null 2>&1; then
STAGED="$(git diff --cached --name-only)"
else
STAGED="$(git diff --cached --name-only --root)"
fi
[ -z "$STAGED" ] && exit 0
# 代码面判定:staged 里任一路径落在 game/ 且非 .md
if printf '%s\n' "$STAGED" | grep '^game/' | grep -viE '\.md$' | grep -q .; then
# 主区判定:git-dir 与 common-dir 同一=主工作区(非链接 worktree)
_GD="$(cd "$(git rev-parse --git-dir)" && pwd)"
_CD="$(cd "$(git rev-parse --git-common-dir)" && pwd)"
if [ "$_GD" = "$_CD" ]; then
echo "[直改闸] 主工作区禁止直提代码面(game/ 下非 .md)——代码面改动走迭代批独立 worktree(git worktree add ../g-plan2-<任务名> -b <任务分支>),收尾在主工作区 git merge --no-ff 合回。" >&2
exit 1
fi
exit 0
fi
# 合并收尾提交:跳过文档闸,交合回后 CI
[ -f "$(git rev-parse --git-dir)/MERGE_HEAD" ] && exit 0
RC=0
bash "$REPO/tools/run_all_gates.sh" --docs || RC=$?