瀏覽代碼

2.9.2 消缺: 重算链增 ⑧d 版本记录一致性门(升级期文档漂移无拦截点)

zhouyang.xie 2 周之前
父節點
當前提交
a919e7887e
共有 4 個文件被更改,包括 40 次插入 和 5 次删除
  1. 4 3
      docs/版本记录.md
  2. 5 1
      docs/系统设计说明.md
  3. 11 0
      scripts/rebuild_all.py
  4. 20 1
      src/version.py

文件差異過大導致無法顯示
+ 4 - 3
docs/版本记录.md


+ 5 - 1
docs/系统设计说明.md

@@ -906,9 +906,13 @@ R7 每个域必须声明 consumers 或写明"无人读";R8 `configs/farms/` 
 ⑤ 补齐随包件 products_restore_missing.py 无生成端的那批(源 = 交付包 zip;缺源返回 6 跳过)
 ⑤ 补齐随包件 products_restore_missing.py 无生成端的那批(源 = 交付包 zip;缺源返回 6 跳过)
 ⑥ 重启组件服务                         只重启组件、保留网关(chain_ingest 要吃重新加载的产物)
 ⑥ 重启组件服务                         只重启组件、保留网关(chain_ingest 要吃重新加载的产物)
 ⑦ 本体六步 kb_ingest → populate → chain_ingest → trend_ingest → 检索索引 → 实机参数表
 ⑦ 本体六步 kb_ingest → populate → chain_ingest → trend_ingest → 检索索引 → 实机参数表
-⑧ 审计 ontology.audit(期望 0 问题) + ⑧b 重装门户(把新产物灌进结论段) + ⑧c 页面归口审计
+⑧ 审计 ontology.audit(期望 0 问题) + ⑧b 重装门户(把新产物灌进结论段) + ⑧c 页面归口审计 + ⑧d 版本记录一致性
 ```
 ```
 
 
+**为什么末尾要有 ⑧d(2026-09-22 实逮)**:那次远端升级的差异盘点只覆盖 `src/`+`scripts/`+`configs/`,**文档不在盘点面上** ⇒ 代码到 2.9.1、`docs/版本记录.md` 与本文档留在旧版;而链上原只到 ⑧c,
+于是 24/24 步全 OK、控制台写"重算完成",版本/文档漂移**没有任何自动拦截点**(只有人工 `guanlan.py check` 能逮)。
+⑧d 跑 `version_log.py --check`,口径与 ⑧c 一致(`tolerate=(6,)`:缺的是"文档同步"这一路,不是重算本身 ⇒ 报出来但不打断整条链)。
+
 **依赖为什么不能换**:⑦ 的 `populate` 要吃 ②③④④b⑤ 的产物;⑤ 必须在 ⑥ 之前(本体层要读补齐后的 L1 件);
 **依赖为什么不能换**:⑦ 的 `populate` 要吃 ②③④④b⑤ 的产物;⑤ 必须在 ⑥ 之前(本体层要读补齐后的 L1 件);
 ⑧b 必须在产物全部就位之后(门户的结论段是产物的渲染结果)。
 ⑧b 必须在产物全部就位之后(门户的结论段是产物的渲染结果)。
 
 

+ 11 - 0
scripts/rebuild_all.py

@@ -221,6 +221,17 @@ def build_plan(a) -> list:
                               '—— 与 5 同属"缺的是随包件这一路", 例如 ④b 在 report 步崩掉时 '
                               '—— 与 5 同属"缺的是随包件这一路", 例如 ④b 在 report 步崩掉时 '
                               'vib_raw_manifest.json 没写成, 审计就按"溯源缺失"报 6 并把整条链判失败; '
                               'vib_raw_manifest.json 没写成, 审计就按"溯源缺失"报 6 并把整条链判失败; '
                               '处置见 docs §7 与「数据重算」页的缺件提示; `guanlan.py check` 里仍有给人看的告警位'))
                               '处置见 docs §7 与「数据重算」页的缺件提示; `guanlan.py check` 里仍有给人看的告警位'))
+    # ⑧d 版本记录一致性 (2026-09-22 实逮, 远端 2.9.1 升级+重算后验收才暴露):
+    #     那次升级的差异盘点只覆盖 src/ + scripts/ + configs/ —— **文档不在盘点面上**, 于是代码升到 2.9.1、
+    #     docs/版本记录.md 与 docs/系统设计说明.md 留在旧版; 而重算链此前只到 ⑧c, 没有版本门 ⇒
+    #     24/24 步全 OK、控制台写"重算完成", 版本/文档漂移**没有任何自动拦截点**(只有人工 `guanlan.py check` 能逮)。
+    #     与 ⑧c 同口径: tolerate=6 —— 缺的是"文档同步"这一路, 不是重算本身 ⇒ 报出来但不打断整条链。
+    plan.append(step_cmd('⑧d 版本记录一致性 (docs 与 src/version.py)',
+                         [PY, 'scripts/version_log.py', '--check'], tolerate=(6,),
+                         note='rc=6 = docs/版本记录.md 的自动区块与 src/version.py 的 HISTORY 不一致 '
+                              '(升级只同步了代码、没同步文档即属此类) ⇒ 跑 python scripts/version_log.py --write '
+                              '重生成自动区块, 再把 docs/ 一并同步到目标机(升级差异盘点要含 docs/); '
+                              '`guanlan.py check` 里仍有给人看的 FAIL 位'))
     if a.with_verify:
     if a.with_verify:
         # ★2026-09-20 改 (远端实逮, 2.8.0 在服务器上一轮 24/24 步全 OK 却整轮 rc=1):
         # ★2026-09-20 改 (远端实逮, 2.8.0 在服务器上一轮 24/24 步全 OK 却整轮 rc=1):
         #   原先 tolerate=(4,) —— rc=5("找不到随包基线 ⇒ 没验收") 被当成失败, 于是**交付包装出来的机器
         #   原先 tolerate=(4,) —— rc=5("找不到随包基线 ⇒ 没验收") 被当成失败, 于是**交付包装出来的机器

