| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- # 门户页面与子页的"内容归口"登记表 (2026-09-17, 用户令 1)
- #
- # 回答两个问题:
- # ① 这一页/这一件 **该不该随输入数据(data/raw)变化**?
- # ② 它 **算不算产物**? 算的话归到哪、由谁生成、怎么查它陈旧没陈旧?
- #
- # 五个 kind (每个都有机器可查的规则, 见 scripts/pages_audit.py):
- # static 受管静态: 外壳正文(方法论/架构/案例叙述)。不随输入数据变, 进 git, 不引用产物。
- # live 实时取数: iframe/链接到组件服务或 API。永远与产物一致, 不需要快照, 也不进产物管理。
- # data-citing 静态正文 + **产物引用脚注**(如"判据全量见 outputs/<场>/…/findings.json")。
- # 正文不随数据变; 但被引用的产物路径必须**存在**, 否则引用悬空(挂羊头)。
- # data-derived 数据派生快照: 把产物/输入烘进页面(内嵌 JSON / 指纹 / 生成时间)。
- # ★**属于产物**: 必须登记 source + (source_sha256 或 generated_at), 并做陈旧检测。
- # frozen-delivery 冻结交付件: 带版本号与日期的客户交付件(治理清单/报告/资料包)。
- # 按**交付版本**变, 不随数据自动变; 必须能从文件名或正文读到版本号与日期。
- #
- # 判定依据(evidence)一律写清"凭什么这么判", 可复核: 看的是页面里有没有 iframe/fetch/内嵌数据/产物引用,
- # 以及内容是不是由 data/raw 算出来的。要改分类, 先改证据。
- version: 1
- farm: rudong
- # 产物路径写法统一: 一律以 outputs/<场>/… 记录(相对安装根), 便于陈旧检测直接定位文件
- pages:
- # ── 门户外壳里的静态叙述页 (受管, 不随数据变) ───────────────────────────────
- - id: index
- title: 总览
- kind: static
- changes_with_data: false
- file: release/portal_src/shell.html
- evidence: "外壳 #index 段 2,519 B: 0 iframe / 0 fetch / 0 产物引用; 正文是产品承诺与入口导航"
- - id: architecture
- title: 系统架构
- kind: static
- changes_with_data: false
- file: release/portal_src/shell.html
- evidence: "外壳 #architecture 段 3,037 B: 无数据引用; 描述分层架构"
- - id: method
- title: 方法
- kind: static
- changes_with_data: false
- file: release/portal_src/shell.html
- evidence: "外壳 #method 段 2,959 B: 无数据引用; 描述方法论"
- - id: findings
- title: 经验发现
- kind: static
- changes_with_data: false
- file: release/portal_src/shell.html
- evidence: "★用户问的三页之一。外壳 #findings 段 2,322 B: 0 iframe / 0 fetch / 0 产物引用; 正文是公司级经验叙述(59 项内部检查 → 8 条公开教训, 60+ 个风场), 不是本场站数据的函数 ⇒ 不该随输入数据变, 也不是产物。若将来要放本场站计数, 必须改成 data-derived 并登记 source"
- - id: case_hydraulic
- title: 案例·液压
- kind: static
- changes_with_data: false
- file: release/portal_src/shell.html
- evidence: "外壳 #case_hydraulic 段 6,187 B: 无数据引用; 案例叙述"
- # ── 实时取数页 (永远与产物一致) ──────────────────────────────────────────
- - id: cms
- title: 振动·CMS
- kind: live
- changes_with_data: true
- file: release/portal_src/shell.html
- live_target: http://127.0.0.1:18020/
- evidence: "外壳 #cms 段里 1 个 iframe + 2 个链接指向组件 :18020 (src/windcms/serve.py), 组件按需读产物 ⇒ 页面本身不存快照, 数据变了刷新即变"
- - id: recalc
- title: 数据重算
- kind: live
- changes_with_data: true
- file: release/portal_src/shell.html
- live_target: http://127.0.0.1:28084/ops
- evidence: "外壳 #recalc 段只有 1 个到 /ops 的链接(网关提供, 后端即真实状态)"
- - id: login
- title: 登录
- kind: live
- changes_with_data: true
- file: release/portal_src/shell.html
- live_target: http://127.0.0.1:18033/v2
- evidence: "外壳 #login 段链接到工作台 :18033/v2"
- - id: admin
- title: 系统状态
- kind: live
- changes_with_data: true
- file: release/portal_src/shell.html
- live_target: http://127.0.0.1:28084/healthz
- evidence: "外壳 #admin 段由外壳 JS 拉网关 /healthz 渲染(段内无静态数字)"
- # ── #sim 仿真与回放 ────────────────────────────────────────────────────
- - id: sim
- title: 仿真与回放
- kind: static
- changes_with_data: false
- file: release/portal_src/shell.html
- evidence: "★用户问的三页之一。外壳 #sim 段 50,767 B 是**静态叙述**(机理/图纸说明), 段内 0 iframe / 0 fetch; 6 个链接指向 :18792 仿真台页与 :64292 三维工作台。仿真台的输入是**图纸/机型参数**(configs/machine_packs), 不是 data/raw ⇒ 页面本体不该随输入数据变"
- children:
- - name: 控制律仿真台资料包 (5 页)
- file: release/如东SWT40_控制律仿真台_20260906.zip
- members_in_zip: ["0_四系统合页.html", "1_偏航系统.html", "2_传动链与功率.html", "3_发电机与热管理.html", "4_变桨轮毂液压.html"]
- served_by: release/sim_sys_server.py
- kind: frozen-delivery
- changes_with_data: false
- version: "20260906"
- evidence: "release/sim_sys_server.py 直接从 zip 里读这 5 页 ⇒ 冻结资料包(日期在包名里); 内容为图纸/机理仿真, 不随输入数据变"
- - name: 三维拆装工作台
- file: release/viewer/unit-workbench.html
- kind: static
- changes_with_data: false
- evidence: "release/viewer/** 由图纸/三维模型构建(build-*.py + esbuild), 与 data/raw 无关; rev=hub-review-v1 是评审版本号"
- - name: 控制律仪表台面板 (门户内嵌)
- file: release/portal_src/templates/tpl-swt40_控制律仪表台_外发版.html.html
- kind: data-citing
- changes_with_data: false
- cites: [outputs/rudong/yaw_verify/findings.json]
- known_gap:
- missing: [outputs/rudong/yaw_verify/findings.json]
- why: "引用的产物目录 yaw_verify/ 不在本包(振动线/偏航专项产物未随包); 本包同类台账在 outputs/<场>/sop/findings.json。不改交付件正文(那是客户手里的冻结版本), 但按「引用悬空」如实记账, 见 docs §7。★2026-09-17 裁决: 已核 cleaned/ gearbox_life/ yaw_verify/ structured/ 四棵产物树**确实都不在包内**(Test-Path 全 False) ⇒ **如实记账保留**: 不删交付件正文, 也不删本条(删了就变成没人管的悬空引用); 待该产物线随包后再复检"
- evidence: "面板正文是固定的判据/仪表说明, 只把产物当**脚注引用**('判据与证伪条件全量见 outputs/rudong/yaw_verify/findings.json') ⇒ 正文不随数据变, 但被引用的产物必须在位"
- - name: 四系统判据面板 (门户内嵌, 4 份)
- file: release/portal_src/templates/tpl-swt-subsystem-*.html.html
- kind: data-citing
- changes_with_data: false
- cites: [outputs/rudong/yaw_verify/findings.json]
- known_gap:
- missing: [outputs/rudong/yaw_verify/findings.json]
- why: "同仪表台: 引用 yaw_verify/ 专项产物, 该目录不在本包。★2026-09-17 裁决: 四个被引目录均**确实不在包内** ⇒ 如实记账保留(同上)"
- evidence: "同仪表台: 静态正文 + findings 引用脚注"
- # ── #documents 交付文档 ───────────────────────────────────────────────
- - id: documents
- title: 交付文档
- kind: static
- changes_with_data: false
- file: release/portal_src/shell.html
- evidence: "★用户问的三页之一。外壳 #documents 段 5,690 B 是导航页(0 fetch), 1 个 iframe 指向网关下发的治理清单 HTML(release/如东/**)。段内不含数据快照"
- children:
- - name: 治理清单交付包 (分册 + 全册 + 正式报告)
- file: "release/如东/如东治理清单_交付_20260901/**/*.html"
- kind: frozen-delivery
- changes_with_data: false
- evidence: "文件名自带版本号与日期(如 如东_液压系统治理清单_v1.2_2026-09-01.html / 全册_v4.5_2026-09-06.html) ⇒ 客户交付件, 随交付版本变; 内容虽由分析产出, 但**冻结发布**, 不该随输入数据自动改"
- - name: 全场状态一览 (脱敏)
- file: release/如东/全场状态一览_脱敏_20260825.html
- kind: frozen-delivery
- changes_with_data: false
- version: "20260825"
- source: null
- known_gap:
- why: "**性质是数据派生**(内容是实际运行状态的函数, 脱敏快照), 但页面里没有任何指纹/生成时间, 全仓搜不到生成端 ⇒ 无法做陈旧检测、无重算入口。2026-09-17 裁决: **按冻结交付件管**(kind=frozen-delivery), 与 delivery_pages_all 的统一口径一致; 残留风险如实记账 —— 它会随时间变旧, 重算链不会刷新它; 若要它随数据变, 需另做生成端并补 source_sha256"
- evidence: "★2026-09-17 用户裁决前的问题: 1.5 MB 的场站状态快照(脱敏版), 内容是实际运行状态的函数 ⇒ **属于产物**, 却没有任何指纹/生成时间/来源登记, 全仓搜不到生成端 ⇒ 曾游离在产物管理之外(无溯源、无陈旧检测、无重算入口)。**保留不删**: 它是客户手里的交付件, 删了交付就缺件"
- - name: 如东取数单
- file: release/如东/如东取数单_2026-08-21.html
- kind: frozen-delivery
- changes_with_data: false
- version: "2026-08-21"
- cites:
- - outputs/rudong/cleaned/native_scturbine.parquet
- - outputs/rudong/m5_cms_tcm/tcm_index.parquet
- - outputs/rudong/structured/events/fastlog.parquet
- known_gap:
- missing:
- - outputs/rudong/cleaned/native_scturbine.parquet
- - outputs/rudong/structured/events/fastlog.parquet
- - outputs/rudong/structured/events/fault_scada_xml.parquet
- why: >-
- 取数单里列的 cleaned/、structured/ 两棵产物树不在本包(属缺失的六层链/结构化产物线, 见 docs §7);
- 本包在位的同类是 outputs/<场>/windscada/ 与 m5_cms_tcm/。
- 2026-09-17 裁决: **按冻结交付件管**(kind=frozen-delivery, 与 delivery_pages_all 口径一致) ——
- 包内无生成端, 它是"2026-08-21 那一版要哪些数据"的清单, 冻结在交付日;
- 残留风险: 产物结构再变它也不会自动跟, 需重出交付版
- evidence: >-
- 取数单是「要哪些数据」的清单页, 明列产物路径 ⇒ **性质上随产物结构变**;
- 但只有日期没有指纹, 也没有生成端随包 ⇒ 无法自动刷新。**保留不删**:
- 另有 3 处交付侧引用它(`release/如东/如东取数单_2026-08-21/README.md`、
- `如东现场一页单*.md`), 删了就成悬空引用
- # ── 页面侧产物 (页面读的就是它们; 用户令 2026-09-17: 是产物就要纳入产物管理) ──────────
- - id: page_product_cms
- title: CMS 评估报告页/件 (门户「振动·CMS」页读的就是它们)
- kind: data-derived
- changes_with_data: true
- file: outputs/rudong/windcms/index.html
- source: outputs/rudong/m5_cms_tcm/windows/w0316/index.parquet
- generator: scripts/windcms.py report
- generated_at_source: mtime
- evidence: >-
- 门户 #cms 的 iframe 指向组件 :18020, 组件页读的就是 outputs/<场>/windcms 下的这些页面件
- (index.html / 逐台页 / workbench.html / report_*.md) —— 它们是**产物**(由 windcms 报告生成器读
- TCM 窗索引写成), 不是程序。本包缺六层链的 model_run/fusion 产物, 重生成会掉内容 (report.md −97%,
- docs §7), 故**不在重算链里重建**, 交付时按随包件补齐并登记为 shipped。
- 管理动作: 登记(本条) + 溯源(_provenance.json 的 shipped) + 陈旧检测(源=TCM 窗索引的 mtime/sha)。
- - id: page_product_vib_raw_manifest
- title: 振动摄入清单 (数据层「CMS 振动评估报告」页引用)
- kind: data-derived
- changes_with_data: true
- file: outputs/rudong/m5_cms_tcm/vib_raw_manifest.json
- source: outputs/rudong/m5_cms_tcm/windows/w0316/index.parquet
- generator: scripts/vib_raw_build.py
- generated_at_source: mtime
- evidence: >-
- 每次振动摄入重写: 记本窗索引/谱库的件数、时间跨度与**未随包的六层链缺口**(missing_chain)。
- 数据层页面与 docs §7 都引用它 ⇒ 属产物, 且已在台账中自登记。
- - id: embed_replay_chain
- title: 传动链实际运行回放 (门户内嵌单文件版)
- kind: data-derived
- changes_with_data: true
- file: release/portal_src/templates/tpl-如东传动链实际运行诊断_单文件版.html.html
- embedded_json_var: RUDONG_ACTUAL_REPLAY
- source_key: source
- source_sha_key: source_sha256
- json_escaped: true
- source: outputs/rudong/cleaned/turbine_1min.parquet
- known_gap:
- missing:
- - outputs/rudong/cleaned/turbine_1min.parquet
- - outputs/rudong/cleaned/turbine_1min_fingerprint.json
- - outputs/rudong/gearbox_life/load_spectrum_summary.csv
- - outputs/rudong/gearbox_life/tcm_dynamic_severity.csv
- why: "页面烘入的 cleaned/ 与 gearbox_life/ 两棵产物树不在本包(六层链未随包, docs §7) ⇒ 内嵌快照**无法与当前产物比对**(拿不到当前值)。这恰恰说明它属于产物: 有 source+sha256 的机制已经齐了, 缺的是那份产物本身。★2026-09-17 裁决: 两棵目录确实不在包内 ⇒ 记账保留, 不删页面(它是门户内嵌件, 删了门户裂口)"
- evidence: "内嵌 window.RUDONG_ACTUAL_REPLAY 带 source=outputs/rudong/cleaned/turbine_1min.parquet 与 source_sha256 ⇒ 明明白白的产物烘入快照; **已可做陈旧检测**(产物在位时)"
- - id: embed_standard_panel
- title: 标准面板 (门户内嵌)
- kind: data-derived
- changes_with_data: true
- file: release/portal_src/templates/tpl-standard_panel_zh.html.html
- generated_at_key: 生成
- source: outputs/rudong/paradigm_r1/releases/E1_measure_replay_20260905/release.yaml
- cites:
- - outputs/rudong/structured/reference/turbine_master.parquet
- known_gap:
- missing:
- - outputs/rudong/paradigm_r1/releases/E1_measure_replay_20260905/release.yaml
- - outputs/rudong/structured/reference/turbine_master.parquet
- why: "引用的 paradigm 发布件与 structured/ 参考表不在本包(outputs/<场>/paradigm_r1/ 下只有 experiments/, 没有 releases/; structured/ 目录不存在) ⇒ 只能按正文里的生成时间判断新旧。★2026-09-17 裁决: 两处在包内均不存在 ⇒ 记账保留, 不删内嵌件(门户 #method 段在用)"
- evidence: "正文带 '生成 2026-09-05 16:28' 与产物引用 ⇒ 某次生成的数据快照; 缺 source_sha ⇒ 只能按生成时间+引用在位判断"
- - id: embed_coverage_ch0
- title: 覆盖度报告 ch0 (门户内嵌)
- kind: data-derived
- changes_with_data: true
- file: release/portal_src/templates/tpl-coverage_ch0_zh.html.html
- generated_at_key: 生成
- source: null
- known_gap:
- why: "正文写 '源: e1_base.parquet @e3b531b8eddf8197' —— 那份 e1_base.parquet 不在本包 ⇒ 指纹虽有, 但对不上任何在位文件, 溯源链断在包外; 只能按生成时间 2026-09-05 16:28 判新旧"
- evidence: "正文写 '生成 2026-09-05 16:28 · 源: e1_base.parquet @e3b531b8eddf8197 (10-min, 2,973,638 格, 38 台)' ⇒ 数据派生; 但 e1_base.parquet **不在本包** ⇒ 溯源链断在包外"
- - id: embed_u6_sim
- title: U6 变桨液压仿真台 (门户内嵌)
- kind: static
- changes_with_data: false
- file: release/portal_src/templates/tpl-U6_变桨液压仿真台.html.html
- evidence: "图纸派生的物理回路仿真台面板; 无内嵌数据/指纹/产物引用"
- - id: embed_u6_health
- title: U6 液压公共站健康报告 (客户版, 门户内嵌)
- kind: frozen-delivery
- changes_with_data: false
- file: release/portal_src/templates/tpl-U6_液压公共站健康报告_客户版.html.html
- version: "客户版"
- evidence: "984 KB 客户交付报告; 文件名标 '客户版'; 无数据指纹 ⇒ 按交付件冻结(缺版本号/日期, 见 audit 提示)"
- - id: embed_gearbox_report
- title: 整机综合诊断与风险评估 (主轴冲击深挖 V2.1, 门户内嵌)
- kind: frozen-delivery
- changes_with_data: false
- file: release/portal_src/templates/tpl-如东海上风电场_整机综合诊断与风险评估_主轴冲击深挖修订版V2.1.html.html
- version: "V2.1"
- evidence: "3.7 MB 综合诊断报告, 文件名带修订版号 V2.1; 报告类交付件按版本发布"
- - id: embed_reports_4
- title: 分系统评估报告 (主轴承/齿轮箱/发电机/变桨, 门户内嵌 4 份)
- kind: frozen-delivery
- changes_with_data: false
- file: release/portal_src/templates/tpl-report-*.html.html
- evidence: "4 份系统评估报告(0.7–3.4 MB), 无内嵌数据/指纹; 属交付报告(缺版本号/日期登记)"
- - id: embed_governance_12
- title: 治理清单分册 (门户内嵌 12 份)
- kind: frozen-delivery
- changes_with_data: false
- file: release/portal_src/templates/tpl-governance-*.html.html
- evidence: "12 份治理分册(0–11), 与 release/如东 下的分册同源; 冻结交付件"
- - id: embed_sc1_local
- title: SC1 本地占位 (门户内嵌)
- kind: static
- changes_with_data: false
- file: release/portal_src/templates/tpl-sc1-local.html.html
- evidence: "0.4 KB 占位面板"
- # ── 用户令 2026-09-17 第 2 问补齐: 把"所有网页"逐页管起来 (workbench 标签 / 交付页 / 三维页 / 内嵌件) ──
- - id: detail_tabs
- title: 工作台 /detail/v2 的 10 个标签 (SPA)
- kind: live
- changes_with_data: true
- file: scripts/windscada_serve.py
- tabs: [overview, energy, component, vibration, generation, fault, decision, assistant, report, system]
- live_target: http://127.0.0.1:18033/v2
- evidence: >-
- 工作台是单页应用: 外壳一次装载, 每个标签按需 fetch 后端 API, 而 API 现场读产物
- (产物指纹 TTL 2s 自动重载) ⇒ 页面本体不存快照、永远与产物一致, 不需要产物管理。
- 其中 report 标签渲染产物 `outputs/<场>/windcms/report.md`(结论件), 该件属产物并已在台账里。
- ★ 2026-09-17 现场: 清产物后 `tab=vibration` 空白, 不是页面坏了, 是它要的
- `m5_cms_tcm/{handoff_vibration_v2,component_history,baseline_38}.json` 与 CMS 页面件不在位 (§7/§13.5)。
- - id: delivery_pages_all
- title: 交付页 (release/如东 下全部 html)
- kind: frozen-delivery
- changes_with_data: false
- file: release/如东/**/*.html
- evidence: >-
- 客户交付件(治理清单分册/全册/正式报告/取数单/脱敏状态一览), 文件名自带版本号+日期 ⇒ 按交付版本冻结。
- 其中"脱敏状态一览"与"如东取数单"是**数据派生**的(内容随运行状态变) ⇒ 另见 §12 的逐页判定与 known_gap。
- - id: viewer_pages_all
- title: 三维页 (release/viewer 下全部 html)
- kind: static
- changes_with_data: false
- file: release/viewer/*.html
- evidence: 图纸/三维模型派生的资产页(工作台/索引/装配演示), 与 data/raw 无关 ⇒ 不是产物。
|