ExtensionCommandResult
data class ExtensionCommandResult(val featureUpdates: Map<FeatureId, Map<String, FeatureValue>> = emptyMap(), val events: List<GuiEvent> = emptyList(), val effects: List<GuiEffect> = emptyList())
What an ExtensionActionHandler produced for one command: any feature-state updates, plus events/effects to feed back through the same channels the core controller uses.