Round 3 · Codex 工程实施主力 review
执行摘要
【Evidence】Step 8 commit 0720c51 只改 4 文件:M0 pack、accepted proposal、owner map、architecture。6 项 Round 2 威胁按字面已关闭 5 项、部分关闭 1 项。8 维度 Round 2→Round 3:字段完整性 4.5→4.8,接口签名 4→4.1,测试可执行性 4→3.8,数据 fixtures 3.5→3.7,错误处理 contract 4.5→4.6,跨子系统调用 4→4.1,单次 load 3→3,反查路径 4.5→4.8。【Inference】C-1 PR 起手即跑通概率我估 88%:schema surface 基本可写,但 Step 8 的 eval 安全修复引入 str() allowlist 缺口,且 C-1 import/export surface 与 fixture 实体化仍要主控在 task packet 中锁死。
6 项 closure 表
| # | Round 2 新威胁 | Round 3 结论 | Evidence / Inference |
|---|---|---|---|
| 1 | §3.5 *M0 缺 schema_version,contract test 会 fail | Yes | 【Evidence】_BaseM0 已加 schema_version: Literal["1.1-m0"] = "1.1-m0",所有 *M0 子类继承:projects/finbayes/engineering/engineering-packs/m0-walking-skeleton.md:274-284、:287-407。§14.5 contract test 已拆为 1.0 默认 1 与 1.1 M0 默认 "1.1-m0" 两段断言:同文件 :1835-1864。【Inference】原 schema_version 断言失败已关闭。 |
| 2 | sample runner eval 未封 __builtins__,allowlist 名存实亡 | Yes, with regression | 【Evidence】safe_globals 显式含 "__builtins__": {},只暴露 result/task/boundary_result/audit_events/any/all/len:m0-walking-skeleton.md:1952-1967;安全说明解释 CPython builtins 自动注入风险::1970-1974。【Inference】RCE 路径已关;但见“新威胁 1”,测试表达式中现有 str() 会失效。 |
| 3 | fixture 治理库 vs 工程仓边界不清 | Yes | 【Evidence】§8 现在明确 5 段 YAML 是模板,不是治理库可执行 fixture;C-1 后在工程仓 tests/m0/fixtures/samples/ 落盘:m0-walking-skeleton.md:999-1006。§11 验收表也声明治理库只锁模板 + pytest_check acceptance condition,fixture 文件由 C-1 task packet 落工程仓:同文件 :1279-1283。【Inference】“本仓没有 fixture 文件”不再是事实冲突;变成 C-1 task packet 必做项。 |
| 4 | accepted proposal 正文旧口径误导当前契约 | Yes | 【Evidence】accepted proposal 顶部追加 disclaimer,声明“5 个新字段 / mca_tag / structured-result-version”是提案时口径,正式契约以 ADR-008 supplement 为准:governance/proposals/accepted/2026/2026-05-28--finbayes-cognition-mechanism-output-extension-to-adr008.md:27-33。正文旧口径仍保留作为 audit trail:同文件 :195-212。【Inference】误导风险已从“无标注旧口径”降为“读者忽略 disclaimer”。 |
| 5 | owner map 中 MP-2 与 DA-6 worst_axis 重复归口 | Yes | 【Evidence】MP-2 已标为契约层 v1 起步排序,DA-6 标为 MCA 子系统级完整裁决规则:projects/finbayes/engineering/pending-decisions-owner-map.md:21-23、:50-58。【Inference】C-1 不再需要猜两条谁先拍板;MP-2 先落、DA-6 后立。 |
| 6 | architecture §23 “全局唯一”与 ADR namespace 现实冲突 | Yes | 【Evidence】主架构 §23 已改为“在 arch-rewrite 工作流 namespace 内唯一”,跨工作流引用带 <workstream>/ADR-NNN 前缀,并加 namespace 说明:projects/finbayes/engineering/architecture.md:4646-4658。【Inference】新人从主架构入口误读 ADR-NNN 全仓唯一的风险已关闭。 |
8 维度评分对比表
| 维度 | Round 2 | Round 3 | 变化 | Evidence / Inference |
|---|---|---|---|---|
| 字段完整性 | 4.5 | 4.8 | +0.3 | 【Evidence】_BaseM0.schema_version + contract test 两段断言闭合:m0-walking-skeleton.md:274-284、:1835-1864。【Inference】C-1 Pydantic surface 基本可直接转译;剩余扣分是完整 1.1 validator 留 M1+。 |
| 接口签名 | 4.0 | 4.1 | +0.1 | 【Evidence】Step 8 未触碰子系统接口;agent-pack 仍要求 cognition/types.py、eval/runner.py 等输出:for-agents/topics/finbayes-m0-implementation/agent-pack.yaml:99-109。【Inference】schema_version 修复提升 import test,但接口范围未实质扩展。 |
| 测试可执行性 | 4.0 | 3.8 | -0.2 | 【Evidence】eval 安全修复加入 __builtins__ 空 dict:m0-walking-skeleton.md:1958-1966;但样例断言仍有 str(audit_events):同文件 :971-972。【Inference】安全性升、现成 sample runner 可执行性降,C-1 首跑会在 allowlist 漏 str 处失败。 |
| 数据 fixtures | 3.5 | 3.7 | +0.2 | 【Evidence】fixture 边界和工程仓落盘位置已明示:m0-walking-skeleton.md:999-1006。【Inference】不再误以为治理库缺文件;但实际 YAML 仍由 C-1 生成,模板里的 mca_bucket 只写 bucket_label,需要实施时展开七轴:同文件 :1008-1056。 |
| 错误处理 contract | 4.5 | 4.6 | +0.1 | 【Evidence】credential 样例要求凭证不进 audit events:m0-walking-skeleton.md:963-972;credential isolation test 仍扫 audit / fixture / logs:同文件 :1867-1888。【Inference】eval 安全修复间接降低测试注入风险;错误 contract 主体未变。 |
| 跨子系统调用 | 4.0 | 4.1 | +0.1 | 【Evidence】MCABucketM0 仍由 Task 携带,不入 StructuredCognitionResult:m0-walking-skeleton.md:376-400;契约源也同口径:projects/finbayes/engineering/engineering-packs/cognition-1.1-contract.md:31。【Inference】MP-2/DA-6 区分降低 MCA 调用归口误判,但代码接口仍需 C-1 显式 export。 |
| 单次 load 负载 | 3.0 | 3.0 | 0 | 【Evidence】agent-pack 仍 max_tokens: 8000 / per_source_tokens: 1500,却 full include M0 pack、契约源、字段矩阵等:for-agents/topics/finbayes-m0-implementation/agent-pack.yaml:13-31、:95-97。【Inference】Step 8 没改 load 形状;C-1 仍要最小读取路径。 |
| 反查路径 | 4.5 | 4.8 | +0.3 | 【Evidence】proposal disclaimer、owner map MP-2/DA-6 注、architecture namespace 三条反查都已落:proposal :27-33,owner map :53-58,architecture :4650-4658。【Inference】治理反查显著更稳。 |
新引入威胁清单
-
P1:eval 安全修复导致现有 pytest_check
str()失效。
【Evidence】m0_s3_credential_reject断言写task is None and 'sk-abc123' not in str(audit_events):projects/finbayes/engineering/engineering-packs/m0-walking-skeleton.md:963-972。Step 8 后safe_globals只有any/all/len,没有str:同文件:1958-1966。
【Inference】C-1 如果照 §14.5 写 runner,第 3 条 sample 会NameError: name 'str' is not defined。这不是安全风险,是“修安全时打断现有验收表达式”的工程回归。最小修复是 allowliststr或把断言改成不需要str()的结构化扫描。 -
P2:C-1 import/export surface 出现三套名字。
【Evidence】M0 §3 主体代码块写# src/finbayes/cognition/types.py:m0-walking-skeleton.md:202;§3.5 代码块写# src/finbayes/cognition/contract_v1_1_m0.py:同文件:248-250;§14.5 contract test importfrom finbayes.cognition.v11 import (...):同文件:1847-1855;agent-pack 输出却要求cognition/types.py:for-agents/topics/finbayes-m0-implementation/agent-pack.yaml:99-102。
【Inference】Round 2 已看到contract_v1_1_m0.pyvscognition/types.py,但 Step 8 后 contract test 又引入finbayes.cognition.v11作为第三个 surface。C-1 起手 PR 若不建finbayes/cognition/v11.py或 re-export,schema 写对也会 import fail。 -
P2:fixture 模板到 Pydantic 可验证 fixture 之间仍有人工展开缝隙。
【Evidence】共享片段要求mca_bucket七轴档位均为L1 / D2 / F1 / N1 / C2 / I2 / K2,但 5 段 YAML 仅写mca_bucket: { bucket_label: B1/B2 }:m0-walking-skeleton.md:1008-1056;MCABucketM0七轴字段均必填:同文件:376-385。
【Inference】C-1 若把模板直接当 fixture 校验MCABucketM0,会缺七轴字段。文档说“实施时补齐”,但这一步必须写进 C-1 task packet,不然“照写”仍会失败。 -
P3:agent-pack 输出范围仍大于 C-1 首 PR。
【Evidence】agent-pack outputs 同时要求cognition/types.py、SQLite DDL、provider shim、eval runner、integration test:for-agents/topics/finbayes-m0-implementation/agent-pack.yaml:99-109。
【Inference】如果 Claude 主控直接把整个 topic pack 当 C-1 指令,实施 agent 会把 C-1 误解为 M0 全包。C-1 首 PR 应只切cognition/types.py+ import/export + contract test + sample fixture 最小落盘,不应同时做 DDL/provider/eval/integration。
仍漏盲点(这次特意找)
-
“安全 allowlist”与“现有断言语言”之间没有回归检查。
【Evidence】Round 2 只指出__builtins__未封;Step 8 封了 builtins,但没有同步扫描pytest_check所需内置函数,现有str()立即掉出 allowlist:m0-walking-skeleton.md:971-972、:1958-1966。
【Inference】之前 8 份 report 都把 eval 风险当安全问题,没有把它当“断言 DSL 兼容性”问题审一次。 -
C-1 的 Python module contract 没有单点命名。
【Evidence】types.py、contract_v1_1_m0.py、finbayes.cognition.v11三套名字同时存在:m0-walking-skeleton.md:202、:249、:1849,agent-pack 只承诺cognition/types.py:agent-pack.yaml:99-102。
【Inference】前两轮看到了路径漂移,但没有把“contract test import path 必须能跑”上升成 C-1 packet 的必填项。 -
fixture 真实样本的“字段完整性”没有和
MCABucketM0绑定。
【Evidence】模板只给bucket_label,模型要求七轴 + bucket_label:m0-walking-skeleton.md:1011-1056、:376-385。
【Inference】之前 review 关注 fixture 是否 crypto-only、是否在治理库落盘;没专门检查模板本身能否被当前 Pydantic 模型 validate。 -
“知识库校验通过”不能证明 eval 表达式可执行。
【Evidence】agent-pack acceptance 只有npm run verify:kb、npm run derive:check、.archon/workflows/milestone-M0.yaml存在性:for-agents/topics/finbayes-m0-implementation/agent-pack.yaml:111-118。
【Inference】当前仓内校验不会执行pytest_check表达式,也不会发现strallowlist 缺口。C-1 必须加工程仓侧 sample runner smoke。
C-1 PR 起手跑通概率估算 + 卡点分析
【Inference】我给 88%,定义是“Claude 主控拉起 C-1,工程实施 agent 在第一轮 PR 内完成 schema surface + import smoke + 最小 contract/sample tests,并能在一次修正内跑绿”。不是“完整 M0 全包一次跑通”。
概率拆分:
| 因子 | 概率影响 | Evidence / Inference |
|---|---|---|
| schema surface 可转译 | + | 【Evidence】10 要素 + 6 新字段 + _BaseM0.schema_version 都有可复制 Pydantic 草案:cognition-1.1-contract.md:302-368、m0-walking-skeleton.md:274-407。 |
| contract test 形状清楚 | + | 【Evidence】§14.5 给了 test_all_pydantic_models_have_schema_version 两段断言:m0-walking-skeleton.md:1835-1864。 |
eval str allowlist 回归 | - | 【Evidence】现有表达式需要 str,safe_globals 不给:m0-walking-skeleton.md:971-972、:1958-1966。【Inference】首跑失败概率高,但修复成本极低。 |
| import/export surface 三分叉 | - | 【Evidence】types.py / contract_v1_1_m0.py / finbayes.cognition.v11 并存:m0-walking-skeleton.md:202、:249、:1849。【Inference】若 task packet 不锁 re-export,首 PR 可能 import fail。 |
| fixture 实体化仍需工程仓动作 | - | 【Evidence】治理库明确不存可执行 fixture,C-1 后工程仓落盘:m0-walking-skeleton.md:1001-1006。【Inference】这是合理边界,但会降低“起手即跑通”概率。 |
| topic pack 过宽 | - | 【Evidence】outputs 包含 DDL/provider/eval/integration 多项:agent-pack.yaml:99-109。【Inference】主控若不收窄 scope,C-1 会膨胀。 |
判断:Step 8 后“可以启动 C-1”比 Round 2 更成立,但“起手即跑通”不该报 95% 以上。88% 是我对当前文档 + 明确主控 task packet 的真实估算;若主控不收窄 scope、直接扔整包,概率降到约 72-78%。
主控需做的准备(3-5 条)
-
在 C-1 task packet 第一段锁 scope。
【Inference】明确只做cognition/types.pyschema surface、finbayes.cognition.v11re-export/import smoke、test_pydantic_schema_stability.py、5 条 sample fixture 最小落盘;不做 SQLite DDL、provider shim、完整 eval runner、integration test。 -
锁 Python module surface。
【Inference】建议要求工程仓落src/finbayes/cognition/types.py为事实实现,另建src/finbayes/cognition/v11.py从types.pyre-export §3.5 类,以满足 §14.5 import;不要让contract_v1_1_m0.py成为第三份实现。 -
把 Step 8 新回归列为 C-1 第一个测试修复。
【Inference】safe_globalsallowlist 加str,或把 credential 断言改成结构化字段扫描。先跑tests/m0/sample_inputs.yamlrunner smoke,避免安全修复变成首轮红灯。 -
把 5 条 fixture 从模板补成可 validate 文件。
【Inference】每条mca_bucket展开七轴字段;credential / execution rejection 样例不要实例化 Task;用固定task_id保持 CI 可重放。 -
给 C-1 agent 最小读取序列。
【Inference】按agent-pack.yaml→cognition-1.1-contract.md§1/§5/§6 →m0-walking-skeleton.md§3/§3.5/§8/§11/§14.5 →milestone-field-evolution-matrix.md,不要一次 full load 全 topic sources。
与 Round 2 差异 + 元 review
【Evidence】Round 2 我的基线把 6 条新威胁列为:schema_version 缺失、fixture 边界不清、proposal 旧口径、owner map 重复归口、hash 实现仍粗、agent-pack load 过重等:governance/workstreams/finbayes-arch-rewrite/2026-05-28-step7-round2-codex-review.md:55-66。Step 8 针对其中 6 条做了明确 patch:git diff 75eeb6f..0720c51 显示四文件改动,核心新增点对应上述 closure 表。
【Inference】Round 3 最大变化不是“文档是否足够清楚”,而是“修复后能否直接跑”。schema_version、namespace、proposal/owner map 都是干净 closure;真正新风险是局部工程回归:__builtins__ 封锁后现有 DSL 表达式缺 str,以及 contract test import path 与 agent-pack 输出路径没有单点统一。
【Inference】元 review:Round 1+2 的 8 份 report 对“字段 / 治理 / 反查 / owner”覆盖很强,但对“修复后的测试表达式本身还跑不跑”覆盖不足。后续每次修 sample runner / contract test,都应做一个读-only grep 级回归:扫描所有 pytest_check 使用的 helper 名称,和 runner allowlist 对齐;扫描所有文档中的 Python import path,和 agent-pack outputs 对齐。
【Unknown】本报告只按治理仓当前基线判断。若工程实施仓已有额外 scaffold、finbayes.cognition.v11 re-export、或现成 fixture 文件,本仓证据不能证明;C-1 拉起前应由主控附上工程仓当前树与 test command。