aps-agent/docs/CHANGELOG.md

258 KiB
Raw Permalink Blame History

2026-09-14 — Excel 排产模板与数据采集模板合同收口

  • 类型:feature + test + docs(本轮按用户要求完成本地提交;不推送)
  • 排产工作簿合同:新增 server/aps_domain/report_contracts.py,用数据结构声明 schedule-plan.v1 / schedule-order.v1 / schedule-equipment.v1 / schedule-blocked.v1 的工作表、中文表头、类型与单位、表头行、数据起始行、冻结窗格、筛选区域与每列取值来源;build_plan_report、工单导出、设备导出和阻断工作簿统一引用同一合同,并在生成后用 validate_workbook_contract 复核,合同不一致直接失败而不是产出看似正常的文件。
  • 边界与确定性:无柔性版本时保持显式空态(xlsxBytes/filename 为 None);有版本、无工单时产出阻断清单;工作计划表补上 ZIP 归一化,使同一输入重复导出字节一致。导出返回值新增 templateId/templateSchemaVersion,既有字段与 Sheet 位置不变。
  • 采集模板:新增 server/importers/template_workbook.py,由当前工作簿配置生成 intake-template.v1:Sheet 名、物理列名、列顺序、枚举与映射摘要全部来自 profile,默认空白、可选样例行、生成字节确定性;workbook_profiles.py 为该合同校验 requiredColumns,配置错误显式拒绝,旧配置省略该字段时按“全部可选”加载。新增 GET /api/import/template(带 ETag 与 profile/template 头,未注册 profile 返回 404)和主数据页「下载采集模板」入口;不带 profileId 时模板跟随 APS_WORKBOOK_PROFILE_DIR 的兼容默认配置,唯一 compatibilityDefault 优先、目录仅一份配置时直用、默认标记缺失或重复时显式报错。
  • 主对话排产合同:render_plan_task_brief 把「立即排产/开始排产/试排」这类明确要求固定为「先 readiness.query 复查,资料已采用时必须调用 flex.schedule 出草稿试排」;只给齐备度结论、补齐建议或「暂不建议排产」记为错误回答;真实阻断项必须写进试排假设与未安排说明,不得改写成「资料未通过检查,不能排产」。合同由 test_primary_brief_pins_explicit_scheduling_contract 锁定。
  • 失败可诊断与超时预算:闸 1 默认 90s → 180s(APS_FALLBACK_TIMEOUT_SEC 仍可覆盖,.env.example 增补 APS_FALLBACK_* 说明)——真实 LLM 多步工具调用实测 45~80s,90s 会误杀排产并让计划员看到「本次处理未完成」;模型网关账号类失败(欠费/限流/鉴权,401/402/403/429)改报「智能助手服务暂不可用」,与 APS 自身失败话术分开,5xx 保持 harness_error 原语义。
  • 采集模板条件请求:GET /api/import/template 按 If-None-Match 返回 304,模板字节未变时不重传整份 Excel;模板与现场工作簿逐表逐列同构(Sheet 顺序 + 每张表物理表头)由 test_intake_template_contract_matches_the_authorized_workbook 校验。
  • 排产模板定义可下载:新增 build_contract_template 与 GET /api/reports/schedule-template,把 schedule-plan.v1 / schedule-order.v1 / schedule-equipment.v1 / schedule-blocked.v1 直接导出成表头骨架(标题行、表头行、冻结窗格、筛选区域,无业务行),生成后仍由 validate_workbook_contract 复核,现场下载的模板与真正导出的文件共用同一份声明;响应带 ETag / X-APS-Template-Id / X-APS-Contract-Digest,支持 304,未注册类型 404。柔性工作台新增「排产模板」入口。
  • 采集说明补全填写定义:数据采集说明 新增「填写要求」列,逐字段写出允许取值(取自解析器同一份枚举配置,如「正式订单→FORMAL;沙盒插单→SANDBOX」)、日期格式与数值要求,现场回填不再靠猜;定义行由 intake_definition_rows 从配置生成,模板与解析器不得各写一套。
  • 导出下载鉴权修复:柔性工作台的「订单方案」「设备方案」原先用 href 直开 /api 链接,浏览器带不上鉴权头;现与采集模板一致改走 downloadAuthenticatedFile,下载失败时显示后端原因而不是 401 页面。
  • 验证:test_schedule_template_contract.py + test_schedule_exports.py + test_workbook_profiles.py + test_fallback_lane.py 共 56 passed;tests/golden 全量 2382 passed / 53 skipped(12m46s,带真实工作簿 ROUND87_SOURCE);npm run test:node 103 passed;npm run build --prefix apps/web 通过(3185 modules);ruff 新增/修改文件 All checks passed。
  • 模板定义复核(同轮追加):排产模板与采集说明改为可校验定义后重跑——test_schedule_template_contract.py(含 4 份合同骨架、模板接口 304/404、采集说明取值定义)16 passed,test_schedule_template_contract.py + test_schedule_exports.py + test_workbook_profiles.py 共 41 passed,导入/主数据/合同相关 9 个文件 85 passed / 2 skipped,配置可移植性与文档漂移 500 passed;tests/golden 全量 2386 passed / 53 skipped(13m28s,带真实工作簿);npm run test:node 105 passed(新增 tests/node/schedule-template-download.test.mjs);npm run build --prefix apps/web 通过;隔离后端(18787,真实工作簿)浏览器验收:采集模板下载 1 passed、新增的排产模板下载 1 passed(schedule-template-download.spec.ts)。ruff 对新增/修改模块 All checks passed,server/gateway/app.py 只余既有 I001,本轮新增行未新增告警。
  • 真实工作簿闭环:外部指定的参考工作簿(湖南锐扬APS精简演示数据.xlsx,路径只由调用方提供,不写入仓库)跑真实 Pi/LLM E2E 1 passed(2 次 Pi 调用,源文件 SHA 未变,隔离临时数据目录):分析后由 Pi 触发试排,5 张正式订单排入 3 张、2 张阻断、15 个工单(10 个带假设),solveStatus=PARTIAL_WITH_ASSUMPTIONS;同文件独立验收脚本 PASS(导入计数、插单排除、在制与维保约束逐项核对)。缺人员技能、在制可信度与缺料问题如实进入阻断与假设项,未用默认值掩盖。 浏览器侧「分析并采用 → 立即排产 → 下载 Excel」桌面端与移动端各 1 passed(1.6m / 2.1m);同轮「新项目导航」用例失败于模型网关 429 账号欠费(suspended due to insufficient balance)。
  • 真实 Pi 验收补跑(仅切换模型端点):工作区 .env 的 Moonshot key 仍欠费停用(429),本轮不改动 .env,只在调用方进程环境把 LLM_BASE_URL/LLM_API_KEY/LLM_MODEL 指向本机另一把可用的 OpenAI 兼容端点(SiliconFlow Pro/moonshotai/Kimi-K2.6)复跑:真实 Pi CLI + 真实工作簿 E2E 1 passed(2 次 Pi 调用、源 SHA 未变、PARTIAL_WITH_ASSUMPTIONS、3 张排入 / 2 张阻断 / 15 个工单、10 项试排假设);浏览器验收 planning-schedule-entry.spec.ts 3 passed(桌面 2.6m、移动 2.1m、新项目导航 1.1m)——导航用例的明细按钮断言原写前端兜底文案「产品和材料」,真实 Pi 路径来自服务端口径「产品和物料」,已改为两者兼容;模板下载 intake-template-download.spec.ts、schedule-template-download.spec.ts 各 1 passed。默认 .env 是否切到该端点需交付方确认,本轮未替用户改配置。
  • 导出下载回归用例:新增 apps/web/e2e/flex-export-download.spec.ts——用真实接口铺「导入 → 采用 → 排产」,再点柔性工作台「订单方案 / 设备方案」,断言下载事件、HTTP 200、PK 文件头与接口字节逐字节一致,并校验请求带应用鉴权 fetch 的 X-APS-Visitor-ID 头(旧的 href 直开导航给不出该头,桌面/头鉴权部署只会拿到 401)。隔离后端 1 passed(1.9s),intake-template-download.spec.ts、schedule-template-download.spec.ts 各 1 passed。
  • 意图识别确已下线:/api/chat 把每条自然语言统一包成 assistant.reply + _piPrimary,handle_intent 该分支只投递 Pi 结构化请求、不再做本地话术/关键词兜底(Pi 不可用时返回显式「智能助手服务暂不可用」)。锁此行为的 tests/golden/test_pi_primary_chat.py -k routes 2 passed(「分析一下数据文件」「根据这些数据排产」两条真实说法都直达 Pi)。

