[2026-09-18] eagle: personal/projects/zont-config-compiler.md
This commit is contained in:
@@ -3682,6 +3682,33 @@ Alex: **«надо жестоко ограничить диапазон»** →
|
||||
**Hard fail обязателен:** `_next > ID_MAX` → конвертер падает с текстом `id window exhausted`,
|
||||
конфиг **не собирается**. Молчаливый прыжок в `20xxx` запрещён.
|
||||
|
||||
### 25.5. ✅ РАЗВЕДКА (2026-09-18) — механика энкодера, план врезки
|
||||
|
||||
**Ключевой факт, меняющий шаг 1 плана:** фаза 1 эмитит **строки** (`lines: List[str]`), а не объекты.
|
||||
`obj['id']` подставляется в текст немедленно; `z_dict = {zid: line}` собирается **из строк**
|
||||
(`int(line.split('=')[0][2:])`, строки 1852-1856); `result_lines` собирается из `z_dict` по id
|
||||
(`if zid in z_dict: append(...)`, 1971-1977). Ссылки (`target`, `output_id`, `a`/`b` у expr) —
|
||||
**уже числа** внутри `fields` к моменту печати (`_register` строит `{'id': obj_id, 'raw': fields}`,
|
||||
строки 82-87).
|
||||
|
||||
⇒ «Проставить id всем записям ДО эмиссии» (шаг 4 старого плана) **не требуется**. Новый id надо
|
||||
выдавать **в момент рождения строки** и запоминать связь `старый → новый` в одном словаре; все
|
||||
обращения (`_register`, `_inline_bodies`, `_body_index`, `_emitted_ids`, `z_dict`) — через него.
|
||||
Иначе дубль `Duplicate ID` (та же природа, что питфолл 96 с `8817`).
|
||||
|
||||
### 25.6. ✅ РЕШЕНИЕ ALEX: id написан — не трогаем
|
||||
|
||||
Alex: **«если id есть то очевидно ничего не придумаем»**.
|
||||
|
||||
| Случай | Что в YAML | Поведение |
|
||||
|---|---|---|
|
||||
| 1 | `target: 99999` — **ссылка** на несуществующий объект | ❌ **ОШИБКА**, конвертер падает: «target 99999 не найден». Автозамена запрещена — иначе команда в никуда, контроллер примет мусор |
|
||||
| 2 | запись **без своего `id`** (`- set_relay:` без строки `id:`) | ✅ **АВТО**: выдать свободный id из окна `4098..19999` (дыры снизу вверх) |
|
||||
| 3 | `id: 99999` — номер **написан руками**, такого объекта в конфиге нет | ❌ **ОШИБКА**. «Если id есть — ничего не придумываем». Решение человека, не повод для автозамены |
|
||||
|
||||
**Правило одной строкой:** `id` в YAML = решение человека, неприкосновенно. Нет `id` — выдаём сами.
|
||||
Ссылка на несуществующий id — всегда ошибка, автозамены нет ни в одном случае.
|
||||
|
||||
**Риски:** (а) ссылки в новые объекты — реальная проблема, требует решения шага 3; (б) порядок
|
||||
эмиссии: `S`-блоки первыми, `Z` — после, id нужен раньше строки; (в) **верхняя граница** —
|
||||
`max+1 = 20556` перескочит железо, вопрос к Alex открыт.
|
||||
|
||||
Reference in New Issue
Block a user