# WHAT THIS BUILD IS SUPPOSED TO ANNOUNCE, recorded so that a change to the # composition has something to disagree with. THREE COLUMNS: # # # # ⚠️ ALL THREE, AND THE SECOND AND THIRD ARE THE HALF THE FIRST DRAFT MISSED. # A reference that carries only entity_ids cannot see the two changes that # orphan an install without changing a single composed id: # # `BASE` renamed (`goodwe_ctl` -> anything) every unique_id changes # `DEVICE["identifiers"]` changed HA sees a NEW device # # Home Assistant's MQTT integration keys its entity registry on `unique_id` and # its device registry on the device identifier. Change either and HA creates a # NEW entity beside the old one - and because discovery is published with # `retain=True` and nothing publishes a removal payload, the OLD config stays on # the broker and the dead entity stays in the registry, still named by every # automation that referenced it, never updating again. The composed entity_id is # identical on both, so an entity_id-only comparison reports a clean transition. # That is the same shape as the habit-4 this file's own card already caught # once: a reference that does not carry the thing that moved. # # ⚠️ AND `object_id` IS DELIBERATELY NOT A COLUMN. `app/mqtt.py` lines 36-42 and # 61-76 record that HA 2026.8 does NOT honour `object_id` in a discovery # payload - the id is composed from device name plus entity name - so renaming # one is a true no-op and a column for it would make this file refuse a change # that costs nothing. The check is graded on what HA actually keys on. # # PROVENANCE, stated exactly: # - recorded 2026-09-08 from `release/1.0` at `meter_source: firmware`, # roster of one, by reading `mqtt.discovery_payloads(units=[])`. It is what # the code announces. # - `sensor.goodwe_p1_sample_age` is additionally recorded in `app/mqtt.py` as # VERIFIED AGAINST THE LIVE SYSTEM on 2026-08-26, and the ESP32's ingest # guard subscribes to that exact string. # - ⚠️ IT IS NOT A DUMP OF THE LIVE INSTALL'S ENTITY REGISTRY. That is what # `--live-entities` is for. This file is about THE BUILD. # # Editing this file is how you say "the announcement changed on purpose". Do not # edit it to make a check pass. # # ⚠️ TEL-10 ADDED THE LAST THREE ROWS, AND THEY ARE ADDITIONS RATHER THAN A # RE-COMPOSITION. Nothing above them moved: same entity_ids, same unique_ids, # same device. They are recorded here - the BUILD's reference - and deliberately # NOT in `live-entities-recorded.txt`, because the install does not have them # yet and an id the build announces that the install lacks is a NEW entity, not # an orphan. `test_mqtt.py` part 1 grades the same two claims on the payload # bytes. sensor.goodwe_setpoint goodwe_ctl_setpoint goodwe_rs485_controller sensor.goodwe_grid_power goodwe_ctl_grid goodwe_rs485_controller sensor.goodwe_battery_power goodwe_ctl_battery goodwe_rs485_controller sensor.goodwe_battery_soc goodwe_ctl_soc goodwe_rs485_controller sensor.goodwe_circulating_power goodwe_ctl_circulation goodwe_rs485_controller sensor.goodwe_maintenance_phase goodwe_ctl_phase goodwe_rs485_controller sensor.goodwe_controller_status goodwe_ctl_status goodwe_rs485_controller sensor.goodwe_p1_sample_age goodwe_ctl_p1_age goodwe_rs485_controller sensor.goodwe_loop_integrator goodwe_ctl_loop_i goodwe_rs485_controller sensor.goodwe_loop_integrator_lead goodwe_ctl_loop_lead goodwe_rs485_controller sensor.goodwe_loop_reason goodwe_ctl_loop_reason goodwe_rs485_controller