+ 20 - 1
src/version.py

@@ -19,7 +19,7 @@ import json
 import pathlib
 import pathlib
 
 
 NAME = '观澜·如东样板 v2'
 NAME = '观澜·如东样板 v2'
-VERSION = '2.9.1'          # ★ 改版本只改这里
+VERSION = '2.9.2'          # ★ 改版本只改这里
 EDITION = 'offline-single-package'
 EDITION = 'offline-single-package'
 PACKAGE_STEM = 'app_guanlang'           # 交付包文件名前缀(用户令 2026-09-17)
 PACKAGE_STEM = 'app_guanlang'           # 交付包文件名前缀(用户令 2026-09-17)
 
 
@@ -49,6 +49,25 @@ BUMP_RULE = ('改动落在"解决方案/架构/核心功能" → 大 +1(中/
 #   level: major/minor/patch 表示这一版**相对上一版**是哪一级变化;legacy 表示该版用的是
 #   level: major/minor/patch 表示这一版**相对上一版**是哪一级变化;legacy 表示该版用的是
 #   旧编号体系(0.x,未按本规则),仅作历史对账用。
 #   旧编号体系(0.x,未按本规则),仅作历史对账用。
 HISTORY: tuple[dict, ...] = (
 HISTORY: tuple[dict, ...] = (
+    dict(version='2.9.2', date='2026-09-22', level='patch',
+         title='升级后验收补缺:版本/文档漂移有了自动拦截点(重算链增 ⑧d 版本记录门)',
+         note='纯消缺 ⇒ 小版本 +1。检查: 远端 2.9.1 升级 + 重算完成后跑 `guanlan.py check`,'
+              '出现两处 FAIL —— ① `docs/版本记录.md` 与 `src/version.py` 不一致(version_log rc=6);'
+              '② 安装根多出 `_pre290_backup/`(16 件扁平旧副本)让 config_audit rc=8。'
+              '根因: 这次升级的差异盘点只覆盖 `src/`+`scripts/`+`configs/`(`remote_src_inv.py`),'
+              '**文档从不在盘点面上** ⇒ 代码升到 2.9.1、文档留在旧版(版本记录 13,277 vs 21,284 字节、'
+              '系统设计说明缺 §17);而**重算链里没有版本门**(rebuild_all 只到 ⑧c 页面归口审计),'
+              '于是 24/24 步全 OK、控制台写"重算完成",漂移照样静默过关 —— 没有任何自动拦截点。'
+              '解决: ① `scripts/rebuild_all.py` 增「⑧d 版本记录一致性」(`version_log.py --check`,'
+              'tolerate=(6,) —— 与 ⑧c 同口径: 缺的是"文档同步"这一路,报出来但不打断整条链);'
+              '② 远端补齐 4 份文档(版本记录/系统设计说明/输入数据放置指导/detail 页面依赖台账),'
+              '逐件 sha256 与本地一致;③ 远端把 `_pre290_backup` 移出安装根到 '
+              '`D:\\产品\\_pre290_backup_20260921`(备份保留,不删除)。'
+              '验证: 远端 `version_log.py --check` rc=0、`config_audit.py` rc=0;'
+              '本地 `guanlan.py check` 全绿 + 反向审计/页面归口/chain_gap 全 rc=0。'
+              '遗留(如实记录,未处理): 远端**没有装 Ollama**(无二进制、PATH 无、11434 拒绝连接)'
+              '⇒ 本机模型探针在远端必然 FAIL,问答/升档类功能在远端不可用;'
+              '要不要在远端装 Ollama 与拉哪几档模型,等用户定。'),
     dict(version='2.9.1', date='2026-09-22', level='patch',
     dict(version='2.9.1', date='2026-09-22', level='patch',
          title='人工测试 7 项消缺(描述口径 + 依据空白 + 问题页空 + 门户链接 404 + 闭环文案 + Ollama 档位)',
          title='人工测试 7 项消缺(描述口径 + 依据空白 + 问题页空 + 门户链接 404 + 闭环文案 + Ollama 档位)',
          note='纯消缺(无功能增减)⇒ 小版本 +1。逐项「检查→根因→解决→验证」: '
          note='纯消缺(无功能增减)⇒ 小版本 +1。逐项「检查→根因→解决→验证」: '

部分文件因文件數量過多而無法顯示