重算缺口与补件清单_v0.1.md 12 KB

观澜 · 如东 v0.2.0 重算缺口与补件清单 (v0.1, 2026-09-11)

为什么有这份清单

用户令: "不要随包产物, 基于 data\raw 从零重算"。做完之后浮出来一个事实:

页面能不能显示, 取决于两件事 —— 源件在不在 data\raw 与 生成端在不在包里。 把产物全挪走之后, 第一个问题现场能解决(把文件放进去), 第二个问题只能由研发/厂商补脚本。

本清单是那次从零重算实测照出来的缺口台账: 缺什么、卡住哪个页面、证据在哪、找谁要、拿到之后 按什么标准判定"补齐了"。口径: 只列数据/脚本层面的缺口, 不含环境项(如本机 Ollama 无模型 → /local-ai/ 503)。

0. 缺口总表

2026-09-12 更新(用户令: 既要"从零重算"又要"页面不缺"):A4/B1/B2/B3 这几类"没有生成端"的产物 已按下述两条路处理, 页面不再缺: ① 能从 raw 重算的 → 补出构建器并逐值对齐随包件: temp_monthly 已确认口径 (发电态 p≥500kW 行的中位数, 19494/19494 逐值一致, 见 scripts/windscada_monthly_build.py); ② 没有生成端 / 规则未复现的 → 从随包件补齐 (scripts/products_restore_missing.py), 只补缺件、 不动 raw 重算件, 并落逐件来源台账 outputs/<场>/_provenance.json(raw-derived 19 件 / shipped 568 件)。 因此下表里 A4/B1/B2/B3 的"缺口"性质变了: 从"页面打不开"变成"这部分数不是自己算的"。 要变成 100% raw 派生, 仍需研发补那些生成端(或把口径告知我们, 照 ① 的办法反推+逐值验证)。

# 缺什么 类型 卡住的页面/功能 找谁 补齐判据
A1 油样 2026-07 批的源件(1 份合并报告) 源件 数据层「油液化验」506→404; 油液时效胶囊、油液判级 现场 / 化验机构 放进 data\raw\如东\油样报告\ 重跑摄入后, rebuild_from_raw.py --verify 无人工项
A2 振动线 CMS 测点数据(handoff), 随包 90 件 56 MB 源件 /cms/ 503 已由随包件补齐(页面已恢复); 但要"自己算"仍需测点件 振动线 / 研发 /cms/ 由重算件驱动而非随包件
A3 SOP 底稿 + 范式实验件(sop 210 件 16.5 MB, paradigm_r1 29 件) 源件(内含脚本) 门户契约段、/api/facts 已由随包件补齐 研发 /api/facts 由重算件驱动
A4 temp_monthly.parquet 生成端 工作台全标签页无数据 已解决: 已反推出口径并 100% 复现 — ✅ 已闭合(见上)
B1 6 件组级/月度产物(见 §2) 生成端 趋势件、热链、扇区、结构面 研发 提供口径后照 ① 反推+验证
B2 6 件偏航/温度/润滑产物(见 §2) 生成端 偏航面、润滑面 研发 同上。源件 scada_1min 已落位 12.8 GB
B3 pitch\pitch_daily.parquet 生成端 变桨面; 本体 populate/audit(已因随包件补齐而可跑) 研发 液压四列口径未知(试过日界位移/越限穿越都不对)
B4 CMS/TCM 兼容链(windcms 53 件 · tcm_compatible_replay 59 件) 生成端 + 源件 /cms/、振动融合页 已由随包件补齐 振动线 + 研发 由重算件驱动

1. 类型 A: 源件缺失(现场/厂商能给)

A1 · 油样 2026-07 批(102 行)

  • 缺的: 一份合并报告 BG-2026-07-YP013 中广核新能源如东海上风电场.pdf(一份覆盖多台, 台号/部件只写在 PDF 表格里)。
  • 证据: 现场包 F:\temp\如东风场数据 里油样只有一批 —— 数据收集/更新/(8)风机振动数据、油液分析记录(2025.1-至今)/2025年油样/(404 件); 全包按 YP013 搜 0 命中, 按批次目录枚举也只有 2025年油样 这一批, 没有 2026-07。从零重算的结果是 oil_samples_index 404 行, 比随包 506 行少 102 行 —— 这也是 --verify 唯一的"需人工看"项。
  • 为什么不能"猜"出来: 台号/部件在 PDF 表格里, 不是文件名可解析的形态; 摄入脚本对此的态度是 合并语义——认不出的老行原样保留、绝不删(所以场景②那次是 506→404 的落差, 而不是静默覆盖)。
  • 怎么补: 把那份合并报告(或该批的单台报告)放进 data\raw\如东\油样报告\, 重跑油样摄入。
  • 判定: rebuild_from_raw.py --verify 的结论行不再出现"需人工看"。

