- ps-mgc-flow-contract: asserts PS's view of MGC outflow equals the live
per-pump aggregate at every tick. Currently FAILS — exposes that
MGC's flow.predicted.downstream reverts to optimalControl's bestFlow
target after handlePressureChange writes the correct flow.act, leaving
PS with stale outflow values. The mirror added in dc27a56 is necessary
but not sufficient.
- dead-zone-signal: asserts the Schmitt-trigger transitions
(engaged 100% → keep-alive 1% → off 0%) across startLevel↓/stopLevel↓
with proper rising-edge re-arm. Currently PASSES.
- inflow-overcapacity-stability: 45 s sim at 2× station capacity;
asserts pumps don't thrash or park in accelerating residue. Currently
FAILS — pumps end up at ctrl=0 in 'accelerating' state, suggesting
the residue-unpark fix doesn't fully cover steady-state over-capacity.
- realistic-startup-timing: re-runs the varying-demand-during-startup
scenario with PRODUCTION-default state.time (starting=10s, warm=5s)
instead of the 1-2 s used elsewhere. Currently PASSES — confirms the
dispatch-reorder fix holds under realistic transition windows.
Honest summary: 2 pass, 2 fail. The two failures expose genuine
remaining defects in the PS↔MGC measurement contract and the
residue-unpark policy. They're committed FAILING so the bugs are
captured under version control until the underlying fixes land.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Submodule bumps land the deadlock fix (state.js residue unpark + MGC
optimalControl dispatch reorder) and pumpingStation stopLevel hysteresis.
- Renames examples/pumpingstation-3pumps-dashboard →
pumpingstation-complete-example with regenerated flow.json. New
dashboard groups, demand-broadcast wiring, S88 placement rule
applied, ui-chart trend-split and link-channel naming follow
.claude/rules/node-red-flow-layout.md.
- New cross-node test harness under test/: end-to-end-pumpingstation
drives PS + MGC + 3 pumps + physics simulator end-to-end and
verifies the ~5/15 min cycle.
- Adds Grafana provisioning dashboards (pumping-station.json) and a
helper sync-example.sh script for export/import to live Node-RED.
- Docker entrypoint + settings + compose tweaks for the persistent
user dir layout used by the demo.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Fix Dockerfile.e2e to install EVOLV properly in Node-RED /data/
- Add measurement node E2E test flow with scaling (4-20mA to 0-5m)
- Add Grafana health check to run-e2e.sh
- Guard pumpingStation demo IIFE with require.main check
- All 10 EVOLV nodes load successfully in containerized Node-RED
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>