- Archived 20 pre-refactor pages to wiki/Archive/ with standard banners:
- All 6 architecture/ pages (old _loadConfig/_setupSpecificClass internals,
pre-refactor S88 hierarchy, deployment blueprint)
- All 3 sessions/ logs (Apr-07 + Apr-13 session summaries)
- findings/open-issues-2026-03.md (issues 1-5 all resolved by refactor)
- concepts/generalfunctions-api.md (missing BaseDomain/BaseNodeAdapter)
- concepts/sources-readme.md (empty PDF placeholder, never populated)
- manuals/nodes/rotatingMachine.md + measurement.md (superseded by per-repo wikis)
- Top-level SCHEMA.md, index.md, log.md, metrics.md, overview.md,
knowledge-graph.yaml (all Apr-07 snapshot, pre-refactor)
- Kept wiki/concepts/ domain pages (ASM, PID, pump-affinity, settling, etc.)
- Kept wiki/findings/ proven results (BEP, NCog, curve-non-convexity, stability)
- Kept wiki/manuals/node-red/* (FlowFuse + Node-RED runtime docs, still current)
- Kept wiki/tools/* (utility scripts)
- Updated wiki/Archive.md index with 20 rows
- Fixed wiki/Home.md: Tier 6 was wrongly marked done; corrected to pending;
Tier 9 updated to reflect 2026-05-11 in-progress wave
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
169 lines
5.8 KiB
YAML
169 lines
5.8 KiB
YAML
> **⚠️ ARCHIVED — pre-refactor (Tier 1–4, 2026-05)**
|
||
>
|
||
> This page describes the architecture before the platform refactor.
|
||
> The current page is the per-node wiki on **[gitea.wbd-rd.nl/RnD](https://gitea.wbd-rd.nl/RnD)** or **[Home](../Home)**.
|
||
>
|
||
> Kept for historical reference only. **Do not update.**
|
||
|
||
# Knowledge Graph — structured data with provenance
|
||
# Every claim has: value, source (file/commit), date, status
|
||
|
||
# ── TESTS ──
|
||
tests:
|
||
rotatingMachine:
|
||
basic:
|
||
count: 10
|
||
passing: 10
|
||
file: nodes/rotatingMachine/test/basic/
|
||
date: 2026-04-07
|
||
integration:
|
||
count: 16
|
||
passing: 16
|
||
file: nodes/rotatingMachine/test/integration/
|
||
date: 2026-04-07
|
||
edge:
|
||
count: 17
|
||
passing: 17
|
||
file: nodes/rotatingMachine/test/edge/
|
||
date: 2026-04-07
|
||
machineGroupControl:
|
||
basic:
|
||
count: 1
|
||
passing: 1
|
||
file: nodes/machineGroupControl/test/basic/
|
||
date: 2026-04-07
|
||
integration:
|
||
count: 3
|
||
passing: 3
|
||
file: nodes/machineGroupControl/test/integration/
|
||
date: 2026-04-07
|
||
edge:
|
||
count: 1
|
||
passing: 1
|
||
file: nodes/machineGroupControl/test/edge/
|
||
date: 2026-04-07
|
||
|
||
# ── METRICS ──
|
||
metrics:
|
||
optimization_gap_to_brute_force:
|
||
value: "0.1% max"
|
||
source: distribution-power-table.integration.test.js
|
||
date: 2026-04-07
|
||
conditions: "3 pumps, 1000-step brute force, 0.05% flow tolerance"
|
||
optimization_time_median:
|
||
value: "0.027-0.153ms"
|
||
source: benchmark script
|
||
date: 2026-04-07
|
||
conditions: "3 pumps, 6 combinations, BEP-Gravitation + refinement"
|
||
pump_switching_stability:
|
||
value: "1-2 transitions across 5-95% demand"
|
||
source: stability sweep
|
||
date: 2026-04-07
|
||
conditions: "2% demand steps, both ascending and descending"
|
||
pump_curves:
|
||
H05K-S03R:
|
||
pressure_levels: 33
|
||
pressure_range: "700-3900 mbar"
|
||
flow_range: "28-227 m3/h (at 2000 mbar)"
|
||
data_points_per_level: 5
|
||
anomalies_fixed: 3
|
||
date: 2026-04-07
|
||
C5-D03R-SHN1:
|
||
pressure_levels: 26
|
||
pressure_range: "400-2900 mbar"
|
||
flow_range: "6-53 m3/h"
|
||
data_points_per_level: 5
|
||
non_convex: true
|
||
date: 2026-04-07
|
||
|
||
# ── DISPROVEN CLAIMS ──
|
||
disproven:
|
||
ncog_proportional_weight:
|
||
claimed: "Distributing flow proportional to NCog weights is optimal"
|
||
claimed_date: 2026-04-07
|
||
disproven_date: 2026-04-07
|
||
evidence_for: "Simple implementation in calcBestCombination"
|
||
evidence_against: "Starves small pumps (NCog=0 gets zero flow), overloads large pumps at high demand. BEP-target + scale is correct approach."
|
||
root_cause: "NCog is a position indicator (0-1 on flow range), not a distribution weight"
|
||
efficiency_rounding:
|
||
claimed: "Math.round(flow/power * 100) / 100 preserves BEP signal"
|
||
claimed_date: pre-2026-04-07
|
||
disproven_date: 2026-04-07
|
||
evidence_for: "Removes floating point noise"
|
||
evidence_against: "In canonical units (m3/s and W), Q/P ratio is ~1e-6. Rounding to 2 decimals produces 0 for all points. NCog, cog, BEP all became 0."
|
||
root_cause: "Canonical units make the ratio very small — rounding destroys the signal"
|
||
equal_marginal_cost_optimal:
|
||
claimed: "Equal dP/dQ across pumps guarantees global power minimum"
|
||
claimed_date: 2026-04-07
|
||
disproven_date: 2026-04-07
|
||
evidence_for: "KKT conditions for convex functions"
|
||
evidence_against: "C5 pump curve is non-convex (dP/dQ dips from 1.3M to 453K then rises). Sparse data (5 points) causes spline artifacts."
|
||
root_cause: "Convexity assumption fails with interpolated curves from sparse data"
|
||
|
||
# ── PERFORMANCE ──
|
||
performance:
|
||
mgc_optimization:
|
||
median_ms: 0.09
|
||
p99_ms: 0.5
|
||
tick_budget_pct: 0.015
|
||
source: benchmark script
|
||
date: 2026-04-07
|
||
predict_y_call:
|
||
complexity: "O(log n), ~O(1) for 5-10 data points"
|
||
source: predict_class.js
|
||
|
||
# ── ARCHITECTURE ──
|
||
architecture:
|
||
canonical_units:
|
||
pressure: Pa
|
||
flow: "m3/s"
|
||
power: W
|
||
temperature: K
|
||
output_units:
|
||
pressure: mbar
|
||
flow: "m3/h"
|
||
power: kW
|
||
temperature: C
|
||
node_count: 13
|
||
submodules: 12
|
||
|
||
# ── BUGS FIXED ──
|
||
bugs_fixed:
|
||
flowmovement_unit_mismatch:
|
||
severity: critical
|
||
description: "machineGroupControl sent flow in canonical (m3/s) but rotatingMachine flowmovement expected output units (m3/h). Every pump stayed at minimum."
|
||
fix: "_canonicalToOutputFlow() conversion before all flowmovement calls"
|
||
commit: d55f401
|
||
date: 2026-04-07
|
||
emergencystop_case:
|
||
severity: critical
|
||
description: "specificClass called executeSequence('emergencyStop') but config key was 'emergencystop'"
|
||
fix: "Lowercase to match config"
|
||
commit: 07af7ce
|
||
date: 2026-04-07
|
||
curve_data_anomalies:
|
||
severity: high
|
||
description: "3 flow values leaked into power column in hidrostal-H05K-S03R.json at pressures 1600, 3200, 3300 mbar"
|
||
fix: "Linearly interpolated correct values from adjacent levels"
|
||
commit: 024db55
|
||
date: 2026-04-07
|
||
efficiency_rounding:
|
||
severity: high
|
||
description: "Math.round(Q/P * 100) / 100 destroyed all NCog/BEP calculations"
|
||
fix: "Removed rounding, use raw ratio"
|
||
commit: 07af7ce
|
||
date: 2026-04-07
|
||
absolute_scaling_bug:
|
||
severity: high
|
||
description: "handleInput compared demandQout (always 0) instead of demandQ for max cap"
|
||
fix: "Reordered conditions, use demandQ throughout"
|
||
commit: d55f401
|
||
date: 2026-04-07
|
||
|
||
# ── TIMELINE ──
|
||
timeline:
|
||
- {date: 2026-04-07, commit: 024db55, desc: "Fix 3 anomalous power values in hidrostal curve"}
|
||
- {date: 2026-04-07, commit: 07af7ce, desc: "rotatingMachine production hardening: safety + prediction + 43 tests"}
|
||
- {date: 2026-04-07, commit: d55f401, desc: "machineGroupControl: unit fix + refinement + stability tests"}
|
||
- {date: 2026-04-07, commit: fd9d167, desc: "Update EVOLV submodule refs"}
|