源代码化清单_v0.1.md 8.6 KB

源代码化清单 v0.1(2026-09-19)

用户令:「所有的计算 均要形成 观澜的源代码,确保 观澜 在别的电脑安装后,系统运行正常。」

本清单是这条令的可核对底稿:把"页面/接口要用的每一件数据,是不是都由包内的源代码算出来的"逐族列清, 列出还没落到源代码的那些族的现状、喂谁、缺什么、怎么补。

判据来源(机器可读,不靠印象):scripts/products_reverse_audit.py::FAMILIES 的族表 —— kind=shipped/human 且 gen=None 的族就是"没有生成端";scripts/products_reverse_audit.py --check 在交付前会把族表与盘上账目对一遍(当前 rc=0:1,778 件全部 raw-derived)。


0. 已经补上源代码的(本令的前几批)

件 生成端(在包内) 喂谁 复检
m5_cms_tcm/handoff_vibration_v2.json(融合面) scripts/rudong_fusion_handoff.py(观澜自算:报告状态等级 + fusion_38.csv + L6 过闸线 → 同结构件;meta.from 标"观澜自算",盘上若有振动线正本则不覆盖) /detail/v2 的「需要关注」+「全场状态」(/api/fleet 的 fus) 链盘 38 行 / 需要关注 3 台(WTG09 齿轮箱、WTG17/WTG27 发电机)/ 矩阵 38 行 ✔
windscada/index.html(总览「全场状态」页) scripts/windscada_overview_build.py(用组件同一个快照烘焙器 src/windscada/ui/snapshot.py::bake) /detail/v2 的「全场状态总览」<iframe src="/static/index.html"> 3.78 MB 真页面(此前是 2 KB 的"产物不在位"说明页)✔
事实契约面:sop/findings.json + paradigm_r1 三份底稿 + guanlan/** scripts/sop_findings_from_ledger.py(重算台账 → claim,按契约构建器要的字段结构写)+ scripts/guanlan_facts_contract.py build(原有生成端,输入换成自算件) 门户「本场结论·契约生成」段、/detail 问答/报告面(/api/facts)、报告摘要 /api/facts 200(cards 6)· 门户结论段 2.6 KB 换成 RD-LEDGER-*(6 条: 4 候选 / 2 参考)· 契约自检 PASS ✔

链上:④b(model_run → fusion → report → fusion_handoff → kb)→ ⑤b 由重算台账生成 claim → ⑤c 构建+渲染契约 → ⑤a 台账维护 → ⑤ 审计 → … → ⑦b 总览页自算烘焙 → ⑧b 重装门户。

claim 六族(全部由重算产物算,逐条带 coverage/缺证据/证伪判据,相对判据封顶「候选」): 报警集中(alarms)· 重复检修(workorders)· 停机损失集中(loss_monthly,kWh→MWh 已换算)· 温度相对离群(temp_bins,样本门 n≥20)· 功率曲线偏离(powercurve_dev,MW→kW 已换算 + 判别分布)· 振动面过闸线(model_run_l6)。


1. 还没落到源代码的族(按"装了新机器会不会看到空白"排序)

# 族 件 喂谁(页面/接口) 现在没源代码的后果 需要的生成端(输入 → 产物) 可行性
1 pitch_shipped pitch/pitch_daily.parquet、pitch_zero_monthly.parquet /api/fleet 的变桨面判级(逐台页/总览的"变桨系统"格) 变桨面显示"缺件 ⇒ 不可判" scada_10min(+scada_1min) 的桨距角/桨叶油压通道 → 日粒度零位/漂移表 中:通道在数据里,需定"零位口径"(停机段中位?满发段中位?)
2 vib_handoff_and_scans 其余件 m5_cms_tcm/component_history.json、baseline_38.json、oem_frequency_scan.parquet 等扫描件 本体 trend_ingest(在升/闭环证据)、vib_confidence、maintenance 数据层页、报告附录 趋势/置信度面少一维;数据层页把这几件列成缺件 component_history:由逐窗 L6+标量按部件聚合历史;baseline_38:由 fleet_scalar_z/标量算三层基线(自/机群/绝对) 中:结构简单,但"口径"要与消费端字段对齐(trend_ingest.py 读法已可参照)
3 tcm_replay tcm_compatible_replay/model/mask_thresholds.tsv 等 CMS 报告/逐台页的厂商黄红阈值线;data.load_masks 页面只画机群中位,阈值线缺失(现文案:"厂商未设阈值") 由 data/raw/如东/windcms 导出件里的 red_alarm/yellow_alarm/red_hys/… 索引列反解出每 (测点,测量,工况) 的中位/黄/红标量 中偏低:索引里确有这些列(54 列之一),口径需反推 + 抽台对拍
4 ontology_releases ontology/release_r1/*、release_r2/* 网关 /release/*(只读发布层)、门户"发布层"入口 /release/ 两件 503(如实报缺) 由 ontology/objects.json + 层清单配置生成 r1/r2 层(kb_ingest/populate 之后跑一步) 易:纯搬运/投影,无判据
5 guanlan_contract + sop_workspace + paradigm_r1 — 门户结论段 / /api/facts / 报告 已解决(见 §0):由重算台账生成 claim — ✅ 完成
6 windcms_pages 剩余件 windcms/ 下厂家报告转录、kb 之外的其他件 CMS 首页/工作台的少数入口 个别入口空 多数已由 windcms.py report/kb 覆盖;剩余是"厂家报告转录"(输入是现场 PDF,属外部正本) 易/不适用
7 vib_figs m5_cms_tcm/figs/* 振动报告里的插图 报告少图 由谱库渲染 PNG(可复用 src/windcms 的 SVG/绘图) 低优先
8 windscada_pages 剩余件 windscada/turbines/*、review/* 静态副本(运行期逐台页由组件动态出,不依赖它) 无实际影响 若要静态副本:复用 windscada_overview_build.py 的烘焙(逐台 slim 版) 易
9 human_deliverables windscada/mblub_alarm_cross.json、review_presented.json、送审结论 本体 populate 的证据来源之一 少一条人工证据(本体仍可用) 不应由源代码生成(是人对人的交证件/回执) 不适用(族表已记 kind=human,不参与呼应校验)

2. 变桨面(下一件,口径已定:停机段中位 + 满发段中位两者分列出)

消费者字段契约(src/windscada/subsys/pitch.py::load/registry,改动需同步):

pitch/pitch_daily.parquet        date, turbine, n, hydlevel_timeon, hydfilt_timeon, hyd_band,
                                 hyd_over_relief, hyd_under_pump, hublub_timeon, pitchpum_timeon,
                                 pistA, pistB, pistC, n_op
pitch/pitch_zero_monthly.parquet month, turbine, zero_dev            ← 消费端读这一列做并入判据
                                 + zero_dev_stop, zero_dev_full      ← 本次要求的两口径**分列**

通道勘察(data/raw/如东/scada_10min 表头实测;prs_wtc_* 的压力列还需挑出"蓄能器压力"那一条):

din_wtc_HydLevel_timeon / din_wtc_HydrFilt_timeon      油位/滤网开关 on 秒 (=当日应测 n×600 − timeon → 报警秒)
din_wtc_LubPistA/B/C_counts|timeon                     三叶柱塞 (pistA/B/C)
dot_wtc_HubLubPu_timeon                                轮毂润滑泵 (hublub_timeon)
dot_wtc_PitchPum_timeon                                变桨泵 (pitchpum_timeon)
prs_wtc_* / int_wtc_ValSuppV_*                         压力族 → 挑蓄能器压力做 hyd_band/越线/跌泵

零位两口径的取数(1min 数据,现已可由 scada_source 从 MDB 读): pitch_angle_blade_1/2/3; · 停机段中位 = 该月"停机"状态下三叶桨距角中位 − 月内全场/该台基准; · 满发段中位 = 满发(高功率档)状态下三叶桨距角中位 − 同一基准。 两个口径都按月×台输出;zero_dev 取停机段(零位=静止参考位),另一口径并列可见(页面依据行两个数都写)。

3. 需要你定的(其余口径)

(第 5 行的事实契约口径已按你的选择落地;第 1 行的变桨零位口径也已定为"两口径分列"。) 目前没有待你裁的口径项了;剩余各族按 §4 顺序推进即可。

4. 执行顺序(修订)

① ontology_releases 生成端(易,点亮 /release 两件)
② component_history / baseline_38 生成端(中)
③ tcm_replay 掩码阈值反解(中偏低)
④ pitch 面生成端(中,口径已定;消费者字段契约见 §2)
⑤ vib_figs / 静态逐台副本(低优先)

每补一族都走同一套纪律:生成端进包 + 进重算链 + 写进族表(gen/input) + 产物自登记 + 复检页面, 并把该族在族表与 docs/系统设计说明.md §13.6 里从"无生成端"改成"已在重算链上(附口径与验证依据)"。