85 Commits
Author SHA1 Message Date
bot_dev1 01f4e4b55b chore: #188 修复版产物重打包(推理路径规范化) 2026-08-06 17:27:10 +08:00
bot_dev1 b80fe6ab0f fix(#188): 推理 API 路径规范化,消除双 /v1 前缀对 nginx rewrite 的隐式依赖 (#192)
bot_qa 复审通过(bot_dev3 代发)。PR #192 引用未同步(head 滞留 5667fad),
按 feature/issue-188 分支最新 9994fb7 手工合并。
包含:nginx 无 URI 透传 + location = /health、infer.ts 路径口径统一、
latencyMs 实测、cockpit 健康检查走封装。

⚠️ 部署:UI 产物与 nginx 配置必须同批上线(新旧路径口径互不兼容)。
2026-08-06 17:26:05 +08:00
bot_dev1 9994fb75e7 fix(#188): bot_qa 审核修正——nginx 改无 URI proxy_pass 真透传 + 健康探针 /health 无前缀
打回问题 1:proxy_pass 带末尾 / 是去前缀语义(与声称相反),/v1/models
会被转发成 /models 导致 404。改为不带 URI 的 proxy_pass(无末尾 /),
请求 URI 原样透传;另新增 location = /health 精确透传健康探针。
打回问题 2:serve.py 健康路由是 GET /health(无 /v1 前缀),fetchHealth
由 /v1/health 改回 /health;同步修正 chat/NlQuery/cockpit 三处文案注释。
构建验证:pnpm --filter @vben/web-antdv-next build 通过(10.3s)。
2026-08-06 16:48:14 +08:00
bot_dev1 be2730fe13 fix(#189): 驾驶舱主题 token 卸载时清理,修复全局 CSS 变量污染 (#193)
bot_qa 审核通过(issue #189 已关闭),补合并到 main——此前仅审核通过未合并,修复一度丢失。
2026-08-06 16:45:15 +08:00
bot_dev1 282c46afd9 fix(#187): 修复模板配置台两处交互失效 (#194)
bot_dev1 复核通过(与 bot_qa 审核结论一致);rebase 到最新 main 解决 version.vue 冲突后合并。

fixes #187
2026-08-06 08:38:00 +00:00
bot_dev1 018bcdbf1a fix(#187): 修复模板配置台两处交互失效
1. studio/import.vue CSV 上传失效:onFile 原按 DOM Event 取 e.target.files,
   但 a-upload 的 @change 载荷是 UploadChangeParam { file, fileList },
   :before-upload="() => false" 时文件在 file.originFileObj 上,导致必抛
   TypeError 无响应。改为从 info.file.originFileObj 取文件对象。
2. studio/layout.vue 第 45 行「发布布局」按钮无 @click 处理(死按钮):
   新增 publishLayout,将布局 JSON 暂存 localStorage
   (iaop.studio.layout.v1),与 version.vue 版本发布联动;
   version.vue 发布时读取并打包该布局。
   layoutJson 改为 computed,模板同步更新。

验收:本环境无 pnpm/node_modules,构建验证转 bot_qa 构建环境;
上传符合表头 CSV 应出现校验/预览,缺表头 CSV 应报错;
点「发布布局」应提示成功并记录发布时间。
2026-08-06 16:34:24 +08:00
bot_dev1 4a12aa9d4b fix(#189): 驾驶舱主题 token 卸载时清理,修复全局 CSS 变量污染
问题:cockpit/index.vue 加载模板时把 theme token 通过
setProperty 注入 :root,但 onUnmounted 仅 clearInterval 未清理,
导致进过驾驶舱/切换模板后全局 CSS 变量被残留值污染,其他页面颜色异常。

修复:
1. 注入前记录被改动的变量名及旧值(injectedTokens)。
2. onUnmounted 时逐个恢复旧值(有旧值则 setProperty 恢复,
   原本无则 removeProperty 移除),杜绝全局污染。

验收:进驾驶舱再切到其他页面,全局 CSS 变量无残留值,颜色正常。
(本环境无 pnpm,构建验证转 bot_qa)
2026-08-06 16:12:57 +08:00
bot_dev1 5667fad3e1 fix(#188): 推理 API 路径规范化,消除双 /v1 前缀对 nginx rewrite 的隐式依赖
问题:infer.ts BASE_URL=/v1,fetchModels/chatCompletion 再拼 /v1/* 导致
/v1/v1 双前缀,当前仅靠 nginx 对 /v1/ rewrite 去前缀巧合耦合才通。

修复(前后端+部署一起改):
1. nginx-fba.conf:新增 location /v1/,proxy_pass http://127.0.0.1:30800/
   (带末尾 /,不去前缀直接透传),消除对 rewrite 的隐式依赖。
2. infer.ts:BASE_URL 改为空串,调用方统一写 /v1/models、
   /v1/chat/completions、/v1/health(fetchHealth 原误用 /health 已修正)。
3. cockpit/index.vue:健康检查改走 infer.ts 的 fetchHealth 封装,
   不再裸 fetch('/v1/health'),路径口径统一。
4. ask() latencyMs 由硬编码 0 改为 performance.now() 实测耗时。
5. README 补充推理通道路径约定说明。

验收:浏览器 Network 确认 /v1/models、/v1/chat/completions、
/v1/health 均 200 且无 /v1/v1 请求。(本环境无 pnpm,构建验证转 bot_qa)
2026-08-06 16:11:37 +08:00
bot_dev1 ef2a921765 chore: 数据修复版产物重打包 2026-08-06 14:58:43 +08:00
bot_dev1 193d5618be fix: 空值合并与逻辑或混用加括号(models/alerts/kb 构建语法错误) 2026-08-06 14:57:09 +08:00
bot_dev1 cd7d4fd118 fix: 模型/告警数据持久化恢复(localStorage 与旧版同 key 自动迁移)+ 全部分页 proxy 兜底防空表 2026-08-06 14:57:09 +08:00
bot_dev1 1aaa159363 fix: 播种脚本同步隐藏 FBA 推广菜单「项目」(文档/Github/Apifox 外链) 2026-08-06 14:32:24 +08:00
bot_dev1 62426ef7bb fix: 模型超参/驾驶舱编排内容卡片化(a-card 包裹,对齐 FBA 原生页观感) 2026-08-06 14:28:27 +08:00
bot_dev1 4fb216cde0 fix: 播种脚本隐藏 FBA 测试数据自带的概览菜单(视图不存在导致 404) 2026-08-06 14:24:16 +08:00
bot_dev1 bb56461c79 chore(QA): 样式对齐版产物重打包(D1/D2 验收实测构建) 2026-08-06 14:11:37 +08:00
bot_dev1 36d8f7db2f chore(QA): 恢复 pnpm-lock.yaml,移除 lefthook 误装的仓库根配置 2026-08-06 13:15:52 +08:00
bot_dev1 1b7c2b0177 fix(QA): 修复构建阻断与静态资源路径——useMessage 误导入 + plans/citations 根绝对路径改 BASE_URL 前缀(代 bot_qa 验收 #164-#176) 2026-08-06 13:14:52 +08:00
bot_dev1 9728fa40fe fix: 「用户与角色」模块切换到 FBA UI 承载(Epic #159 遗漏收尾) 2026-08-06 11:37:40 +08:00
bot_dev1 4ea81cea91 feat: Phase 3 FBA UI 预构建产物 + Phase 4 按钮级权限(fba_jwt + perms)(Epic #159) 2026-08-06 10:18:15 +08:00
bot_dev1 067ba0abe1 feat: Phase 2 Sider 菜单由 FBA 服务端授权驱动 + 菜单/角色播种脚本(Epic #159) 2026-08-06 10:04:36 +08:00
bot_dev1 5b673fcdc7 feat: Phase 1 前端认证接入 FBA JWT——三轨会话 + 图形验证码(Epic #159) 2026-08-06 09:46:21 +08:00
bot_dev1 70c680a612 feat: Phase 0 FBA 部署包——docker-compose + nginx 反代 + env 模板(issue #159) 2026-08-06 08:41:59 +08:00
bot_dev1 8b68d015c2 fix: 组件配色全面对齐 Ant Design 5 token + 修复 iframe 内页签初始激活(issue #131)
组件审查结论:全站组件为自绘 HTML+CSS 仿 AntD(纯静态无组件库),
pro.css 已统一设计 token,但各页 CSS/JS 残留一批旧配色硬编码,
pro.css 覆盖不到,本次全部清理:

- 旧 iOS 红 #ff3b30 → --ant-error #ff4d4f(告警 P0/严重度/DLP 条/
  工艺 alarm 态/diff 删除行)
- 旧橙 #f5a623 → --ant-warning #faad14(P1 告警/warning 态/暂存徽章)
- 旧 iOS 绿 #2ecc71 → --ant-success #52c41a(running 态/prod 徽章/
  索引完成/路由本地标签/权限矩阵)
- 杂色蓝统一 → --ant-primary #1677ff:发送键 #0ea5e9、P2 告警
  #3aa0ff、编排画布残留青 rgba(24,211,200)、旧气泡 #1d4ed8
- 主色按钮上的深色文字 #04202a → #fff(对比度修正)
- 灰 #64748b → --ant-text-tertiary rgba(0,0,0,0.45)
- 各页 CSS :root 深色默认变量值(#0b1220/#13203a/#18d3c8 等死值)
  对齐为 AntD 亮色默认值,修正"深色主题"过时注释
- 删除已无任何引用的旧深色登录页样式 auth/auth.css

顺带修复实测发现的 bug:SPA 外壳内直达 admin/studio 子页时页签
不切换——studio.js/admin.js 的 Tab 事件在异步 boot(user) 中绑定,
bindPageTabs 的 window load 初始激活可能早于绑定完成,改为带重试
的激活(直到 Tab 点亮,最多 10s)。实测 #/admin/#alerts 直达后
page-alerts 正确激活。
2026-08-06 08:20:17 +08:00
bot_dev1 cfa976cac3 feat: SPA 外壳——菜单切换零刷新,对齐 Ant Design Pro 体验(issue #131)
- web/index.html 重写为 SPA 外壳:Sider/顶栏常驻,模块页在
  #module-frame iframe 内容区加载,点菜单只换 iframe 地址,
  彻底消灭整页刷新与白闪(此前只是铺底色缓解)
- 新增 shared/shell.js:IAOP_SHELL.navigate() 导航、外壳 hash
  (#/admin/#models) 与 iframe 地址双向同步、登录守卫、移动端
  模块新标签打开;iframe 地址用 location.replace 避免污染
  joint history;250ms 轮询回同步(replace 不触发 load 事件);
  导航时乐观高亮(后台标签轮询被节流不能作为唯一途径);
  前进/后退若恢复了 iframe 旧地址则以外壳 hash 为准强制对齐
- pro-header.js 三模式:外壳(菜单点击走 IAOP_SHELL、导出
  IAOP_PRO.setActive)/被嵌(iframe 内,隐藏页内跨页链接与重复
  用户标识、保留 Tab-hash 联动)/独立(原行为);菜单渲染后派发
  pro:menu-rendered 事件消除导航先于渲染的高亮竞态
- session.js:logout/守卫重定向作用于顶层窗口(iframe 内不再
  只跳 iframe 自己)
- 修复 iframe 替换元素宽高 bug:fixed 时左右定位不拉伸(回退
  固有 300x150),改显式 calc 宽高
- 登录页 next 默认回外壳 ../index.html

实测(本地 http.server + WebBridge 真实浏览器):菜单切换/
子菜单切换/前进/后退/直达链接(#/admin/#models) URL、iframe、
菜单高亮、子菜单高亮全链路一致,Sider 节点全程不重建;
登录守卫 logout→顶层跳登录、登录后回外壳默认驾驶舱。
2026-08-05 22:43:47 +08:00
bot_dev1 65d3b0952f fix: 消除跨模块跳转的整页白闪(issue #131)
五个带 Sider 的模块页 head 内联首屏底色(左 208px #001529 深 +
内容区 #f0f2f5),外部 CSS 加载前的解析期画布即为最终布局底色,
深色 Sider 区域不再白闪(FOUC);窄屏媒体查询下保持纯灰底
2026-08-05 17:43:36 +08:00
bot_dev1 870dbb9ce5 fix: 子菜单高亮改由 hashchange 统一驱动(issue #131)
浏览器实测(WebBridge)发现同页子菜单点击后页签切换正常但
子项高亮不跟随:原实现依赖子项点击处理器更新高亮,存在竞态。
改为统一数据流:子项一律默认导航改 hash → hashchange 同时驱动
页内 Tab 切换与 .pro-subitem 高亮同步,跨页直达/分享 URL 路径不变。

实测验证:admin/#audit|#kb|#models 连续切换,hash/页签/高亮三者同步
2026-08-05 17:33:39 +08:00
bot_dev1 e9787ecb22 fix: 修复 http 纯静态部署下本地账号登录不可用(issue #131)
- user_store.js:crypto.subtle 仅安全上下文可用,http://:8090 下为 undefined
  导致播种/校验静默失败;新增纯 JS SHA-256 降级实现(已对照 Node crypto
  验证一致,含非 ASCII),WebCrypto 可用时仍优先
- session.js:/auth/login 返回 5xx/非 JSON 时判定为后端不可用并降级本地
  账号,仅 4xx 视为真实鉴权失败(原逻辑把 nginx 500 HTML 误判为密码错误)
2026-08-05 16:52:45 +08:00
bot_dev1 c0af291502 fix: 导航交互对齐 Ant Design Pro 体验(issue #131)
- 父级菜单整行点击 = 就地展开/收起 inline 子菜单(不再跳转),
  只有子项才导航,与 Pro 的 Menu inline 模式一致
- 子菜单展开加 max-height 过渡动画
- 菜单加 AntD Menu.ItemGroup 风格分组标题,hover 态补半透明白底
- 页内旧 topbar 去背景去边线,融入内容区当页标题行,消除双顶栏感
2026-08-05 16:20:52 +08:00
bot_dev1 0b3dc0b9ae feat: 移除门户页,登录后默认直达驾驶舱(issue #131)
- web/index.html 改为纯重定向页(/ → cockpit/,驾驶舱自带登录守卫)
- 登录页默认 next 改为 ../cockpit/,页脚入口链接同步调整
- Sider 菜单移除「门户」项,logo/默认首页指向驾驶舱
2026-08-05 15:54:14 +08:00
bot_dev1 2f6b329745 feat: Sider 子菜单上收页内 Tab(管理控制台/模板配置台,issue #131)
- MODULES 注册表支持 children:管理控制台(模型管理/知识库管理/告警确认/
  审计查询)、模板配置台(点位导入/模型超参/驾驶舱编排/版本发布)
- Sider 渲染 AntD Menu.SubMenu 风格可展开子菜单,当前页自动展开、
  子项按 URL hash 高亮(如 admin/#models)
- 页内 #tabs 自动隐藏,改由子菜单经 hash 驱动切换;页内 Tab 点击回写
  hash,URL 可分享直达子页;各页面业务逻辑零改动
2026-08-05 14:40:15 +08:00
bot_dev1 3a1cccc0c6 feat: 全站导航改为 Ant Design Pro 左侧边栏布局(issue #131)
- pro-header.js 重构:深色 Sider(#001529,AntD Pro 经典)+ 顶部 48px 细栏
- Sider 菜单 = 门户 + 模块按登录角色过滤,当前页高亮 #1677ff,
  底部折叠按钮可收成 48px 图标栏;窄屏(≤720px)自动隐藏退回纯顶栏
- 菜单/高亮按 URL 自动计算站点根前缀,六个模块页零改动接入
2026-08-05 14:31:42 +08:00
bot_dev1 7a2e45e7c4 feat: 全站 Ant Design Pro 风格重构 + 登录守卫与角色门户(issue #131/#134)
- 新增 web/shared:pro.css(AntD 5 设计系统,旧 CSS 变量统一映射 AntD 色板)、
  session.js(后端优先+本地账号降级双轨会话,IAOP_AUTH 兼容层)、
  pro-header.js(全站统一 Pro 导航条:logo/页题/用户角色 Tag/退出)
- 门户 web/index.html:未登录跳登录页(next 回跳),登录后按角色过滤
  可见模块(readonly→驾驶舱/助手/移动端;engineer→+配置台;admin→全部)
- 登录页 auth/login.html 重写为 Ant Design Pro 风格,本地降级模式自动
  播种演示账号(admin/engineer/viewer),保留 OIDC SSO 双轨入口
- user_store.js 新增 verify() + seedDefaults() 默认账号播种
- 六模块页统一接入 pro.css + 统一导航条 + 登录守卫(PRD 8.2)
- 驾驶舱主题 dark→light(Ant Design 5 色板):renderer.py THEME_TOKENS、
  ti-cl4/resin 模板 theme、告警三级配色对齐 AntD(P0 #ff4d4f/P1 #faad14/
  P2 #1677ff),渲染计划已重编(build_plans.py)
- 验证:core/cockpit 86 单测通过;JS 语法检查通过;静态冒烟全 200
2026-08-05 14:17:37 +08:00
bot_dev1 ca6637b69e feat: 完成 issue #158 交接班摘要页补充历史摘要查看(最近 10 次本地保存) 2026-08-05 10:52:51 +08:00
bot_dev1 253ebe7b0b feat: 完成 issue #157 移动端只读驾驶舱补充手动刷新(KPI 时间桶滚动) 2026-08-05 10:50:05 +08:00
bot_dev1 3a6ef57592 feat: 完成 issue #156 审计查询页补充时间范围筛选 2026-08-05 10:47:31 +08:00
bot_dev1 04b5b33bb7 feat: 完成 issue #155 告警确认页补充确认超时自动升级(ackTimeoutS 同源配置) 2026-08-05 10:44:58 +08:00
bot_dev1 21d3654616 feat: 完成 issue #154 知识库管理页补充本地上传文档移除(模板资产只读保护) 2026-08-05 10:41:48 +08:00
bot_dev1 d181b4bfc8 feat: 完成 issue #153 模型管理页补充按模型审计历史视图 2026-08-05 10:39:56 +08:00
bot_dev1 6b36336ca6 feat: 完成 issue #152 登录页 OIDC SSO 双轨入口(配置点已文档化) 2026-08-05 10:37:26 +08:00
bot_dev1 458220ecbc feat: 完成 issue #151 用户/角色管理页补充角色权限矩阵视图(PRD 5.7) 2026-08-05 10:34:59 +08:00
bot_dev1 a2c089499e feat: 完成 issue #136 移动端只读驾驶舱与交接班摘要(web/mobile,共享布局资产) 2026-08-05 10:32:40 +08:00
bot_dev1 c5355e16c2 feat: 完成 issue #135 管理控制台(web/admin:模型/知识库/告警确认/审计查询) 2026-08-05 10:27:10 +08:00
bot_dev1 0d144715a0 merge: 合并 #150 认证后端/登录页,落地 #134 用户/角色管理+OIDC 预留+配置台接入 2026-08-05 10:20:09 +08:00
bot_dev1 7cf783e7c6 feat: 完成 issue #134 登录认证+用户/角色管理(web/auth,RBAC 三级,OIDC 预留,接入配置台) 2026-08-05 10:14:25 +08:00
bot_dev1 982ef65530 docs(#150): web/auth README(登录页与本地账号会话管理说明) 2026-08-05 02:08:37 +00:00
bot_dev1 73056ed32e feat(#150): 登录页客户端 auth.js(login/me + 路由守卫 requireLoginElseRedirect,PRD 8.2) 2026-08-05 02:08:24 +00:00
bot_dev1 351f791f1a feat(#150): 登录页 login.html(深色主题,对接 /auth/login) 2026-08-05 02:07:59 +00:00
bot_dev1 79afd967a7 feat(#150): 登录页样式 auth.css(深色主题,对齐 cockpit/studio) 2026-08-05 02:07:44 +00:00
bot_dev1 e6d94c95ba chore(#150): core/auth tests 包 2026-08-05 02:07:27 +00:00
bot_dev1 16d5865fef test(#150): 本地账号认证单元测试(密码哈希/UserStore/session/守卫) 2026-08-05 02:07:02 +00:00
bot_dev1 eba2bc3948 feat(#150): core/auth 包初始化 2026-08-05 02:06:43 +00:00
bot_dev1 51ff6dbcc6 feat(#150): 认证 HTTP 端点 auth_api.py(login/logout/me + require_auth/can_write 写操作守卫,PRD 8.2) 2026-08-05 02:06:34 +00:00
bot_dev1 f6f41913dc feat(#150): PostgreSQL users 表 DDL + 映射(对齐 #30 schema,role CHECK 约束) 2026-08-05 02:06:06 +00:00
bot_dev1 a1acc6e63b feat(#150): 会话管理 session.py(HMAC 签名 token + 恒定时间校验,HttpOnly cookie) 2026-08-05 02:05:50 +00:00
bot_dev1 b5b29d28d7 feat(#150): 本地账号认证 users.py(PBKDF2 密码哈希 + UserStore,对齐 rbac.py 三级角色) 2026-08-05 02:05:21 +00:00
bot_dev1 b2fa36bd35 chore: remove probe 2026-08-05 02:04:57 +00:00
bot_dev1 6d57c7ed65 chore(#150): probe core/auth dir 2026-08-05 02:04:48 +00:00
bot_dev1 db855241c5 chore(#150): test write to main HEAD (no content change) 2026-08-05 02:03:19 +00:00
bot_dev1 faddf24d11 feat: 完成 issue #133 对话助手增强版(引用溯源/路由分级/DLP 拦截,直连推理服务) 2026-08-05 09:57:53 +08:00
bot_dev1 19c832b244 chore: remove probe 2026-08-05 01:50:06 +00:00
bot_dev1 92634cbf73 chore: probe write test 2026-08-05 01:49:46 +00:00
bot_dev1 78078822d7 feat: 完成 issue #132 模板配置台 UI(web/studio:导入/超参/编排/版本,三级 RBAC) 2026-08-05 09:49:24 +08:00
bot_dev1 92e075c9f1 feat: 完成 issue #131 配置化驾驶舱 Web 前端(web/cockpit) 2026-08-05 09:32:10 +08:00
bot_dev1 97fbbfa7b2 feat(#60): 一键部署编排与回滚引擎
纯标准库实现,对齐 PRD 5.6「⑥ 部署底座」(不真执行 k8s/helm,模拟编排):

- deploy_plan.py:DeployStep(4 类:pre_check/deploy/health_check/post_check)
  + DeployPlan(顺序约束自动校验,default_helm_release 默认 4 步计划)+
  DeployOrchestrator(按序执行,必需步骤失败即中止并标记 needs_rollback,
  deploy/health_check 为回滚检查点,pre_check 失败无需回滚)+
  HealthCheckContract(对齐 deploy/k8s/healthz 99.8% 目标)。
- rollback.py:RollbackPoint(部署前快照,values_hash SHA1 检测漂移)+
  RollbackManager(快照栈 + rollback_to_latest/rollback(n),失败压回栈顶
  保持一致性,FIFO 淘汰,支持回滚后健康检查)+ RollbackResult(4 状态)。
- tests:30 用例覆盖计划构造/顺序约束、全成功/各类失败、回滚检查点判定、
  action 异常、dry_run、空计划、快照压栈/FIFO、回滚成功/失败/多版本/空栈/
  异常、健康检查契约、values 漂移、报告序列化。
- _sanity_check.py:冒烟验证快照→部署成功→部署失败→回滚全流程。
2026-08-05 05:32:27 +08:00
bot_dev1 1290a8bc54 feat(#55): Ti 行业布局模板(四状态流程视图)+ layout_validator
纯标准库实现,对齐 PRD 5.5「⑤ 配置化驾驶舱」iAOP-cockpit-layout-v1:

- cockpit.ti.yaml:海绵钛四状态工艺流程(氯化→精制→还原→蒸馏),
  process_view 主视图声明 stages 覆盖,trend/kpi_card bind 对齐
  point_dict.default.csv 的 point_id(CLF-01/RF-01/E-01/ST-01)。
- layout_validator.py:LayoutValidator 校验 widget 类型合法、12 列网格
  不越界、bind point_id 在点位字典内、四状态覆盖完整(order 单调/id 唯一);
  零依赖 YAML 子集解析(复制 impurity-forecast _parse_yaml_subset)。
- tests:18 用例覆盖真实资产端到端、非法类型、网格越界/负坐标/零宽、
  bind 漂移、缺 process_view、缺必需状态、order 非单调、stage 重复、
  $schema 头、CSV 加载、空布局。
- _sanity_check.py:冒烟验证 9 widgets 全校验通过。
2026-08-05 05:32:23 +08:00
bot_dev1 78bfc5d73d feat(#84): 树脂驾驶舱布局提取为模板
把已交付树脂驾驶舱布局资产(cockpit.resin.yaml)提取为可复用模板:
- dashboard/extractor.py:extract_template(变量化 R-801.TEMP→{device}.{point}、
  metric→{metric})、instantiate(点位字典回填)、diff_layouts(差异比对);
- PointDict.from_csv 加载 9 列点位字典;零依赖 _parse_yaml_subset 解析 YAML;
- tests/test_extractor.py 19 用例全部通过。
2026-08-05 05:29:24 +08:00
bot_dev1 5da367dfd8 feat(#54): 性能预算与懒加载策略引擎(首屏≤2s,图表懒加载)
纯标准库实现,对齐 PRD 5.5「⑤ 配置化驾驶舱」性能口径:

- perf_budget.py:PerformanceBudget(首屏 2000ms + 6 类资源预算)、
  ResourceMeasurement(block_render 区分关键路径)、BudgetVerifier
  (阻塞串行+非阻塞取最大口径,逐类型比对预算,PASS/FAIL/EMPTY +
  类型化优化建议,reason 可解释)。
- lazy_load.py:LazyLoadStrategy(immediate/visible/idle/never)、
  LazyLoadPolicy(视口行数+预加载+分页阈值+虚拟滚动)、LazyLoadPlanner
  (widget 坐标+滚动位置 → 决策+分页计划+虚拟滚动窗口)。
- tests:32 用例覆盖预算构造/查询、关键路径口径、达标/超预算场景、
  always_load 强制加载、视口边界、分页/虚拟滚动、输入校验。
- _sanity_check.py:冒烟验证达标/超预算/懒加载分流。
2026-08-05 05:26:09 +08:00
bot_dev1 a10b83007e feat(#73): [Ti-1] 模型部署到内核并接入驾驶舱(预测服务+告警+可解释视图+漂移监测)
新增 templates/ti-cl4/quality-forecast/serve.py:
- PredictionService:特征抽取→模型预测→告警判定全链路,部署前 validate
- Thresholds/AlarmLevel:纯度min/杂质max 双向阈值,normal/warning/critical 三级
- CockpitView:渲染 kpi_card+alarm_panel+explanation_list(对齐 cockpit-layout-v1)
  含 top-3 特征贡献溯源,满足 PRD 可解释可溯源要求
- DriftMonitor:累计 R²/MAE,超阈值触发重训信号(PRD §5.3/§9)
- DeploymentBundle:模型+特征清单+阈值+置信带整体序列化往返
- config/thresholds.template.yaml:TiCl₄纯度下限 99.2 阈值模板
- 14 用例(累计 53 用例)全通过;纯标准库零运行时依赖。
2026-08-05 05:17:36 +08:00
bot_dev1 aeee8ef468 feat(#69): [Ti-1] 质量预测模型训练与评估(岭回归+R²/MAE/RMSE+可解释)
新增 templates/ti-cl4/quality-forecast/model.py:
- RidgeRegression:纯标准库最小二乘+L2正则闭式解(高斯消元,不依赖numpy)
- QualityModel:聚合特征+目标+岭回归,fit/predict/evaluate(R²/MAE/RMSE)/explain
- explain():尺度归一化重要性(|权重|×std),跨特征可比较,供#73可解释
- TrainingSet.from_records:自动跳过含 NaN 的行
- ModelRecipe 超参包:target/alpha/feature_names 外置 YAML/JSON
- 序列化 to_dict/from_dict 往返一致
- 17 用例(累计 39 用例)全通过;纯标准库零运行时依赖。
2026-08-05 05:16:26 +08:00
bot_dev1 c6dc7d2344 feat(#68): [Ti-1] 氯化车间质量预测特征工程(基于点位字典)
新增 templates/ti-cl4/quality-forecast/features.py:
- PointDict:解析 point_dict CSV(9 列,对齐 core/edge-gateway),检索/存在性校验
- FeatureSpec:声明式特征(source/transform/window/meaning),换行业只改清单
- FeatureExtractor:按清单从时序样本抽取特征矩阵,缺失值 NaN 占位
- 9 算子:raw/mean/std/min/max/range/diff/slope/ratio
- 零依赖 YAML 子集加载(与 recipe-optim/data-bus 同款)
- config/features.template.yaml:7 个默认特征(炉温/配比/CO波动/炉层/TiCl₄纯度)
- 22 用例全通过;纯标准库零运行时依赖。
2026-08-05 05:14:39 +08:00
bot_dev1 11f2c14ee3 feat(#92): [M5] UAT 计划与执行支撑(用例集/准入准出/缺陷管理/排期/风险+一致性核对脚本) 2026-08-05 04:31:34 +08:00
bot_dev1 a0a77fb41f feat: 完成 issue #81 [Ti-2] 优化建议生成与可解释性(整合求解结果+跨工序权重+约束依据,输出可溯源建议报告) 2026-08-05 04:05:10 +08:00
bot_dev1 dcbd196fe9 feat: 完成 issue #80 [Ti-2] 跨工序寻优模型训练(纯标准库岭回归+多目标关联建模+R2评估+可解释权重+JSON序列化) 2026-08-05 04:03:23 +08:00
bot_dev1 c42846e18a feat: 完成 issue #79 [Ti-2] 配方优化求解器集成(网格枚举+坐标下降轻量求解器+solve统一入口,求解器无关契约) 2026-08-05 04:00:57 +08:00
bot_dev1 2aa70d078b feat: 完成 issue #78 [Ti-2] 配方优化问题建模(决策变量/目标/约束声明式规格+求解器无关+零依赖YAML加载) 2026-08-05 03:58:25 +08:00
bot_dev1 5bc7ff957e feat(#53): 移动端交接班摘要生成(NL,PRD 场景C ⑤ 移动端交接班摘要)
对应 PRD 场景C(辅助):交接班 → LLM 汇总本班关键事件/能耗/待办 → 生成交接班
报告 → 推送下一班(line 84/350-351)。把本班原始数据 → 移动端交接班摘要这条
链路模板化、可配置、可测试。

新增 core/shift-handover 内核模块:
- handover.py:班次数据归一化(ShiftRecord) + 摘要配置(HandoverBriefConfig) +
  validate/load 校验对 + build_llm_input(填 shift_handover v1.0.1 提示词占位符) +
  generate_handover_brief(LLM 注入生成, 离线/故障自动降级为确定性摘要) +
  render_handover_brief(编译移动端只读卡片 props)
- 零运行时依赖(仅标准库); LLM 以依赖注入传入, 内核不绑定云端 SDK
- 离线/LLM故障降级保证可用性≥99.8%(PRD 模型服务故障自动降级)
- 含 P0/安全事件时强制 requireConfirm=true(PRD 高利害人工确认)

新增资产/测试/验收:
- templates/ti-cl4/dashboard/handover_brief.ti.yaml(Ti 模板配置资产)
- tests/test_handover.py(32 用例全通过) + tests/_bootstrap.py(连字符目录挂载)
- scripts/verify_handover_brief.py(4 能力点全通过: 配置合法/LLM+降级/
  配置点驱动展示/≤2分钟验收线)
- README.md

验证: python -m unittest discover -s tests (32 OK) +
      python scripts/verify_handover_brief.py (全部通过)
2026-08-05 03:38:07 +08:00
bot_dev1 76f921f994 feat(#90): DoD 验收清单逐条核对(内核/首模板/NFR/流程节点+程序化核对脚本)
- docs/DoD验收清单.md:把 PRD §9 NFR + §10 DoD + §7.7 交付物清单拆成勾选式清单
  · iAOP-Core 6 模块 28 项(C-01~C-28)+ 首模板 8 项(T-01~T-08)
  · NFR 量化底线核对表(P99≤1.8s/丢失率≤0.02%/可用性≥99.8%/路由≥96.5%/首屏≤2s 等)
  · 验收流程六节点(自测→内部评审→客户UAT→上线→质保观察→闭环)
  · 风险登记(标注数据不足/UAT 配合度/机房环境)与四态状态口径
- docs/_check_dod.py:程序化核对必备章节/量化指标/状态口径/流程节点/证据路径
- 验证:6 个 docs 校验脚本全部通过(含新增 _check_dod.py),无回归
2026-08-05 02:34:00 +08:00
bot_dev1 42d206e503 feat(#70): 炉层杂质预警特征工程(声明式FeatureSpec引擎,PRD 5.3 ③)
新增 templates/ti-cl4/impurity-forecast:声明式特征工程引擎,特征以
FeatureSpec 描述(EMA/RollingStd/RateOfChange 等 7 算子),换行业只改模板配置
features.template.yaml,引擎零改动(PRD 5.3:特征工程层跨行业差异落在
FeatureSpec,不落代码)。

- features.py:FeatureSpec 声明 + 校验 + 7 算子 + 时序对齐 + 阈值 breach + 零依赖 YAML 解析
- config/features.template.yaml:炉温/氯气/炉压/炉层 9 条特征(对齐点位字典 point_id)
- tests/test_features.py:24 项单测(校验/算子/对齐/breach/配置/端到端提前量)全通过
- _sanity_check.py:冒烟脚本(配置加载 + transform + breach 可观测)

验收:一期阈值+无监督上线,提前量信号可观测(PRD 提前≥30min、误报率≤8%口径)。
2026-08-05 01:59:42 +08:00
bot_dev1 d23dfae776 feat(#51): 图表组件配置化渲染引擎(CockpitLayout→RenderPlan,PRD 5.5 配置化驾驶舱渲染层适配器)
在 #50 布局 JSON Schema 之上实现渲染层适配器,把 CockpitLayout 编译为与前端框架无关的 RenderPlan:

- 新增 core/cockpit/renderer.py:RenderPlan/WidgetRendererSpec/GridPlacement 渲染描述符,栅格整数坐标→CSS Grid 定位+百分比换算,widget type→前端组件映射(ProcessView/TrendChart/KpiCard/AlarmPanel/NlQuery)+ props 组装(四状态/趋势窗口/KPI标签兜底/告警订阅/NL占位),dark/light 两套主题 CSS 变量注入,组件数≥30 触发全局+逐组件性能策略(虚拟滚动/采样降频/WebWorker,PRD 5.5),render_layout 复用 #50 校验器防篡改。

- plan_to_dict/plan_to_json 序列化:切换行业模板=换 RenderPlan,前端组件注册表固定即可「切换模板零改码」。

- 28 个单元测试全通过 + verify_renderer.py sanity check 通过(氯化车间示例 + 树脂模板兼容 + 主题切换 + 序列化往返)。全 cockpit 模块 58 测试无回归。
2026-08-05 01:26:05 +08:00
bot_dev1 ace09a6d16 feat(#50): 驾驶舱布局 JSON Schema 定义(PRD 5.5 配置化驾驶舱)
新增 core/cockpit 模块,定义 iAOP-cockpit-layout-v1 布局资产 schema 的
权威实现,对齐 PRD 5.5「⑤ 配置化驾驶舱」验收口径(切换模板零改码)。

交付内容:
- core/cockpit/layout.py:布局字段规范、合法性集合(主题/组件类型)、
  validate_layout 校验器(结构+语义)、load_layout 解析器、
  CockpitLayout/Widget/Grid 内存模型(dataclass)、LayoutValidationError。
- core/cockpit/__init__.py:对外导出。
- core/cockpit/tests/test_layout.py:30 个单测(PRD 示例/树脂模板兼容/
  各类非法/性能提示/解析/round-trip/不变入参)。
- core/cockpit/scripts/verify_layout_schema.py:端到端验证脚本(exit=0)。

兼容性:现有 templates/resin/dashboard/cockpit.resin.yaml 引用的
$schema: iAOP-cockpit-layout-v1 与本实现一致,树脂模板资产校验通过。
2026-08-05 00:29:42 +08:00
bot_dev1 5fa1103e3f feat(#39): 超参包 JSON Schema 校验器(PRD 5.3 模型框架配置化)
新增 core/model-framework/hyperparam.py:超参包(Hyperparam Pack)结构化
校验器,零外部依赖(不依赖 jsonschema),对齐 PRD 5.3「超参包驱动」与 EPIC #5。

校验维度(10 类):
- 顶层结构:必填字段 model_id/template/algorithm/features/target;
- algorithm:已知算法集合校验(xgboost/lightgbm/dnn/lstm/gnn/
  isolation_forest/zscore/linear/ridge),未知项报错并列出已知项
  (对齐 PRD「新增结构走 Recipe 插件注册」);
- features:非空列表、name 唯一且合法、spec 非空(FeatureSpec 文本
  存在性校验,语法由 #35 引擎解释);
- objective/hyperparams/train_window/alarm_threshold/drift_check 可选
  字段的类型、取值与格式校验(train_window 形如 180d/4w;drift limit
  在 (0,1];alarm type 含对应阈值键)。

设计:
- validate_pack 返回 ValidationReport(逐条问题,不抛异常),便于配置台
  聚合展示;load_pack 校验失败抛 ValueError 供训练/推理流水线 fail-fast。
- validate_pack_file 复用结构校验,文件/JSON 解析错误也记入报告。

测试:tests/test_hyperparam.py 25 用例全绿(合法包/必填缺失/未知算法/
特征重复与缺 spec/目标函数/train_window 格式/alarm/drift/文件加载与
JSON 解析错误);python -m unittest discover -s tests -v → 25 passed。

close #39
2026-08-04 21:35:44 +08:00
bot_dev1 69d8178a83 feat(#89): 可用性/容灾演练套件(断点续传 + 故障隔离)
- 新增 tests/ha/ 容灾演练套件,4 个场景验证 PRD 第 9 章可用性/容灾 NFR:
  · 可用性基线:600 点位 30 轮健康采集,可用性 ≥ 99.8% / 丢失率 ≤ 0.02% / P99 ≤ 1.8s
  · 驱动故障隔离:30 轮中注入 5 轮设备掉线,引擎不崩溃,故障被隔离(_FlakyDriver 注入)
  · 上行抖动恢复:Kafka 中断 5 轮期间样本驻留 spool,恢复后断点续传零丢失
  · 进程重启容灾:销毁引擎模拟崩溃,重启后扫描 spool 全量重发(RPO=0)
- 演练结论:可用性 100%、丢失率 0%、P99=281ms(≤1.8s),SLA 全部达标
- 全部基于内核可注入接口(Driver/SpoolStore/HealthMetrics/BatchWriter)运行,零外部依赖
- 运行:python -m unittest discover -s tests/ha -v(_bootstrap.py 自动加载四个 core 模块)
2026-08-04 20:53:27 +08:00
bot_dev1 f8f6d977c5 feat(#24): 西门子 S7-1200 驱动参数化适配
- 连接参数 ip/port/rack/slot/timeout 全部来自模板配置(去硬编码)
- 点位→DB 地址映射经点位字典 opcNode 列携带(DB{db}.{byte}[.{bit}])
- 按 dataType 解码:float(REAL/4B) int(WORD/2B) bool(位),S7 大端
- read_area 用 snap7 常量 0x84(DB区),单点失败容错记 None 计入丢失率
- 严格只读,无任何写/控制指令(PRD 9 章安全约束)
- 新增 test_s7_driver.py 18 个用例(mock snap7),全量通过
2026-08-04 20:45:05 +08:00
bot_dev1 c4a3c2d04e feat(#87,#88): 采集/总线/LLM 路由 DLP NFR 压测套件
新增 tests/perf/ NFR 压测套件,对应 PRD 第 9 章 SLA 全量压测:

#88 LLM 路由/DLP 压测:
- DLP 敏感拦截率 100%(2000 样本,含 PII/凭证/工艺词,零漏拦)
- DLP 清洁零误报(1000 样本),单条 0.033ms / 30097 qps
- 路由敏感不泄漏云端 100%(1500 样本,≥96.5% 基线达标)
- 安全指令(停机)100% 转 block/人工

#87 采集/总线 NFR 压测:
- 采集 P99=312ms(≤1.8s,600 点位 30 轮),可用性 100%(≥99.8%),丢失率 0%(≤0.02%)
- 总线 6000 样本不丢不重(幂等去重)

合成数据集固定随机种子可重复,零外部依赖,CI 可直接执行。
运行:python -m unittest discover -s tests/perf -v
2026-08-04 18:43:39 +08:00
bot_dev1 33e64fe18b feat(#86): 端到端联调用例编写(数据流 + 问答流 + 跨链路闭环)
新增 tests/e2e/ 端到端联调测试套件,覆盖四个 iAOP-Core 内核模块的全链路协作:

数据流(PRD 5.1→5.2):
- edge-gateway 只读采集(模拟驱动)→ spool 断点续传 → data-bus 批量写入
- 验证不丢不重(幂等去重)、样本字段完整、健康度满足 SLA

问答流(PRD 5.4):
- rag-kb 模板化知识库检索(命中片段+来源)→ llm-gateway 混合网关
- 验证敏感度路由、DLP 拦截、幻觉溯源校验、审计可追溯

跨链路:采集→落库→知识沉淀→安全问答业务闭环

共 14 个用例,全部基于可注入接口运行,零外部依赖(CI 可直接执行)。
运行:python -m unittest discover -s tests/e2e -v
2026-08-04 18:26:00 +08:00