# 主张审计清单 v0.1 > 依据:**`wind_analytics_算法模型分类报告`(上游仓 `wind-analytics` main `357350d4`,2026-09-30 静态核验快照)** > 的 **§4「历史要求与当前实现的关键差异」(9 条)** 与 **§5「TCM 原判断与修正边界」(6 条)**。 > 目的:把该报告的「**原判断 → 反例 → 修正 → 适用域**」写法,落到**观澜自己的代码与文档**上,防名实误读。 > > **核验方式(本清单的证据级别)**:对观澜仓**单次遍历 23,828 个文本文件**逐条正则核验 + 命中处**逐行看上下文**(是注释/文案,还是真实逻辑)。 > **口径纪律**:报告中以上游 `357350d4` 的 file:line 为准,**不得直接引为观澜结论**;下表「观澜实测」列是本清单**唯一**可引用的结论来源。 > > 标签:`[记]` 报告/文档主张 · `[码]` 本轮核到观澜代码 · `[待核]` 需进一步定位 · `[不适用]` 观澜无此实现 · `[已优于]` 观澜已优于上游 --- ## 一、§4 历史要求与当前实现的关键差异(9 条) | # | 报告条目 | 报告原判断 / 反例 / 修正 `[记]` | 观澜实测 `[码]` | 结论与处置 | |---|---|---|---|---| | 1 | **C04 固有线图谱与共模分解** | 「缺陷率>50% ⇒ fleet 全盲」已于 9/5 撤销;当前六层文档仍残留旧句 | 观澜全仓 `全盲` **仅 1 处**:`app_algorithmModel/app_algorithmModel_guanlan/windcms/report_std.py:182`,上下文是**具体机组的说明**——"全盲台 02/18/37 各部件皆不可判 → 整机自然不可判" | **不残留** ✓:同词**不同义**(观澜说的是"某几台不可判",不是那条已撤销的失明定理)。处置:无需改代码;如需彻底消歧,可在六层链文档加一句"本处'全盲台'指具体机组,非'缺陷率>50%⇒fleet 全盲'定理" | | 2 | **A03 CMS 采集可用性与 IEPE 绝对链** | 9/25 已在 `l0_view.py:131–156` 加告警滞留特判、`report_std` 已接 `avail_detail`;但**旧缺陷表未同步** | 观澜 `report_std.py` 有完整**三轴**口径(状态等级 优秀/良好/报警/危险/不可判 × 证据状态 确诊/准定论·预警/候选/INSUFFICIENT × 行动 P0–P3)与"不可判"释义;`discriminators.py` 有 `Active/CurrentCount/TargetCount`(TCM 侧)。观澜**无** `l0_view.py` 同名模块(已重构) | **部分适用** `[待核]`:观澜无报告所指"旧缺陷表",故不存在"未同步";处置:登记"可用性口径以 `report_std` 三轴为准",并把"能否区分告警滞留 Active 与在场数据"列入补核 | | 3 | **A04 冻结参照的跨域测量链疑似** | 9/17 判定已改「疑似」;`l0_absolute/cms_availability` 有绝对电气链;9/18 已有 D1b 绝对检查 | 该主题在观澜**多处存在**:`app_algorithmModel/.../taxonomy.py`、`subsys/fusion.py`、`windcms/report_std.py`、`app_ontology/.../ontology/codes.py`、`sop/discriminators.py`、`scripts/rudong_fusion_handoff.py` | `[待核]`:观澜侧"疑似"这一**措辞与判据**是否已落文档(不是代码有无);处置:列入 backlog,逐文件确认"疑似/不可判"是否与绝对链并存 | | 4 | **C02 自适应基线与滞回** | `oem_hysteresis.py` 已有可导入原厂规则;上游 `apply_hysteresis` 需**逐窗 level 序列**,而全窗裁决不产生该序列 ⇒ 函数存在 ≠ 默认生产链使用 | 观澜 `app_ontology/.../sop/fusion_diag.py` 有 **3 处**滞回相关;未见 `oem_hysteresis`/`apply_hysteresis` 同名实现 | `[待核]`:需定位观澜的"显示锁存/原厂迟滞"落在哪一层,并确认**是否被默认链调用**(这正是报告告诫的"函数存在 ≠ 已使用") | | 5 | **C05 同域能量锚与部件实物锚封顶** | 持续性已由**固定 4/6** 改 `ceil(2N/3)`;`rudong_model_run.py:427–432` 九窗要求 **6 窗**;不能再拿四窗当九窗中的同等证据 | 观澜 `四窗` 命中 3 处,**全部是注释里的观测事实**(`discriminators.py:4796`"四窗纹丝不动"、`5082`"跨四窗 1.61~1.74×fleet"、`vib_confidence.py:85` 同);观澜 Python 全仓**未出现** `ceil(2N/3)`,亦未见 `九窗` | **局部适用** `[待核]`:观澜没有那条"四窗=九窗同等证据"的误用(注释语义清白 ✓),但也**未采用比例门** ⇒ 处置:**定位观澜的持续性门实现位置**并明确其窗数口径(列入 backlog 第 1 项) | | 6 | **C01 ISO 速度 RMS 与宽带标量** | 上游 `report_std.iso_state` 实际只按 **7.1 mm/s** 二分报警与优秀,融合脚本另用 **7.1/11 mm/s** ⇒ 显示与融合口径须分别看 | 观澜 `windcms/report_std.py:67`:`ISO_C, ISO_D = 7.1, 11.0`,并带注释记录历史漏判实逮("17# 8.9 超C / 27# 128 超D 漏判实逮") | **已优于上游** `[已优于]` ✓:观澜 `report_std` 已同时携带 C/D 双阈 ⇒ 本例的"口径分列"问题在观澜**不存在**。处置:无需改;可在文档中把该双阈写成显式口径条目 | | 7 | **B21 四层异常检测与预警器** | 旧四层 `trend_level.py:20` 对空输入/无时间戳/少于 5 日输出 A,存在"旧入口语义风险" | 观澜除 `src/windscada/en_text.py` 一处**翻译字符串**外,**无**四层实现与调用 | **不适用** `[不适用]` ✓:观澜未移植该模块,风险不传递 | | 8 | **B02 限电、停机与离线分离** | 注册表状态陈旧(`configs/analysis_modules.yaml` 写 `builtin_avail_verify` 待实现,实际 `discriminators.py:2223` 已实现) | **确证同源缺陷**:观澜 `app_ontology/.../sop/discriminators.py:1094` 原文写"…**builtin_avail_verify/zero_gen_redflag 待实现**",而两者**均已实现** —— `builtin_avail_verify` 在 **2203** 行、`zero_gen_redflag` 在 **2234** 行 | **真缺陷 → 本版已修** ✓:改为"两函数实现均已在本模块落地(§4.3 与同批 n≥2 提级),此处仅说明不入 A_op 抽取面、留 per-farm 传入比对" | | 9 | **D04 gym 算法探索与淘汰图** | 7 月"灰箱永久关闭"是特定实验/治理结论,不是所有灰箱方法被理论否定;应保留失败主张与重新进入条件 | 观澜**无** `gym` 目录 ✗ | **不适用** `[不适用]` ✓:观澜无该实验套件;该报告条目仅作方法论参照 | --- ## 二、§5 TCM 原判断与修正边界(6 条)—— 逐条对照观澜 > 报告这 6 条**写法**(原判断 → 反例 → 修正 → **适用域**)最具复用价值;观澜的 TCM/CMS 复算链正在同一主题上 > (实测:`windcms/report_std.py` 含 `rms_200`/`Reference`、`discriminators.py:4426` 有"最终阈值是手填的全场统一固定值"的实逮记录、 > `docs/振动六层链_接口规格与缺口_v0.1.md` 含 TCM/Hysteresis 口径)。 | # | 报告条目 | 报告要点 `[记]` | 观澜处置(建议) | |---|---|---|---| | 1 | **Reference 基线** | 原判断"`mask.Reference`=样本均值"为 **FALSE**;修正为「均值+3×总体 SD 及 15 样本 Peak 最大值」的**对照推断**(9/17 登记准定论);适用域:样本级重建未成,**不能拿推断基线替实际数值阈定级** | `[待核]`:核对观澜 TCM 文档/代码里对 `Reference` 的表述,补一句"**推断值**,不得替代实际数值阈" | | 2 | **CurrentCount 样本身份** | 原判断"同计数=同批样本"为假;修正:同计数**可对应不同接受样本组**;适用域:不可把计数当原始样本覆盖 | `[待核]`:加入口径说明(覆盖/样本量陈述时不得等同) | | 3 | **原厂迟滞规则** | 原判断"`mask.Hysteresis`恒 3 即上限"被反例(`rms_200` 上限 100);修正:**逐测量**读取 Red/YellowHysteresis、±1 钳位、到上限起报到 0 解除;适用域:紧邻完整记录,**缺口不能当状态机反例** | `[待核]`:与观澜 `fusion_diag.py` 的 3 处滞回实现对照(见 §4 第 4 条 C02) | | 4 | **相对强度与绝对锚** | "×fleet 很高即严重损伤"被反例(同域能量极弱/共有固有线分母效应);修正:同 shard 能量占比 + 绝对锚 + 空间证据 + 持续性**并列**;适用域:单场标定阈,未知供应商频率阴性**不能销案** | `[待核]`:观澜融合侧的"相对+绝对"是否并列呈现(与 C05/C04 同源) | | 5 | **证据独立性** | "谱线+宽带+峭度=三条独立证据"被反例(同测点同信号);修正:**信号族合一**,独立性须追传感链/事件/时间窗/共同原因/采集触发 | **建议直接采纳** ✓:观澜报告里"多证据"的表述需按此审查(避免把同源信号当独立证据) | | 6 | **覆盖与缺测传播** | "缺一窗都盲/无判据触发就正常"被反例(部分覆盖被埋进健康);修正:覆盖 `ceil(2N/3)`、盲区门传导、疑似健康证据撤回;适用域:谱窗与仅标量/原厂状态窗分列,**不静默丢窗** | `[待核]`:与观澜"不可判/盲区"口径直接相关;结合 §4 第 5 条一起定位持续性/覆盖门 | --- ## 三、A 档执行结果(本次) | 项 | 结果 | |---|---| | **确证真缺陷** | **1 处**:`app_ontology/app_ontology_guanlan/sop/discriminators.py:1094` 陈旧文案(两函数均已实现却写"待实现")—— **本版已修** ✓ | | **同词不同义(假阳性,已澄清)** | 2 处:C04 `全盲`(指具体全盲台)· A03 `滞留`(指**热**滞留) | | **观澜已优于上游** | 1 处:C01(`report_std.py` 已同时带 7.1/11 双阈) | | **不适用(观澜无该实现)** | 2 处:B21 四层异常 · D04 gym | | **列入 backlog(需进一步定位)** | 7 处:C05 持续性门位置与窗数口径(**优先**)· C02 滞回是否被默认链调用 · A03 可用性链路特判 · A04「疑似」措辞与判据 · §5 六条中除"证据独立性"外的 5 条 | ## 四、下一步(建议 B/C 档,未在本版执行) - **B 档**:新增 `docs/模型谱系与编号_v0.1.md`(观澜自口径的 48 类骨架,A01–A05 / B01–B26 / C01–C10 / D01–D03 / D04 / E01–E03 + L0–L5 分层),并在交付文档引入证据标签体例。 - **C 档**:把报告 §6「优先补核六项」做成观澜 backlog 并逐条推进(部分需现场数据/标准原件 ⇒ 标 `[INS]`)。 - **禁止**:不并入上游分支;不照抄其 file:line 与状态;不用该报告替代观澜验收。 --- ## 五、backlog 第 1 项 · 已定位(持续性门 / 覆盖门与窗数口径) > 对应 §一 第 5 条(报告 C05)与 §二 第 6 条(TCM 覆盖与缺测传播)。本节为**实测定位结果**,实现位置与口径均为观澜自身证据。 | 门 | 观澜实现(file:line) | 现行口径 | 与报告 `ceil(2N/3)` 对照 | |---|---|---|---| | **持续性门(A 轴 3 分)** | `app_ontology/app_ontology_guanlan/sop/vib_confidence.py:146`:`p = 3.0 * min(persist_windows / max(min(4, n_windows), 1), 1.0)` | 分母**固定封顶 4**;函数默认 `n_windows=6` | **仅当 N=6 时** `ceil(2·6/3)=4` **恰好等价** ✓;**N=9 时上游要求 6,观澜仍取 4** ✗ ⇒ **潜在隐患(扩窗即静默放宽)** | | **窗覆盖门(D 轴 10 分)** | 同文件 `:173`:`w = 10.0 * min(n_windows_covered / 4.0, 1.0)` | 同样 **4 封顶** | 同上;且 `score_sample()` 签名**没有** `n_windows` 参数 ⇒ 无法随窗数伸缩 | | **盲区门** | 同文件 `:168–174`:`if is_blind: return 0.0` | 盲区台直接 0 分 | 与报告"盲区门传导"一致 ✓ | | **逐日持续(冲击轴)** | `app_algorithmModel/.../windcms/report_std.py:187`(`acute = 持续恶化`)、`:213`(`n_high_days_all >= 3`) | **3 天**门 + 类型枚举(持续恶化/稳定高位/阶跃抬高/反复发作) | 另一轴(逐日),与窗数无关 | | **比例门(同步/份额)** | `app_ontology/.../sop/farm_pipeline.py:57` `sync_fraction >= 0.5`;`app_algorithmModel/.../service/fleet_views.py:458` `_share >= 0.5` | **0.5** 门 | 与"L0 覆盖也是比例门"的精神一致 ✓(观澜已有比例门,只是不在持续性轴上) | | **实际窗数** | `app_ETL/.../builders/baseline_38_build.py:41`「本机实况: **只有 w0316 一窗**」;`component_history_build.py:34`「`FARMS['rudong']['windows']` 只解析出**一个**窗」;融合产物 `fus.盲区` 自述「**单窗数据时"逐窗趋势"信息量有限**(按日聚合后可见)」 | 当前 **1 窗** | ⇒ "四窗当九窗同等证据"的情形在观澜**尚未发生** ✗;但门是**硬编码 4** ⇒ 扩到 9 窗时会**静默放宽** ✗ | | **是否接入生产链** | `score_internal` / `score_sample` 在观澜全仓(排除 .venv/vendor/node_modules)**无任何调用点** | **未接线** | 正是报告反复告诫的「**函数存在 ≠ 生产链使用**」✓ —— 本清单按 `[码]`(存在)记录,**不**按 `[场]`(已用)记录 | ### 处置建议 - **P0(低风险,建议做)**:把两处硬编码 `4` 改为**随窗数的比例门** —— `max(1, ceil(2*n_windows/3))`。 理由:**N=6 时行为完全不变**(`ceil(2·6/3)=4`)⇒ **零回归**;N=9 时自动变为 6,与报告口径一致。 注意:`score_sample()` 需**新增** `n_windows` 形参(当前签名没有)。 - **P1**:在文档中把**窗数口径**写成显式条目(当前 1 窗 / 目标 9 窗 / 门的形式),并把「单窗时不得用持续性、趋势类判据」提升为**拒判条件**(观澜 `fus.盲区` 已有同义自述,仅需升格为明文口径)。 - **P2**:确认这两个评分函数**是否应接入**生产链:现状是未接线 ⇒ 要么接线,要么在代码注释与清单中明确标注"待接线",避免被误读为"已在用"。 --- ## 六、P1 执行结果(2026-10-06) | 落点 | 内容 | |---|---| | `sop/vib_confidence.py` 模块文档 | 修正 P0 后**已过时**的两处口径行(A 轴「持续≥4/6窗」、D 轴「覆盖窗数≥4」⇒ 均改为 `max(4, ceil(2N/3))`);并把「**窗数口径与单窗拒判**」写入模块头 | | `scripts/rudong_fusion_handoff.py` | 振动 meta 的 `纪律` 增列窗数口径条款 ⇒ 经 `service/fleet_views.py:581` 传导到页面 `fus.纪律` | | `docs/振动六层链_接口规格与缺口_v0.1.md` | 新增「**窗数口径与拒判条件**」节(含门的形式、单窗拒判、不得静默丢窗、当前实况 1 窗、四处出处 file:line) | | 本清单 | 本节 | **条款要点**:① 门 = `max(4, ceil(2N/3))`(N≤6 恒 4 · N=9 ⇒ 6 · 分母只增不减 ⇒ 不会更宽松); ② **N<3 时不得**用持续性/逐窗趋势类判据出个体结论,只能标「窗内周段趋势(单窗补充口径,仅参考不作判据)」(与既有降级口径同源); ③ **不得静默丢窗**(谱窗与仅标量/原厂状态窗分列,缺窗显式进盲区)。 --- ## 七、P2 执行结果(2026-10-06) **决定:标注「待接线」(unwired),不擅自接线。** 理由:接线会改变报告/页面呈现,属产品决策;而报告告诫的核心风险是"**函数存在 ≠ 生产链使用**",用明文标注即可消除误读。 | 落点 | 内容 | |---|---| | `sop/vib_confidence.py` | 新增常量 **`WIRING = 'unwired'`** 与 `WIRING_NOTE`,并写明:接线实测证据(外部调用 0 处)、接线入口(`api.py:45` 注册 `sop_vib_confidence`)、**接入前禁令**(报告/交付件不得声称已用置信度)、以及接线后须改为 `'wired'` 并记录接入点与验收证据 | | `docs/振动六层链_接口规格与缺口_v0.1.md` | 新增「**置信度模块接线状态**」小节(同步同一事实) | | 本清单 | 本节 | **实测依据(2026-10-06)**:`score_internal` / `score_independent` / `score_falsification` / `confidence` / `penalize` / `band` 外部调用 **0 处**;`score_physical`、`detectability` 仅本文件内部使用;模块已在 ontology API 注册(`api.py:45`)⇒ 具备接线条件但尚未接线。 **若日后要真正接线(产品决策,本版未做)**,需明确三件事:① 消费端(报告等级栏 / 页面字段 / 交付件);② 输入来源(五轴的 A–E 各自取数口径,尤其 B 轴的共时源与 C 轴的实物锚);③ 验收证据(接入点 file:line + 至少一个真实机组的分级结果)。 --- ## 八、backlog 其余 6 项 · 收口结论(2026-10-06) > 方法同前:观澜全仓实测(排除 .venv/vendor/node_modules)+命中处逐行看上下文。 > 标签:`[已实现]` 观澜已有、`[未接线]` 代码在但无调用、`[不适用]` 观澜无此实现、`[提示]` 仅作适用域提示。 ### 8.1 C02 自适应基线与滞回 —— 结论 `[未接线]` + **当前数据下不可实现** | 事实 | 证据 | |---|---| | 函数存在 | `app_ontology/app_ontology_guanlan/sop/fusion_diag.py:88` `apply_hysteresis(window_levels, *, h=3)`;docstring「厂商 Hysteresis=3 的通用化:连续 h 窗同向才改级,否则保持」 | | **无调用方** | `apply_hysteresis` 外部调用 **0 处**;`oem_hysteresis` 符号在观澜**不存在** ✗(此前 3 处命中均为 `Hysteresis` 关键词,非该符号) | | **上游输入缺失** | 其入参 `window_levels`(逐窗 level 序列)**无生产端** ✗(`level_sequence` 命中 0 处)——与上游报告所述「要逐窗序列而全窗裁决不产生该序列」**完全一致** | | **当前数据下不可实现** | 观澜实况 **1 窗**(`baseline_38_build.py:41`/`component_history_build.py:34`/`fus.盲区` 自述)⇒ 连续 h 窗同向判据**无窗可跨** | **处置**:按 P2 同法标注「**待接线 + 待扩窗(≥2 窗,理想 9 窗)**」;不得在报告中称已使用原厂迟滞规则。 ### 8.2 A03 CMS 采集可用性与 IEPE 绝对链 —— 结论 `[不适用]`(上游特判)+ 观澜现行口径已明文 | 事实 | 证据 | |---|---| | 上游的「告警滞留特判」(`l0_view.py:131–156`) | 观澜**无** `l0_view.py` 同名模块,亦无「告警滞留」实现 ✗(唯一命中是本清单自身) | | 观澜现行不可判口径(等价纪律) | `app_ETL/.../builders/scada_slim_build.py:19`「缺列**如实记**(`columns_missing`),**不造 0、不静默丢列** —— 各面按列名取,**缺了就当"不可判"**」 | | 具体不可判门 | `app_ETL/.../builders/pitch_face_build.py:33`「消费者的不可判门是 `窗内 nop < 144`(≈不足 1 天等效)」 | | 三轴口径 | `app_algorithmModel/.../windcms/report_std.py`(状态等级 × 证据状态 × 行动等级 + 不可判释义) | **处置**:登记观澜现行口径(缺列即不可判 + 三轴),**不照搬**上游特判;IEPE 绝对链的现场核验仍列 backlog。 ### 8.3 A04 冻结参照的跨域测量链「疑似」 —— 结论 `[已实现]` - `app_ontology/.../sop/sensor_validation.py:429`「疑似同一测量写多列 (仅舍入差) → **parity/level/swap 全不可证**」;`:534`「疑似派生/复制相 (rel pair-diff <1e-4):parity 不可证 → **INSUFFICIENT**」 - ⇒ 观澜**已用「疑似」措辞并直接落到 INSUFFICIENT** ✓,语义与上游 9/17 的修正一致。 - **处置**:已具备;仅需在文档中写明该措辞口径(可选)。 ### 8.4 §5-4 相对强度与绝对锚 —— 结论 `[已实现]` ✓ - `app_algorithmModel/.../perf/curves.py:100`「显著门 = 物理绝对锚(z 只说"相对同类偏离",**定级必须过绝对量**;MAD≈0 的镜头会造 z=200 的伪离群)」 - `app_algorithmModel/.../service/fleet_views.py:687`「灰域=全场四分位残差带;**出带且过锚才算离群**」 - `app_algorithmModel/.../subsys/temp_nbm.py:6`「⑦**相对判据配绝对量**(dev 以 K 计,报警需绝对 dev≥4K 非只 z)」;`:225`「单靠本表最高**准定论·预警**,升定论须外部绝对锚」 - `app_algorithmModel/.../perf/powercurve.py:3`「机舱风=self_ref ⇒ 绝对达成率 **INSUFFICIENT 不产出**」 ⇒ 与报告「相对很强 ≠ 严重损伤;须同 shard 能量占比 / 绝对锚 / 空间证据 / 持续性**并列**」**方向一致** ✓。 ### 8.5 §5-5 证据独立性 —— 结论 `[已实现]` ✓ - `app_ontology/.../sop/discriminators.py:937`「疑似同源复制 → **勿当两路独立证据**」 - 且 `app_ontology/.../sop/vib_confidence.py` 的 `PENALTY_KINDS['same_source_multi_stat'] = (-20, '同一路信号的多种统计量当多源')` ⇒ 与报告「**信号族合一**,独立性须追传感链/事件/时间窗/共同原因/采集触发」**一致** ✓。 ### 8.6 §5-6 覆盖与缺测传播 —— 结论 `[已实现]` + 本版 P1 已明文化 ✓ - `scada_slim_build.py:19`「缺列**如实记**、不造 0、**不静默丢列**」✓ - 本版 **P1** 已把「**不得静默丢窗**(谱窗与仅标量/原厂状态窗分列,缺窗显式进盲区)」写成明文条款,并随 `fus.纪律`/`fus.盲区` 上线 ✓ ### 8.7 §5-1/2/3(Reference 基线公式 · CurrentCount 样本身份 · 原厂迟滞规则)—— 结论 `[提示]` - 观澜**没有**上游这三条的公式与规则 ✗(既无「均值+3×总体 SD 及 15 样本 Peak 最大值」的对照推断实现,也无 `CurrentCount` 样本身份治理、更无原厂逐测量迟滞读取) - 观澜仅有的 TCM 相关实逮记录:`app_ontology/.../sop/discriminators.py:4426-4427`「(`Method=StdDev` / `StdDevs=3` / `TargetCount=15`),基线也**真的采满了**(Active 条目中 `CurrentCount半数同向共模 = 反转,EXP-C4-01 ⇒ kill 熔断)· `sop/hydraulic_validation.py`(共模/差模分解)· `sop/discriminators.py`(共模相关 67 处)。 ### 10.2 为什么现在**做不出来**:与 C02、§5-3 同一根阻塞 **共模 = 同期跨台共同变化** ⇒ 必须有**时间序列 / ≥2 个窗**才可判。而观澜实况是 **1 窗**(`w0316`)。 ⇒ 共模类反证、逐窗滞回(C02)、原厂逐测量迟滞(§5-3)**三者同源阻塞**:都等**扩窗**。 ### 10.3 扩窗收益表(若补齐更多周期 CMS 原始件) | 受益项 | 现状 | 扩窗后(≥2 窗,理想 9 窗) | |---|---|---| | **D 轴窗覆盖**(`score_sample`) | 2.5 分(1 窗 / 门 `max(4,ceil(2N/3))`=4 ⇒ 1/4) | ≥4 窗 ⇒ **满分 10**;9 窗 ⇒ 门 6 ⇒ 6/9 覆盖按窗数计 | | **A 轴持续性分量**(`score_internal`) | 0(无逐窗序列) | 有逐窗序列 ⇒ 可达 3 分(门随 N 伸缩) | | **E 轴 common_mode** | 0(无产物) | 可做"同期跨台同变"检验 ⇒ E 可达 **20** | | **C02 逐窗滞回** | 不可实现(`window_levels` 无生产端) | `apply_hysteresis(window_levels, h=3)` 可接线 ⇒ 显示锁存可落地 | | **§5-3 原厂逐测量迟滞** | 不可实现 | 可构造"缺口不被当状态机反例"的用例与实现 | | **`fus.盲区` 的自述** | 「单窗数据时"逐窗趋势"信息量有限」 | 逐窗趋势可用 ⇒ 该盲区条目可撤 | | **置信度 `usable`** | 11/107 | 随 D/A/E 补齐而显著扩大(B 仍属现场数据现实) | **注**:上表只列**已实测到的机制**与**已知的取数口径**,未承诺具体分值;扩窗后须逐项复跑并重新出件。 --- ## 十一、置信度「消费口径」定案(2026-10-06 · 用户选 2:暂不扩窗) **决定:维持「诊断展示」,不参与任何判级、不进报告等级栏。** | 现状 | 位置 | |---|---| | 逐台五轴(A–E)+ 缺件清单 + caveat | API:`/api/fleet` → `fus.置信度`(`per_row`) | | 页面展示(含分档计数 · 各可取轴已取到行数 · 结构性缺件 · 前 8 台明细 · 接线状态 · 不可判状态告诫) | 振动融合分析页「**置信度(诊断)**」面板(`data-added="confidence"`) | | 判级影响 | **无**(接线只新增字段,未改动任何 verdict/等级/结论) | **为什么不升级为"消费"(即不让它驱动报告/派工)** —— 三个前提尚未满足: 1. **E 轴 common_mode 缺失**(无候选链产物;且需 ≥2 窗时间序列 ⇒ 属"扩窗"前置); 2. **A 轴仅粗口径**(有 ≥1 条 PASS 线按 5 闸计;`model_run_l6` 只含 PASS 行 ⇒ 逐台逐闸明细无产物承载); 3. **`usable` 覆盖率低**(本地 11/107;线上 69 行视图 6)—— 且 **B 轴同窗独立源属现场数据现实**(温度判「—」/油样 stale),非算法可补。 **升级条件(三条同时满足,且需用户明确要求)**: ① 扩窗到位(≥2 窗,理想 9 窗)⇒ 补 common_mode 与 A 轴逐窗序列; ② `usable` 覆盖显著扩大(并明确 B 轴缺件时的等级截断规则,如"B 缺 ⇒ 最高只能到中"); ③ 用户明确下令"接入报告/派工"(届时须先列出判级变化范围,逐一核对)。 **同时保留的禁令**(延续 P2):接线验收前,报告与交付件**不得声称已使用置信度评分**;现阶段的正确表述是 「置信度已作为**诊断**随 `/api/fleet` 下发,页面可见,但**不作为判级依据**」。 --- ## 十二、窗数口径实测与扩窗结果(2026-10-06 · 用现有 raw 自行造窗) **背景**:无需任何外部数据 —— `windows/w0316/index.parquet`(206.7 万行)含 `file`(相对 `…/measurement/`)与 `trigger_time`,覆盖 **2026-03-16 → 04-21(37 天)** ⇒ 可按时间粒度切窗。 **已建成并跑通**(本地与远端一致): | 粒度 | 窗数 | 门 `max(4, ceil(2N/3))` | 各窗 PASS | |---|---|---|---| | 单窗(原始) | 1 | 4(形同虚设) | 14 | | 周窗 | 5 | 4 | 14/15/10/18/8 | | **半周窗(4 日,现用)** | **10** | **7** | **14/7/9/4/4/2/6/8/6/5** | | 3 日窗(构建中) | ~13 | **9** | —— | **对置信度的影响(实测)**:中位 2.5 → 10.5(接 A/C 轴)→ 25.5(接 E 轴)→ 29.5(5 窗)→ **34.5**(10 窗); `usable` 0 → 11 → 23 → **27/107**(线上 69 行视图 **17**)。common_mode 在 5 窗时 3 条共有线、10 窗时 **5 条**。 **融合面边界(如实)**:融合级 `fus.窗区间` 仍锚在 1 窗 —— 因为它取自「**振动线正本** `handoff_vibration_v2.json`」 (含人工裁决,`rudong_fusion_handoff.py` 拒绝覆盖,本清单**未**使用 `--force`)。 本轮只修了 `scripts/rudong_fusion_run.py` 的**默认窗**(原写死 `w0127` 首窗特例 ⇒ 清过产物的机器必然失败; 现改为"**已发现的最新窗**",并把缺失首窗按既有 `windows_missing` 机制如实处理)⇒ rc=0, 产出 `fleet_scalar_z.parquet`(604 行)与 `fusion_38.csv`(38 台 · 融合级 参考 18/正常 13/候选 7)。 **呈现**:振动融合分析页新增两处 `data-added` 面板(**不参与任何既有对拍判据**、不改判级): 「**置信度(诊断)**」与「**迟滞诊断(原厂 Hysteresis)**」(后者显示 33 条序列 / 5 条被迟滞改变 / 逐测量迟滞分布)。