zont: круги 47-48 — call_sub, send_sms, end->exit (HEAD 9c83651)
This commit is contained in:
@@ -3159,7 +3159,28 @@ Alex прочитал `git show --stat ba6ef44` (2 файла, 10 строк) и
|
||||
принята и живёт в 15 других местах артефакта. Прежде чем оставлять `raw` — `grep` принятую форму
|
||||
у соседей (ср. §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` отвергнут, принят **`end`**.
|
||||
@@ -3847,3 +3868,69 @@ relay_commands:
|
||||
- авто-id (`_resolve_id` + аллокатор `max+1`, 17 точек) — план есть, код не написан;
|
||||
- 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 — по команде.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user