docs: initialize project wiki from production hardening session
12 pages covering architecture, findings, and metrics from the rotatingMachine + machineGroupControl hardening work: - Overview: node inventory, what works/doesn't, current scale - Architecture: 3D pump curves, group optimization algorithm - Findings: BEP-Gravitation proof (0.1% of optimum), NCog behavior, curve non-convexity, pump switching stability - Metrics: test counts, power comparison table, performance numbers - Knowledge graph: structured YAML with all data points and provenance - Session log: 2026-04-07 production hardening - Tools: query.py, search.sh, lint.sh Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
46
wiki/sessions/2026-04-07-production-hardening.md
Normal file
46
wiki/sessions/2026-04-07-production-hardening.md
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: "Session: Production Hardening rotatingMachine + machineGroupControl"
|
||||
created: 2026-04-07
|
||||
updated: 2026-04-07
|
||||
status: proven
|
||||
tags: [session, rotatingMachine, machineGroupControl, testing]
|
||||
---
|
||||
|
||||
# 2026-04-07 — Production Hardening
|
||||
|
||||
## Scope
|
||||
Full code review and hardening of rotatingMachine and machineGroupControl nodes for production readiness.
|
||||
|
||||
## Key Discoveries
|
||||
|
||||
1. **Efficiency rounding destroyed NCog/BEP** — `Math.round(Q/P * 100) / 100` in canonical units (m3/s and W) produces ratios ~1e-6 that all round to 0. All NCog, cog, and BEP calculations were non-functional. Fixed by removing rounding.
|
||||
|
||||
2. **flowmovement unit mismatch** — machineGroupControl computed flow in canonical (m3/s) and sent it directly to rotatingMachine which expected output units (m3/h). Every pump stayed at minimum flow. Fixed with `_canonicalToOutputFlow()`.
|
||||
|
||||
3. **emergencyStop case mismatch** — `"emergencyStop"` vs config key `"emergencystop"`. Emergency stop never worked. Fixed to lowercase.
|
||||
|
||||
4. **Curve data anomalies** — 3 flow values leaked into power columns in hidrostal-H05K-S03R.json at pressures 1600, 3200, 3300 mbar. Fixed with interpolated values.
|
||||
|
||||
5. **C5 pump non-convexity** — 5 data points per pressure level produces non-convex spline. The marginal-cost refinement loop closes the gap to brute-force optimum from 2.1% to 0.1%.
|
||||
|
||||
## Changes Made
|
||||
|
||||
### rotatingMachine (3 files, 7 test files)
|
||||
- Async input handler, null guards, listener cleanup, tick loop race fix
|
||||
- showCoG() implementation, efficiency variant fix, curve anomaly detection
|
||||
- 43 new tests (76 total)
|
||||
|
||||
### machineGroupControl (1 file, 2 test files)
|
||||
- `_canonicalToOutputFlow()` on all flowmovement calls
|
||||
- Absolute scaling bug, empty Qd block, empty-machines guards
|
||||
- Marginal-cost refinement loop in BEP-Gravitation
|
||||
- Missing flowmovement after startup in equalFlowControl
|
||||
|
||||
### generalFunctions (1 file)
|
||||
- 3 curve data fixes in hidrostal-H05K-S03R.json
|
||||
|
||||
## Verification
|
||||
- 90 tests passing across both nodes
|
||||
- machineGroupControl within 0.1% of brute-force global optimum (1000-step search)
|
||||
- Pump switching stable: 1-2 transitions across full demand range, no hysteresis
|
||||
- Optimization cost: 0.03-0.15ms per call (0.015% of tick budget)
|
||||
Reference in New Issue
Block a user