雨天小六

读懂 Codex(10.10):Mini Codex 故障测试证明了什么

· 更新于 2026-08-03 · 专栏:读懂 Codex

#Codex#Agent Runtime#软件架构#系统设计

具体问题与边界

一个测试通过,只能证明给定实现、输入和环境下的断言成立。Mini Codex 的价值不是“Python 版 Codex 完成了”,而是把源码研究中的不变量变成可注入故障:取消是否只有一个终态、部分写后重试是否重复、 ToolPlan 热更新是否漂移、超时进程是否 reap。

本节建立证据分级,明确 27 项离线测试、1 项 opt-in live test、mypy 和微基准分别不能证明什么。

证据层级

证据当前范围能证明不能证明
单元/行为测试27 passed指定状态转换与输出生产模块等价
opt-in live test有凭据时运行最小 Responses payload/SSE 可互操作全事件族、稳定 SLA
mypy strict46 个源码文件静态类型合同一致运行期资源安全
record/replayrequest fingerprint相同请求产生确定 fixture真实模型确定性
20 Turn 微基准单机离线教学 Runtime 基线生产吞吐/尾延迟
静态源码映射锁定 Codex commit伪代码职责有生产锚点未运行平台测试的行为

从命题到故障注入

从源码不变量、最小实现、故障注入到可运行断言的验证闭环
图 10.10-1:先写可证伪不变量,再选择最小实现和故障点;测试结果只返回到原命题,不外推产品完整性。
  1. 从生产源码与测试提取一条行为合同,例如“只删除已确认写入的 pending 前缀”。
  2. 在 Mini 中保留决定合同的状态所有者、await 边界和错误返回,省略 UI、平台和兼容层。
  3. 提供可控制 Adapter:Scripted Model、PrefixWriteError、DenyAll Sandbox、Fake MCP transport。
  4. 在真正危险的提交点前后注入失败,而不是只测参数格式。
  5. 断言完整结果和残留状态:事件序列、Registry、JSONL、进程 returncode、call_id 配对。
  6. 把未覆盖矩阵写进限制,不用覆盖率百分比替代威胁模型。

这种方法是反向验证:Python 实现若无法清楚表达某条生产合同,说明研究可能只记住了类型名,还没 理解所有权和失败语义。

Python 风格伪代码

@dataclass(frozen=True)
class Claim:
    invariant: str
    fault_point: str
    expected_events: tuple[str, ...]
    expected_residue: Mapping[str, object]

async def verify_claim(claim: Claim, harness: FaultHarness) -> Evidence:
    harness.inject(claim.fault_point)
    outcome = await harness.run()
    assert outcome.events == claim.expected_events
    assert outcome.residue == claim.expected_residue
    return Evidence(
        claim=claim,
        environment=harness.environment_fingerprint(),
        observed=outcome,
        excluded=harness.unimplemented_boundaries,
    )

excluded 是证据对象的一部分。没有记录环境与排除项的 benchmark/test 数字,很容易被后文误用成 产品保证。

反例与未证明区域

把最小实现测试错误外推到生产完整性时的证据失效图
图 10.10-2:从局部断言跳到跨平台、安全或性能结论,会越过未实现模块和未运行环境。
错误结论实际证据缺口
WorkspacePolicy 测试通过,所以命令被隔离没有 OS sandbox/syscall/network 强制
Fake MCP 调用通过,所以 MCP 完整没有 transport、OAuth、resource、elicitation、timeout matrix
AgentPool 测试通过,所以多 Agent 可恢复没有子 Session、Role、Residency、AgentGraph
Patch 预验证通过,所以跨文件原子stage/replace 后仍可能部分提交
27 tests 全绿,所以并发安全没有长压、随机调度、crash subprocess
P95 数字较小,所以生产快样本仅 20 个离线 Turn,非 SLA
live smoke 成功,所以 API 兼容完整只覆盖最小文本/事件路径

设计判断

最有价值的测试不是 happy path 数量,而是能否描述故障发生后仍然存在的事实。类型检查确保 Adapter 边界可替换;record/replay 隔离外部不确定性;live smoke 只在最后验证最小线协议。三者互补,不能 互相替代。

Mini Codex 适合作为教学和架构回归 fixture,不适合作为生产 Agent 基础库直接发布。若继续工程化, 下一步应先补跨平台执行与 crash fault harness,而不是继续增加工具名称。

复现实验

cd examples/mini-codex
uv run pytest -q
uv run mypy src
uv run python benchmarks/runtime_baseline.py

当前基线是 27 passed、1 live test 默认 skipped、46 个源码文件通过 strict mypy。性能数字必须连同 日期、机器和样本数引用;它不进入通用架构结论。

本节边界

已经证明的是一组可运行不变量,而不是 Codex 产品完整复刻。下一节从这些被证明的合同中提取可迁移 部分。详细源码映射由研究仓库中的配套索引维护。

阅读导航

上一节:10.9 · 下一节:10.11

评论


← 返回文章列表