A2 · 振动线 CMS 测点数据(handoff)

  • 缺的: 随包里 outputs\rudong\m5_cms_tcm\(90 件 56 MB: handoff + TCM 兼容件 + 窗/谱/模型产物) 以及 outputs\rudong\windcms\(53 件 29 MB, 41 个 HTML 报告页)。
  • 证据: src\windscada\subsys\fusion.py 的 load_handoff() 直接抛 FileNotFoundError: 振动 handoff 接口缺失 … 融合面不可静默降级; src\windcms\data.py 的 load_scalars() 读的是 CMS 测点索引(不是报告); 现场包里只有 (8)…\振动分析报告\ 12 份月度用印版 PDF —— 那是成品牌报告, 不是可再加工的测量数据。
  • 影响面: /cms/ 503; 融合面判级; 台账里"振动级"这一轴; trend_ingest(在升/闭环证据)。
  • 怎么补: 向振动线要 CMS 测点导出/handoff 件(按 m5_cms_tcm 的目录约定), 而不是 PDF 报告。
  • 判定: /cms/ 回 200 且能列出报告页。

A3 · SOP 底稿 + 范式实验件(事实契约的输入)

  • 缺的: outputs\rudong\sop\findings.json(在 210 件里)与 outputs\rudong\paradigm_r1\experiments\{E5_coverage_table, E3_candidate_closure, E8_rudong_rebuild}\底稿*.json。
  • 证据: scripts\guanlan_facts_contract.py 的 SRC 字典只读这四个文件(第 14-15 行); 没有它们就没有契约, 也就没有门户结论段与 /api/facts。
  • 影响面: 门户 #findings 的"定论与准定论"表、/detail/api/facts(503)、124 条 claim (定论 20 · 准定论·预警 11 · 候选 62 · 参考 15 · INSUFFICIENT 9 · 撤回 7)、 以及依赖契约的问答引文。
  • 怎么补: sop\ 里那 22 个 .py 是历史装配脚本(含 mac 死路径, 随包留档) —— 要的是 它们跑出来的底稿产物, 或可复跑的版本。找研发要。
  • 判定: /api/facts 回 200 且 n_claims 与出厂一致(124, 契约 sha 45f7b4e3b6c6913a…)。

A4 · L1 判级底座(temp_monthly.parquet 等)

  • 缺的: 随包 outputs\rudong\windscada\ 里 118 件中的非 16 件(我们只重算得出 16 件)。
  • 证据: 工作台取数面直接回结构化"无产物": {"err":"no_products","note":"temp_monthly.parquet 不存在 → outputs/rudong/windscada/temp_monthly.parquet; 先跑 scripts/rebuild_from_raw.py (SCADA 侧加 --scada) 生成产物, 或用 scripts/products_state.py --on 还原"}。 注意那句提示在这一件上是误导的: temp_monthly 不在 rebuild_from_raw.py 的 10 个构建器里。
  • 怎么补: 研发补 temp_monthly 的构建器(见 B1), 或明确它属于哪个上游产物。

2. 类型 B: 生成端缺失(研发补脚本)

判据是同一句话: 全库只有读取方、0 处写入方。下表是 2026-09-11 用脚本在 src\ + scripts\ 全量搜出来的原始计数(判"写入迹象"看同一行有没有 to_parquet / write_parquet / to_csv / to_excel / open(...,'w') 之类的落盘调用)。计数已排除 scripts\place_raw_data.py 里那份"故意不落"说明清单 —— 那是我写文档时列的产物名, 不是消费方。

产物 真实引用处(读取侧) 写入迹象
pc_monthly_bins src\windscada\perf\trend.py:18 0
duty_monthly scripts\windscada_serve.py:540 0
thermal_monthly src\windscada\subsys\thermal_chain.py:97 0
sector_power src\windscada\perf\trend.py:91 0
structure.parquet src\windscada\subsys\structure.py:48 0
watch_channels_monthly src\ontology\seed_rudong29.py:27,72 等 6 处 0
yaw_dynamic_monthly scripts\windscada_serve.py:835,837 等 4 处 0
yaw_err_clean src\windscada\subsys\yaw.py:68 0
mblub_monthly src\ontology\acceptance_fsm.py:20,67 等 7 处 0
temp_monthly scripts\windscada_serve.py:517,531 0
pitch_daily src\windscada\subsys\pitch.py:19 0
yaw_press_monthly · yaw1min_liveness · genbearing_monthly 全库 0 处引用(连读方都没有) 0

