详细背景
PR #128 实现 #125 的主干授权 wrapper 时,Standards review 连续发现多轮主干保护绕过:
- 第一轮:
git push origin +HEAD:main、git push --mirror origin、git push --prune origin 等 destructive push 形态未全部拦截。
- 第二轮:
git -C . push --mirror origin、git -C . push origin +HEAD:main 这类 Git global option 形态绕过了对子命令位置的假设。
- 第三轮:
git push -uf origin main、git push --mir origin、git push --del origin main 等 Git 允许的短选项簇和长选项缩写又暴露了新绕过面。
这些具体问题已在 PR #128 中修复并合并;本 issue 不重复修这些 case。未解决的是系统性问题:主干授权 wrapper 缺少一套长期维护的 destructive Git command corpus / parser regression suite,导致同类高风险 case 依赖 reviewer 逐轮发现,耗时高且容易漏掉新等价形态。
产品解决方案
为所有 repo-native Git 授权 wrapper 建立“破坏性命令语料库 + 安全解析回归测试”。
用户视角:以后修改主干保护、history rewrite、PR cleanup 等 Git wrapper 时,常见危险 Git 写法会在本地测试阶段一次性暴露,而不是在 Standards review 中逐轮返工。
详细技术实现方案
- 新增集中式命令语料,例如
scripts/research/governance/git_command_safety_cases.py 或测试 fixture:
- destructive push:force、force-with-lease、mirror、delete、prune、
+ refspec、: refspec。
- Git global options:
git -C . push ...、git -c key=value push ...、git --git-dir ... push ...。
- short option clusters:
-uf、-vf、-d 组合。
- long option abbreviations:
--for、--mir、--del、--pru。
- branch / checkout / switch destructive forms。
- 所有危险 case 使用 fake runner,断言 wrapper 在调用子进程前拒绝,避免执行真实 destructive Git。
- 明确 safe allowlist:
ref-sync 只允许 git merge --ff-only origin/main。
- direct-write 只允许非 destructive Git 子命令,并拒绝 Git global option 形态,除非未来设计出完整解析器。
- 在 governance audit 中检查关键测试语料存在,避免后续重构删除。
- 增加一组“等价写法”回归测试,证明同一语义的缩写、组合、refspec 形态都会得到同一拒绝结论。
- 文档更新:
pr-workflow.md / governance.md 只描述策略,不列完整危险命令清单;完整清单以测试 fixture 为机器 SSOT。
Acceptance criteria
Blocked by
None - can start immediately
详细背景
PR #128 实现 #125 的主干授权 wrapper 时,Standards review 连续发现多轮主干保护绕过:
git push origin +HEAD:main、git push --mirror origin、git push --prune origin等 destructive push 形态未全部拦截。git -C . push --mirror origin、git -C . push origin +HEAD:main这类 Git global option 形态绕过了对子命令位置的假设。git push -uf origin main、git push --mir origin、git push --del origin main等 Git 允许的短选项簇和长选项缩写又暴露了新绕过面。这些具体问题已在 PR #128 中修复并合并;本 issue 不重复修这些 case。未解决的是系统性问题:主干授权 wrapper 缺少一套长期维护的 destructive Git command corpus / parser regression suite,导致同类高风险 case 依赖 reviewer 逐轮发现,耗时高且容易漏掉新等价形态。
产品解决方案
为所有 repo-native Git 授权 wrapper 建立“破坏性命令语料库 + 安全解析回归测试”。
用户视角:以后修改主干保护、history rewrite、PR cleanup 等 Git wrapper 时,常见危险 Git 写法会在本地测试阶段一次性暴露,而不是在 Standards review 中逐轮返工。
详细技术实现方案
scripts/research/governance/git_command_safety_cases.py或测试 fixture:+refspec、:refspec。git -C . push ...、git -c key=value push ...、git --git-dir ... push ...。-uf、-vf、-d组合。--for、--mir、--del、--pru。ref-sync只允许git merge --ff-only origin/main。pr-workflow.md/governance.md只描述策略,不列完整危险命令清单;完整清单以测试 fixture 为机器 SSOT。Acceptance criteria
Blocked by
None - can start immediately