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