最后一行值得单独说: 这三件在随包产物目录里存在, 但当前代码从不引用它们。要么是给外部/下游用的, 要么是早期版本的遗留件 —— 补之前建议先问清"谁要它", 免得补一堆没人读的表。

B2 的特别说明: yaw1min_liveness / yaw_dynamic_monthly 这类要的 1min 源件 (data\raw\如东\scada_1min\, 38 件 12.8 GB)本轮已按 place_raw_data.py --scope mech 落位 —— 所以它们属于"源件已备、只差脚本", 是最容易补上的一批。

B3 的证据: python -m src.ontology.populate 实测直接报 FileNotFoundError: outputs\rudong\pitch\pitch_daily.parquet —— 本体铺开这一步就断在这。

B4 的证据: src\windcms\ 里有完整的 analyze 链(pipeline/plugins/serve), 但它的输入是 CMS 测点索引(见 A2), 包里没有; tcm_compatible_replay\ 的 59 件同理。


3. 对照: 已经从 data\raw 重算出来的(2026-09-11 实测)

环节 结果
三门台账 报警 39211 行 · 工单 5876 行 · 油样 404 行
SCADA 侧 10 个构建器 powercurve_dev/bins · loss_monthly · curve_lenses/liveness · control_profile/schedule · stop_events · temp_bins · yaw_daily · hydraulic_accum · thermal_chain · system_aux
本体层 objects.json 2340 对象(含 Doc 303) · retrieval_index.json · turbine_params.parquet 1706 条
L0 产物仓 16 件 1.78 MB(随包 118 件)
等价验收 alarms 39211/39211 逐值完全一致; workorders 8 行差异可归类(旧链时间解析缺陷)

4. 补齐之后怎么验(照这个顺序)

手工操作的逐步手册见 docs\重算操作手册_v0.1.md —— 含每步的期望输出、会踩的坑 (尤其:products_state.py --on 会删掉重算产物)、以及"算不出来"对照表。下面是压缩版命令。

:: ① 源件落位 (现场包 → 约定目录; 同尺寸自动跳过, 可反复跑)
.venv\Scripts\python.exe scripts\place_raw_data.py --src <现场包目录> --scope full
:: ② 重算 (三类台账 + SCADA 侧; SCADA 那步要逐台读 14.7 GB, 分钟级)
.venv\Scripts\python.exe scripts\rebuild_from_raw.py
.venv\Scripts\python.exe scripts\rebuild_from_raw.py --scada
:: ③ 等价验收 (需临时把随包基线放回 outputs\rudong\windscada\_pre_rebuild_20260911\)
.venv\Scripts\python.exe scripts\rebuild_from_raw.py --verify
:: ④ 本体层 (技术资料在盘上才有意义)
.venv\Scripts\python.exe -m src.ontology.kb_ingest
:: ⑤ 重启服务 (产物变了必须重启, CMS 是启动时加载数据)
.venv\Scripts\python.exe guanlan.py stop ; .venv\Scripts\python.exe guanlan.py serve
:: ⑥ 看页面: /detail/ 维护页「数据层 + 机理层」那一屏 + 回归尺子
.venv\Scripts\python.exe scripts\page_fingerprint.py --diff <基线.json>

5. 边界与纪律

  • 不猜、不伪造: 源件/生成端不在, 页面就明确显示"无产物/无源"并给出恢复命令, 绝不用别的数据顶替 (工作台那句 err=no_products 就是这条纪律的产物)。
  • 累计快照必须归并: 工单/报警目录里的"全年/年至今"件是季度件的累计快照, 摄入时自动跳过; 跨源内容重复自动归并 —— 新加源件不会让台账虚高(本轮 大部件维修记录 就是被归并的)。
  • 本清单的维护: 新增一项的条件是"能用一条命令重复验证它的缺失"; 每项都要写清证据路径与补齐判据。
  • 相关文档: docs\数据目录结构与落位约定_v0.2.md(§4 重算边界表) · _修复记录_20260911\README.md(从零重算一节)