[B1][R-P2-9] 无号提交治理(hook/CI 提示 + 台账补录) #216

Closed
opened 2026-10-07 19:13:05 +08:00 by tanzk · 1 comment
Owner

批次:B1。依据:R 报告 §3.6 W4/INFO;台账 R-P2-9(无号提交约 50%)。

验收标准

  • 本地 commit-msg hook(或现有 hook 增强):提交信息缺 #工单号 时警告/阻断(保留显式跳过通道用于纯合并等)
  • CI 增加同类检查(新增提交)
  • 台账 #191~#197 缺失登记补录(能考据的范围)
  • 文档一句话说明提交信息规范(携带 #issue号)

不做项

  • 不追溯改写历史提交
**批次**:B1。**依据**:R 报告 §3.6 W4/INFO;台账 R-P2-9(无号提交约 50%)。 ## 验收标准 - [x] 本地 commit-msg hook(或现有 hook 增强):提交信息缺 #工单号 时警告/阻断(保留显式跳过通道用于纯合并等) - [x] CI 增加同类检查(新增提交) - [x] 台账 #191~#197 缺失登记补录(能考据的范围) - [x] 文档一句话说明提交信息规范(携带 #issue号) ## 不做项 - 不追溯改写历史提交
Author
Owner

关闭凭证核验 (2026-10-07)

commit:64086c5(6 文件;gitleaks no leaks found;该提交本身即由新装的 commit-msg hook 真实校验放行;无迁移/无产品代码改动)

验收标准逐条核验

# 验收标准 核验方式(可复现) 结果
1 本地 commit-msg hook:缺号警告/阻断,保留显式跳过通道 安装器 bash scripts/install-commit-msg-hook.sh(写入 .git/hooks/commit-msg,与 gitleaks pre-commit 独立)。临时 git 仓端到端实测:无号 git commit → 被拒绝 exit 1;带 #216 → 通过;含 [skip-issue] → 通过;--no-verify → 可紧急绕过(提示会同时绕过 gitleaks)。跳过通道 = 信息内显式 [skip-issue] + merge 提交自动放行 ✅
2 CI 增加同类检查(新增提交) .gitea/workflows/test.yml 新增 commit-message-lint job(纯 git,不依赖 docker):push 校验 before..after、PR 校验 base..head;两端不可达 / 新分支首推 / force-push / fork 时回退 --head-only,不误阻断主干、不追溯历史。YAML 经 yaml.safe_load 解析合法(jobs 顺序 commit-message-lint→backend→frontend);区间/HEAD/空区间三种判据路径已在临时仓实测 ✅
3 台账 #191~#197 缺失登记补录(能考据的范围) 台账新增 §十七,据 Gitea API(state/closed_at/评论)+ git log --grep '#19[1-7]' 考据:#192/#194/#195/#197 = closed 且均有「关闭凭证核验」评论(纠正评审时"凭证无法线上核验");#191/#193/#196 = open,逐条附 commit/文档依据(如 #193 联动 R-P0-3/#204 dry_run、#196 附 63498ef/5f5a67a 与治理报告) ✅
4 文档一句话说明提交信息规范 docs/standards/issue-workflow.md §1.5 增补钩子安装/判据/跳过通道/CI 不追溯;README 顶部 CI 行 + 「提交钩子」安装提示各一句 ✅

判据同源(本地/CI 不漂移)

本地 hook 与 CI 都调用同一入库脚本 scripts/check-commit-issue.sh(--message-file / --range / --head-only),判据更新随仓库走、无需重装钩子。规则:含 #数字 或 [skip-issue] 或 merge 提交即放行;违规逐条列出后退出 1;空区间视为通过。

实测证据

  • 判据脚本:临时仓 --range HEAD~3..HEAD 精确只拦 1 条无号提交(带号/skip/merge 同行不误伤);--message-file 带号 exit 0 / 无号 exit 1;空区间 HEAD..HEAD exit 0。
  • 安装器:临时仓与本仓各执行一次 exit 0(修掉一处全角括号紧贴变量名导致的 unbound variable);bash -n 语法检查通过。
  • 本仓已安装 hook,64086c5 提交经其真实放行;两脚本以 100755 可执行位入库。

不做项确认

  • 未追溯改写任何历史提交(CI 只看新增区间;历史无号提交保持原样)。

台账 R-P2-9 已回填 ✅。

说明:CI job 的实际 runner 绿灯需待本次 push 后在 Gitea 上观测(本地仅能验证 YAML 合法性 + 判据脚本三模式 + bash 区间逻辑);按项目约定只本地 commit、不自行 push,此处如实标注,CI 结果随发布流程确认。

## 关闭凭证核验 (2026-10-07) **commit**:`64086c5`(6 文件;gitleaks `no leaks found`;该提交本身即由新装的 commit-msg hook 真实校验放行;无迁移/无产品代码改动) ### 验收标准逐条核验 | # | 验收标准 | 核验方式(可复现) | 结果 | |---|---|---|---| | 1 | 本地 commit-msg hook:缺号警告/阻断,保留显式跳过通道 | 安装器 `bash scripts/install-commit-msg-hook.sh`(写入 `.git/hooks/commit-msg`,与 gitleaks pre-commit 独立)。临时 git 仓端到端实测:无号 `git commit` → **被拒绝 exit 1**;带 `#216` → 通过;含 `[skip-issue]` → 通过;`--no-verify` → 可紧急绕过(提示会同时绕过 gitleaks)。跳过通道 = 信息内显式 `[skip-issue]` + merge 提交自动放行 | ✅ | | 2 | CI 增加同类检查(新增提交) | `.gitea/workflows/test.yml` 新增 **commit-message-lint** job(纯 git,不依赖 docker):push 校验 `before..after`、PR 校验 `base..head`;两端不可达 / 新分支首推 / force-push / fork 时回退 `--head-only`,**不误阻断主干、不追溯历史**。YAML 经 `yaml.safe_load` 解析合法(jobs 顺序 commit-message-lint→backend→frontend);区间/HEAD/空区间三种判据路径已在临时仓实测 | ✅ | | 3 | 台账 #191~#197 缺失登记补录(能考据的范围) | 台账新增 **§十七**,据 Gitea API(state/closed_at/评论)+ `git log --grep '#19[1-7]'` 考据:#192/#194/#195/#197 = **closed 且均有「关闭凭证核验」评论**(纠正评审时"凭证无法线上核验");#191/#193/#196 = open,逐条附 commit/文档依据(如 #193 联动 R-P0-3/#204 dry_run、#196 附 63498ef/5f5a67a 与治理报告) | ✅ | | 4 | 文档一句话说明提交信息规范 | `docs/standards/issue-workflow.md` §1.5 增补钩子安装/判据/跳过通道/CI 不追溯;README 顶部 CI 行 + 「提交钩子」安装提示各一句 | ✅ | ### 判据同源(本地/CI 不漂移) 本地 hook 与 CI 都调用同一入库脚本 `scripts/check-commit-issue.sh`(`--message-file` / `--range` / `--head-only`),判据更新随仓库走、无需重装钩子。规则:含 `#数字` 或 `[skip-issue]` 或 merge 提交即放行;违规逐条列出后退出 1;空区间视为通过。 ### 实测证据 - 判据脚本:临时仓 `--range HEAD~3..HEAD` 精确只拦 1 条无号提交(带号/skip/merge 同行不误伤);`--message-file` 带号 exit 0 / 无号 exit 1;空区间 `HEAD..HEAD` exit 0。 - 安装器:临时仓与本仓各执行一次 exit 0(修掉一处全角括号紧贴变量名导致的 `unbound variable`);`bash -n` 语法检查通过。 - 本仓已安装 hook,`64086c5` 提交经其真实放行;两脚本以 `100755` 可执行位入库。 ### 不做项确认 - 未追溯改写任何历史提交(CI 只看新增区间;历史无号提交保持原样)。 台账 R-P2-9 已回填 ✅。 > 说明:CI job 的实际 runner 绿灯需待本次 push 后在 Gitea 上观测(本地仅能验证 YAML 合法性 + 判据脚本三模式 + bash 区间逻辑);按项目约定**只本地 commit、不自行 push**,此处如实标注,CI 结果随发布流程确认。
tanzk closed this issue 2026-10-07 22:39:47 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tanzk/csctalon#216