aps-agent/docs/architecture/harness.md

407 lines
46 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.

# 门禁权力矩阵(Harness)
> 与 `server/agent_core/harness.py` 的 `_POWER_MAP` **一一对应**。
> 改 `_POWER_MAP` 或新增需备案的 API → **同轮**改本表,并在 [`../CHANGELOG.md`](../CHANGELOG.md) 留痕。
等级语义:P0 只读 / P1 写沙盒或草稿(直通)/ P2 写主干或破坏性(单次确认卡)/ P3 外部副作用(二次确认;未登记动作默认 P3 拒绝)。
## 权力矩阵(与 _POWER_MAP 同步)
| action | 等级 | 为什么是这个等级 | 确认卡要点 | 加入 |
| --- | --- | --- | --- | --- |
| `schedule.run` | P1 | 试排只产草稿版本 | 无需确认 | M1 |
| `schedule.publish` | P2 | 发布写主干、推进订单状态 | 版本号/订单数/冲突数;发布前自动建档 | M1 |
| `scenario.compare` | P1 | 深拷贝沙盒,主干零接触 | 无需确认 | M2 |
| `scenario.sensitivity` | P1 | 参数扰动 Tornado,沙盒不写主干 | 无需确认 | SC-06 |
| `sop.compile` | P0 | SOP→约束编译预览 | 无需确认 | IND-02 |
| `sop.apply` | P2 | 应用 SOP 规则包 | 效果摘要;写前自动建档 | IND-02 |
| `checkpoint.create` | P1 | 只新增快照 | 无需确认 | M2 |
| `checkpoint.rollback` | P2 | 整体替换主干世界 | 目标检查点;回滚前再自动建档 | M2 |
| `data.reset` | P2 | 清空重播种子 | 明示重置;重置前自动建档 | M1 |
| `knowledge.query` | P0 | 只读知识;强制出处 | 无需确认 | M3 |
| `knowledge.import` | P2 | 导入 PDF/docx/md 切块入库 | 文件/切块数;确认后写资产 | RAG |
| `skill.list` | P0 | 外部算法 skill 清单 | 无需确认 | Skill |
| `skill.health` | P0 | skill 健康检查 | 无需确认 | Skill |
| `skill.register` | P2 | 登记/更新 skill 端点 | ID/端点/轨道 | Skill |
| `skill.enable` | P2 | 启停 skill | skillId + 目标状态 | Skill |
| `guidance.next` | P0 | 主动引导下一步建议(空态/冲突/知识未命中) | 无需确认 | AG-07 |
| `params.query` | P0 | 排产参数只读 | 无需确认 | OR-02 |
| `params.update` | P2 | 客户等级/目标权重/展望期 | 变更摘要;写前自动建档 | OR-02 |
| `param.optimize` | P1 | 参数优化触发(split→回放→候选 GRAY,不写主干参数) | 无需确认 | §9.8 |
| `param.experiment.promote` | P2 | 实验转正:验证集回放 finalize GRAY→FULL,退化自动回滚 | 实验摘要/候选参数/回放 KPI;写前自动建档 | §9.8 |
| `param.experiment.rollback` | P1 | 手动回滚实验(恢复基线参数) | 无需确认 | §9.8 |
| `param.observation.record` | P1 | 线上 KPI 观测回调(对比基线,连续劣化自动回滚) | 无需确认 | §9.8 |
| `constraint.profile.query` | P0 | 约束剖面只读 | 无需确认 | SC-04 |
| `constraint.profile.save` | P2 | 约束启停/硬软 | 变更摘要;写前自动建档 | SC-04 |
| `constraint.rule.query` | P0 | 约束规则库只读(默认通用规则 + 计划员扩充规则) | 无需确认 | SC-04 |
| `constraint.rule.save` | P2 | 计划员一句话扩充规则(新增/启用/停用/删除) | 类别/范围/强度/是否接入引擎;写前自动建档 | SC-04 |
| `governance.rule.create` | P2 | 创建规则会改变自动化执行输入 | 规则标识/房间/触发器;批准后写入并自动建档 | R71.6 |
| `governance.rule.update` | P2 | 更新规则会改变自动化执行语义 | 规则标识与 before/after;批准后写入并自动建档 | R71.6 |
| `governance.rule.delete` | P2 | 删除规则会停止后续自动化执行 | 规则标识;批准后删除并自动建档 | R71.6 |
| `governance.rule.enable` | P2 | 启用规则会使其参与自动化 tick | 规则标识与目标状态;批准后写入并自动建档 | R71.6 |
| `governance.rule.disable` | P2 | 停用规则会使其退出自动化 tick | 规则标识与目标状态;批准后写入并自动建档 | R71.6 |
| `report.generate` | P1 | 产出文档并入知识库(不改排产世界) | 无需确认;对外承诺函未来升 P2 | M3 |
| `order.upsert` | P2 | 新增/编辑销售订单会改变后续排产输入 | 客户/产品/数量/交期;写入前自动建档 | M4 首切片 |
| `order.cancel` | P2 | 取消订单会从后续排产输入中排除 | 订单号/当前状态;写入前自动建档 | M4 首切片 |
| `order.complete` | P2 | 完成订单会从后续排产输入中排除 | 订单号/当前状态;写入前自动建档 | M4 首切片 |
| `order.delete` | P2 | 物理删除订单池记录 | 订单号;清草稿 MRP;写入前自动建档 | 录数 |
| `order.clear` | P2 | 一键清空全部订单与采购/委外建议 | 条数摘要;写入前自动建档 | 清理 |
| `order.submit` | P1 | 提交审核:DRAFT/REJECTED/CHANGED → SUBMITTED | 无需确认 | OR-03 |
| `order.approve` | P2 | 批准进排产池:SUBMITTED/CHANGED → APPROVED | 订单号列表;写入前自动建档 | OR-03 |
| `order.reject` | P2 | 驳回:SUBMITTED/CHANGED → REJECTED | 订单号/原因;写入前自动建档 | OR-03 |
| `rush.evaluate` | P1 | 插单影响快评:双沙盒对比,不改主干 | 无需确认 | OR-04 |
| `rush.apply` | P2 | 采用插单:LNS 局部修复(`apply_lns_local`,DRAFT+LNS_RUSH,窗口外订单冻结)或升级全量重排(`apply_rush`);`execute_confirmed` 按 impact.lns 路由 LOCAL/ESCALATE | 影响摘要+lns 摘要;写入前自动建档;audit 记 mode+escalateReasons | OR-04 |
| `forecast.query` | P0 | 预测/长周期订单只读 | 无需确认 | OR-05 |
| `forecast.upsert` | P2 | 新建/编辑预测台账(默认不进正式排产) | 产品/数量/分桶/交期;写入前自动建档 | OR-05 |
| `forecast.delete` | P2 | 删除预测台账 | 预测号;写入前自动建档 | OR-05 |
| `forecast.convert` | P2 | 预测转正为 APPROVED 销售订单 | 预测号→销售单;写入前自动建档 | OR-05 |
| `plan.buckets` | P0 | 时间分桶计划:日/周/月/混合粗能力对照 | 无需确认 | PL-01 |
| `plan.rccp` | P0 | 有限/无限产能粗评估对照(RCCP) | 无需确认 | PL-02 |
| `plan.feasibility` | P0 | 交期可行性:累计粗能力能否按期 | 无需确认 | PL-03 |
| `plan.inventory` | P0 | 库存投影:物料随时间可用量曲线 | 无需确认 | PL-04 |
| `plan.leveling` | P0 | 产能平衡/削峰:超载桶挪空档建议 | 无需确认 | PL-05 |
| `plan.supply` | P0 | 产供方向:加班/扩线/外协结构化建议 | 无需确认 | PL-06 |
| `project.create` | P1 | 新建项目与默认会话 | 无需确认 | AG-08 |
| `project.delete` | P1 | 删项目元数据(不删世界) | 无需确认 | AG-08 |
| `session.create` | P1 | 新建会话 | 无需确认 | AG-08 |
| `message.append` | P1 | 追加会话消息 | 无需确认 | AG-08 |
| `message.replace` | P1 | 整包替换会话消息 | 无需确认 | AG-08 |
| `workspace.replace` | P1 | 整包同步工作区(迁移) | 无需确认 | AG-08 |
| `data.import` | P2 | 自然语言批量导入订单/物料 | 行数摘要;写入前自动建档 | 录数 |
| `master.line.upsert` | P2 | 产线编辑/停启用改后续新排产资源池 | 产线/产能/状态变更影响面;写入前自动建档 | M4 首切片 |
| `drawing.master.apply` | P2 | 工程图纸候选写入物料、BOM 与工艺主数据 | 图纸来源、候选摘要与主数据影响;写入前自动建档 | 图纸解析 |
| `master.material.upsert` | P2 | 物料新建/全字段/停用改齐套与产品池 | 编码类型库存状态;写入前自动建档 | 工艺模型 |
| `master.maintenance.upsert` | P2 | 维保新增/取消改设备避让窗口 | 设备/窗口起止;写入前自动建档 | M4 首切片 |
| `master.bom.upsert` | P2 | BOM 头/明细增删改齐套与采购建议 | 增删改用量/关键料;写入前自动建档 | 工艺模型 |
| `master.routing.upsert` | P2 | 工艺路线/步骤增删改占槽与外协 | 步骤工时/外协;写入前自动建档 | 工艺模型 |
| `master.operation.upsert` | P2 | 工序库改路线可选步骤 | 编码/标准工时;写入前自动建档 | 工艺模型 |
| `master.lineProduct.upsert` | P2 | 产线-产品绑定改选线依据(排产前必需) | 产线×产品/优先级;写入前自动建档 | 工艺模型 |
| `master.changeover.upsert` | P2 | 换型矩阵写入(产品族切换分钟) | 从族/到族/分钟;写入前自动建档 | MD-06 |
| `master.workstation.upsert` | P2 | 工位新增/编辑/停用会改变后续排产资源池 | 工位编码/产线/状态;出卡与执行前均自动建档 | R71.3 |
| `master.equipment.upsert` | P2 | 设备新增/编辑/停用会改变后续有限产能资源池 | 设备编码/工位/状态;出卡与执行前均自动建档 | R71.3 |
| `master.bom.release` | P2 | 发布不可变 BOM 版本快照 | 产品/版本/明细行;执行前自动建档 | R71.3 |
| `master.bom.rollback` | P2 | 恢复已发布 BOM 快照并切换默认版本 | 产品/目标版本;执行前自动建档 | R71.3 |
| `master.routing.release` | P2 | 发布不可变工艺路线版本快照 | 产品/版本/步骤;执行前自动建档 | R71.3 |
| `master.routing.rollback` | P2 | 恢复已发布工艺快照并切换默认版本 | 产品/目标版本;执行前自动建档 | R71.3 |
| `master.calendar.holiday.upsert` | P2 | 节假日新增/编辑会改变后续工作日历与新排产输入 | 日期/名称;出卡与执行前均自动建档,统一由 `/api/actions/confirm` 执行 | R71.3 |
| `master.calendar.template.create` | P2 | 新建周班次模板会改变后续日历生成依据 | 产线/班次/工作日/节假日;执行前自动建档 | R71.3 |
| `master.calendar.week.copy` | P2 | 批量生成班次日历会改变后续可用产能 | 模板/日期范围/产线;执行前自动建档 | R71.3 |
| `changeover.query` | P0 | 换型矩阵只读 | 无需确认 | MD-06 |
| `campaign.preview` | P0 | 战役/批次合并预览 | 无需确认 | SC-08 |
| `master.clear` | P2 | 一键清理主数据板块(按范围清空) | scope=resource/process/calendar/flex/all;写入前自动建档 | 清理 |
| `import.commit` | P2 | Excel/CSV 校验通过行写入主干 | 文件名/种类/行数;写入前自动建档 | MD-04 |
| `order.decompose` | P1 | 订单分解只写 DRAFT 建议表(采购/委外),不碰主数据 | 无需确认(ALGO_RUN 审计留痕) | M4 首切片 |
| `mrp.release` | P2 | MRP 草稿采购/委外转正式 | 下达范围;写入前自动建档 | M4 |
| `plan.trace` | P0 | 计划追溯只读单据链 | 无需确认 | 追溯 |
| `flex.schedule` | P1 | 柔性排产(能力池+虚拟产线)只写 flex* 草稿表 | 无需确认(ALGO_RUN 审计留痕) | M5 首切片 |
| `flex.reschedule` | P2 | 分级重排 L2/L3/L4:窗外冻结 + 窗内重排,影响面大 | 等级/冻结工单/重排订单数;执行前自动建档 | DY-01 |
| `flex.swap` | P1 | L1 局部换机:池内备机接手,他单不动 | 无需确认 | DY-01 |
| `flex.capacity` | P0 | 瓶颈产能评估(能力池日产能) | 无需确认;联动视口产能池 | EX-10 |
| `flex.conflict.resolve` | P1 | EX-03 冲突安全修复(重排类另 stage P2) | 无需确认(重排走 flex.reschedule 卡) | EX-03 |
| `conflict.list` | P0 | 冲突中心只读 | 无需确认 | EX-03 |
| `flex.adjust.preview` | P0 | EX-04 甘特调程预览 | 无需确认 | EX-04 |
| `flex.adjust.commit` | P2 | EX-04 柔性甘特调程提交新草稿 | 工单/平移量/联动条数;执行前自动建档 | EX-04 |
| `schedule.adjust.preview` | P0 | EX-04 固定甘特调程预览 | 无需确认 | EX-04 |
| `schedule.adjust.commit` | P2 | EX-04 固定甘特调程提交新草稿 | 工单/平移量;执行前自动建档 | EX-04 |
| `sap.status` | P0 | MD-05 SAP 连接状态(Mock) | 无需确认 | MD-05 |
| `sap.sync.inbound` | P2 | MD-05 SAP→APS 拉单/库存 | 新单数/库存项;执行前自动建档 | MD-05 |
| `sap.sync.outbound` | P2 | MD-05 APS→SAP 开完工回写 | 条数/幂等;执行前自动建档 | MD-05 |
| `mes.status` | P0 | EX-05 MES 连接状态(Mock) | 无需确认 | EX-05 |
| `mes.dispatch` | P3 | EX-05 下发车间(外部副作用) | 版本/新下发条数;同一令牌二次确认;最终批准签发绑定审批参数摘要的一次性作用域执行凭据;执行前自动建档;最终审计绑定确认令牌、精确版本、真实前置快照和排产证据 | EX-05 |
| `mes.report` | P1 | EX-09 报工回流写工单进度;FB-03 起 S6 断连补录可经确认卡显式声明 `offlineBooking`(双端核验断连事实后本地落账 + syncStatus=PENDING_SYNC,在线路径语义不变) | 无需确认 | EX-09 |
| `readiness.query` | P0 | 数据齐备度检查(产品→路线→工时→资源→日历)只读 | 无需确认 | M-B |
| `flex.time.update` | P2 | 更新产品×工序单件工时并标记来源,改后续排产输入 | 产品/工序/分钟/来源;写入前自动建档 | M-B |
| `rag.query` | P0 | 外部 Skill 消费知识库(只读,manifest ragScopes 鉴权) | 无需确认 | M-E |
| `routing.template.apply` | P2 | 行业模板实例化为产品工艺路线(工时标「模板」) | 模板/产品/步数/知识出处;写入前自动建档 | M-E |
| `schedule.wizard` | P0 | 引导式排产向导(对话态本身只读,写入走各自 P2) | 无需确认 | M-F |
| `agent.fallback.propose` | P1 | 意图未识别(assistant.reply/unknown)时拉起 Pi 只读分析兜底:产分析草稿(沙盒语义),不写主干世界;FF-01 `fallback` 开关默认关 | 无需确认 | FB-01 |
| `agent.fallback.execute` | P2 | 智能兜底:执行已批准计划——计划锁(计划+指纹 sha256 冻结进卡、逐步比对、偏离即熔断)+ checkpoint 成对快照 + 失败自动回滚 + diff 对账报告;Pi 只编排既有已登记写意图,无新物理写通道 | 计划/指纹/runId;批准后建执行前后成对快照;偏离/失败自动回滚到前快照并显式声明 | FB-02 |
| `agent.fallback.execute.highrisk` | P3 | 智能兜底高危执行:登记在册、默认拒绝,FB-02 轮不开放白名单(任何含 P3 步骤的计划整计划拒绝出卡) | 暂不开放 | FB-02 |
| `agent.fallback.policy.update` | P2 | 白名单治理:经确认卡原子替换 `fallback-highrisk.json`(编排器再生成完整文档 + 复验 + 旧文件 .bak 备份 + 漂移比对) | 冻结文档 sha256/前后文件 sha256/ diff 声明;审批窗口内文件被改即拒绝 | FB-03 |
| `agent.fallback.ops.config.apply` | P3 | S7 受控配置变更:双审批 + 一次性 executionGrant + 原子替换 `features.json`(contentSha256/beforeSha256 编排器机器再生成,不信 Pi 申报) | grantId/双人 approvals/前后文件 sha256;grant 单次消费、过期/错配即拒绝 | FB-03 |
| `agent.token.issue` | P2 | Pi Agent 长期只读凭证签发:登记租户/设备绑定与有效期,先人工确认再写入 `agent-tokens.json` | 租户/设备/有效期摘要;P2 阶段才接通 | Pi Agent |
| `agent.token.revoke` | P2 | Pi Agent 长期只读凭证吊销:先人工确认再把登记记录置为 revoked | tokenId/绑定主体摘要;P2 阶段才接通 | Pi Agent |
| `viewport.*` | P0 | 纯视图状态 | 无需确认 | M1 |
| `query.*` | P0 | 只读查询 | 无需确认 | M1 |
## 认证握手端点(安全边界,不入 _POWER_MAP)
| 端点 | 用途 | 加入 |
| --- | --- | --- |
| `POST /api/auth/login·refresh·logout` · `GET /api/auth/me` | Web 用户会话 | Auth/Tenancy |
| `POST /api/auth/license/activate` | 桌面客户端授权码激活、设备绑定与期限校验 | Desktop License |
## 只读端点备案(P0,不入 _POWER_MAP)
| 端点 | 用途 | 加入 |
| --- | --- | --- |
| `GET /api/world/summary·gantt·load·due` | 世界视图投影 | M1 |
| `GET /api/constraints` · `GET /api/constraints/library` | 约束剖面 / 约束规则库(默认通用规则 + 计划员扩充规则,只读) | SC-04 |
| `GET /api/timeline` | 时间线 | M2 |
| `GET /api/checkpoints/{pairId}` | 检查点世界侧投影(P0,summary+固定/柔性工单+产能池;缺失 404) | 矩阵 54 |
| `GET /api/checkpoints?pairIds=&branchIds=&sessionId=` | 分支锚定批量投影(P0,缺失项上报) | 矩阵 54 |
| `POST /api/wms/events` | WMS 缺料事件上报(P1:幂等消费→库存版本→影响评估→Explore 方案卡 P2 门禁) | 矩阵 74/77 |
| `GET /api/wms/replay` | WMS 事件重放(P0) | 矩阵 74 |
| `GET /api/wms/inventory` | 库存台账/版本投影(P0 只读) | 矩阵 74 |
| `GET /api/saga` · `GET /api/saga/{id}` | Saga 列表/详情(中间态可见,P0) | 矩阵 78/119 |
| `GET /api/params/experiments` | 参数实验列表/状态(P0) | 矩阵 87 |
| `POST /api/params/optimize` · `POST /api/params/observations` | 参数优化触发 / 线上观测回调(P1) | 矩阵 87 |
| `POST /api/params/experiments/{id}/promote` · `.../rollback` | 实验转正(P2 确认卡)/ 手动回滚(P1) | 矩阵 87 |
| `POST /api/multimodal/extract` | 多模态候选抽取(P0 只读:结构化候选+置信度) | 矩阵 101 |
| `POST /api/multimodal/ingest` | 多模态摄取(低置信出 P2 确认卡,确认前不写世界) | 矩阵 101 |
| `GET /api/features` | 功能开关(P0 只读):文件化配置功能上线/隐藏;可用性开关非权限边界,缺失/损坏回退默认值并显式 error;响应携带 `defaultOff` 集合显式标注默认关功能(当前含 `fallback`:会拉起外部 LLM 子进程并产生 token 成本,默认关与其余键 fail-open 相反,详见 [fallback.md](./fallback.md)) | FF-01 |
| `GET /api/gov/archive/verify` | WORM 归档完整性验证(P0 只读:sha256/merkle 篡改检出) | 矩阵 104/116/112 |
| `POST /api/gov/archive/run` | 触发归档密封(P1:archive_old + worm manifest) | 矩阵 104/116/112 |
| `POST /api/saga/{id}/retry` | Saga 重试(P1,先按快照回滚步副作用) | 矩阵 78/119 |
| `POST /api/saga/{id}/compensate` | 手动触发补偿链(P1) | 矩阵 78/119 |
| `POST /api/saga/{id}/takeover` | 人工接管(P1,补偿失败安全降级) | 矩阵 78/119 |
| `POST /api/automation/tick` · `GET /api/automation/status` | 自动化定时驱动(手动 tick + lifespan 后台自动;P1 驱动/ P0 状态) | 矩阵 76 |
| `POST /api/rebuild/{module_id}` | 可重生流水线触发(候选构建+隔离黄金+安全扫描+灰度,P1) | 矩阵 91 |
| `GET /api/rebuild` · `POST /api/rebuild/{module_id}/promote|rollback` | 流水线状态/转正/回滚(P0/P1) | 矩阵 91 |
| `GET /api/gov/pending` | 待审批 | M2 |
| `GET /api/gov/approval-history` | 按租户/项目过滤的审批历史、停留时长和超时结果 | M2 |
| `GET /api/gov/audit` | 审计链 | M2 |
| `POST /api/gov/audit/events` | 桌面端/登录态审计事件上报(矩阵 103 收口:desktop 模式由 SidecarIdentityApp nonce 门禁即身份(updater 带 nonce 即可);web 模式要求登录身份;可选 idempotencyKey 幂等去重;失败 4xx 明确;事件复用 write_audit 入链) | 矩阵 103 |
| `GET /api/gov/modules` | 模块注册表 | M2 |
| `GET /api/gov/policy` | 权力矩阵投影 | M2.5 |
| `GET /api/gov/tests` | 黄金测试看板(`run=true` 须线程池,防阻塞) | M2.5 |
| `GET /api/plans/{planId}` · `/{planId}/versions` | Plan 最新版与不可变版本历史(P0) | Plan §3.1 |
| `POST /api/plans` · `/{planId}/regenerate` | 追加 Plan 草稿/重生版本(P1,不写世界状态) | Plan §3.1 |
| `GET /api/settings/llm` | LLM 状态 | M2.5 |
| `GET /api/knowledge/assets` · `/{id}` | 知识资产 | M3 |
| `POST /api/knowledge/import` · `/upload` | 知识导入(P2 暂存确认卡) | RAG |
| `GET /api/skills` · `/health` | 外部算法 Skill 清单/健康 | Skill |
| `POST /api/skills/register` | 登记 Skill(P2 暂存) | Skill |
| `GET /api/reports/{type}` | 报告导出 daily / version-diff | M3 |
| `GET /api/orders` | 订单管理页投影(订单 + 成品选项) | M4 首切片 |
| `GET /api/master` | 主数据管理页投影(资源树/物料BOM/日历维保) | M4 首切片 |
| `GET /api/mrp` | MRP 建议单投影(采购/委外 DRAFT) | M4 首切片 |
| `POST /api/mrp/decompose` | 订单分解(P1 直通,经 `harness.guard`) | M4 首切片 |
| `GET /api/flex/world` | 柔性排产页投影(能力池/设备/模具/订单 + 虚拟产线) | M5 首切片 |
| `POST /api/flex/schedule` | 柔性排产(P1 直通,经 `harness.guard`) | M5 首切片 |
| `POST /api/flex/reschedule` | 分级重排暂存确认卡(P2,执行走 confirm) | DY-01 |
| `POST /api/flex/swap` | L1 局部换机(P1) | DY-01 |
| `GET /api/flex/conflicts` | 冲突中心(P0) | EX-03 |
| `POST /api/flex/conflicts/resolve` | 冲突修复(P1 / 或 stage P2) | EX-03 |
| `POST /api/flex/adjust/preview` | 甘特调程预览(P0) | EX-04 |
| `POST /api/flex/adjust/stage` | 甘特调程确认卡(P2) | EX-04 |
| `POST /api/schedule/adjust/preview` | 固定轨调程预览(P0) | EX-04 |
| `POST /api/schedule/adjust/stage` | 固定轨调程确认卡(P2) | EX-04 |
| `GET /api/sap/status` | SAP 连接状态(Mock,P0) | MD-05 |
| `GET /api/sap/inbound/preview` · `outbound/preview` | SAP 入/出站预览(P0) | MD-05 |
| `POST /api/sap/inbound/stage` · `outbound/stage` | SAP 同步确认卡(P2) | MD-05 |
| `GET /api/mes/status` · `execution` · `dispatch/preview` | MES 状态/进度/下发预览(P0) | EX-05/09 |
| `POST /api/mes/dispatch/stage` | MES 下发确认卡(P3,首次批准只留审计,二次批准才执行) | EX-05 |
| `POST /api/mes/report` | 报工回流(P1) | EX-09 |
| `GET /api/analytics/kpi` | KPI 仪表盘聚合(P0) | EX-08 |
| `GET /api/analytics/utilization` | 资源利用率:设备热力+班组(P0) | EX-06 |
| `GET /api/analytics/compare` | 方案对比表(P0 沙盒) | EX-07 |
| `POST /api/flex/simulate-due` | 交期承诺模拟(P0 只读沙盒,PL-08 雏形) | M5 首切片 |
| `GET /api/flex/capacity` | 瓶颈产能法分析(P0,各池日产能+限制性瓶颈,PL-07 / EX-10) | M5 首切片 |
| `POST /api/import/preview` | Excel/CSV 上传校验(P1,不写主干) | MD-04 |
| `POST /api/rush/evaluate` | 插单影响快评(P1 沙盒,经 `harness.guard`) | OR-04 |
| `POST /api/orders/submit` | 订单提交审核(P1 直通) | OR-03 |
| `GET /api/forecast` | 预测/长周期订单投影(P0) | OR-05 |
| `GET /api/plan/buckets` | 时间分桶计划投影(P0,含 capacityMode) | PL-01/02 |
| `GET /api/plan/rccp` | 有限/无限粗能力对照(P0) | PL-02 |
| `GET /api/plan/feasibility` | 交期可行性(P0,前置于排产) | PL-03 |
| `GET /api/plan/inventory` | 库存投影(P0) | PL-04 |
| `GET /api/plan/leveling` | 产能平衡/削峰建议(P0) | PL-05 |
| `GET /api/plan/supply` | 产供方向决策(P0) | PL-06 |
| `GET /api/workspace` | 项目/会话/消息工作区快照(P0) | AG-08 |
| `PUT /api/workspace` | 整包同步工作区(P1,迁移/防抖) | AG-08 |
| `GET/PUT/POST /api/sessions/{id}/messages` | 会话消息读写(P0/P1) | AG-08 |
| `GET /api/readiness` · `/api/times` | 齐备度报告 / 工时矩阵(P0) | M-B |
| `POST /api/times/update` | 工时更新确认卡(P2 暂存) | M-B |
| `GET /api/projects` · `/api/packs` | 项目清单 / 数据包清单(P0) | M-A |
| `GET /api/templates` · `/recommend` | 工艺模板库 / 按产品推荐(P0) | M-E |
| `POST /api/templates/apply` | 模板生成路线确认卡(P2 暂存) | M-E |
| `POST /api/rag/query` | Skill 消费 RAG(P0,apiKey + ragScopes 鉴权) | M-E |
| `GET /api/knowledge/index/status` · `POST …/rebuild` | 向量索引状态 / 重建(P0 / P1) | M-E |
| `POST /api/skills/{id}/enable` | 启停 skill 确认卡(P2 暂存) | M-D |
| `GET /api/skills/{id}/audit` · `/history` | skill 审计过滤 / 健康历史(P0) | M-D |
| `POST /api/skills/{id}/test` | 跑该 skill 黄金测试子集(P1,子进程) | M-D |
| `GET /api/skills/contracts` | SchedulingProblem/Solution 契约(P0) | M-D |
| `GET /api/mcp/plugins*` | MCP 插件清单/健康/权限/审计(P0) | M-D |
| `POST /api/mcp/plugins/register` · `/enable` · `/permissions` | MCP 注册/启停/权限(P2 审计) | M-D |
| `GET /api/jobs` · `POST /api/jobs` | 异步任务列表/提交(敏感性、Sobol、蒙特卡洛、CP 整约束与 RHS 参数重算) | M3 |
| `GET /api/jobs/{id}` · `/cancel` | 异步任务轮询/取消 | M3 |
## 确认暂存端点备案(不直接执行写入)
| 端点 | 用途 | 权力路径 | 加入 |
| --- | --- | --- | --- |
| `POST /api/orders/stage` | 订单新增/编辑/取消/完成/批准/驳回生成确认卡 | `order.*` P2 → `/api/actions/confirm` 执行 | M4 首切片 |
| `POST /api/rush/stage` | 采用紧急插单生成确认卡 | `rush.apply` P2 → `/api/actions/confirm` 执行 | OR-04 |
| `POST /api/forecast/stage` | 预测新建/删除/转正确认卡 | `forecast.*` P2 → `/api/actions/confirm` 执行 | OR-05 |
| `POST /api/projects` · `DELETE /api/projects/{id}` · `POST /api/sessions` | 项目/会话元数据(P1 直通) | `project.*` / `session.create` | AG-08 |
| `POST /api/projects/{id}/files/upload` | 浏览器上传本地工程数据文件到项目目录(P1 直通) | `project.*` | AG-08 |
| `POST /api/master/stage` | 产线/物料/维保编辑生成确认卡 | `master.*` P2 → `/api/actions/confirm` 执行 | M4 首切片 |
| `POST /api/import/commit` | 导入批次生成确认卡 | `import.commit` P2 → `/api/actions/confirm` 执行 | MD-04 |
| `POST /api/constraints/rules/stage` | 计划员扩充约束规则(新增/启停/删除)生成确认卡 | `constraint.rule.save` P2 → `/api/actions/confirm` 执行 | SC-04 |
## 审批角色策略
`APS_APPROVAL_ROLE_POLICIES` 可按精确 action 和 P2/P3 等级分别配置发起、批准、历史查看角色。每种能力独立解析,固定优先级为:**精确 action > power 等级 > 既有全局环境变量**。
```json
{
"actions": {
"mes.dispatch": {
"initiate": ["dispatcher"],
"approve": ["mes-approver"],
"history": ["mes-auditor"]
}
},
"powers": {
"P2": {
"approve": ["planner", "approver"]
},
"P3": {
"approve": ["senior-approver"]
}
}
}
```
- action 必须是 `_POWER_MAP` 中精确登记且需要审批的 P2/P3 动作;不接受 `*`。
- 规则只允许 `initiate`、`approve`、`history`,值必须为角色字符串数组;空数组表示除合法 `system` 身份外不授权任何角色。
- 某能力未在 action 规则声明时回退同等级规则,再未声明时分别回退 `APS_APPROVAL_INITIATOR_ROLES`、`APS_APPROVAL_ROLES`、`APS_APPROVAL_VIEW_ROLES`,保持既有部署兼容。
- 未知字段/action/等级、重复 JSON 键、非数组或非法角色会使整份配置失效。失效期间包括 `system` 在内均不得发起、批准或查看审批;`GET /api/gov/policy` 保留原字段,并通过各条目的 `rolePolicy.valid=false/error` 暴露配置错误。
- 角色策略只决定谁可操作,不改变 P2 一次批准和 P3 两个不同用户批准的次数与职责分离约束。
## 防线
1. P2 只能:`stage_confirmation` → 持久审批队列 → 确认卡/门禁管理台 → `/api/actions/confirm` → `take_confirmation`,批准一次后令牌失效
2. P3 使用同一令牌由两个不同用户连续批准:首次只写 GATE 审计并保留令牌,同一用户再次批准被职责分离门禁拒绝;第二名用户批准后签发绑定规范化审批参数摘要的一次性内部执行凭据,才允许外部副作用;审批记录冻结发起人的有效 `worldKey`,第二审批人的当前个人空间不能改变执行目标;`mes.dispatch` 必须以原始 `track/versionId/evidenceRefs` 消费该凭据,并校验真实存在的 `beforeSnapshot`
3. 未登记动作 → P3 拒绝;`guard()` 禁止 P2/P3 直通
4. P2/P3 写入前自动 Checkpoint(publish / reset / rollback / 外部下发)
5. GATE / WORLD_WRITE 写审计哈希链,可 `verify_audit_chain`
6. 审批队列、审批历史和一次性执行凭据经统一 backend 原子持久化;文件后端使用原子替换,数据库后端使用请求 `revision` CAS 和短事务。最终批准、P3 grant 签发和审批事件同事务提交;数据库只保存 grant token 的 SHA-256。审批和凭据 TTL 分别由 `APS_APPROVAL_TTL_SECONDS`、`APS_EXECUTION_GRANT_TTL_SECONDS` 控制,重启后继续生效且过期结果进入审批历史
7. 发起/批准/历史权限按 `APS_APPROVAL_ROLE_POLICIES` 的精确 action > power > 全局环境变量确定;配置非法时全部失败关闭。全部审计 actor 只从认证身份派生,不信任客户端 `sessionId`;损坏或字段非法的审批文件会被隔离为 `.corrupt-*` 并告警,拒绝继续使用其中令牌
默认 `APS_APPROVAL_BACKEND=file`:使用进程内可重入锁、同机跨进程文件锁和原子文件替换,可防止多个本机 Gateway worker 重复签发。显式设置 `APS_APPROVAL_BACKEND=database` 后复用 `APS_DATABASE_URL` 的 MySQL;批准/驳回竞态、最终 grant 签发和 grant 消费均使用 CAS 保证跨连接只有一个赢家。database 模式缺少 URL、配置 `APS_APPROVAL_PATH`、连接失败或使用非 MySQL 方言时失败关闭,不回退 file;`APS_APPROVAL_DATABASE_ALLOW_SQLITE=1` 只允许测试。
共享切换必须先执行 Alembic `20260731_03` 并整体切换所有节点,禁止 file/database 混跑。当前仅完成 SQLite 本地合同/CAS 测试,尚未宣称 MySQL 实机或多主机故障注入验收通过。
## 证据链 v1(§3.4)
- 出卡冻结:`stage_confirmation` 记录 `evidenceRefs`(显式或按 `versionId` 派生 `schedule-version:<id>`)、`beforeSnapshot`(写前 checkpoint pairId)与 `beforeFingerprint`(输入快照指纹,世界已加载时)。
- 确认信封完整性:出卡同时记录 `paramsHash` 与 `envelopeHash`;后者绑定 action/power/tenant/project/world/session/params/evidence/snapshot/requester/requiredApprovals。file/database 后端均在 `decide` 的共同 allowed 回调内、消费或签发 grant 前重算;缺失、旧格式或篡改记录失败关闭。
- `folder.schedule` 专用冻结:stage 只读沙盒分析;source manifest、world fingerprint、frozen payload digest、beforeSnapshot 四类证据全部入信封。SQL/Excel/CSV 解析与 manifest 使用同一次 immutable bytes;confirm 不重读活动目录。
- `folder.schedule` 原子执行:冻结数据只写候选世界,import/schedule/save 全部成功后一次提交;任一点失败写 DENIED 并丢弃候选,L2 Plan 只在提交成功后 APPROVED。
- Automation G4 授权:升权 P3 信封必须携带 `automation-authorization.v1`,绑定完整 Rule、harnessAction/power 与 BusinessActionBinding;grant 保存批准摘要,每次执行前对当前 rule/binding 重算,漂移即撤销。
- G4 写动作禁止 handler 直通,只允许 Binding + business_bridge;真实 `/api/actions/confirm`/batch 在第二名审批人完成后消费一次性 executionGrant 并铸造 AutomationGate grant。
- 执行强校验(fail closed):`execute_confirmed` 在最终批准后、写世界前调用 `verify_pending_evidence`:
- 版本证据绑定:params 含 `versionId` 时必须携带 `schedule-version:<versionId>` 证据,否则拒绝;
- 前置快照存在:`beforeSnapshot` 指向的 checkpoint 必须存在,否则拒绝;
- 版本一致性:世界带版本表时 `versionId` 必须仍可解析,否则拒绝(对象域校验,避免全局指纹假阳性)。
- 审计统一:全部 P2/P3 写审计事件携带 `beforeSnapshot` 与 `evidenceRefs`;拒绝路径写 `DENIED` 审计且不改变世界。
- 输入快照指纹:`world_fingerprint` 对业务主数据投影做 SHA256(排除 append-only 日志/审计/同步流水),用于出卡与执行间的漂移检测证据。
- mes.dispatch 原有强绑定(确认令牌 + 版本证据 + 写前快照)保持不变,作为统一协议的参考实现。
- 审批意见:`take_confirmation(confirm_id, approve, note=...)` 携带可选意见,随批准/驳回记录进 `approvals` 与审批历史事件(文件与共享 database 后端一致);网关 `ConfirmRequest.note` 透传,管理台审批历史展示。
- 审批委托:`stage_confirmation(..., delegate_user_id=...)` 出卡时可指定被委托人;P2 单重审批作用域允许 owner 或被委托人操作,P3 双人职责分离不变(委托不视为身份合并)。
- 审批转派:`transfer_confirmation(confirm_id, to_user_id)` 把待确认项转派给指定用户(P2;转派后 owner=目标用户、原 owner/delegate 不可再审批;P3 拒绝转派保双人分离);历史事件 `TRANSFERRED` 记录 from/to;网关 `POST /api/actions/transfer`。
- 统一 EvidenceItem:`server/agent_core/evidence.py` 提供结构化证据记录(kind/ref/version/runId/engine/seed/inputsHash/knowledgeVersion/confirmId/note)与 `trace_chain()`(规范化 JSON + 链哈希,可复算可追溯);证据引用语法 `<kind>:<id>` 与 `schedule-version:<id>` 协议兼容。
- schedule.run 接入:`server/aps_domain/workflow.py` 的 `_run_schedule` 求解后经 `_build_run_trace` 构造 EvidenceItem 链(schedule-version/run/algorithm),ALGO_RUN `schedule.run` 审计 rationale 携带 `traceChainHash`/`traceCount`/`traceSummary`(可复算可追溯;失败返回空链摘要,不影响求解)。链哈希只含确定性信息(版本/run/引擎/策略/求解状态/gap/输入包指纹),墙钟 `solveTimeSec` 保留在审计顶层字段不进入链哈希,RULE/CP/HYBRID/GA 四引擎同输入同种子可复算;审计 `evidence` 合并 `schedule-version:<id>` 引用(`_run_audit_evidence`)。
- EXTERNAL 引擎接入:`_run_flex` 的 `flex.schedule.external` 分支经 `_build_external_trace` 构造同构链(schedule-version/run/EXTERNAL/algorithm),审计携带 traceChainHash;`algo_skill_stub.runId` 改为输入派生确定性哈希保证可复算;前端 GovConsole 审计链新增「可追溯链」列展示链哈希与摘要。
- 审计独立介质锚定:`server/agent_core/audit_ledger.py` 提供 `audit_root(events)`(对链哈希做双哈希聚合根)与 `AnchorLedger`(按租户/项目隔离的 append-only JSONL 账本);`/api/gov/audit` 返回 `anchor` 状态,`POST /api/gov/audit/anchor` 显式锚定;改事件/删账本行可被检测(与链式校验互补)。
- 审计事件镜像:`server/agent_core/audit_mirror.py` 提供 `AuditMirror`(按租户/项目隔离 append-only JSONL);`APS_AUDIT_MIRROR=1` 时 `write_audit` 同步镜像每条事件(尽力而为,失败只记日志),`/api/gov/audit` 有镜像时以镜像为事件源(业务进程改 world 无法抹掉独立介质证据)。
- 审计合规导出:`server/agent_core/audit_export.py` 提供 `sanitize_event`(token/password/secret/key/authorization/credential 键值递归掩码)与 `export_events`(json/csv);`/api/gov/audit/export` 导出当前作用域事件(脱敏)+ 链/锚定摘要。
- 审计完整性告警:`server/agent_core/audit_alerts.py` 聚合链断裂(critical)、锚定不匹配/账本损坏、未锚定、镜像未启用等告警;`/api/gov/audit` 返回 `alerts`,管理台 AuditView 按 severity 展示。
## 变更记录
| 日期 | 变更 |
| --- | --- |
| 2026-09-04 | FB-03-BUG-1 修复:`mes.apply_report` 新增 keyword-only `offline_booking`(默认 False,在线路径逐字节不变);S6 断连补录显式离线落账(声明 + 断连事实双端核验,syncStatus=PENDING_SYNC,滥用即拒) |
| 2026-09-04 | FB-03:`agent.fallback.policy.update` 登记 P2(白名单治理原子写);`agent.fallback.ops.config.apply` 登记 P3(S7 受控配置变更,双审批 + executionGrant);`refresh_confirmation_world_fingerprint` 推进指纹时同步重算信封哈希(S6 多卡场景实测缺陷修复) |
| 2026-09-03 | FB-02:`agent.fallback.execute` 登记 P2(兜底写路径:计划锁+成对快照+自动回滚+diff 对账);`agent.fallback.execute.highrisk` 登记 P3(默认拒绝,本轮不开放) |
| 2026-09-02 | FB-01:`agent.fallback.propose` 登记 P1(智能兜底只读车道,FF-01 `fallback` 开关默认关);`/api/features` 响应新增 `defaultOff` 字段 |
| 2026-08-17 | Round 72:P2/P3 params/envelope hash 决策前重算;folder.schedule immutable source bytes、四证据冻结、candidate-world 原子提交与 TOCTOU 关闭 |
| 2026-08-17 | Round 73:Automation G4 完整 Rule/Binding authorization digest;漂移撤 grant;无业务桥 P3 DENIED;真实 API 双人审批铸 grant |
| 2026-08-01 | trace_chain 接入 schedule.run:ALGO_RUN 审计携带 traceChainHash/traceCount/traceSummary;schedule.run 首接入矩阵 114 行 |
| 2026-08-01 | trace_chain 跨引擎可复算:墙钟移出链哈希;evidence 并入 schedule-version 引用;RULE/CP/HYBRID/GA 四引擎可复算(round-16 补充) |
| 2026-08-01 | EXTERNAL 引擎接入 trace_chain(flex.schedule.external 审计携带 traceChainHash)+ 前端审计链「可追溯链」列(round-16b) |
| 2026-08-01 | 对话状态与世界状态成对快照:CheckpointStore 支持 conversationSide,_create_checkpoint 统一建档、_restore_conversation_side 回滚成对恢复(round-17) |
| 2026-08-01 | 审计完整性告警通知渠道:audit_notify(console/jsonl/webhook + 防抖),/api/gov/audit 联动(round-18) |
| 2026-08-01 | 审计完整 Merkle 树:audit_merkle(merkle_root/merkle_proof/verify_proof),JSON 导出携带 merkleRoot(round-19) |
| 2026-08-01 | 审计 append-only 守护:audit_filelock 跨进程锁 + audit_ledger.archive_old 保留窗口归档(round-20) |
| 2026-08-01 | 偏好学习升级:项目隔离(record/preferred_strategy 带 project_id)、explain 解释、reset 重置、冷启动/不确定度(round-21) |
| 2026-08-01 | Explore 与 Runtime 数据边界:explore_boundary(readonly_view + run_explore),scenario.compare 接入统一通道(round-22) |
| 2026-08-01 | L0-L3 Plan 重放:plan_runtime.node_at/replay_verify + plan_api 重放端点(round-23) |
| 2026-08-01 | 统一工具运行时:LLM 提议意图唯一执行入口(登记校验 + TOOL 审计),gateway 聊天接入(round-24) |
| 2026-08-01 | 分支树:BranchStore(fork/rename/switch/discard/merge + 状态机 + 审计),gateway branches API,快照纳入分支(round-25) |
| 2026-08-01 | 主数据工艺路线树产品升级:成品→半成品→工序层级树,build_process_tree 补展示字段(round-26) |
| 2026-08-01 | 分支切换自动恢复锚定检查点:_create_checkpoint 锚定分支、switch 端点成对恢复(round-27) |
| 2026-08-01 | 偏好解释 UI(设置·个人偏好 + /api/settings/preferences)+ stub runId 可复算修复(round-28) |
| 2026-08-01 | 主数据工艺树 → 树形表格:sourcing 去重/半成品推导/工序名补齐 + 类型来源标签(round-29) |
| 2026-08-01 | L0-L3 Plan 批准/驳回审计:transition_status + approve/reject 端点(round-30) |
| 2026-08-01 | Agent 自动编排:P2 出卡建 L0/L1/L2 链、批准/驳回流转、_load regen 校验修复(round-31) |
| 2026-08-01 | 偏好时间衰减加权模型:来源权重×时间衰减(半衰期14天),偏好漂移(round-32) |
| 2026-08-01 | Explore 通道扩展:run_sensitivity/run_monte_carlo 接入 run_explore 统一边界(round-33) |
| 2026-08-01 | 多智能体并行:session_ref/context_policy(A)、automation G0-G4(B)、分支树UI+时间线微观层(C)——round-34 |
| 2026-08-02 | 多智能体并行·第二批:CP-SAT工序级(D)、algolib+param_opt(E)、MCP总线+async_jobs(F)——round-35 |
| 2026-07-31 | 跨主机审批首切片:显式 MySQL backend、规范化 request/grant/event 表、CAS 终态和一次性消费、token 摘要落库;文件后端保持默认 |
| 2026-07-31 | 审批角色策略:支持 exact action / P2/P3 分级覆盖,按能力确定性回退全局角色;非法配置失败关闭,治理投影追加配置来源与校验状态 |
| 2026-07-31 | 审批治理持久化:队列/历史/执行凭据跨重启恢复,支持 TTL、P3 双人职责分离、停留时长和治理历史 API/UI |
| 2026-07-31 | 二次审计整改:执行凭据绑定审批参数摘要;MES 展示上限不再截断执行,整版完成标记取决于全部工单幂等链接 |
| 2026-07-31 | Plan §3.1:备案 `/api/plans` P0/P1 端点;创建/重生只追加治理版本,不穿透世界状态 |
| 2026-07-31 | 审计整改:P3 最终批准签发一次性作用域执行凭据;MES 精确锁定审批版本并校验真实快照/证据;跨租户不泄漏令牌状态 |
| 2026-07-31 | P3 二次确认:首次批准仅审计并保留令牌,第二次批准才执行 `mes.dispatch` 外部副作用;最终审计绑定确认令牌、前置快照和排产证据 |
| 2026-07-16 | 初版 8 条 + M2.5 只读端点 |
| 2026-07-23 | RAG:`knowledge.import` P2;Skill:`skill.*`;端点 `/api/knowledge/import*` `/api/skills*` |
| 2026-07-16 | 迁入 `architecture/harness.md`;注明 tests 线程池 |
| 2026-07-16 | OR-01:新增 `order.upsert/cancel/complete` P2 与订单暂存端点 |
| 2026-07-16 | MD-01/02/03:新增 `master.line/material/maintenance.upsert` P2 与 `/api/master`、`/api/master/stage` |
| 2026-07-16 | MRP:新增 `master.bom/routing.upsert` P2、`order.decompose` P1 与 `/api/mrp*` |
| 2026-07-22 | DY-01:`flex.reschedule` 升 P2;新增 `flex.swap` P1 与 `/api/flex/swap` |
| 2026-07-22 | EX-03:`conflict.list` P0、`flex.conflict.resolve` P1 与冲突 API |
| 2026-07-22 | EX-04:`flex.adjust.preview` P0 / `flex.adjust.commit` P2 |
| 2026-07-22 | EX-04:`schedule.adjust.preview/commit` 固定轨对称 |
| 2026-07-22 | MD-05:`sap.status` P0 / `sap.sync.inbound|outbound` P2(Mock 桩) |
| 2026-07-22 | EX-05/09:`mes.dispatch` P3 / `mes.report` P1(Mock MES) |
| 2026-07-22 | EX-07/08:`/api/analytics/compare|kpi` 视口对比表与 KPI 仪表盘 |
| 2026-07-22 | EX-06:`/api/analytics/utilization` 设备热力+班组并发;SC-11 文档对齐 |
| 2026-07-22 | AG-07:`guidance.next` P0 + `/api/guidance` 主动引导 |
| 2026-07-22 | OR-02:`params.query` P0 / `params.update` P2 + `/api/params*` |
| 2026-07-22 | SC-04:`constraint.profile.*` + `/api/constraints*`;硬约束拦发布 |
| 2026-07-23 | OR-05:`forecast.query` P0 / `forecast.upsert|delete|convert` P2 + `/api/forecast*` |
| 2026-07-23 | PL-01:`plan.buckets` P0 + `/api/plan/buckets` 分桶视口 |
| 2026-07-23 | PL-02:`capacityMode` + `plan.rccp` P0 + `/api/plan/rccp` |
| 2026-07-23 | PL-03:`plan.feasibility` P0 + `/api/plan/feasibility` |
| 2026-07-23 | PL-04:`plan.inventory` P0 + `/api/plan/inventory` |
| 2026-07-23 | PL-05:`plan.leveling` P0 + `/api/plan/leveling` |
| 2026-07-23 | PL-06:`plan.supply` P0 + `/api/plan/supply` |
| 2026-07-23 | MD-06:`changeover.query` / `master.changeover.upsert` + RuleEngine C10 |
| 2026-07-23 | SC-07:策略 `CHANGEOVER_MIN` + 方案对比换型卡 |
| 2026-07-23 | SC-08:策略 `CAMPAIGN` + `campaign.preview` |
| 2026-07-23 | SC-06:`scenario.sensitivity` P1 + `/api/scenario/sensitivity` Tornado |
| 2026-07-23 | SC-03:`get_engine(CP)` → CpSatEngine(OR-Tools);GA/HYBRID 仍 RULE 代跑 |
| 2026-07-23 | SC-03:`get_engine(HYBRID)` → HybridEngine(RULE hint → CP) |
| 2026-07-23 | IND-02:`sop.compile` P0 / `sop.apply` P2 + `/api/sop*`;C13_sop |
| 2026-07-23 | 通用平台 M-A/B:`readiness.query` P0 / `flex.time.update` P2 + `/api/readiness` `/api/times*` `/api/projects` `/api/packs` |
| 2026-07-23 | 通用平台 M-D/E/F:`rag.query` P0 / `routing.template.apply` P2 / `schedule.wizard` P0 + skill 管理台端点与模板/索引端点 |
| 2026-09-17 | SC-04 扩充:`constraint.rule.query` P0 / `constraint.rule.save` P2 + `/api/constraints/library`、`/api/constraints/rules/stage`;默认通用规则保持内建目录,计划员扩充规则按类别/范围归档,未接入引擎的规则如实标注 |
## Round 65 P2/P3 排产发布与 MES 分离
- `POST /api/schedule/publish/stage` 只暂存 `schedule.publish` P2 确认卡,绑定 `track + versionId + schedule-evidence`;执行仍唯一经 `/api/actions/confirm`。
- 柔性发布出卡和执行时都重算 `publishReady`;证据漂移或版本替换一律拒绝。
- `mes.dispatch` 保持 P3 双人职责分离;不在 MES 路径中暗中把 DRAFT 改为 PUBLISHED。
### Round 65 审计补强:P2/P3 证据闭包
- `schedule.publish` 与 `mes.dispatch` 共享的 evidence 包含 `problemDigest`、`solutionDigest`、`solutionActivityDigest`、`validationDigest`、`currentValidationDigest` 和当前多资源快照摘要。
- 工单必须绑定 `activityId`、`activityIdentity`、`closedLoopRequirementId`;TEAM/TOOLING 分配与工单 `teamCode/moldCode` 不一致时失败关闭。
- 发布/下发时重建 FACTORY/WORKSHOP/LINE/WORKSTATION/EQUIPMENT/TEAM/TOOLING 当前约束并重新运行 V2 Validator。
- WMS Saga 在确认执行前后比较版本集合,只接受唯一新版本,并核验 `flex.reschedule.approve` 审计的 confirmId、versionId 与 WMS event evidence。
## Pi Agent 外向接入(方向 A · P1 只读)
- `server/auth/agent_tokens.py`:长期只读机器凭证登记。`APS_AGENT_TOKEN_SECRET` 必配,缺失时签发/鉴权均返回 `AGENT_TOKEN_NOT_CONFIGURED`;`APS_AGENT_TOKEN_PATH` 缺省为 data 目录 `agent-tokens.json`。token 为 HMAC(base64url body.signature),含 `tokenId/kind/scope/iat/exp`;principal 的 `user_id/tenant_uuid` 绑定个人/租户世界。
- `server/gateway/agent_api.py`:`GET /api/agent/intents`、`GET /api/agent/intents/{name}`、`POST /api/agent/invoke`。目录为显式登记的 19 项只读白名单(含 `query.kpi`;排除会写主干/知识库/报告的 `data.analyze`/`folder.analyze`/`report.generate`),不再自动投影 `tool_runtime._READONLY_INTENTS`/`_POWER_MAP` P0;非只读意图 P1/P2 返回 `CONFIRM_REQUIRED`,P3 返回 `POWER_DENIED`,未登记返回 `INTENT_NOT_REGISTERED`,均写 `AGENT` DENIED 审计且不调用 `handle_intent`。
- 鉴权:`AuthenticationMiddleware` 对 `/api/agent/` 的 `Authorization: Bearer <agent-token>` 先行鉴权,失败返回 AuthError JSON;无 Bearer 在认证开启时仍回退 Web/桌面 cookie/license;认证关闭时不再落到匿名/本地管理员,而是返回 `AGENT_TOKEN_REQUIRED` 401。`/api/agent/*` 不加入 `PUBLIC_API_PATHS`。
- 配置与签发:服务端需设置 `APS_AGENT_TOKEN_SECRET`;签发/列出/吊销可用 `.venv\Scripts\python.exe scripts\pi_agent_token.py issue|list|revoke`。Pi 端把一次性签发的 token 写入自己的配置文件/环境变量即可。
- 当前范围仅 P1 只读直通;P1/P2 写意图、确认卡三态与 MCP 总线治理不在本段备案内。