Status
Completed by PR #411.
Manual FULL_FLEET / full shutdown support exists in the Energy curtailment UI. Public manual PreviewCurtailmentPlan, StartCurtailment, and StopCurtailment are server-gated with curtailment:manage from #408.
Current Code State
Implemented on main:
Current Product Boundary
The MQTT source model changed after this issue was written. MQTT source config no longer carries curtail_mode, contracted kW, scope, minimum curtail duration, or direct dispatch state. PR #409 intentionally narrowed sources to connectivity plus signal/runtime state recording.
Source-triggered curtailment now belongs to automation: an enabled MQTT source is bound to a response profile by an automation rule. Users create and enable that automation explicitly.
Remaining Work Tracked Elsewhere
Status
Completed by PR #411.
Manual
FULL_FLEET/ full shutdown support exists in the Energy curtailment UI. Public manualPreviewCurtailmentPlan,StartCurtailment, andStopCurtailmentare server-gated withcurtailment:managefrom #408.Current Code State
Implemented on
main:CURTAILMENT_MODE_FULL_FLEET.ModeFullFleet.FULL_FLEETselects every eligible candidate in scope.Service.Startaccepts and persistsFULL_FLEETevents.FULL_FLEETis treated as insufficient load instead of a successful empty event from Curtailment: distinguish empty scope from all-skipped full fleet #407.GetActiveCurtailmentremoval exists from Curtailment: support multiple active events in the UI #444.Current Product Boundary
The MQTT source model changed after this issue was written. MQTT source config no longer carries
curtail_mode, contracted kW, scope, minimum curtail duration, or direct dispatch state. PR #409 intentionally narrowed sources to connectivity plus signal/runtime state recording.Source-triggered curtailment now belongs to automation: an enabled MQTT source is bound to a response profile by an automation rule. Users create and enable that automation explicitly.
Remaining Work Tracked Elsewhere