zont: круги 47-48 — call_sub, send_sms, end->exit (HEAD 9c83651)

This commit is contained in:
Alexey Martemyanov
2026-09-18 00:05:25 +06:00
parent ad8f0b6644
commit 4d98c6ae89
+88 -1
View File
@@ -3159,7 +3159,28 @@ Alex прочитал `git show --stat ba6ef44` (2 файла, 10 строк) и
принята и живёт в 15 других местах артефакта. Прежде чем оставлять `raw``grep` принятую форму принята и живёт в 15 других местах артефакта. Прежде чем оставлять `raw``grep` принятую форму
у соседей (ср. §10.1 круг 16, питфолл 73). у соседей (ср. §10.1 круг 16, питфолл 73).
### 21.1. ✅ Круг 37 (ФИНАЛ) — `unresolved` ПЕРЕИМЕНОВАН в `end` ### 21.1. ✅ Круг 37 → ПЕРЕИМЕНОВАНО в круг 48 — `unresolved``end`**`exit`**
Битая ссылка (id есть в поле 2 сценария, строки `#Z<id>=` в конфиге нет) сначала звалась
`unresolved` («неразрешённый объект»), в круге 37 переименована в `end`, в круге 48 (Alex:
*«или `- exit`»*) — в **`exit: true`**. Итоговая форма:
```yaml
then:
- id: 10441
log: then-text
- id: 10442
exit: true
```
🔴 **`id` обязателен и при `exit`:** без него ссылку не вернуть в поле 2 сценария —
`- exit` без id ломает round-trip (Alex: *«а, ей id еще нужен.. блин»*).
| Точка | Было | Стало |
|---|---|---|
| Декодер, 4 точки (`dump_leaf`, `dump_condition`, `dump_step`, `flat_steps`) | `{'id': N, 'end': True}` | `{'id': N, 'exit': True}` |
| Артефакт: `10442`, `10446`, `8601` | `end: true` | `exit: true` |
| Энкодер, 2 чтения | `node.get('end')` | `node.get('exit') or node.get('end')` (старое имя принято для совместимости) |
**«unresolved - конец сценария»** — битая ссылка прибора это **конец сценария**, а не «неразрешённый **«unresolved - конец сценария»** — битая ссылка прибора это **конец сценария**, а не «неразрешённый
объект». Ключ `unresolved` отвергнут, принят **`end`**. объект». Ключ `unresolved` отвергнут, принят **`end`**.
@@ -3847,3 +3868,69 @@ relay_commands:
- авто-id (`_resolve_id` + аллокатор `max+1`, 17 точек) — план есть, код не написан; - авто-id (`_resolve_id` + аллокатор `max+1`, 17 точек) — план есть, код не написан;
- push `75f46f3` в Gitea — по команде. - push `75f46f3` в Gitea — по команде.
---
## 28. ✅ Круги 47-48 (2026-09-18) — `call_sub`, `send_sms`, `exit`
**HEAD после кругов: `9c83651`.** Круг **9/9 зелёный, 759 → 759**.
### 28.1. Круг 47 — голый id и raw-алиас в шагах
Alex показал два места как мусор:
```yaml
- id: 11109
- id: 8195
raw: *id002
```
| Что | Разбор | Форма |
|---|---|---|
| `11109` | тип **11** — вызов другого сценария; своего тела у ссылки нет | `- call_sub: 11109` |
| `8195` | тип **3** — SMS; тело живёт в секции `sms_notifications` под тем же id | `- send_sms: 8195` |
🔴 **Причина `raw: *id002`:** шаг печатался `raw`-телом, а PyYAML, увидев **тот же самый
Python-объект-список** в секции и в шаге, подставил якорь `&id002` и алиас `*id002`.
Читается как обрывок. Лечение — ссылка-действие вместо тела.
Проверено: других таких мест в дампе нет (голых id в шагах — 1, raw-тел — 1).
Остался один алиас `*id001` (`mqtt_topics[8283].sensors` ↔ его же `raw[3]`) — это связь
**внутри одного объекта**, не обрывок; оставлен как есть.
Реализация: декодер — ветки `t == 11` и `t == 3` в `dump_step`; энкодер — приём ключей
`call_sub`/`send_sms` в `emit_step` (до `sid = step.get('id')`, у этих узлов своего `id` нет).
### 28.2. Круг 48 — `end``exit`
Alex: *«`end: true` — по-другому ваще ника?»*, затем *«или `- exit`»*. Принято **`exit: true`**.
```yaml
then:
- id: 10441
log: then-text
- id: 10442
exit: true
```
🔴 **`id` обязателен:** `- exit` без id ломает round-trip (ссылка не вернётся в поле 2).
Alex: *«а, ей id еще нужен.. блин»*.
### 28.3. 🔴 ПИТФОЛЛ 98 — имя пометки задаёт Alex, мои варианты — только повод
«`end``missing` / `orphan` / голый id» — Alex не принял ни один; дал **своё** слово `exit`.
Спрашивать «как назвать» одним сообщением с 2–3 вариантами (не раунд за раундом), принимать
его слово как финальное, не защищать свой выбор.
### 28.4. 🔴 ПИТФОЛЛ 99 — «по-другому ваще ника?» = «покажи, что нельзя» ≠ приказ менять
Вопрос про `end` был про **странность формы**, не команда переименовать. Пока форма объяснена
(«id обязателен, иначе round-trip ломается») — Alex решает сам. После его «пусть будет» —
править сразу, в тот же заход.
### 28.5. Открыто после круга 48
- 5 `objcmd`-орфанов (`8669`, `8382`, `11907` и др.);
- поле 4 = `2` у `expr` (`10077``10085`);
- авто-id (план есть, код не написан);
- push `9c83651` в Gitea — по команде.