From d8f91452e26b507d25f930f7d894a98b8d77cdfa Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Fri, 18 Sep 2026 00:07:03 +0600 Subject: [PATCH] [2026-09-18] eagle: personal/projects/zont-config-compiler.md personal/tech/roundtrip-key-verification.md --- personal/projects/zont-config-compiler.md | 20 +++++++++++ personal/tech/roundtrip-key-verification.md | 40 ++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/personal/projects/zont-config-compiler.md b/personal/projects/zont-config-compiler.md index ddba0e4c..58472a2c 100644 --- a/personal/projects/zont-config-compiler.md +++ b/personal/projects/zont-config-compiler.md @@ -96,6 +96,15 @@ aliases: - ZONT тип 11 сценарий - ZONT тип 3 SMS - ZONT артефакт yml устарел + - ZONT круг 47 + - ZONT круг 48 + - ZONT круг 49 + - ZONT call_sub + - ZONT send_sms + - ZONT exit + - ZONT end переименован + - ZONT scenario_orphans пустая секция + - ZONT push 5d31d6e related: - '[[family/tech/zont-api]]' - '[[family/how-to/home-automation]]' @@ -121,6 +130,17 @@ related: | **Снять живой конфиг** | 🔴 `curl -s http://192.168.0.50/config.txt` — **без авторизации** | | **ZONT в общем контуре** | [[family/how-to/home-automation]] §6 | +> ### 📍 Текущее состояние (2026-09-18, после круга 49) +> +> | | | +> |---|---| +> | **HEAD** | `5d31d6e` — **запушен** в Gitea (`origin/main`) | +> | **Круг** | **9/9 зелёный**, 759 → 759 объектов | +> | **Артефакт** | `zont_config/config_local_2026-09-17_23-21-20.yml` | +> | **Открыто** | 5 `objcmd`-орфанов · поле 4 = `2` у `expr` (`10077`–`10085`) · авто-id (`max+1`, 17 точек, план есть) | +> +> Свежие круги: §27 (46 — `set_contour_target`), §28 (47–49 — `call_sub`, `send_sms`, `exit`, `scenario_orphans`). + --- ## 1. Формат конфига ZONT diff --git a/personal/tech/roundtrip-key-verification.md b/personal/tech/roundtrip-key-verification.md index f507faa9..8e7b9f2a 100644 --- a/personal/tech/roundtrip-key-verification.md +++ b/personal/tech/roundtrip-key-verification.md @@ -3,7 +3,7 @@ title: 🔁 Round-trip key verification — проверка нового клю namespace: personal type: how-to created: '2026-09-17' -updated: '2026-09-17' +updated: '2026-09-18' tags: - personal - how-to @@ -151,6 +151,44 @@ diff <(iconv -f <вх> -t utf-8 <оригинал> | tr -d '\r' | sort) \ --- +## 🔴 Одно имя на два разных действия = схлопывание (2026-09-18, ZONT круг 46) + +**Симптом:** в YAML два **разных** действия читались под одним ключом, и одно затирало другое. + +**Случай:** `set_contour_temp` — имя действия у двух **разных** типов записи: +- **тип 9** (команда, поле 4 = уставка **числом**): `#Z8817=9,'descr',10034,'2782'` → 5.2 °C +- **тип 59 objcmd** (поле 3 = **источник**/литерал): `#Z10379=59,'objcmd 8669 ",,,%0";#h',9146,0,0` + +Ветка objcmd проверялась в коде **раньше**, перехватывала тело типа 9 и собирала +`#Z8817=59,'objcmd 10034 ",,,%0";#h',5.2,0,1` вместо `#Z8817=9,…,10034,'2782'`. Плюс +`_register_action9` перезаписывал запись секции → `Duplicate ID 8817`. + +**Правила:** +- Два разных действия — **два разных имени**. Одно имя на два типа записи = гарантированный + конфликт веток. Владелец формулирует разницу сам: *«установить целевую температуру x для + контура y»* vs *«установить температуру контура x в значение y»*. +- При каждом переименовании или вводе ключа **сверить пересечение словарей**: + `grep -n "_ACTION9_KEYS\|_OBJCMD_MASKS" *.py` → общие имена = баг. +- Один id в двух секциях (шаг сценария + объект секции) → **одна** строка на id: вторая точка + уступает первой, а не регистрирует своё тело повторно. + +## 🔴 Артефакт в репо ≠ свежий вывод (2026-09-18, ZONT круг 46) + +`zont_config/*.yml` в репозитории — это **выход прошлого прогона**. Пока файл не перегенерён, он +показывает **старую** форму, и правка выглядит невнесённой. `test_roundtrip.py` пишет в `temp`, +**целевой артефакт не обновляет**. + +```bash +# приёмка: сначала перегенерировать ЦЕЛЕВОЙ файл, потом смотреть глазами +python3 config-to-yml.py zont_config/config_X.txt > zont_config/config_X.yml +grep -n -A4 "<изменённый id>" zont_config/config_X.yml +``` + +**Симптом:** «всё ещё вижу старое» при зелёном круге. Порядок — круг, **потом** перегенерация, +**потом** чтение артефакта. + +--- + ## 🔴 Круг зелёный ≠ приёмка (2026-09-17, ZONT круг 39) Жёсткий урок той же сессии. Round-trip **байтово чистый** не означает, что правка верна.