# 第 1 轮工作计划(轻量合并版):证据链强关联扩展与 EvidenceItem 统一 更新日期:2026-08-01 ## 1. 本轮目标 把 `mes.dispatch`(P3)已实现的「确认令牌 + 排产版本证据 + 写前快照绑定、缺项拒绝」强校验,扩展到 `workflow.execute_confirmed` 覆盖的全部 P2/P3 动作,并统一证据链协议(证据引用 + 输入快照指纹 + 版本绑定)。本轮目标状态:矩阵 M1「证据链 v1」由 Partial 升为 Done(以黄金测试为准)。 ## 2. 背景和当前状态 - 当前已完成:`mes.dispatch` 的 `stage_dispatch`/`apply_dispatch` 已强制绑定确认令牌、`schedule-version:` 证据与写前快照(`test_mes.py` 覆盖缺项拒绝/版本替换拒绝/幂等);database 审批后端(迁移 20260731_03 + InnoDB 校验)已收口(18 passed)。 - 当前缺口:`execute_confirmed` 覆盖 32 个 P2/P3 动作,26 处 `write_audit` 大多未携带 `beforeSnapshot` 与 `evidenceRefs`;执行端不校验 staging 时的世界指纹(漂移检测缺失);版本绑定只对 mes.dispatch 生效。 - 本轮为什么现在做:完成度矩阵点名「下一步必须补…把强关联扩展到其余 P2/P3,并统一 EvidenceItem、输入快照和版本协议」,属 P0 批次验收出口。 - Workspace preflight:共享脏工作区(58 modified + ~40 untracked),无分支/无提交(沿用源会话约束);确认路径基线 36 passed;GitNexus 索引 5703 symbols。 - 方向分析:Q1 推荐选项 A,目标续跑轮授权执行。 ## 3. 本轮工作方向 ```text execute_confirmed(32 动作,26 审计缺字段,无漂移检测) -> 统一证据协议:stage 记录 beforeFingerprint + evidenceRefs + beforeSnapshot -> 执行前校验:漂移检测 + 版本证据绑定 + 前置快照存在性(fail closed) -> 全部 P2/P3 审计事件携带 beforeSnapshot + evidenceRefs -> 黄金测试(漂移/缺证据/版本替换拒绝)+ 全量回归 -> 矩阵 M1 证据链 v1 → Done ``` ## 4. 已确认决策 任务重量: - 档位:轻型(单模块域:harness/workflow/mes/测试;集成点唯一:确认执行路径)。 - 规模依据:核心改动集中在 `server/agent_core/harness.py`、`server/aps_domain/workflow.py`、`server/aps_domain/mes.py` + 新增黄金测试;风险评估 MEDIUM(execute_confirmed 5 个直接调用者,均为确认 API/测试)。 - 选择原因:源会话既定共享脏工作区无分支约束;改动耦合紧密,主 agent 实现 + 独立审计 agent 只读并行,避免共享工作区写冲突。 P0/P1 决策(按 Q1 推荐采纳): - 决策 1(P0):本轮切片 = 证据链强关联扩展到其余 P2/P3 + 统一 EvidenceItem/输入快照/版本协议(选项 A)。 - 决策 2(P1):不新建分支、不提交、不推送,继续在共享脏工作区交付(沿用源会话约束,直到用户另行授权)。 - 决策 3(P1):验证深度 = 聚焦确认路径测试 + 全量黄金回归(`python -m pytest tests/golden -q -p no:cacheprovider`)。 默认假设: - 假设 1:`stage_confirmation` 无法拿到调用方世界时(测试假 store 未注册到 scoped cache),`beforeFingerprint` 记为 None 且跳过漂移强制,保证存量测试不破坏;生产路径身份/世界已加载时强制生效。 - 假设 2:版本绑定动作集合 = 参数含 `versionId` 且证据要求 `schedule-version:` 的动作(schedule.publish / flex.reschedule / schedule.adjust.commit / flex.adjust.commit / rush.apply / mes.dispatch 等),以执行端声明为准。 - 假设 3:审计字段统一为 `beforeSnapshot`(写前 checkpoint pairId)+ `evidenceRefs`(pending 记录参数,缺省空列表)。 未决但不阻塞:MySQL 实机多主机断连/死锁故障注入(需外部环境,本轮不做)。 ## 5. 范围 In scope: - `harness.stage_confirmation`:记录 `beforeFingerprint`(世界指纹,已加载时)、`evidenceRefs`(显式或按 versionId 派生)、`beforeSnapshot`;新增 `world_fingerprint()` 工具与 `verify_pending_evidence()` 校验器(漂移/版本证据/快照存在性)。 - `workflow.execute_confirmed`:执行前统一证据校验(失败关闭 + DENIED 审计 + 无世界写入);26 处 `write_audit` 补 `beforeSnapshot`/`evidenceRefs`。 - `mes.stage_dispatch`/`apply_dispatch`:对齐统一协议(保持现有强校验,接入公共校验器/字段命名)。 - 新增 `tests/golden/test_evidence_contract.py`:漂移拒绝、缺证据拒绝、版本替换拒绝、审计字段断言、代表性 P2 动作(schedule.publish/order.upsert)绑定。 - 文档:`docs/architecture/harness.md`、`docs/product/plan-completion-matrix.md`(M1 证据链 v1)、`docs/CHANGELOG.md`。 Out of scope: - MySQL 实机/多主机/断连死锁注入;WORM 归档;审批意见/委托/转派/批量;文件→DB 存量迁移(下一轮)。 - 任何分支、提交、推送、合并、清理用户改动。 ## 6. 成功标准 - `python -m pytest -q tests/golden/test_evidence_contract.py tests/golden/test_harness_p3.py tests/golden/test_mes.py tests/golden/test_approval_database_store.py tests/golden/test_e2e_acceptance.py -p no:cacheprovider` 全部通过。 - 全量 `python -m pytest tests/golden -q -p no:cacheprovider` 通过(基线 397,预期 + 新增测试数)。 - `python -m ruff check` 改动文件干净。 - `git status` 仅新增预期文件/修改(无提交、无推送)。 ## 7. 验证方式 - 聚焦:`python -m pytest -q tests/golden/test_evidence_contract.py -p no:cacheprovider` - 回归:确认路径 36+、全量黄金套件。 - 静态:`python -m ruff check` 改动文件。 - 范围:`git diff --stat` 核对仅本轮文件。 ## 8. 关键风险 | 风险 | 影响 | 控制方式 | |---|---|---| | 漂移检测误伤存量确认流程 | 存量测试/API 回归 | beforeFingerprint 仅在 scoped store 已加载时强制;聚焦+全量回归 | | execute_confirmed MEDIUM 风险(5 直接调用者) | 确认 API 行为变化 | 校验失败关闭路径只拒绝「漂移/缺证据/版本替换」,正常路径行为不变 | | 共享脏工作区并发写冲突 | 文件互相覆盖 | 主 agent 实现;审计 agent 只读并行 | | 版本绑定动作集合判定偏差 | 该强校验覆盖不全 | 校验器以参数声明为准 + 黄金测试固定代表性动作 | ## 9. 停止条件 - 全量黄金测试出现非本轮相关回归且无法快速定位时,暂停并报告。 - 审计 agent 发现 blocking findings 且修复需要产品决策时,暂停询问用户。 - 任何需要提交/推送/合并/清理用户改动的操作,一律停下等待用户授权。 ## 10. 本轮完成定义 - 实现、测试、审计、文档全部完成;聚焦与全量验证通过。 - 审计 findings 清零或全部修复并复验。 - 矩阵与 CHANGELOG 回写完成;`git status` 无意外改动;不提交、不合并(等待用户对合并/提交的授权)。 - 收口:向用户报告主要结论、关键洞察、需要特别留意的地方;询问是否提交/合并(普通模式门)。 ## 11. 下一步 本计划为轻量合并版:主 agent 实现 + 独立审计 agent 并行只读审查 + 主 agent 集成验证 + 收口报告。目标续跑轮授权直接进入实施。