跳到主要内容

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 *M0schema_version,contract test 会 failYes【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 断言失败已关闭。
2sample runner eval 未封 __builtins__,allowlist 名存实亡Yes, with regression【Evidence】safe_globals 显式含 "__builtins__": {},只暴露 result/task/boundary_result/audit_events/any/all/lenm0-walking-skeleton.md:1952-1967;安全说明解释 CPython builtins 自动注入风险::1970-1974。【Inference】RCE 路径已关;但见“新威胁 1”,测试表达式中现有 str() 会失效。
3fixture 治理库 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 必做项。
4accepted 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”。
5owner 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 后立。
6architecture §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 2Round 3变化Evidence / Inference
字段完整性4.54.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.04.1+0.1【Evidence】Step 8 未触碰子系统接口;agent-pack 仍要求 cognition/types.pyeval/runner.py 等输出:for-agents/topics/finbayes-m0-implementation/agent-pack.yaml:99-109。【Inference】schema_version 修复提升 import test,但接口范围未实质扩展。
测试可执行性4.03.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 处失败。
数据 fixtures3.53.7+0.2【Evidence】fixture 边界和工程仓落盘位置已明示:m0-walking-skeleton.md:999-1006。【Inference】不再误以为治理库缺文件;但实际 YAML 仍由 C-1 生成,模板里的 mca_bucket 只写 bucket_label,需要实施时展开七轴:同文件 :1008-1056
错误处理 contract4.54.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.04.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.03.00【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.54.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】治理反查显著更稳。

新引入威胁清单

  1. 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。这不是安全风险,是“修安全时打断现有验收表达式”的工程回归。最小修复是 allowlist str 或把断言改成不需要 str() 的结构化扫描。

  2. P2:C-1 import/export surface 出现三套名字。
    【Evidence】M0 §3 主体代码块写 # src/finbayes/cognition/types.pym0-walking-skeleton.md:202;§3.5 代码块写 # src/finbayes/cognition/contract_v1_1_m0.py:同文件 :248-250;§14.5 contract test import from finbayes.cognition.v11 import (...):同文件 :1847-1855;agent-pack 输出却要求 cognition/types.pyfor-agents/topics/finbayes-m0-implementation/agent-pack.yaml:99-102
    【Inference】Round 2 已看到 contract_v1_1_m0.py vs cognition/types.py,但 Step 8 后 contract test 又引入 finbayes.cognition.v11 作为第三个 surface。C-1 起手 PR 若不建 finbayes/cognition/v11.py 或 re-export,schema 写对也会 import fail。

  3. 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-1056MCABucketM0 七轴字段均必填:同文件 :376-385
    【Inference】C-1 若把模板直接当 fixture 校验 MCABucketM0,会缺七轴字段。文档说“实施时补齐”,但这一步必须写进 C-1 task packet,不然“照写”仍会失败。

  4. 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。

仍漏盲点(这次特意找)

  1. “安全 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 兼容性”问题审一次。

  2. C-1 的 Python module contract 没有单点命名。
    【Evidence】types.pycontract_v1_1_m0.pyfinbayes.cognition.v11 三套名字同时存在:m0-walking-skeleton.md:202:249:1849,agent-pack 只承诺 cognition/types.pyagent-pack.yaml:99-102
    【Inference】前两轮看到了路径漂移,但没有把“contract test import path 必须能跑”上升成 C-1 packet 的必填项。

  3. fixture 真实样本的“字段完整性”没有和 MCABucketM0 绑定。
    【Evidence】模板只给 bucket_label,模型要求七轴 + bucket_label:m0-walking-skeleton.md:1011-1056:376-385
    【Inference】之前 review 关注 fixture 是否 crypto-only、是否在治理库落盘;没专门检查模板本身能否被当前 Pydantic 模型 validate。

  4. “知识库校验通过”不能证明 eval 表达式可执行。
    【Evidence】agent-pack acceptance 只有 npm run verify:kbnpm run derive:check.archon/workflows/milestone-M0.yaml 存在性:for-agents/topics/finbayes-m0-implementation/agent-pack.yaml:111-118
    【Inference】当前仓内校验不会执行 pytest_check 表达式,也不会发现 str allowlist 缺口。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-368m0-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 条)

  1. 在 C-1 task packet 第一段锁 scope。
    【Inference】明确只做 cognition/types.py schema surface、finbayes.cognition.v11 re-export/import smoke、test_pydantic_schema_stability.py、5 条 sample fixture 最小落盘;不做 SQLite DDL、provider shim、完整 eval runner、integration test。

  2. 锁 Python module surface。
    【Inference】建议要求工程仓落 src/finbayes/cognition/types.py 为事实实现,另建 src/finbayes/cognition/v11.pytypes.py re-export §3.5 类,以满足 §14.5 import;不要让 contract_v1_1_m0.py 成为第三份实现。

  3. 把 Step 8 新回归列为 C-1 第一个测试修复。
    【Inference】safe_globals allowlist 加 str,或把 credential 断言改成结构化字段扫描。先跑 tests/m0/sample_inputs.yaml runner smoke,避免安全修复变成首轮红灯。

  4. 把 5 条 fixture 从模板补成可 validate 文件。
    【Inference】每条 mca_bucket 展开七轴字段;credential / execution rejection 样例不要实例化 Task;用固定 task_id 保持 CI 可重放。

  5. 给 C-1 agent 最小读取序列。
    【Inference】按 agent-pack.yamlcognition-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。