具体问题与边界
一个测试通过,只能证明给定实现、输入和环境下的断言成立。Mini Codex 的价值不是“Python 版 Codex 完成了”,而是把源码研究中的不变量变成可注入故障:取消是否只有一个终态、部分写后重试是否重复、 ToolPlan 热更新是否漂移、超时进程是否 reap。
本节建立证据分级,明确 27 项离线测试、1 项 opt-in live test、mypy 和微基准分别不能证明什么。
证据层级
| 证据 | 当前范围 | 能证明 | 不能证明 |
|---|---|---|---|
| 单元/行为测试 | 27 passed | 指定状态转换与输出 | 生产模块等价 |
| opt-in live test | 有凭据时运行 | 最小 Responses payload/SSE 可互操作 | 全事件族、稳定 SLA |
| mypy strict | 46 个源码文件 | 静态类型合同一致 | 运行期资源安全 |
| record/replay | request fingerprint | 相同请求产生确定 fixture | 真实模型确定性 |
| 20 Turn 微基准 | 单机离线 | 教学 Runtime 基线 | 生产吞吐/尾延迟 |
| 静态源码映射 | 锁定 Codex commit | 伪代码职责有生产锚点 | 未运行平台测试的行为 |
从命题到故障注入
- 从生产源码与测试提取一条行为合同,例如“只删除已确认写入的 pending 前缀”。
- 在 Mini 中保留决定合同的状态所有者、await 边界和错误返回,省略 UI、平台和兼容层。
- 提供可控制 Adapter:Scripted Model、PrefixWriteError、DenyAll Sandbox、Fake MCP transport。
- 在真正危险的提交点前后注入失败,而不是只测参数格式。
- 断言完整结果和残留状态:事件序列、Registry、JSONL、进程 returncode、call_id 配对。
- 把未覆盖矩阵写进限制,不用覆盖率百分比替代威胁模型。
这种方法是反向验证: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 数字,很容易被后文误用成
产品保证。
反例与未证明区域
| 错误结论 | 实际证据缺口 |
|---|---|
| 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 产品完整复刻。下一节从这些被证明的合同中提取可迁移 部分。详细源码映射由研究仓库中的配套索引维护。
评论
登录后即可评论