- Movement gate: hold non-urgent demand while the group is 'working'
(mid-ramp/sequencing) and flush it once 'ready', instead of aborting
in-flight ramps on every incoming demand — which could freeze pumps at 0.
Urgent demand (stop, mode/priority change, large step) still pre-empts.
- getMovementState()/_isUrgentDemand()/_maybeFlushPendingDemand() helpers.
- Demand telemetry: emit demandFlow (m³/h) and demandPct (0..100 of envelope)
resolved by the last dispatch; omitted before the first demand (degraded).
- Capacity envelope now emitted in output flow unit (m³/h) not raw m³/s.
- Manifest + populated/degraded tests for the new outputs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>