From db1dfff9259cff8766929d44080898e8f7e8e0ea Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 10 Sep 2026 08:37:43 -0500 Subject: [PATCH] Correct set_internal() priority bound to AFTER_WIFI --- esphome/core/entity_base.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/esphome/core/entity_base.h b/esphome/core/entity_base.h index f408ac3937..169641dbac 100644 --- a/esphome/core/entity_base.h +++ b/esphome/core/entity_base.h @@ -90,13 +90,14 @@ class EntityBase { // Set whether this Entity should be hidden outside ESPHome. Must be called before MQTT and the // API read the flag: from on_boot at the default priority, or a setup() that runs above - // setup_priority::AFTER_CONNECTION. Calls after setup finishes are ignored and log an error. + // setup_priority::AFTER_WIFI. Calls after setup finishes are ignored and log an error. // // Known limitations, all by design and not going to be fixed: // - No consumer is notified of a change, so the flag can only be decided once per boot. - // - The guard is coarse: a call from a priority below AFTER_CONNECTION (an on_boot with a low - // priority, or a setup() at LATE) still passes, but MQTT has already cached the flag and the - // API camera listener is already registered, so those consumers keep the old value. + // - The guard is coarse: a call from a priority below AFTER_WIFI (an on_boot with a low priority, + // or a setup() at LATE) still passes, but the API camera listener is already registered, MQTT + // (AFTER_CONNECTION) has cached the flag, and an API client that connected while setup was + // stalled on a slow component has already listed the entities, so they keep the old value. // - Un-hiding an entity declared 'internal: true' in YAML skips the duplicate name check that // codegen runs for exposed entities, so a name collision can surface at runtime. Entities with // only an 'id:' are forced internal and use the id as their name.