[2026-09-15] eagle: family/tech/zigbee-t610-z2m-i-zha.md work/projects/cpm-web-extension-breakage-validation.md

This commit is contained in:
Alexey Martemyanov
2026-09-15 20:38:47 +06:00
parent b2726d1432
commit d1d3f8bb49
2 changed files with 37 additions and 4 deletions
+34 -2
View File
@@ -56,15 +56,47 @@ related:
### Зоны (Areas) после миграции
> 🔴 **ОШИБКА, ИСПРАВЛЕНА: пара `sauna` ↔ `bed_dimmer` была перепутана.**
> Файл `~/tmp-t610/rename-map.json` (составленный агентом **до** миграции) содержал **неверные IEEE** для двух устройств: `a4c1384fbe0b3a6b` помечен как `bed_dimmer` (на деле **`sauna`**), `a4c13882a4b42db0` помечен как `sauna` (на деле **`bed_dimmer`**).
>
> **ИСТОЧНИК ИСТИНЫ — только `/config/zigbee2mqtt/configuration.yaml`** (секция `devices:`, каждому IEEE свой `friendly_name`). Проверено: `sauna` = `a4c1384fbe0b3a6b`, `bed_dimmer` = `a4c13882a4b42db0`.
>
> **УРОК: НЕ доверять промежуточным картам, построенным агентом. Перед переименованием сверять КАЖДЫЙ IEEE с исходным конфигом.** Исправлено скриптом `full_check.py` (сверка 16/16 по истинной карте, `mismatches: 0`).
```
kotelnaia recirculation_pump, boiler_controller_power,
heating_cable_plug, boiler_water_leak
heating_cable_plug, boiler_water_leak, sauna
kabinet office_table_light_switch, smart_light_office, office_temperature_sensor
dushevaia night_light_shower_2, shower_2_presence_sensor
lestnitsa light_stairs tualet toilet_1_floor_temperature
bedroom bed_dimmer kitchen kitchen_hood
bedroom bed_dimmer, wireless_light_switch_bed kitchen kitchen_hood
```
### Истинная карта 16 устройств (из Z2M `configuration.yaml`)
| IEEE | friendly_name |
|---|---|
| `0xa4c13862d39377e6` | office_temperature_sensor |
| `0xa4c138f8da8bc478` | recirculation_pump |
| `0x84fd27fffed9e137` | night_light_shower_2 |
| `0xa4c1386d40ddb67b` | light_sensor_stairs — ❌ НЕ подхвачен ZHA |
| `0xa4c1381186ed1a32` | smart_light_office |
| `0xa4c13873b5c1575b` | office_table_light_switch |
| `0xa4c13807b64c7fd4` | kitchen_hood |
| `0xa4c1386d0839706a` | light_stairs |
| `0xa4c1384fbe0b3a6b` | **sauna** |
| `0xa4c138b0f9e674a5` | wireless_light_switch_bed |
| `0xa4c13882a4b42db0` | **bed_dimmer** |
| `0xa4c138c4a94a6a31` | shower_2_presence_sensor |
| `0xa4c1383d5fcaa063` | boiler_water_leak |
| `0xa4c138eb6fbe9d19` | heating_cable_plug |
| `0xa4c1381694217e10` | boiler_controller_power |
| `0xa4c138c650636cf6` | toilet_1_floor_temperature |
> ✅ **Сверка 2026-09-15 (ночь-15): 15 из 16 устройств в HA совпадают с истинной картой, `mismatches: 0`.** Отсутствует только `light_sensor_stairs` (батарейный, спит).
### Зоны (первоначальная выдача)
> 🔴 **ПИТФОЛЛ: удаление `device_id` из реестра СБРАСЫВАЕТ `area_id`.** После миграции все 13 устройств оказались без зон, хотя сами зоны (11 шт.) целы. Восстанавливать через `config/device_registry/update` с `area_id`.
### Автоматизации: 12/16 живых
@@ -17,7 +17,8 @@
| Natural crash / memory / CPU termination в production | **Не проверено** | Механизм доказан, реальная частота и связь с outage требуют M3/M4. |
| Close Other Tabs forget-ит retained tab | **Подтверждено и исправлено в M1** | Сохраняется тот же экземпляр Tab без ложного didCloseTab. |
| Duplicate Tab из popup переносит original | **Подтверждено и исправлено в M1** | В main window уходит копия, source остаётся отдельным объектом. |
| Закрытие окна forget-ит shared pinned/other-owned tabs | **Подтверждено и исправлено в M1** | Закрываются только tabs, реально принадлежащие закрываемому окну. |
| Pin/unpin/reorder/move/merge теряют lifecycle tab | **Подтверждено и исправлено в M1** | Tab сохраняет identity; WebKit получает `didMoveTab` с old index/window вместо ложных close/open. Pinned tabs имеют корректный flattened index. |
| Закрытие окна forget-ит shared pinned/other-owned tabs | **Подтверждено и исправлено в M1** | `didCloseTab` получают только реально закрытые tabs; shared pinned сохраняются и при закрытии последнего окна. |
| Нестабильный WebExtension base URL | **Исправлено и локально проверено в M2** | URL детерминирован по identifier и сохраняется между load/reload; production migration/storage validation остаётся rollout-задачей. |
| Startup/session-restore content-script miss | **Подтверждено как transient** | Не объясняет устойчивый all-tabs outage. |
| Failed background load навсегда застревает в m_backgroundWebView | **Исходный вывод отвергнут** | WebKit способен повторно загрузить background; устойчивый outage требует повторяемой причины/traffic. |
@@ -35,7 +36,7 @@
| ------------------------ | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| M1 tab lifecycle | `codex/cpm-tab-lifecycle-fixes``/Users/admin/DuckDuckGo/apple-browsers.git/cpm-tab-lifecycle-fixes` | **Готово:** три lifecycle fix; 4 targeted tests и macOS build проходят. |
| M1 tab lifecycle | `codex/cpm-tab-lifecycle-fixes``/Users/admin/DuckDuckGo/apple-browsers.git/cpm-tab-lifecycle-fixes` | **Готово, без коммита:** Close Other Tabs, popup duplicate, pin/unpin, reorder, cross-window/new-window move, merge, pinned indices и закрытие shared pinned при последнем окне; 229/229 затронутых macOS tests проходят. |
| M2 stable base URL | `codex/cpm-stable-base-url``/Users/admin/DuckDuckGo/apple-browsers.git/cpm-stable-base-url` | **Готово:** 11/11 tests; iOS/macOS builds проходят. |
| M3 attribution telemetry | `codex/cpm-failure-telemetry``/Users/admin/DuckDuckGo/apple-browsers.git/cpm-failure-telemetry` | **Готово к PR:** passive PII-free facts, forwarding proxy, runtime kill switch; 23/23 tests; schemas iOS/macOS валидны. |
| M4 production validation | `codex/cpm-production-validation``/Users/admin/DuckDuckGo/apple-browsers.git/cpm-production-validation` | **Ожидает production data:** runbook готов; начинать после одного telemetry release. |