From 19ecadf3f6d01dc2bc706f6844ac0f22a0b4d8d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Tue, 6 Oct 2026 23:48:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E7=BC=96=E5=8F=B7?= =?UTF-8?q?=E5=94=AF=E4=B8=80=E6=9C=BA=E6=A2=B0=E9=97=A8=E7=A6=81G8+?= =?UTF-8?q?=E6=8D=A2=E8=A3=85=E8=84=9A=E6=9C=ACv3=E5=8A=A0=E5=9B=BA+?= =?UTF-8?q?=E8=87=AA=E4=B8=BB=E4=BF=AE=E5=A4=8D=E7=BA=AA=E5=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - commit-msg 规则外置: 主hook 遍历 rules/, G3 中文类型+G8 看板编号全域唯一(主板+归档恰好一次, 双向测试过), core.hooksPath 分发 - 换装脚本 v3: 句柄释放独占探测+构建产物 SHA256 校验+失败重试+SYSTEM 转投用户会话可见重启(上线验证过: SHA256 一致+H1 实测) - CLAUDE.md 自主修复纪律: 明确缺陷禁反问直接修, 本机脚本行为变更=report_after 级 --- CLAUDE.md | 6 ++++++ scripts/hooks/commit-msg | 7 +++++++ scripts/hooks/rules/commit-type.sh | 6 ++++++ scripts/hooks/rules/todo-id-unique.sh | 14 ++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 scripts/hooks/commit-msg create mode 100644 scripts/hooks/rules/commit-type.sh create mode 100644 scripts/hooks/rules/todo-id-unique.sh diff --git a/CLAUDE.md b/CLAUDE.md index 6bb955c..8e40406 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,5 +10,11 @@ 6. **汇报实测**:任何进度/完成汇报,先跑 `git log -1 --format="%h %s"` 与 `git status --short | wc -l` 实测再报,禁凭记忆报状态。 7. **看板顶部「挂机必读」警示**:启动时若存在,视为最高优先级上下文覆盖。 +## 自主修复纪律 + +- 明确 bug(实证在案/用户指出/唯一正确解或用户已给修法方向):直接修并报告,禁反问「要不要修」(2026-10-06 用户纠正:发现换装脚本缺陷后反问=自主性差)。 +- 边界对齐意志卡 forbidden:发版/部署/重启线上、git push、生产数据操作、对外发消息,攒齐等拍板。 +- 本机工具/脚本的行为变更属 report_after 级(干完通报、可回滚),不属确认级。 + ## 其他规范 - 架构设计文档在 `docs/02-架构设计/`;当前活跃专项:无人值守可靠性(B1-B4)+ 异步任务会话(13-17),设计见 `temp/` 与 docs。 diff --git a/scripts/hooks/commit-msg b/scripts/hooks/commit-msg new file mode 100644 index 0000000..de6885a --- /dev/null +++ b/scripts/hooks/commit-msg @@ -0,0 +1,7 @@ +#!/bin/sh +# 通用 commit-msg 门禁:遍历执行 rules/ 下全部规则(开闭原则——新增规则加文件即可) +dir="$(dirname "$0")/rules" +for rule in "$dir"/*.sh; do + [ -f "$rule" ] || continue + sh "$rule" "$1" || exit 1 +done diff --git a/scripts/hooks/rules/commit-type.sh b/scripts/hooks/rules/commit-type.sh new file mode 100644 index 0000000..9acb546 --- /dev/null +++ b/scripts/hooks/rules/commit-type.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# G3 提交类型门禁:中文类型强制(规则独立文件,新增规则=加文件不改主hook) +head -1 "$1" | grep -qE "^(新增|修复|优化|重构|文档|清理|修正): " || { + echo "✗ [G3] 提交类型须为中文: 新增/修复/优化/重构/文档/清理/修正 + 空格 + 简述" + exit 1 +} diff --git a/scripts/hooks/rules/todo-id-unique.sh b/scripts/hooks/rules/todo-id-unique.sh new file mode 100644 index 0000000..e3d2a03 --- /dev/null +++ b/scripts/hooks/rules/todo-id-unique.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# G8 看板编号全域唯一门禁:主板+全部归档中 "数字. " 条目编号必须恰好出现一次(历史不重) +# 新写撞历史编号即拒;恢复搬回场景须同步删归档行(搬回本该如此),总数不变则自然放行 +git diff --cached --name-only -- 'docs/todo.md' 'docs/todo-归档*' | grep -q . || exit 0 +ids=$( { git show ":docs/todo.md" 2>/dev/null + for f in docs/todo-归档*.md; do [ -f "$f" ] && git show ":$f" 2>/dev/null; done +} | grep -E '^[0-9]+\. \[' | cut -d. -f1) +dups=$(printf '%s\n' "$ids" | sort | uniq -d) +if [ -n "$dups" ]; then + echo "✗ [G8] 看板编号重复(历史须全域唯一): $(printf '%s ' $dups)" + echo " 写板前先 grep 查重(主板+归档);恢复搬回须同步删归档行" + exit 1 +fi +exit 0