AdversaryGate
面向AI编程Agent代码合并场景的合并门禁工具,通过在基线与补丁上运行测试套件并给出MERGE/BLOCK/INCONCLUSIVE三种裁定,评估补丁测试充分性,支持变异测试与注释金丝雀等验证机制
时间轴 (近 90 天)
开发者Sanflow10发布的合并门禁工具AdversaryGate在四天内连发了六个补丁版本(3.0.0到3.0.6)。
AdversaryGate的全部漏洞几乎都源于同一模式:fail-open by omission,即输入落在度量范围之外时门禁默默跳过,未标记为INCONCLUSIVE。
AdversaryGate的裁定逻辑输出三种结果:MERGE(退出码0)、BLOCK(退出码1)、INCONCLUSIVE(退出码2)。
AdversaryGate的设计原则是:一个没有人实际做过的测量,不能用来通过门槛。
AG-046漏洞:一个对变更文件做哈希的测试会在任何编辑下失败,杀死所有变异体使变异强度算为1.0;3.0.0通过引入注释金丝雀修复。
3.0.1修复的漏洞:比较AST或字节码的声明仍能通过注释金丝雀,随后金丝雀加入no-op赋值来改变语法树和字节码,但这是部分修复,只读取语法树更小片段的声明仍能通过。
3.0.1修复的漏洞:.py文件在.gitattributes中被标记为binary后,git diff输出'Binary files ... differ',变更行从覆盖差异中消失,补丁直接进入MERGE;修复后此类diff被拒绝。
删除一行README曾能让覆盖率变成1.0;修复后,没有代码行的补丁覆盖率标记为未测量,无法凭覆盖率获得MERGE。
3.0.4修复了两个问题:同行分支(如return 999 if x == 0 else x + 1)生成分支变异体,幸存者触发INCONCLUSIVE;以及此前只对前12行变更做变异,现在每行变更至少被破坏一次。
AG-047漏洞(3.0.6修复):门禁仅凭路径判断什么是测试,命名像测试但被被测代码导入的模块会被排除在覆盖率和变异之外;修复后此类模块被当作源码处理,但通过importlib或__import__动态导入的模块仍无法检测。
还有 4 条时间轴事件
全部知识事实 (14)
AdversaryGate的全部漏洞几乎都源于同一模式:fail-open by omission,即输入落在度量范围之外时门禁默默跳过,未标记为INCONCLUSIVE。
50%待验证3.0.1修复的漏洞:比较AST或字节码的声明仍能通过注释金丝雀,随后金丝雀加入no-op赋值来改变语法树和字节码,但这是部分修复,只读取语法树更小片段的声明仍能通过。
50%待验证AdversaryGate的裁定逻辑输出三种结果:MERGE(退出码0)、BLOCK(退出码1)、INCONCLUSIVE(退出码2)。
50%待验证AdversaryGate的设计原则是:一个没有人实际做过的测量,不能用来通过门槛。
50%待验证AdversaryGate的已知局限包括:测量仅支持Python和pytest,其他语言返回INCONCLUSIVE而非猜测性MERGE;无法阻止以相同OS用户身份运行的Agent访问门禁的临时目录;金丝雀修复是部分的。
50%待验证AdversaryGate的每个漏洞都记录在公开的ERRORS_AND_INCONSISTENCIES.md中,包含复现方式和修复方案。
50%待验证诚实补丁被误判为INCONCLUSIVE的问题包括:'\ No newline at end of file'标记导致行号偏移、MCP的900秒超时短于完整测试套件运行时间、Android(Termux)上默认内存限制导致进程被中止;这些问题在3.0.5中修复。
50%待验证3.0.2和3.0.3版本带着API token发布,MCP包停留在3.0.0,核心文件没有attestation;作者从PyPI和GitHub移除了3.0.4之前的所有版本,现在发布流程为签名标签→Trusted Publishing→两个包都携带PyPI attestation。
50%待验证删除一行README曾能让覆盖率变成1.0;修复后,没有代码行的补丁覆盖率标记为未测量,无法凭覆盖率获得MERGE。
50%待验证AG-046漏洞:一个对变更文件做哈希的测试会在任何编辑下失败,杀死所有变异体使变异强度算为1.0;3.0.0通过引入注释金丝雀修复。
50%待验证3.0.1修复的漏洞:.py文件在.gitattributes中被标记为binary后,git diff输出'Binary files ... differ',变更行从覆盖差异中消失,补丁直接进入MERGE;修复后此类diff被拒绝。
50%待验证开发者Sanflow10发布的合并门禁工具AdversaryGate在四天内连发了六个补丁版本(3.0.0到3.0.6)。
50%待验证3.0.4修复了两个问题:同行分支(如return 999 if x == 0 else x + 1)生成分支变异体,幸存者触发INCONCLUSIVE;以及此前只对前12行变更做变异,现在每行变更至少被破坏一次。
50%待验证AG-047漏洞(3.0.6修复):门禁仅凭路径判断什么是测试,命名像测试但被被测代码导入的模块会被排除在覆盖率和变异之外;修复后此类模块被当作源码处理,但通过importlib或__import__动态导入的模块仍无法检测。
50%