c9f10973ff
第 ⑤ 阶段第一块,按 0006 与 0007 落地。从依赖图的底部开始写: 这两个模块定错了上面全得跟着改。 types 装 22 个公共值类型、枚举与持久化记录。StepCompleted 带一条构造期校验—— result_id 为空当且仅当 action_outcome 也为空,两者一空一有值是结构上说不通的, 放行它等于把「有动作结果却没有意图」这档日志损坏当成合法完整步接受。 校验用显式异常不用 assert,因为 -O 会把断言整条剥掉,下游用 -O 跑的那天守卫就静默消失。 ports 装五个 Protocol 与四个只在调用往返之间存在的壳。每个接缝多一个同步 parameters(),参数快照靠它聚合——原先没有这个方法,那个快照根本调不动。 RunLog 五个字段全带默认值,所以「读一个从没写过的运行标识返回空日志」就是 RunLog()。 零业务假设那条测试第二次抓到我:StopReason 的 docstring 里写了下游的实验词汇, 另有四处直接点名下游项目。库源码点名下游本身就是 §1.1 禁的——三个下游领域互不相交, 一个业务词进来就是替其中一个做了另外两个不需要的假设。已改成中性说法加 design doc 指向。 import-linter 从此不再是平凡的绿:Analyzed 15 files, 7 dependencies, ports → types 那几条边真的被检查了一遍,之前是 0 dependencies。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>