|
|
@@ -114,8 +114,8 @@ mac venv 解释器、`kb_ingest` 的 mac 技术资料路径、`ingest_ops_2025`
|
|
|
|
|
|
|
|
|
|
|
|
-## 场站扫描辨识 + 两个验收场景 (2026-09-11)
|
|
|
-
|
|
|
+## 场站扫描辨识 + 两个验收场景 (2026-09-11)
|
|
|
+
|
|
|
**用户令**: 离线数据统一放 `data\raw\`, **下一级目录约定为「场站名称」**, 观澜系统**扫描辨识**。
|
|
|
|
|
|
- `src/windscada/config.py`: 新增 `scan_stations()` / `station_scan()` / `station_report()`; `_expand()`
|
|
|
@@ -181,6 +181,42 @@ mac venv 解释器、`kb_ingest` 的 mac 技术资料路径、`ingest_ops_2025`
|
|
|
抽验过等价性 (WTG01/WTG02 的 `temp_bins` 与随包件 1296/1296 行逐值相同、med 差 0.0),
|
|
|
但**未整体重跑** —— 要跑建议先备份 `outputs/rudong/windscada/` 再逐项比对覆盖区间。
|
|
|
|
|
|
+## 门户拆包 + 闸门退出码 (2026-09-11 收尾)
|
|
|
+
|
|
|
+**起因**: 有人问 "`release/portal.html` 20 MB 里到底是什么、能不能不进 git"。查下来 99.3% 是内嵌的
|
|
|
+交付文档正文 (28 个 `<template>`: 治理清单分册、单机/整机报告、仿真台面板), 只有 138 KB 是门户自己的壳。
|
|
|
+原先整份文件入库, 每轮重算产物都往 git 塞 20 MB。
|
|
|
+
|
|
|
+**做法 (用户选 ②)**: 拆成"受管外壳 + 不入库内嵌件 + 可验证装配":
|
|
|
+
|
|
|
+| | 入库 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| `release\portal_src\shell.html` | ✅ | 138,544 B, 内嵌件处留 `<!--@TEMPLATE:id-->`, 资料索引处留 `<!--@GOVERNANCE_SOURCES-->` |
|
|
|
+| `release\portal_src\manifest.json` | ✅ | 各件 sha256 + 期望门户 sha256 + 行尾约定 |
|
|
|
+| `release\portal_src\README.md` | ✅ | 重建说明与两个坑 |
|
|
|
+| `release\portal_src\templates\` | ❌ 产物 | 28 件 20.04 MB (交付件正文) |
|
|
|
+| `release\portal_src\governance_sources.json` | ❌ 产物 | 1,512 B 脱敏资料索引 |
|
|
|
+| `release\portal.html` | ❌ 产物 | 装配结果, 服务/网关照读 |
|
|
|
+
|
|
|
+新增 `scripts\portal_build.py`: `--extract` 拆 / 默认装配 / `--verify` 逐字节比对 / `--check` 漂移检查。
|
|
|
+**实测 `--verify` 两行同为 `sha256 9b6aabeb6ca18d15`, 20,226,052 B —— 拆→装回到同一个文件**; `--check` 全件一致。
|
|
|
+
|
|
|
+**两个坑**:
|
|
|
+
|
|
|
+1. **行尾**: 门户通体 LF (0 处 CRLF)。Python 文本模式在 Windows 上写文件会把 `\n` 变 `\r\n` —— 20 MB
|
|
|
+ 整体改写, `/api/version` 的 `portal_sha256` 与页面指纹全变。两个就地注入器
|
|
|
+ (`guanlan_portal_fix_anchors.py` / `guanlan_portal_inject_claims.py`) 补 `newline=""`,
|
|
|
+ `portal_build.py` 全程字节级读写并在装配后自检 CRLF。第一次拆出来的 `portal_src/` 就是这么废的。
|
|
|
+2. **闸门退出码**: 同一类坑让"校验通过"被报成失败 —— 中文控制台代码页 936, `print('… 一致 ✔')`
|
|
|
+ 抛 `UnicodeEncodeError` 使进程以 1 退出。`portal_build --verify` 与 `page_fingerprint --diff`
|
|
|
+ 各踩一次 (后者是回归闸门: 10 个端点全部回到基线, 却报失败)。新增 `src\console.py` 的 `soft()`
|
|
|
+ 把编码错误降级为 `?`, 接入 5 个"以退出码讲话"的脚本; 复跑四个闸门均正确返回 0。
|
|
|
+
|
|
|
+**回归**: 拆包后 10 个端点全部与基线一致 (`portal.home 64b4b81158d09d9c`, `detail.v2 a0abff29c000f570` …)。
|
|
|
+其中一度看到 `/cms/` 掉线 —— 原因是最后那次 `guanlan.py serve` 发生在产物被挪走时, CMS 启动即因
|
|
|
+`src\windcms\data.py` "No objects to concatenate" 退出 (本该如此); 产物还原后重启即恢复
|
|
|
+(414,139 B, 与基线一致)。**教训: 产物开关与重启顺序有关, 挪/还产物后必须重启一遍。**
|
|
|
+
|
|
|
## 仍然存在 (不是代码问题)
|
|
|
|
|
|
- `/local-ai/` 仍是 DOWN: 本机 Ollama 没运行, 且 `%USERPROFILE%\.ollama` 下**没有任何模型**
|