zont: док актуализирован — exit вместо end, орфанов нет (список 8669/8382/11907 был неверен), поле 4 expr производное

This commit is contained in:
Alexey Martemyanov
2026-09-18 00:10:53 +06:00
parent d8f91452e2
commit 19e73da22a
+19 -10
View File
@@ -934,7 +934,7 @@ https://lk.zont-online.ru/download/firmwares/H2000_PRO_<HW>__<FW>_<PROFILE>.zip
| Имя переменной | ✅ `set var1` **и** `set varname` — регексп `^set (var\w*\|\w+)$` (§10.4) | | Имя переменной | ✅ `set var1` **и** `set varname` — регексп `^set (var\w*\|\w+)$` (§10.4) |
| `field` / `mode` / `cmp` / `_f2` / `_f5` / `_head` / `condition` | ⛔ **удалены** — 0 вхождений в коде и файлах (§10.1 круги 19–21, §10.5 круги 26, §10.6 круг 27) | | `field` / `mode` / `cmp` / `_f2` / `_f5` / `_head` / `condition` | ⛔ **удалены** — 0 вхождений в коде и файлах (§10.1 круги 19–21, §10.5 круги 26, §10.6 круг 27) |
| Потери объектов | ✅ **0** — было 5 (`8472`, `8821`, `8849`, `8851`, `8855`) | | Потери объектов | ✅ **0** — было 5 (`8472`, `8821`, `8849`, `8851`, `8855`) |
| `unresolved: true` | ✅ **ЗАКРЫТО** (круг 37, `806ed2e`) — ключ переименован в **`end: true`**: битая ссылка прибора = **конец сценария** (Alex: «unresolved - конец сценария»), не «неразрешённый объект». Три терминатора: `10099`, `8601`, `10103` — их нет ни в одном из 9 дампов. ⛔ Не путать с `#Z10104=*` (§19.5) | | `unresolved: true` | ✅ **ЗАКРЫТО** (круги 37/48) — ключ переименован сначала в **`end: true`** (круг 37, `806ed2e`), затем в **`exit: true`** (круг 48, `9c83651`, Alex: «или `- exit`»). Битая ссылка прибора = **конец сценария** (Alex: «unresolved - конец сценария»), не «неразрешённый объект». `id` обязателен. ⛔ Не путать с `#Z10104=*` (§19.5) |
| **Орфаны** | ✅ **4** (было 27 → 6 → **4**): `10030`, `10031`, `10035` (`type: param`) + `10032` (`expr`). Всё, что разворачивается, развёрнуто; оставшиеся 4 не привязаны ни к одному сценарию. **`raw` в орфанах — 0 вхождений** (круги 38/39) | | **Орфаны** | ✅ **4** (было 27 → 6 → **4**): `10030`, `10031`, `10035` (`type: param`) + `10032` (`expr`). Всё, что разворачивается, развёрнуто; оставшиеся 4 не привязаны ни к одному сценарию. **`raw` в орфанах — 0 вхождений** (круги 38/39) |
| **`objcmd`** | ✅ **РАЗОБРАН**`descr` + `args` + `target: <id>` (`10029`/`10033`/`10036`/`10053`). `args` остаётся **только** у `objcmd` | | **`objcmd`** | ✅ **РАЗОБРАН**`descr` + `args` + `target: <id>` (`10029`/`10033`/`10036`/`10053`). `args` остаётся **только** у `objcmd` |
| **`args` у `set_var`** | ⛔ **ОТМЕНЁН** (круг 40, `4b99d8e`) — был выдумкой: `0` = поле 4, `1` = поле 5 (**производное**: «в поле 2 литерал, а не id»). Энкодер ставит поле 5 сам (§21.2.1) | | **`args` у `set_var`** | ⛔ **ОТМЕНЁН** (круг 40, `4b99d8e`) — был выдумкой: `0` = поле 4, `1` = поле 5 (**производное**: «в поле 2 литерал, а не id»). Энкодер ставит поле 5 сам (§21.2.1) |
@@ -2423,7 +2423,7 @@ comm -13 <(sort orig) <(sort back) # → пусто (ничего лишнег
| 1 | ✅ **ЗАКРЫТ** — имя ключа для Pickle-литерала: `pickle: 3` (числом). Внесено в код | `9933` | — | | 1 | ✅ **ЗАКРЫТ** — имя ключа для Pickle-литерала: `pickle: 3` (числом). Внесено в код | `9933` | — |
| 2 | ✅ **ЗАКРЫТ** (круг 38) — форма `objcmd`: `descr` + `args` + `target: <id>`. `args` живёт **только** здесь | `10029`/`10033`/`10036`/`10053` | — | | 2 | ✅ **ЗАКРЫТ** (круг 38) — форма `objcmd`: `descr` + `args` + `target: <id>`. `args` живёт **только** здесь | `10029`/`10033`/`10036`/`10053` | — |
| 3 | ✅ **ЗАКРЫТ** (круг 36) — тип 50 в `trigger:` раскрыт: `type: days_mask` + `days: [mon, wed, thu, sat, sun]` | `8548` | — | | 3 | ✅ **ЗАКРЫТ** (круг 36) — тип 50 в `trigger:` раскрыт: `type: days_mask` + `days: [mon, wed, thu, sat, sun]` | `8548` | — |
| 4 | ✅ **ЗАКРЫТ** (круг 37) — имя дано: **`end: true`** («unresolved - конец сценария»), `unresolved` снят | `10099`, `10103`, `8601` | — | | 4 | ✅ **ЗАКРЫТ** (круги 37/48) — имя дано: **`end: true`** («unresolved - конец сценария»), `unresolved` снят; затем переименовано в **`exit: true`** (круг 48) | `10099`, `10103`, `8601` | — |
| 5 | ✅ **ЗАКРЫТ** (круги 38/39) — `scenario_orphans` разгребена: **6 → 4**, `raw` в ней **0**. Оставшиеся 4 не привязаны ни к одному сценарию | низ YAML | — | | 5 | ✅ **ЗАКРЫТ** (круги 38/39) — `scenario_orphans` разгребена: **6 → 4**, `raw` в ней **0**. Оставшиеся 4 не привязаны ни к одному сценарию | низ YAML | — |
| 6 | ✅ **ЗАКРЫТ** — круг 30 закоммичен (`375d01a`). Push сделан (круг 40) | оба конвертера | — | | 6 | ✅ **ЗАКРЫТ** — круг 30 закоммичен (`375d01a`). Push сделан (круг 40) | оба конвертера | — |
| 7 | ✅ **ЗАКРЫТ**`const`**`pickle_value`** (круг 31, §10.12) | `10068` | — | | 7 | ✅ **ЗАКРЫТ**`const`**`pickle_value`** (круг 31, §10.12) | `10068` | — |
@@ -3230,7 +3230,7 @@ Alex прочитал `git show --stat ba6ef44` (2 файла, 10 строк) и
|---|---| |---|---|
| **HEAD** | **`5fdedc9`** — «type 5 в шаге: action вместо хвоста params, отдельная секция сборки» · ⚠️ **НЕ запушен** | | **HEAD** | **`5fdedc9`** — «type 5 в шаге: action вместо хвоста params, отдельная секция сборки» · ⚠️ **НЕ запушен** |
| **Рабочее дерево** | ✅ **чисто** по конвертерам (круг 43 закоммичен) | | **Рабочее дерево** | ✅ **чисто** по конвертерам (круг 43 закоммичен) |
| **Файл на диске** | `config_local_2026-09-17_23-21-20.yml`**759 объектов**, 90 973 байта; `action` у типа 5, `trigger.step_id`, `end: true` у терминаторов | | **Файл на диске** | `config_local_2026-09-17_23-21-20.yml`**759 объектов**, `action` у типа 5, `trigger.step_id`, `exit: true` у битых ссылок (`10442`, `10446`, `8601`), `call_sub`/`send_sms` в шагах, пустой `scenario_orphans` не выводится |
| **Круг** | ✅ **9/9**`zont_config/` 9 снапшотов `.txt`) — потеряно 0, лишнее 0 | | **Круг** | ✅ **9/9**`zont_config/` 9 снапшотов `.txt`) — потеряно 0, лишнее 0 |
| **Коммиты сессии** | `5fdedc9` (круг 43) · `4b99d8e` (круг 40) · `8f2edd4` · `272f4c6` · `6d0b6a5` · `4c6a6f5` · `806ed2e` · `b770bed` · `ba6ef44` · `0cbbeb8` · `2007771` · `0c4b9a6` · `821659b` · `16ec710` · `375d01a` · `07c076f` — 15 из них ✅ запушены (`d94b809..4b99d8e`), **`5fdedc9` — нет** | | **Коммиты сессии** | `5fdedc9` (круг 43) · `4b99d8e` (круг 40) · `8f2edd4` · `272f4c6` · `6d0b6a5` · `4c6a6f5` · `806ed2e` · `b770bed` · `ba6ef44` · `0cbbeb8` · `2007771` · `0c4b9a6` · `821659b` · `16ec710` · `375d01a` · `07c076f` — 15 из них ✅ запушены (`d94b809..4b99d8e`), **`5fdedc9` — нет** |
| **Док в vault** | `personal/projects/zont-config-compiler.md` | | **Док в vault** | `personal/projects/zont-config-compiler.md` |
@@ -3881,12 +3881,13 @@ relay_commands:
(секция + шаг). Файл читается корректно, `yaml.safe_load` проходит. (секция + шаг). Файл читается корректно, `yaml.safe_load` проходит.
Если нужен «плоский» вид без якорей — это отдельное решение, не баг. Если нужен «плоский» вид без якорей — это отдельное решение, не баг.
### 27.6. Открыто на после круга 46 ### 27.6. Открыто на после круга 46 (историческая запись; закрыто в кругах 47-49)
- 5 `objcmd`-орфанов (`8669`, `8382`, `11907` и др.) — форма не согласована; - ~~5 `objcmd`-орфанов (`8669`, `8382`, `11907` и др.)~~ — ⛔ список был **неверен**: этих id в
- поле 4 = `2` у `expr` (`10077``10085`) — имени нет; конфиге есть строки, они не орфаны. Настоящих орфанов нет (§28.6);
- ~~поле 4 = `2` у `expr`~~ — работать не надо, поле производное (§28.6);
- авто-id (`_resolve_id` + аллокатор `max+1`, 17 точек) — план есть, код не написан; - авто-id (`_resolve_id` + аллокатор `max+1`, 17 точек) — план есть, код не написан;
- push `75f46f3` в Gitea — по команде. - ~~push `75f46f3`~~ — ✅ сделан, `origin/main` = `5d31d6e`.
--- ---
@@ -3960,7 +3961,15 @@ Alex: *«и `scenario_orphans: []` снеси. и пуш»*.
### 28.6. Открыто после круга 49 ### 28.6. Открыто после круга 49
- 5 `objcmd`-орфанов (`8669`, `8382`, `11907` и др.); - **авто-id** (план есть, код не написан).
- поле 4 = `2` у `expr` (`10077``10085`);
- авто-id (план есть, код не написан). **Орфаны — НЕТ** (закрыто в круге 49 вместе с пустой секцией `scenario_orphans`): те 4 id
(`10030`, `10031`, `10032`, `10035`), что раньше числились орфанами, в YAML не выводятся — их
нет и в конфиге прибора. Секция пустая, потому что разворачивать нечего. ⛔ `8669`, `8382`,
`11907`**не орфаны** (в доке значились ошибочно): строки `#Z8669=`/`#Z8382=`/`#Z11907=` в
конфиге есть, это обычные объекты (контур/датчик), они приходят как `target` у `objcmd`.
**Поле 4 = `2` у `expr` — НЕ требует работы** (снято с открытого): поле производное, в YAML не
выводится, энкодер считает его сам. Правило (проверено по всем 26 `expr`-записям в 9 дампах):
`0` — правый операнд это id существующего объекта; `2` — литерал (объекта нет).