aps-agent/docs/round-65-aps-end-to-end-par...

279 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第 65 轮多 agent 并行实施方案:端到端闭环 APS 排产内核
更新日期:2026-08-02
## 1. 并行实施总览
本轮任务重量:重型。
规模依据:同时涉及 MRP/库存净算、制造需求图、求解器原子性、DTO/Validator、工作流/API、P2/P3 门禁、MES、前端和真实数据验证;核心影响面为 CRITICAL。
确认来源:用户已明确回复“确认 Round 65 推荐方案”。
本轮使用 3 个第一波 worker、1 个第二波前端 worker和 1 个独立审计 worker。主 agent 负责 GitNexus 门禁、计划审计修复、接线集成、真实运行、浏览器验收和最终判断。
因用户明确禁止提交/推送/合并,且当前 289 项工作区变更是权威基线,本轮采用无提交适配:内部 worker 在 forked workspace 修改互斥文件,回传精确 diff/文件清单;主 agent 仅接收经过审查的改动,不创建或推进目标分支。
```text
W1:制造需求 / 供应事件 / 全局净算内核(新文件为主)
W2:原子柔性排产 + 发布/MES 安全门禁
W3:SchedulingProblemV2 + 独立 Validator + 外部 Skill 验证边界
主 agent:API/工作流接线、兼容层、数据迁移、集成验证
W4(第二波):前端阶段状态、阻断与真实浏览器流程
Audit:只读集成审计
```
## 2. 依赖图
```text
计划审计 PASS
├─ W1 制造需求与供应图
├─ W2 原子排产 / MES fail-closed
└─ W3 V2 契约 / Validator
↓
主 agent 接线:prepare → solve → validate → materialize → publish → dispatch
↓
Focused backend tests PASS
↓
W4 前端阶段状态与 API 消费
↓
MOM 负向 + 康尼/fixture 正向 + 浏览器验收
↓
全量黄金 / Node / Web build / diff / GitNexus detect_changes
↓
独立审计 → 修复 → 复验 → 收口
```
## 3. Worktree / 工作区规划
### 已确认的无提交适配
标准 round 协议通常从目标分支创建 round/worktree 并提交 worker 成果。本项目当前不能照搬:
- `main` HEAD 不包含现有 289 项权威成果;
- 用户禁止提交、推送、合并;
- 从旧 HEAD 创建干净 worktree 会得到错误基线。
因此采用:
- 主工作区 `<repo-root>`:受保护集成区。
- multi-agent forked workspace:继承当前会话上下文,worker 只写指定文件。
- 禁止任何 worker 使用 `git checkout/reset/clean/stash/commit/push/merge`。
- worker 回传修改路径、focused tests、diff 范围和残余风险。
- 主 agent 接收前运行 `git diff -- <paths>`,发现越界立即拒收。
- 现场数据 `server/data/**`、`.env`、数据库、release 产物和日志全部只读保护。
## 4. Worker 划分
### W1:制造需求与供应事件内核
目标:把商务订单、多层 BOM、库存/在途、采购/委外和 MAKE 子件转换为唯一、可守恒的制造需求图。
写入范围(互斥):
- `server/aps_domain/closed_loop_problem.py`(新)
- `server/aps_domain/supply_netting.py`(新)
- `tests/golden/test_closed_loop_scheduling.py`(新)
禁止修改:
- `mrp.py`、`flex.py`、`pool_engine.py`、`workflow.py`、`gateway/app.py`
- 现场数据和现有测试
验收:
- 跨订单共享库存只分配一次。
- MAKE/BUY/SUBCONTRACT 数量与 pegging 守恒。
- 时间分段在途/采购/委外供应事件生效。
- BOM 环、缺失路线和不可信供应显式阻断。
- 当前 MOM 数据只产生需求/阻断,不产生生产订单或工单。
### W2:原子排产与发布/MES 安全门禁
目标:修复部分工单写入并统一柔性发布/下发失败关闭。
写入范围(互斥):
- `server/engines/pool_engine.py`
- `server/aps_domain/mes.py`
- `tests/golden/test_flex_atomic_schedule.py`(新)
- `tests/golden/test_flex_publish_mes_gate.py`(新)
禁止修改:
- MRP/需求图、DTO/Validator、API、前端、现场数据
验收:
- 第 N 道硬失败时,本订单 0 VL、0 WO、0 资源/模具/计数残留。
- 每个 WO 都有唯一 VL;`woCount` 等于实际工单数。
- DRAFT、孤儿、不完整、硬阻断或证据漂移的柔性版本不能进入 MES 预览/确认/执行。
- 现有幂等、补偿和固定轨行为保持兼容。
### W3:V2 契约与独立 Validator
目标:建立所有本地/外部算法共享的完整输入输出和失败关闭验证器。
写入范围(互斥):
- `server/aps_domain/scheduling_problem_v2.py`(新)
- `server/aps_domain/scheduling_validator.py`(新)
- `tests/golden/test_scheduling_validator_v2.py`(新)
禁止修改:
- 现有 `scheduling_dto.py`、引擎、API、前端和现场数据
验收:
- V2 包含 Requirement、SupplyEvent、OperationActivity、Resource、ObjectivePolicy、ConstraintPolicy。
- Solution 包含 activity identity、时间、资源、未排需求、硬违反、assumptions 和 provenance。
- Validator 拒绝重叠、错序、越日历/维保、错能力、物料未齐套、孤儿、重复 activity、证据哈希漂移。
- 可把合法 solution 转为待物化活动,但本 worker 不直接写 world。
### 主 agent:接线与兼容层
写入范围:
- `server/aps_domain/flex.py`
- `server/aps_domain/orders.py`
- `server/aps_domain/mrp.py`(仅必要接线/全局净算兼容)
- `server/aps_domain/workflow.py`
- `server/gateway/app.py`
- `server/contracts.py`、`shared/schemas/**`(如新增 HTTP 契约)
- `apps/web/src/api/types.ts`、`apps/web/src/api/client.ts`(契约阶段)
- 迁移/初始化和集成测试
责任:
- 修改前逐符号 impact,API handler 修改前 `api_impact`。
- 收敛为唯一 `prepare → solve → validate → materialize` 事务边界。
- 建立 P2 `flex.schedule.publish`,保留固定轨兼容。
- 提供制造准入/阶段/阻断/负荷/未排需求 API。
- 不在接线中伪造 ASM、班组、模具或到货。
### W4:前端阶段化业务流程(第二波)
依赖:后端契约和 focused tests 稳定后开始。
写入范围(互斥):
- `apps/web/src/orders/OrderPanel.tsx`
- 新增 `apps/web/src/orders/*` 阶段/阻断组件
- `apps/web/e2e/closed-loop-scheduling.spec.ts`(新)
- 必要样式仅限闭环排产命名空间
禁止修改:
- 后端、通用认证、全局布局、现场数据
验收:
- UI 区分“已分解 / 准入通过或阻断 / 排产草案 / 已发布 / 已排生产 / MES 可下发”。
- MAKE 建议不得冒充生产订单。
- 显示 39 缺路线、67 模板/缺能力等聚合和逐项原因。
- 硬阻断时不展示绿色“排产完成”;提供数据维护/候选确认入口。
- Playwright 覆盖 MOM 负向与完整 fixture 正向阶段。
### Audit worker:独立集成审计
只读范围:本轮计划、全部 diff、测试输出、真实运行与浏览器证据。
验收:严格按 `AUDIT: PASS|FAIL` 输出;无 blocking finding 才可收口。
## 5. 主 agent 先行门禁
实施前必须完成:
1. `impact(run_flex_schedule)`、`impact(sync_flex_orders_to_sales)`、`impact(PoolEngine.solve)` 已有结果复核;CRITICAL 已向用户报告。
2. 对 `preview_dispatch`、`stage_dispatch`、`apply_dispatch`、发布执行函数运行 impact。
3. 若修改 `/api/flex/schedule`、MRP、发布或 MES 路由,先运行 `api_impact`。
4. 保存现场 world/master.db 和关键源文件 SHA 清单。
5. 记录当前 8003/5173 健康和浏览器基线。
## 6. 分阶段集成顺序
1. 集成 W1 新模型和测试;不接生产路径,先证明需求/供应守恒。
2. 集成 W3 Validator;用 fixtures 验证非法 solution 全部失败关闭。
3. 集成 W2 原子性与 MES 门禁;优先消除 P0 执行风险。
4. 主 agent 接线到 `run_flex_schedule` 和 P2 发布;运行后端 focused tests。
5. 接入 W4 前端;运行 Web build 与 Playwright。
6. 执行真实数据、全量回归、detect_changes 和独立审计。
## 7. Worker 回传格式
每个 worker 必须报告:
- 完成状态;
- 修改文件;
- focused 测试命令和结果;
- 验收标准逐项结果;
- `git diff -- <write scope>` 范围检查;
- 关键问题、解决方案、残余风险;
- 明确声明未提交、未推送、未合并、未触碰现场数据。
发现跨边界依赖时先 `send_input` 通知主 agent 或相关 worker,不得自行修改对方文件。
## 8. 测试与证据资产
本轮必须保留可重放资产:
- 跨订单共享库存 fixture;
- MAKE/BUY/SUBCONTRACT 多层 BOM fixture;
- 第五工序缺能力的原子性 fixture;
- 合法/恶意外部 Skill solution fixtures;
- MOM--00280 隔离负向验收脚本/断言;
- 康尼或完整隔离 fixture 正向验收;
- Playwright 闭环阶段测试。
## 9. 审计与修复
- Worker 自检后,主 agent 运行 focused + 集成 + 全量验证。
- 独立 audit worker 检查目标覆盖、集成风险、验证充分性、越界改动和文档证据。
- 仅 blocking findings 触发修复;优先回给原 worker,最多三轮同类修复。
- 修复后重跑直接测试、受影响测试和全量门禁。
## 10. 用户进度事件
需要报告:
- 计划审计通过并开始实施;
- worker 完成或出现阻断;
- P0 MES 风险修复完成;
- 制造需求/Validator 接线完成;
- 真实数据和浏览器验收完成;
- 独立审计结果与修复;
- 最终收口或外部阻断。
## 11. 清理与保护
- 不删除、移动或重置用户/未知变更。
- 不清理 `server/data/**` 现场状态,不执行 `git clean/reset/checkout`。
- 关闭完成/失效 agent,清理仅由本轮产生且已确认无用的临时文件。
- 不提交、不推送、不合并、不发布。
- 结束时复核 8003/5173、git status、world/master.db 摘要和 agent 状态。
## 12. Worker focused 验证命令
- W1:`.venv\Scripts\python.exe -X utf8 -m pytest tests/golden/test_closed_loop_scheduling.py -q`
- W2:`.venv\Scripts\python.exe -X utf8 -m pytest tests/golden/test_flex_atomic_schedule.py tests/golden/test_flex_publish_mes_gate.py -q`
- W3:`.venv\Scripts\python.exe -X utf8 -m pytest tests/golden/test_scheduling_validator_v2.py -q`
- W4:`npm run build --prefix apps/web`;`npx playwright test e2e/closed-loop-scheduling.spec.ts --project=chromium`(在 `apps/web` 下,隔离后端)
- 主 agent 接线:上述 focused 集合 + `tests/golden/test_contract_sync.py` + 受影响 MES/MRP/审批测试。
## 13. Pre-target-merge 停止点
全量验证和独立审计通过后,主 agent 必须先形成 pre-target-merge 总体报告,自问并说明:哪些结论依赖 fixture、哪些真实数据仍阻断、是否存在未覆盖的外部系统/硬件/权限风险、当前 dirty 基线是否出现无关变化。本轮默认保持未提交、未合并;没有新的用户明确授权,不执行 commit/merge/push/publish。
## 14. 执行结果(2026-08-03)
- 第一波 W1/W2/W3、第二波 W4 与首轮 Audit 已结束;Audit 返回 7 个 blocking finding。
- 审计修复按互斥边界追加 W-EVIDENCE、W-V2RES、W-PROVENANCE、W-E2E;主 agent 独立完成 WMS 精确版本、订单读幂等、API/UI 集成与全量验证。
- W-EVIDENCE:完整 V2/资源快照 evidence,TEAM/TOOLING/层级/寿命漂移失败关闭。
- W-V2RES:多资源契约、组织层级容量、班组并发与模具寿命。
- W-PROVENANCE:稳定 sourceHash/problemId 与外部 Skill 业务日期。
- W-E2E:生产 `create_app()` + 内存 world 的隔离服务,真实浏览器正负闭环 2 passed。
- 主 agent:WMS Saga 不沿用旧 DRAFT;`/api/orders` 恢复真实状态;订单 GET 不再无条件写现场 world。
- 全量门禁:黄金 979 passed、Node 60 passed、Web build passed、Playwright 2 passed。
- 所有 worker 已关闭;最终独立复审 `AUDIT: PASS`。未提交、未推送、未合并、未发布,保留 pre-target-merge 状态。