[2026-09-18] eagle: personal/projects/zont-config-compiler.md personal/tech/roundtrip-key-verification.md

This commit is contained in:
Alexey Martemyanov
2026-09-18 00:07:03 +06:00
parent 4d17421574
commit d8f91452e2
2 changed files with 59 additions and 1 deletions
+20
View File
@@ -96,6 +96,15 @@ aliases:
- ZONT тип 11 сценарий - ZONT тип 11 сценарий
- ZONT тип 3 SMS - ZONT тип 3 SMS
- ZONT артефакт yml устарел - 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: related:
- '[[family/tech/zont-api]]' - '[[family/tech/zont-api]]'
- '[[family/how-to/home-automation]]' - '[[family/how-to/home-automation]]'
@@ -121,6 +130,17 @@ related:
| **Снять живой конфиг** | 🔴 `curl -s http://192.168.0.50/config.txt`**без авторизации** | | **Снять живой конфиг** | 🔴 `curl -s http://192.168.0.50/config.txt`**без авторизации** |
| **ZONT в общем контуре** | [[family/how-to/home-automation]] §6 | | **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 (4749 — `call_sub`, `send_sms`, `exit`, `scenario_orphans`).
--- ---
## 1. Формат конфига ZONT ## 1. Формат конфига ZONT
+39 -1
View File
@@ -3,7 +3,7 @@ title: 🔁 Round-trip key verification — проверка нового клю
namespace: personal namespace: personal
type: how-to type: how-to
created: '2026-09-17' created: '2026-09-17'
updated: '2026-09-17' updated: '2026-09-18'
tags: tags:
- personal - personal
- how-to - 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) ## 🔴 Круг зелёный ≠ приёмка (2026-09-17, ZONT круг 39)
Жёсткий урок той же сессии. Round-trip **байтово чистый** не означает, что правка верна. Жёсткий урок той же сессии. Round-trip **байтово чистый** не означает, что правка верна.