aps-agent/docs/CHANGELOG.md

931 lines
63 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.

# 变更登记簿(CHANGELOG)
> **大管家的账本。** 每次改代码、加功能、改功能、修缺陷,同一轮必须追加一节。
> 写法见 [docs/README.md §2.2](./README.md)。旧名:`PROGRESS.md`(已迁入本文件)。
---
## 2026-07-24 — 桌面/Web 双形态与 ~/.aps(对标 Codex)
- **类型**:feat
- **背景**:Skill 只是服务端 JSON 卡片,不是 Codex 式用户目录资产;缺桌面壳与双端打包命令。
- **交付**:
- `server/aps_home.py`:`APS_MODE=desktop` → `~/.aps/{skills,sessions,data,…}`;Web 默认 `server/data`
- Skill 改为目录布局 `skills/<id>/manifest.json`(`APS_SKILLS_PATH` 单文件仍兼容测试)
- Electron 壳 `apps/desktop/`;根脚本 `npm run dev:web|dev:desktop`、`build:web|build:desktop`
- `GET /api/system/paths`;管理台展示 skills 目录
- 文档:`docs/architecture/desktop.md`
- **测试**:`test_aps_home`
## 2026-07-23 — 通用机加工排产平台(M-A…M-G 七里程碑落地)
- **类型**:feat
- **背景**:康尼数据硬编码在代码里、工时缺失被引擎默默按 1 分钟兜底、UI 无组件库、Skill 只读、RAG 无管理页且外部算法无法消费、低置信直接拒识不追问。目标:升级为面向整个机加工行业的通用排产平台。
- **交付**:
- **M-A 数据库地基**:`server/db/`(SQLAlchemy 2.0 + SQLite `master.db`,多项目隔离)+ world 双向投影(引擎零改动);康尼口径全部搬进 `server/importers/profiles/kangni.json`(代码零硬编码);演示数据 → `server/data/packs/demo.json` 数据包(日期按 baseDate 平移重放)
- **M-B 工时闭环**:`readiness.py` 齐备度检查(产品→路线→工时→资源→日历);工时来源标记(实测/推断/模板/待维护);排产后显式产出 `TIME_UNMAINTAINED`/`TIME_INFERRED` 冲突;`readiness.query` P0 / `flex.time.update` P2;主数据页新增「工时维护」矩阵视图(行内编辑→P2)
- **M-C UI 改版**:antd(ConfigProvider 暗色主题对齐 #F97316);订单/主数据/柔性面板全面 Table/Drawer/Form/Tabs/Modal 组件化,P2 确认卡统一 Modal
- **M-D Skill 管理台**:`SkillConsole.tsx` Codex 式双面板(概览/健康/契约/测试/日志页签,启停 Switch/登记表单走 P2);manifest 扩展 `version/capabilities/ragScopes`(旧配置自动升级);契约 `schemaVersion`;`/api/skills/{id}/enable|audit|history|test`、`/api/skills/contracts`
- **M-E RAG 平台**:`KnowledgePanel.tsx` 知识管理页(资产/检索调试/模板库/索引状态);`routing_templates.py` 行业工艺路线结构化模板库(与知识资产互引);`POST /api/rag/query` 供外部 Skill 消费(ragScopes 鉴权);Problem 可注入 `meta.knowledgeRefs`;索引状态/重建 API
- **M-F 对话智能**:`dialog.py` 多轮澄清槽位机(低置信→候选卡→序号/关键词回填,两轮上限)+ 引导式排产向导 `schedule.wizard`(缺路线推荐模板/缺工时追问/缺日历给默认,写入全走 P2)
- **M-G 收尾**:`docs/architecture/database.md`、`dialog.md` 新增;`rag.md`/`skills.md`/`harness.md`/`modules.md` 同步;端到端验收 `test_e2e_acceptance`(入库→工时维护→向导排产→外部 skill 试排→知识问答)
- **测试**:`test_db_projection`、`test_excel_importer`、`test_readiness`、`test_dialog_clarify`、`test_schedule_wizard`、`test_routing_templates`、`test_skill_console`、`test_e2e_acceptance`;全量 golden 226 通过;前端 `tsc --noEmit` 零错误 + vite build 通过
## 2026-07-23 — RAG 知识库 + 外部算法排产 Skill
- **类型**:feat
- **背景**:知识库仅 bigram 吐原文、无文档导入;排产引擎不可插拔外部算法。
- **交付**:
- RAG:`ingest` 切块入库(P2)、`EmbeddingProvider` 混合嵌入、`hybrid_search`、`chat_text` 生成式问答带出处
- Skill:中性 `SchedulingProblem/Solution` DTO、`ExternalEngine`、`SkillRegistry`、`algo.stub`、口令与 harness 权力登记
- API:`/api/knowledge/import*`、`/api/skills*`;设置页「算法 Skill」列表+健康检查
- 文档:`docs/architecture/rag.md`、`skills.md`;harness/modules 同步
- **测试**:`test_knowledge_ingest`、`test_embedding_fallback`、`test_external_engine`
## 2026-07-23 — 排产方案下载改为 Excel 工作计划表
- **类型**:feat
- **背景**:用户要求下载应是完整 Excel 工作计划表,而非 Markdown。
- **交付**:
- `build_plan_report` 产出 xlsx(工作计划 / 方案概览 / 冲突 三表)
- 聊天报告块与柔性排产结果块:「下载 Excel 工作计划表」
- `GET /api/reports/files/{id}` + `GET /api/reports/plan?format=xlsx`
- **测试**:`test_outsource_qa_and_plan_report` 校验 xlsx 魔数与 downloadUrl
## 2026-07-23 — 委外追问可答 + 排产方案报告可下载
- **类型**:fix / feat
- **背景**:排产后问「这个订单有委外订单吗」低置信拒识;日报只覆盖固定轨,柔性排产方案无法下载。
- **交付**:
- `master.query` entity=`mrp`:委外/采购/分解建议问答,支持「这个订单」指代
- `report.generate` type=`plan`:柔性排产方案报告(概览+交期+工序明细表),聊天块「下载 .md」
- 口令:生成排产方案报告 / 下载排产 / 导出排产方案;快捷指令同步
- **测试**:`test_outsource_qa_and_plan_report`
## 2026-07-23 — 「把这个订单排产」指代修复
- **类型**:fix
- **背景**:刚查到订单后说「给我把这个订单进行计划排产」走 LLM 低置信拒识,未走排产。
- **交付**:
- 快路识别「这个/该订单…排产」「计划排产」「给订单 xxx 排产」→ `flex.schedule`(有 flex 单时)
- `session_focus`:`master.query` 记住刚查的订单;`orderRef=last` 解析为 `orderIds`
- 无焦点且多单时明确提示先查单,不瞎排全池
- **测试**:`test_schedule_this_order_deixis`
## 2026-07-23 — 对话检索订单/主数据 + 机加工工艺知识库
- **类型**:feat
- **背景**:自然语言无法检索现场订单/主数据;知识库缺机械加工工艺路线生成模式。
- **交付**:
- `master.query` P0:查订单/物料/工序/BOM/工艺路线/概览/柔性资源
- `server/knowledge/machining_patterns.py`:车铣钻磨钣金焊接装配热处理等工艺路线生成模式 + 城轨机构装配模板
- 「知识清单」列出全部资产;口令「机加工工艺怎么生成」「车削工艺模式」等
- **测试**:`tests/golden/test_master_query_kb.py`
## 2026-07-23 — 现场 Excel 同步写入主数据页/订单池(清演示)
- **类型**:fix / feat
- **背景**:此前只写 `flex*`,主数据页与订单池仍读固定轨演示表,界面像「垃圾数据」。
- **交付**:
- `load_site_into_world(clear_all=True)` 清空固定轨+柔性轨演示,写入工厂/产线/工位/工序/物料/BOM/路线/`salesOrders` + flex*
- 默认只导入 `订单102285668_完整生产路线.xlsx` 主单
- `ensure_flex_seed` 在现场清空后不再回填 HV/PDU 假数据
- 柔性工作台下拉改为读现场成品/设备,去掉 PDU/HV/PRESS 硬编码
- **验证**:`/api/orders`=102285668;`/api/master` 22 物料/10 工序;`test_kangni_intake` 3 passed
## 2026-07-23 — 康尼现场完整生产路线导入(替换演示 flex*)
- **类型**:feat(现场数据接入 / IND-03 验收数据轨)
- **背景**:引擎与文档口径对齐柔性能力池,但默认仍是 HV-HARNESS/PDU 演示假数据;用户要求用现场真实 Excel 把康尼排产流程跑通。
- **交付**:
- `server/aps_domain/kangni_intake.py`:解析「完整生产路线」+ 同源订单/工艺/BOM;缺口工时/工位显式推断并留痕
- `scripts/load_kangni.py`:清空演示 flex* → 写入现场 → PoolEngine 排产
- `flex.site.load` P2(口令/确认卡)+ `POST /api/flex/site/load`
- 验证:订单 102285668 → 10 工序 VL/WO;同源 102289293 可并排
- **已知缺口**:源表标准工时/设备/模具均为「待维护」→ 部装45′/装配30′ + 4 台共享工位(见 `flexParams.siteInferences`)
- **测试**:`tests/golden/test_kangni_intake.py`
- **文档**:`demand-data-intake.md` 附导入口径;`demand-kangni-wuhu.md` §8.1 偏离速查
## 2026-07-23 — IND-02 SOP→约束规则包
- **类型**:feat(IND-02 / C13 首切片)
- **背景**:知识库可存 SOP,但不能编译进约束剖面;计划员仍需手工对齐换型/齐套口径。
- **交付**:
- `sop.compile` P0 / `sop.apply` P2;`GET /api/sop/*` + `POST /api/sop/stage`
- 换线 SOP→启用 C10 + 跨族默认 60 分 + 16:00 宵禁;齐套 SOP→C6;插单 SOP→流程提示
- 约束 `C13_sop`;世界 `rulePacks` / `changeoverPolicy`;宵禁冲突 `SOP_CHANGEOVER_CURFEW`
- 设置→约束配置「编译并应用」;口令「编译换线SOP」「应用换线SOP」
- **测试**:`tests/golden/test_sop_rules.py`
- **顺带**:OR-07 文档补齐已落地的 `mrp.release` 下达
## 2026-07-23 — SC-03 HYBRID 管线(RULE→CP)
- **类型**:feat(SC-03 HYBRID 切片)
- **背景**:CP 已可独立求解,但缺 RULE 热启动改良管线;口令「混合/HYBRID」仍走 RULE 代跑。
- **交付**:
- `HybridEngine`:策略序收集 → RULE 选线 hint → CP-SAT `AddHint` 改良 → 班次占槽
- `solverMeta.pipeline=RULE→CP-SAT→shift-slot`、`warmStart=RULE`
- 缺 ortools 时 `DEGRADED_RULE` 诚实降级(仍标 HYBRID)
- 口令「混合引擎试排」「HYBRID试排」;排产参数可选 HYBRID
- **测试**:`test_hybrid_*` in `test_cp_engine.py` / `test_rule_engine.py`
- **验收**:HYBRID 延期 ≤ RULE;warmStart 留痕
## 2026-07-23 — SC-03 CP-SAT 真求解首切片
- **类型**:feat(SC-03 首切片)
- **背景**:`engineType=CP` 长期由 RULE 静默代跑,无法展示求解状态/gap,也不满足「不得无痕退回 RULE」。
- **交付**:
- `CpSatEngine`(OR-Tools):产线分配 + 同线 NoOverlap + 加权延期;工序班次占槽物化
- `ScheduleResult.solveStatus|solveTimeSec|optimalityGap`;版本 `solverMeta`
- 排产参数:默认引擎 / CP 时限;口令「用CP试排」「约束规划试排」
- GA/HYBRID 仍 RULE 代跑并明确注释;缺 ortools → `ENGINE_UNAVAILABLE`
- **依赖**:`ortools>=9.10`
- **测试**:`tests/golden/test_cp_engine.py`
- **验收**:CP 延期 ≤ RULE;工位无双占;engineType 与 solverMeta 诚实
## 2026-07-23 — SC-06 主控参数敏感性分析
- **类型**:feat(SC-06 首切片)
- **背景**:排产参数可改,但缺少 one-at-a-time 扰动与 Tornado 摆幅,难以判断「改哪项最敏感」。
- **交付**:
- `scenario.sensitivity` P1;`GET /api/scenario/sensitivity`;沙盒不写主干
- 因子:展望期 / VIP 权重 / 交期缓冲比 / 冻结窗口 / 产线效率
- `EngineParams.deliveryBufferRatio`、`freezeWindowHours`(显式传入才挂钩 RuleEngine)
- 设置→排产参数「敏感性分析」;口令「敏感性分析」「Tornado」
- **测试**:`tests/golden/test_sensitivity.py`
- **验收**:主干不变;摆幅降序;更紧缓冲延期不降
## 2026-07-23 — SC-08 批次/战役合并
- **类型**:feat(SC-08 首切片)
- **背景**:同产品近交期订单仍各自 PO,重复准备;缺战役合并视图。
- **做了什么**:
- 策略 `CAMPAIGN`:交期窗 7 天同品合并;插单/预测单排;PO 钉扎原单号
- `campaign.preview` P0;方案对比「战役合并」卡 + `poSaved`
- 口令「战役合并预览」「战役合并试排」
- **验证**:`test_campaign.py` + `test_m2_state` 五卡;全量 golden;`tsc`
---
## 2026-07-23 — SC-07 换型最小化策略
- **类型**:feat(SC-07 首切片)
- **背景**:MD-06 矩阵已入库,但订单序仍按交期/FIFO,跨族换型无法主动压低。
- **做了什么**:
- 策略 `CHANGEOVER_MIN`(`COST_FIRST` 同序):贪心最近邻 + 同族选线
- 方案对比增加换型卡与 `totalChangeoverMin` KPI
- 口令「换型最小化试排」;插单面板可选该策略
- **验证**:`test_changeover.py` SC-07 + `test_m2_state` 四卡;全量 golden;`tsc`
---
## 2026-07-23 — MD-06 换型矩阵主数据
- **类型**:feat(MD-06 / C10 首切片)
- **背景**:引擎仅有标量 setupTime,无产品族×产品族换型矩阵,跨型号准备时间无法配置。
- **做了什么**:
- `changeoverMatrix` + 物料 `productFamily`;`changeover.query` / `master.changeover.upsert`
- RuleEngine 同线跨族叠加首道准备;约束中心 C10 可关
- 主数据「换型」页;口令「查看换型矩阵」「设置换型 …」
- **验证**:`test_changeover.py` + 全量 golden;`tsc`
---
## 2026-07-23 — PL-06 产供方向决策
- **类型**:feat(PL-06 首切片)
- **背景**:削峰后仍超载时,缺加班/扩线/外协的结构化产供选项(此前仅靠叙事)。
- **做了什么**:
- `plan.supply`:先削峰,残留缺口按加班→扩线→外协覆盖;`verdict` + options/gaps
- `GET /api/plan/supply`;分桶视口「产供」;口令「产供决策」「加班建议」「外协建议」
- **验证**:`test_planning.py` supply + 全量 golden;`tsc`
---
## 2026-07-23 — PL-05 产能平衡 / 削峰
- **类型**:feat(PL-05 首切片)
- **背景**:排产层有 CAPACITY_BALANCE,计划层缺超载→空档的削峰视图与建议。
- **做了什么**:
- `plan.leveling`:有限分桶上先提前后延后挪动;输出建议+前后负荷对照
- `GET /api/plan/leveling`;分桶视口「削峰」;口令「削峰」「产能平衡」
- **验证**:`test_planning.py` leveling + 全量 golden;`tsc`
---
## 2026-07-23 — PL-04 库存投影
- **类型**:feat(PL-04 首切片)
- **背景**:计划层缺随时间库存曲线,断料只能在齐套/MRP 事后发现。
- **做了什么**:
- `plan.inventory`:期初+在途+成品交期/BOM 毛需求+采购到货;日/周投影;断料/安全库存告警
- `GET /api/plan/inventory`;分桶视口「库存投影」;口令「库存投影」「库存投影 CTRL-A」
- **验证**:`test_inventory.py` + 全量 golden;`tsc`
---
## 2026-07-23 — PL-03 可行性分析
- **类型**:feat(PL-03 首切片)
- **背景**:延期只能在详细排产后看见,缺计划层前置「能否按期 + 缺口在哪」。
- **做了什么**:
- `plan.feasibility`:交期排序累计需求 vs 累计粗能力;FEASIBLE/AT_RISK/INFEASIBLE/LATE + 缺口桶
- `GET /api/plan/feasibility`;分桶视口「可行性」页;口令「可行性分析」「能否按期」
- **验证**:`test_planning.py` feasibility + 全量 golden;`tsc`
---
## 2026-07-23 — PL-02 有限/无限产能粗评估
- **类型**:feat(PL-02 首切片)
- **背景**:分桶计划仅有限产能视角,缺西门子式无限产能粗评估与双模式对照。
- **做了什么**:
- `capacityMode=FINITE/INFINITE`:无限不卡能力、给所需日产 + 有限参照;`plan.rccp` 对照摘要
- `GET /api/plan/rccp`;分桶视口有限/无限切换;口令「有限产能粗评」「无限产能粗评」「粗能力对比」
- **验证**:`test_planning.py` infinite/rccp + 全量 golden;`tsc`
---
## 2026-07-23 — PL-01 时间分桶计划
- **类型**:feat(PL-01 首切片)
- **背景**:计划层缺日/周/月时段建模,中长期需求与粗能力只能看排产后负荷。
- **做了什么**:
- `plan.buckets` P0:DAY/WEEK/MONTH/HYBRID;确定订单 + 可选预测加权 vs 产线日产能×工作日
- `GET /api/plan/buckets`;视口「分桶计划」;口令「时间分桶」「分桶计划」「混合分桶」
- **验证**:`test_planning.py` + 全量 golden 133;`tsc`
---
## 2026-07-23 — OR-05 预测 / 长周期订单
- **类型**:feat(OR-05 首切片)
- **背景**:计划层缺独立预测需求台账;销售订单与预测混排会污染正式承诺。
- **做了什么**:
- `forecastOrders` + `forecast.upsert`/`delete`/`convert` P2、`forecast.query` P0;旧世界缺表自愈
- RuleEngine `includeForecast`:ACTIVE 预测垫后试排;转正 → APPROVED 销售单
- 订单面板预测视图;口令「查看预测」「新建预测」「预测纳入试排」「预测转正」
- **验证**:`test_forecast.py` + 全量 golden 128;`tsc`
---
## 2026-07-23 — AG-08 项目 / 会话服务端化
- **类型**:feat(AG-08 首切片)
- **背景**:项目/会话/消息只存浏览器 localStorage,刷新跨设备丢失,也无法与世界状态显式绑定。
- **做了什么**:
- `server/data/projects.json` + `ProjectStore`;`worldKey=default` 绑定共享世界
- `GET/PUT /api/workspace`、项目/会话/消息 API;`project.*` / `message.*` / `workspace.replace` P1
- 前端启动拉取/本地迁移;防抖同步;消息优先服务端;删项目不碰世界
- **验证**:`test_workspace.py` + 全量 golden;`tsc`
---
## 2026-07-22 — OR-04 紧急插单专用流
- **类型**:feat(OR-04 首切片)
- **背景**:急单仅能勾 `isRush` 或走柔性 `flex.rush`,缺少固定轨「先快评再采用」专用流。
- **做了什么**:
- `rush.evaluate` P1 双沙盒对比(受影响订单/延迟/冲突差分);主干零接触
- `rush.apply` P2:写 APPROVED 急单 + DRAFT 排产;写前自动建档可回滚
- 订单面板插单向导;口令「插单快评」「紧急插单 200件控制器A」「采用插单」;柔性急单改需带「柔性」前缀
- **验证**:`test_rush.py` + 全量 golden;`tsc`
---
## 2026-07-22 — OR-03 订单池 / 审核 / 变更
- **类型**:feat(OR-03 首切片)
- **背景**:销售订单无审核态,新建即进排产,缺少业务台账泳道。
- **做了什么**:
- 状态机 DRAFT→SUBMITTED→APPROVED/REJECTED;编辑已批→CHANGED;仅 APPROVED 进正式排产
- `order.submit` P1、`order.approve`/`order.reject` P2;`GET /api/orders.pool`;`includeUnapproved` 试排
- 订单面板泳道 + 提交/批准/驳回/批量批准;口令「订单池」「提交审核」「批量批准」
- **验证**:`test_order_pool.py` + 全量 golden;`tsc`
---
## 2026-07-22 — SC-04 约束注册表 + 配置中心
- **类型**:feat(SC-04 首切片)
- **背景**:冲突检测内嵌引擎,无法配置硬/软与启停;发布不区分硬约束。
- **做了什么**:
- `ConstraintDef` 目录 + `constraintProfile`;版本快照约束配置
- RuleEngine/PoolEngine 读齐套软硬与维保/产能/班组/模具/滚动窗开关
- 发布前硬约束门禁;设置 → 约束配置;口令「关闭物料齐套」「齐套改为硬约束」
- **验证**:`test_constraints.py` + 全量 golden;`tsc`
---
## 2026-07-22 — OR-02 优先级与客户等级权重配置
- **类型**:feat(OR-02 首切片)
- **背景**:策略排序只用 `priority`/`deliveryDate`,主管无法配置 VIP 相对权重;设置页无排产参数。
- **做了什么**:
- `scheduleParams.customerLevelWeights`;RuleEngine 综合/均衡以等级权重为第一键(交期优先仍 EDD)
- `params.query` P0 / `params.update` P2;`GET /api/params`、`POST /api/params/stage`
- 设置 → 排产参数滑杆;口令「查看排产参数」「提高VIP权重到10」「恢复默认排产参数」
- **验证**:`test_params.py` + 全量 golden;`tsc`
---
## 2026-07-22 — AG-07 主动引导(空态 / 冲突 / 知识未命中)
- **类型**:feat(AG-07 首切片)
- **背景**:欢迎页与空态仍是静态文案;冲突高/知识未命中缺少可点击下一步。
- **做了什么**:
- `build_guidance` + `guidance.next` P0 + `GET /api/guidance`
- 对话 `guidance` 块、欢迎页动态 starter、甘特空态;发布无版本 / 知识未命中 / 试排冲突≥3 自动附建议
- 口令「下一步建议」
- **验证**:`test_guidance.py` + 全量 golden;`tsc`
---
## 2026-07-22 — EX-06 资源利用率增强(设备热力 + 班组并发)
- **类型**:feat(EX-06)+ docs(SC-11/SC-10 对齐)
- **背景**:负荷热力只覆盖固定产线;柔性设备/班组利用率缺独立视口;SC-11 引擎早已落地但总表仍标未做。
- **做了什么**:
- `build_utilization_report` + `GET /api/analytics/utilization`:7 日设备热力、班组峰值并发/触顶
- 视口「利用率」;口令「打开资源利用率」;柔性工作台展示班组清单
- 文档:SC-11/SC-10/MD-07/EX-06 状态与实现对齐
- **验证**:`test_utilization.py` + 全量;`tsc`
---
## 2026-07-22 — OR-06 订单钉扎(柔性链)+ SC-12 文档对齐
- **类型**:feat(OR-06)+ docs(SC-12)
- **背景**:固定轨 `plan.trace` 已有;康尼需 FO→BOM/路线→虚拟产线→工单/设备钉扎;SC-12 已实现但总表仍标未做。
- **做了什么**:
- `flex_plan_trace` + `plan_trace(track=flex|auto)`;`GET /api/plan/trace?track=flex`
- 柔性工作台「钉扎」页;口令「钉扎 FO-2601」「追溯柔性订单」
- implementation-spec:OR-06 / SC-12 状态改为已落地
- **验证**:`test_pegging.py` + 全量;`tsc`
---
## 2026-07-22 — EX-07/08 方案对比表 + KPI 仪表盘
- **类型**:feat(分析增强)
- **背景**:视口仅有迷你 KPI 卡与方案卡,缺独立仪表盘与逐项 diff 表。
- **做了什么**:
- `build_kpi_dashboard` / `GET /api/analytics/kpi`:固定+柔性+MES+冲突聚合;视口「KPI」
- `build_compare_table` / `GET /api/analytics/compare`:策略/三模式逐项最优高亮与 delta;视口「对比表」
- `query.kpi` / `scenario.compare` / `flex.compare` 联动切换视口
- **验证**:`test_analytics.py` + 全量 golden;`tsc`
---
## 2026-07-22 — EX-05/09 MES 下发与报工回流(Mock)
- **类型**:feat(EX-05 + EX-09 首切片)
- **背景**:发布执行闭环缺车间侧;MD-05 SAP 桩已齐,需对称 MES 下发/报工。
- **做了什么**:
- `MockMesClient` + `mes.dispatch`(P3 确认卡,幂等外部工单)/ `mes.report`(P1 进度回流)
- 柔性版本下发后标 `DISPATCHED`;工序进度与订单整单完工联动
- API:`/api/mes/status|dispatch/*|execution|report`;工作台「MES 执行」;口令「下发MES」「模拟报工」
- **验证**:`test_mes.py` + 全量 golden;`tsc`
---
## 2026-07-22 — MD-05 SAP 集成桩(入站拉单 / 出站回写)
- **类型**:feat(MD-05 首切片)
- **背景**:康尼验收需 SAP↔APS 双向同步;本期用进程内 Mock,无真实 RFC。
- **做了什么**:
- `MockSapClient`(`server/integrations/sap_stub.py`)+ `sap_sync` 入站写柔性订单/库存、出站幂等回写
- 意图:`sap.status` P0;`sap.sync.inbound|outbound` P2 确认卡;口令「同步SAP」「回写SAP」
- API:`/api/sap/status`、`inbound|outbound` preview/stage;柔性工作台「SAP 集成」页
- **验证**:`test_sap_sync.py` + 全量 golden;`tsc`
---
## 2026-07-22 — EX-04 固定轨甘特拖拽调程
- **类型**:feat(EX-04 对称补齐)
- **背景**:柔性甘特已可拖;固定轨仍只读。
- **做了什么**:
- `schedule.adjust.preview` / `commit`:工位占槽、同 PO 工序先后、维保窗口校验;提交复制 PO/WO 为新草稿
- API:`/api/schedule/adjust/preview|stage`;固定甘特可拖拽 + P2 确认卡
- **验证**:`test_fixed_preview_and_commit` + 全量;`tsc`
---
## 2026-07-22 — EX-04 柔性甘特拖拽调程
- **类型**:feat(EX-04 首切片)
- **背景**:正式版甘特此前只读;POC 有拖拽,需产品化边拖边校验 + P2 提交。
- **做了什么**:
- `flex.adjust.preview`(P0):15 分钟吸附、设备占槽与工序先后校验;同虚拟产线后续工序联动平移
- `flex.adjust.commit`(P2):确认后生成新草稿版本,不改历史
- API:`/api/flex/adjust/preview`、`/stage`;柔性甘特可拖拽(绿/红描边)+ 确认卡
- **验证**:`test_adjust.py` + 全量 golden;`tsc`
---
## 2026-07-22 — EX-03 冲突解决工作流(建议 + 一键修复)
- **类型**:feat(EX-03 首切片)
- **背景**:冲突此前只能在排产结果里「看见」,无法按建议修复。
- **做了什么**:
- `conflict.list` / 冲突中心:最新版本未解决冲突 + 按类型的可执行建议
- `flex.conflict.resolve`:P1 安全修复(解锁模具 / L1 换机 / 恢复设备);重排类走 P2 确认卡
- API:`GET /api/flex/conflicts`、`POST /api/flex/conflicts/resolve`
- 柔性工作台「冲突」页;对话「查看冲突」「解决冲突」
- **验证**:`test_conflicts.py` + 全量 golden;`tsc`
---
## 2026-07-22 — 故障优先 L1 + EX-10 预测预警 + 实时分钟窗
- **类型**:feat(康尼 DY-01 / EX-10 / SC-12 增强)
- **背景**:故障一律全量重排过粗;产能池缺短中长期预测;滚动层缺实时分钟精度。
- **做了什么**:
- **DY-01**:`apply_equipment_fault` 先 dry-run L1,能全部换机则局部处理(他单不动);否则缩池 L4 重排;PRESS 冗余走 L1、WELD 单点走 L4
- **EX-10**:产能分析补 4h/1d/1w 负荷利用率与 ≥85%/95% 预警列表;视口产能池展示预测芯片与告警条
- **SC-12**:`window=realtime`(60m / 步长 1min);口令「实时排产」「分钟级排产」;工作台按钮
- **验证**:相关 golden + 全量;`tsc`
---
## 2026-07-22 — DY-01 真·L1 局部换机 + L2/L3/L4 升 P2 确认卡
- **类型**:feat(康尼 DY-01 收尾)
- **背景**:窗内重排此前直通执行;局部换机此前靠故障缩池整单重排,非真 L1。
- **做了什么**:
- **L1**:`flex.swap` / `local_swap_equipment` — 池内空闲备机接手,只改目标工单,他单时段与设备不变,不新建版本;口令「局部换机 PRESS-01」;工作台异常页按钮;`POST /api/flex/swap`
- **L2/L3/L4**:`flex.reschedule` 升 **P2**;对话与 `POST /api/flex/reschedule` 只出确认卡,批准后 `execute_confirmed` 执行并自动建档
- 柔性工作台分级重排走确认卡 UI
- **验证**:`test_l1_local_swap_keeps_others` / `test_reschedule_is_p2_and_preview` + golden;`tsc`
---
## 2026-07-22 — 康尼 SC-12 滚动窗 + DY-01 L2/L3 + SC-11 班组约束
- **类型**:feat(康尼剩余 P0)
- **背景**:验收剧本仍缺滚动分窗与窗内重排、班组人力未进引擎。
- **做了什么**:
- **SC-12**:`window=short/mid/long` 限制精排时域与步长(15min/60min/4h),窗外延期或截断
- **DY-01**:`flex.reschedule` L2/L3 冻结窗外工单占槽后只重排窗内订单;L4 全量
- **SC-11**:`flexTeams` 按工序并发人数约束占槽,工单挂 `teamCode`
- 柔性工作台增加滚动排产与 L2/L3/L4 按钮;对话「短窗重排」「滚动排产」
- **验证**:`test_rolling_reschedule.py` + 全量 golden;`tsc`
---
## 2026-07-22 — 康尼需求 P0 闭环:交期三区间 / 模具寿命 / 故障插单 / 柔性工作台
- **类型**:feat(康尼芜湖验收剧本落地)
- **背景**:用户要求先完善康尼相关能力;此前引擎有、产品面板与 DY/PL 缺口大。
- **做了什么**:
- **PL-08**:交期承诺补悲观区间 + `gaps` 资源缺口建议;对话块与柔性工作台询价
- **MD-07/SC-10**:排产消耗模具寿命,到限自动 LOCKED;工作台可锁定/解锁
- **DY-01**:`flex.fault` 设备故障缩池重排;`flex.rush` 紧急插单;对话口令对齐
- **SC-13**:`flex.compare` 三模式沙盒对比 + UI
- **EX-10**:柔性工作台「资源 What-if」停机/调区即时重算产能
- 右侧「柔性工作台」:排产 / 交期 / 异常 / What-if 四页签
- **验证**:`test_kangni_flex.py` + 全量 golden;前端 `tsc`
---
## 2026-07-22 — MD-04 导入管线 + 柔性主数据页 + EX-10 产能池仪表盘
- **类型**:feat(product MD 落地,不含西门子对标文档)
- **背景**:`docs/product` 中 MD-04/08/09、EX-10 仍为 🔜;用户五张 Excel 需要可校验入库,并要能看见柔性资源与产能池。
- **做了什么**:
- **MD-04**:`importers.py` + `POST /api/import/preview|commit`(P1 校验 / P2 入库);种类覆盖订单/物料/BOM/路线/设备/模具/工序/区域;写固定轨或 `flex*`
- **MD-08/09**:主数据「柔性资源」页签(设备/模具/工序池/区域只读 + 导入联动);`master.clear` 增 `flex` 范围
- **EX-10**:视口「产能池」模式 + `PoolCapacityView`(负载色标);口令 `flex.capacity` 联动切池并刷新
- 订单/主数据面板挂载 `ImportBar`;黄金测试 `test_importers.py`
- **验证**:`pytest tests/golden`;前端 `tsc`
---
## 2026-07-22 — 主数据一键清理改为真正清空
- **类型**:fix
- **背景**:资源页点「一键清理」后工厂/产线仍在——原实现是回种种子,不是清空。
- **做了什么**:`master.clear` 按页签**整表清空**(资源树 / 工艺模型 / 维保);确认卡明示「清空后列表为空」。
- **验证**:golden 断言 factories/lines/materials 清空
---
## 2026-07-22 — 订单/主数据一键清理
- **类型**:feat(面板运维)
- **背景**:订单与主数据录入后缺少板块级清空,演示/试错不便。
- **做了什么**:
- 订单面板「一键清理」→ `order.clear`:清空销售订单 + 采购/委外建议(P2)
- 主数据面板「一键清理」→ `master.clear`:按当前页签(资源/工艺模型/日历维保)回种到种子基线(订单与历史排产不碰)
- 对话口令:「清空全部订单」「清理工艺模型主数据」
- **验证**:golden 增补清理用例;`pytest` / `tsc`
---
## 2026-07-22 — 订单删除 + 自然语言新增/批量导入(订单与主数据)
- **类型**:feat(录数闭环)
- **背景**:订单面板只有取消没有删除;主数据/订单虽可表单维护,但缺少对话侧自然语言新增与批量导入。
- **做了什么**:
- `order.delete`:物理删除销售订单,同步清该单草稿采购/委外;面板「删除订单」+ 口令「删除订单 SOxxxx」
- `data.import`:口令「导入订单 / 导入物料」解析多行 CSV 或口语行,P2 确认后批量写入
- `master.material.upsert` 对话新建物料;订单 `order.upsert` 继续支持自然语言建单
- 快捷指令与欢迎语补充录数示例;`intake.py` 解析模块
- **验证**:golden 增补删除与导入用例;`pytest` / `tsc`
---
## 2026-07-22 — 工艺模型 CRUD 起步(对齐聚制云主数据分层)
- **类型**:feat(主数据外围)
- **背景**:手册要求工艺模型「物料→BOM→工序→工艺路线」全 CRUD,且排产前必须产线-产品绑定;原主数据面板只能改库存/工时,养不活排产依据。
- **做了什么**:
- `masterdata.py`:物料新建/全字段/停用;BOM 头新建 + 行增删改;工序库;工艺路线新建/步骤增删改;产线-产品绑定增删改;投影补 `operations`/`lineProducts`
- 发号器补 material/bom/operation/routing/lineProduct;Harness 登记 `master.operation.upsert` / `master.lineProduct.upsert`
- 前端主数据「工艺模型」拆页签:物料 / BOM / 工序 / 工艺路线 / 产线绑定
- 黄金测试 M6:工艺模型 CRUD 闭环
- **验证**:`pytest tests/golden`;前端 `tsc`
---
## 2026-07-22 — 对齐聚制云:计划追溯链 + 主数据/排产依据可查
- **类型**:feat(产品对齐 + 可解释性)
- **背景**:对照 `demand/聚制云…操作手册 V1.1`,当前主数据维护无分层顺序、排产结果无法沿 SO→BOM/路线→采购委外→PO/WO→负荷/库存追溯,用户感知“混乱、找不到依据”。
- **做了什么**:
- 产品文档 `docs/product/master-data-and-plan-chain.md`:手册主数据分层、计划链、与现状缺口、目标追溯模型
- 后端 `server/aps_domain/trace.py` + `GET /api/plan/trace` + 意图 `plan.trace`:一单给出主数据依据、分解、排产工单、负荷分钟、库存缺口与缺失项
- 订单面板「追溯」页 + 聊天 `plan-trace` 块;快捷口令「追溯订单依据」
- 知识库补种:主数据录入顺序 / 工艺路线配置 / 订单排产与追溯 / 库存齐套口径 / 柔性轨说明(旧库幂等补齐)
- **验证**:进程内分解+试排后追溯可见 BOM 缺口、工单、产线负荷;`pytest`/tsc 见本轮末
---
## 2026-07-22 — 外围功能补齐(只留核心算法待调):柔性可视化 / 对话建单 / MRP 下达 / 视口细节
- **类型**:feat(外围闭环,四批次)
- **背景**:核心算法(固定产线 RuleEngine、柔性 PoolEngine)已可跑;用户要求先补齐系统外围功能,只留核心算法后续慢慢调试。经全量盘点,缺口集中在四处闭环,逐一补齐(CP/GA/HYBRID 高级求解器属核心算法,不在本轮)。
### 批次 A — 柔性排产可视化闭环
- **后端** `server/aps_domain/flex.py` + `server/gateway/app.py`:新增 `flex_gantt_view` 与 `GET /api/flex/gantt`(行=设备按区域分组,条=柔性工单,含换型/移动/加工分解、瓶颈/超期/冲突标记)
- **前端**:`api/types.ts`+`client.ts` 加 `FlexGanttData`/`fetchFlexGantt`;新增 `viewport/FlexGanttView.tsx`;`ViewportPanel` 追加「柔性甘特」页签与柔性 KPI;`App.tsx` 的 `WorldData` 扩展 `flexGantt`,`refreshWorld` 并拉柔性甘特,`captureSessionResult`/`hasVisualResult` 支持纯柔性结果
- **联动**:`_run_flex` 触发后发 `viewport.mode=flex`+`world.refresh`,右侧自动切到柔性甘特并 capture 会话结果 —— 解决「柔性排产完了看不到工单」
### 批次 B — 对话/写入闭环
- **order.upsert 对话建单**:`intent.py` 加建/改单快路(客户/成品/数量/交期/等级/加急槽位抽取 + 中文日期解析)与 LLM 提示;`workflow._stage_order_upsert` 解析成品并出 P2 确认卡,缺字段友好追问;`orders.find_product_by_hint` 按名称/编码模糊解析成品
- **text UIBlock**:`ChatPanel` 补 `TextBlock` 渲染(标题+正文+要点),不再静默丢弃
### 批次 C — MRP 建议单确认下达(DRAFT→正式)
- `mrp.py`:`confirmation_for_mrp_release` / `apply_mrp_release`(DRAFT→RELEASED,可按订单/按 采购·委外 粒度)
- `harness` 注册 `mrp.release`=P2;`contracts` 加意图;`workflow` 出卡 + `execute_confirmed` 执行(写前自动建档);`intent` 加「下达」快路 + LLM 提示
- `POST /api/mrp/release` 出确认卡;`OrderPanel` 分解视图加「确认下达全部/只采购/只委外」按钮与 DRAFT/已下达状态徽标
### 批次 D — 视口细节
- 视口工具栏「时间粒度」徽标改为可点切换(天⇄小时)
- 负荷热力视图响应产线聚焦(`load_view` 行补 `lineCode`,`LoadView` 按编码过滤)
- **验证**:`pytest` 全套 51 项全绿;前端 `tsc --noEmit` 通过、`vite build` 成功;进程内实测 order.upsert(建单落库)与 MRP 分解→下达(48 采购草稿全部 RELEASED)闭环通过
---
## 2026-07-22 — 柔性排产结果可下钻:每条产线给出工单级依据 + 冲突原因
- **类型**:feat(可解释性)
- **背景**:用户反馈「排产结果很混乱,要每条结果都有数据可依据」。原 flex-schedule 块只给完工时间与准时/超期标签,看不到时间是怎么算出来的。
- **做了什么**:
- **后端** `server/aps_domain/workflow.py` 的 `_run_flex`:结果块新增两部分依据——
- 每条虚拟产线携带 `steps`(工单级明细:序/工序/设备+区/模具/换型min/移动min/加工min/起止时段/是否瓶颈)
- 顶层 `conflicts`(DELAY/缺料/无能力等,含描述与处置建议);虚拟产线按交期排序消除“混乱观感”,并补充订单号/优先级列
- **前端** `apps/web/src/chat/ChatPanel.tsx` 的 `FlexScheduleBlock`:行可点击展开,内嵌工单明细表 + 表尾说明「完工时间 = 各工序(换型+移动+加工)沿工艺顺序跨班次累加」;底部列出冲突依据清单
- **样式** `apps/web/src/styles.css`:新增 `.flex-line-row/.flex-detail/.flex-step-table/.flex-conflicts` 等
- **验证结果**(进程内核对):FO-2602 高压线束 6 道工序完整展开(来料检验→下线→压接★→装配→测试→包装,各工时/设备/模具清晰);4 项 DELAY 冲突与超期标签一一对应
- **回归**:`tests/golden`(51)全绿,`test_pool_engine`(14)全绿
---
## 2026-07-22 — 柔性演示数据重做:对齐康尼芜湖 4 产品共线场景
- **类型**:feat(数据)
- **背景**:原柔性种子只有 2 产品(线束/PDU),与 demand/ 康尼芜湖方案的「4 类共线产品 + 7 能力池」不匹配,演示不够真实。
- **做了什么**(`server/state/seed.py` 的 `_seed_flex`,忠实吸收 demand §3.2/§3.3/§6.1):
- **4 类产品**:高压线束总成 HV-HARNESS、PDU 配电单元 PDU-UNIT、充电枪总成 CHARGE-GUN、高压连接器 HV-CONN
- **10 道工序**,四类瓶颈与方案 §6.1 对齐:压接端子(线束)、激光焊接(PDU·全厂最紧)、控制盒装配ESD(充电枪)、插拔力测试(连接器)
- **22 台设备 / 4 区域**:下线机×2、压接机×4(可移动跨区)、装配台×3、激光焊接机×1、氦质谱+气密检测×2、ESD 装配台×2、测试台×4、插拔力测试机×1、来料检验×1、包装台×2
- **5 副压接模具**家族(代表 50+ 套)、**12 项物料 + 8 条 BOM**(4 成品各自关键料)、**4 条工艺路线**(含共用压接池的产品竞争)
- **10 张多品种小批量订单**(4 产品,交期/优先级错落,8 RELEASED + 2 CREATED)
- 班组扩到 5 个覆盖新工序
- **验证结果**(进程内核对):跑一版柔性排产 → 10 条虚拟产线 / 56 工单;瓶颈识别 = 压接(4台)·焊接(1台)·ESD(2台)·插拔力(1台);瓶颈产能法:限制性瓶颈=激光焊接≈88件/天、ESD≈182、插拔力≈228、压接≈1795(与 demand §6.1 的 96/192/240/960 量级一致)
- **同步更新**:`tests/golden/test_pool_engine.py` 计数断言(5单/30工单 → 10单/56工单;vlCount/onTime 值域)
- **涉及路径**:`server/state/seed.py` · `tests/golden/test_pool_engine.py`
- **验证**:全量 `pytest` **51 passed**;`scripts/flex_simulation.py` 全流程 exit 0
- **注意**:旧 world.json 会被 `ensure_flex_seed` 幂等补种为旧结构——要看新数据需**重启后端并「重置数据」**(或删除持久化 world.json)
- **文档同步**:本文件
---
## 2026-07-22 — 修复:对话气泡样式塌陷 + 柔性回复图文表格化
- **类型**:fix + feat(前端)
- **背景(缺陷)**:
1. 右侧用户气泡出现「短中文一字一行竖排」——根因是 `.bubble` 的 `word-break: break-all` 遇上 `.msg.user .msg-content` 的 `align-items:flex-end`,令气泡塌陷到"单字符最小宽度"
2. 左侧柔性排产/瓶颈产能/交期承诺回复**全是纯文字**,可读性差
- **做了什么**:
- `apps/web/src/styles.css`:修 `.bubble` → `width: fit-content; max-width: 100%; overflow-wrap: break-word; word-break: normal`(短内容抱紧、长内容按容器宽换行,不再逐字竖排);新增柔性块样式(KPI 指标格、虚拟产线表、瓶颈标签、能力池条形图、交期双卡)
- `server/contracts.py` + `apps/web/src/api/types.ts`:`UIBlock.type` 新增 `flex-schedule` / `flex-capacity` / `flex-due`
- `server/aps_domain/workflow.py`:三个柔性处理分支改为「一句话结论文案 + 结构化 UIBlock」——排产结果给 KPI 指标格 + 虚拟产线表(产品/数量/工序数/完工/交期/准时标签)+ 瓶颈标签;瓶颈产能给各能力池日产能条形图(瓶颈池橙→黄高亮);交期承诺给乐观/预计双卡
- `apps/web/src/chat/ChatPanel.tsx`:新增 `FlexScheduleBlock` / `FlexCapacityBlock` / `FlexDueBlock` 三个渲染组件;快捷指令加「跑一版柔性排产 / 瓶颈产能 / PDU 500套什么时候能交」
- **涉及路径**:`apps/web/src/styles.css` · `apps/web/src/chat/ChatPanel.tsx` · `apps/web/src/api/types.ts` · `server/contracts.py` · `server/aps_domain/workflow.py`
- **验证**:`npx tsc -b` 通过(前端零类型错误);全量 `pytest` **51 passed**;in-process 核对三类柔性块 props 结构正确
- **注意**:需**重启后端** + 前端热更新(或刷新页面)生效
- **文档同步**:本文件
---
## 2026-07-22 — 修复:柔性排产接入对话意图管线(不再降级乱答)
- **类型**:fix + feat
- **背景(缺陷)**:柔性排产此前只有 `/api/flex/*` REST 接口,**未进意图管线**。用户在对话里说「走一个全流程排产」时,既不命中固定产线 `schedule.run`(其要求"试排/重排/跑一版"动词),就降级到 LLM/知识库,把《排产逻辑》PPT 原文当答案吐出——表现为"乱回答"。
- **做了什么**:
- `server/contracts.py`:`IntentName` 新增 `flex.schedule` / `flex.capacity` / `flex.simulate_due`(并补登此前遗漏的 `order.decompose`,修掉其经对话触发时的契约校验隐患)
- `server/agent_core/intent.py`:一级规则快路新增柔性触发词——柔性/能力池/虚拟产线/多品种小批量/全流程排产,以及方向词 正排(ASC)/倒排(DESC)/瓶颈锚(BOTTLENECK)(方向词在本系统仅 PoolEngine 实现,故归柔性);交期问句(何时/多久能交 + 产品 + 数量)→ `flex.simulate_due` 并抽出 `productCode`/`quantity`;同步补 LLM 意图枚举
- `server/aps_domain/workflow.py`:新增 `flex.schedule`(回执版本/虚拟产线/瓶颈/准时率/各单完工)、`flex.capacity`(瓶颈产能法各池日产能 + 限制性瓶颈)、`flex.simulate_due`(乐观/预计完工)三个处理分支与文案;`_HELP` 增列柔性口令
- `server/state/seed.py`:新增幂等 `ensure_flex_seed()`;柔性领域服务在读写前调用,**旧 world.json(flex 层加入前落盘)自动补齐柔性主数据**,无需手动重置
- `server/agent_core/harness.py`:登记 `flex.capacity`/`flex.simulate_due` 为 P0(只读)
- **涉及路径**:`server/contracts.py` · `server/agent_core/intent.py` · `server/aps_domain/workflow.py` · `server/aps_domain/flex.py` · `server/state/seed.py` · `server/agent_core/harness.py` · `tests/golden/test_pool_engine.py`
- **验证**:新增意图路由护栏 F12(3 用例:柔性五口令+模式解析 / 瓶颈产能+交期槽位抽取 / 固定产线与知识库不被误吞);全量 `pytest` **51 passed**;in-process 跑通全部柔性口令并核对回执文案
- **注意**:需**重启后端**加载新代码;旧世界首次触发柔性口令会自动补种(无需 `重置数据`)
- **文档同步**:本文件
---
## 2026-07-22 — 柔性排产全流程操作手册 + 自然语言流程描述
- **类型**:docs
- **做了什么**:
- 新增 [`docs/product/flex-simulation-guide.md`](./product/flex-simulation-guide.md):第一部分「自然语言全流程描述」(设备虚拟化→能力池→虚拟产线→瓶颈产能→交期承诺→动态重排,用大白话讲一遍);第二部分走法 A 一键脚本;第三部分走法 B 逐接口(PowerShell `Invoke-RestMethod` 示例 + 端点速查);第四部分走法 C 换真实数据;第五部分验收清单 + 常见问题
- 在 `docs/product/README.md` 与大管家 `docs/README.md` 导航登记本手册与数据采集模板
- **涉及路径**:`docs/product/flex-simulation-guide.md` · `docs/product/README.md` · `docs/README.md` · 本文件
- **验证**:文档交叉引用自检;命令与端点签名对照 `server/gateway/app.py` / `scripts/flex_simulation.py`;未改运行代码
- **文档同步**:`product/*` · `docs/README.md` · 本文件
---
## 2026-07-22 — 柔性排产全流程模拟 + 瓶颈产能法 + 三模式差异化
- **类型**:feature + docs
- **做了什么**:
- 新增端到端模拟脚本 `scripts/flex_simulation.py`:一次跑通「主数据/产能池 → 瓶颈锚排产+虚拟产线甘特 → 瓶颈产能评估 → 正/倒/瓶颈锚三模式对比 → 交期承诺(PDU 500套) → 动态重排(紧急插单 / 设备故障)」全链路,全中文可读输出
- 新增 `capacity_analysis`(瓶颈产能法 PL-07)+ `GET /api/flex/capacity`:按能力池算日产能=池可用工时÷单件工时,标出限制性瓶颈(本演示=单机激光焊接池 88件/天,对照台账法压接池虚高 1920件/天)
- 修 `PoolEngine` 倒排(DESC)排序:改为交期最晚优先,使三模式在压力场景下真正分化(正排/瓶颈锚 114h 延迟、准时 1/5;倒排 295h、准时 0/5)
- `PoolEngine` 结果新增 `makespan`(最晚完工)与 `onTimeCount`(准时单数)
- 动态调度双案例:可移动压接机故障(池化韧性、日产能 1795→1344 仍有冗余)vs 单点瓶颈焊接机故障(无备机 → PDU 停摆,暴露 NO_CAPABILITY,提示备机/外包/议交期)
- **涉及路径**:`scripts/flex_simulation.py` · `server/engines/pool_engine.py` · `server/aps_domain/flex.py` · `server/gateway/app.py` · `tests/golden/test_pool_engine.py` · `docs/**`
- **验证**:`python -m pytest tests\golden -q` → **48 passed**(原 46 + 新 F10/F11);`python scripts\flex_simulation.py` 全流程跑通
- **文档同步**:`product/features.md`(PL-07)· `product/implementation-spec.md` · `architecture/harness.md`(`/api/flex/capacity`)· 本文件
- **遗留**:前端虚拟产线甘特 + 产能池仪表盘(EX-10);真正的滚动窗口分窗(SC-12)与局部重排(DY-01 L1/L2,当前重排为全量 L4)
---
## 2026-07-22 — 柔性排产首切片:设备能力池 + 虚拟产线(PoolEngine)
- **类型**:feature + docs
- **做了什么**:
- 新增柔性排产引擎 `server/engines/pool_engine.py`(`PoolEngine`,name=FLEX):订单→每道工序从**能力池**(拥有该工序能力的设备集合)动态取设备→组装**虚拟产线**(`flexVirtualLines`);含模具适配/换型、可移动设备移动耗时、设备级占槽、工序 precedence;支持 **ASC 正排 / DESC 倒排 / BOTTLENECK 瓶颈锚** 三模式(吸收 `排产逻辑.ppt`)
- 种子追加 `flex*` 数据(`server/state/seed.py` 的 `_seed_flex`):区域、可移动压接机×4+下线/焊接/检漏/测试等设备、高压端子模具族、产品 `HV-HARNESS`/`PDU-UNIT` 及工艺/BOM/订单/参数;与固定产线层**并行独立键**,不进 RULE 引擎与既有计数
- 新增领域服务 `server/aps_domain/flex.py`:能力池投影 `capability_pools`、`flex_overview`、`run_flex_schedule`(P1 经 `harness.guard`+审计)、`simulate_due`(交期承诺模拟雏形,深拷贝沙盒)
- 端点:`GET /api/flex/world` · `POST /api/flex/schedule` · `POST /api/flex/simulate-due`;`harness` 登记 `flex.schedule` P1
- 产出数据采集模板 `docs/product/demand-data-intake.md`(11 张表字段+示例,兼作合成种子 schema)
- 黄金测试 `tests/golden/test_pool_engine.py`(F1–F9:计数/设备无双占/工序序/压接必占适配模具/瓶颈摘要/冲突结构/移动痕/利用率值域/三模式)
- **涉及路径**:`server/engines/pool_engine.py` · `server/engines/__init__.py` · `server/aps_domain/flex.py` · `server/state/seed.py` · `server/state/store.py` · `server/agent_core/harness.py` · `server/gateway/app.py` · `tests/golden/test_pool_engine.py` · `docs/**`
- **验证**:`python -m pytest tests\golden -q` → **46 passed**(原 37 + 新 9,无回归)
- **文档同步**:`product/features.md`(§0 + MD-08/09·SC-13/14·PL-07/08)· `product/implementation-spec.md` · `product/demand-data-intake.md` · `architecture/harness.md` · `architecture/modules.md` · 本文件
- **遗留**:前端虚拟产线甘特 + 产能池仪表盘(EX-10);滚动窗口分窗(SC-12);班组人力约束进排产(SC-11);柔性层与固定产线层的统一;意图口令「柔性排产」(当前经 REST 触发)
---
## 2026-07-22 — 吸收 demand/ 真实需求进产品文档
- **类型**:docs
- **做了什么**:
- 解析 `demand/`:康尼芜湖柔性排产与产能评估方案(docx)+ 排产逻辑(ppt 正排/倒排/瓶颈混合)
- 新增 `docs/product/demand-kangni-wuhu.md`:抽象为行业无关能力,并与现有编号映射;明确非绑定客户工厂
- `features.md` 登记 MD-08/09、SC-12~14、PL-07/08、EX-10、DY-01、IND-03;差距清单按真实需求 P0 重排(柔性资源模型优先)
- 同步 `implementation-spec` 编号总表、`positioning` 需求输入声明、product/大管家索引;`.gitignore` 忽略本地提取目录
- **涉及路径**:`docs/product/demand-kangni-wuhu.md` · `docs/product/features.md` · `docs/product/implementation-spec.md` · `docs/product/positioning.md` · `docs/product/README.md` · `docs/README.md` · `docs/product/aps-benchmark-siemens.md` · `.gitignore`
- **验证**:文档交叉引用自检;未改运行代码
- **文档同步**:`product/*` · 本文件
- **遗留**:新编号落地规格卡随 M4/M5 开工补齐;柔性场景种子数据与引擎实现另开切片
---
## 2026-07-16 — 订单分解 MRP 首切片 + BOM/工艺路线可维护(对标西门子)
- **类型**:feature + docs
- **做了什么**:
- 新增 MRP 领域服务 `server/aps_domain/mrp.py`:订单按 BOM/工艺路线分解为 自制(进排产)/ **采购建议**(净需求=毛需求−库存−在途,建议下单日按采购前置期倒排)/ **委外建议**(`isExternal` 外协工艺步骤);写入 `purchaseOrders`/`outsourceOrders` DRAFT 建议表,重复分解幂等替换
- `order.decompose` 登记 P1;`GET /api/mrp` + `POST /api/mrp/decompose`;对话口令「分解订单 SOxxx / 生成采购建议 / MRP」走同一动作
- MD-02 深化:新增 `master.bom.upsert`(明细用量/关键料)与 `master.routing.upsert`(准备/单件时间/外协标记)两个 P2 动作;主数据面板选中成品后可直接编辑 BOM 与工艺步骤
- 订单面板新增「分解建议」视图与「分解此单」按钮,展示采购/委外建议(含来源订单、建议下单日、前置期)
- 黄金测试 `tests/golden/test_mrp.py`:缺料出采购建议+前置期倒排、充足物料零建议、外协往返、指定订单幂等、BOM 用量联动
- **涉及路径**:`server/aps_domain/mrp.py` · `server/aps_domain/masterdata.py` · `server/aps_domain/workflow.py` · `server/agent_core/harness.py` · `server/agent_core/intent.py` · `server/gateway/app.py` · `server/state/seed.py` · `server/state/store.py` · `apps/web/src/orders/OrderPanel.tsx` · `apps/web/src/master/MasterPanel.tsx` · `apps/web/src/api/*` · `tests/golden/test_mrp.py` · `docs/**`
- **验证**:`python -m pytest tests\golden -q` → **37 passed**;`npm run build` → 成功
- **文档同步**:`product/features.md`(OR-07)· `product/journeys.md`(旅程 A4)· `product/implementation-spec.md` · `product/aps-benchmark-siemens.md` · `architecture/harness.md` · `architecture/modules.md` · 本文件
- **遗留**:建议单确认下达(转正式采购/委外,P2/P3 对接 ERP)、跨订单库存分配、多层 BOM 级联、引擎跳过外协工序占槽为后续切片
---
## 2026-07-16 — MD-01/02/03 主数据维护模块首切片
- **类型**:feature + docs
- **做了什么**:
- 新增主数据领域服务 `server/aps_domain/masterdata.py`:资源树/物料BOM/日历维保只读投影 + `master.line.upsert`(产线编辑停启用)/ `master.material.upsert`(库存在途安全库存)/ `master.maintenance.upsert`(维保新增取消)三个 P2 写动作
- 新增 `GET /api/master` 与 `POST /api/master/stage`;页面只暂存确认卡,批准统一走 `/api/actions/confirm`,写前自动 Checkpoint + 审计链
- 引擎联动修复:`find_product_lines` / `find_workstation_for_operation` 补 ACTIVE 过滤(停用资源不进新排产);维保冲突检测忽略 CANCELLED 窗口
- 前端新增主数据面板 `MasterPanel`(资源/物料与BOM/日历与维保三页签),侧栏与右侧工具栏、命令面板均可进入
- `WorldStore` 发号器支持 maintenance 表
- 黄金测试 `tests/golden/test_master_data.py`:停用产线排除、库存调零缺料增加、维保窗口冲突往返、确认卡校验、审计链完整
- **涉及路径**:`server/aps_domain/masterdata.py` · `server/gateway/app.py` · `server/aps_domain/workflow.py` · `server/agent_core/harness.py` · `server/engines/queries.py` · `server/engines/rule_engine.py` · `server/state/store.py` · `apps/web/src/master/MasterPanel.tsx` · `apps/web/src/App.tsx` · `apps/web/src/projects/ProjectPanel.tsx` · `apps/web/src/api/*` · `tests/golden/test_master_data.py` · `docs/**`
- **验证**:`python -m pytest tests\golden -q` → **33 passed**;`npm run build` → 成功
- **文档同步**:`product/features.md` · `product/journeys.md`(旅程 A3)· `product/implementation-spec.md` · `architecture/harness.md` · `architecture/modules.md` · 本文件
- **遗留**:工位/设备编辑、BOM/工艺路线版本发布、周日历模板、Excel 导入(MD-04)为后续切片;主数据意图口令(对话入口)后续补齐
---
## 2026-07-16 — 对标西门子 Opcenter APS 完善产品功能清单
- **类型**:docs
- **做了什么**:
- 新增 `docs/product/aps-benchmark-siemens.md`:以西门子 Opcenter APS(原 Preactor)三大模块 + 8 段标准流程为标尺,逐项盘点覆盖度与差距
- `features.md` 扩充:新增「计划层 Advanced Planning」章节(PL-01~PL-06)+ 主数据/订单/排产/执行多项对标功能点(MD-05~07、OR-05~06、SC-07~11、EX-06~09、IND-01~02),差距清单按「缺口×频率」重排
- `implementation-spec.md` 编号总表同步新增 25 个功能编号
- 更新 product 索引与大管家导航
- **涉及路径**:`docs/product/aps-benchmark-siemens.md` · `docs/product/features.md` · `docs/product/implementation-spec.md` · `docs/product/README.md` · `docs/README.md`
- **验证**:文档编号一致性自检;未改运行代码
- **文档同步**:`product/*` · `docs/README.md` · 本文件
- **遗留**:新登记功能点的落地规格卡随各里程碑(M4/M5/M6)开工时补齐;计划层 AP 为最大缺口
---
## 2026-07-16 — Codex 式工作台布局与会话节点导航
- **类型**:feature + fix + docs
- **做了什么**:
- 将左侧从图标轨/项目面板改为 Codex 桌面端式工作区侧栏:快捷入口、项目列表、当前项目任务、底部设置
- 去掉顶栏重复项目/任务标题,中央区域回归沉浸式对话;无结果数据时对话区铺满主工作区
- 订单管理、检查点/版本、会话结果收敛到右侧工具入口,结果视图按当前会话快照展示
- 新增会话节点导航:对话区最右侧生成消息节点,悬停显示节点摘要,点击滚动到对应消息
- 修复上一版左侧新结构缺少样式导致原生控件裸露的问题
- 修复右侧工具展开后的大面积空白:右侧工作区改为吃满剩余空间,竖向工具栏固定贴最右侧
- **涉及路径**:`apps/web/src/App.tsx` · `apps/web/src/projects/ProjectPanel.tsx` · `apps/web/src/chat/ChatPanel.tsx` · `apps/web/src/styles.css`
- **验证**:`npm run build` → 成功;`python -m pytest tests\golden -q` → **28 passed**
- **文档同步**:本文件
- **遗留**:左侧快捷入口后续可继续绑定真实“知识库管理”页面;当前先复用设置/集成入口
---
## 2026-07-16 — 首屏引导与操作口径专业化
- **类型**:fix + docs
- **做了什么**:
- 将对话首屏从口号式说明改为“排产工作流 / 方案评估 / 版本治理 / 视图分析”的业务化引导
- 快捷指令与命令面板改为计划员工作台口径,如“多策略方案对比”“查看当前KPI”“发布当前排产版本”
- 甘特空态、时间线空态、后端帮助和无版本提示统一为专业表达
- 增加旧欢迎语本地缓存迁移,命中“左边说,右边动”时自动替换新版欢迎语,不清空其他消息
- **涉及路径**:`apps/web/src/chat/ChatPanel.tsx` · `apps/web/src/App.tsx` · `apps/web/src/viewport/GanttView.tsx` · `apps/web/src/timeline/TimelineRail.tsx` · `server/aps_domain/workflow.py` · `server/aps_domain/reports.py`
- **验证**:`npm run build` → 成功;`python -m pytest tests\golden -q` → **28 passed**
- **文档同步**:本文件
- **遗留**:项目/任务默认名称后续可随真实项目模板继续行业化
---
## 2026-07-16 — OR-01 订单管理首切片 + 审计契约修复
- **类型**:feature + fix + docs
- **做了什么**:
- 新增订单领域服务:订单只读投影、成品校验、`order.upsert/cancel/complete` P2 写入逻辑
- 新增 `GET /api/orders` 与 `POST /api/orders/stage`,订单页面只暂存确认卡,批准仍统一走 `/api/actions/confirm`
- 前端新增订单管理面板:列表、编辑表单、新建/编辑/取消/完成、内嵌确认卡与批准/驳回
- 修复审计事件时间契约:新增 `at`,保留 `ts`,治理页与旧数据兼容
- 黄金测试新增 OR-01 覆盖:新增订单进入排产、取消订单排除、确认卡摘要、审计双字段
- 同步门禁矩阵、模块登记、产品状态、业务旅程与落地规格
- **涉及路径**:`server/aps_domain/orders.py` · `server/aps_domain/workflow.py` · `server/gateway/app.py` · `server/agent_core/audit.py` · `apps/web/src/orders/OrderPanel.tsx` · `apps/web/src/App.tsx` · `apps/web/src/api/*` · `tests/golden/test_order_management.py` · `docs/**`
- **验证**:`python -m pytest tests\golden -q` → **28 passed**;`npm run build` → 成功
- **文档同步**:`product/features.md` · `product/journeys.md` · `product/implementation-spec.md` · `architecture/harness.md` · `architecture/modules.md` · 本文件
- **遗留**:OR-01 后续仍缺多明细、批量变更、附件;OR-03 订单审核状态机未做
---
## 2026-07-16 — 产品功能落地规格补全
- **类型**:docs
- **做了什么**:
- 新增 `docs/product/implementation-spec.md`,按主数据、订单、排产、执行、对话治理拆出功能落地卡
- 为每个功能点补充用户目标、最小切片、权力等级、数据对象、API/动作、UI、验收与测试要求
- 在 `features.md` 增加落地规格编号,覆盖当前可演示能力、主数据、订单、排产引擎、结果执行、对话治理
- 更新 product 索引和大管家导航,产品评审可从功能清单跳到落地规格
- **涉及路径**:`docs/product/implementation-spec.md` · `docs/product/features.md` · `docs/product/README.md` · `docs/README.md`
- **验证**:文档链接与编号自检;未改运行代码,未跑业务测试
- **文档同步**:`product/*` · `docs/README.md` · 本文件
- **遗留**:后续实现任一功能时仍需同步 `journeys.md`、`harness.md` 或 `algorithm/*` 的对应落地细节
---
## 2026-07-16 — 文档体系重组(大管家 + 分类落地)
- **类型**:docs
- **做了什么**:
- 建立 `docs/README.md` 大管家入口与活文档铁律
- 按角色拆分:`product/` · `architecture/` · `algorithm/`
- `PROGRESS.md` → `CHANGELOG.md`;`HARNESS`/`REGEN`/`FEATURES` 迁入对应分类并校正「已落地 vs 规划」口径
- 种子工厂名改为「演示工厂」(去地域硬编码,与产品通用定位一致)
- **涉及路径**:`docs/**` · `plan.md` §12.9 · `README.md` · `server/state/seed.py`
- **验证**:文档结构自检;种子仅改展示名,不影响黄金测试键结构
- **文档同步**:本文件 · product/* · architecture/* · algorithm/* · 大管家
- **遗留**:`plan.md` 蓝图中仍有大量「目标态」章节,以 `docs/algorithm/` 与 `product/features.md` 的状态列为准
---
## 2026-07-16 — 产品化整改:缺陷修复 + 设置收敛 + 通用化
- **类型**:fix + feature + docs
- **做了什么**:
- 修复右侧无数据:`/api/gov/tests?run=true` 改为 `asyncio.to_thread`;前端 `refreshWorld` 逐端点兜底 + 3s 重试
- 导航收敛:轨道仅 项目/对话/时间线/设置;门禁与重生并入设置
- 前端种子项目改「演示项目(示例数据)」;顶栏「智能排产 · 通用行业版」
- 产出功能清单(后迁入 `product/features.md`)
- **涉及路径**:`server/gateway/golden.py` · `apps/web/src/**` · `docs/`
- **验证**:后端多端点 200;`npm run build` 通过
- **遗留**:订单/主数据管理页等见 `product/features.md` 差距清单
---
## 2026-07-16 — plan.md 深水区五问补全
- **类型**:docs
- **做了什么**:plan.md 增补约束体系、主控参数、方案优选、插单重排、小样本迁移等蓝图节(**目标态**,多数未进代码)
- **涉及路径**:`plan.md`
- **验证**:章节编号连贯
- **遗留**:落地以 `algorithm/scheduling-v1.md` 为准;蓝图能力标 🔜
---
## 2026-07-16 — UI 对标 Codex 操作
- **类型**:feature
- **做了什么**:新建任务前置、Kebab 菜单、任务重命名、多行输入、快捷指令收起
- **涉及路径**:`apps/web/src/projects/**` · `apps/web/src/chat/**` · `apps/web/src/shell/**`
- **验证**:`npm run build` 通过
- **遗留**:任务状态仍前端固定「运行中」
---
## 2026-07-16 — M3 知识与偏好
- **类型**:feature
- **做了什么**:知识资产库 + bigram 检索带出处;日报/版本对比报告;偏好加权缺省策略;意图与前端 evidence/report 块
- **涉及路径**:`server/knowledge/**` · `server/aps_domain/reports.py` · `apps/web/**` · `tests/golden/test_m3_knowledge.py`
- **验证**:`pytest tests/golden -q` → **24 passed**;`npm run build`;E2E M3 PASS
- **遗留**:真向量 RAG、会话树服务端化、上下文四层管理
---
## 2026-07-16 — M2.5 Codex 级产品表面 + 文档体系初建
- **类型**:feature + docs
- **做了什么**:治理端点、GovConsole、Ctrl+K、过程文档初版
- **验证**:黄金测试全绿;`npm run build`
- **遗留**:权力矩阵在线编辑 🔜 M4
---
## 2026-07-16 — M2 前端补完(项目制 + 折叠 + 分隔条)
- **类型**:feature
- **做了什么**:项目/任务/文件、折叠轨、分隔条、时间线回滚口令
- **验证**:当时黄金测试 15/15;构建通过
- **遗留**:项目数据仍在浏览器 localStorage
---
## 2026-07-15~16 — M2 后端(成对状态 + 沙盒 + 时间线)
- **类型**:feature
- **做了什么**:Checkpoint、Explore 沙盒对比、时间线/治理 API、审计链
- **验证**:15/15
---
## 2026-07-15 — M0 + M1(Monorepo + 左说右动闭环)
- **类型**:feature
- **做了什么**:FastAPI + React 壳、规则引擎、意图两级管线、Harness、三视图
- **验证**:当时 11/11;断 LLM 可降级
---
## 更早 — M-POC
- **类型**:chore
- **做了什么**:`poc/workbench.html` 静态左说右动验证