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

217 lines
13 KiB
Markdown
Raw Permalink 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 轮工作计划:端到端闭环 APS 排产内核
更新日期:2026-08-02
## 1. 本轮目标
本轮交付 `Closed-loop Scheduling Kernel v1`,把当前割裂的“商务订单、MRP、自制建议、柔性排产、发布和 MES 下发”收敛为一条可验证、失败关闭的业务链:
```text
商务订单
→ 全局时间分段净需求
→ MAKE / BUY / SUBCONTRACT
→ 制造需求与供应事件
→ 工艺/资源/日历/负荷准入
→ 求解
→ 独立校验
→ 原子物化 DRAFT 版本
→ P2 发布
→ P3 MES 下发
```
本轮不以“让页面出现若干生产订单”为成功,而以数据不伪造、硬约束不绕过、求解结果和落盘工单一致、阻断可解释为成功。
## 2. 背景和当前状态
### 当前已经完成
- 锐扬 MOM 数据已能导入订单、物料、BOM、模板工艺和设备。
- `MOM--00280` 可稳定分解为 106 项 MAKE、124 项 BUY、0 项委外。
- MRP 已避免把缺工艺的半成品错误转为采购。
- 本地已有 RULE、PoolEngine、CP-SAT、GA、NSGA-II、局部修复、Monte Carlo 和外部 Skill 框架。
- Harness、确认卡、Checkpoint、审计和 MES 幂等/补偿基础已存在。
### 当前缺口
- `run_flex_schedule` 先排产、后 MRP,业务顺序相反,且 MRP 异常被静默吞掉。
- 106 项 MAKE 只是建议,没有进入规范化制造需求和生产订单池。
- 当前真实数据中 39 项缺工艺,67 项只有模板工艺;67 项均缺 `ASM` 能力资源,真实完整可排需求为 0。
- `PoolEngine` 在第五道工序失败时保留前四道孤儿工单,版本计数和生产订单投影不一致。
- 柔性 DRAFT 版本缺少等价的 P2 发布门禁,存在不完整工单进入 MES P3 下发的风险。
- MRP 库存净算按销售订单分组,不足以证明跨全部订单只分配一次库存。
- CP-SAT 的精确 operation slots 最终由 RuleEngine 再占槽,求解解与落盘工单不保证逐槽一致。
- `SchedulingProblem 1.1` 和外部 Skill 缺少 BOM、库存/供应、日历、维保、班组、模具、层级负荷及独立 Validator。
- UI 把“MRP 分解完成、自制建议、实际排产完成”混在一起,缺少制造准入和发布阶段。
### 本轮为什么现在做
这是用户明确指出的产品主线缺口,也是比发布证据、审计统计等局部 Partial 更高的业务真实性风险。若不先修正,继续扩展算法、RAG 或界面只会把错误链路包装得更完整。
### Workspace preflight
- 项目:当前仓库根目录(`<repo-root>`)
- Git:是;目标分支 `main`;HEAD `3a73fdd76652ab99d9faa40096c81f31c5f635c3`
- 当前工作区:91 个已修改项、197 个未跟踪项,共 289 项变更;这些是用户指定的权威基线,必须保护。
- 用户限制:不提交、不推送、不合并、不发布。
- 执行适配:不从旧 HEAD 创建缺失现有成果的“干净假基线”;主工作区作为受保护集成区,内部 agent 使用 forked workspace 和互斥写范围,主 agent 逐 diff 接收。
- 运行态:`8003/api/health` 与 `5173` 最近验证均为 HTTP 200。
- 业务日期:固定为 2026-08-02,不使用主机跨午夜日期作为业务事实。
### 方向分析摘要
- 真实工厂主路径走 `PoolEngine`,不是统一 CP/Skill 问题模型。
- 标准轨、柔性轨和外部 Skill 三条链的输入、约束和物化方式不一致。
- 第一优先级不是“补一个 ASM 设备”,而是建立唯一的 `prepare → solve → validate → materialize → publish → dispatch` 链。
## 3. 本轮工作方向
```text
现有订单/BOM/库存/工艺/设备数据
→ SchedulingProblemV2 + manufacturingDemands + supplyEvents
→ 准入与独立 Validator
→ PoolEngine/CP 基线求解与原子物化
→ 柔性 P2 发布 + MES fail-closed
→ 阶段化 UI 与真实数据验证
→ 黄金测试、浏览器证据和文档收口
```
## 4. 已确认决策
### 任务重量
- 档位:重型
- 规模依据:跨 MRP、求解器、DTO、Validator、工作流/API、MES、前端、真实数据和文档;核心函数 GitNexus 风险达到 CRITICAL。
- 选择原因:这是多模块业务闭环和安全门禁改造,不能拆成互不校验的局部补丁。
### P0 / P1 决策
1. 本轮范围采用“制造准入 → 原子排产 → P2 发布 → MES fail-closed”。
2. 数据策略采用“证据优先、可解释候选、默认失败关闭”;模板/RAG 推断不得冒充确认主数据。
3. 算法策略先统一 `SchedulingProblemV2` 与 Validator,再让 RULE/Pool/CP/外部 Skill 使用同一契约。
4. 前端明确区分订单、MRP、制造准入、排产草案、发布、生产订单和 MES 阶段。
5. 当前工作区是权威基线;本轮不提交、不推送、不合并、不发布。
### 默认假设
- `MOM--00280` 是严格阻断用例:当前数据必须报告 39 项缺路线、67 项模板/缺 ASM 能力,不得伪排。
- 康尼或隔离 fixture 作为正向可排用例,但测试补齐数据不得写回现场世界。
- 模板工艺可以用于预览/候选分析,但正式发布前必须有确认状态和证据。
- 外部 Skill 返回结果一律先过同一 Validator。
### 未决但不阻塞
- 真实工厂最终 ASM 工作中心、班组和日历映射仍需后续现场数据确认。
- 真实采购/委外预计到货、供应商日历和成本参数待外部系统接入;本轮建立事件契约和失败关闭语义。
## 5. 范围
### In scope
- `manufacturingDemands`、Requirement/SupplyEvent、父子 pegging 与数量守恒。
- 跨订单全局库存净算和时间分段供应可用性。
- 工艺、设备能力、班组、模具、日历、维保和上游供应准入。
- `SchedulingProblemV2`、`SchedulingSolutionV2`、`ValidationReport`。
- PoolEngine 订单级原子写入和孤儿工单清理/防止。
- 父件不得早于 MAKE 子件、BUY 到货或委外回厂时间开工。
- CP/外部 Skill 结果与落盘活动 identity/time/resource 一致性验证边界。
- 柔性版本 P2 发布门禁。
- MES 仅允许完整、已发布、证据一致的版本下发。
- API/前端阶段状态、阻断原因、负荷/齐套/未排需求展示。
- MOM 负向与康尼/隔离 fixture 正向真实运行验证。
- 黄金测试、Node/Web build、浏览器验收、文档和完成矩阵回写。
### Out of scope
- 伪造真实 ASM、班组、模具、供应商或到货承诺。
- 在本轮完成所有 GA/NSGA-II/LNS/Monte Carlo 数学模型升级;本轮先统一契约和 Validator。
- 真实 MES/WMS/SAP 厂商凭据、网络白名单和现场回执。
- Authenticode、真实 WORM/HSM、干净离线机和远端 GitHub CI。
- 提交、推送、合并和发布。
## 6. 成功标准
1. `MOM--00280` 当前数据下:
- 106 MAKE、124 BUY 保持数量正确;
- 39 缺工艺、67 模板/缺 ASM 阻断可独立重算;
- 0 个不可验证生产订单、0 个新孤儿工单、0 个可下发 MES 工单。
2. 完整正向 fixture/康尼数据下:
- MAKE/BUY/SUBCONTRACT 形成统一需求与供应图;
- 跨订单库存只分配一次;
- 子件/采购/委外齐套时间约束父件;
- 产生非零完整生产订单和工单;每个工单有唯一需求、活动、路线、资源和版本引用。
3. 原子性:任一硬阻断发生时,本订单的 VL/WO/计数/资源占用不留下半成品状态。
4. Validator:重叠、越班次、错设备能力、错工艺顺序、物料未齐套、孤儿工单和版本替换均失败关闭。
5. 发布/MES:DRAFT、不完整、有硬阻断或证据漂移的柔性版本不能发布/下发;完整版本经 P2 发布后才可进入 P3。
6. 求解/物化:持久化工单的 activityId、start/end/resource 与已验证 solution 一致。
7. UI 不再把自制建议显示成生产订单或“排产完成”,能展示阶段、阻断、未排需求和修复入口。
8. focused tests、全量黄金测试、Node 测试、Web build、真实运行和浏览器验收全部通过;现场数据前后摘要不被测试污染。
9. GitNexus `detect_changes(compare main)` 与 `git diff --check` 无未解释风险。
## 7. 验证方式
- `.venv\Scripts\python.exe -X utf8 -m pytest tests/golden/test_closed_loop_scheduling.py -q`
- `.venv\Scripts\python.exe -X utf8 -m pytest tests/golden/test_flex_atomic_schedule.py tests/golden/test_flex_publish_mes_gate.py -q`
- `.venv\Scripts\python.exe -X utf8 -m pytest tests/golden -q`
- `npm run test:node`
- `npm run build --prefix apps/web`
- 隔离副本运行 MOM/康尼闭环验收,比较 world/master.db 前后摘要。
- 浏览器验证订单分解、制造准入、阻断、排产、发布和生产订单阶段。
- `git diff --check`
- GitNexus `detect_changes({scope:"compare", base_ref:"main"})`
## 8. 关键风险
| 风险 | 影响 | 控制方式 |
|---|---|---|
| 现有 289 项未提交变更 | 覆盖用户成果或难以归因 | 互斥写范围、逐文件 diff、禁止 checkout/reset/clean、前后 SHA 清单 |
| `run_flex_schedule` / 订单同步为 CRITICAL | 大范围回归 | 修改前 impact;新增独立 preparation/validator;最小接线;全量黄金测试 |
| 当前存在孤儿柔性工单 | MES 安全风险 | 首先补原子排产和 dispatch fail-closed;测试锁死 DRAFT/孤儿拒绝 |
| 真实数据缺工艺/ASM | 无法产生正式正向排程 | 负向真实验收 + 隔离补齐 fixture;绝不写回现场 |
| 全局库存净算改变采购数 | 既有测试与 UI 变化 | 守恒测试、订单 pegging、兼容投影和差异报告 |
| CP/Skill 契约迁移 | 外部实现不兼容 | 版本化 V2、保留 V1 适配层、Validator 统一拒绝非法输出 |
| 日期跨午夜 | 到货/交期测试漂移 | 业务日期固定 2026-08-02,测试时钟注入 |
## 9. 停止条件
- GitNexus 对新修改目标返回未报告的 HIGH/CRITICAL 风险。
- 需要伪造现场 ASM、班组、模具、到货或供应商事实才能继续。
- 现场 world/master.db 被测试或浏览器操作意外改写且无法证明可恢复。
- 需要提交、推送、合并、发布或外部系统凭据。
- 同一阻断连续三轮无法通过代码、测试或隔离环境解除。
## 10. 本轮完成定义
- 所有成功标准都有直接代码、测试、运行或浏览器证据。
- 多 worker 自检通过,主 agent 完成集成验证,独立审计 agent 返回 PASS;blocking findings 全部修复并复验。
- 文档回写包括 `plan.md`、完成矩阵、CHANGELOG、运行手册和本轮收口证据。
- 8003/5173 保持健康。
- 未提交、未推送、未合并、未发布;所有临时 agent 已关闭,临时文件已清理但用户成果保留。
## 11. 下一步
执行 `docs/round-65-aps-end-to-end-parallel-implementation-plan.md`;计划可行性审计通过后,按用户确认进入无提交 goal-mode 并行实施。
## 12. Pre-target-merge 停止点
本轮完成实现、验证和独立审计后,主 agent 必须先发送“合并主分支前的本轮总体报告”,包括主要结论、关键洞察、未覆盖边界和残余风险。本轮用户已明确禁止提交/合并,因此默认动作是保持未提交、未合并;除非用户随后单独给出明确授权,不创建提交、不推进 `main`、不推送或发布。
## 12. 实施与验收状态(2026-08-03)
- 已实现唯一 `prepare -> solve -> validate -> materialize` 边界,主路径为闭环 V2;显式 demo world 仅保留隔离兼容路径。
- 已完成 W1/W2/W3/W4 代码与前端集成,完整证据见 `docs/round-65-aps-end-to-end-runtime-final.json` 和 `docs/round-65-aps-end-to-end-state.md`。
- 验证:948 项后端黄金测试、60 项 Node 测试、Web build、2 项隔离 Playwright 全部通过。
- 历史验收业务日 2026-08-02 与当前日 2026-08-03 均复算 MOM:106 MAKE / 124 BUY / 0 SUBCONTRACT,新版本 0 VL / 0 WO。
- 本轮默认停在未提交/未合并状态;正式集成审计和 GitNexus `detect_changes` 作为最后收口门禁。
## 14. 执行结果(2026-08-03)
- 首轮独立审计结论为 `AUDIT: FAIL`,列出的 7 个 blocking finding 已全部完成修复与直接回归。
- V2 已覆盖设备、班组、模具与 FACTORY/WORKSHOP/LINE/WORKSTATION 层级资源;Validator 校验并发容量、日容量、维保、能力、模具兼容和寿命。
- P2/P3 evidence 已绑定完整 problem/solution/validation、活动身份、工单身份和当前资源快照;漂移失败关闭。
- WMS Saga 只接受本次确认唯一生成且绑定 confirmId/eventId 的新版本;拒绝沿用历史 DRAFT。
- sourceHash 已去除 DRAFT 建议技术 ID/时间噪声;外部 Skill 使用业务日期生成版本。
- `/api/orders` 返回持久化闭环和真实 gate;前端 6 阶段刷新后恢复,真实 Playwright 覆盖 MOM 阻断和 P2/P3/MES 正向链。
- 发现并修复旧版 `GET /api/orders` 的现场写副作用:订单投影语义幂等,MRP 预览使用深拷贝。
- 验证:黄金 979 passed、Node 60 passed、Web build passed、真实隔离 Playwright 2 passed。
- 现场 MOM 当前仍正确阻断 106 MAKE / 124 BUY:39 缺工艺、67 模板/缺能力,新版本 0 VL/WO。
- 最终独立复审 `AUDIT: PASS`;GitNexus `detect_changes(compare main)` 为共享脏基线 CRITICAL(97 文件 / 1041 符号 / 221 影响)。已进入 pre-target-merge 停止点,未获用户授权前不提交、不合并、不推送、不发布。