diff --git a/docs/CONTRACT_BATCH_SESSION_PROMPT.md b/docs/CONTRACT_BATCH_SESSION_PROMPT.md index 59b13817..0f3d5c93 100644 --- a/docs/CONTRACT_BATCH_SESSION_PROMPT.md +++ b/docs/CONTRACT_BATCH_SESSION_PROMPT.md @@ -71,26 +71,43 @@ D39.138): ядро контракта здорово, дефекты сосре класс 1 (детерминированные — вход/счёт) — конкретика максимальная; класс 2 (модельные — прескрин / отказ провайдера / фильтр) — ОДИН грубый код на весь класс, без вариации между попытками (К-9: `rejected` + грубый код, 12-й статус НЕ заводить). +- **В-6:** `run-options` и 409 на старте прогона получают `blocked: {code, book_id}` — почему вторая + книга не стартует (D39.138 п.2з; в 0.2.3 поля НЕТ — заводишь ты). **К-13-остаток:** описание + `paused_reason` `:879` «null in every other state» противоречит ратифицированному «paused+null» — + поправить (D39.138 п.4). - **Жанр — выкинуть** из `BookIntake` и `Book` (Б-23; остальные половины удаления — строка 184, не твои). - **Экспорт остаётся** и получает состояние отказа (Б-4: `state` вместо булева `ready`, `failure_code`, `expires_at`, эхо формата, правило доступа к ссылке — ПТ-34). -- **Б-19:** запрет клиентской служебной метки «Глава {n}» СНЯТЬ (противоречит решению владельца 09.08 — - это ратифицировано); а вот `title_raw`/`kind`/структурная версия — ВЫБОР ТВОЙ из двух названных форм - (заложить формой сейчас ЛИБО явно передать дизайн-паку 161 с записью в компаньоне) — аргументируй. +- **Б-19:** запрет клиентской служебной метки «Глава {n}» СНЯТЬ (ратифицировано, решение 09.08). + ⚠ Не путать две вещи: `title_raw`/`kind` — ВЫБОР ТВОЙ (заложить формой сейчас ЛИБО явно передать + дизайн-паку 161 записью в компаньоне — аргументируй); **структурная ВЕРСИЯ — обязательна батчу** + (Б-7, §5 п.9: версия в ответах и `hello`, `410` на исчезнувшую главу, `If-None-Match`/304) — её в + 161 не сдвигать. - **Версия = 0.3.0**, обычный ломающий минор; право ломать в 0.x — весь бета-период (§8 п.17). - **НЕ заводить в батч:** `POST /books/{id}/parts` (строка 185, дизайн — пак 161) · историю прогонов (в МВП не нужна) · двухшаговую загрузку · ленту изменений структуры · поиск/фильтр · «грубую группу - статуса» — всё это записывается в компаньон НАПРАВЛЕНИЯМИ с номерами строк бэклога (дисциплина Б-21). -- **Гейт на утечку конвейера** (тест по образцу языкового) — фронт-половина, тебе НЕ строить; в - компаньон записать само правило «на проводе нет имён стадий/волн и движковых словарей» как - ревью-вопрос каждой правки. + статуса». В компаньон они записываются НАПРАВЛЕНИЯМИ: где строка бэклога существует — с её номером + (185), где нет — с носителем «research/28 §5 „не в батч"» (строк под них сознательно не заводили; + выдумывать номера нельзя). +- **Не финализировать формы без источника (§5а-оговорка):** словарь ступеней замечаний НЕ проектировать + (К-6: владелец — «решим потом»), поля `BankTerm` НЕ добавлять (D39.136 п.4б) — чтения замечаний и + банка держать минимально-достаточными (Note.id/адресация и снимок подписи — Б-9/Б-14а — входят). +- **Гейт на утечку конвейера** (тест по образцу языкового) — фронт-половина, тебе НЕ строить (носитель — + пинг фронту 16.08 в `frontend/docs/frontend-PROGRESS.md`, исполнение при разморозке); ты записываешь + в компаньон само правило «на проводе нет имён стадий/волн и движковых словарей» как ревью-вопрос + каждой правки. +- **Граница «ровно так / сам» внутри пунктов §5:** ЧТО делать — ратифицировано; КАК выразить формой — + твоё везде, где §5/§8/D39.138 не фиксируют форму явно. Зависимость исполнения: словарь кодов (Б-1) + определи ДО формулировок Б-2/Б-3/Б-8/Б-14а — порядок списка §5 (Б-0 нулевым) этому не противоречит. ## 4. Реши сам и аргументируй в отчёте Точные имена полей и значений словаря кодов (класс 1 — из реальных причин `fail()` платформы, читай код) · формы схем (пять конвертов списков на `allOf` — §5а «слить формально») · состав и глубина резки §5а (мёртвые поля/кадры — с обоснованием на каждое) · как записать семантику сжатия и условных -чтений (шаги 1–2 §5б — В спеку, не в зонный док) · формулировки всех описаний. Совет-приор (опровергается +чтений (шаги 1–2 §5б — В спеку, не в зонный док) · формулировки всех описаний · размер страницы +замечаний: замера масштаба нет (500 выбрано без числа — открытый вход строки 183), нового числа не +выдумывай — оставь с оговоркой в компаньоне. Совет-приор (опровергается аргументом): для правил, которые OpenAPI не выражает (межполевые инварианты, условная обязательность), образец уже есть в спеке — `BankDecision.dst` через `if/then` плюс прозу; помни улику К-11: генераторы `if/then` игнорируют, значит правило обязано жить и словами для клиента. @@ -112,12 +129,15 @@ D39.138): ядро контракта здорово, дефекты сосре ../docs/architecture/14-api-contract/openapi.yaml --ruleset .spectral.yaml --fail-severity=warn` — exit 0 (предупреждение валит так же, как ошибка). Читать/запускать фронт-тулинг можно, писать в зону фронта — нет. -2. **Записка-план по §5** (норма D39.121): каждый пункт §5 research/28 (включая однострочники и §5а) - получает строку «исполнено, где / отказ, почему» — сдача = все ID с диспозицией; это же — - скелет твоего отчёта. Комплектность против заказа — механически, не по памяти. -3. **Предметные оси** (право снять/добавить свою — с аргументом): (а) «второй клиент» — сгенерируй - мысленно (или реально) клиента по своей схеме: не указывает ли она нарушить собственную прозу - (класс PD-172: порядок свойств `BookIntake` указывал класть файл вторым); (б) анти-утечка — греп +2. **Записка-план** (норма D39.121): каждый пункт §5 research/28 (включая однострочники и §5а) + И каждый подпункт §5(а)–(д) ЭТОГО промта (компаньон — половина заказа) получает строку + «исполнено, где / отказ, почему» — сдача = все ID с диспозицией; это же — скелет твоего отчёта. + Комплектность против заказа — механически, не по памяти. +3. **Предметные оси** (право снять/добавить свою — с аргументом): (а) «второй клиент» — РЕАЛЬНО + прогони генератор по своей схеме (`cd frontend && npx openapi-typescript ../docs/architecture/14-api-contract/openapi.yaml -o /tmp/schema-probe.ts` + — read-only использование фронт-тулинга, вывод вне зон): не указывает ли схема нарушить + собственную прозу (класс PD-172: порядок свойств `BookIntake` указывал класть файл вторым); + «мысленная генерация» исполнением не считается; (б) анти-утечка — греп финальной спеки по словарю конвейера (draft/edit/wave/stage/mined/ruby/finalizing и что найдёшь сам); (в) каждое «оставить как есть» в спорном месте несёт записанный контраргумент (анти-инерция). 4. **Заявление = команда:** каждое числовое/категорическое утверждение отчёта — с командой, которой