统一 diff 的生成契约校验

method lesson 审计收口账本 内容作用域哈希校验 补丁审计的语义不变量门控

修改:20260515011138000

审计 diff 文件时,SHA256 绑定的是字节级生成格式,不只是语义差异;应在验证中固定并重算 unified diff 的路径标签、splitlines/keepends 与 lineterm 等生成契约。把该契约写入 审计收口账本,可让 内容作用域哈希校验 与补丁语义审计避免因格式参数漂移而失去可复核性。

Python difflib 的 lineterm 陷阱


difflib.unified_diff 在输入行使用 splitlines(keepends=True) 时,若要复现一个标准 unified diff 文件,常见契约是 lineterm='\n',再 ''.join(...);把 lineterm='' 与 keepends=True 搭配会少掉 file/header/hunk 控制行之间的若干换行,导致 SHA256 和字节数漂移,即使语义 hunk 看起来相同。审计账本若只写“regenerated unified diff exactly equals stored diff”而没写 lineterm,下一轮复核必须通过枚举或从生成脚本反推该参数,不能把第一次重算失败误判为正文被改。