# 第 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 - 项目:当前仓库根目录(``) - 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 停止点,未获用户授权前不提交、不合并、不推送、不发布。