2026-09-04 — Pi Agent 外向接入 P0/P1 真实接通(/api/agent/* + Agent Token + Pi E2E)

  • 类型:feature + test + docs(不 commit/push)
  • 服务端:新增 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),不再自动投影 _POWER_MAP P0;业务只委托统一工具运行时。P1/P2 非只读意图返回 CONFIRM_REQUIRED,P3 返回 POWER_DENIED,未登记返回 INTENT_NOT_REGISTERED,全部 fail-closed 并写 AGENT DENIED 审计。
  • 凭证:新增 server/auth/agent_tokens.py 与 scripts/pi_agent_token.py(issue/list/revoke);HMAC 只读 token,含过期/吊销/scope/租户绑定;APS_AGENT_TOKEN_SECRET 缺失时签发与鉴权显式失败。AuthenticationMiddleware 对 /api/agent/* 的 Bearer 先行鉴权。
  • Pi 客户端:poc/pi-aps/extensions/aps.ts 提供 aps_health/aps_summary/aps_invoke 与 session_start 动态目录工具;支持 ~/.pi/aps.json、<PI_CODING_AGENT_DIR>/aps.json、APS_CONFIG_FILE 与环境变量优先级,token 只掩码展示后四位。
  • 验证:Pi Agent 专项与契约回归 33 passed;隔离 APS(127.0.0.1:8721、临时数据目录、Bearer token)真实返回 19 项只读意图目录;order.pool 调用返回真实 3 单;schedule.publish 正确拒绝 409。真实 Pi CLI + 剧本 LLM 走 APS_E2E_CONFIG_FILE_ONLY=1 E2E:serverHealth/toolExecutionStart/toolExecutionSuccess/finalAssistantStop 等 6 项全 PASS,产物无 token 原文、临时 aps.json 已清理;安全收口后 /api/agent/* 在 APS_AUTH_ENABLED=0 且无 Bearer 时返回 AGENT_TOKEN_REQUIRED,只读目录不再暴露 data.analyze/folder.analyze/report.generate。
  • 边界:P2 确认卡(写操作经 Pi 交互执行)、P3 MCP 总线治理、P4 全量发布门禁未完成;agent.token.issue/revoke 在权力矩阵登记 P2,当前 CLI 是运维通道,/api/agent/invoke 仍拒绝自动签发/吊销。

2026-09-04 — Pi Agent P4/P5 协同收口(P4 质量/注入/离线 golden;P5 发布准备文档)

  • 类型:test + docs(本轮未改产品代码;不 commit/push)
  • 做了什么:P4/P5 多 agent 收口轮完成质量 golden、注入防护黄金集、离线降级全集与发布准备 文档,保持既有治理边界。
  • 验证:test_fallback_p4_quality.py(Q-01..Q-40 + 指标聚合)44 passed; test_fallback_p4_injection.py(I-01..I-26 已产品化攻击面)57 passed / 1 skipped; test_fallback_p4_offline.py(O-01..O-10)24 passed;8 个兜底专项联合 197 passed / 1 skipped in 51.87s;P4 三文件与既有兜底测试 ruff All checks passed。 唯一 skip 为 Windows junction/symlink 环境显式跳过。
  • 收口:P3-VALIDATION/GOAL-P3 的 GO/NO-GO 时序矛盾修正(Agent-O §7);P3 判定按 FB-03-BUG-1 修复记录转 GO。真实 S6 24/24/S7 12/12 未在本轮重跑,依据 CHANGELOG 顶部修复记录与 smoke 结果文件复核。
  • 边界:Pi runtime 未进入发布包;桌面 sidecar 不透传 LLM_*/APS_FALLBACK_*; PENDING_SYNC 自动补推、per-step/token 指标、runId 过滤等另立后续任务。
  • 发布动作:无 commit/push/merge/publish;真实打包与康尼数据验收未执行。

2026-09-04 — FB-03-BUG-1 修复:S6 断连补录显式离线落账(P3 NO-GO 解除)

  • 类型:fix + test + docs
  • 做了什么:修复 P3 验证判定的唯一卡点 FB-03-BUG-1(S6 补录在真实 MES 断连下 100% 失败回滚——mes.apply_report 本地落账前无条件同步 post_report)。语义设计一句话:显式声明 + 断连事实双成立才走离线落账——S6 补录步 params 显式声明 offlineBooking: true,出卡闸与执行端双重实时探测(_probe_mes_connectivity() == "failed")核验断连事实后,apply_report(offline_booking=True) 跳过 post_report 本地落账,mesLinks 报工记录与审计 rationale 打 syncStatus=PENDING_SYNC 可识别标记;确认卡摘要明示「⚠ MES 断连:本地落账待同步」(审批人知情);恢复后对账报告逐行呈现 PENDING_SYNC(汇总计数 + 行内标记 + ALGO_RUN rationale.pendingSync)。自动补推属后续轮次(本轮边界,fallback.md 已标注)。
    • mes.py apply_report +keyword-only offline_booking=False(默认):在线路径(未声明)语义逐字节不变——先推 MES 后落账,断连即显式失败回滚;调用方 rg 实测 4 处(fallback_lane S6 执行器 / gateway app.py 报工 API / workflow.py 批量+单笔报工分支),全部不传新参零影响(LOW)。
    • fallback_lane.py:_validate_highrisk_step S6 分支滥用防线(非断连声明 offlineBooking → PlanError 拒绝出卡);_apply_mes_report_step 执行端再核验(审批窗口内 MES 已恢复 → DeviationError 熔断回滚);_stage_s6_item_cards 卡摘要断连明示行;_S6_BRIEF_SECTION 简报协议(断连必须声明 / 未断连严禁声明);_propose_s6_reconcile 回复与审计带 pendingSync 计数。
    • fallback_verify.py:reconcile_external 行级 pendingSync 识别(mesLinks kind=report + syncStatus=PENDING_SYNC);build_reconcile_report 汇总行 + 行内标记(三档判定口径不变)。
    • fallback_highrisk.py:validate_backlog_item 形态校验(offlineBooking 必须 bool)。
  • 验证:新建 tests/golden/test_fallback_offline_booking.py(6 例全确定性:O-1 离线成功路径(post_report 零调用 + PENDING_SYNC 标记 + 卡摘要明示)/ O-2 在线路径不变断言(镜像报工 +1、mesLinks 无 syncStatus 键、审计 rationale 键集原口径、全程零探测副作用)/ O-3 出卡闸滥用拒绝 / O-4 执行端滥用熔断回滚 / O-5 PENDING_SYNC 对账呈现 / O-6 非 bool 形态拒绝)6 passed;六文件联合(highrisk+execute+lane+feature_flags+attack+offline)78 passed;文档门禁 25 passed;ruff 改动文件与 HEAD 基线多重集比对零新增(6 = 6,全为 mes.py 既有)。S6 真实冒烟复跑 24/24 全 PASS(此前 19/24:段 C D3–D6/G1 全部转绿——真实 Pi 按新简报声明 offlineBooking,两笔断连补录离线落账成功 + PENDING_SYNC 标记在环,恢复后对账如实呈现待同步 2 笔;A/B/C/D/E/F/G/H 五阶段全过)。P3 出口标准第 3 项转 PASS,NO-GO 解除。
  • 冒烟设施修复登记(非产品):smoke_s6_reconcile.py D4 检查数据源修正——原实现读 approvals.json 的 history[].record.params,但历史条目只存 paramsHash 不存 params(恒空),该路径此前从未在通过态被验证;改为读 run 目录冻结计划 steps.params(唯一事实源),对账口径不变。
  • 影响分析:mes.apply_report 签名纯追加 keyword-only 默认参(4 调用方零影响 LOW);fallback_lane S6 分支新增双端探测只在声明 offlineBooking 时触达(在线路径零探测副作用,O-2 物理断言守护);fallback_verify 报告新增行(三档口径不变,H-16/F1/F2 既有断言全过)。无 HIGH/CRITICAL。
  • 文档同步:docs/architecture/harness.md 权力矩阵 mes.report 行 + 变更记录、docs/architecture/fallback.md S6 小节(离线落账/滥用防线/补推边界)、本节、P3-VALIDATION.md 复证节。
  • 边界:PENDING_SYNC 记录的自动补推/重放闭环属后续轮次;WMS 侧补录仍边界外(P3-DESIGN §11.10)。
  • 发布动作:无 commit/push/merge/publish。

2026-09-04 — FB-03 智能兜底 P3(高风险场景 + 白名单治理)

  • 类型:feature + test + docs
  • 做了什么:P2 计划锁之上加部署侧显式授权层——S4 沙盒试排 / S6 MES 断连补录 / S7 受控配置变更与白名单治理(agent.fallback.policy.update=P2、agent.fallback.ops.config.apply=P3)在 fallback-highrisk.json 白名单(fail-closed,每次裁决现读不缓存)下开放。白名单缺文件/损坏/审批窗口内被改 = 全场景拒绝;Pi 依旧没有任何新物理写能力。
    • server/agent_core/fallback_highrisk.py(新建,moduleId: core-fallback-highrisk):白名单加载与文档校验(未知场景键/未知字段/未登记 intent → 整文件判损坏)、场景步裁决(check_scenario_step 抛 HighriskDenied)、角色判定(身份角色不符 → propose 物理不可见)、validate_config_apply_params(出卡闸 check_hashes=False——Pi 无 sha256 工具,指纹由编排器机器再生成)、apply_policy_diff(Pi 只产 diff 声明,完整文档编排器再生成 + 复验)、canonical/file sha256。
    • fallback_lane.py(+~900 行):_PLAN_SCENARIOS 扩 7 场景;validate_plan P3 分支(frozen-only、拒 artifactRef、S4 expected 只许 sandboxOutput、S6 逐项世界对账、S7 出卡不查指纹);propose 闸 1.5(S4/S6/S7 信号归类 + 角色不符 return None 零 run 零审计)+ S6/S7 inbox 注入 + 三场景简报段;S6 逐笔独立确认卡(独立计划指纹、截断声明)/ S7 治理卡(机器填充指纹)/ S4 单卡 + 沙盒尾行 + whitelistSha256 入 params;execute_plan 白名单双端 sha256 比对(审批窗口变更即拒绝)+ S4 沙盒直调分支 + S6 兄弟卡世界指纹重锚(一笔落账后其余待批卡冻结指纹推进 + 信封哈希重算);_STEP_APPLIERS += mes.report。
    • fallback_verify.py += verify_sandbox_no_main_writes(前后指纹相等 + 执行区间零 WORLD_WRITE 物理断言)/ reconcile_external(MATCH/DRIFT/MISSING 三档)/ build_reconcile_report(对账永远不写)。
    • pi_bridge.py(+~280 行):export_integration_status(inbox/integration-status.md + pending-sync.json)、export_ops_diagnostics(inbox/ops/ 四文件,单文件失败归并占位 + _redact_ops_line 行级脱敏)、_PLAN_TASK_TEMPLATE {p3_sections} 占位(空时与 P2 渲染逐字节一致)。TOOL_REGISTRY 五键未动。
    • workflow.py execute_confirmed +2 分支:policy.update(beforeSha256 漂移比对 → 文档复验 → tmp+replace 原子写 + 回读校验 + .bak 备份留 5 份 → WORLD_WRITE 审计)与 ops.config.apply(consume_execution_grant → 漂移比对 → 原子写 → P3 审计含 grantId/双人 approvals/前后 sha256);两分支全异常归并显式失败。_atomic_write_json / _backup_config_file 工具函数。
    • harness.py:权力矩阵 +2 意图(+4 行);缺陷修复 refresh_confirmation_world_fingerprint 推进 beforeFingerprint 时同步重算 envelopeHash(原实现推进后信封自破——S6 第二张及以后确认卡实测必现「完整性校验失败」,调用方仅 fallback_lane 三处出卡路径,影响面 LOW)。
  • 验证:tests/golden/test_fallback_highrisk.py(新建 21 例 H-1..H-21 全确定性,对应 P3-DESIGN §8 矩阵:白名单损坏形态/场景裁决/角色不可见闸/S4 零写入断言/S6 逐笔卡+重锚+对账三档+断连显式回复/S7 双审批 SOD+grant 单次消费+原子写+漂移拒绝/policy.update 文档再生成+审批窗口变更拒绝/运维注入脱敏)21 passed;四文件联合(highrisk+execute+lane+feature_flags)65 passed;爆炸半径切片(confirm/审批/saga/checkpoint/chat/契约/导入 19 文件)195 passed;ruff 本轮全部新增/修改文件与 HEAD 基线多重集比对零新增(59 = 59)。Agent-N 终验(P3-VALIDATION.md):全量 golden 191 文件分批 1501 passed / 18 failed / 10 errors(stash 基线 9 文件逐例一致,全为 native sidecar 环境依赖与 MES/HTTP fixture 既有失败);文档门禁 25 passed;偏差⑦⑧攻击面专项 test_fallback_p3_attack.py(新建 7 例:第二张卡信封回归/旧卡伪造/参数篡改/重放/跨 run 重锚边界/非兄弟改动拦截/伪造兄弟)7 passed,联合 72 passed;真实 S6 冒烟(真实 server+Pi+kimi-k2.6+真实 MES HTTP 适配器)19/24——断连注入/S6 归类/真实 Pi 计划/逐笔卡/恢复后对账三档+证据冻结+纯读断言/对照组全过,但抓到产品缺陷 FB-03-BUG-1:段 C 补录写在真实断连下必败回滚(mes.apply_report 本地落账前同步 post_report,断连即 MesHttpError 上抛;golden 层 MockMesClient 结构性摸不到),判条件 NO-GO;真实 S7 冒烟 12/12 全过(脱敏实测/非 ops 物理不可见实测/双人链 H-20 覆盖登记)。
  • 影响分析:harness.py 矩阵纯追加 LOW、refresh 信封修复 LOW(3 调用方同受益);workflow.py 热路径 +2 精确匹配分支 MED(只有 P3 治理卡命中;缓解:分支体全异常归并 + 原子写无中间态);state/ 零改动只用公开 API;gateway/contracts/apps-web 零改动。无 HIGH/CRITICAL。
  • 文档同步:docs/architecture/harness.md 权力矩阵 +2 行 + 变更记录、docs/architecture/fallback.md 增 P3 章节、本节。
  • 边界:真实 MES HTTP 链路对账(MockMesClient 无 fetch_work_order/readiness,stub 下对账按 MISSING 如实呈现);S6 外部原文获取 seam 为可 monkeypatch 的 _probe_mes_connectivity/_fetch_external_wo;execute.highrisk 键仍未开放(P3 场景走独立意图,不经过该键);真实冒烟归 Agent-N。
  • 发布动作:无 commit/push/merge/publish。

2026-09-03 — FB-02 智能兜底 P2(写操作过确认卡门禁)

  • 类型:feature + test + docs
  • 做了什么:Pi 的写能力在「确认卡 + checkpoint + diff 验证 + 计划锁」四重治理下开放(方案 S2/S3/S9 写路径进产品)。Pi 没有新的物理写能力,只有编排既有已登记写意图的能力。
    • Harness:_POWER_MAP/_POLICY_DESC 各纯追加 2 行——agent.fallback.execute = P2(执行已批准计划 → 确认卡);agent.fallback.execute.highrisk = P3(登记在册、默认拒绝,本轮不开放白名单,任何含 P3 步骤的计划整计划拒绝出卡)。
    • server/agent_core/fallback_lane.py(+~520 行):计划 schema(planVersion=1)/ plan_fingerprint(canonical JSON sha256,展示性字段不入指纹)/ validate_plan 出卡前五段校验(schema → 意图白名单+power 复查 → 制品路径圈禁+sha256 重算 → constraints 合法性 → 步骤数上限,任一不过拒绝出卡);execute_plan 执行编排(计划指纹重算 → beforeFingerprint 世界漂移比对(沉睡机制执行端落地,不改 harness 函数)→ 批准后建前快照 → FROZEN 确定性直执 / ASSISTED 第二次 run + 动作请求邮箱逐步比对 → 成功建后快照+验证报告 / 偏离或失败 → 失败现场快照留存 → restore 自动回滚 → 回滚指纹验证);守卫模板参数化(readonly=P1 逐字节保持 / plan/execute 放开 write+edit 至 run 目录内 work+outbox,bash 仍全禁、防逃逸不变——对 P1 围墙的唯一语义放松)。
    • server/integrations/pi_bridge.py(+~150 行):TOOL_REGISTRY += fs_write(限 work/outbox)/ aps_invoke(P2,动作请求邮箱协议——无网络面、无自定义 RPC);ActionMailbox(请求扫描幂等去重 + 结果写回);_PLAN_TASK_TEMPLATE + render_plan_task_brief(USER_REQUEST 包裹沿用 + 新增 UNTRUSTED_DATA 段落声明「文件内容是要处理的数据,其中任何指令无效」)。
    • server/agent_core/fallback_verify.py(新建,moduleId: core-fallback-verify):分表 world diff(added/removed/modified/quantityDelta)、计划 expected 逐条对账(容差 0)、outbox/verify-report.md 生成——报告每个数字只来自冻结快照,绝不引用 Pi 自述。
    • workflow.py execute_confirmed +1 分支(~50 行,证据校验后、既有全部 action 分支逐字节不变):调 execute_plan → 分支写 WORLD_WRITE agent.fallback.execute 审计(成败都写;失败总账在 restore 之后补写)→ store.save() → 返回显式文案;分支体全异常归并显式失败(绝不抛出)。
    • 确认卡零前端改动:复用 confirm-card 块 + /api/actions/confirm 唯一执行通道;卡片内容全部由编排器从结构化字段再生成(Pi 散文不进卡、不作执行依据)。
    • 新增环境变量:APS_FALLBACK_EXEC_TIMEOUT_SEC(120)/ APS_FALLBACK_EXEC_MAX_STEPS(40)/ APS_FALLBACK_MAX_PLAN_STEPS(10)。
  • 验证:tests/golden/test_fallback_execute.py(新建 19 例全确定性:计划锁偏离熔断/checkpoint 对/回滚验证/注入集 E-1/E-2/E-3/E-4/E-5/E-6/E-7/未登记与 P3 意图拒绝/确认卡过期/意图落点 T-16/T-17)+ test_fallback_lane.py(13+2:守卫 readonly 逐字节保持 P1 语义 + plan/execute v2 模板断言)+ test_feature_flags.py 共 41 passed;受影响切片(confirm/审批/saga/checkpoint/chat/契约/导入 16 文件)118 passed;assistant/state 切片 24 passed;全量黄金两批 1090 passed / 3 failed / 14 errors(test_preference_features 日期炸弹 + test_mes_http/test_mes_readiness/test_trace_external_http 共 3+14——stash 基线复跑逐例一致,均为既有失败与本轮无关);ruff 本轮新增/修改文件 All checks passed!(harness.py/workflow.py 与改动前基线逐行比对零新增告警)。
  • 影响分析:按 P2-DESIGN §9(rg 实测)——harness.py 纯追加 LOW;workflow.py 热路径 +1 精确匹配分支 MED(只有 fallback 出的卡会命中;缓解:分支体全异常归并 + checkpoint 前置,最坏退化为「一次显式失败且已回滚的确认」);state/ 零改动只用公开 API;gateway/contracts/apps-web/tool_runtime/async_jobs 全部零改动。无 HIGH。
  • 文档同步:docs/architecture/harness.md 权力矩阵 +2 行 + 变更记录、docs/architecture/fallback.md 增 P2 章节、本节。
  • 边界:execute.highrisk 白名单(P3);S4/S6/S7 接线;异步执行与结果回投(async_jobs 评估后不复用——现有 jobs 全跑深拷贝快照、物理不写主干);Pi 进程内 RPC/HTTP 桥;分段确认自动编排;确认卡 UI 渐进增强;真实 S3 冒烟与注入复证归 Agent-K(poc/pi-fallback/ GOAL-P2 / P2-DESIGN / P2-IMPL-NOTES)。
  • 发布动作:无 commit/push/merge/publish。

2026-09-02 — FB-01 智能兜底 P1(只读)

  • 类型:feature + test + docs
  • 做了什么:意图未识别(assistant.reply/unknown 分支)时不再只回固定话术,而是拉起 Pi headless 做一次只读分析兜底(方案 S1/S5 进产品路径,草稿语义,不写主干世界)。
    • server/agent_core/fallback_lane.py(新建,moduleId: core-fallback-lane):兜底编排器——propose_reply 唯一接线入口(绝不抛出)、FallbackConfig/from_env、三重熔断(超时 90s / 步数 30 / 输出 2MiB)、白名单环境清洗 + PI_CODING_AGENT_DIR 配置圈禁 + taskkill 进程树回收、模型端点协商(GET /models,避开 P0 实测 404 坑,缓存 300s)、成败只看事件流 stopReason(pi 退出码恒 0 不可信)。
    • server/integrations/pi_bridge.py(新建,moduleId: integ-pi-bridge):围墙内工具桥——注册表只暴露 fs_read / aps_query(快照制)/ report_emit 三个只读项(写类工具刻意不登记);callId 凭证账(calls.jsonl,入参只落 sha256 摘要);报告引用校验(引用不存在的 callId = forged_citation 物理判败);fs_read 限 run 目录(resolve + is_relative_to);任务简报模板(USER_REQUEST 隔离标记防注入)。
    • Harness:_POWER_MAP/_POLICY_DESC 各纯追加一行 agent.fallback.propose = P1(仅权力登记动作名,不是意图枚举成员,contracts.py 未动)。
    • FF-01 开关:FEATURE_CATALOG 追加 fallback;新增 _DEFAULT_OFF_KEYS={"fallback"}——文件缺失/损坏/未配置/非 bool 时 fallback 默认 False(会拉起外部 LLM 子进程产生 token 成本,与其余键 fail-open 相反,有意取舍);/api/features 响应追加 defaultOff 字段显式标注。
    • 接线:workflow.py assistant.reply/unknown 分支 +8 行——开关开且意图未识别 → propose_reply;返回 None(开关关/空 query)时原路径逐字节不变;失败 = 原话术 + 一行显式失败说明(审计留痕)。
    • 设计张力处置(简报层):callId 凭证由编排器围墙外事后签发,真实 Pi 无法获知其值——原简报「引用必须标注 callId」会把真实路径误判 forged。处置:任务简报撤销强制标注,改为明示「凭证不可获知、不得编造、出现不存在的编号即判伪造成果整轮失败」;校验硬失败语义不动,伪造识别能力不变。
  • 验证:tests/golden/test_fallback_lane.py + test_feature_flags.py 19 passed(13 兜底全确定性 fake runner + 6 开关,含伪造凭证判败/三重熔断/默认关三态/路径越界);受影响回归切片(contract_sync/assistant/guidance/folder_pack/tool_runtime/gov_api + 聊天网关门禁 13 文件)83 passed;文档/端点门禁(doc_drift/health/openapi/rebuild)20 passed;全量黄金四批 1084 passed / 1 failed(test_preference_features::test_extract_features_from_world 为既有日期炸弹——dueDate 写死 2026-08-03/04,server/knowledge/ 与该测试文件 git diff 均为零,与本轮无关,建议另开轮次修);ruff 本轮新增/修改文件全绿(fallback_lane/pi_bridge/test_fallback_lane All checks passed!,修改文件零新增告警)。冒烟复证(2026-09-02,Agent-H):真实端到端冒烟首轮抓到守卫模板注释行未转义花括号(KeyError: ' block',fake runner 结构性盲区)与 node.CMD 垫片坑,修复(模板转义 + Windows 优先 node.exe + 新增 test_write_guard_extension_real_template_format 防回归)后原样代码复跑 poc/pi-fallback/smoke/smoke_e2e.py 七条判据全 PASS(真实 kimi-k2.6,run fb-20260902-075907-3af703,stopReason=stop,steps=2,13.0s,凭证 valid,审计 SUCCESS 落租户世界哈希链,收尾零残留)——详见 poc/pi-fallback/P1-SMOKE.md §7,P1 GO。
  • 影响分析:GitNexus MCP 不可用,按 P1-DESIGN §7 rg 盘点 + 人工复核——harness.py 纯追加 LOW;feature_flags.py 产品调用方仅 /api/features(响应纯增量),三条 all-enabled 既有断言同轮修复 MED;workflow.py 聊天热路径接线 MED(缓解:默认关 + propose_reply 不抛 + 90s 硬熔断,开关关时逐字节不变已被测试断言)。无 HIGH/CRITICAL。
  • 文档同步:docs/architecture/harness.md 权力矩阵 + /api/features 条目 + 变更记录、新建 docs/architecture/fallback.md(登记进 architecture/README.md 索引)、本节。
  • 边界:P1 不做写操作/确认卡执行/pi 进程内实时工具/异步回投/桌面打包/SSE 转发;真实 pi 端到端冒烟未做(本轮全 fake runner,需带 key 环境按 P0 方法补);凭证引用从「强制」降级为「出现即必须是真」的防伪绊线(见 fallback.md 凭证语义节);token 预算以输出字节数近似。协同交接物:poc/pi-fallback/(GOAL-P1 / P1-DESIGN / P1-IMPL-NOTES / P1-VALIDATION)。
  • 发布动作:无 commit/push/merge/publish。

2026-08-26 — FF-01 功能开关(Feature Flags)文件化配置

  • 类型:feature + test + docs
  • 做了什么:用一个 JSON 配置文件控制哪些功能上线可见、哪些隐藏不用。
    • 后端 server/agent_core/feature_flags.py(moduleId: feature-flags):12 键功能目录(visual/orders/master/flex/timeline/drawing/mesh/knowledge/skills/gov/regen/settings,中文标签);配置文件默认 server/data/features.json、APS_FEATURES_PATH 可覆盖;格式 {"version": 1, "features": {"drawing": false, ...}}。
    • 语义:可用性/可见性开关,不是权限边界(P2/P3 权力路径仍由 Harness 独立保证);fail-open 诚实回退——文件缺失/损坏/version 非法 → 全部默认开启并显式携带 source/error,未知键列入 unknown,非 bool 值该键回退默认开启并记录错误,绝不因配置问题锁死界面。
    • 网关:GET /api/features(P0 只读,登录后可读,每次请求实时读文件——改文件刷新浏览器即生效,无需重启)。
    • 前端 apps/web/src/features/flags.ts + 接线:右侧导轨 7 个工具按钮、左侧栏 6 个快捷入口(ProjectPanel)、顶部中文菜单(AppMenuBar,按动作映射过滤+清理分隔线/空菜单组)、Ctrl+K 命令面板(面板/视图条目按开关过滤)四处入口全部按开关隐藏;未加载/拉取失败 fail-open 全部可见;当前展开的工具被禁用时面板自动隐藏。
  • 验证:tests/golden/test_feature_flags.py 6 passed(默认全开/配置生效/损坏 fail-open+error/非 bool 回退/env 覆盖/端点契约);端点与文档漂移回归(health/openapi/doc-drift/contract-sync/rebuild)32 passed;全量黄金三批 1071 passed / 1 failed(test_preference_features 为既有失败,与本轮无关);npm run build(tsc + vite)passed;ruff 本轮新增文件全绿(app.py 既有基线未扩散)。
  • 影响分析:GitNexus MCP 不可用,人工影响分析——feature_flags 新模块零既有调用方;app.py 纯增量端点;前端四处入口为展示层条件渲染,无契约/类型变更(types.ts 未动)。爆炸半径 LOW。
  • 文档同步:docs/architecture/harness.md 只读端点备案、本节。
  • 边界:开关只隐藏入口,不拦截后端业务端点(如需端点级下线需另行设计,且不得替代 Harness 门禁);桌面端与 Web 端共用同一配置;server/data/features.json 为现场数据不入库。
  • 发布动作:无 commit/push/merge/publish。

2026-08-20 — Round 84 经父进程验证的 CP 时间直接物化

  • 类型:algorithm + materialization + security + regression + browser
  • 直接物化:可行 CP/HYBRID operationSlots 经父进程重验后绑定 _cpOperationTiming;RuleEngine 仅持久化版本/PO/WO,精确消费 plannedStart/End、plannedSegments、processing/elapsed/pause/count 与 CP 资源身份,不再重新占槽计算时间。
  • 写前门禁:稳定订单项、默认路线双射、line/workstation/team/tooling、segment 汇总、C1 前后序、C2/C12 容量、C3 日历 digest/window 与 C7 口径均在创建业务对象前验证;窗口漂移和容量伪造失败关闭。
  • 诊断兼容:父校验器识别 C2/C12 整约束移除与 C12 RHS 正增量的合法反事实,避免把诊断可行解误拒,同时不放宽生产求解。
  • 元数据:placement=cp-calendar-segmented-direct、directlyConsumedByMaterializer=true、operationTimingValidation.passed=true;C3 cpTimingApplied=true,C7 保持 start-day-full-duration.v1。
  • 浏览器:隔离 CP V20260820-001 与 HYBRID V20260820-002 均 FEASIBLE,各 7 PO / 30 WO / 30 slots;C3 30/30 精确对齐、C7 passed,无 CALENDAR/CAPACITY/ENGINE_UNAVAILABLE,页面可见且 console0。
  • 回归:初跑暴露 13 项累积失败;修正旧固定日期日历夹具和诊断父校验后,CP/RHS 81、扩展171、最终 full golden 1540 passed / 5 warnings;既有聚焦142、Node60、Web build、compile/diff-check 通过。
  • 边界:主项目 V006 因 0 个标准排产条目为 TRIVIAL,不作为正向证据;内部 solverMeta 仍保存路径级 runtime provenance,新增公共投影前须脱敏。真实 MySQL、MES/WMS/SAP、现场费率/罚则、签名/Defender/干净离线机仍需外部输入;未 commit/push/merge/publish。

2026-08-20 — Round 83 C3 班次日历分段 CP 模型

  • 类型:algorithm + calendar + security + async + frontend + test
  • CP 模型:新增 cp-calendar-segmented.v1;班次扣休息形成有效窗口,长工序只在窗口边界暂停/续作。C1 使用逻辑工序包络,C2/C12 使用 processing segments,C2 实例按逻辑工序计数。
  • C3 诊断:baseline 为 calendar-boundary-only,整约束 removal 为互斥 continuous;anchor/horizon/coverage、calendar digest、bucket/window/segment 数和模型 identity 绑定父子进程协议,50,000 segment 门禁失败关闭。
  • 求解与输出:operationSlots 输出 segments/processing/elapsed/pause/count/compliance/mode;主求解不固定 hint,UNKNOWN 后才允许固定可行 hint fallback 并完整留痕。
  • 物化边界:Rule 尚未直接消费 CP segments;连续物化跨休息或停工窗口生成 CALENDAR -> C3_calendar 硬冲突,关闭发布/MES 下发但不覆盖 CP solve status。C7 继续保持 start-day 整笔分钟语义。
  • 回归收口:全量测试发现累积工作区 PoolEngine 把 KITTING_FIRST/SKILL_FIRST 回落为 BOTTLENECK;按 GitNexus HIGH 风险门禁做最小模式白名单/排序修复,原失败3项和相邻62项通过。
  • 验证:C3 专项11、扩展245、审计聚焦117、最终 full golden 1522 passed / 5 warnings;Node60、Web build;冻结 Sidecar protocol v2 2段→1段/runtimeSafe/topology一致;隔离 Web C3 [0,489000]、API 模式与拓扑一致、console0;受保护哈希不变。
  • 边界:下一本地优先级为直接消费经验证的 CP 时间进行物化;真实现场费率/罚则、MySQL 多主机、厂商联调、签名/Defender/干净离线机仍需外部输入;未 commit/push/merge/publish。

2026-08-19 — Round 82 C7 产线/日容量 CP 硬约束与实例增量

  • 类型:algorithm + calendar + security + async + frontend + test
  • CP 模型:新增 C7 line/day start-day 整笔分钟约束;routing setup、运行分钟、激活顺序换型和既有已发布/冻结固定负荷均计入,效率只折算工时,件/日产能字段不冒充分钟 RHS。
  • 日历失败关闭:自然日容量来自显式 shiftCalendar 有效分钟;缺覆盖、跨午夜/重叠班次、非法休息段拒绝,非工作日为 0。
  • 诊断协议:protocol v2 新增 C7_line_day_capacity_minutes 单实例扰动;line/date、calendar 拓扑、候选负荷项和 RHS 差值绑定。
  • 成本/API/UI:instanceIncrements / instanceCostRates 严格 422;/api/master 返回逐线 workingDates,Web 禁用非工作日并选择 ACTIVE 产线、分钟和可选实例费率,展示 869→929、实例成本与非物化班次边界。
  • 物化复核:CP/Hybrid 后置 exact C7 校验;Rule 5% 阈值未覆盖的超载补 CAPACITY 阻断,不篡改 CP solve status。
  • 验证:full golden 1504 passed / 5 warnings;C7 专项 26、联合 206、Node60、Web build;冻结 Sidecar C7 869→929/改善51000;隔离 Web workingDates/实例成本/console0 通过。
  • GitNexus:13,846 nodes / 63,569 edges / 620 clusters / 300 flows;累计 CRITICAL(76 files / 621 symbols / 104 flows)。
  • 边界:跨班暂停/续作、CP 日历窗口和 CP 时间直接物化仍未完成;未 commit/push/merge/publish。

2026-08-18 — Round 81 CP RHS 参数增量重解与现场成本口径

  • 类型:algorithm + security + async + frontend + test
  • 协议隔离:solver process v2 新增独立 RHS baseline/perturbation operation;生产、整约束移除和 RHS 诊断互斥,strict schema、invocation、request/response digest 与扰动回显绑定。
  • 模型语义:C8 只放宽延期目标 due RHS;C12 只增加具体且真实激活的班组/工装 Cumulative capacity。C7 未进 CP 可行模型,不输出虚假 C7 结果。
  • 结果口径:OPTIMAL 精确有限差分,FEASIBLE 只给改善区间;拓扑/RHS 漂移、矛盾区间和单调性异常失败关闭,明确不是对偶或货币净收益。
  • 成本校准:无显式费率时所有货币字段为 null;显式费率按交期容差分钟或容量单位/本次计划期估算,目标与成本不可相减。
  • 异步/UI:新增 cp-rhs.recompute 严格 422、认证作用域绑定、取消边界、C8/C12 参数输入和按资源结果抽屉。
  • 验证:full golden 1478 passed / 5 warnings;专项 43、扩展 180、Node 60、Web build;冻结 Sidecar RHS C8 60 分钟改善 18000;隔离浏览器无费率/显式费率与 console0 通过。
  • 边界:真实现场费率/罚则、C7 产线/日产能模型和外部验收仍未完成;未 commit/push/merge/publish。

2026-08-18 — Round 80 CP 整约束 one-at-a-time 重解

  • 类型:algorithm + security + async + frontend + packaging + test
  • 协议隔离:solver process v2 拆分生产/诊断 operation;strict schema、单 relaxed ID、invocation 防重放、所有状态响应回显与 assumption/实例绑定。
  • 模型语义:C11 完整移除起点门槛和冻结障碍;按真实实例数判 active;诊断固定单线程 seed0 和输入/目标摘要。
  • 结果口径:OPTIMAL 精确差;FEASIBLE 只给界限区间;单调性违反失败关闭,异常行使报告 partial;明确不是对偶或单位边际。
  • 异步/UI:新增 cp-marginal.recompute 严格 422 和结果表,租户/项目/并发/取消复用 JobQueue。
  • 冻结验收:stdout UTF-8 bytes 修复冻结中文 digest 漂移;冻结 EXE 真实执行 protocol v2 baseline/removal,C2 改善 28000。
  • 验证:full golden 1435 passed / 5 warnings;专项 36、扩展 144、Node 60、Web build;隔离浏览器 C1/C11/C2 精确改善、未激活项正确、console0;受保护哈希不变;独立审计 AUDIT PASS。
  • GitNexus:13,718 nodes / 63,141 edges / 636 clusters / 300 flows;compare main 累计 CRITICAL(73 files / 575 symbols / 90 flows)。
  • 边界:下一项为 RHS 参数增量重解和现场成本校准;未 commit/push/merge/publish。

2026-08-18 — Round 79 诊断 LP 局部边际率与归因校准

  • 类型:algorithm + attribution + frontend + packaging + test
  • 双口径保留:原日志代理继续标“近似影子价”;新增 GLOP 诊断 LP,有限差分为主值、cap dual 仅作一致性证据。
  • 诚实边界:只支持 C4/C7/C8 分钟 RHS;明确不是 CP-SAT 对偶、one-at-a-time 且跨约束不可加。非时间型、无物理 RHS、非有限值和 solver error 不输出 rate。
  • 失败关闭:conflictId 全局校验先于约束分组;不一致重复、solver error 使顶层一致性失败;一致 ID、物理 RHS 去重和冲突重复分开留痕/展示。
  • UI/冻结:冲突中心展示局部率、1 分钟收益、dual 证据、覆盖率与排除原因;冻结 Sidecar probe 增加 GLOP objective/dual 并通过。
  • 验证:full golden 1399 passed / 5 warnings;专项 26、扩展 108、Node 60、Web build;隔离浏览器真实 C7 rate=1/1分钟收益=1/coverage=1/1、console 0;受保护哈希不变;独立复审 AUDIT PASS。
  • GitNexus:13,613 nodes / 62,939 edges / 604 clusters / 300 flows;compare main 累计 CRITICAL(68 files / 541 symbols / 90 flows)。
  • 边界:原调度变量级 LP 松弛/CP 目标重解仍待后续;未 commit/push/merge/publish。

2026-08-18 — Round 78 Sobol 全局敏感性与冻结 Sidecar

  • 类型:algorithm + security + frontend + packaging + test
  • Sobol/Jansen:独立 run_sobol_sensitivity 保持旧敏感性契约不动;2d scrambled Sobol、5 因子、Jansen 一阶/总效应、8~64 基础样本;seed/startDate/评估次数/方差完整输出。
  • 确定性与取消:日期只来自请求或 world.businessDate;逐评估调用 JobRecord 取消检查。零方差返回不可识别 null,不伪装为无影响。
  • 异步安全/UI:sobol.recompute 提交前严格 422,复用 tenant/project/actor/队列上限;SkillConsole 增加日期、样本、指标和结果表。
  • 冻结依赖:SciPy 同步三份依赖和 Sidecar lock;真实构建发现并修复 _sobol_direction_numbers.npz 漏打包,冻结 EXE probe 显示 scipy=1.18.0 且健康冒烟通过。
  • 验证:full golden 1381 passed / 2 warnings;focused 61、相邻 62、Node 60、Web build;浏览器真实提交 8 样本完成 56 评估、退化告警正确、console 0;受保护哈希不变;独立复审 AUDIT PASS。
  • GitNexus:13,553 nodes / 62,789 edges / 601 clusters / 300 flows;compare main 为累计 CRITICAL(66 files / 535 symbols / 90 flows)。
  • 边界:下一本地项为真实 LP/CP 对偶影子价与归因校准;外部环境项保持 Partial;未 commit/push/merge/publish。

2026-08-18 — Round 76 康尼真实数据 Web 全流程试排

  • 类型:feature + security + frontend + real-data + multi-agent
  • 10 单导入:Sheet2-Sheet9 通过 工时.xlsx 规范工序序列安全匹配;BOM 独立按结构化工单编号跨 sheet 归集。等价多候选可确定性复用,内容冲突失败关闭;10/10 订单、72 条工序、26 个唯一工序、965 条源 BOM / 823 条投影 BOM。
  • Web 真实路径:创建项目 -> 上传 9 份 XLSX -> “分析一下数据文件” -> “根据这些数据排产” -> P2 卡 -> 候选世界 trial。冻结 bytes、source manifest、payload、project/session/world/snapshot 和摘要全部绑定;apply/schedule/save 失败原子回滚。
  • 诚实边界:试排版本为 10 VL / 72 WO / 10 DELAY,productionReady=false;40/41 台设备无真实能力,40 套模具均缺工序/设备/寿命映射,共享设备仅占位。不得生产发布或下发 MES。
  • 策略/MPS/导出:五模式全部展示;DEGRADED/PARTIAL 不进入推荐,现场缺口下状态为 TRIAL_ONLY。MPS 草稿支持 JSON 数字稳定哈希、保存 trace、精确关联本地柔性版本及 gap 复算;订单/设备 XLSX 显式绑定 versionId,Web 下载入口已接通。
  • 验证:focused 合并态 136 passed / 2 warnings;最终 full golden 1352 passed / 2 warnings;Node 60 passed;Web build 通过;真实浏览器 9 文件上传/P2/10VL/72WO/五策略/MPS/双导出通过,最终新标签 console warning/error=0;源文件和 4 个受保护业务文件哈希不变;独立复审 AUDIT PASS。
  • GitNexus/风险:13,512 nodes / 60,478 edges / 603 communities / 300 flows;detect_changes(compare main) 为共享脏工作区累计 CRITICAL(56 files / 482 changed symbols / 77 affected);未 commit/push/merge/publish。

2026-08-17 — Round 75 CP-SAT 原生不可行核心 solverMeta

  • 类型:algorithm + observability + test
  • C1/C2/C10/C11/C12 约束族增加 assumptions;原约束在授权全 true 时保持同等语义。
  • INFEASIBLE 时通过 OR-Tools SufficientAssumptionsForInfeasibility() 输出 nativeIis,约束 ID 与目录一致。
  • 明确标注 sufficient assumption core、isMinimalIis=false,不宣称数学最小 IIS或真实影子价。
  • 验证:CP focused 24、solver affected 79、full golden 1302 passed / 2 warnings;受保护哈希不变;AUDIT PASS。
  • GitNexus:13,243 nodes / 60,042 edges / 580 clusters / 300 flows;累计 CRITICAL(53 files / 384 symbols / 66 flows)。
  • 边界:下一本地项为 Sobol/生产级敏感性;未 commit/push/merge/publish。

2026-08-17 — Round 74 归因 API 与冲突中心接线

  • 类型:feature + safety + frontend + test
  • 新增 /api/attribution,绑定项目世界、fixed/flex 轨道和单一排产版本;无版本或错轨版本返回 404。
  • 修复 flex 延误误引用 fixed 产能冲突;IIS 增加稳定 iisId,attribution evidence 纳入前端类型与详情展示。
  • FlexPanel 冲突页展示主控约束、IIS、证据引用与原始证据;isShadowPriceProxy 明确显示“近似影子价”。
  • 项目/会话切换触发重载,请求开始/失败清空旧报告,避免跨项目陈旧归因。
  • 验证:focused 12 passed / 1 warning;Web build;full golden 1301 passed / 2 warnings;受保护哈希不变;独立复审 AUDIT PASS。
  • GitNexus:13,232 nodes / 60,021 edges / 578 clusters / 300 flows;累计 CRITICAL(51 files / 378 symbols / 65 flows)。
  • 边界:下一本地优先级为 CP-SAT IIS solverMeta 与 Sobol/生产级敏感性;未 commit/push/merge/publish。

2026-08-17 — Round 73 Automation G4 授权载荷绑定与真实确认接线

  • 类型:security + automation + governance + regression
  • 完整授权:G4 升权请求强制 automation-authorization.v1,包含完整 Rule、harnessAction、power、BusinessActionBinding;request 与 grant 消费前重复校验,残缺快照直接拒绝。
  • 持续绑定:EscalationGrant 保存 authorization snapshot/digest;每次执行前按当前规则和 binding 重算,params/action/trigger/guardrails/gear/room/binding 7 类漂移均撤销旧 grant。
  • 执行边界:删除 G4 P2/P3 进程内 handler 直通;只有完整 Binding + business_bridge 可执行,缺失按 P3 DENIED。ruleId 替换与一次性 executionGrant 重放均拒绝。
  • 真实 API:/api/actions/confirm 与 batch 识别 automation.gear.escalate;第一重保留待办,第二名审批人后铸造绑定 grant。TestClient 两身份正向验证后真实业务桥把 DRAFT 版本发布为 PUBLISHED。
  • 验证:Automation focused 24 passed / 1 warning;审批/治理相邻回归 92 passed / 1 warning;全量黄金 1300 passed / 2 warnings;4 个受保护业务文件 SHA-256 不变;Ruff、diff-check、8003/5173 与浏览器通过;独立复审 AUDIT PASS。
  • GitNexus:最终索引 13,217 nodes / 59,833 edges / 580 clusters / 300 flows;detect_changes(compare main) 为累计 CRITICAL(49 files / 349 symbols / 62 flows)。
  • 边界:P0 本地清单闭合,下一本地优先级为 R71.5 算法归因/API/UI;外部 MySQL、厂商系统、模型与发布环境继续保持 Partial;未 commit/push/merge/publish。

2026-08-17 — Round 72 工程目录排产 P2 冻结信封与 TOCTOU 关闭

  • 类型:security + governance + regression
  • P2 边界:删除 SQL 完整数据的 folder.schedule.sql_direct 直通;所有工程目录排产都只生成 P2 确认卡,stage 在深拷贝沙盒解析,主业务世界与排产版本零变化。
  • 同源冻结:工程目录表格/SQL 一次读取为 immutable bytes;source manifest SHA、Excel/CSV 解析和 SQL 规范 payload 共用该字节流。confirm 前复核活动目录 manifest,执行只消费冻结 payload,不重读路径。
  • 信封门禁:全 P2/P3 记录新增 envelopeHash,与 paramsHash 一起在 file/database 决策回调内重算;folder 再绑定 action/project/world/session、source/world/payload/snapshot 四证据,篡改或旧卡失败关闭。
  • 原子失败:folder import、readiness、trial schedule 全部运行在候选世界;仅全部成功后一次落主世界。import/schedule/save 三点故障注入均 DENIED,业务指纹、版本与 DB 投影不留部分状态;Plan 节点延迟到提交成功后 APPROVED。
  • 审计修复:首轮发现 SQL 绕 P2、stage 污染、失败非原子;复审追加“临时 ORD1→ORD2→ORD1”换源攻击。全部修复后最终 AUDIT PASS。
  • 验证:专项 14 passed;审批/folder 相邻回归 108 passed / 1 warning;全量黄金 1290 passed / 2 warnings,4 个受保护业务文件 SHA-256 前后不变;Web build、Node 60/60、8003/5173、浏览器和 git diff --check 通过。
  • GitNexus:最终索引 13,220 nodes / 59,755 edges / 607 clusters / 300 flows;detect_changes(compare main) 为累计 CRITICAL(46 files / 328 symbols / 62 flows),按共享 Harness/Workflow 高风险变更验收。
  • 边界:下一本地 P0 为 Automation G4 payload 绑定;真实 MySQL 多节点、MES/WMS/SAP、模型服务和发布环境仍需外部输入;未 commit/push/merge/publish。

2026-08-17 — Round 71 最终安全收口与真实运行验收

  • 类型:security + regression + browser + docs
  • 安全收口:治理 CRUD/启停统一走真实 P2 与认证 actor;MPS 追踪按 tenant/project/world 隔离并冻结 draft/hash/replay;图纸路径按项目根严格隔离、原子上传、响应绝对路径脱敏,AI 候选保持 PENDING_REVIEW 与证据审核;主数据确认绑定显式 world hash,漂移失败关闭;前端取消自动批准。
  • 确定性与契约:订单/设备 XLSX 归一化 ZIP 元数据;固定方案 7 策略、柔性对比 5 模式、公开意图 9 策略;康尼固定轨保留实测/工时表/推断来源。
  • 独立审计修复:首轮 4 个 P1 全部关闭:显式项目不再被 APS_DRAWING_ALLOWED_ROOTS 扩权;同名上传在元数据/文件替换失败时补偿恢复;MPS trace/L2 任一持久化失败均不留孤儿;齐套/技能口令保留 KITTING_FIRST/SKILL_FIRST。最终复审 AUDIT PASS。
  • 验证:四个审计修复文件 focused 37 passed / 1 warning,相邻回归 74 passed / 1 warning;全量黄金 1276 passed / 2 warnings,4 个受保护业务文件 SHA-256 前后不变;Web build、Node 60/60、隔离图纸 Playwright 3/3、git diff --check 通过。
  • 真实运行:当前代码重启后 8003/5173 和前端代理健康检查均 HTTP 200;浏览器主界面可见且 console warning/error 为 0。GitNexus 重建为 13,161 nodes / 59,619 edges / 604 clusters / 300 flows,detect_changes(compare main) 为累计 CRITICAL(44 files / 295 symbols / 58 flows)。
  • 边界:真实 MES/WMS/SAP、ASR/VLM/OCR、冻结 Sidecar、签名/信创/CI、MySQL 多主机、WORM/HSM-KMS 与现场 39 缺工艺/67 缺能力仍需外部输入或环境;未 commit/push/merge/publish。

2026-08-17 — 多智能体阶段 A 剩余切片(MPS 接线/五模式/导出/康尼映射验证)

  • 类型:feature + test + coordination
  • 做了什么:
    • 多智能体协作:MPS 计划台接线、策略/导出增强、康尼数据验证三个 sub-agent 并行实现,主智能体集成收口;sub-agent 间通过 supervisor 转发互发握手与完成摘要(子会话未暴露 send_input,由协调层代传)。
    • MPS 计划台:Web 端新增保存草稿、追踪列表/详情、gap 对比与结果摘要(postMpsPersist/fetchMpsTraces/fetchMpsTrace/postMpsGap);/api/mps/persist 的 createdBy 契约限定 LLM/USER/SYSTEM。
    • 排产对比:柔性 compare_sort_modes 扩展为五模式(正排/倒排/瓶颈锚/齐套优先/技能优先),对话与矩阵文案同步五模式。
    • 导出:新增工单角度/设备角度调度方案 xlsx(/api/reports/schedule-order、/api/reports/schedule-equipment)。
    • 康尼数据验证:生成/更新 康尼/数据 两份映射表并跑通保守验证(41 台设备、40 套模具、2 订单/20 WO);发现 Sheet2-9 命名、主订单工时、模板表头口径三个问题。
    • 集成修复:解析器兼容带括号说明的模板表头;主订单完整路线文件回填 工时.xlsx 真实值;五模式文案同步。
  • 验证:相关黄金测试 82 passed / 1 warning;Web build 通过;git diff --check 通过。

2026-08-17 — 康尼设备/模具映射导入与齐套/技能优先策略

  • 类型:feature + test
  • 做了什么:
    • kangni_intake.py 新增「设备能力映射模板」「模具适配映射模板」识别与解析(parse_equipment_capability_map / parse_mold_adaptation_map),有表时用真实设备能力、单件工时、可动率、移动耗时、模具寿命与适配设备排产;缺表回退合成共享工位/不占模具槽。
    • 康尼订单补充 kitStatus 与 requiredSkillLevel,为齐套优先/技能优先策略提供数据。
    • 新增策略模板 KITTING_FIRST(齐套优先)与 SKILL_FIRST(技能优先):RuleEngine 排序、PoolEngine 柔性派工排序、方案沙盒对比、LNS 插单均支持;workflow 中文文案同步。
  • 验证:康尼导入/柔性/规则引擎/方案对比相关黄金测试 36 passed;git diff --check 通过。

2026-08-14 — 康尼工时表接入与 MPS 计划台 Web 接线

  • 类型:feature + test
  • 做了什么:
    • kangni_intake.py 新增「工时.xlsx」识别与 parse_std_time_sheet/load_std_time_map:按订单 sheet 读取 标准工时/分钟 真实值,工艺路线标准工时空值优先回填,来源写入 stdTimeSource=工时表,无值时才走推断兜底;build_flex_bundle 与 load_site_into_world 同源订单导入同步启用。
    • Web 计划台接入 MPS:/api/mps/draft 客户端封装与类型契约,PlanBucketsView 新增「MPS 草稿」页签(DAY/WEEK/MONTH/HYBRID、有限/无限、含预测/仅确定、桶负荷与状态表)。
  • 验证:康尼导入与 MPS 相关黄金测试 19 passed;Web build 通过;git diff --check 通过。

2026-08-12 — 排产缺口傻瓜式引导与 Web 向导渲染

  • 类型:feature(AG-07 增强)
  • 做了什么:新增 scheduling_data_guide() 排产数据缺口步骤引导(缺订单/产品/工艺/设备/班次/工时/物料,逐项给出人话说明、怎么补和一键口令);guidance.next、readiness.query 与柔性排产阻断分支自动附带引导块;Web 端补渲染 readiness/wizard/clarify 块,引导卡支持步骤清单与按钮,非专业人员可跟着「带我排一版」一步步补数据。
  • 验证:新增黄金测试 3 项(空世界缺口清单、最小完整数据 ready、guidance.next 引导块);test_guidance.py 全绿。

2026-08-12 — Round 71 未完成功能补齐(R71.1/R71.2/R71.3/R71.4/R71.6 本地切片)

  • 类型:feature + test + docs
  • 做了什么:
    • R71.1:上传白名单支持 .dxf;DrawingPanel 新增「从项目已上传文件选择 / 批量解析 / 直接上传 DXF」;新增 GET /api/projects/{id}/drawing-files 与 POST /api/drawings/inspect-batch,每张图纸独立候选变更集;权限/类型/超限错误改中文可读提示。
    • R71.2:新增 drawing_understanding.py,标题栏/图框/BOM 表区域聚类识别、图号/版本交叉验证、候选带置信度与证据;workflow 审核通过后生成 drawingLink 证据;版本 diff 触发重排建议。
    • R71.3:新增工位/设备 CRUD(停用不进排产)、BOM/工艺版本发布/回滚、班次日历周模板;新增 /api/masterdata/* 与 MasterDataPanel,写动作走 P2 审计。
    • R71.4:新增 mps_planning.py 与 /api/mps/*:MPS 草稿、有限产能粗评估、计划→排产→发布→执行反馈可追溯、计划层与排产层 gap 对比。
    • R71.6:新增 /api/governance/rules 规则 CRUD/启停/审计轨迹、/api/gov/audit/stats 审计聚合与 GovernancePanel。
  • 验证:DXF 黄金 18 项 + 图纸 E2E 2 条;R71.2 8 项;R71.3 5 项 + 聚焦回归 106 项;R71.4 7 项 + 相邻回归 24 项;R71.6 9 项;Web build 通过;git diff --check 通过。
  • PDF 补充:上传白名单与面板支持 .pdf;新增 inspect_pdf()/render_pdf_preview(),项目图纸清单与批量解析同时识别 DXF/PDF,PDF 预览渲染首页 PNG;候选仍走 drawing-master-candidates.v1 与 P2 门禁。
  • PDF 验证:新增 PDF 黄金测试 5 项(解析契约、PNG 预览、上传/清单、HTTP API、批量解析)。
  • 图纸体验与准确性:图纸预览支持全屏查看整图;修正比例文本 M1:1 被误识别为螺纹规格 M1 的问题,标题栏/比例/格式字段回归测试补齐。
  • 工艺/工序识别:新增 drawing_process.py,从图纸文本与 BOM 零件名识别车削/铣削/钻孔/磨削/螺纹/焊接/热处理/涂装/装配等工艺候选,以及表面粗糙度、公差、螺纹规格、深度、材料等细节;全部 PENDING_REVIEW,标准工时/资源不推断。
  • 图纸管理与 AI 精确解析:新增单张删除与项目清空接口和前端按钮;新增 /api/drawings/{id}/ai-analyze,配置 LLM Provider 后执行 AI 结构化精确提取,未配置/失败时 fail-closed 回退确定性解析,绝不编造。
  • 中文工艺文档结构化:新增 recognize_process_text() 与 /api/drawings/analyze-text,可把分段建造说明解析为分段/组立/工序/场地/装配顺序候选;图纸详情新增“工艺关键信息”页签展示分段、组立、场地与顺序。
  • AI 返回容错:模型返回 markdown 围栏/双重编码 JSON 时自动解析;chat_json 失败后用 chat_text 兜底重试;不可用时前端显示中文原因,不再裸展示 provider-invalid-json。
  • Web 上传 413 修复:新增 deploy/nginx-aps.conf(client_max_body_size 100m)与排查文档;前端 413 提示改为部署层限制说明;新增 2.5MB 上传回归测试,确认应用层不拦截小文件。

2026-08-04 — Round 69 北海造船场景 SYNTHETIC APS 完整数据包

  • 类型:feature + data + validation + safety + docs
  • 做了什么:实现确定性船厂 APS 数据生成器和 full 数据包,覆盖 4 项目、WBS/工程发布、EBOM/PBOM/MBOM、库存/MRP、MAKE/BUY/OUTSOURCE、12,000 工序有限排产、质量返工、MES 执行、7 方案、15 异常、20 Skill、20 类 RAG。
  • 审计整改:关闭委外前后工序/供应商/运输/月产能、manifest/world 闭包、附件委外 19 字段、15 类异常逐项、WorldStore 甘特、硬约束空覆盖、返工无产能、场景假变化、validation 占位与日期语义问题。
  • 硬约束:FS/SS/FF/SF、正负 lag、资格、重量尺寸/吊装、运输、天气、维护、危险作业、区域密度、冻结区、质量和供应商产能均有非零样本;26 个非法变异全部被拒绝。
  • 输出:222 文件、51 CSV、205.206 MiB;业务摘要 21838055715c587fa3b76dc4b640d5627cdb1626f993941c6f982c6a298594d3;manifest d908718e...a49fe7;world 0f7fcdb3...991d;fresh full 文件哈希差异 0。
  • 验证:Round69 focused 49 passed;full golden 1120 passed / 2 warnings;Node 60 passed;Web build 通过;validate-only PASS/FEASIBLE/0 hard violations;最终限定范围只读审计 AUDIT PASS。
  • 性能:fresh full 生成+校验+导出+哈希比对 87.238 秒,峰值工作集 1,298.496 MiB,输出 205.206 MiB,均低于门槛。
  • 运行/保护:8003/5173 HTTP 200,浏览器 title/主 UI/console 通过;四个 server/data 受保护文件哈希未变化。
  • 边界:全部数据为 SYNTHETIC,不代表北海造船真实业务数据;真实康尼/锐扬/北海造船现场数据仍需授权接入和校准;未 commit/push/merge/publish。

2026-08-03 — Round 67 审批迁移 Fail-Closed 与 Grant Digest 归一化

  • 类型:safety + fix + migration + tests + docs
  • 做了什么:严格审批源解析;P3 raw token 迁移为 SHA-256 digest;终态 request 重建;QUIESCED + 同锁稳定快照;request/grant/event 单事务;状态单调;legacy raw-token 原子修复;canonical event digest。
  • 审计修复:首轮计划审计 6 项阻断全部纳入;首轮代码审计发现 existing payload 身份未校验,补 request/grant payload immutable gate 与 legacy consume-once 回归后最终 AUDIT: PASS。
  • 验证:migration 29 passed;approval related 74 passed / 1 warning;full golden 1053 passed / 2 warnings(328.10 秒);Ruff/compile/diff-check passed。
  • 真实运行:临时 ApprovalStore -> SQLite 迁移,request=APPROVED、raw token 不落主键、consume true/false;损坏 JSON fail-closed 且 DB 不变。
  • 数据保护:现场 approvals/world/MOM hashes 前后不变;server/data/** 与 .env 无 Git 状态。
  • 遗留:R67-B2 数据库权威 clock/TTL/CAS;SAP outbound P3 evidence;真实 MySQL 多主机/停写切换外部验收。
  • 交付边界:未 commit、push、merge 或 publish。

2026-08-03 — Round 66 Windows 求解器进程隔离与 Fail-Closed

  • 类型:fix + architecture + test + docs
  • 做了什么:
    • CP/HYBRID native 优化迁入独立 child,采用 aps.solver-process.v1;父进程校验退出、fatal marker、timeout、协议、requestId/digest 与 runtime identity 后才物化。
    • fatal/timeout/非法响应均 UNAVAILABLE、0 PO/WO、不可发布;父进程与 8003 存活、业务世界原子,HYBRID 不静默降级 RULE。
    • runtime probe 增加来源、版本、user-site、fatal+exit0 与内部 timeout 门禁;默认 PATH Anaconda 稳定拒绝,.venv/.sidecar-venv 各连续 5 次通过。
    • 源码 Sidecar --solver-child -I 真实冒烟首次发现隔离 Python 移除源码 import root;经 GitNexus LOW impact 修复为只 bootstrap 已解析的 trusted source root,并新增 test_source_solver_child_entry_runs_under_isolated_python。修复后 CP OPTIMAL、1 PO/10 WO/10 slots、协议 v1、runtimeSafe=true。
  • 真实运行:复制 world.json 的 CP/HYBRID 均 OPTIMAL、1 PO/10 WO/10 operationSlots;MOM 复制数据求解器虽 OPTIMAL,但受现有主数据阻断为 0 PO/WO、1 slot/1 conflict,不宣称完成现场主数据。fatal 注入 CP/HYBRID 均失败关闭;timeout 15.633 秒并回收 grandchild。
  • 验证:post-fix focused 80 passed;最终全量黄金 1029 passed / 2 warnings(300.23 秒);Node 60 passed;Web build、ruff、compile、node check、diff-check passed。
  • 复审补强:大请求改用自动清理临时文件作为 child stdin,避免 Windows 管道背压使 deadline 失效;严格拒绝越界 slot 与订单/产品错绑,并补错误 pipeline/status 回归。
  • 首轮审计修复:AUDIT: FAIL 暴露 success response 摘要未验证与 OPTIMAL + 空 entries 假绿;现强制重算 responseDigest,校验条目完整排列/业务字段、pipeline/status 和可行槽位覆盖,新增 16 个负向用例。
  • 服务/UI:8003 PID 21576、5173 PID 9808 healthy;浏览器 title=APS 智能排产工作台、root=true、无 warning/error。
  • 数据保护:world.json SHA-256 C6E7FF090719DB505AF5C3B0D8ADD376CBA7843D6E6982A68C1BA02C342052FA、MOM SHA-256 6B64ADF6F29A43A518D89718610EE71FAD60E86D3F38CD5CFF26F1740CC53F7D 前后不变;server/data/**、.env 无 Git 状态。master.db 可能更新 license last_seen 等运行元数据,不用文件 hash 冒充业务不变。
  • 遗留/边界:现有冻结 EXE 仅旧 --probe-child 通过,未重建,不能宣称新 --solver-child 已打包;仍需构建后冒烟、干净 Windows、签名/Defender/真实 CI。下一 P0 为全量 P2/P3 evidence 封套与审批迁移可靠性。
  • 最终独立复审:AUDIT: PASS;2 MiB 请求且 child 不读 stdin 的真实 deadline 复现为 0.736 秒,越界/错绑 slots 与错误 pipeline/status 均失败关闭。
  • 文档同步:plan.md、完成矩阵、scheduling-v1.md、Round 66 工作/并行计划、状态与运行证据。
  • 发布动作:无 commit/push/merge/publish。

2026-08-03 — Round 65 端到端闭环 APS 排产内核

  • 类型:feature + fix + safety + docs
  • 做了什么:统一商务订单/BOM/库存/供应/工艺/设备/班组/模具/层级负荷准入与 V2 校验;修复原子排产、P2 发布、P3 MES、WMS Saga、外部 Skill、sourceHash、订单页真实状态和订单 GET 副作用。
  • 证据门禁:P2/P3 evidence 绑定完整 V2 problem/solution/validation、活动/工单身份及当前多资源快照;维保、能力、班组、模具、寿命与层级容量漂移失败关闭。
  • 前端/E2E:6 阶段读取持久化闭环和精确 gate;MOM 刷新恢复阻断,正向 fixture 经 P2 发布、P3 双人审批并产生 MES 外部工单。
  • 验证:pytest tests/golden -q = 979 passed;npm run test:node = 60 passed;Web build passed;真实隔离 Playwright = 2 passed。
  • 现场保护:旧版订单 GET 曾在 2026-08-03 10:10:24 写现场 world;现已改为幂等投影 + 深拷贝预览。当前 MOM hash 6b64adf6...53f7d 在隔离验收前后保持一致,未擅自回退。
  • 文档同步:plan.md、完成矩阵、features、scheduling-v1、harness、modules、锐扬 runbook、Round 65 状态与运行证据。
  • 遗留:39 缺工艺、67 模板/缺能力、可信到货承诺与真实 MES/WMS/SAP 凭据不可伪造;最终独立复审 AUDIT: PASS;未提交、未合并、未发布。

大管家的账本。 每次改代码、加功能、改功能、修缺陷,同一轮必须追加一节。
写法见 docs/README.md §2.2。旧名:PROGRESS.md(已迁入本文件)。


2026-08-02 — 锐扬 Excel 结构化诊断与真实行号收口(round-63)

  • 类型:bugfix + data quality observability。
  • 解析纠偏:设备编码别名采用“最后一个非空值优先”,后续空列不再覆盖已有编码;补 固定资产编号 别名。47 行原解析噪声恢复为有效设备行。
  • 结构分类:02-工艺模型 Excel 第 5 行二级序号表头、07-设备模型 4 行内嵌 section 归为 ignorable_section;非排产整块归为 NON_SCHEDULING_BLOCK/ignored。
  • 诊断契约:batch / preview / folder 新增 diagnostics、diagnosticCounts、diagnosticsVersion=1,每条含 sheet、真实 Excel 行号、parserIndex、kind、code、severity、classification、message、rawSummary;旧 errors/warnings/count 字段保持兼容。
  • 现场结果:锐扬目录(主表 + 订单-样例.csv)为 有效 1404 / blocking 1 / skippedRows 974;diagnostics 为 ignored 979 / warning 181 / blocking 1。唯一阻塞定位到 07-设备模型 Excel 第 130 行“3.8吨锂电叉车”,三个业务编码均空;出厂编号不冒充设备编码。
  • 用户可读输出:文件问题列直接显示真实 Excel 行号;Markdown 追加 5 行结构忽略、134 台 GENERAL 兜底、47 行别名恢复说明。
  • 回归:结构化 XLSX 缩比测试、folder 聚合契约、日期稳定性与既有导入/指导测试通过;全量黄金基线随 round-64 一并验证为 910 passed。

2026-08-02 — MRP 多层 BOM 自制/采购纠偏 + 分阶段界面(round-64)

  • 类型:bugfix + UX semantics(订单分解 / MRP)。
  • 根因:旧逻辑把“有默认工艺路线”错误等同于“自制”,并要求 MAKE && hasRouting 才继续展开;锐扬 MOM 导入又只为前 80 个自制候选生成模板路线,导致缺路线半成品被改写为采购并停止下钻。前端同时隐藏 make、把 DRAFT 建议标成“采购订单”,分解后还自动跳采购页。
  • 后端修复:显式 procurementType 优先;BOM 父项/成品/半成品即使缺工艺仍按 MAKE,生成 missingRouting 阻断提示并继续多层展开;同订单同物料聚合后只扣一次库存/在途;持久化独立 makeSuggestions,不写入/伪造 productionOrders;路线进一步区分 READY / TEMPLATE / MISSING。
  • 前端修复:新增“自制建议”页签,分解后默认打开;“生产订单”改为“已排生产”,“采购订单/委外订单”改为“采购建议/委外建议”;模板工艺、缺工艺分别标识,明确建议与真实生产订单的阶段边界。
  • 真实验证:MOM--00280 完整展开为 106 项唯一自制建议 / 124 条采购建议 / 0 委外;其中 67 项仅模板工艺待确认、39 项缺工艺路线;124 条采购全部为 RAW_MATERIAL,采购中半成品为 0;B0050121-22750 已从采购移入自制,且继续展开出原材料 C0030800-04179。
  • 回归:tests/golden/test_mrp.py、tests/golden/test_sourcing_decompose.py 聚焦 10 passed;Web npm run build 通过;8003/5173 均 200;在真实浏览器完成重分解和页签/文案核验。
  • 边界:当前 67 条路线来自导入模板,仅允许试排,不应视为现场已确认工艺;39 条缺路线项必须补齐主数据后才能形成可执行生产工单。

2026-08-01 — trace_chain 接入 schedule.run

2026-08-01 — trace_chain 跨引擎可复算(round-16 补充)

2026-08-01 — EXTERNAL 引擎接入 trace_chain + 前端追溯 UI(round-16b)

2026-08-01 — 对话状态与世界状态成对快照(round-17)

2026-08-01 — 审计完整性告警通知渠道(round-18)

2026-08-01 — 审计完整 Merkle 树(round-19)

2026-08-01 — 审计 append-only 守护:跨进程锁 + 清理策略(round-20)

2026-08-01 — 偏好学习升级:项目隔离/解释/重置/冷启动(round-21)

2026-08-01 — Explore 与 Runtime 数据边界(round-22)

2026-08-01 — L0-L3 Plan 重放能力(round-23)

2026-08-01 — 统一工具运行时(LLM 只有提议权,round-24)

2026-08-01 — 分支树:项目->会话->分支三级树(round-25)

2026-08-01 — 分支切换自动恢复锚定检查点(round-27)

2026-08-01 — 偏好解释 UI + stub 可复算修复(round-28)

2026-08-01 — 主数据工艺树升级为树形表格 + 物料分类/来源修复(round-29,产品向 sub agent 实施)

2026-08-01 — L0-L3 Plan 批准/驳回审计(round-30)

2026-08-01 — Agent 自动编排:plan 节点驱动 workflow 门禁(round-31)

2026-08-01 — 偏好时间衰减加权模型(round-32)

2026-08-01 — Explore 通道扩展:敏感性/鲁棒性接入统一边界(round-33)

2026-08-01 — 多智能体并行交付:会话引用/四层上下文/自动化G0-G4/分支树UI/时间线微观层(round-34,3 个并行智能体)

2026-08-02 — 多智能体并行交付·第二批:CP-SAT 工序级/算法库+参数优化/MCP总线+异步任务(round-35,3 个并行智能体)

  • 类型:feature(多方向并行,plan.md §9.2/§9.5/§9.8/§7/§6.8)
  • 做了什么(三个智能体并行,写范围互不重叠):
    • 方向 D(Gauss)· 矩阵 84:cp_engine.py 工序级模型——每工序 OptionalIntervalVar 按工艺路线串联(C1)、同工位 NoOverlap(C2)、换型矩阵 next-link 单链(C10)、冻结窗 FixedSizeIntervalVar(C11);solverMeta 增 operationSlots/totalChangeoverMin/frozenCount。
    • 方向 E(Ramanujan)· 矩阵 86/87:algolib.py 算法库注册表(A-E 分类+元数据+健康+版本+种子);param_opt.py 参数优化闭环(训练/验证隔离→回放→灰度→退化回滚+敏感性衔接)。
    • 方向 F(Sartre)· 矩阵 75/88:mcp_bus.py MCP 插件总线(manifest/工具契约/权限 fail-closed/健康/启停/版本兼容+Skill 桥接)+ 网关 /api/mcp/plugins*;async_jobs.py JobQueue 异步重算 + /api/jobs* + SkillConsole「MCP 插件」「异步任务」页签。
  • 为什么:按 plan.md 蓝图继续拆分边界并行推进矩阵 Missing/Partial 项。
  • 验证:三方向黄金测试 32 项(cp 6 + algolib 5 + param_opt 8 + mcp_bus 8 + async_jobs 5)通过;前端 npm run build 通过;CP/HYBRID 冒烟 OPTIMAL 且契约不变。
  • 边界:Cumulative 班组容量、ML/元启发资产落地、网关 P2 门禁接线、真实 MES/WMS 适配器、分布/置信区间留待后续轮。

2026-08-02 — 多智能体并行交付·第三批:LNS 插单/IIS 冲突归因/前端世界分区+diff+回放(round-36,3 个并行智能体)

  • 类型:feature(多方向并行,plan.md §9.11/§9.2b/§4.5/§9.4)

  • 做了什么(三个智能体并行,写范围互不重叠):

    • 方向 G(Locke)· 矩阵 90:server/aps_domain/lns.py LNS 插单局部修复器——固定窗口(默认急单交期 ±36h,timeWindowHours=72)内最小扰动邻域搜索(候选槽 + 插入右移级联,窗口外订单冻结 windowOuterMovedCount=0),扰动度量 movedOrderCount/shiftedHours/tardinessDelta/disturbanceRatio;受影响数/扰动率/窗口宽度超阈值 → ESCALATE 升级信号;rush.evaluate 附加 impact.lns(P1 沙盒,payload["lns"]=False 可关)、rush.apply 出卡携带 lns(P2 门禁)、execute_confirmed 路由 LOCAL→apply_lns_local(DRAFT+LNS_RUSH+LOCAL_REPAIR)/ ESCALATE→apply_rush 全量重排(audit 记 mode+escalateReasons);test_rush_lns.py 9 项。
    • 方向 H(Lovelace)· 矩阵 89:server/aps_domain/attribution.py 冲突归因——detect_iis() 约束级 IIS 最小冲突集(黄金用例验证删除任一约束后恢复可行,可行输入返回空+说明)、attribution_for_schedule() 结构化归因报告(evidence conflictId+versionId+日志描述可复核)、中文归因文案(约束名/订单号/资源/短日期/解开方式,不含 IIS/shadow 等数学术语)、近似影子价代理量(isShadowPriceProxy 显式标注,真实对偶价需 LP 重解);只读复用 hard_blocking_conflicts/get_constraint_profile,未改既有接口;test_attribution.py 7 项。
    • 方向 I(Sagan)· 矩阵 54/55:前端 Explore 与 Runtime 视觉分区(WorldModeBadge.tsx 世界种类徽标+只读角标、ViewportPanel 工具栏徽标+画布着色 world-explore/runtime/analysis、时间线根节点徽标、FlexPanel「沙盒试排」徽标);WorldDiffView.tsx 两个世界并排对比(基准 A × 对比 B:当前世界/版本快照/检查点/回放定位,订单工序时间/设备/模具/KPI 逐字段 diff 高亮+变化汇总);AlgoReplayPanel.tsx ALGO_RUN 动作链逐步回放(复位/上一步/播放/下一步/末步,traceSummary 链+检查点锚点+「对比此步前后世界」联动);npm run build 无类型错误。
  • 为什么:按 plan.md 蓝图继续把 Missing/Partial 矩阵项分发给并行智能体,保持写范围互不重叠、智能体可互相沟通。

  • 验证:新增黄金测试 16 项(rush_lns 9 + attribution 7)+ 相关回归全绿;全量回归 618 passed(隔离 APS_KNOWLEDGE_PATH 规避知识库环境污染);后端 8003 以新代码重启健康、前端 5173 构建通过。

  • 边界:真实 LP/CP 对偶影子价需线性化模型重解;CP-SAT 原生 IIS 与 flex 轨归因接入;跨产线 LNS 邻域需引擎 forcedLineId;网关 rush.apply 透传 lns 参数;检查点世界侧投影接口 GET /api/checkpoints/{pairId}(前端已降级展示);分支合并世界 diff、@知识 引用、滚动摘要 LLM 压缩、策略特征规则归纳留待后续轮。

  • 类型:feature(多方向并行,plan.md §4.7/§4.8/§5.3/§4.6/§6.10)

  • 做了什么(三个智能体并行,写范围互不重叠):

    • 方向 A(Dirac)· 矩阵 63/64:server/agent_core/session_ref.py(@会话/@方案/@版本/@报告 引用解析 + 按时点快照取值 + 证据链 refs + 删除/无权显式失败);server/agent_core/context_policy.py(四层上下文 ContextBudget + 滚动摘要可溯源 + pin 钉住)。
    • 方向 B(Ptolemy)· 矩阵 76:server/agent_core/automation.py(G0-G4 档位状态机 + AutomationGate 升权门禁 P3 双人 SOD + 事件/定时 cron/阈值三类规则 + 调度器 pause/resume/replay + AUTOMATION 审计)。
    • 方向 C(Huygens)· 矩阵 51/54:前端 BranchPanel.tsx 分支树 UI(fork/rename/switch/discard/merge + 活动高亮)+ TimelineRail.tsx 时间线微观层(Plan/ALGO_RUN traceSummary/审计证据 refs)+ 分支 API client。
  • 为什么:按 plan.md 蓝图拆分边界分发多智能体并行推进矩阵 Missing/Partial 项。

  • 验证:三方向黄金测试 20 项(session_ref 5 + context_policy 6 + automation_gears 6 + branch_tree 3)通过;前端 npm run build 通过;浏览器实测分支树 fork/merge/discard 与微观层正常。

  • 边界:接线(上下文到对话链路、自动化到网关定时/真实动作、引用自动触发)、@知识 引用、调度器持久化、两世界 diff 留待后续轮。


2026-08-02 — 多智能体并行交付·第四批:检查点投影/@知识引用/滚动摘要LLM/偏好特征规则(round-37,3 个并行智能体 + 主控 L66)

  • 类型:feature(多方向并行,plan.md §4.4/§8.1/§8.3/§8.5)

  • 做了什么(三个并行智能体写范围互不重叠 + 主控实现矩阵 66):

    • 方向 J(Darwin)· 矩阵 54 收口:checkpoints.world_projection(pair_id) 世界侧轻量投影(summary+固定/柔性工单+产能池,仓内数据零改动)+ GET /api/checkpoints/{pairId}(缺失 404 中文)与 GET /api/checkpoints?pairIds=&branchIds=&sessionId=(分支锚定批量投影);前端 fetchCheckpointWorld + WorldDiffView 检查点 B 侧优先投影逐字段全量 diff,失败回退元数据/近似快照降级;test_checkpoint_projection.py 5 项。
    • 方向 K(Maxwell)· 矩阵 63 收口:session_ref.py 第 5 类 @知识 引用(强制命中:命中→正文+出处+证据 ref,未命中→显式中文 RefResolutionError 不编造,未接线→显式 not-wired);resolve_ref/resolve_all 新增 keyword-only knowledge_lookup(既有 4 类零破坏);workflow handle_intent 入口自动解析注入(_refs + SESSION 审计 evidenceRefs,失败 fail-closed);test_ref_knowledge.py 9 项。
    • 方向 L(Galileo)· 矩阵 64 收口:summarizer.py LLM 滚动摘要压缩生成方(compress_scroll_summary 固定中文提示词 + ModelProvider.chat_text,不可用/异常/超预算→确定性回退绝不编造);context_policy.scroll_summary 可选 summarizer(compressedBy 溯源);gateway chat 每轮预算门控钩子(autoSummarize 开关,try/except 兜底不阻断对话);越权上下文 fail closed 测试补齐;test_scroll_summary_llm.py 14 项 + test_context_policy.py +3 项。
    • L66(主控实现)· 矩阵 66 收口:preferences.py 多特征规则归纳——extract_features(world)(订单数/VIP占比/急单占比/品种数/硬冲突数)、分箱条件规则 induced_rules(采用2/试排1 条件得分+支持度)、preferred_strategy_with_features(规则投票命中→回退全局)、explain_features 中文规则依据;workflow/app 两处 record() 调用点接线 features;test_preference_features.py 6 项。
  • 为什么:按 plan.md 蓝图继续把矩阵剩余 Partial 项收口,保持多智能体并行、写范围互不重叠。

  • 验证:round-37 相关黄金测试 61 项通过;全量回归 656 passed(隔离 APS_KNOWLEDGE_PATH 规避知识库环境污染);前端 npm run build 无类型错误;后端 8003 新代码重启健康。

  • 边界:test_guidance.py::test_workflow_guidance_and_kb_miss 为既有知识库漂移环境失败(默认 knowledge.json 库容漂移使 miss 查询可命中,隔离路径下全绿);summaries 历史上限裁剪、@知识 标题首条子串命中依赖标题质量、检查点批量投影按分支锚定留待后续轮。

  • 类型:feature / security

  • 做了什么:run_sensitivity 与 run_monte_carlo 改为经 explore_boundary.run_explore 统一通道执行(fn 只拿深拷贝沙盒、主干永不外泄写引用,内部子沙盒互不污染);保留既有函数签名与输出结构(sensitivity rows/monteCarlo、monte carlo outcomes)。

  • 为什么:矩阵 55 行「Explore 与 Runtime 数据边界」剩余项「敏感性/鲁棒性等其他 Explore 工具逐一接入统一通道」。

  • 验证:test_explore_boundary_extension.py 3 项(sensitivity 零污染、monte carlo 零污染、只读视图 fail closed)通过;真实世界数据冒烟:sensitivity 返回 rows/monteCarlo、monte carlo 3 trials、主干逐字节不变;场景相关 15 项全绿。

  • 边界:前端 Explore 与 Runtime 视觉分区留待后续轮。


2026-08-02 — 多智能体并行交付·第五批:分支diff/plan回退/WMS缺料闭环/工具运行时收口/蒙特卡洛配置(round-38,3 个并行智能体 + 主控 L88)

  • 类型:feature(多方向并行,plan.md §4.4/§4.5/§9.9/§6.10/§5.3)

  • 做了什么(三个并行智能体写范围互不重叠 + 主控实现矩阵 88):

    • 方向 M(Gibbs)· 矩阵 51/52 收口:branches.compute_world_diff(两分支锚定 checkpoint 世界侧稳定 JSON 差异:版本/KPI/工序时间/柔性版本/产能池,merge 响应附 diff + 审计落库,前端 BranchPanel 合并前预览);PlanStore 分支维度——plans_snapshot/restore_for_branch 可恢复接口(plan 视图随 checkpoint 归档物化,分支切换自动回退/恢复,latest/node_at/versions/create/transition 视图感知,无锚定完全兼容);test_branch_merge_diff.py 4 项 + test_plan_branch_restore.py 5 项。
    • 方向 N(Euler)· 矩阵 74/77 收口:wms_stub.py MockWMS(库存台账+缺料事件流+幂等+单调 inventoryVersion);wms_events.py 事件消费管线(eventId 全局一次消费/乱序 seq 缓冲/重复证据、库存版本进证据链、WMS-EVENT 冲突同步);缺料→重排端到端闭环:事件→影响半径(沙盒差分只读)→Explore 方案卡(复用 flex.reschedule P2)→人工确认(L4 重排)→MES 下发(P3 双人 SOD)→回执(wmsReceipts+审计全链证据);POST /api/wms/events + GET /api/wms/replay + GET /api/wms/inventory;test_wms_events.py 3 项 + test_wms_replay.py 3 项。
    • 方向 O(Zeno)· 矩阵 111 收口:tool_runtime.run_tool_async 异步入口;scenario.apply 由直连 handle_intent 改为经工具运行时(未登记拒绝+TOOL 审计,响应契约保留;source-level 盘点确认其为唯一直连端点);GovConsole「工具调用」视图(TOOL 审计条目:意图/等级/执行者/时间/结果 放行·确认卡·拒绝);test_tool_runtime_gateway.py 5 项。
    • L88(主控实现)· 矩阵 88 收口:robustness.py 可配置分布(normal/uniform/triangular 逐维 + shockProbability)、correlation(-1..1 需求-效率扰动相关,rho=0 随机流与旧实现种子兼容)、confidence_level 经验分位置信区间(tardinessCI/mean/std)+ config 透明元信息;test_monte_carlo_config.py 7 项。
  • 为什么:按 plan.md 蓝图继续把矩阵 Missing/Partial 项收口,多智能体并行、app.py 按区段划分(merge/switch、WMS 事件、scenario.apply 互不重叠)。

  • 验证:round-38 相关黄金测试 57 项通过;全量回归 683 passed(隔离 APS_KNOWLEDGE_PATH 规避知识库环境污染);前端 npm run build 无类型错误;后端 8003 新代码重启健康(/api/wms/* 已注册)。

  • 边界:Saga/补偿(矩阵 78/119)留待下轮(幂等键/P3 门禁/回执审计已打地基);WMS 为 Mock 形态(真实适配器需集成环境);plan 视图为 store 级单例(多会话并行切换以最后一次为准);scenario.apply 未登记拒绝返回 200+拒绝文案(契约保留)。

  • 类型:feature / algorithm

  • 做了什么:PreferenceStore 从简单计数升级为时间衰减加权评分:每样本得分 = 来源权重(采用2/试排1)× 时间衰减(2^(-age_days/半衰期14天)),偏好随最近样本漂移、久远信号自然衰减;评分舍入 2 位小数保持当天信号≈整数的既有语义;explain 置信度增加「最高分与次高分接近 → medium」判定。

  • 为什么:矩阵 66 行「偏好学习影响默认策略」剩余项「偏好模型升级为权重回归/规则归纳」的权重回归部分。

  • 验证:test_preference_decay.py 4 项(新样本主导、半衰期≈0.5、当天≈整数、来源权重叠加)通过;既有偏好测试 10 项全绿。

  • 边界:策略特征规则归纳(多特征回归:订单结构/客户等级/约束 → 策略)留待后续轮。


2026-08-02 — 多智能体并行交付·第六批:Saga补偿/13类约束目录/trace断链可视化/算法目录收口(round-39,3 个并行智能体 + 主控 L86)

  • 类型:feature(多方向并行,plan.md §5.3/§9.2a/§9.5/§9.10/§10.4)

  • 做了什么(三个并行智能体写范围互不重叠 + 主控实现矩阵 86):

    • 方向 P(Hypatia)· 矩阵 78/119 收口:saga.py SagaCoordinator——状态机(PENDING/RUNNING/WAITING_HUMAN/SUCCEEDED/FAILED/COMPENSATING/COMPENSATED/MANUAL_TAKEOVER)+ SagaStep(幂等键/超时/重试/补偿/gate)+ 恢复队列(world["sagas"] 持久化 + resume_all 重放)+ 补偿注册表(失败逆序补偿链,补偿失败→人工接管)+ 写前快照回滚锚点;WMS 缺料闭环接入(run_shortage_saga 事件级 dedupe)+ mes.cancel_dispatch/cancel_work_order 幂等补偿;/api/saga/* 列表/详情/retry/compensate/takeover;test_saga.py 13 项 + test_saga_wms_closure.py 6 项。
    • 方向 Q(Jason)· 矩阵 113 收口:13 类约束目录齐全(C1-C13,新增 C9、C12 归位、goldenCase/kindConfigurable)+ constraint_catalog();四引擎(RULE/CP/HYBRID/GA)硬约束语义一致黄金测试(EQUIPMENT/CAPACITY/MATERIAL 三态,未发现不一致);ConstraintProfileDenied 门禁拒绝三类关闭硬约束路径 + write_audit DENIED(LLM 提案同门禁);test_constraint_catalog.py 19 项 + test_engine_constraint_semantics.py 19 项。
    • 方向 R(Poincare)· 矩阵 114 剩余收口:verify_audit_trace 审计链断链检测(expected/actual/reason)+ workflow 落 traceItems(canonical 全量条目精确重算)+ /api/gov/audit traceAlerts + GET /api/gov/trace/verify + GovConsole ⚠断链徽标/顶部提示条;EXTERNAL 真实 HTTP skill 端到端验收(uvicorn stub + HTTP skill → flex.schedule.external 真实 POST → trace 可复算);test_trace_break_visual.py 6 项 + test_trace_external_http.py。
    • L86(主控实现)· 矩阵 86 收口:algolib.py 目录完整性——LNS 随 round-36 交付翻转为 available=True(entrypoint + test_rush_lns.py 黄金测试)、ML/元启发未落地资产如实登记 available=False(健康检查如实报告);test_algolib_catalog.py 4 项(A-E 齐全/ML元启发如实登记/query 过滤)。
  • 为什么:按 plan.md 蓝图继续把矩阵 Missing/Partial 项收口,多智能体并行、app.py 按区段划分(/api/saga、/api/gov、无冲突)。

  • 验证:round-39 相关黄金测试 111 项通过;全量回归 755 passed(隔离 APS_KNOWLEDGE_PATH 规避知识库环境污染;Poincare 标记的批量顺序相关失败未在全量中出现);前端 npm run build 无类型错误;后端 8003 新代码重启健康(/api/saga/*、/api/gov/trace/verify 已注册)。

  • 边界:P3 双人确认自动代行需生产接真实操作员授权(auto_approve=False 停 WAITING_HUMAN 人工确认);旧审计记录无 traceItems 仅结构校验(新记录哈希级比对生效);约束拒绝分支 store.save 持久化建议补;真实 MES/WMS 适配器(矩阵 73/74 现场对接)与 WORM/加密、信创、CI/CD 等外部环境依赖项留待后续。

  • 类型:feature / governance

  • 做了什么:新增 server/agent_core/plan_orchestration.py:P2 动作出确认卡时自动创建 L0 意图→L1 策略→L2 决策节点链(stage_plan_node,同 action 父链幂等复用);批准/驳回时流转 L2 节点状态(decide_plan_node,APPROVED/FAILED,按 confirmId 匹配);接入 harness.stage_confirmation 与 workflow.execute_confirmed(尽力而为,失败仅记日志不阻断门禁);修复 PlanStore _load 的 regenCount 校验(状态流转版本 regenCount 不变,原校验要求连续递增会误判 corrupt)。

  • 为什么:矩阵 110 行「L0-L3 Plan」剩余项「接入 Agent 自动编排(plan 节点驱动 workflow 分支)」。

  • 验证:test_plan_orchestration.py 4 项(出卡建链、批准/驳回流转、重启加载有效、父链复用)通过;API 端到端:排产→发布出卡→批准→L2 节点 DRAFT→APPROVED v2(历史不可变);plan 相关 20 项全绿。

  • 边界:L3 动作级节点驱动具体执行(编排链进一步细分)留待后续轮。


2026-08-02 — 多智能体并行交付·第七批:自动化网关驱动/NSGA-II多目标/可重生流水线/桌面壳决策(round-40,3 个并行智能体 + 主控 L98/L110)

  • 类型:feature(多方向并行,plan.md §6.10/§9.7/§10.2/§14)

  • 做了什么(三个并行智能体写范围互不重叠 + 主控决策收口):

    • 方向 S(Ptolemy)· 矩阵 76 收口:automation.py 业务动作注册表(commit→schedule.publish 发布、reschedule→flex.reschedule 重排,经 AutomationGate 升权 + 既有门禁;未登记 P2/P3 动作 G4 也按 P3 fail-closed 拦截)+ 调度器持久化(宽容加载重启恢复)+ 网关定时驱动(POST /api/automation/tick + lifespan 后台自动 tick,可配开关);run_automation_intent 走 execute_confirmed 真实执行;test_automation_gateway.py 6 项 + test_automation_gears.py +2。
    • 方向 T(Archimedes)· 矩阵 91 收口:rebuild_orchestrator.py 可重生流水线——候选构建(scan_modules+黄金测试映射)、隔离运行(subprocess + APS_* 随机临时目录跑 pytest 子集)、安全扫描(S1 阻断 + S2/S3/S4 告警)、灰度(GRAY shadow + gray_probe)、失败自动回滚(黄金失败/灰度探针失败恢复基线)、审计;registry.py 候选版本登记 + 激活指针;/api/rebuild/* 4 端点;test_rebuild_pipeline.py 10 项 + test_registry.py 6 项。
    • 方向 U(Pauli)· 矩阵 85 收口:nsga2_engine.py 真实 NSGA-II——快速非支配排序+拥挤度+锦标赛+精英保留、工序级染色体(OX/PMX 保可行性+工序交换/资源迁移变异)、3 目标(加权总延迟/容量冲突/负载均衡)输出 Pareto 解集、nsga2_defaults 参数模板 + manifest、get_engine("NSGA2") 集成 + solve_nsga2、nsga2_solutions_to_cards 衔接 rank_scenarios、大算例基线(35 订单 50 代 <15s 不劣于单目标 GA);时间预算确定性修复(小预算跑满固定代数与 GA 口径一致);algolib nsga2 条目翻转为可用;test_nsga2_engine.py 11 项。
    • L98(主控决策)· 桌面壳收口:架构决策——接受 Electron 为当前桌面壳(apps/desktop 已实现 + 打包冒烟),plan.md 目标态同步修订(Tauri 列为备选不阻塞),矩阵 98 置 Done。
    • L110(主控补正):Plan 不可变/可版本化/可局部重生(矩阵 110 剩余=无,状态补正 Done)。
  • 为什么:按 plan.md 蓝图继续把矩阵剩余项收口,多智能体并行、app.py 按区段划分(/api/automation、/api/rebuild,无冲突)。

  • 验证:round-40 相关黄金测试 65 项通过;全量回归 791 passed(隔离 APS_KNOWLEDGE_PATH 规避知识库环境污染;NSGA-II 时间预算确定性修复后全绿);后端 8003 新代码重启健康(/api/automation/status、/api/rebuild 已注册);文档门禁通过。

  • 边界:自动化规则 CRUD UI、NSGA-II 冲突目标物化层对齐、rebuild 激活版本物理替换、真实 MES/WMS 适配器、信创/CI-CD/WORM 等外部环境依赖项留待后续。

  • 类型:feature / governance

  • 做了什么:PlanStore.transition_status:Plan 状态流转(DRAFT→APPROVED/FAILED/RUNNING/SUPERSEDED 等合法边),追加新版本承载状态变化(version+1、regenCount 不变、inputsHash/payload 不变保证历史不可变),evidenceRefs 追加 status:<新状态>、note 写入 payload._note(审计留痕);非法流转抛 PlanTransitionError;POST /api/plans/{id}/approve / /reject 端点。

  • 为什么:矩阵 110 行「L0-L3 Plan」剩余项「批准/驳回审计」。

  • 验证:test_plan_transition.py 4 项(批准追加版本+证据、驳回带 note、非法流转拒绝、连续流转历史不变量)通过;plan 相关 16 项全绿。

  • 边界:Agent 自动编排(plan 节点驱动 workflow 分支)留待后续轮。


2026-08-02 — 多智能体并行交付·第八批:CP Cumulative/参数优化门禁/前端E2E+Sidecar冒烟+CI矩阵/审批迁移(round-41,3 个并行智能体 + 主控 L112)

  • 类型:feature(多方向并行,plan.md §9.2a/§9.8/§14.3/§3.3)

  • 做了什么(三个并行智能体写范围互不重叠 + 主控实现矩阵 112):

    • 方向 V(Herschel)· 矩阵 84 收口:cp_engine.py Cumulative 班组/工装聚合容量(C12:跨工位并行工序占用 ≤ 可用容量,teamId/toolingId 主数据接线,personnel+剖面双闸,solverMeta.cumulative 含 peakConcurrent/unwired 诚实报告);gap(objective/bestBound/None 语义)+ 时限(确定性超时 FEASIBLE 契约)+ 性能基线(n=12 <30s);test_cp_cumulative.py 8 项。
    • 方向 W(Bacon)· 矩阵 87 收口:param_opt.py propose(P1 触发)+ record_observation 线上观测(连续劣化自动回滚+审计+落盘 paramObservations)+ P2 门禁接线(promote 经 harness 确认卡,验证回放 finalize GRAY→FULL,拒绝留 GRAY;harness _POWER_MAP 登记 param.*);/api/params/* 5 端点;test_param_opt_gateway.py 9 项 + test_param_opt.py +5。
    • 方向 X(Boole)· 矩阵 118 部分 + 99 本地部分:完整前端 E2E(apps/web/e2e + @playwright/test,preview 模式,3 用例含登录→跑一版柔性排产→结果块→世界对比/柔性工作台→命令面板,npm run test:e2e 本地 3 passed);scripts/smoke-sidecar-local.mjs 本地冒烟 5/5(20 次冷启动/端口冲突/崩溃重启/父进程看门狗/中文空格路径);.github/workflows/ci.yml 5 job 构建矩阵(lint/前端构建 Win+Ubuntu/后端 golden 隔离 Win+Ubuntu/E2E/SBOM);docs/development/e2e.md。
    • L112(主控实现)· 矩阵 112 部分收口:server/agent_core/approval_migrate.py 文件→DB 存量迁移——幂等(重复 confirmId/token_hash/事件内容去重跳过)、dry_run 不动库、缺文件空源、未配 database 后端 fail closed、迁移后经 database 后端可读回;test_approval_migration.py 6 项。
  • 为什么:按 plan.md 蓝图继续把矩阵剩余项收口;E2E 实测发现 dev 模式 React StrictMode 吞 refreshWorld/captureSessionResult 状态更新(preview 生产构建不受影响,已记录 docs/development/e2e.md 建议前端跟进)。

  • 验证:round-41 相关黄金测试 93 项通过;全量回归 818 passed(隔离 APS_KNOWLEDGE_PATH);前端 npm run test:e2e 3 passed + npm run build 通过;sidecar 本地冒烟 5/5;后端 8003 新代码重启健康(/api/params 已注册)。

  • 边界:签名/SBOM 上链/Defender 入 CI 与干净离线机安装冒烟(需外部证书/验证机);WORM 归档与 MySQL 实机故障注入(外部环境);观测入口为接口驱动(每次排产自动采样后续一行接线);CI workflow 本地 YAML 校验通过但未在真实 GitHub 仓库跑通。

  • 类型:feature / fix / product

  • 做了什么:主数据「工艺路线」由 antd Tree 改为 树形表格(列:名称/编码/类型/来源/用量/图号,行展开折叠);后端 build_process_tree 修复三缺陷——BOM 去重(flexBom 与经典 bomItems 双份合并去重)、半成品推导(名称含组件/总成/支架且非标准件 → typeLabel=半成品)、工序补名称(flexOperations/operations 补齐 operationName);节点新增 typeLabel/sourcingLabel(自制/委外/采购)/operationName 等字段(契约只增不删)。

  • 为什么:现场计划员反馈——要树形表格而非纯树;物料必须分原材料/半成品/成品;来源必须分生产(自制)/委外/采购,否则无法排产判断。

  • 验证:build_process_tree("28200003654300") 去重 0 重复(22 物料)、半成品 3 项、工序缺名 0、来源缺失 0;npm run build 通过;sourcing/master 相关 16 项测试通过;浏览器实测外壳产品树形表格 578 行、列头/徽标/层级/展开折叠正常。

  • 边界:无工艺路线的推导半成品来源按既有规则显示采购(若现场确认为厂内自制需在 infer_material_sourcing 增加按 typeLabel 覆盖);默认展开策略可按现场反馈收紧。


2026-08-02 — 多智能体并行交付·第九批:多模态低置信确认/WORM归档模拟/前端StrictMode修复/roadmap对齐(round-42,3 个并行智能体 + 主控文档收口)

  • 类型:feature(多方向并行,plan.md §6.7/§10.4/§12)

  • 做了什么(三个并行智能体写范围互不重叠 + 主控 roadmap 对齐):

    • 方向 Y(Carver)· 矩阵 101 框架落地:multimodal.py 多模态管线——Extractor 协议 + ExtractorRegistry(未注册 kind 显式报错不编造,register() 为真实 ASR/VLM 接入入口)+ stub 提取器(文件导入/文本模板)+ 低置信确认门禁(不完整显式拒绝、高置信直通、低置信 P2 确认卡,确认前绝不写世界状态)+ 审计(extract/stage/apply/reject);/api/multimodal/extract|ingest;test_multimodal.py 20 项。
    • 方向 Z(Goodall)· 矩阵 104/116/112 WORM 部分:audit_ledger.py WORM 归档模拟——archive_old 归档即密封(.worm-manifest.json:sha256+merkleRoot+coverage+readonly,chmod 只读 + 密封写守卫,同月不覆写自动分流)+ verify_archive()(篡改/缺失/merkle 复算不一致检出 + summary);GET /api/gov/archive/verify + POST /api/gov/archive/run;test_audit_worm.py 7 项。
    • 方向 AA(Hooke)· 矩阵 118 dev E2E 修复:根因定位——StrictMode 模拟卸载把 alive ref 永久置 false(effect 体为空只返回 cleanup)+ captureSessionResult 在 setWorld 更新器内(杂质);修复:alive effect 体内复位 + worldRef 镜像把捕获移出更新器;dev 模式 E2E 3 passed(修复前必失败)+ preview 3 passed 无回退;docs/e2e.md 缺陷状态更新。
    • 主控·文档收口:roadmap.md 对齐(13 类约束目录已落地、NSGA-II/CP Cumulative 已交付、引擎演进更新);矩阵 101 由 Missing 转 Partial(框架完成、真实 ASR/VLM 外部)。
  • 为什么:按 plan.md 蓝图继续推进矩阵剩余项;修复 E2E 发现的真实前端缺陷(dev 模式视口不可用)。

  • 验证:round-42 相关黄金测试 62 项通过;全量回归 846 passed(隔离 APS_KNOWLEDGE_PATH);前端 npm run build 通过 + E2E preview/dev 双路径 3 passed;后端 8003 新代码重启健康(/api/multimodal/、/api/gov/archive/ 已注册)。

  • 边界:真实 ASR/VLM 模型服务、物理 WORM 介质、加密/密钥管理、MySQL 实机、签名/Defender/离线机安装与真实 GitHub CI 跑通(均需外部环境);低置信卡复用 import.commit 动作名(专用 multimodal.apply P2 卡需登记 _POWER_MAP 并同步 harness.md,留待后续轮)。

  • 类型:feature / fix

  • 做了什么:设置中心「个人偏好」页新增偏好学习卡片:当前默认策略、置信度(高/中/冷启动)、原因文案、得分明细、重置按钮;后端新增 GET /api/settings/preferences(explain,缺省取活动项目维度)与 POST /api/settings/preferences/reset;修复 algo_skill_stub._stub_input_fingerprint 误纳含时间戳的 problemId 导致同输入两次运行 runId 不同、EXTERNAL trace 链不可复算(矩阵 114 行可复算性回归缺陷)。

  • 为什么:矩阵 66 行剩余项「UI 展示偏好解释」;全量回归偶发 test_trace_external::test_external_flex_trace_recomputable_same_input 失败,定位为 problemId 时间戳污染 runId。

  • 验证:test_tool_runtime + test_trace_external 连续 3 次通过;EXTERNAL/trace 相关 13 项通过;TestClient 端到端:冷启动→3 次排产→DELIVERY_FIRST(high, 2:1) 项目维度偏好。

  • 边界:偏好模型升级为权重回归/规则归纳留待后续轮。


2026-08-02 — 多智能体并行交付·第十批:审计归档加密/Defender冒烟+离线包校验/桌面升级回滚/测试门禁修复(round-43,3 个并行智能体 + 主控)

  • 类型:feature(多方向并行,plan.md §10.4/§14.1/§12)

  • 做了什么(三个并行智能体写范围互不重叠 + 主控测试门禁修复):

    • 方向 BB(Franklin)· 矩阵 104/116 加密部分:audit_ledger.py 归档加密模拟——AES-256-GCM 认证加密(cryptography,scrypt 口令派生或 env 原始密钥),manifest 双层哈希(ciphertextHash+plaintextHash)+ 解密校验/密钥缺失或错误显式失败/密文篡改检出,未配置密钥 fail-closed 不静默;test_audit_encryption.py 12 项。
    • 方向 CC(Singer)· 矩阵 99/118 本地部分:scripts/defender-scan.mjs(MpCmdRun 静态扫描 Sidecar/win-unpacked/NSIS 安装包 4/4 clean,含非 ASCII 路径 temp-copy 兜底与 EICAR 威胁解析验证)+ scripts/offline-install-check.mjs(SHA-256 清单生成/校验/portable/dry-run 安装路径);tests/node/packaging-smoke.test.mjs 12 项 + docs/development/packaging-smoke.md。
    • 方向 DD(Faraday)· 矩阵 103 升级回滚部分:packaging/upgrade-manifest.schema.json + build-upgrade-manifest.mjs(清单生成/校验)+ apps/desktop/updater.cjs(校验→备份 copy/listing→NSIS 静默安装→健康检查→失败自动回滚+本地审计 JSONL,可选上报 /api/gov/audit)+ IPC(check-for-update/apply-update/rollback 走 isTrustedIpcEvent);apps/desktop/test/updater.test.cjs 15 项 + updater-smoke.mjs 4 项。
    • 主控·测试门禁修复:test_guidance.py::test_workflow_guidance_and_kb_miss 长期环境失败根治——测试内隔离知识库路径(APS_KNOWLEDGE_PATH 临时文件 + 清全局缓存),不再依赖已漂移的 server/data/knowledge.json(5/5 通过)。
  • 为什么:按 plan.md 蓝图继续推进矩阵剩余项;根治每个全量轮次唯一的既有失败(知识库漂移)。

  • 验证:round-43 相关测试 37 pytest + 26 node(updater 22 + packaging-smoke 12 去重后统计)通过;全量回归 858 passed(隔离 APS_KNOWLEDGE_PATH,test_guidance 自隔离);Defender 扫描 4/4 clean;离线安装包校验 PASS。

  • 边界:签名 Authenticode/SBOM 上链/provenance、WORM 物理介质、HSM/KMS 密钥管理、Defender for Endpoint CI 门禁与实时防护演练、干净离线机实机安装、真实 GitHub CI 跑通、NSIS 真装冒烟(均需外部环境/证书/验证机)。

  • 类型:feature

  • 做了什么:_create_checkpoint 建档后把 checkpointId 锚定到当前活动分支(分支↔快照联动);POST /api/sessions/{id}/branches/{bid}/switch 升级为 P1→P2:目标分支有锚定 checkpoint 时自动成对恢复世界+对话侧(restored=true),无锚点仅切换 active_node(restored=false);fork 继承父分支锚点。

  • 为什么:矩阵 52 行剩余项「分支切换时自动恢复锚定 checkpoint(成对切换联动)」;P1 安全探索验收「任意分支切换后对话和世界逐字段一致」。

  • 验证:test_branch_checkpoint_link.py 3 项(建档锚定分支、切换锚定分支自动恢复版本数、无锚点仅切换)通过;端到端:chat 建档→锚定→fork→污染→切换恢复版本数回锚定时。

  • 边界:PlanStore 可恢复接口(plan 版本随分支切换回退)留待后续轮。


2026-08-02 — 多智能体并行交付·第十一批:CI 6-job 扩展/health 版本+审计token/NSIS真装冒烟/文档同步(round-44,3 个并行智能体 + 主控)

  • 类型:feature(多方向并行,plan.md §14.1/§12/§10.4)
  • 做了什么(三个并行智能体写范围互不重叠 + 主控收口):
    • 方向 EE(Bernoulli)· 矩阵 103/118 CI 部分:CI 新增 node-tests job(Win+Ubuntu)——updater+sidecar+packaging-smoke 34 项 + sidecar 本地冒烟 + offline verify + Defender best-effort;pyproject.toml 声明 cryptography>=42;根 package.json 新增 test:node(本地 npm run test:node 34/34)。
    • 方向 FF(Popper)· 矩阵 103 衔接:/api/health 补 version(APS_APP_VERSION env 注入,web null 兜底)+ sidecar 一次性审计 token(重启重置、不落盘不进子进程 env)→ main resolveAuditOptions → updater Bearer+nonce 客户端链路闭环;probeHealth 版本比对显式化(无 version 退化 200 检查);test_health_version.py 3 项 + node +5 项。
    • 方向 GG(Kant)· 矩阵 99/118 真装冒烟:scripts/nsis-install-smoke.mjs NSIS 临时目录真装冒烟(/S /D=随机临时目录,2 次 PASS:33.6s/30.9s、567MB 解包、electron-builder 布局校验、卸载清理、无系统残留;验证 updater /S /D= 约定)+ tests/node/nsis-smoke.test.mjs 13 项 + docs/development/nsis-smoke.md。
    • 主控·收口:requirements.txt 补 cryptography(CI backend-tests 依赖同步);features.md 补 round-36~44 交付速览表;test_guidance 知识库隔离修复已在 round-43 完成并纳入本轮全量验证。
  • 为什么:按 plan.md 蓝图收口矩阵剩余本地可做项,把桌面升级/审计/打包链路与 CI 门禁衔接闭环。
  • 验证:全量回归 861 passed(隔离 APS_KNOWLEDGE_PATH);node 门禁 npm run test:node 34/34 + nsis-smoke 13/13 + updater 27 + sidecar 冒烟 5/5;CI YAML 6 job 校验通过;NSIS 真装 2 次 PASS;8003 新代码重启健康(health 含 version 字段)。
  • 边界:服务端审计上报端点(POST + Bearer 校验)、升级后 probeHealth nonce 续接、签名/SBOM 上链、Defender for Endpoint CI 门禁、干净离线机实机安装、真实 GitHub CI 跑通、perMachine 路径(均需外部证书/验证机/仓库);真实 MES/WMS 适配器、信创、ASR/VLM、WORM 物理介质、HSM/KMS、MySQL 实机等外部项维持矩阵标注。

2026-08-01 — 主数据工艺路线树产品升级(round-26,产品向 sub agent 实施)

  • 类型:feature / product
  • 做了什么:主数据「工艺路线」页签树重做:根=选中工艺路线的成品(金色「成品」徽标+自制+用量×N+图号),每个物料节点下先挂它自己工艺路线的工序序列(工序徽标+seq+自制/委外,按序),再挂 BOM 子件;原料/外购件为叶子(「原料+采购」);默认只展开到工序层、半成品可折叠;空态/异常有 Alert 不白屏。后端 build_process_tree 只增不减补充展示辅助字段(typeLabel/hasRouting/isLeafMaterial/unit);前端新增 processTreeNodeTitle/processTreeToNodes 与 .pt-badge--*/.pt-src--* 样式。
  • 为什么:现场计划员需要一眼看清「成品 → 半成品 → 每层各自生成哪些工序」,此前树全部平铺无层级语义。
  • 验证:npm run build --prefix apps/web 通过;浏览器实测外壳树 467 节点、折叠/展开正常、原料叶子无展开箭头;golden 测试 535 全绿;impact 分析 build_process_tree LOW。
  • 边界:空态 Alert 未在真实数据触发验证;更深层 BOM 子件默认折叠,可在产品迭代中调整默认展开深度。

2026-08-02 — 多智能体并行交付·第十二批:审计上报端点/HTTP MES适配器/图片元数据提取/信创依赖矩阵(round-45,3 个并行智能体 + 主控 L102)

  • 类型:feature(多方向并行,plan.md §3.6/§7/§6.7/§14.2)

  • 做了什么(三个并行智能体写范围互不重叠 + 主控实现矩阵 102):

    • 方向 HH(Helmholtz)· 矩阵 103 收口:POST /api/gov/audit/events 审计上报端点(desktop nonce 门禁双通道鉴权/web 登录 401/非法载荷 400/幂等 idempotencyKey 去重,复用 write_audit 落链)+ updater 上报新契约(sha256 确定性 key)+ probeHealth/applyUpdate nonce 续接(升级后健康检查带新网关 nonce,403 fail-soft 不阻塞);test_audit_events_ingest.py 7 项 + node 30/30。
    • 方向 II(Socrates)· 矩阵 73/75 适配器框架:server/integrations/mes_http.py HttpMesClient——config-driven(base_url/token/超时/重试 env)、幂等 idemKey、指数退避重试、报工回执/状态轮询/幂等撤单(saga 补偿)、MesHttpError 显式失败、未配置 fail-closed;mes.py env 切换客户端(stub 默认);MCP 总线注册 mes.http(dispatch P3/status P0/report P2/cancel P2,默认 deny);本地 HTTP stub 黄金测试;test_mes_http.py 9 项 + test_mcp_bus.py +1。
    • 方向 JJ(Lorentz)· 矩阵 101 框架扩展:ImageMetaExtractor——文件名/元数据级结构化候选(订单/物料/日期/附件类型,置信 ≤0.6 + requiresVlm 不编造、9 位数字守卫),走既有低置信 P2 确认门禁;真实 VLM 经 register(replace=True) 覆盖切换;test_multimodal_image.py 10 项。
    • L102(主控实现)· 信创依赖矩阵:docs/architecture/platform-matrix.md(Python/OS/架构/依赖 wheel 覆盖 + 信创关键依赖标注)+ scripts/platform-deps-check.py(python/平台/架构/requirements 全依赖检测,本地 16/16 PASS)——矩阵 102 由 Missing 转 Partial。
  • 为什么:按 plan.md 蓝图收口矩阵剩余本地可做项(Missing 已归零);为真实 MES 对接与信创安装提供配置化框架与检测工具。

  • 验证:全量回归 888 passed(隔离 APS_KNOWLEDGE_PATH);node 门禁 30/30 + updater-smoke 4/4;集成组 91 项通过;8003 新代码重启健康(audit/events 端点 web 401/desktop nonce 双通道验证);文档门禁通过。

  • 边界:真实 MES 工厂对接(填配置+现场联调)、真实 ASR/VLM/OCR、麒麟/统信四组合实机安装、签名/SBOM 上链、Defender for Endpoint 门禁、干净离线机实机、真实 GitHub CI、main.cjs 新 nonce 传递接线(均需外部环境/证书/后续轮)。

  • 类型:feature

  • 做了什么:新增 server/state/branches.py(BranchStore):每会话一棵分支树(tree_root/active_node/branches),支持 fork(从活动分支派生,继承 checkpoint 锚点)/rename/switch/discard/merge,状态机(主干与活动分支不可丢弃、已合并/已丢弃不可再操作),JSON 持久化 + 并发锁;gateway 新增 /api/sessions/{id}/branches 系列端点(GET/POST fork/PATCH rename/switch/discard/merge)并写 GATE 审计(branch.fork/switch/merge/discard);成对快照 conversationSide 纳入分支树。

  • 为什么:矩阵 51 行「项目 -> 会话 -> 分支三级树及分支生命周期」(Missing)与 52 行成对快照的前置依赖。

  • 验证:test_branch_tree.py 3 项(BranchStore 生命周期+持久化、gateway 全流程+审计、丢弃活动分支 409)通过;API 冒烟 fork/switch/merge/discard 全链路正常。

  • 边界:前端分支树 UI、分支合并世界差异 diff、分支切换自动恢复锚定 checkpoint 留待后续轮。


2026-08-02 — 多智能体并行交付·第十三批:升级nonce续接/MES就绪检查/审计统计视图/基线同步(round-46,3 个并行智能体 + 主控)

  • 类型:feature(多方向并行,plan.md §14.1/§7/§3.6)

  • 做了什么(三个并行智能体写范围互不重叠 + 主控基线同步):

    • 方向 KK(Curie)· 矩阵 103 最后本地项收口:apps/desktop/upgrade-nonce.cjs createUpgradeNonceCoordinator——sidecar restarted 事件→新 nonce→probeHealth 重验(expectedVersion opt-in 版本比对/退化 200 检查)→成功带新 nonce 上报审计(upgrade.health-verified)/失败本地 JSONL 留痕;安装期 deferred 重启补验 + maxPendingMs 过期兜底 + 状态机防漏;main.cjs 接线 + build.files 打包包含;test/upgrade-nonce.test.cjs 13 项(desktop 43/43)。
    • 方向 LL(Copernicus)· 矩阵 73 现场对接准备:mes_http.py readiness(probe)——configured/baseUrl/tokenPresent/connectivity/lastError/message 稳定字段,未配置 fail-closed 提示不 500、探测短超时绝不抛错(2xx ok/失败 lastError);GET/POST /api/integrations/mes/readiness[/probe];test_mes_readiness.py 8 项。
    • 方向 MM(Avicenna)· 矩阵 104 审计查询与报表前端:GovConsole「审计统计」分区(AuditStatsView:分类计数/动作 Top8/近 7 天趋势/告警概览含 traceAlerts 断链明细,中文标签+空态提示,前端聚合 limit=300 零后端改动);npm run build 通过。
    • 主控·基线同步:矩阵「当前验证基线」更新为 round-45 取证(888 passed + node/E2E/Defender/NSIS 门禁)+ GitNexus 索引规模 8,772 节点。
  • 为什么:按 plan.md 蓝图收口矩阵最后本地可做项;升级审计闭环、MES 现场对接第一步、审计报表可读性全部产品化。

  • 验证:全量回归 895 passed(隔离 APS_KNOWLEDGE_PATH);node 门禁 55/55(desktop 43 + packaging-smoke 12)+ updater-smoke 4/4;mes readiness 相关 33 pytest;前端 npm run build 通过;8003 新代码重启健康(/api/integrations/mes/readiness 已注册,鉴权前置)。

  • 边界:真实 MES 工厂对接/端点路径现场联调、applyUpdate 途中重启竞态根治(updater nonceMismatch→pending 语义)、签名/SBOM 上链、Defender for Endpoint、干净离线机实机、真实 GitHub CI、WORM 物理介质、HSM/KMS、麒麟/统信四组合实机、ASR/VLM、真实 WMS(均需外部环境/证书/后续轮)。

  • 类型:feature / security

  • 做了什么:新增 server/agent_core/tool_runtime.py:LLM 提议意图的统一执行入口——is_registered 校验(写入类匹配 _POWER_MAP、只读类白名单),未登记意图拒绝执行并写 TOOL 审计(tool.denied/P3),已登记意图委托 handle_intent(P2/P3 仍走 harness 确认卡)并写 tool.run 审计;gateway 聊天路径 _run_intent 改为经 run_tool 执行。

  • 为什么:矩阵 111 行「LLM 只有提议权」剩余验收「所有 LLM 工具调用都经统一工具运行时;不能通过未登记 API 或直接 store 写入绕过」。

  • 验证:test_tool_runtime.py 4 项(未登记拒绝+审计、已登记直通+tool.run、只读白名单放行、登记判定)通过;冒烟验证 unknown 拒绝、schedule.run 直通且双审计落盘。

  • 边界:其余 gateway 直连端点(scenario.apply 等)接入工具运行时、前端工具调用可视化留待后续轮。


2026-08-02 — 升级链路竞态根治:applyUpdate nonceMismatch→pending(round-47,主控)

  • 类型:fix(plan.md §14.1 离线升级闭环;矩阵 103 最后本地小项)

  • 做了什么:apps/desktop/updater.cjs 健康检查失败分支区分「升级途中 sidecar 重启导致的 nonce 轮换」——403 且已携带 nonce(details.nonceMismatch=true)时不再自动回滚(安装已成功,仅健康检查 nonce 过期),返回 {ok:false, deferredVerification:true, reason:'NONCE_MISMATCH'} + 审计 upgrade.health-pending(PENDING),由 Electron main 的 upgrade-nonce 协调器以新 nonce 补验;无 nonce 的 403(普通故障)仍走自动回滚;test/updater.test.cjs 新增 2 项非对称用例(带 nonce 403→pending 不回滚 / 无 nonce 403→回滚),desktop node 45/45。

  • 为什么:round-46 KK 标注的最大残留竞态——sidecar 在 applyUpdate 内部健康检查前完成重启时,自带检查用旧 nonce 403 会误触发回滚;本轮根治(非 nonce 类失败仍回滚,安全语义不变)。

  • 验证:desktop node 45/45;根 node 门禁(updater+packaging-smoke+nsis-smoke)全绿;全量回归 895 passed(隔离 APS_KNOWLEDGE_PATH);node --check 通过。

  • 边界:跨进程持久化 nonce 续接(应用重启即丢 pending)与签名/SBOM 上链、真实 GitHub CI、真实 MES/信创/离线机等外部项维持矩阵标注。

  • 类型:feature / governance

  • 做了什么:server/agent_core/plan_runtime.py 新增 node_at(时间线按版本取不可变节点,越界/不存在抛 PlanNotFoundError)与 replay_verify(L2 单节点/L3 动作级重放校验:给定输入重算 inputsHash 与目标版本比对,一致返回节点、不一致抛 PlanInputMismatchError);server/gateway/plan_api.py 新增 GET /{plan_id}/versions/{version}(时间线回放)与 POST /{plan_id}/versions/{version}/replay-verify(动作级重放校验)。

  • 为什么:矩阵 110 行「L0-L3 Plan」剩余项「时间线回放和 L2 单节点/L3 动作级重放」。

  • 验证:test_plan_replay.py 4 项(node_at 不可变版本、相同输入可复算、输入变更拒绝、L3 动作级重放)通过;既有 test_plan_runtime.py 8 项全绿。

  • 边界:Agent 自动编排(plan 节点驱动 workflow 分支)、批准/驳回审计留待后续轮。


2026-08-02 — 升级 pending 跨进程持久化(round-48,主控)

  • 类型:feature(plan.md §14.1 离线升级闭环;矩阵 103 稳健性增强)

  • 做了什么:apps/desktop/upgrade-nonce.cjs 协调器新增 statePath 持久化——setPending/markInstalled/settle/clear 均原子写 upgrade-state.json(tmp+rename,宽容失败);应用重启后新协调器恢复未过期 pending(status→verifying)等待新 sidecar 补验,过期自动丢弃;main.cjs 接线 {APS_HOME}/upgrade-state.json;测试 3 项(持久化往返/过期丢弃/settle 清空),desktop node 48/48、根 node 门禁 60/60。

  • 为什么:round-47 前 pending 为内存态,应用重启即丢续接上下文;持久化后升级验证可跨进程续接(配合 sidecar 新 nonce)。

  • 验证:desktop node 48/48;根 node 门禁 60/60;文档门禁 16 passed;node --check 通过(纯 node/Electron 接线,pytest 无影响)。

  • 边界:签名/SBOM 上链、真实 GitHub CI、真实 MES/信创/离线机、WORM 物理介质、HSM/KMS、MySQL 实机等外部项维持矩阵标注。

  • 类型:feature / security

  • 做了什么:新增 server/aps_domain/explore_boundary.py:readonly_view 主干世界只读视图(写操作/嵌套变异 fail closed 抛 PermissionError),run_explore 统一 Explore 通道(内部深拷贝沙盒,fn 只拿沙盒、主干永不外泄写引用);scenario.compare_scenarios 整体接入统一通道(baseline 经只读视图读取、策略级子沙盒深拷贝隔离)。

  • 为什么:矩阵 55 行「Explore 与 Runtime 数据边界」;此前深拷贝隔离是约定而非强制,Explore 工具理论上可绕过。

  • 验证:test_explore_boundary.py 5 项(顶层/嵌套写保护、沙盒隔离、嵌套变异隔离、越权测试)通过;既有 test_scenario_compare_does_not_mutate_world 等 18 项场景/边界测试全绿。

  • 边界:敏感性/鲁棒性等其他 Explore 工具逐一接入统一通道、前端 Explore 与 Runtime 视觉分区留待后续轮。


2026-08-02 — 外部验收执行手册(round-49,主控;goal blocked 期间准备性交付)

  • 类型:docs(plan.md §7/§14;为矩阵 10 个 Partial 行的外部验收固化执行步骤)
  • 做了什么:新建 docs/product/external-acceptance.md——按剩余行逐项给出前置条件/验收步骤/验收标准/代码锚点:真实 MES(readiness+联调)、真实 WMS(事件契约接入)、干净离线机安装(offline-check/NSIS/sidecar 冒烟)、Defender 实时防护+Endpoint 门禁、ASR/VLM 接入(Extractor register 契约)、信创四组合实机(platform-deps-check)、代码签名/SBOM 上链(upgrade-manifest 预留字段)、真实 GitHub CI(6-job workflow)、WORM 物理介质/HSM-KMS(audit_ledger 密封+加密)、MySQL 多主机(approval CAS 契约);附执行顺序建议(先授权提交固化 267 项改动→GitHub CI→真实 MES/WMS→其余)。
  • 为什么:goal 处于 blocked(剩余项全部需外部环境);本手册使资源到位后可「按单执行」,无需重新设计,为解除阻塞后的验收做直接准备。
  • 验证:文档门禁 4 passed;矩阵基线增加手册指针。
  • 边界:矩阵 10 个 Partial 行状态不变(仍需外部环境);无代码改动。

2026-08-02 — 最终验证 + 交付总览(round-50,主控;goal blocked 期间收尾)

  • 类型:docs(交付盘点;为提交授权与外部验收提供权威证据)

  • 做了什么:全量黄金测试最终复跑 895 passed(隔离 APS_KNOWLEDGE_PATH,确认 round-15~49 十五批累积工作树全绿);新建 docs/product/delivery-summary.md——总览指标(50 Done/10 Partial/0 Missing、895 测试、node/E2E/Defender/NSIS 多门禁)、15 批交付清单(50+ 并行 sub agent)、关键能力清单、剩余外部项(指向 external-acceptance.md)、提交授权建议。

  • 为什么:goal 处于 blocked(剩余 10 行全部需外部环境);交付总览让用户无需逐轮翻 CHANGELOG 即可评估 267 项未提交改动并决策授权提交。

  • 验证:全量回归 895 passed;文档门禁 4 passed;服务 8003/5173 健康。

  • 边界:矩阵状态不变(仍需外部环境/提交授权);无代码改动。

  • 类型:feature

  • 做了什么:server/knowledge/preferences.py:record 新增 project_id 维度(样本落 projectId);preferred_strategy 支持按项目过滤(个人全局与项目样本互不影响);新增 explain(得分明细 + cold/medium/high 置信 + 依据条数 + 原因文案)与 reset(按项目清样本);样本不足 3 条标记冷启动、并列最高分标记不确定;workflow schedule.run 与 gateway scenario.apply 调用点传入 world_key 实现项目隔离。

  • 为什么:矩阵 66 行「偏好学习影响默认策略」;此前仅简单“试排1分/采用2分”且无项目维度。

  • 验证:test_preference_upgrade.py 4 项(项目隔离、冷启动/充足解释、并列不确定、按项目重置)通过;既有 test_m3_knowledge.py 6 项全绿;端到端 schedule.run 带 world_key 冒烟通过。

  • 边界:前端偏好解释 UI、权重回归/规则归纳模型留待后续轮。


2026-08-02 — 现场数据保护与文档基线收口(round-62,主控取证 / A-DOC 回写)

  • 类型:verification / docs(不改代码与测试)
  • 做了什么:按当前工作区重新固化发布前证据口径:① 隔离测试环境下全量 pytest 907 passed,现场 master.db 验证前后各表计数完全不变;② Playwright 默认目标 127.0.0.1:8003 时 fail-closed,只有显式设置 E2E_ALLOW_LIVE_BACKEND=1 才允许连接现场后端;③ folder.schedule 富卡显示 有效 1357 / 问题 53 / 跳过 974,跳过行明确不计入问题行;④ Web build 通过,Playwright 三种配置加载门禁通过;⑤ 同步矩阵、交付总览与最终外部验收手册的 round、测试数、工作树和 Partial 口径。
  • 为什么:round-49~61 文档把“最终验收需要外部资源”过度概括成“10 个 Partial 全部只能等待外部资源”,且同时存在 861/888/895/904 多套测试基线与 267/273 工作树计数。round-62 将口径改为:10 个 Partial 的最终验收仍依赖真实外部环境,但其中仍有可本地推进的适配、持久化和发布门禁缺口;状态保持 Partial,不虚假标记 Done。
  • 验证:全量 pytest 907 passed;现场 master.db 前后计数完全一致;Web build 通过;Playwright 三种配置加载门禁通过;folder.schedule 富卡取证为 1357/53/974,且 skippedRows 不计入 totalErrors。
  • 边界:A-DOC 仅修改 docs/CHANGELOG.md、docs/product/plan-completion-matrix.md、docs/product/delivery-summary.md、docs/product/external-acceptance.md;不修改代码/测试,不提交。矩阵仍为 50 Done / 10 Partial / 0 Missing。

2026-08-02 — 目录分析区分「非排产块」:问题行噪声收敛 1027→53(round-61,主控)

  • 类型:fix / UX(现场分析报告可读性)
  • 做了什么:server/aps_domain/folder_pack.py 新增 _MOM_SKIP_BLOCKS(生产模型/质检方案/仓储模型/人力资源/客户管理/供应商管理),analyze_work_dir 把命中非排产块的 sheet 问题行单独计入 skipRows/skippedRows,不再混入 errorCount/totalErrors;_to_markdown 在表格后追加脚注「另有 N 行来自非排产块…已跳过,不计入问题行」;workflow.py folder.schedule UIBlock 透传 skippedRows。
  • 为什么:锐扬 MOM 收集表的工厂/质检/仓储/人力/客户/供应商块本就不导入,此前 1027 问题行里 974 行来自这些块,会误导用户以为数据大面积出错;现在问题行只反映真实数据错误(02 表头行 1 + 07 设备缺编码 52)。
  • 验证:真实目录实测 totalErrors 1027→53、skippedRows 974;markdown 脚注与浏览器回复均正确(「另有 974 行来自非排产块…已跳过」);test_folder_pack/test_importers/test_guidance 16 项通过;全量黄金回归 904 passed。
  • 边界:跳过逻辑按 sheet 名匹配(锐扬模板名),其他模板同名块同样受益;不影响 okRows/确认卡语义。

2026-08-02 — 全链路排产就绪验证:订单样例入目录即可开排(round-60,主控)

  • 类型:验证(现场排产端到端闭环)
  • 做了什么:将 订单-样例.csv(订单号/客户/产品编码/数量/交期/优先级/加急,示例行 SO-RY-20260801)放入 RUIYANG_DEMO_DIR 指向的工程目录后,浏览器实测「给我模拟排产一下」:目录分析识别订单 1 有效行,排产必备全齐(订单✓1 / 物料✓1356 / 工艺路线✓446 / 设备✓87),结论「基本具备开排条件」、调试信息「可开排」,P2 确认卡正常生成(有效行合计 1357:订单 1 + 物料 1356 + 工艺 446 + 设备 87,批准后写入柔性主数据并试排一版,可回滚)。同步更新 docs/product/ruiyang-data-runbook.md 排产必备状态与验证记录。
  • 为什么:证明用户下一步(替换真实订单 → 带我排一版/根据这些数据排产 → P2 确认)端到端可用,现场数据接入全部打通。
  • 验证:浏览器实测如上;无代码改动;全量黄金 904 passed 基线不变。
  • 边界:样例行需替换为真实订单(产品编码须在 02/04 表内、交期非空);问题行 1027 多为非排产块(工厂/质检/仓储/人力等)不影响入库;矩阵状态不变(10 个 Partial 仍依赖外部资源)。

2026-08-02 — 外部验收手册增补资源清单收集表(round-59,主控)

  • 类型:docs(矩阵 10 个 Partial 外部项的落地准备)
  • 做了什么:docs/product/external-acceptance.md 新增「11. 资源清单收集表」——10 项外部验收各自「需要准备的资源 + 具体字段/获取方式」(MES base URL/token、WMS 事件接口、离线机镜像、DfE 门户、模型服务 URL/API key、信创四组合、签名证书/时间戳、GitHub 授权、WORM 介质/HSM-KMS、MySQL DSN),并给出并行推进建议;同步更新执行顺序中的工作树改动数(267→273)与 round-52~58 修复说明。
  • 为什么:外部资源是剩余矩阵项的唯一阻断;把「找谁要什么」固化成表,用户/现场可先行收集,资源到位即可按第 1-10 节执行。
  • 验证:文档渲染核对通过;无代码改动(不需要跑测试)。
  • 边界:资源到位后按单执行并回写矩阵状态;现场用户当前仍等订单表(订单-样例.csv)完成首次排产验收。

2026-08-02 — 订单导入支持「加急」列 + 锐扬数据接入手册/订单样例(round-58,主控)

  • 类型:feature / docs(现场订单表接入资产)
  • 做了什么:① importers.py 表头别名新增 加急→isRush(订单表常用列,导入后订单带急单标记);② 在工程目录放置 订单-样例.csv(列:订单号/客户/产品编码/数量/交期/优先级/加急,示例行改数即可用);③ 新增 docs/product/ruiyang-data-runbook.md:sheet→导入类型映射表、制造流程→工艺路线说明、订单表格式与必填项、排产必备清单现状(物料✓910/工艺✓446/设备✓87/订单缺)、工时缺失默认 1 分钟兜底、P2 确认与触发路径。
  • 为什么:现场排产唯一缺口是订单表;给计划员可直接填写的样例与手册,减少来回确认。
  • 验证:新增 test_order_csv_rush_column_maps_to_is_rush(加急列→isRush=True)通过;importers 6 项全绿;全量黄金回归 903 passed;订单样例 CSV 已按 utf-8-sig 落盘(Excel 可直接打开)。
  • 边界:订单样例行(SO-RY-20260801)仅作演示,导入前需替换/删除;工时仍缺(默认 1 分钟,需另行补表)。

2026-08-02 — 锐扬 02-工艺模型「制造流程」列提取为工艺路线(round-57,主控)

  • 类型:feature / fix(现场表自带工艺路线未被识别)
  • 做了什么:server/aps_domain/importers.py _rows_from_xlsx 检测「制造流程/工艺代码/工艺流程」列(锐扬 MOM 02-工艺模型第 17 列起,表头后次行为 01..12 序号),为每个数据行合成 routing 视图:{productCode=ERP品号, seq=序号, operationCode/operationName=工艺代码}(如 ZP01组装→ZP01/组装、LM01POP拉铆→LM01POP/拉铆),随 preview_file 按 routing 批校验入库。
  • 为什么:上一轮目录分析显示「工艺路线/工时 × 缺少」,但现场表的 02-工艺模型自带制造流程(每物料 3-12 步工艺代码),只是从未被提取;提取后排产必备仅剩「订单」缺口。
  • 验证:真实文件 totalOk 910→1356(+446 条工艺路线,样例 A0050101-00280 seq=1 op=ZP01/组装);浏览器实测「给我模拟排产一下」→ 物料 ✓1356 / 工艺路线 ✓446 / 设备 ✓87 / 仅缺订单,P2 确认卡(导入并试排 · 1356 行)正常生成;黄金测试扩展 test_xlsx_mom_template_multiblock_headers_soft_preview(02 sheet 加制造流程列,断言 routing 视图 5 行 + 代码/名称解析);相关 10 项测试通过;全量黄金回归 903 passed。
  • 边界:工时(stdTimePerUnit)现场表无该列,入库路线无单件工时(排产时可用默认/后续补);订单仍缺(现场表无订单 sheet,且当前世界唯一订单 MOM--00280 交期为空)。

2026-08-02 — JMS 无角色用户默认 planner,P2 审批门禁可用(round-56,主控)

  • 类型:fix(真实 JMS 平台不返回角色字段,登录用户被审批角色门禁卡死)
  • 做了什么:JmsAuthProvider._identity(server/auth/providers.py)在 JMS profile 未返回 roles(真实平台实测无该字段)时,默认注入 planner 角色(可用 JMS_AUTH_DEFAULT_ROLE 覆盖,留空关闭);.env 增加 JMS_AUTH_DEFAULT_ROLE=planner。
  • 为什么:审批角色默认集为 planner/approver/admin,而真实用户张振 roles=[],导致任何 P2 动作(导入确认/发布/写主数据)都报「当前身份没有发起审批的角色权限」,产品不可用。
  • 验证:live 登录实测返回 roles:["planner"];浏览器端「给我模拟排产一下」→ 目录分析(910 有效行)→ P2 确认卡正常生成(导入工程目录并试排 · 批准执行/驳回);test_jms_auth_provider.py 新增 3 项(无角色默认 planner / env 覆盖 / 有角色不被覆盖);全量黄金回归 903 passed。
  • 边界:JMS 后续返回真实角色时以角色为准;P3 双人 SOD 语义不变。

2026-08-02 — 锐扬 MOM 收集表模板导入:多行标题/分块表头自动识别(round-55,主控)

  • 类型:feature / fix(现场真实表 0 有效行 → 910 有效行)
  • 做了什么:server/aps_domain/importers.py:① _rows_from_xlsx 改为表头行自动探测——按规范化后命中已知字段映射最多的行(序号/编码/名称/单位/数量…)作为表头,跳过「物料清单」等标题行与分块模板(物料组块 + 物料主数据块),平铺表第 1 行即表头时行为不变;② 新增别名:ERP品号/财务编号/厂内编号→code、单套用量→quantity、物料简称→name、物料组名称→type、规格型号→spec。
  • 为什么:现场 湖南锐扬MOM主数据收集表.xlsx(9 个 sheet、多行标题/合并单元格)此前全部 2038 行校验失败(0 有效行),给我模拟排产一下 只能报「还不能排」;实际 02-工艺模型(物料清单)、04-物料模型、07-设备模型都含真实数据。
  • 验证:真实文件实测 totalOk 0→910(02 工艺模型 415 物料 + 04 物料模型 408 物料 + 07 设备 87 台,canCommit=True),剩余错误行均为非排产类块(工厂/质检/仓储/人力/客户/供应商);新增 test_xlsx_mom_template_multiblock_headers_soft_preview + test_xlsx_flat_header_row_0_behavior_unchanged;相关 14 项测试通过;全量黄金回归 903 passed;浏览器端「给我模拟排产一下」→ 目录分析显示 910 有效行并出 P2 确认卡。
  • 边界:02 工艺模型按物料入库(BOM 结构/层次暂不建父子边,工序工时需另行补表);订单/工艺路线工时仍缺(现场表本身没有这两块)。

2026-08-02 — 「模拟排产」类口令落空修复:直接执行而非引导文案(round-54,主控)

  • 类型:fix(意图规则快路漏匹配,用户现场复现「竟然不理解」)
  • 做了什么:server/agent_core/intent.py 的 _is_imperative_schedule 尾缀正则只支持 排/排产/排一下/排程 结尾,排产一下、排产一版、模拟排产(一下) 等口语全部漏匹配,落到 LLM 降级 → assistant.py 的「我先按你的话理解一下…想开排说带我排一版」通用引导(现场实测复现)。修复:正则扩展为 (模拟|试)?排(产|程)?(一下|一版)? 并加入 模拟排产、试排一版/一下、排一下 等独立词条;命中后走既有祈使排产路径(工程目录有表 → folder.schedule,否则 flex.schedule)。
  • 为什么:现场用户输入「给我模拟排产一下」得到的是四选一引导而非执行,是「竟然不理解」的直接根因;同批修复 帮我排产一下 等同类漏匹配。
  • 验证:快路实测 10 个新/旧祈使句全部 flex.schedule/folder.schedule;负向守护:带我排一版→wizard、怎么排产→wizard、模拟报工→mes.report、帮我看看现在能不能排→assistant.reply、解析项目文件夹→folder.analyze 均不被误吞;test_assistant.py 扩展祈使句清单 + 新增 test_simulate_schedule_does_not_hijack_other_intents;浏览器实测「给我模拟排产一下」→ 真实解析工程目录 锐扬(0 有效行/2038 问题行)并给出补数诊断,不再返回引导文案;全量黄金回归 898 passed。
  • 边界:若工程目录存在 Excel 但行校验不过,排产口令按产品规则走 folder.schedule 数据门禁(提示补齐数据);真实数据补齐后即可开排。矩阵状态不变。

2026-08-02 — OpenAPI 生成回归门禁(round-53,主控)

  • 类型:test(round-52 修复的防回归守护)
  • 做了什么:新增 tests/golden/test_openapi_schema.py(2 项):
    1. test_openapi_schema_generates_without_forward_ref_error——create_app().openapi() 必须完整生成,且 12 个受影响路由(/api/import/commit、/api/templates/apply、/api/rag/query、/api/rebuild/、/api/knowledge/import、/api/skills/、/api/mcp/plugins/*、/api/jobs)都在 schema 中;
    2. test_affected_request_models_are_module_scope——12 个请求模型必须可从 server.gateway.app 模块级导入,且 __qualname__ 不含 create_app(直接编码 round-52 修复前的状态,修复前必失败)。
  • 为什么:round-52 修复了函数局部 Pydantic 模型导致 /openapi.json 500 的缺陷,但当时没有回归测试;本测试把该约束固化为黄金门禁,防止后续把模型类再写回函数局部。
  • 验证:新增 2 项通过(1.65s);相邻子集复跑 test_contract_sync + test_health_version 17 项全绿;live GET /openapi.json 200 不变。
  • 边界:矩阵状态不变(剩余 10 个 Partial 仍依赖外部资源)。

2026-08-02 — 修复 /openapi.json 500:12 个路由请求模型从 create_app 局部上移模块级(round-52,主控)

  • 类型:fix(FastAPI OpenAPI 生成崩溃修复)
  • 做了什么:定位 GET /openapi.json 返回 500(PydanticUserError:TypeAdapter[Annotated[ForwardRef('ImportCommitRequest'), ...]] is not fully defined)。根因:server/gateway/app.py 的 create_app() 函数体内定义了 12 个路由请求模型类(ImportCommitRequest/TemplateApplyRequest/RagQueryRequest/RebuildStartRequest/RebuildRollbackRequest/KnowledgeImportRequest/SkillRegisterRequest/SkillEnableRequest/McpPluginRegisterRequest/McpPluginEnableRequest/McpPermissionRequest/JobSubmitRequest),FastAPI 生成 OpenAPI schema 时按模块全局解析 ForwardRef 失败(报错只停在第一个,实际 12 个同隐患)。修复:12 个模型类整体去缩进上移为模块级定义(与既有 ~50 个 Request 模型同层),路由函数体零改动,类名经 Python 词法作用域照常解析;顺带使这些模型可被模块级 import。
  • 为什么:/openapi.json 500 破坏 Swagger 文档与基于 schema 的契约校验;属于不依赖外部资源、可本地修复的真实缺陷。
  • 验证:create_app().openapi() 生成成功(181 paths,此前抛 PydanticUserError);8003 重启后 GET /openapi.json 200(152KB)+ /docs 200;受影响路由黄金测试子集 78 项通过(importers/multimodal/multimodal_image/rebuild_pipeline/skill_console/mcp_bus/async_jobs/routing_templates/contract_sync,隔离 APS_KNOWLEDGE_PATH);全量黄金回归 895 passed(隔离 APS_KNOWLEDGE_PATH,与 round-50 基线一致);live 冒烟 5 个受影响端点均正常注册(401 登录态保护属预期);GitNexus 门禁 impact(import_commit) risk=LOW(direct 0/processes 0)。
  • 边界:未改任何路由逻辑;矩阵状态不变(剩余 10 个 Partial 仍依赖外部资源:真实 MES/WMS、ASR/VLM、信创实机、干净离线机、代码签名证书、真实 GitHub CI、WORM 介质、HSM/KMS、MySQL 多主机)。

2026-08-02 — 侧栏乱码会话清理 + E2E 测试卫生预防(round-51,主控)

  • 类型:fix + 测试卫生(现场工作区污染修复)

  • 做了什么:

    1. 修复:侧栏出现 ???? / ??????? 乱码任务——定位为早期 E2E 探针残留的空会话(e2e-probe-001/002,标题被存成字面 ?,05:45/05:47 创建),非业务数据;经 ProjectStore.delete_session 正规删除,侧栏恢复正常(3 任务)。
    2. 预防:apps/web/playwright.config.ts 在本地默认指向现场 8003 且非 CI 时打印警告(E2E 会在现场工作区创建真实会话);docs/development/e2e.md 新增「3.5 数据隔离」节(隔离后端启动方式 + CI 一致性说明)。
  • 为什么:本地 E2E 冒烟(dev/preview)默认复用运行中的 8003 现场后端,测试创建的真实会话会污染用户工作区(曾产生乱码残留);预防后不会再出现。

  • 验证:npm run build(tsc -b + vite)通过;浏览器确认侧栏乱码任务已消失。

  • 边界:柔性排产 任务(e2e-probe-003,含 FV20260802-005 结果)同为 E2E 产物但被保留(用户可能在用),可在任务操作中删除;矩阵状态不变。

  • 类型:feature / security

  • 做了什么:新增 server/agent_core/audit_filelock.py:JSONL 追加写统一走 locked_append(进程内锁 + Windows msvcrt 区域锁,可配 APS_AUDIT_LOCK_RETRY_SECONDS),audit_ledger.append 与 audit_mirror.append_event 均切换接入,防多进程并发写行交错损坏证据;audit_ledger.archive_old 清理策略:超过保留窗口(APS_AUDIT_LEDGER_KEEP_LAST,默认 10000)的旧锚定记录移到独立 archive/<yyyy-mm>.jsonl 目录,分级存储而非删除,证据不丢失。

  • 为什么:矩阵 116 行「审计 append-only」剩余项「清理策略、跨进程锁强化」。

  • 验证:test_audit_appendonly_guard.py 4 项(4 线程×50 并发 append 200 行无丢失、归档窗口保留且证据归档可读、窗口内 no-op、镜像并发回归)通过;既有审计测试 33 项全绿。

  • 边界:WORM/加密留待后续轮(需外部介质/密钥管理)。


  • 类型:feature / security
  • 做了什么:新增 server/agent_core/audit_merkle.py:完整二叉树 Merkle 树(叶子=事件 hash,逐层两两 SHA-256 配对到根;空树根=创世根;奇数节点上提),merkle_root 确定性且对顺序/数量/内容变化断根;merkle_proof 生成 O(log n) 成员证明、verify_proof 沿 sibling 路径重建根校验;audit_export.py 的 JSON 导出携带 merkleRoot(与本地复算一致)。
  • 为什么:矩阵 104 行「全审计」剩余项「完整 Merkle 树」;此前仅链式双哈希聚合(audit_ledger.audit_root),无成员证明能力。
  • 验证:test_audit_merkle.py 6 项(确定性/敏感性、全索引 proof 校验、错误叶子拒绝、越界、单/空边界、导出携带根)通过;8 叶树 proof sibling 数=树高 3。
  • 边界:WORM 物理介质留待后续轮(需外部介质);Merkle 根当前随导出提供,尚未写入独立介质锚定。

  • 类型:feature / security
  • 做了什么:新增 server/agent_core/audit_notify.py:按配置渠道(APS_AUDIT_ALERT_CHANNELS,console/jsonl:/webhook:,逗号分隔)投递审计完整性告警;critical/warning 默认投递、info 默认跳过(APS_AUDIT_ALERT_INCLUDE_INFO=1 开启);同 code+message 在 APS_AUDIT_ALERT_DEDUP_SECONDS(默认 300s)窗口内防抖去重;/api/gov/audit 读取审计时联动投递(失败不阻断读取)。
  • 为什么:矩阵 104 行「全审计」剩余项「告警通知渠道」;此前 build_alerts 只聚合、无投递。
  • 验证:test_audit_notify.py 4 项(console 投递+防抖、jsonl 落盘、info 默认跳过、webhook 失败非致命);本地 HTTP 冒烟 webhook 成功投递(received 200)。
  • 边界:WORM 物理介质、完整 Merkle 树留待后续轮;通知仅内置 console/jsonl/webhook,邮件/IM 可经 webhook 对接。

  • 类型:feature / governance
  • 做了什么:server/state/checkpoints.py 的 CheckpointStore.create() 新增可选 conversationSide 完整对话侧快照参数(workspace+messages+plans);server/aps_domain/workflow.py 新增 _create_checkpoint 统一建档入口(自动收集对话侧)、_restore_conversation_side(回滚时成对恢复对话侧),全部 23 处 P2 写前建档与回滚分支接入;test_m2_state.py 增至 6 项(成对快照往返逐字段一致、不传对话侧向后兼容)。
  • 为什么:矩阵 52 行「对话状态与世界状态真正成对快照、成对切换和成对回滚」;此前仅存 world + conversationNote 摘要。
  • 验证:test_m2_state.py 6 passed;端到端:建档(含对话侧)→ 污染世界 → 回滚 → 世界侧逐字段恢复、对话侧快照保留。
  • 边界:活动分支(BranchNode 树)与 PlanStore 可恢复接口留待矩阵 51/110 行落地后纳入。

  • 类型:feature / governance
  • 做了什么:server/aps_domain/workflow.py 新增 _build_external_trace/_external_audit_evidence/_external_inputs_hash,ALGO_RUN flex.schedule.external 审计携带 traceChainHash/traceCount/traceSummary(schedule-version/run/algorithm 三条链,evidence 含 skill/run/schedule-version 引用);server/integrations/algo_skill_stub.py 的 runId 由随机 uuid 改为输入派生确定性哈希(可复算);前端 GovConsole.tsx AuditView 新增「可追溯链」列展示 traceChainHash/traceCount/traceSummary(details 可展开,gov-trace 样式)。
  • 为什么:矩阵 114 行剩余「EXTERNAL 引擎接入、前端追溯 UI」;EXTERNAL 柔性轨此前审计无 trace 链,stub runId 随机导致链不可复算。
  • 验证:test_trace_external.py 3 项(审计携带 traceChainHash/格式、evidence 三引用、同输入可复算)通过;npm run build(tsc + vite)通过;浏览器审计链面板实测 schedule.run 行显示 trace 链且可展开。
  • 边界:EXTERNAL 真实 HTTP skill 端到端验收、trace 断链可视化提示留待后续轮。

  • 类型:fix / governance
  • 做了什么:_build_run_trace 的链哈希去掉墙钟 solveTimeSec(改为保留在 ALGO_RUN 审计 rationale 顶层字段),使 CP/HYBRID 真实求解(墙钟 > 0)不再破坏链可复算;新增 _run_audit_evidence 把 schedule-version:<id> 引用并入审计 evidence(对齐 round-15 计划假设 2);test_trace_run.py 增至 6 项(新增全引擎 RULE/CP/HYBRID/GA 可复算 + evidence 含 schedule-version 引用、墙钟不参与链哈希)。
  • 为什么:worker 回传残余风险指出 CP/HYBRID 引擎链哈希含墙钟导致两次求解哈希不同,矩阵 114 行「其余引擎接入 trace_chain」被该问题阻塞。
  • 验证:test_trace_run.py 6 passed;RULE/CP/HYBRID/GA 同输入同种子两次求解 chainHash 一致;solveTimeSec 1.234 vs 5.678 时链哈希相同。
  • 边界:EXTERNAL 引擎接入、前端追溯 UI 留待后续轮。

  • 类型:feature / governance
  • 做了什么:server/aps_domain/workflow.py 的 _run_schedule 求解后经 _build_run_trace 构造 EvidenceItem 链(schedule-version/run/algorithm,含 _run_inputs_hash 输入包指纹),ALGO_RUN schedule.run 审计 rationale 新增 traceChainHash/traceCount/traceSummary;trace 构造失败返回空链摘要,不影响求解。
  • 为什么:矩阵 114 行剩余「各引擎实际写入 trace_chain」首个落地(schedule.run 首接入),验证 evidence.py 可用性。
  • 验证:test_trace_run.py 3 项(审计携带 traceChainHash 且格式正确、同输入/同种子/同版本可复算、元素/顺序/输入变化断链)通过;全量黄金测试 490+ passed;ruff 干净。
  • 边界:CP/GA/外部引擎独立写入 trace_chain、前端追溯 UI 留待后续轮。

2026-08-01 — 审计完整性告警

  • 类型:feature / security
  • 做了什么:新增 server/agent_core/audit_alerts.py(build_alerts 聚合链断裂 critical/锚定不匹配 warning/账本损坏 critical/未锚定 info/镜像未启用 info);/api/gov/audit 返回 alerts;前端 AuditAlert 类型 + AuditView 按 severity 展示告警条(样式 .gov-alert-*)。
  • 为什么:矩阵 104 行剩余「异常告警」;审计闭环最后一块。
  • 验证:test_audit_alerts.py 5 项(正常无告警、链断裂、锚定不匹配、未锚定/账本损坏、镜像源)通过;全量黄金测试固定运行时 490 passed;前端 tsc 通过;ruff 干净。
  • 边界:WORM 物理介质、完整 Merkle 树、告警通知渠道(邮件/IM)留待后续轮。

2026-08-01 — 审计合规导出与保留脱敏

  • 类型:feature / security / compliance
  • 做了什么:新增 server/agent_core/audit_export.py:sanitize_event(token/password/secret/key/authorization/credential 键值递归掩码)与 export_events(json/csv,含元信息);网关 GET /api/gov/audit/export?format=json|csv 导出当前作用域审计事件(脱敏)+ 链/锚定摘要。
  • 为什么:矩阵 104 行剩余「保留脱敏、合规导出」;审计闭环的收尾能力。
  • 验证:test_audit_export.py 6 项(敏感键掩码、json/csv 可解析、未知格式拒绝、网关端点、worldKey 非敏感保留)通过;全量黄金测试固定运行时 485 passed;ruff 干净。脱敏采用精确键集合,避免误掩 worldKey 等含 "key" 子串字段。
  • 边界:WORM 物理介质、完整 Merkle 树、异常告警、前端导出 UI 留待后续轮。

2026-08-01 — 审批转派(transfer)

  • 类型:feature / governance
  • 做了什么:ApprovalBackend.transfer()(文件 + 共享 database 双后端,DB 用 CAS 重试)+ harness.transfer_confirmation() + 网关 POST /api/actions/transfer;P2 可把待确认项转派给指定用户(转派后 owner=目标、原 owner/delegate 不可再审批),P3 拒绝转派保双人职责分离;历史事件 TRANSFERRED 记录 from/to。
  • 为什么:矩阵 P3「外部副作用二次确认」剩余项(转派审批);委托之后审批域的自然增量。
  • 验证:test_approval_transfer.py 5 项(owner 转派、非 owner 拒绝、P3 拒绝、转派给自己 no-op、DB 持久化)通过;全量黄金测试固定运行时 479 passed;ruff 干净。
  • 边界:批量转派、委托撤销、转派 UI 展示、MySQL 实机故障注入留待后续轮。

2026-08-01 — 统一 EvidenceItem 可追溯链

  • 类型:feature / governance
  • 做了什么:新增 server/agent_core/evidence.py:EvidenceItem(结构化证据记录:kind/ref/version/runId/engine/seed/inputsHash/knowledgeVersion/confirmId/note)、evidence_ref/parse_evidence_ref(<kind>:<id> 语法,kind 白名单防注入)、trace_chain()(规范化 JSON + SHA-256 链哈希,任何元素/顺序/内容变化断链,可复算)。
  • 为什么:矩阵 114 行剩余「统一 EvidenceItem;输入包、算法版本、种子、知识版本和用户确认可串成一条链」;此前 run-id/solverMeta/seed 分散在各引擎。
  • 验证:test_evidence_item.py 6 项(ref 往返、kind 白名单、链确定性、内容/顺序断链、schedule-version 兼容、dict 复算)通过;全量黄金测试固定运行时 474 passed;ruff 干净。
  • 边界:各引擎实际写入 trace_chain、前端追溯 UI 留待后续轮。

2026-08-01 — 审批委托(delegation)

  • 类型:feature / governance
  • 做了什么:stage_confirmation(..., delegate_user_id=...) 出卡时可指定被委托人;P2 单重审批作用域允许 owner 或被委托人操作(_matches_current_scope),P3 双人职责分离不受委托影响(委托不视为身份合并);delegateUserId 随 record 在文件/共享 database 双后端持久化。
  • 为什么:矩阵 P3「外部副作用二次确认」剩余项之一;此前审批只认 owner。
  • 验证:test_approval_delegate.py 5 项(delegate 可审批、非 delegate 拒绝、owner 仍可、P3 SOD 不变、DB 后端持久化)通过;全量黄金测试固定运行时 468 passed;ruff 干净。
  • 边界:转派、批量委托、委托撤销、MySQL 实机故障注入留待后续轮。

2026-08-01 — 契约生成自动化与差异检查门禁

  • 类型:feature / governance
  • 做了什么:新增 scripts/generate_contract_types.py:从 shared/schemas/*.json 生成 TS 类型声明(interface + 枚举 literal union,schema 为权威源);新增 tests/golden/test_contract_generation.py 5 项门禁(生成器对全部 7 个 schema 可执行、必填字段/枚举与 schema 一致、手写 types.ts 关键面 ⊆ schema、生成确定性)。
  • 为什么:矩阵 117 行剩余「契约生成自动化(schema → pydantic/TS)」;此前一致性靠手写 + 校验,无可复用生成源。
  • 验证:test_contract_generation.py 6 项(含 nullable 类型映射)通过;全量黄金测试固定运行时 462 passed;ruff 干净。
  • 边界:pydantic 端自动生成与复杂嵌套类型完整支持留待扩展;生成器不自动改写手写 types.ts(供人工采用/差异检查)。

2026-08-01 — 审计事件独立介质镜像(AuditMirror)

  • 类型:feature / security / governance
  • 做了什么:新增 server/agent_core/audit_mirror.py(AuditMirror,按租户/项目隔离 append-only JSONL,原子追加 + fsync);APS_AUDIT_MIRROR=1 时 write_audit 同步镜像每条审计事件(尽力而为,失败只记日志不阻断业务);/api/gov/audit 有镜像时以镜像为事件源(响应含 source: mirror|world),业务进程修改 world 无法抹掉独立介质证据。
  • 为什么:矩阵 116 行剩余「业务进程无法修改历史事件;独立介质」——此前审计事件只存世界内,改 world 即抹掉。
  • 验证:test_audit_mirror.py 6 项(追加/读取、隔离、改 world 不影响镜像、开关、write_audit 镜像、镜像事件链校验)通过;全量黄金测试固定运行时 457 passed;ruff 干净(gateway 8 处 F401/F811 为 HEAD 预存在)。
  • 边界:镜像默认关闭(APS_AUDIT_MIRROR=1 显式启用);_mirror_event 全异常兜底(严格尽力而为);WORM/加密、清理策略、跨进程锁强化留待后续轮。

2026-08-01 — 文档技术选型漂移门禁

  • 类型:docs / governance
  • 做了什么:修订 docs/architecture/overview.md 与 docs/product/positioning.md 的桌面技术选型描述——从「Tauri(后期/规划)」改为「Electron(当前实现,apps/desktop;Tauri 目标态待产品/架构决策)」,消除与代码事实(Electron 43.2.0)的漂移;新增 tests/golden/test_doc_drift.py 门禁:桌面描述必须含 Electron 或「待决策」标注、禁止孤立 Tauri 绝对描述、Hybrid 引擎描述与代码一致。
  • 为什么:矩阵 117 行点名「Hybrid、Tauri/Electron 文档描述漂移」;此前 overview/positioning 与 desktop.md 自相矛盾。
  • 验证:test_doc_drift.py 4 项通过;全量黄金测试固定运行时 451 passed;ruff 干净。
  • 边界:Tauri/Electron 终局决策仍待产品/架构;契约生成自动化留待后续轮。

2026-08-01 — 审计独立介质锚定(AuditLedger)

  • 类型:feature / security / governance
  • 做了什么:新增 server/agent_core/audit_ledger.py:audit_root(events)(对链哈希做双哈希聚合根)与 AnchorLedger(按租户/项目隔离的 append-only JSONL 账本,原子追加 + fsync);/api/gov/audit 返回 anchor 状态(已锚定/根/事件数/ok),新增 POST /api/gov/audit/anchor 显式锚定;与既有 verify_audit_chain 链式校验互补(事件体篡改由链校验捕捉、哈希序列/账本行删改由锚定捕捉)。
  • 为什么:矩阵「全审计 / 审计 append-only 且可检测篡改」P0 剩余项——此前审计只存世界内,无独立介质与外部锚定证明。
  • 验证:test_audit_ledger.py 6 项(根确定性/顺序数量敏感、锚定往返、hash 篡改检测、账本行删除检测、root+chain 互补、租户隔离)+ test_audit_anchor_api.py 1 项(端点端到端:GET 未锚定→POST 锚定→GET 已锚定)通过;全量黄金测试固定运行时 447 passed;ruff 干净。
  • 边界:审计事件仍存世界内(可被业务进程改写),独立存储迁移、WORM、Merkle 树、导出与告警留待后续轮。

2026-08-01 — 审批意见 UI 输入框(单条+批量)

  • 类型:feature / ui
  • 做了什么:GovConsole 待审批列表每条确认卡新增「审批意见」输入框,批量操作栏新增公共意见输入框;postConfirm/postConfirmBatch 支持 note 参数透传(接口能力此前已就绪,本次补齐前端入口);审批历史「意见」列由此真正可用。
  • 为什么:页面巡检员 WARN——接口支持 note 但 UI 无输入框,意见列恒显示「—」。
  • 验证:test_confirm_batch.py 5 项(新增单条 confirm API note 透传断言);全量黄金测试固定运行时 440 passed;前端 tsc 通过;ruff 干净。
  • 边界:无。

2026-08-01 — 批量审批(confirm-batch)

  • 类型:feature / governance
  • 做了什么:新增 POST /api/actions/confirm-batch 批量确认端点(同一决定应用于多条确认卡,逐条复用单条执行语义:证据校验、P3 双人、驳回、审计;单条失败隔离不阻断其余;令牌不存在/已失效明确标记失败);GovConsole 待审批列表新增多选/全选 + 批量批准/驳回;前端 postConfirmBatch 与类型同步。
  • 为什么:矩阵 P3「外部副作用二次确认」剩余项之一;此前待审批只能逐条操作。
  • 验证:test_confirm_batch.py 4 项(批量 P2 批准、P3 首次批准 secondConfirmRequired、批量驳回、单条失败隔离)通过;全量黄金测试固定运行时 439 passed;前端 tsc 通过;ruff 干净(gateway 8 处 F401/F811 为 HEAD 预存在)。
  • 边界:委托/转派审批、文件→DB 存量迁移、WORM 归档、MySQL 实机故障注入留待后续轮。

2026-08-01 — 审批意见(note)贯穿批准流程

  • 类型:feature / governance
  • 做了什么:take_confirmation/execute_confirmed/网关 ConfirmRequest 支持可选审批意见 note;ApprovalStore.decide 与 DatabaseApprovalStore.decide 将意见写入 approvals 记录与审批历史事件(驳回路径同样落库);管理台审批历史新增「意见」列展示;前端 ApprovalActor.note 类型同步。
  • 为什么:矩阵 P3「外部副作用二次确认」剩余验收项首个子项;此前审批历史只有时间/动作/结果,无决策依据。
  • 验证:双后端聚焦 46 passed(新增 note 批准/驳回断言);全量黄金测试固定运行时 435 passed;前端 tsc -b 通过;ruff 干净(gateway 8 处 F401/F811 为 HEAD 预存在,不在本轮改动范围)。
  • 边界:委托/转派/批量审批、文件→DB 存量迁移、WORM 归档、MySQL 实机故障注入留待后续轮。

2026-08-01 — 契约漂移门禁补全:公共排产契约纳入三方校验链

  • 类型:feature / governance / fix
  • 做了什么:把 scheduling_problem / scheduling_solution / plan_node 三个公共排产契约纳入 tests/golden/test_contract_sync.py 三方校验链(schema 字段/必填/枚举 ↔ Python 模型 ↔ 网关契约端点),并新增 schema 清单门禁(磁盘 schema 与测试覆盖集不一致即失败)与不兼容消费者漂移测试。修复真实契约漂移:scheduling_dto.py 的 orders/routings/resources(problem)与 operations(solution)、plan_runtime.py 的 evidenceRefs 按 schema required 去掉空默认值(fail-closed);移除预存在未用 import。
  • 为什么:矩阵 P0 批次点名「三层契约漂移门禁」;此前 4 个契约有校验,3 个公共排产契约漂移无门禁。
  • 验证:test_contract_sync.py 12 passed(原 6 + 新 6);依赖测试 28 passed;全量黄金测试固定运行时 ≥425 通过;ruff 干净。
  • 边界:契约生成自动化与 Hybrid/Tauri 文档漂移门禁留待后续轮次。

2026-08-01 — 证据链 v1:强关联扩展到全部 P2/P3

  • 类型:feature / security / governance
  • 做了什么:把 mes.dispatch 的「确认令牌 + 版本证据 + 写前快照、缺项拒绝」统一为全 P2/P3 执行协议。stage_confirmation 出卡时冻结 evidenceRefs(显式或按 versionId 派生 schedule-version:<id>)、beforeSnapshot 与 beforeFingerprint(输入快照指纹);execute_confirmed 在最终批准后、写世界前执行 verify_pending_evidence(版本证据绑定 / 前置快照存在 / 版本可解析,fail closed,失败写 DENIED 审计且不改世界);26 处写审计全部携带 beforeSnapshot+evidenceRefs。
  • 为什么:完成度矩阵 P0 批次点名「把强关联扩展到其余 P2/P3,统一 EvidenceItem、输入快照和版本协议」;此前只有 mes.dispatch 强绑定,其余 P2/P3 审计字段缺失、无漂移/缺项拒绝。
  • 验证:新增 tests/golden/test_evidence_contract.py 9 项(缺证据拒绝、快照缺失拒绝、版本失效拒绝、版本替换拒绝、审计字段断言、mes.dispatch 回归);全量黄金测试固定运行时 424 passed(原 397 + 新增);ruff 干净。
  • 边界:漂移检测采用对象域版本一致性(世界带版本表才解析),不做全局 world 指纹硬拒绝,避免审批期间 P0/P1 合法改世界的假阳性。

2026-07-31 — 跨主机共享审批存储首切片

  • 类型:feature / security / database
  • 做了什么:保留默认文件审批后端,新增显式 APS_APPROVAL_BACKEND=database;共享模式复用 MySQL APS_DATABASE_URL,以规范化 request/grant/event 表和 revision CAS 协调批准/驳回终态、P3 grant 签发及全局一次消费。最终批准、grant 和审批事件同事务提交,数据库只保存 token SHA-256;database 与 APS_APPROVAL_PATH 冲突、缺少 URL、方言不符或连接失败均失败关闭且不回退文件。Harness 外部 API、P2/P3、职责分离、TTL 和角色策略语义保持不变。
  • 涉及路径:server/agent_core/approval_store.py、server/agent_core/approval_db_store.py、server/agent_core/harness.py、server/db/models.py、server/db/migrations/versions/20260731_03_shared_approval_store.py、tests/golden/test_approval_database_store.py
  • 验证:SQLite 本地数据库合同/CAS/竞态/token 摘要/失败关闭专项与既有审批回归通过;这不是 MySQL 实机或真实多主机验收。
  • 文档同步:.env.example、architecture/database.md、architecture/harness.md、product/implementation-spec.md、product/plan-completion-matrix.md
  • 遗留:执行副作用仍存在批准状态提交后、真实执行前的崩溃窗口;待补 outbox/幂等执行状态机、文件存量迁移器、MySQL 多主机故障注入和 WORM 审计归档。

2026-07-31 — 按动作与等级细分审批角色策略

  • 类型:feature / security
  • 做了什么:新增 APS_APPROVAL_ROLE_POLICIES 严格 JSON 配置,可分别按精确 action 和 P2/P3 设置发起、批准、历史查看角色;每种能力按 action > power > 既有全局环境变量确定性解析;未知字段/action/等级、重复键和非法角色结构使整份配置失败关闭;待办、确认解析、批准和历史四条路径统一按动作授权;治理策略 API 保留原字段并追加角色、来源和配置校验状态;P3 双人审批及不同用户职责分离保持不变。
  • 涉及路径:server/agent_core/harness.py、tests/golden/test_approval_role_policies.py
  • 验证:角色策略专项 10 passed;审批/Harness/MES 聚焦回归 45 passed;最终在全新 APS_DB_PATH 的全量黄金 397 passed in 168.33s
  • 文档同步:architecture/harness.md、product/features.md、product/plan-completion-matrix.md
  • 遗留:审批意见、委托/转派/批量审批、跨主机共享存储和 WORM 审计归档仍待后续切片。

2026-07-31 — 固定 CPython Desktop Sidecar 与安装态守护

  • 类型:feature / release / security
  • 做了什么:桌面安装态不再调用系统 Python;新增 uv-managed CPython 3.13.12、哈希锁定的 Windows x64 依赖、PyInstaller onedir 构建和冻结产物冒烟。Sidecar 在进入 FastAPI 前校验不回显的请求侧 nonce,缺失/错误值返回 403;每次启动和重启轮换端口与 nonce,旧 origin 立即失效并冻结窗口直至新实例健康。Electron renderer 启用 sandbox,注入打包态 CSP,默认拒绝权限请求,限制导航/重定向与外链协议,校验 IPC sender,并使用单实例锁;Sidecar 固定单 worker、使用严格环境允许列表和 10 MiB 日志轮转,进程树及父进程看门狗继续负责退出回收。Electron/electron-builder 升级到 43.2.0/26.15.3,并固定已修复的 brace-expansion 5.0.9;根构建引擎同步要求 Node >=22.12.0。
  • 涉及路径:server/sidecar.py、apps/desktop/main.cjs、apps/desktop/preload.cjs、apps/desktop/sidecar.cjs、apps/desktop/package.json、apps/desktop/package-lock.json、scripts/build-sidecar.mjs、scripts/smoke-packaged-desktop.mjs、packaging/aps-sidecar.spec、packaging/requirements-sidecar.lock、tests/golden/test_desktop_sidecar.py
  • 验证:Sidecar Python 定向 33 passed;Node 生命周期定向 7 passed;npm audit --prefix apps/desktop --registry=https://registry.npmjs.org 为 0;npm run build:desktop 成功生成无根仓库泄漏的 NSIS;固定运行时 5 轮隔离求解、冻结 exe 自探针、父进程消失退出均通过;打包 Electron CDP 冒烟确认真实 Sidecar origin 与 preload bridge 可用,直接未授权访问健康端点返回 403。
  • 遗留:当前安装包未签名、使用默认 Electron 图标;尚未在无 Python/无网络的干净 Win10/11 x64、中文和空格安装路径上完成 20 次冷启动、Defender、升级/回滚与真实 APS 大算例验收;plan.md 的 Tauri 目标与当前 Electron 实现仍需产品/架构决策。

2026-07-31 — CycloneDX SBOM 与本地制品完整性清单

  • 类型:release / security
  • 做了什么:新增固定版本的 CycloneDX npm/Python 生成器,为 Web、Desktop 和冻结 Sidecar 依赖生成可重复、校验通过的 CycloneDX 1.6 SBOM;同时记录 SBOM 与现有安装器、Electron、Sidecar 制品的 SHA-256 和字节数。发布清单显式标记 signed=false,不把本地哈希清单冒充签名 provenance。
  • 涉及路径:scripts/generate-sbom.mjs、package.json、.gitignore
  • 验证:npm run sbom 生成三份非空且校验通过的 BOM 和 dist/sbom/release-manifest.json。
  • 遗留:尚未接入 CI、签名服务、透明日志或 SLSA provenance;生成物只有本地完整性证据,不构成可信发布证明。

2026-07-31 — 审批队列持久化、TTL 与 P3 双人职责分离

  • 类型:feature / security
  • 做了什么:新增原子 JSON 审批存储,持久化待审批动作、决策历史和一次性执行凭据;审批与凭据分别支持可配置 TTL,过期后拒绝并记录历史;P3 第二重必须由同租户/项目作用域内、具备配置角色的不同用户完成,同一用户重复审批显式拒绝;发起/批准/历史只读角色可分别配置,权限错误统一返回 403;记录冻结发起人的有效 worldKey,防止第二审批人的个人空间劫持执行目标;全部审计 actor 从认证身份派生,客户端原值仅作为 requestedActor 证据;冻结参数摘要和一次性消费语义跨进程重启保持不变;同机文件锁与落盘前刷新阻止多个 worker 重复签发;损坏或非法记录文件隔离为 .corrupt-* 并告警;治理台新增审批历史,待办/历史展示发起人、审批进度、等待/停留时长与到期时间。
  • 涉及路径:server/agent_core/approval_store.py、server/agent_core/harness.py、server/aps_domain/workflow.py、server/gateway/app.py、apps/web/src/api/client.ts、apps/web/src/api/types.ts、apps/web/src/gov/GovConsole.tsx、tests/golden/test_approval_store.py
  • 验证:审批存储定向含真实 spawn 多进程竞争;审批/MES/租户隔离/审计链定向 41 passed,覆盖错误个人世界、actor 伪造、角色 403 和坏 TTL 隔离;相关 Python Ruff 和 npm run build:web 成功。
  • 遗留:跨主机或不保证文件锁语义的网络文件系统仍需事务共享存储;按动作/等级细分角色策略、审批委托/转派/批量审批和 WORM 审计归档仍待后续切片。

2026-07-31 — 独立审计 P1/P2 整改

  • 类型:fix
  • 做了什么:P3 最终批准签发并消费一次性、租户/项目作用域内且绑定规范化审批参数摘要的内部执行凭据,替换 track/versionId/evidenceRefs 会被拒绝且不消耗合法凭据;MES 下发校验实际存在的前置快照、审批冻结版本和对应证据,只下发该版本,审批期间产生新版本不会漂移;预览最多展示 80 条但执行处理完整集合,只有全部工单均建立本地幂等链接后才标记整版已下发;固定轨通过生产订单 schedulingVersionId 反查工单;跨租户查询已知令牌不再泄漏第二确认状态。方案 UI 完全服从后端 recommendationId 并禁用 HARD_REJECTED;Pareto 仅在前沿内归一化。Plan HTTP API 不再接受可伪造的 createdBy,来源固定为 USER。ScheduleResult 的 EXTERNAL、必填字段和求解元数据同步到 JSON Schema/TypeScript。
  • 涉及路径:server/agent_core/harness.py、server/aps_domain/mes.py、server/aps_domain/workflow.py、server/aps_domain/scenario_selection.py、server/gateway/plan_api.py、shared/schemas/schedule_result.schema.json、apps/web/src/api/types.ts、apps/web/src/chat/ChatPanel.tsx
  • 验证:首轮审计整改跨模块定向 43 passed;参数替换/81 条边界整改专项 14 passed;最终全量黄金 337 passed in 148.01s;npm run build:web 成功。
  • 遗留:审批队列/执行凭据仍为单进程内存态;TTL、职责分离、跨重启恢复、真实 MES MCP、Saga/WORM 仍待后续切片。

2026-07-31 — Windows 求解器发布探针

  • 类型:test
  • 做了什么:新增隔离子进程探针,重复导入 NumPy/Pandas/OR-Tools 并运行最小 CP-SAT 求解;同时扫描标准输出和错误输出中的 Windows fatal exception、Fatal Python error、0xc0000139,避免原生加载异常被退出码 0 掩盖。
  • 涉及路径:scripts/check_solver_runtime.py、tests/golden/test_solver_runtime_probe.py
  • 验证:仓库 .venv 直接五轮探针通过;探针黄金用例通过;包含该用例的最终全量黄金 337 passed in 148.01s。PATH 首位 Anaconda Python 首轮以 0xc0000139 / WinError 127 被正确阻断,不属于可发布运行时。
  • 遗留:探针是发布阻断器,不替代对 Anaconda/Python 3.13 与二进制 wheel 组合的根因治理;正式打包环境应使用固定、可复现的 CPython sidecar。

2026-07-31 — SC-14 方案优选与蒙特卡洛鲁棒性首切片

  • 类型:feature
  • 做了什么:为五策略沙盒方案增加硬约束过滤、真实帕累托前沿、min-max 归一化加权排序和稳定并列规则;新增固定种子蒙特卡洛,每个样本真实重跑排产并输出验收达成比例及延期分位;场景卡和现有敏感性 API 仅追加字段,旧契约保持兼容。
  • 涉及路径:server/aps_domain/scenario_selection.py、server/aps_domain/robustness.py、server/aps_domain/scenario.py、server/aps_domain/sensitivity.py、tests/golden/test_scenario_selection.py
  • 验证:定向回归 15 passed;python -m pytest tests/golden -q -p no:cacheprovider → 325 passed;相关 Python 文件 Ruff 与 git diff --check 通过。算法 agent 的独立运行曾打印 OR-Tools→pandas/pyarrow 的 Windows 0xc0000139 环境异常栈,但主代理最终全量回归未复现,仍保留为发布环境风险。
  • 文档同步:algorithm/solution-selection-v1.md、algorithm/README.md、algorithm/roadmap.md
  • 遗留:NSGA-II 求解器、生产级数百样本并行、历史分布校准、更多扰动因子、偏好学习权重和 Sobol 仍待后续切片。

2026-07-31 — L0-L3 PlanNode 可重生运行时首切片

  • 类型:feature
  • 做了什么:新增 L0-L3 共用的不可变 PlanNode 契约与项目隔离的追加式 JSON 版本仓;重生保持同一 planId、递增 version/regenCount 并保留旧版;规范化 inputsHash 校验阻断输入漂移,默认重生 3 次后熔断;提供创建、最新版本、版本历史和重生四个最小 API。
  • 涉及路径:server/agent_core/plan_runtime.py、server/gateway/plan_api.py、server/gateway/app.py、shared/schemas/plan_node.schema.json、tests/golden/test_plan_runtime.py
  • 验证:python -m pytest tests/golden/test_plan_runtime.py -q → 8 passed;加治理/认证/租户/会话回归集 → 40 passed
  • 文档同步:architecture/plan-runtime.md、architecture/harness.md、architecture/modules.md、product/features.md
  • 遗留:尚未接入 Agent 自动分解、时间线 UI、审计事件写入与跨进程文件锁;本切片只负责治理模型、持久化和最小 API。

2026-07-31 — P3 外部副作用二次确认

  • 类型:fix
  • 做了什么:确认暂存记录增加审批步数;P3 第一次批准只写 GATE 审计并保留令牌,第二次批准才执行外部副作用;拒绝会在任一步骤立即终止;Web 确认卡在第一步完成后切换为“二次确认并执行”。MES 下发在最终执行前强制校验 confirmId、自动检查点 beforeSnapshot 和排产版本 evidenceRefs,并将三者写入审计链;缺失任一项即拒绝执行。P2 仍保持一次确认。
  • 涉及路径:server/agent_core/harness.py、server/aps_domain/workflow.py、server/gateway/app.py、apps/web/src/api/client.ts、apps/web/src/chat/ChatPanel.tsx、tests/golden/test_harness_p3.py
  • 验证:pytest tests/golden/test_harness_p3.py tests/golden/test_gov_api.py tests/golden/test_mes.py -q → 13 passed,覆盖 Gateway 0→1 外部副作用次数、重复令牌不刷新、缺少门禁/快照/证据时拒绝;npm run build:web 成功。
  • 文档同步:product/features.md、product/implementation-spec.md、architecture/harness.md
  • 遗留:持久化审批队列、TTL、职责分离和真实 MES 适配器仍待后续切片。

2026-07-31 — 跨层契约版本与漂移门禁

  • 类型:fix
  • 做了什么:为意图、UI 块和视口命令统一增加 interfaceVersion=1.0;把 intent.schema.json 的封闭枚举同步到当前运行时意图全集;增加黄金测试阻断 Pydantic、JSON Schema 与 TypeScript 的版本及 UIBlock/ViewportCommand 枚举漂移;TypeScript 镜像增加兼容字段。公共 /api/health 现在返回同一版本,前端 InterfaceGate 在认证和业务界面挂载前完成握手,不兼容或服务不可用时显式阻断。
  • 涉及路径:server/contracts.py、server/gateway/app.py、shared/schemas/*.json、apps/web/src/api/types.ts、apps/web/src/auth/InterfaceGate.tsx、apps/web/src/main.tsx、tests/golden/test_contract_sync.py
  • 验证:契约+认证握手定向 11 passed;npm run build:web 成功。
  • 文档同步:architecture/overview.md
  • 遗留:其余公共排产契约仍需逐步纳入统一生成链;多版本兼容窗口和灰度升级策略尚未建立。

2026-07-31 — SC-03 GA 真实求解首切片

  • 类型:feature
  • 做了什么:新增固定种子的 GeneticAlgorithmEngine,联合搜索订单顺序与具备完整工位映射的候选产线;精英保留保证 RULE 顺序/首选线基线进入种群;代数预算由时限确定性推导,避免墙钟截断破坏固定种子复算;通过统一 solverMeta 留存种群、代数、目标值、耗时与种子;get_engine("GA") 不再由 RULE 代跑。
  • 涉及路径:server/engines/ga_engine.py、server/engines/__init__.py、tests/golden/test_ga_engine.py
  • 验证:pytest tests/golden/test_ga_engine.py tests/golden/test_cp_engine.py tests/golden/test_rule_engine.py -q → 24 passed
  • 文档同步:product/features.md、product/implementation-spec.md、algorithm/roadmap.md、algorithm/scheduling-v1.md、architecture/modules.md
  • 遗留:方案层 Pareto 已落地;工序级 GA、NSGA-II 种群进化、LNS 和大算例性能基线仍待后续切片。

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:第一部分「自然语言全流程描述」(设备虚拟化→能力池→虚拟产线→瓶颈产能→交期承诺→动态重排,用大白话讲一遍);第二部分走法 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 静态左说右动验证

2026-08-18 — Round 77 异步分析任务安全基础设施

  • 类型:security + concurrency + tenancy + regression
  • JobQueue 新增 tenant/project 作用域、认证 actor、并发 2/在途 8 上限和队列饱和拒绝;网关 jobs API 全部按当前作用域过滤。
  • 关闭 pending 取消堆积线程、取消后 done/failed 覆盖、thread.start 失败泄漏配额三类竞态。
  • 验证:专项 11 passed;相邻 20 passed;full golden 1358 passed / 2 warnings,受保护哈希不变;独立复审 AUDIT PASS。
  • 边界:下一步恢复 Sobol,并同时完成 Sidecar 依赖、日期复算、取消检查、前端入口;未 commit/push/merge/publish。

2026-08-21 — 企业级排产回复文案与状态提示

  • 类型:fix + ux + tests + docs
  • 做了什么:统一助手系统提示词与离线回复为“结论 → 依据 → 阻断项/风险 → 下一步”;重写数据齐备度、排产向导、目录分析、目录导入和报告空态文案;欢迎页、快捷指令、空态和错误提示改为业务化表达。
  • 界面行为:Thinking、内部 intent 名称和开发环境错误细节默认不再展示;可通过 VITE_SHOW_INTENT_DEBUG=1 显式打开调试块。
  • 涉及路径:server/agent_core/assistant.py、server/agent_core/dialog.py、server/agent_core/context.py、server/gateway/app.py、server/aps_domain/{readiness,guidance,folder_pack,reports,workflow}.py、apps/web/src/{chat/ChatPanel.tsx,App.tsx,auth/AuthGate.tsx,viewport,timeline,orders}。
  • 验证:核心回复/向导/齐备度/引导测试 37 passed;全量黄金测试 1156 passed, 20 skipped,另有 7 项依赖外部 MES 网络或本机 MOM 文件的环境失败;npm run build:web 通过;server compileall 通过;本地 8000/5173 健康检查通过。
  • 文档同步:新增 docs/development/response-style.md。
  • 遗留:workflow 及集成模块中仍有少量历史成功回执使用勾选符号,后续可按规范继续收敛;未 commit/push/merge/publish。

2026-09-11 — 自然语言统一交给 Pi Agent(删除本地意图 / 对话 / 话术三件套)

  • 类型:refactor + test + docs(不 commit/push)
  • 删除:server/agent_core/intent.py(快路正则 + LLM JSON 意图分类)、server/agent_core/dialog.py(澄清槽位机 + 排产向导状态机)、server/agent_core/assistant.py(关键词本地话术);黄金测试 test_assistant.py、test_context.py、test_dialog_clarify.py、test_schedule_entry_intent.py、test_schedule_wizard.py 随之删除。
  • 保留并重新定义:IntentResult 变为「Pi 调用的结构化工具请求信封」,不再是意图识别结果;Pi 仍只能调用封闭 IntentName 工具目录,登记 / 齐备度 / P2 确认卡 / P3 白名单门禁不变;source=RULE_FAST 仅作历史审计兼容值保留。
  • 二次清理(同日):server/agent_core/context.py 只保留纯数据整形 normalize_history(网关聊天历史收敛);删除 resolve_followup(「是的 / 好 / 那个」短回复改写)、wants_folder_listing、list_project_folder、last_agent_text、last_user_text、format_history_for_llm、_AFFIRM/_DENY/_extract_quoted_commands。同步修正 /api/settings/llm 与治理台设置页「大模型(意图解析二级管线)」的陈旧文案——不再宣称未配置模型时降级为规则解析。
  • 接线:/api/chat 与 workflow.handle_intent 的 assistant.reply/unknown 分支强制 _piPrimary 后只走 fallback_lane.propose_reply();兜底车道不再调用本地话术,失败显式返回;执行计划未通过校验时,回复保留具体校验原因(白名单缺失、指纹虚报、超步数等阻断项仍对用户可见)。
  • 验证:兜底专项 10 文件 224 passed / 1 skipped;本轮涉及文件聚焦回归 88 passed 与 18 passed;二次清理后 chat/gateway 相关 43 passed、聚焦回归 64 passed 与 35 passed / 8 skipped;pytest --collect-only tests/golden 收集 2360 项无导入错误;python -m compileall -q server 与 npm run build:web(tsc + vite)通过;git diff --check 干净。
  • 边界:全量 tests/golden 为 86 failed / 2154 passed / 113 skipped / 7 errors,失败集中在 CP/solver/DXF/sobol/sidecar 文件,根因是本地环境缺 scipy、fontTools 且 OR-Tools 装在用户级 site-packages(SOLVER_RUNTIME_UNSAFE),与本轮改动无关且未修复;真实 Pi + LLM 在线端到端与桌面打包未在本轮执行。

2026-09-12 — 缺料引导卡去掉重复的「再看还缺什么」

  • 类型:fix + ux + test(不 commit/push)
  • 做了什么:server/aps_domain/guidance.py 的「排产还缺这些」卡在缺料状态下不再重复给「再看还缺什么」(卡片底部 + 第 1 步旁边两处)——缺口清单已经在同一张卡里逐条列出;复查入口保留在数据检查卡的「查看缺少资料」与齐备度卡的「看怎么补」。数据齐全(ready)状态的复查入口保留,供补数后复查。
  • 验证:test_guidance.py / test_scheduling_entry_workflow.py / test_e2e_acceptance.py / test_planner_experience.py / test_readiness.py / test_pool_engine.py / test_kangni_flex.py / test_pi_primary_chat.py 共 58 passed / 5 skipped;node tests/node/planning-schedule-entry.test.mjs 7 passed;python -m compileall -q server 通过;git diff --check 干净。test_guidance.py 新增断言:缺料态不出现复查 chip、ready 态保留。

2026-09-13 — Pi 参数闭包、只读分析采用、Mesh 审批恢复与 SOP 控制台接线

  • 类型:docs + architecture sync(本轮只改文档;不 commit/push)
  • Pi-only 工具边界:延续 intent.py / dialog.py / assistant.py 已删除的状态,server/agent_core/fallback_lane.py 的 _PRIMARY_TOOL_PARAM_SCHEMAS 为已登记工具下发封闭 paramsSchema;_validate_tool_params() 在执行前拒绝未知字段、错误类型、非法枚举/范围,未单独登记参数的工具使用 _OPEN_PARAMS_SCHEMA。P0 只读、P2 确认卡、P3 人工审批仍由 harness 在服务端决定。
  • 只读分析 → P2 采用:server/aps_domain/project_analyze.py 的 analyze_project_deep(..., apply=False) 使用 _project_ctx_readonly() 与 copy.deepcopy(world),只预览批次/SQL 并返回 readOnly、pendingAdoption{mode,filename,sourcePaths,batches,counts};folder_pack.analyze_work_dir(..., apply_sql=False) 同样只预览 SQL。workflow._stage_pending_adoption() 将可提交批次冻结为 P2 import.commit 卡并携带 analysisIngest;批准后 execute_confirmed() 的 action == "import.commit" 分支写入主数据、补首次归属、调用 ingest_project_analyze_report(),注册 profile 与分析派生采用卡统一返回「排产资料已采用,尚未生成方案…」。
  • Mesh 审批恢复:server/agent_core/mesh.py 的 resume_goal_after_confirmation(confirm_id, *, approve, actor) 在批准时把任务置 DONE 并恢复 dispatch_goal(),驳回时置 FAILED 且 Goal 转 ATTENTION;confirmationResolutions 保证重复回调幂等,非 Mesh 卡返回 matched: False。server/gateway/app.py 的 /api/actions/confirm、/api/actions/confirm-batch 通过 _resume_mesh_goal_if_needed() best-effort 接入,不阻断确认结果;apps/web/src/mesh/MeshPanel.tsx 将 AWAITING_APPROVAL 显示为「待人工审批」并展示 confirmationIds。
  • SOP 控制台:GET /api/sop/compilable 返回可编译候选;server/aps_domain/sop_rules.py 的 compile_sop_by_asset(kb_assets, asset_id) 只按明确资产精确编译,缺 SopStageRequest.assetId 时 fail-closed;apps/web/src/api/client.ts 的 postSopStage(sessionId, assetId) 调 POST /api/sop/stage,由 apps/web/src/gov/GovConsole.tsx 的 stageSop() 使用并生成 P2 sop.apply 确认卡。
  • 文档核对:docs/architecture/{README,fallback,dialog,modules}.md 已改为 Pi-only 现态说明,并明确只读分析、采用、Mesh 恢复与 SOP 门禁;历史 CHANGELOG 中删除前的旧入口记录保留为历史证据。
  • 分析卡首屏摘要(UI 减负):server/aps_domain/workflow.py 的 _analysis_summary_props() 与 server/aps_domain/planning_intake.py 的 _intake_analysis_summary() 由后端按实际状态生成 analysisSummary{headline,status,statusLabel,metrics,issues,issueOverflow,nextStep,recap},前端 apps/web/src/chat/PlanningDataCard.tsx 只按该契约渲染:结论 → 关键数 → 最多 3 条关注项 → 折叠明细 → 收束现状(总-分-总),不再把原始字段、文件清单和来源说明铺在首屏;工程目录分析卡与工作簿核对卡共用同一结构,旧会话缺该字段时回落原渲染。待采用状态只保留一个禁用的「开始排产」入口(采用确认仍由下方 P2 卡负责),行数统计与诊断问题移入折叠层。回归:tests/node/planner-data-card.test.mjs 的 adoption review keeps one disabled scheduling entry instead of a second call to action、tests/golden/test_ruiyang_intake_workflow.py 的 test_pending_adoption_card_leads_with_conclusion_and_a_locked_scheduling_entry。
  • 采用通道加固(安全评审 P1):整表替换类采用(sqlPayload / momPath)此前只校验来源、不校验目标世界。现由 _stage_pending_adoption() 冻结 targetWorldFingerprint(folder_schedule_world_fingerprint),execute_confirmed() 在替换前比对,漂移即拒绝;MOM 在分析、出卡、执行三处都走同一 fail-closed 准入 mom_pack_is_adoptable():结构证据需 ≥2 张模型表(按工作表张数计,复合表名「生产模型-工艺模型」不叠加;与 is_mom_workbook() 不靠文件名时的判定同口径),内容证据需主干行 > 0(只认物料/BOM/订单/工艺路线;排除解析器固定生成的 5 条模板工序 flexOperations 与车间/设备辅助台账 flexZones / flexEquipment),02-工艺模型与 04-物料模型两处都用 _HEADER_ROW_LABELS 过滤重复/畸形表头,并用 _is_placeholder_text() 过滤模板填写指引行——编码侧认「填写/示例/占位/测试/演示/test/demo」等前缀,名称侧只认更窄的指引前缀,一律前缀或整值匹配(不误杀「说明书」「测试夹具」),无字母数字的中文占位同样不入库;主干行证据另按「标识字段须为含字母/数字的业务编码形态,且 BOM/订单/工艺路线的产品编码必须能追到真实物料行」复核,占位物料派生的假订单/假路线不计入;因此空表、仅车间行、单模型表、复合表名、重复表头、模板哨兵行或填写指引行工作簿都无法触发 apply_mom_pack_to_world(replace=True) 清库(真实 MOM 主数据收集表实测仍准入:4 张模型表 / 1037 条主干行)。SQL 的零行门槛按 orders/materials/equipment/routing/bom 真实列表长度计,不信任 stats;MOM 指纹校验改为「读字节 → 校验 sha256 → 用同一份字节解析」,消除 hash→重开之间的替换竞态。回归:tests/golden/test_analysis_adoption_sql_mom.py 14 项(含真实解析器下的空表、仅车间行、重复表头、复合表名、模板哨兵行、填写指引行、TEST-001 测试编码不清库,以及「说明书/测试夹具」真实行不被误杀,SQL/MOM 漂移拒绝,绕过出卡的零行卡执行期拒绝,冻结载荷不受来源删除影响)。残差(已文档化):结构证据成立、且至少含一行「像业务编码」的物料(如 A1/XX001)的工作簿仍会出卡——启发式无法与真实单行文件区分,边界交由 P2 采用卡(展示批次与行数)与目标世界指纹把关;纯中文编码(无字母数字)与仅 04 单表文件属安全方向误拒。

2026-09-13 — 试排能排出结果 + 主数据两个维护并为一套(用户实测两缺陷)

  • 类型:fix + ux + test + docs(不 commit/push)
  • 排产排不出(根因 1:整份工作簿被拒收):server/importers/planning_workbook.py 新增 _iso_date()。插单场景 的 dueDate 与订单交期此前按原始字符串比较,用户把该单元格改成真正的 Excel 日期后序列化为 2026-10-11T00:00:00,与订单的 2026-10-11 不等 → 误报 SANDBOX_CONFLICT(blocking)→ canCommit=false,界面表现为「资料检查未通过」,工作簿一行都没写入,排产无从进入。现统一按日期归一化比较(datetime/date/字符串都取 YYYY-MM-DD)。
  • 排产排不出(根因 2:资料缺口被当硬阻断):server/aps_domain/masterdata_consumption.py 新增 TRIAL_ASSUMABLE_ISSUES 与 order_execution_issues(..., trial=)——试排态下「未登记人员技能」「在制剩余量/结束时间/前序/资源未确认」等在制事实类问题降级为 assumption,真实物料短缺仍是 error 阻断;place_masterdata_slot(..., allow_unassigned_person=trial) 在无合格人员时占设备槽但不虚构人员编码;server/engines/pool_engine.py 的 solve(..., trial=) 把假设项写 severity="ASSUMPTION"、描述前缀「试排假设:」,假设到未确认在制的订单整单重排(不把未确认完成量当依据),新增 assumptionCount 与 solveStatus=PARTIAL_WITH_ASSUMPTIONS;flex.py / workflow.py 透传并输出「N 项按试排假设处理」。正式链路语义不变:trial 默认 False;run_flex_schedule 按 GitNexus 影响面为 HIGH(24 受影响符号 / 7 直接调用方),因此只加默认参数、不改默认行为。
  • 前端:apps/web/src/chat/ChatPanel.tsx 增加冲突类型中文映射、ASSUMPTION 角标「试排假设 · 」与标题「含 N 项试排假设」;apps/web/src/styles.css 新增 .conflict-badge.assumption(中性灰描边,不复用告警橙,避免把假设读成故障)。
  • 主数据两个维护并为一套:apps/web/src/masterdata/MasterDataPanel.tsx 与 master-r71 右侧工具/命令面板入口删除——该面板用裸 fetch(缺 X-APS-Client/设备号/访客头),被全局鉴权中间件拦成 401、列表恒空。能力并入 MasterPanel 唯一入口下的「工位·版本·日历」页签(子页:工位/设备、版本发布/回滚、班次日历),复用已鉴权的 /api/master 与 /api/master/stage;apps/web/src/api/types.ts、client.ts 补齐类型;MasterPanel 四处 destroyOnClose 改为 antd 6 的 destroyOnHidden(消掉浏览器验收里的弃用告警)。
  • 验证:.venv 全量 pytest 2359 passed / 54 skipped / 0 failed / 0 errors(837.56 秒;ROUND87_SOURCE + ROUND87_REQUIRED=1);聚焦 6 文件 84 passed;scripts/round87_masterdata_e2e.py --source 湖南锐扬APS精简演示数据.xlsx PASS(3 单排出 / 2 单真实缺料阻断 / 5 类试排假设 / 维护反事实 A00048 vs A00047);真实 Pi + 真实 LLM 工作簿 E2E 1 passed(provider=kimi、model=kimi-k2-0711-preview、2 次 Pi 运行、源文件 SHA 7a1a8159… 前后不变;界面实测「已安排 3 张、待补资料 2 张、15 个工单、10 项试排假设」);浏览器验收 planner-masterdata-round87.spec.ts 桌面 1440×900 + 手机 390×844 2 passed(上传→核对→P2 采用→刷新→唯一「主数据」入口→「工位·版本·日历」三子页加载→工艺工时改单→P2 批准→刷新持久化;断言无旧 /api/masterdata 请求、无 401/5xx、无控制台错误);npm run build --prefix apps/web 3184 modules 通过。
  • 测试脚手架:tests/golden/test_configured_intake_workflow.py 补 install_fake_pi_tool_adapter(Pi-only 后无桩必然拿不到确认卡,原为 2 项失败);tests/e2e/round87_masterdata_server.py 增加 APS_E2E_FAKE_PI=1 显式开关安装同一替身,使浏览器验收不依赖在线模型(真实 Pi 路径仍由 scripts/run-pi-real-workbook-e2e.ps1 覆盖)。
  • 残留边界:人员技能 表未登记 PAINT——试排按假设占设备槽、不填人员,正式排产仍需补登记;SO-001/SO-004 为工作簿真实物料短缺(保留阻断,不靠假设放行);WIP-004 引用的 A00247 不在设备表。未 commit/push。

2026-09-13 — 排产 Excel 下载修复(点击后 AUTH_REQUIRED)

  • 类型:fix + test + docs(不 commit/push)
  • 根因:报告块、柔性结果块和订单页下载分别使用裸 <a> 顶层跳转、window.location.href 或裸 fetch,未经过 apiFetch,缺少 aps_session Cookie 及 X-APS-Client/X-APS-Visitor-ID 头,被全局鉴权中间件拦成 401 AUTH_REQUIRED,页面直接显示错误 JSON。
  • 修复:新增 apps/web/src/api/download.ts 统一鉴权下载(credentials: include + 客户端头),从 Content-Disposition 解析文件名后用 Blob 临时链接触发下载并释放对象 URL;ChatPanel.tsx 两处下载与 OrderPanel.tsx“排产分析报告”全部接入,失败时显示后端中文原因;订单页原先请求 format=docx 却命名 .xlsx 的错位改为真实 format=xlsx。
  • 验证:npm run test:node 72 passed / 0 failed(新增 tests/node/authenticated-download.test.mjs 覆盖 RFC 5987 文件名、Cookie/访客头与 Blob 下载);npm run build --prefix apps/web 3185 modules 通过;隔离真实工作簿浏览器验收 planning-schedule-entry.spec.ts 桌面 1440×900 + 手机 390×844 2 passed(上传→采用→真实试排→点击下载,断言报告接口 200、文件名 .xlsx、文件头 PK)。
  • 边界:本次验证走隔离后端与测试账号,未改现场 8000/5173 服务;工作区仍未 commit/push。