5.6 KiB
5.6 KiB
第 2 轮工作计划(轻量合并版):契约漂移门禁补全
更新日期:2026-08-01
1. 本轮目标
把三个公共排产契约(scheduling_problem.schema.json / scheduling_solution.schema.json / plan_node.schema.json)纳入 tests/golden/test_contract_sync.py 的跨层契约校验链(schema ↔ Python DTO ↔ 消费方),并增加不兼容消费者测试与文档清单门禁;矩阵 M0「跨层契约和文档同轮同步」由 Partial 升为 Done。
2. 背景和当前状态
- 当前已完成:
test_contract_sync.py已覆盖intent/ui_block/viewport_command/schedule_result四个契约的三方一致性(schema 枚举/必填 ↔ pydantic ↔ TS literal union),并有 InterfaceGate 启动握手测试;scheduling_problem/scheduling_solution的 Python 模型在server/aps_domain/scheduling_dto.py,plan_node的模型在server/agent_core/plan_runtime.py(PlanLayer/PlanStatus/PlanCreator 枚举与 schema 一致,字段集合一致)。 - 当前缺口:三个公共排产契约未进入校验链;无"不兼容消费者"回归测试;无文档清单门禁(docs/README.md 目录与契约文件的对应关系无自动化检查)。
- 本轮为什么现在做:矩阵 P0 批次点名「三层契约漂移门禁已有可运行首切片」,剩余验收标准为"增加契约生成/差异检查和文档清单门禁,漂移直接阻断合并"。
- Workspace preflight:第 1 轮(证据链 v1)已收口(425 passed / 审计 PASS);共享脏工作区、无提交。
- 方向分析:Q1 推荐选项 C(契约漂移门禁),目标续跑轮授权执行。
3. 本轮工作方向
test_contract_sync.py(4 契约覆盖)
-> 扩展校验链:scheduling_problem / scheduling_solution / plan_node(schema ↔ Python DTO ↔ 消费方)
-> 不兼容消费者测试:Schema 漂移(删字段/改枚举)→ 校验失败
-> 文档清单门禁:docs/README.md 契约目录 ↔ shared/schemas/*.json 一一对应
-> 全量黄金测试 + 矩阵 M0 行 → Done
4. 已确认决策
任务重量:
- 档位:轻型(单测试域:test_contract_sync.py + docs/README.md;集成点唯一:黄金测试)。
- 规模依据:核心改动集中在
tests/golden/test_contract_sync.py与docs/README.md;无生产代码行为变化,风险 LOW。 - 选择原因:纯门禁/测试工程,直接服务 P0 批次验收出口「契约三方一致」。
P0/P1 决策(按 Q1 推荐采纳):
- 决策 1(P0):本轮切片 = 契约漂移门禁补全(选项 C)。
- 决策 2(P1):不新建分支、不提交、不推送(沿用共享脏工作区约束)。
- 决策 3(P1):验证深度 = 聚焦 test_contract_sync + 全量黄金回归。
默认假设:
- 假设 1:
scheduling_problem/scheduling_solution的 TS 消费方 =apps/web/src/skills/SkillConsole.tsx只读展示(不做强类型消费),因此校验重点为 schema ↔ Python DTO 一致 + 网关契约端点返回可用。 - 假设 2:
plan_node消费方 =server/agent_core/plan_runtime.py(模型)与server/gateway/plan_api.py(API),TS 无独立类型,校验 schema ↔ Python 模型一致。 - 假设 3:不兼容消费者测试用「schema 漂移注入」模拟:删除/改名 schema 字段或枚举 → 断言校验函数检测到漂移。
未决但不阻塞:契约生成自动化(从 schema 生成 pydantic/TS)留待后续轮次,本轮先做差异检查门禁。
5. 范围
In scope:
tests/golden/test_contract_sync.py:新增三个契约的 schema↔Python 校验(字段集合、必填、枚举)、网关契约端点冒烟、不兼容消费者(漂移注入)测试。docs/README.md:文档清单门禁(列出全部 shared/schemas 契约与对应消费方文档);必要时补一个docs/product/contracts.md或复用现有文档。docs/product/plan-completion-matrix.md:M0 契约行 Partial → Done。docs/CHANGELOG.md:追加本轮条目。
Out of scope:
- 契约生成器(schema → pydantic/TS 自动生成);前端强类型化三个契约;任何生产代码行为变化。
- 提交/推送/合并/清理用户改动。
6. 成功标准
python -m pytest -q tests/golden/test_contract_sync.py -p no:cacheprovider全部通过(原 6 项 + 新增)。- 全量
python -m pytest tests/golden -q -p no:cacheprovider(固定 .venv 运行时)通过,≥ 425。 python -m ruff check改动文件干净。git diff --check无空白错误;git status仅本轮文件。
7. 验证方式
- 聚焦:
python -m pytest -q tests/golden/test_contract_sync.py -p no:cacheprovider - 回归:全量黄金套件。
- 静态:ruff + git diff --check。
8. 关键风险
| 风险 | 影响 | 控制方式 |
|---|---|---|
| 三个契约存在真实漂移导致新测试失败 | 需要修复模型/schema | 先核对再断言;漂移修复限定契约文件 |
| SkillConsole 只读展示被误判为消费方 | 校验范围偏差 | 明确 TS 侧为展示型消费,校验 schema↔Python 为主 |
| 文档清单门禁误伤 | 无关文档改动触发失败 | 门禁只检查契约目录 ↔ docs 映射,不做全量文档校验 |
9. 停止条件
- 全量黄金测试出现非本轮相关回归且无法快速定位时暂停。
- 任何需要提交/推送/合并/清理用户改动的操作一律停下等待授权。
10. 本轮完成定义
- 实现、测试、审计、文档全部完成;聚焦与全量验证通过;矩阵与 CHANGELOG 回写;不提交。
- 收口:向用户报告主要结论、关键洞察、需要特别留意的地方。
11. 下一步
轻量合并版:主 agent 实现 + 验证 + 收口报告。