yeasy
|
f82e13017d
|
ci: add Identity Guard rejecting AI-assistant commit attribution
起因:blockchain_guide 上曾有一个 claude/novel-content-extraction-r0wys3
分支,4 个提交的 author 和 committer 都是 Claude <noreply@anthropic.com>
(内容还是与本书无关的小说抓取脚本)。分支已删除,但暴露出一个缺口:
既有的 .git/hooks/commit-msg 只查提交信息里的 Co-authored-by 尾注,
查不到身份字段;而且本地钩子不随仓库分发,那 4 个提交来自云端会话,
根本不经过本地钩子。
因此把闸门放到服务端:本工作流在 push 与 pull_request 上扫描本次新增
提交的 author/committer 身份与 Co-authored-by 尾注,命中即失败。
本地另配 pre-commit(拦当前身份)与 pre-push(拦 cherry-pick/rebase
带进来的外来提交)作为纵深防御,二者不入库。
判定刻意收窄,避免误伤本仓库群里大量讨论 Claude/Codex 的正文:
只检查身份字段与行首锚定的 Co-authored-by 尾注,绝不扫描自由文本;
姓名要求全等("Claude Dubois" 这样的真人不受影响),邮箱按厂商域名
(含子域)匹配,并覆盖 claude[bot] 这类 GitHub App 身份。
已验证:
- 用被删分支的真实 4 个提交做回归,push / pull_request / 新建分支
三种到达形态全部拦下;
- 全部 14 个仓库的完整历史(5,715 个提交,含 docker_practice 1,591
个多人历史与 claude_guide 339 个满是 Claude 的提交)零误报;
- dependabot 的 Co-authored-by、真人 Claude Dubois、正文提到
co-authored-by 但非尾注的提交,均正确放行;
- 范围解析不出来时 fail closed,只有确实没有 head 提交(删分支)才放行;
- tags-ignore 避免发布 tag 触发一次重复的全量审计。
|
2026-07-22 15:24:38 -07:00 |
|
yeasy
|
44822cea16
|
test(ci): enforce preview publish step order
|
2026-07-10 19:29:30 -07:00 |
|
yeasy
|
1f970681ee
|
test(ci): enforce exact preview tag commands
|
2026-07-10 19:29:30 -07:00 |
|
yeasy
|
397c66673b
|
fix(ci): fail closed on preview lookup errors
|
2026-07-10 19:29:30 -07:00 |
|
yeasy
|
8cd6094ae9
|
fix(ci): keep preview tag current
|
2026-07-10 19:29:30 -07:00 |
|
yeasy
|
ee0fbd7d38
|
fix(ci): attest releases and validate offline examples
|
2026-07-10 19:29:30 -07:00 |
|
yeasy
|
daa6661b2b
|
fix(ci): harden publishing and validate examples
|
2026-07-10 19:29:30 -07:00 |
|