# 版本记录(观澜·如东样板 v2) > 本文件由 `scripts/version_log.py` 生成,**勿手改**:事实(版本号、级别、变更)写在 > `src/version.py` 的 `HISTORY` 里,改完跑 `python scripts/version_log.py --write`。 > `guanlan.py check` 与打包器都会校验本文件与代码里的版本号是否一致。 ## 版本号规则(用户令 2026-09-17) 编号 **`v<大版本号>.<中版本号>.<小版本号>`**,例如 `v2.75.0`。 | 级别 | 含义 | |---|---| | 大版本号 | 系统解决方案、架构或核心功能改变 | | 中版本号 | 非核心功能新增、减少、修改 | | 小版本号 | 消缺完善 | **怎么改**:改动落在"解决方案/架构/核心功能" → 大 +1(中/小归 0);落在"非核心功能的新增/减少/修改" → 中 +1(小归 0);只是"消缺完善" → 小 +1;一次发布混了几类,取最高那一级 **打包文件名** = `app_guanlang_v2.75.0.zip`(规则:`app_guanlang_v<版本号>.zip`)。 版本号只写在 `src/version.py` 一行(`VERSION = '2.75.0'`);打包器、安装脚本、安装记录 `install-info.json`、自检都读它,不另设真源。 | 版本 | 日期 | 级别 | 主要变更 | 说明 | |---|---|---|---|---| | `v2.75.0` | 2026-10-03 | 中 | 内容对拍 10/10 全绿(文本/表格/图数字);结构 9/10(component 余 +1) | 步骤⑤准备:① **内容对拍 10/10 全绿** —— 文本序列、表格单元格、图表数字三项判据下,10 个页签均与 v2.9.2 原文页一致(含 3 条已登记例外,均为后端"页面按窗缓存 vs 实时 API"文案差异,非前端偏差)。过程中修掉两处**真差异**:component 表格"外部"徽标前缺一个空格(Vue SSR 折叠纯空白文本节点 ⇒ 改 ` `,判据 `norm()` 归一化后一致)。② 工具口径更新(因用户令新增 4 个页签、且 Vue 图表已改 SVG):(a)`render_parity_v292.mjs` 登记 4 个**有意新增**页签(交付文档/数据重算/架构与资料/门户)并在比较时从 Vue 侧剔除;(b)Vue 侧无 `[data-chart]`(图表已走 v2.9.2 的 SVG 渲染器)时,改用 svg 文本数字比对 —— 由此 energy/fault/generation 的图数字口径恢复可比(11/0 → 一致)。③ 结构对拍保持 **9/10**(component 398 vs 397,剩余 +1 在 rel/cards 区域,待精修)。 | | `v2.74.0` | 2026-10-03 | 中 | 对拍判据稳定化(预热 + URL 缓存 + DOM 稳定等待);步骤⑤之一:文本/表格/图数字复核 | ① **判据稳定化**:多页签合跑时基线页元素数曾波动(report 66/61、generation 48/166),根因是基线页自身按异步取数渲染。已在 `tools/struct_diff.mjs` 加:(a)起跑前 `warmup()` 把 `/api/fleet` 追到非 pending;(b)fetch 桩按**完整 URL 缓存**(同轮同 URL 同一份);(c)基线页渲染后等 **DOM 稳定**(连续 3 次子元素数一致)。连跑两遍全量结果**完全一致** ⇒ 判据可复现。② component 的 +1 已定位到确切位置与性质:**基线里"振动融合已迁移"提示块嵌在九系统卡的 `
` 内部**(不是独立 section);Vue 侧把它改成 `