diff --git a/docs/NEXT_PACKS_PLAN.md b/docs/NEXT_PACKS_PLAN.md new file mode 100644 index 00000000..1278e8c7 --- /dev/null +++ b/docs/NEXT_PACKS_PLAN.md @@ -0,0 +1,113 @@ +# ПЛАН ДВУХ СЛЕДУЮЩИХ ПАКОВ — бэкенд и платформа (оркестратор №22, 03.09.2026) + +> **Статус: ЧЕРНОВИК НА СВЕРКЕ.** Промты по нему НЕ выдаются, пока оркестратор и контролёр (Fable 5.1) +> не скажут «ок» друг другу — распоряжение владельца 03.09. Файл — предмет этой сверки. +> **Что прочитано перед составлением:** единый бэклог целиком (176 строк, из них 53 «скоро») · +> открытые ряды регистра платформы (97, `major` 3) · `research/30` (ответ полигона на два вопроса +> владельца, 03.09) · CURRENT-STATE и очередь №22 · оба акта приёмки (D39.187, D39.188) · оба наряда +> дофикса и отчёт приёмки по ним. + +## 0. Что решает состав — три ограничения, а не вкус + +1. **ВАЙР-БАТЧ (строка 182).** Любая правка, двигающая `RequestHash` / `memory_version` / снапшот, — + это пере-покупка волн. Дриблить по одной = платить пере-снапшот несколько раз. Значит все + провод-правки идут ОДНИМ касанием или не идут вовсе. +2. **ОЧЕРЕДЬ ВЛАДЕЛЬЦА (CURRENT-STATE п.1–4).** Разрыв цикла — книга не отдаётся файлом пользователю; + открыта ПЛАТФОРМЕННАЯ половина (`createExport`/`getExport` канон обещает, платформа не монтирует). + Гейт этого пункта — живой сквозной прогон через API (п.3), и его блокер снят 31.08. +3. **ЦЕНА ОШИБКИ ПРИОРИТЕТА.** `research/30` §5 прямо ранжирует: механический пре-гейт перед + редактором (D39.117, строка 142) «выше в очереди, чем любой непроверенный K7», а половина доводов + за переделку протокола снята замером (редактор правит 4.0–5.8% знаков, а не переписывает текст). + +## 1. БЭКЕНД — пак «ВАЙР-БАТЧ: род, экран цели, заголовки инъекций» + +**Почему именно вайр-батч, а не «самое важное по одной».** Четыре из пяти кандидатов бэкенда двигают +провод. Взять их по одному — заплатить пере-снапшот четыре раза на книге, которая уже куплена. +Строка 182 заведена ровно под это и ждёт промта. + +**Состав (в этом порядке):** + +1. **Строка 210 — РОД НЕ ПРОИЗВОДИТСЯ ВОВСЕ, цель №1 бэклога.** Механизм доставки построен + (`membank/memory.go` кладёт `genderConstraintNote` в черновую инъекцию для `Confirmed`-строк по + директиве D39.21), а данных ему не даёт никто: промпт терминолога возвращает ровно три поля + (термин · перевод · уверенность), поля рода в ответе нет; майнер берёт `gender` только из СИДА. + ⇒ на любой книге без ручного сида ось рода мертва по построению. Это не дефект рендера — + это отсутствие входа у ратифицированной директивы. +2. **Строка 46 + предпосылка 113 — экран целевого языка.** Дизайн ЗАМОРОЖЕН и ратифицирован + (D39.92 п.1 closed-set + D39.93 изолированный модуль с именованными причинами), промт ждёт выдачи. + ⚠ Порядок §5.4: **сначала 113** — корпус-фикстура (~20 off-target + ~40 здоровых) и регресс-тест на + реальный запас, потому что число «18 из 20 · 0 ложных на 1055 · запас 13×» получено ВРЕМЕННЫМ + тестом, который сессия удалила, и воспроизвести его сегодня нечем. СТОП, если фикстура не даёт + 18/20 при нуле ложных или запас меньше 3×. +3. **Строка 134 — инжект-заголовки под доктрину D39.105.** Гейт ПАЛ (D39.108): текст = отправленная + строка пробы 18 БЕЗ оговорки области (оговорка опровергнута §A.4 — НЕ вносить). +4. **Строка 140 — банковый контур в shipping-c1.** СТОП-решение: включить в c1 (двигает промпт + драфта ⇒ цену назвать) либо поправить декларацию. ⚠ Это решение ВЛАДЕЛЬЦА, не сессии; в пак идёт + как «предъявить обе цены и остановиться», а не как стройка. +5. **ДОФИКС предыдущего пака — одним пунктом** (остаток приёмки 03.09, D39.187 п.4): + развилка операторской строки прибита с ОДНОЙ стороны (две посадки в новый код `VolumeStop.String()` + переживают весь пакет и печатают «reached the END of the book» при непустом остатке) · граница + `bound()` (`Carried > 0` → `Carried > 1`) не прибита, и прогон с одним перенесённым юнитом на + конце книги не отдаёт отчёт вовсе · три числа отчёта протухли снова. + +**ЧТО НАМЕРЕННО НЕ БЕРЁМ и почему:** +- **Строки 160/161 (структура глав).** 161 — это «единственное дешёвое resnapshot-окно», и он требует + ДИЗАЙН-пака до стройки (D39.136 п.3). Смешивать его с вайр-батчем нельзя: батч платит один + пере-снапшот, а 161 перекраивает нарезку целиком. +- **Строка 142 (пре-гейт перед редактором).** Ратифицирован формой, но `research/30` ставит его ПОСЛЕ + шага 0–1 полигона (починка глоссарного флага с precision 0.067 и прибор верности): без прибора его + эффект неизмерим, а мерило — половина цены редактора. +- **Строка 232 остаток / 233.** Семантика переноса отложена СЛОВОМ ВЛАДЕЛЬЦА 03.09 («подумаем»); + трогать до его решения нельзя. +- **119 + 124 + 115.** Строка 182 требует брать их ОДНИМ дизайн-паком, а не хвостом батча. + +## 2. ПЛАТФОРМА — пак «ЗАКРЫТЬ ЦИКЛ: сквозной прогон и дверь выдачи» + +**Почему это, а не мажоры регистра.** Очередь владельца называет разрыв цикла пунктом 1, и его +платформенная половина — единственное, что стоит между «движок пишет файл» и «пользователь получил +книгу». Движок отдаёт EPUB 3 + txt с 30.08 (D39.175), холодный прогон 31.08 предъявил это живьём +(`epubcheck` 0/0/0/0). Платформа смонтировала 15 операций канона из 20; `createExport`/`getExport` +среди недостающих, долг числится с P8 и ни один пак после P7 его не взял. + +**Состав:** + +1. **Строка 202 — живой сквозной прогон через API.** ⚠ **ТРЕБУЕТ СЛОВА ВЛАДЕЛЬЦА: прогон ПЛАТНЫЙ.** + Всё после «прогон стартовал и остановился» покрыто батареей против живого Postgres, но с + движком-заглушкой; настоящий манифест, сайдкар банка и причины флагов будут ПЕРВЫМИ данными, + форму которых платформа не сочинила сама. Замер 31.08 на десятиглавой книге: $0.436110. + Живой блокер один и он операционный ($0): `TM_PLATFORM_ENGINE_KEYS_PATH` абсолютным путём на уже + заполненный файл. +2. **Дверь выдачи — `createExport`/`getExport`.** ⚠ Слово владельца 30.08: дверь ВСЕГДА строит файл — + отказ пользователю не отдаётся, неполная книга уходит с пометкой, то есть дверь зовёт + `tmctl build --partial`; отказ по умолчанию остаётся операторской ручкой CLI. Требует минора + канона — значит контрактное касание планировать вместе. +3. **`PD-424` — терминальная ручка для живого прогона с заблокированной расплатой** (`major`, + половина «невидим» вылечена P12, половина «ручки нет» стоит). `run abandon` ветвится по + `runs.finished_at` и на живом прогоне уходит в живую ветку; `AbandonRun` отказывает над попыткой, + ещё называющей юнит. Это НОВАЯ разрушительная операторская поверхность над деньгами — её дизайн + (кто вправе звать, чем доказывается отсутствие процесса, что если процесс вернётся) назвать в паке + явно. +4. **ДОФИКС предыдущего пака — одним пунктом** (D39.188 п.5а): записка зоны о предусловии хоста + различает хосты ИМЕНЕМ МАШИНЫ, а имя у этого хоста то же самое при противоположных условиях + (`~/go/bin` существует и держит `sqlc`, `make tools-check` на дефолтном PATH падает, сокет 55433). + Различает пользователь, а не хост. + +**ЧТО НАМЕРЕННО НЕ БЕРЁМ:** +- **`PD-410`** (полоса против движкового плана) — архитектурное, направление есть (D39.165 §1), + но лечение требует либо передавать движку план работ, либо выводить total полосы из движкового + плана; это отдельный пак по слову оркестратора 28.08 и он крупнее двери. +- **`PD-412`/`PD-413`** (LATERAL в полосном агрегате) — контенция, не корректность денег. +- **`PD-386`/`387`/`389`/`390`/`392`** (такт свипа, телеметрия, метрики без ручки) — класс «операторская + поверхность», просится отдельным паком наблюдаемости; смешивать с дверью выдачи значит разбавить + оба. +- **`PD-439`** и правило ухода из класса — решение ОРКЕСТРАТОРА, не зоны; оно моё, а не паковое. + +## 3. ЧТО ОСТАЁТСЯ НА ВЛАДЕЛЬЦЕ — три решения, без которых состав неполон + +1. **Санкция на платный сквозной прогон** (пункт 1 платформы). Без неё платформенный пак теряет + половину: батарея против заглушки уже есть, а форму настоящих данных заменить нечем. +2. **Семантика переноса слота** (открыто с 03.09). Пока не решена, `--max-units` держит слоты, а не + деньги; замер: грант 2 оплачивает 4 юнита, и флагнувшийся без текста юнит пере-оплачивается каждой + покупкой. +3. **Строка 140 — банковый контур в shipping-c1**: включить (двигает промпт драфта ⇒ пере-покупка) + либо поправить декларацию.