test(mgc): cover fn_status_split output 17 (% of capacity); fix stale 17→18 count
The dashboard fan-out grew to 18 outputs (output 17 = '% of capacity' chart) but dashboard-fanout.integration.test.js still asserted 17 and had no PORT entry or coverage for output 17. Add chart_pctcap (17) with populated (State C, flow/capMax×100) and degraded (State A → null-drop) assertions, fix the count assertion, and add the fan-out enumeration table to _output-manifest.md per .claude/rules/output-coverage.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,33 @@ Documented in `CONTRACT.md`; tested indirectly via `group-bep-cascade.integratio
|
||||
|
||||
---
|
||||
|
||||
## Example flow fan-out — `examples/02-Dashboard.json :: fn_status_split` (outputs: 18)
|
||||
|
||||
Delta-caches Port 0 then fans one msg per dashboard widget. Charts return the
|
||||
whole msg as `null` (drop the output) when their source is missing — never
|
||||
`{ payload: null }`. All ports covered by `test/integration/dashboard-fanout.integration.test.js`.
|
||||
|
||||
| # | Target widget | Topic / payload | Populated | Degraded (missing source) |
|
||||
|---|---|---|---|---|
|
||||
| 0 | ui_txt_mode | string | ✔ State C | ✔ State A → mode string |
|
||||
| 1 | ui_txt_flow | `'… m³/h'` | ✔ | ✔ State A → `—` |
|
||||
| 2 | ui_txt_power | `'… kW'` | ✔ | ✔ → `—` |
|
||||
| 3 | ui_txt_capacity | `'min – max m³/h'` | ✔ State B | ✔ → `—` |
|
||||
| 4 | ui_txt_machines | `'nAct / nTot'` | ✔ | ✔ → `—` |
|
||||
| 5 | ui_txt_bep (rel%) | `'… %'` | ✔ | ✔ null/undefined → `—` |
|
||||
| 6 | ui_txt_eta | `'… %'` | ✔ | ✔ → `—` |
|
||||
| 7 | ui_txt_eta_peak | `'… %'` | ✔ | ✔ → `—` |
|
||||
| 8 | ui_txt_bep_abs | `'…'` (η pts, 3dp) | ✔ | ✔ → `—` |
|
||||
| 9 | ui_txt_ncog | `'… %'` (sum/nAct) | ✔ | ✔ nAct=0/missing → `—` |
|
||||
| 10 | ui_chart_flow | `{topic:'Flow', payload:number}` | ✔ | ✔ → null (drop) |
|
||||
| 11 | ui_chart_flow (capacity) | `{topic:'Capacity', …}` | ✔ | ✔ → null |
|
||||
| 12 | ui_chart_power | `{topic:'Power', …}` | ✔ | ✔ → null |
|
||||
| 13 | ui_chart_bep | `{topic:'BEP rel %', ×100}` | ✔ | ✔ → null |
|
||||
| 14 | ui_chart_eta | `{topic:'η (%)', ×100}` | ✔ | ✔ → null |
|
||||
| 15 | ui_tpl_raw | `[{key,value}]` rows | ✔ | ✔ |
|
||||
| 16 | ui_chart_qh (passthrough) | raw `msg.payload` | ✔ | ✔ |
|
||||
| 17 | ui_chart_mgc_pctcap | `{topic:'% of capacity', payload:flow/capMax×100}` | ✔ State C | ✔ State A → null (drop) |
|
||||
|
||||
## Coverage gaps (open items)
|
||||
|
||||
These are known holes flagged during the 2026-05-14 governance review; not yet
|
||||
|
||||
Reference in New Issue
Block a user