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

217 lines
13 KiB
Markdown
Raw Normal View History

# 第 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 停止点,未获用户授权前不提交、不合并、不推送、不发布。