用户令: "不要随包产物, 基于 data\raw 从零重算"。做完之后浮出来一个事实:
页面能不能显示, 取决于两件事 —— 源件在不在
data\raw与 生成端在不在包里。 把产物全挪走之后, 第一个问题现场能解决(把文件放进去), 第二个问题只能由研发/厂商补脚本。
本清单是那次从零重算实测照出来的缺口台账: 缺什么、卡住哪个页面、证据在哪、找谁要、拿到之后
按什么标准判定"补齐了"。口径: 只列数据/脚本层面的缺口, 不含环境项(如本机 Ollama 无模型 → /local-ai/ 503)。
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 |
生成端 | — | ✅ 已闭合(见上) | |
| 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/、振动融合页 |
振动线 + 研发 | 由重算件驱动 |
BG-2026-07-YP013 中广核新能源如东海上风电场.pdf(一份覆盖多台, 台号/部件只写在 PDF 表格里)。<现场包目录> 里油样只有一批 ——
数据收集/更新/(8)风机振动数据、油液分析记录(2025.1-至今)/2025年油样/(404 件); 全包按 YP013 搜 0 命中,
按批次目录枚举也只有 2025年油样 这一批, 没有 2026-07。从零重算的结果是 oil_samples_index 404 行,
比随包 506 行少 102 行 —— 这也是 --verify 唯一的"需人工看"项。data\raw\如东\油样报告\, 重跑油样摄入。rebuild_from_raw.py --verify 的结论行不再出现"需人工看"。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(在升/闭环证据)。m5_cms_tcm 的目录约定), 而不是 PDF 报告。/cms/ 回 200 且能列出报告页。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…)。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), 或明确它属于哪个上游产物。判据是同一句话: 全库只有读取方、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 件同理。
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 行差异可归类(旧链时间解析缺陷) |
手工操作的逐步手册见
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>
err=no_products 就是这条纪律的产物)。大部件维修记录 就是被归并的)。docs\数据目录结构与落位约定_v0.2.md(§4 重算边界表) · _修复记录_20260911\README.md(从零重算一节)