takerukondo/loophole-lab

GitHub: takerukondo/loophole-lab

Loophole Lab 通过对抗性搜索发现区划政策中字面规则与意图不变量之间的分歧,并将反例自动记录为可复现的回归测试。

Stars: 0 | Forks: 0

# Loophole Lab 一项规则可能通过了自身的测试,却依然未能保护其原本意图守护的对象。 Loophole Lab 是一个离线的对抗性策略实验。脚本化 proposer 将开发场景提交给两个确定性 verifier:其中一个字面应用合成的 Toyville 法规,另一个则检查其声明的不变量(invariant)。字面通过加上意图失败,就成了一个可以作为 pytest 回归测试记录下来的反例。 ``` $ loophole-lab Loophole Lab — a written rule passes what its stated intent rejects policy: v1 -> v1+patch-amenity-far counterexamples: 2 after counting amenity area toward FAR: spec-TV-100: literal pass True -> False - FAR 4.500 exceeds max 3.0 (amenity_exempt=False) ``` 所有操作均在本地基于虚构的政策和地块运行。没有模型调用,也没有网络请求。 ## 运行说明 一条命令即可创建环境、运行测试套件,并展示闭环流程: ``` ./scripts/run.sh ``` 或者直接安装并运行各个组件: ``` python -m pip install -e '.[dev]' pytest loophole-lab ``` 默认的演示是只读的。要将发现的反例保存为独立的回归测试,请明确指定目标路径: ``` loophole-lab --emit-dir ./captured_regressions ``` ## 植入的漏洞 Toyville v1 在其字面 FAR 计算中排除了“便利设施”的建筑面积。意图检查则会计算总建筑面积。`speculator` 策略将住宅面积设定在书面规定的上限,并增加豁免面积;其结果是该方案通过了字面规则,却违背了不变量。已演示的最小补丁会将便利设施建筑面积计入 FAR,从而使同一方案无法通过。 此处有意不将其呈现为一种真实的监管漏洞利用行为。测试数据(fixtures)均是虚构的,且这三个“agent”是确定性的提案策略,而非自主系统。[DESIGN_NOTES.md](./DESIGN_NOTES.md) 解释了为什么这种约束是有用的。[LIMITATIONS.md](./LIMITATIONS.md) 更详细地说明了该边界。 ## 与 `zoning-unit-tests` 的关系 [`zoning-unit-tests`](https://github.com/takerukondo/zoning-unit-tests) 比较不同版本显式规则之间的行为差异。而 Loophole Lab 则保持规则不变,寻找其字面语义与显式政策不变量之间的分歧。前者属于回归测试;后者属于对抗性搜索。在找到能让问题更清晰而非掩盖这些不同问题的共享 schema 之前,它们将保持独立。 ## 研究脉络 这是我于 2024 年 5 月至 2025 年 1 月在 SCI-Arc Research 担任研究助理期间,独立完成的一项工作。这种关于激励鸿沟的构想,得益于 Masha Hupalo 和 Luke Falcone 的《Inclusionary Zoning in Los Angeles》,以及 Erik Ghenoiu、Masha Hupalo、Andrew Chittenden 和 Case Miller 的《NPA Ballot Initiative》的启发。 本仓库并未声明我是上述项目的唯一作者,也不属于 SCI-Arc 的官方发布。此处的软件和合成测试数据均属于独立实现。请参阅 [ATTRIBUTION.md](./ATTRIBUTION.md) 和 [PROVENANCE.md](./PROVENANCE.md)。 基于 MIT 许可协议发布。仅包含合成政策;不构成法律建议。
标签:Python, 安全规则引擎, 对抗测试, 文档结构分析, 无后门, 策略测试, 红队评估, 逆向工具