aps-agent/docs/round-87-w3-report.md

68 lines
6.3 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.

# 第87轮 W3:主数据实际参与试排
状态:工作片自检通过,交主控集成审查;未合并 main、未推送、未操作用户服务。
## 实现
- 新增 `masterdata_consumption.py`,对带排产资料上下文的输入采用明确约束消费;旧演示路径保持兼容。
- 使用工作簿 `2026-08-04 08:00` 起点、21天周期及24小时冻结。正式批准/发布版本的冻结段继承到新版本;历史版本和输入快照不回写。
- 按人员编码、技能等级、班次选择人员;多技能人员不会同时占两道工序。执行中任务未提供人员时,保守占用对应合格人员池至预计结束,版本中公开该策略,不猜具体执行人。
- 已完成工序不重复安排;执行中设备从计划起点至原表预计结束预占。缺预计结束时预占至周期尾;缺前序完成事实、未知设备及仍缺料在制任务按订单返回阻断问题。
- 工作片段遵循每个班次启停、工作日、午休、设备日期覆盖和维护,允许跨班次暂停。周期内找不到资源不会回退硬排。小数工时向上取整到分钟,避免格式化丢失时长。
- BOM损耗参与需求;多订单共用库存按本版实际成功订单分配,失败候选不占库存;在途须使用已记录日期,不能用系统当前日期加三天替代。
- `run_flex_schedule` 保持源资料 trialOnly,默认请求也进入受控试排,保留 productionReady=false;标准工时demo来源在齐备度和工单中保留。
## 真实文件验收
唯一输入:`<ROUND87_SOURCE>`。
SHA-256:`c0598c422567a35029d32504d2020780bf6b0417e0887a9749fc86584a5aa687`,验收前后相同。没有上传替代文件,没有修改日期或源表。
通过真实 `preview_file → apply_import_commit → apply_master_action → run_flex_schedule`:
| 验收 | 实际结果 |
|---|---|
| 全量主数据 | 45物料、15设备、42BOM、15工艺、26人员、5在制、1维护 |
| 订单分离 | 5正式订单,SO-006留沙盒;排产工单没有SO-006 |
| 关键数据 | 12关键料、在途420、15道demo工时来源保留 |
| 原表风险 | 5单因缺PAINT人员及部分WIP事实不足阻断,0工单;SO-004明确报告A00247未知 |
| 完成工序 | 选SO-001验收时CUT不重排,只生成后续4工序 |
| 在制占用 | SO-002的运行占用使SO-001折弯到16:00才开始 |
| 工时维护 | 普通维护入口修改折弯单件工时后,排产runMin从88.9变177.8 |
| 库存维护 | 普通维护入口库存和在途改0后0工单;补回后4工单 |
| 设备停用 | 停用A00047后新方案换到其他设备,仍4工单 |
| 导入维护 | 8月10日A00047维护时选A00048;明确反事实副本移除维护选A00047 |
| 周末维护 | 普通周模板指定六/日生成2条班次,实际开工从8月10日08:00变8月8日08:00 |
| 历史一致 | 新工时、新库存、新设备状态没有修改旧方案与旧输入快照 |
| 重复导入 | 同文件SHA再导入unchanged,主数据不重复也不覆盖维护 |
正向验证是明确的隔离用户修改场景:选择有首道已完成事实的SO-001,补1名`TEST-PAINT-ONLY`喷涂人员、补该订单相关库存、启用周末白班。原始全量表没有被这些补充值改变,每项修改记录在脚本JSON的supplements中。此结果证明修改进入计算,不代表客户已确认这些数据。
## 验证证据
- `tests/golden/test_masterdata_consumption.py`:15项,包含真实指定Excel完整验收,缺文件直接失败,不skip。
- 组合回归:87 passed(5.83秒);包含主数据一致性、锐扬输入、flex_trial、atomic、readiness、pool、rolling、closed_loop_runtime。
- 独立命令:`python scripts/round87_masterdata_e2e.py --source <ROUND87_SOURCE> --output <证据路径>`。此次JSON位于 `<TEMP>/round87-w3-master-evidence.json`,status=PASS;临时APS_HOME/数据库已移除,userServiceTouched=false。
- GitNexus修改前:solve LOW(动态调用另作人工检查);run_flex_schedule HIGH(7直接、24影响);check_order与check_readiness CRITICAL(分别1/12直接、29/38影响),已向主控告知并扩大回归。
- 本工作树重建索引:16,724节点、68,816关系、300流程。detect_changes覆盖预期排产/齐备度函数与新增helper,无范围外产品变更;生成的AGENTS/CLAUDE/技能统计已恢复。
## 自检与边界
- 仅修改分配的消费文件、新增helper、测试、脚本及本报告;W1/W2依赖仅cherry-pick已确认提交,主控仅需取W3自己的提交。
- 原文件、原main、用户服务、其他项目数据未变;没有发放生产版本或ERP/MES下发。
- 未在此片做浏览器操作,页面上传/确认/展示由主控完成汇合态验收。
- 本轮对WIP前序不明采取阻断、执行人不明保守占用人员池;仍需计划员核对喷涂人员、A00247设备和在制事实后才有完整现场输入。
- 严格排产是启发式能力池试排,非最优性证明;设备维护与人员可降低可用容量,不应承诺生产最优计划。
## 独立审查修复(2026-09-09)
W2独立审查复现两个P1问题,已逐项修复并扩大验证:
1. 同订单/同工序多条在制任务此前会被operationCode字典覆盖,造成批次量丢失。现在保留所有原记录并以`WIP_SPLIT_UNSUPPORTED`阻断该订单,设备仍保守预占,不猜批次聚合;单条RUNNING也必须明确remainingQuantity且已完成量+剩余量=订单量,否则禁止放行后序。预计结束仅作为资源预占事实,不能独自证明整道工序完成。
2. 严格输入的齐备度把库存缺口/物料缺档标为error,与实际试排阻断一致;真实维护脚本同时断言stock清零时readiness ready=0/blocked=1和实际0工单。
3. 一并修复跨午夜班次休息绑定日期:22:00至翌06:00的01:00–02:00休息明确落次日,300分钟实际工作于翌04:00结束。
新增4项行为回归;完整组合**91 passed(7.02秒)**。独立真实脚本再次PASS,证据`<TEMP>/round87-w3-master-auditfix-evidence.json`,原始文件哈希不变、临时目录移除。
修改前再次impact:order_execution_issues CRITICAL(2直接/16影响),check_order CRITICAL(1直接/31影响),calendar_intervals LOW(1直接/2影响),均向主控报告后执行。仅W3消费/测试/证据脚本及本报告发生变化。