变更日志
规则:每次新增或修改文件,追加一条。格式:
日期 | 需求号 | 改了什么 | 验证 | 部署。只追加,不删改。
| 日期 | 需求号 | 变更内容 | 验证结果 | 部署 |
|---|---|---|---|---|
| 2026-10-15 | REQ-001 | 新建 docs/README.md,确立需求与变更记录纪律 | 文件已生成 | 否 |
| 2026-10-15 | REQ-001 | 新建 docs/需求台账.md,登记 REQ-001 需求原文 | 文件已生成 | 否 |
| 2026-10-15 | REQ-001 | 新建 docs/变更日志.md(本文件) | 文件已生成 | 否 |
| 2026-10-15 | REQ-001 | 新建 docs/output/任务清单-知识库-Skill-网站-飞书.md,含现状核实、WBS 任务表、待确认点 | 文件已生成 | 否 |
| 2026-10-15 | REQ-001 | 现状核实(只读):确认 platform-ems-3-6/ 为加密二进制、platform-ems-3-6-plain/ 为明文源码;确认 maxiao.xoato.com → 8.133.19.10,nginx 1.18.0,已有站点「椰果的故障诊断 Agent」与 /mcp、/healthz 网关 | 见任务清单「一、现状核实」 | — |
| 2026-10-15 | REQ-001 | 移动 .agents/skills/robot-communication-protocol/ → docs/archive/robot-communication-protocol/(Q1 追问确认,移出不删) | 移动后核对:.agents/skills/ 已无该项;归档处 18 个文件完整 | 否 |
| 2026-10-15 | REQ-001 | 新建 docs/决策记录.md,记录 ADR-001 ~ ADR-010(源码基准、知识库落位、HMI 边界、/ems/ 方案、aily 链路、DeepSeek、评测、只读、口令保护、skill 退役) | 文件已生成 | 否 |
| 2026-10-15 | REQ-001 | 新建根 AGENTS.md,把记录纪律与工作区基线写成硬规则,使后续所有会话自动遵守 | 文件已生成 | 否 |
| 2026-10-15 | REQ-001 | 修改 docs/output/任务清单-知识库-Skill-网站-飞书.md:§四 标注确认完毕,追写 §八 确认结果汇总(Q1~Q15 逐点答复 + 任务状态变更 + 下一步) | 文件已更新 | 否 |
| 2026-10-15 | REQ-001 | 追加 docs/决策记录.md ADR-011(交付顺序:知识库优先逐层向上,无时间点压力)与 ADR-012(知识库目录结构:代码解析/ 整树搬迁,故障速查/ 同级) | 文件已更新 | 否 |
| 2026-10-15 | REQ-001 | 移动 platform-ems-3-6-plain/docs/代码解析/ → docs/knowledge/代码解析/(K2/K3),205 个文件整树搬迁 | 搬迁后文件数 205,与原目录一致;platform-ems-3-6-plain/docs/ 其余 10 份软件功能记录表未受影响 | 否 |
| 2026-10-15 | REQ-001 | 修改 docs/knowledge/代码解析/索引/工具/生成索引.js:路径解析重写(ROOT 上 4 层写死已失效),改为「文档镜像根」与「源码树根」分别解析,源码根支持 EMS_SRC 环境变量覆盖;新增缺失源文件统计输出 | 修正过程中先误算一层(DOCS 少上一级),已重跑验证;修好后重跑输出 191 源文件 | 否 |
| 2026-10-15 | REQ-001 | K5 索引一致性校验:搬迁后重跑 生成索引.js,与搬迁前备份逐字节比对 | 三个 TSV 全部「完全一致」:函数 2364 / 类型与宏 2787 / 全局变量 505(191 源文件)。证明工具链已恢复、索引与源码 04e72700 无漂移 | 否 |
| 2026-10-15 | REQ-001 | 误操作清理:生成索引.js 路径算错时误建 docs/knowledge/代码解析/索引/索引/ 空目录 | 已 rm -rf 清理;原三个 TSV 未被覆盖(行数仍为 2365/2788/506 含表头) | 否 |
| 2026-10-15 | REQ-001 | K1 基准锁定:新建 docs/knowledge/基准版本.md + docs/knowledge/基准哈希.tsv | 191 文件、7,193,192 字节、全部 CRLF、汇总哈希 274114398732e4104cc0242fd19805dfeb3269799ec6f445001c1aaf8f7094c6;文档内自带的复核命令实测输出与记载逐字一致 | 否 |
| 2026-10-15 | REQ-001 | 新建 docs/knowledge/README.md(知识库总入口:目录结构、三种用法、覆盖边界、维护规则) | 文件已生成;覆盖边界账目可验算:191 + 77 + 6 + 5 = 279 应用层,+175 底层 = 454 | 否 |
| 2026-10-15 | REQ-001 | 修正知识库内 15 个文件共 19 处失效路径 docs/代码解析 → docs/knowledge/代码解析 | 独立复核:旧路径残留 0、新路径 19、畸形路径(docs/docs/、knowledge/knowledge)0、树内文件数仍 205、相对链接 ../../logic/logic.c.md 未受影响 | 否 |
| 2026-10-15 | REQ-001 | 把 README 里全部 8 条示例命令逐条实跑:修复前 6/7 通过(-g 并机地址 失败),修复后 8/8 全部通过 | 同上 | 否 |
| 2026-10-15 | REQ-001 | K6 开工 — 新建 索引/工具/生成功能定位.js:把 7 份功能索引的表格解析成「功能问法 → 符号 → 定义文件:行号」,交叉三个符号索引补行号,并对功能索引指向 .h 的行额外查出声明行号 | 产出 索引/功能定位.tsv,3195 条(1514 数据行展开),解析成功 2969 条、未收录 226 条(枚举成员/结构体字段,设计上不在符号索引内)、补出 .h 声明行号 480 条 | 否 |
| 2026-10-15 | REQ-001 | 修 bug(我自己的):生成功能定位.js 用 String.match() 配带 g 标志的正则,取到的是完整匹配(含反引号)而非捕获组,导致查的是 ` logic_control_by_time 而不是 logic_control_by_time,3195 条**全部落空**(全判为"未收录")。改用 matchAll()` 取捕获组 | 修复后符号类型分布正常:函数 2461 / 宏 202 / 全局变量 131 / 各类型 175 / 未收录 226 | 否 |
| 2026-10-15 | REQ-001 | 修判定逻辑(我先前判断错了两次):① 把 .h 声明处 vs .c 定义处误报为"不一致"(符号索引只收定义、不收原型声明);② 把功能索引列的"调用方"误报为"真差异"。改为只认 basename 相同即正常,标签改成「提示性差异(多数是调用方或声明处,非错误)」,134 条 | 明细逐条抽样核对,确认无实质错误 | 否 |
| 2026-10-15 | REQ-001 | 重写 索引/工具/查找.js(原文件备份为 查找.js.bak-20261015):① 查询分词(整串 + 空白词 + ASCII 词 + 中文二元组);② idf 加权排序;③ 新增查询字符覆盖率用于判断可信度;④ ASCII 词改为边界匹配(can 不再误命中 cancel);⑤ 新增 -F 模式(功能→函数定位,输出 定义文件:行号 + .h 声明位置 + 该函数回答的口语问法);⑥ 域外提问显式报「未找到有效匹配」并说明原因,不再拿噪音糊弄 | 见下方回归结论 | 否 |
| 2026-10-15 | REQ-001 | 生成功能定位.js 补记章节标题:功能索引的 ## 章节(如「DRM 需求响应与并网限功率」)携带大量上下文,丢掉它会让「DRM需求响应」命不中 DRM 的行。新增 所属章节 列并纳入检索打分 | DRM需求响应 修复前 top 是 Key_Handle_Cancel(hmi/key.c,只命中「响应」),修复后 top 是 drm_mode_judge(midware/interface/drm/drm.c:59),最佳覆盖 100% | 否 |
| 2026-10-15 | REQ-001 | 同步 索引/README.md:删掉已过时的「整串子串匹配」告警,改写为新匹配规则说明 + -F 模式用法 + 功能定位.tsv 说明 | 8 条示例命令实跑全部通过 | 否 |
| 2026-10-15 | REQ-001 | K7.1 开工 — 新建 docs/knowledge/故障速查/工具/生成故障码表.js:从明文源码机械提取全部 11 张 FAULT_CODE_PAIR_T 故障码对照表 + fault_warn_log.h 的 ERROR_CODE_E 枚举(按 C 枚举规则算值,非按名字猜数);路径相对脚本自身解析、支持 EMS_SRC 覆盖、源码缺失即报错退出(已实测 exit=1) | 见下条 | 否 |
| 2026-10-15 | REQ-001 | 运行上条脚本,产出 docs/knowledge/故障速查/故障码表.tsv(6 列 TSV,336 条,脚本产物非手抄) | wc -l = 337(1 表头 + 336);11 张表条目数 30/22/9/13/64/64/25/62/5/21/21 = 336;已知值抽验 E0007=7、E0094=94、E0031=31、E60000=60000 全部命中;独立复核枚举 375 条的「名字内数字 vs C 规则算值」0 处不符;连跑两次 md5 一致(幂等:85a07b3d4937e8eaf165d58df1b90d14) | 否 |
| 2026-10-15 | REQ-001 | K7.1 完成 — 新建 故障速查/工具/渲染总表.js + 故障码总表.md,把 TSV 渲染成人读总表(脚本生成,非手抄,保证与源码永不分叉) | 336 条 / 11 组 / 452 行;首版分区表我算错(BMS 告警被 startsWith 重复统计,得出假的「其余 177」),已改为按各组实际码值范围逐组列出 | 否 |
| 2026-10-15 | REQ-001 | K7.8 — 新建 故障速查/现场排查SOP.md(第 0~5 步现场排查流程) | 见下方「K7 关键发现」 | 否 |
| 2026-10-15 | REQ-001 | 新建 故障速查/README.md(该库用法入口、故障码分区速查、覆盖边界) | 文件已生成 | 否 |
| 2026-10-15 | REQ-001 | 修改 索引/工具/查找.js:-d 全文检索范围从 代码解析/ 扩到整个知识库(新增 KNOW 根),否则搜不到与 代码解析/ 同级的 故障速查/ | 实测 -d 基准版本、-d 通信超时 均能命中;-F/-g/-f/-p/综合 全模式回归通过,耗时 140~258 ms | 否 |
| 2026-10-15 | REQ-001 | 修改 docs/knowledge/README.md:目录结构补上 故障速查/ 实际内容,新增 §3.0「现场报故障 → 走这里」,检索命令补 -F 与 -d 故障码 | 文件已更新 | 否 |
| 2026-10-15 | REQ-001 | 新建 docs/output/服务器接入指引.md(阿里云 ECS 接入步骤:已生成专用密钥对,公钥可公开,含两个方案与安全约定) | 公钥已生成于 ~/.ssh/id_ems_deploy.pub;私钥仅存本机未入文件 | 否 |
| 2026-10-15 | REQ-001 | K7.1(EMS 部分)定稿 — 重命名 _草稿_EMS故障触发条件.md → EMS故障分册.md,并改写头部:加「先看这 5 条」现场速查(7 个死位 / 3 个永久锁存 / G100 禁止馈网连带 / 15~30 s 门槛与故意不报 / E0004 连带清零),补 §五 维护说明,去掉文末草稿申明 | 结构核对:30 个位节全在,§零~§五 完整;故障速查/README.md 已去掉对草稿的引用 | 否 |
| 2026-10-15 | REQ-001 | 独立复核子任务给出的最强结论(不采信自述):① 3 个"永久锁存"位无清除路径;② logic.c:390-395 聚合 6 位 → :506-511 禁止馈网;③ alphaess/锦浪/科陆 三家失联阈值与置位点 | ① bit13 全工程仅 system_config.c:2530 置 1;bit19 仅 bms.c:1228 置 1;bit17 的"清 0"在 bit17==TRUE 的 else 分支里(只在已为 0 时执行,等于空操作);全工程无 u32_all 整体清零 —— 三点全部证实 ② 聚合位与置位代码逐行核对一致 ③ alphaess 30*1000+升级余量、锦浪 30*1000、科陆只有 = FALSE 无置 TRUE —— 全部一致 | 否 |
| 2026-10-15 | REQ-001 | 补出一条现场关键事实:从源码原文(hmi/ui/ui_history_error_log.c:139-165 的 disp_error_describe())读出屏幕故障行的实际格式,没有依赖被排除的界面解析文档 | 格式为 " E%05u NO.%2u "(发生)/ "NO E%05u NO.%2u "(恢复),W 告警同理 —— 即屏幕上码是 5 位(故障码 7 显示为 E00007),且行首有无 NO 表示该故障是否已恢复。已补进 现场排查SOP.md 通路 B 与 EMS故障分册.md 第 6 条 | 否 |
| 2026-10-15 | REQ-002 | 登记 REQ-002(线上环境变更),REQ-001 原文第 5 条保持原样并追加取代说明;新建 ADR-013(替代 ADR-004 的主机地址部分,「挂 /ems/ 子路径」的决定本身不变) | docs/需求台账.md、docs/决策记录.md 已更新 | 否 |
| 2026-10-15 | REQ-002 | 实测新环境 xiao-ma.xoato.com / 47.239.25.159:DNS 解析正常、SSH(22) 开放、ping 约 129 ms,但 80/443/8080 全部不通或被过滤 —— 尚无 Web 服务;同时实测旧环境 8.133.19.10 仍在线(http://8.133.19.10 → 200),maxiao.xoato.com 仍解析 | 结论:新机是白板,"承接既有功能"需整套重新部署;旧机仍是唯一既有功能载体,退役与否待用户决定 | — |
| 2026-10-15 | REQ-002 | 修改 AGENTS.md 线上环境章节:改为新旧环境对照表并标注实测状态与未决问题 | 文件已更新 | 否 |
| 2026-10-15 | REQ-002 | 重写 docs/output/服务器接入指引.md:目标改为新机,新增「新机只有 SSH、无 Web 服务」提示、旧机状态、A/B/C 退役方案;公钥安装步骤改为对新机执行 | 文件已更新(旧版全部具体地址已失效,故整体重写) | 否 |
| 2026-10-15 | REQ-002 | 修改 docs/output/任务清单-知识库-Skill-网站-飞书.md:站点基线改新环境;§一 标注为「旧环境实测记录」并保留原样(历史为真,不篡改);新增 W0(决定旧机退役)/ W0b(新机搭 Web 服务)/ W0c(迁移 /mcp 网关)三个任务;末尾索取项改为新机用户名 + 旧机处置 | 文件已更新 | 否 |
| 2026-10-15 | REQ-002 | 安全处置 —— 拒收云控制台凭据:用户提供了阿里云控制台账号 + 密码(账号为手机号、密码与之相同)。不接收、不保存、不使用,已立 ADR-014;AGENTS.md 安全章节补一条硬禁止 | ① 全工作区检索该凭据 零命中,确认未写入任何文件 ② 已当场告知用户该凭据已进入对话记录并建议改密码 + 开 MFA ③ 接入仍走 SSH 公钥,用户无需交出任何密码 | 否 |
| 2026-10-15 | REQ-002 | 决策达成 —— 旧机处置定为方案 A:用户答复「1.A」,即旧机 8.133.19.10 退役、既有功能整套迁往 47.239.25.159。立 ADR-015,明确迁移范围(nginx/站点根目录/agent-gateway//etc/agent/pi/证书)、不可颠倒的 8 步顺序、回滚方案 | 核心理由已入档:只要旧机不删,回滚 = 改一条 DNS;因此要求迁移全程旧机只读不改 | 否 |
| 2026-10-15 | REQ-002 | 新建 docs/output/迁移方案.md:前置条件(安全组放行 80/443 + 两台 SSH)、迁移清单、8 步执行顺序、唯一中断窗口的压缩办法、回滚表、待盘点清单(pi 是什么、证书怎么签的等我不可能凭空知道的项)、备份门槛 | 文件已生成(128 行) | 否 |
| 2026-10-15 | REQ-002 | 修改 docs/output/任务清单-知识库-Skill-网站-飞书.md:W0 标为已完成(方案 A);新增 W0-pre(两个前置)、W0b(备份+回滚演练)、W0c(迁移部署)、W7(重签证书)、W7b(切换,唯一中断窗口)、W7c(观察期→退役);W 组加迁移方案指引 | 文件已更新 | 否 |
| 2026-10-15 | REQ-002 | 修改 docs/output/服务器接入指引.md:A/B/C 章节标注已选 A 并指向迁移方案;「我需要什么」表补上旧机 SSH 也必需与安全组放行 80/443;第五节改为给两台机器装同一把公钥;第七节改为指向迁移方案 | 文件已更新 | 否 |
| 2026-10-15 | REQ-001 | 新建 docs/site/构建站点.js + 站点产物:把 213 份 .md 构建成可直接部署的静态站点(浅色主题、单文件页面、零外部依赖),输出 docs/site/dist/(11 MB / 216 页)。上站时只需把 dist/ 拷到服务器,服务器上不需要装任何东西 | 见下方「站点构建」验证结论 | 否 |
| 2026-10-15 | REQ-001 | 构建过程中发现并修复了 7 个我自己的 bug(① 围栏正则不认缩进 → 反引号跨边界错配,正文冒出 </code> 残渣;② esc() 在结构解析前执行 → 引用块全部失效(265 处);③ 列表栈逻辑错误 → ul 开 0 闭 3;④ 页面 H1 与正文一级标题重复;⑤ 检索页用 fetch 取数据 → file:// 下被 CORS 拦死;⑥ 页头导航指向不存在的 代码解析/index.html → 216 条失效链接;⑦ 链接写成了根绝对路径 /knowledge/... —— file:// 下会被解析到盘根,部署到 /ems/ 子路径后同样会 404,已全部改为相对路径) | 每修一项都跑一次针对性检测;最终:216 页、0 反引号错配、0 语法泄漏、0 标签不平衡、0 多 H1、0 根绝对链接、3260 条内部链接 0 失效 | 否 |
| 2026-10-15 | REQ-001 | 修正知识库真实偏差:docs/knowledge/代码解析/README.md 的任务周期表(原先抄自 app_cfg.h 注释)与源码循环尾实参有 5 处不一致,已按源码改正并加说明 | 逐条定位到函数体核实:task_inverter 100→80(inverter.c:1188)、task_inverter_can 50→30(:1285)、task_system_logic_control 300→280(logic.c:2902 起)、task_net_app 30→25(ems.c:7286)、task_ethernet_monitor 1000→500(ethernet.c:1554);另证实 task_meter 300 ms 与 task_hmi_parse 的取值需按条件编译判断(字符屏 10 ms / 其他 100 ms,本基线走 #else ⇒ 100 ms)。站点重建后 5 处新值各出现 1 次、错的 1000 ms 归零 | 否 |
| 2026-10-15 | REQ-001 | H 组交付 —— docs/output/skill-ems.html(由子代理完成):架构拆解 + 4 个功能案例(削峰填谷 / 电池加热 / 并机控制 / 故障码聚合),6 张手绘内联 SVG,单文件 163 KB | 浏览器实测:performance.getEntriesByType('resource') 为空 ⇒ 零子资源、断网可用;bodyBg=rgb(255,255,255) ⇒ 浅色;1280/1024px 下无横向滚动;10 个锚点全命中;33/33 条函数名与行号断言对源码校验通过;子代理自查中还主动改掉了 5 处自己写错的行号。未写入台账(按分工由主 Agent 统一记录,即本条) | 否 |
K6 验证结论(2026-10-15)
原 7 条示例命令:全部仍可用,耗时 170~282 ms。
口语问法命中(K6 目标场景,实测 top1):
| 问法 | top1 结果 | 是否合理 |
|---|---|---|
| 并机地址 | REG_PARALLEL_QUERY_MODBUS_E(并机 Modbus 寄存器地址总表) | ✅ |
| 削峰填谷在哪 | logic_control_by_time(logic/logic.c) | ✅ |
| SOC校准 | sys_get_soc_calibration_flag(logic/logic.c:1225) | ✅ |
| CAN并机 | parallel_can_comm_handle(midware/inverter/parallel.c:1016) | ✅ |
| DRM需求响应 | drm_mode_judge(midware/interface/drm/drm.c:59) | ✅ |
| 抄表P1 | wireless_read_P1_data | ✅ |
| 油机启停 | generator_logic(logic/generator.c) | ✅ |
| 固件升级流程 | set_updt_file_mask(net/upd_download) | ✅ |
| 丢表不上报故障 | grid_meter_read_data | ✅ |
| 故障码怎么聚合 | package_display_error_code | ✅ |
| AFCI电弧保护 | alphaess_afci_comm_function | ✅ |
| 今天天气怎么样(域外) | 显式「未找到有效匹配」 + 原因 + 仅列几条参考 | ✅ |
已知不足(留给 K9 抽检量化):排序不是最优。例如「CAN并机」的 top1 会落在 BMS 的 send_battery_set_code_c_cmd(该行问法确实同时含「CAN」与「并机」,覆盖率同为 100%)而非并机模块,两者都说得通但用户期待的应是后者。真实准确率需 K9 用固定题库量化后再调。
K7 关键发现(2026-10-15)
1. 故障码体系全貌:336 个故障码,分 11 组;码值直接标明来源设备(EMS E0001~E0094、逆变器 E100000+/W110000+、充电桩 E200000+、BMS E60000+/W70000+/P75000+)。
2. EMS 30 个故障位里有 7 个是死位(全工程零引用,永远不会报):
E0001(bit0) E0008(bit7) E0009(bit8) E0012(bit11) E0013(bit12) E0015(bit14) E0016(bit15)。
核实方式:全工程 grep ems_set_fault_bit 的 39 处调用(索引全部为字面量,无变量下标)+ 逐位域名 grep。
backup_overload有 5 处命中,但那是锦浪逆变器u16_backup_fault.bit.u8_backup_overload的同名异字段,不是 EMS 的 bit8。
3. 枚举定义了 375 个码,但只有 336 个被对照表引用 —— 60 个码定义了却永不产生。
4. 现场拿完整故障位图的通路:Modbus 保持寄存器 0x0701(高 16 位)/ 0x0702(低 16 位)。
来源 modbus.c:3060/3064 + modbus.h:651-659,按 C 枚举递增推算(0x06FB 起第 6/7 项;
固件在 0x0711 后跳空 24 个寄存器到 0x0729,属预留)。
5. DEBUG_SUMART = 0 ⇒ 量产固件里没有任何 USMART 串口调试命令(shell_usmart.h:13,user/main.c:321 整段不编译)。
任何"输入 xxx 命令导出日志"的排查文档在现场量产机上做不到。
6. 故障日志记录含 s32_fault_value —— 故障发生那一刻的数值快照,排查时比故障码本身更有用。
Flash 数据区 0xF66000~0xFC8FFF(396 KB),3 个 4K 地址备份区轮流写 + CRC 校验
(掉电最多损坏当前一条,不会丢整片)。
7. 3 个故障位是"永久锁存"——代码里根本没有清除路径,只有断电/复位才消:
E0014(bit13) E0031(bit17) E0033(bit19)。已独立复核证实(见上方日志行)。
现场看到「重启一次就没了」会误判成已修复。
8. 通讯类故障会连带触发"禁止馈网":logic.c:390-395 把
E0004/E0005/E0006/E0007/E0010/E0011 聚合成 l_u8_com_fault,英国 G100(G98/G99)配置下
只要有任一位为 1,就切成 STATE3_FOBID_FEEDIN(logic.c:506-511,原因码 OVER_STATE3_COM_FAULT)。
现场反馈"机器不卖电"时先查这 6 个码。已独立复核证实。
9. 多种"丢通讯"故障在特定工况下被设计成故意不报(离网/UPS、电网频率 < 45 Hz、断点续传/升级中、 BMS 60 s 静默期)。不报 ≠ 没坏。
10. 待核实的重大不确定项:本明文基线 inverter.h:172 的 INVERTER_TYPE == INVERTER_NULL(0),
会让 E0017 的条件恒真、E0092 的前提函数恒返回 FALSE。
platform-ems-3-6/ 是加密二进制无法核对,实际发货固件几乎肯定不是这个值。
分册里两条都按「字面条件 + 现场实际含义」并列写明,未替哪个结论下判断。
需要一次能确认机型宏的核实。
11. 屏幕上的故障码是 5 位数字,且行首 NO 表示"已恢复"
(hmi/ui/ui_history_error_log.c:139-165): E00007 NO. 1 = 故障正在发生;
NO E00007 NO. 1 = 已恢复。排查时只看没有 NO 的行,NO. 后面的数字是设备号。
站点构建(2026-10-15)
目的:让"把本地的都放到服务器上"变成一条拷贝命令。原始资产是 213 份 .md,服务器上直接放浏览器打不开,所以必须构建。
产物:docs/site/dist/ — 216 页 / 11 MB / 浅色主题 / 每页零外部依赖。
| 目录 | 内容 |
|---|---|
index.html | 首页:分区卡片 + 全部文档按目录列出 |
search.html | 检索页:文档 + 9187 条符号(函数/类型宏/变量/功能定位/故障码) |
knowledge/** | 知识库(代码解析 191 份 + 故障速查 + 基准版本) |
output/** | 交付物(含 skill-ems.html 原样带走) |
*.html | 根 docs 的记录文件(需求台账/变更日志/决策记录) |
data/ | 5 个 TSV + 检索数据.js(899 KB)+ 文档索引.json |
构建命令:cd docs/site && node 构建站点.js
为什么检索数据用 <script src> 而不是 fetch:浏览器把 file:// 的 fetch 按 CORS 拦截(origin 为 null),
实测检索页会永远卡在"加载索引中"。改用 <script src="data/检索数据.js"> 注入全局变量后,
双击打开也能用,不依赖服务器。
验证结果(真浏览器 + 自动检测,均为实测):
| 检查项 | 结果 |
|---|---|
反引号错配(行内 <code> 含换行) | 0 |
| Markdown 语法泄漏(表格/粗体/围栏/标题,剥掉代码块后) | 0 / 0 / 0 / 0 |
| 列表标签不平衡的页面 | 0(修前 ul 开 0 闭 3) |
| 多 H1 的页面 | 0 |
| 内部链接 | 检查 3260 条,0 失败(修前 216 条失败) |
| 引用块 | 265 处正常(修前因 esc() 顺序错误全部失效) |
| 检索实测 | E0007→[故障码] EMS_FAULT_BMS_LOST;bat_heat→61 条带行号;并机→parallel.h/parallel_can.c/parallel_sci.c |
已知限制:文档全文检索只覆盖「标题 + 全部章节标题 + 正文开头 700 字」。要全文精确检索请用
docs/knowledge/代码解析/索引/工具/查找.js -d(命令行,覆盖全库正文)。
已确认待办(尚未开工)
- K6 收尾:K9 抽检量化排序准确率,按结果调权重
- 故障速查库(K7.2~K7.7 其余分册;K7.1/K7.8 已完成)
- EMS 专家 skill
ems-expert(S1~S10,含评测闭环) - ~~
docs/output/skill-ems.html~~ ✅ 已交付(163 KB,浏览器实测通过) - ~~静态站点构建~~ ✅ 已完成(
docs/site/dist,216 页) - 站点样式/内容评审(用户看过再定是否调整)
- W0-pre(阻塞):① 阿里云安全组放行新机 80/443 ② 新机 SSH 用户名 + 装公钥 ③ 旧机也要装公钥
- W0b:两台全量备份 + 回滚演练(通过前不得改任何线上文件)
- W2:盘点旧机(只读) →
服务器现状盘点.md - W0c:迁移部署到新机(含把
dist/部署到/ems/;DNS 未切,对外无感) - W7/W7b/W7c:重签证书 → 切换(唯一中断窗口)→ 观察期 → 旧机退役
- 网站
/ems/子路径完善(W4~W10,待 W0c) - 飞书 aily 改指向新机(F1/F2,待 W7b;F3~F7 视需要)