Schema defaults now match a realistic 50 m³ × 4 m basin (volume=50,
height=4, inflowLevel=1.5, overflowLevel=3.8, maxLevel=3.8, minLevel=0.3).
stopLevel default stays null so the hysteresis remains opt-in for
programmatic configs (per levelBased.js:111-113); the editor HTML supplies
0.5 m as the drag-in default.
startLevel description corrected: the ramp foot is inflowLevel, not
startLevel — demand stays at 0 % across [startLevel, inflowLevel] and
scales 0 → 100 % across [inflowLevel, maxLevel]. The previous text claimed
[startLevel, maxLevel], contradicting the runtime.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
When MGC's per-tick abortActiveMovements parks the FSM in
'accelerating'/'decelerating' to avoid a bounce loop, a subsequent
moveTo previously fell into the early-return path and saved the new
setpoint to delayedMove — which never fired because nothing transitioned
back to 'operational'. Now distinguish residue states from genuine
non-operational states (starting/warmingup/...) and force-transition
out of residue so the new setpoint actually executes. Also picks up
in-flight predict shareInputsFrom plumbing and pumpingStation.json
stopLevel doc.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- control.levelbased.shiftArmPercent (default 95): output % threshold that
arms the shift on the way up. Once armed, the up-curve % at the
filling→draining transition becomes the held value, kept until level
drops to shiftLevel; from there it ramps to 0 % at startLevel.
- shiftLevel description updated — it is no longer the arming trigger,
it's the level at which the held output begins ramping down.
- MeasurementContainer.js: prominent doc block on the class plus a
JSDoc on getFlattenedOutput documenting the `${type}.${variant}.
${position}.${childId}` flatten format and the implicit 'default'
childId convention. This was the #1 footgun for new dashboard
consumers — the comments now make the rule impossible to miss.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Matches the 5-threshold convention (dryRunLevel, minLevel, startLevel,
maxLevel, overflowLevel) introduced in the pumpingStation wiki:
basin.heightInlet → basin.inflowLevel
basin.heightOutlet → basin.outflowLevel
basin.heightOverflow → basin.overflowLevel
control.levelbased.stopLevel → control.levelbased.minLevel
control.levelbased.maxFlowLevel → control.levelbased.maxLevel
control.levelbased.minFlowLevel → removed (redundant with startLevel)
control.levelbased.startLevel → unchanged
Description strings tightened to reference the semantic role instead
of generic "min level to scale flow" prose.
Breaking change for existing saved flows. Ties in with pumpingStation
commit a218945 which updates the consumer code.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>