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` принятую форму
|
принята и живёт в 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 — по команде.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user