Issue the contract batch 0.3.0 session prompt with onboarding, ratified frames, freedom marking and an executed-verified lint gate; register both prompts as active

This commit is contained in:
heaven 2026-08-16 03:44:10 +03:00
parent c093504220
commit 058e2496ff
3 changed files with 141 additions and 2 deletions

View file

@ -0,0 +1,139 @@
# Промт: сессия БАТЧ 0.3.0 — ломающая правка контракта API v0 по принятому ревью (строка 183)
> Выдан оркестратором №17 16.08.2026 по ратификации D39.138 (приёмка контракт-ревью research/28;
> решения владельца 16.08 — его §8). Исполняет ОТДЕЛЬНАЯ сессия со своим онбордингом (норма D39.120 п.2).
> Запуск — по слову владельца.
## 0. Какую проблему ты решаешь и что решит твой результат
Проект — SaaS-перевод книг: движок (Go, `backend/`) ↔ платформа (control plane, `platform/`) ↔
веб-фронт (`frontend/`). Между фронтом и платформой стоит ратифицированный контракт **API v0**
(OpenAPI 3.1). Он рос точечными правками 0.2.0→0.2.3 под давлением строек, и целостного ревью не
имел. 1516.08 отдельная сессия провела такое ревью (`docs/research/28-contract-review.md` — ПРИНЯТ,
D39.138): ядро контракта здорово, дефекты сосредоточены там, где контракт писался вперёд без
потребителя — ошибки, поток, экспорт, замечания, глава. Владелец разобрал доклад вопрос-за-вопросом
и принял решения (§8 отчёта); оркестратор ратифицировал их нотой **D39.138 п.2**.
Твоя работа — **исполнить эти решения правкой спеки**: батч 0.3.0. Момент дешёвый и не повторится:
**платформа не отвечает на 8 операций из 16** (сервера за ними нет вовсе, а фронт заморожен и живёт
на моках), поэтому правка их формы сегодня стоит только правки документа. Сразу после тебя платформа строит читающую
поверхность (пак P7) **по твоей спеке** — каждый пропущенный тобой дефект она отольёт в код, миграции
и воркер, где он подорожает на порядок. Отнесись к каждой форме ответственно: этот документ — закон
для трёх зон.
## 1. Зона и git (читать ДО первой правки)
**Ты не коммитишь — лендит оркестратор.** Твоя зона записи — РОВНО три файла:
1. `docs/architecture/14-api-contract/openapi.yaml` — нормативная спека (канон);
2. `docs/architecture/14-api-contract/README.md` — компаньон (правится ВМЕСТЕ со спекой, §5 ниже);
3. `docs/archive/reports/CONTRACT_BATCH_0.3.0_REPORT.md` — твой отчёт (новый файл).
Всё остальное — read-only: код трёх зон читать можно и нужно, править нельзя. **Зеркало
`frontend/docs/api-contract/openapi.yaml` НЕ трогать** — зона фронта заморожена (D39.136 п.2), зеркало
синхронизируют лендинг и первое касание зоны; временное расхождение канона и зеркала — известное
состояние, не дефект (ратифицируется при лендинге). Чужие незакоммиченные файлы в дереве (живой
полигон: `eval/`, `docs/experiments/`, `docs/POLYGON_*`) не трогать. `.env` не читать. Никаких
`git add`/`commit`/`reset`/`checkout` — дерево остаётся как есть, git трогает только оркестратор.
## 2. Что читать (карта, ≤5 позиций; порядок важен)
1. **`docs/research/28-contract-review.md` — ЦЕЛИКОМ, это носитель твоего задания.** Состав и порядок
батча — §5 · что резать — §5а · транспорт/сеть — §5б · решения владельца — §8 · форма модели
ошибок — §8 п.4 и §8а · инструкции лендинга — §8б. ⚠ Ревью-шапка приёмки в голове файла несёт
ПОПРАВКИ (важнейшая: К-10 закрывается «НЕ строить» — пофазность у главы на провод не выносить,
это следствие Б-0) — читать тело через неё.
2. **D39.138 п.2 (живой `docs/architecture/05-decisions-log.md`, с хвоста)** — ратификация решений.
При расхождении формулировок research/28 и ноты побеждает НОТА.
3. **Канон 0.2.3 + компаньон** (`docs/architecture/14-api-contract/`) — целиком, до правок: ты обязан
знать, что ломаешь и почему оно было таким (у половины форм есть записанные обоснования — их
судьба решается, а не игнорируется).
4. Код трёх зон — по мере нужды, read-only. `file:line`-якоря отчёта research/28 — отправные точки,
**код первичен**: перед тем как записать в спеку факт о поведении сервера/клиента, открой место
и перепроверь (якоря могли уплыть).
5. `CLAUDE.md` (корень) — гардрейлы проекта; `docs/glossary.md` — жаргон.
## 3. Ратифицировано — делай РОВНО так (отступление = пинг владельцу, не тихая девиация)
Состав и порядок — **research/28 §5** (здесь не пересказывается — не дублировать носитель).
Несущие рамки из D39.138 п.2, которые обязаны выжить в любой твоей редакции:
- **Порядок исполнения не косметика:** Б-1 (модель ошибок) — ПЕРВОЙ: от словаря кодов зависят
формулировки Б-2/Б-3/Б-8/Б-14а/§8а.
- **Б-0:** конвейер уходит с провода. `Progress` → один счётчик до ближайшей остановки, знаменатель —
КУПЛЕННЫЙ объём (после подписи банка полоса заново); `finalizing` снять из словарей (устная фраза
владельца, не норма — §8 п.15); `verify_bank``stop_for_signing` без упоминания следующей фазы;
`TermOrigin`/`TermStatus` с провода снять; `Unit` описать без «edit unit» и «1.9 на главу»;
из ВСЕХ описаний вычистить конвейерные слова — описания компилируются в JSDoc клиента.
- **Б-1 — вариант B (§8 п.4 + §8а):** машинный `code` (двухуровневый: стабильный корневой +
расширяемый вложенный) + `request_id` (значение на сервере уже есть); `title`/`detail`
developer-facing, клиент НЕ показывает; серверная локализованная фраза — отдельным полем ТОЛЬКО
для неперечислимых причин; `errors[]` с указателем поля для валидации. Два класса конкретности:
класс 1 (детерминированные — вход/счёт) — конкретика максимальная; класс 2 (модельные — прескрин /
отказ провайдера / фильтр) — ОДИН грубый код на весь класс, без вариации между попытками (К-9:
`rejected` + грубый код, 12-й статус НЕ заводить).
- **Жанр — выкинуть** из `BookIntake` и `Book` (Б-23; остальные половины удаления — строка 184, не твои).
- **Экспорт остаётся** и получает состояние отказа (Б-4: `state` вместо булева `ready`, `failure_code`,
`expires_at`, эхо формата, правило доступа к ссылке — ПТ-34).
- **Б-19:** запрет клиентской служебной метки «Глава {n}» СНЯТЬ (противоречит решению владельца 09.08 —
это ратифицировано); а вот `title_raw`/`kind`/структурная версия — ВЫБОР ТВОЙ из двух названных форм
(заложить формой сейчас ЛИБО явно передать дизайн-паку 161 с записью в компаньоне) — аргументируй.
- **Версия = 0.3.0**, обычный ломающий минор; право ломать в 0.x — весь бета-период (§8 п.17).
- **НЕ заводить в батч:** `POST /books/{id}/parts` (строка 185, дизайн — пак 161) · историю прогонов
(в МВП не нужна) · двухшаговую загрузку · ленту изменений структуры · поиск/фильтр · «грубую группу
статуса» — всё это записывается в компаньон НАПРАВЛЕНИЯМИ с номерами строк бэклога (дисциплина Б-21).
- **Гейт на утечку конвейера** (тест по образцу языкового) — фронт-половина, тебе НЕ строить; в
компаньон записать само правило «на проводе нет имён стадий/волн и движковых словарей» как
ревью-вопрос каждой правки.
## 4. Реши сам и аргументируй в отчёте
Точные имена полей и значений словаря кодов (класс 1 — из реальных причин `fail()` платформы, читай
код) · формы схем (пять конвертов списков на `allOf` — §5а «слить формально») · состав и глубина
резки §5а (мёртвые поля/кадры — с обоснованием на каждое) · как записать семантику сжатия и условных
чтений (шаги 12 §5бВ спеку, не в зонный док) · формулировки всех описаний. Совет-приор (опровергается
аргументом): для правил, которые OpenAPI не выражает (межполевые инварианты, условная обязательность),
образец уже есть в спеке — `BankDecision.dst` через `if/then` плюс прозу; помни улику К-11: генераторы
`if/then` игнорируют, значит правило обязано жить и словами для клиента.
## 5. Компаньон — ВМЕСТЕ со спекой (не после)
(а) Снять опровергнутые утверждения: ответ §5 «добавлена волна → фронт не правится» (опровергнут
исполнением, Б-0) · «канала банка нет» §3 против собственной строки 267 (Б-7а) · resume-абзац
(Б-7а п.4: лечение «новый прогон с бОльшим потолком» существует). (б) Завести таблицу
«чтение → источник → строка бэклога» и правило «предупреждение о недостроенном несёт номер строки»
(Б-21). (в) Обновить провенанс-классы ✓/◆/○ под 0.3.0. (г) Приложение А (карта «код → фраза»):
структуру перевести на словарь кодов Б-1, СЛОВА не заполнять — фразы пишет владелец (строка 148).
(д) Генезис-прозу из спеки (история ратификаций, апологии RFC — §5а называет места) переносить в
компаньон, не удалять.
## 6. Мандат самопроверки — исполнением, не заявлением
1. **Линт (форма проверена исполнением 16.08):** `cd frontend && npx spectral lint
../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` указывал класть файл вторым); (б) анти-утечка — греп
финальной спеки по словарю конвейера (draft/edit/wave/stage/mined/ruby/finalizing и что найдёшь
сам); (в) каждое «оставить как есть» в спорном месте несёт записанный контраргумент (анти-инерция).
4. **Заявление = команда:** каждое числовое/категорическое утверждение отчёта — с командой, которой
получено; приёмка их пере-ранит.
5. Несогласие с ратифицированным решением — СТОП по этому пункту и пинг через владельца с аргументом;
у тебя есть право сказать «этого делать не надо» — но не право молча сделать иначе.
## 7. Эхо-протокол старта
Первый деливерабл — ≤10 строк: «что я понял: скоуп / инварианты / чего НЕ делаю». Расхождение чинится
на минуте пять, не на приёмке.
## 8. Сдача
Отчёт `docs/archive/reports/CONTRACT_BATCH_0.3.0_REPORT.md`: записка-план §6.2 с диспозициями ·
спорные формы с вариантами и твоим выбором · **obstacle reporting — что НЕ удалось/не сделано и
почему (обязательная секция)** · дифф-сводка «было → стало» по операциям. Без саги. Дерево оставить
незакоммиченным. Вопросы и конфликты промта с кодом/доками — пинг оркестратору через владельца,
НЕ интерпретация.

File diff suppressed because one or more lines are too long

View file

@ -17,7 +17,7 @@
- `research/` — фактура ресёрчей 0128; у принятых — ревью-шапки, часть тел под ⚠ superseded: **читай баннер прежде содержимого**. Ключевые для навигации: 15 голос · 16 ридер-IDE · 17 внешняя критика · 18 рычаги качества · 19 нарезка · 20 банк-майнинг · 21 обзор транспорта · 22 доменные харнессы · 23 шов движок↔платформа (транспорт superseded D39.106) · 25 холодное ревью шва — форма D39.106, отвергнутые альтернативы, требования к эмиттеру (читать перед любым кодом стыка) · 24 арбитраж банка (ПРИНЯТ D39.102: консилиум закрыт классом, вход фикс-пака банка — §G) · 26 официальные практики Anthropic (D39.121: записка-план, сниппеты хендоффов, карта «уже делаем/перенять») · **28 контракт-ревью API v0 (ПРИНЯТ D39.138: решения владельца 16.08 — §8, состав батча 0.3.0 — §5; НОСИТЕЛЬ для исполняющих сессий, читать оригинал, не пересказ)**.
- [PROGRESS.md](PROGRESS.md) — журнал: CURRENT-STATE + **ЕДИНЫЙ БЭКЛОГ** (единственный трекер) + живой хвост хроники. НЕ источник решений.
- `scripts/counts.py`**производные числа доков считаются им, а не руками** (голова по трём носителям · счёт очереди и зон · вес открытых строк регистра платформы · полнота реестра нот); `--check` даёт ненулевой код на расхождении; `--lint` — линтер file:line-якорей живых доков (D39.126). Его же зовёт зонный хук `scripts/githooks/pre-commit` при коммите, задевающем D-лог или PROGRESS — предупреждает, не блокирует. Заведено по D39.112 п.5б: голова отставала трижды у трёх разных оркестраторов.
- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · **Контракт-ревью ОТРАБОТАЛО и ПРИНЯТО** (D39.138; отчёт [research/28-contract-review.md](research/28-contract-review.md) — носитель решений владельца §8 и состава батча 0.3.0 §5; промт в `archive/prompts/`; следующий промт — спек-сессия батча 0.3.0, очередь №17) · **Полигон: [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md)** — фаза Д доводки эксп-22/23 ИДЁТ (заказ владельца 10.08, потолок фазы $4.50; выводы 22/23 заморожены до неё) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (отложен) . **Фронт: ЗОНА ЗАМОРОЖЕНА (D39.136 п.2)** — S4 ИСПОЛНЕН и ПРИНЯТ (D39.135, лендинг `267aa35`; контракт 0.2.3 в каноне; промт в `frontend/docs/archive/`); разморозка = лендинг P7 + гейт S5 (~~В-10~~ закрыт 16.08 «вежливость» · фразы В-11 — форма из ревью 28: клиент рисует по машинному `code`, после батча 183); живой smoke против дев-стенда легитимен и во фризе; фикс-лист ФС — запись приёмки 15.08 в зонном журнале · **Платформа: активного промта НЕТ** — P6 + дофикс ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.132, промты в `platform/docs/archive/`); следующий пак — P7 (читающая поверхность + форвард-половина 0.2.3: чтение `title` и проекция `reject_reason`, D39.135 п.2в + хвосты D39.134 п.4), промт — очередь №17 · **Бэкенд: активного промта НЕТ** — пере-пин цен DeepSeek ИСПОЛНЕН и ПРИНЯТ (D39.137, лендинг `76049bb`; промт в `archive/prompts/`), потолки снова защищают; `tmctl migrate` — D39.134 (`d55edd4`), деплой эмиттер-бинаря разблокирован. Эмиттер шва ИСПОЛНЕН и ПРИНЯТ (D39.131, промт в архиве). Все ОТРАБОТАННЫЕ промты — в `archive/prompts/`, отчёты с ревью-шапками — в `archive/reports/`; статусы паков — CURRENT-STATE и D-лог, здесь не дублируются. Зонные журналы фронта/платформы — `frontend-PROGRESS.md` / `platform-PROGRESS.md` в их зонах (прогресс зон только там, D39.100).
- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · **Батч 0.3.0: [CONTRACT_BATCH_SESSION_PROMPT.md](CONTRACT_BATCH_SESSION_PROMPT.md)** — ВЫДАН 16.08 (строка 183; исполняется ПЕРВЫМ — P7 строит читающую поверхность уже по 0.3.0; носитель состава — [research/28-contract-review.md](research/28-contract-review.md) §5/§8, ревью принято D39.138, его промт в `archive/prompts/`) · **Полигон: [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md)** — фаза Д доводки эксп-22/23 ИДЁТ (заказ владельца 10.08, потолок фазы $4.50; выводы 22/23 заморожены до неё) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (отложен) . **Фронт: ЗОНА ЗАМОРОЖЕНА (D39.136 п.2)** — S4 ИСПОЛНЕН и ПРИНЯТ (D39.135, лендинг `267aa35`; контракт 0.2.3 в каноне; промт в `frontend/docs/archive/`); разморозка = лендинг P7 + гейт S5 (~~В-10~~ закрыт 16.08 «вежливость» · фразы В-11 — форма из ревью 28: клиент рисует по машинному `code`, после батча 183); живой smoke против дев-стенда легитимен и во фризе; фикс-лист ФС — запись приёмки 15.08 в зонном журнале · **Платформа: активного промта НЕТ** — P6 + дофикс ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.132, промты в `platform/docs/archive/`); следующий пак — P7, **промт ВЫДАН 16.08**: `platform/docs/PLATFORM_P7_SESSION_PROMPT.md` (читающая поверхность по 0.3.0 + модель ошибок + форварды title/reject_reason + PD-104; ⚠ запуск ПОСЛЕ лендинга батча 0.3.0 — предусловие §1 промта) · **Бэкенд: активного промта НЕТ** — пере-пин цен DeepSeek ИСПОЛНЕН и ПРИНЯТ (D39.137, лендинг `76049bb`; промт в `archive/prompts/`), потолки снова защищают; `tmctl migrate` — D39.134 (`d55edd4`), деплой эмиттер-бинаря разблокирован. Эмиттер шва ИСПОЛНЕН и ПРИНЯТ (D39.131, промт в архиве). Все ОТРАБОТАННЫЕ промты — в `archive/prompts/`, отчёты с ревью-шапками — в `archive/reports/`; статусы паков — CURRENT-STATE и D-лог, здесь не дублируются. Зонные журналы фронта/платформы — `frontend-PROGRESS.md` / `platform-PROGRESS.md` в их зонах (прогресс зон только там, D39.100).
- Зоны фронта (чужие, читать при касании стыка; каждая ведёт СВОЙ зонный бэклог — единый бэклог их строк не принимает, D39.84): [../frontend/](../frontend/) — веб-интерфейс: промт фронт-сессий S0S7 + [STACK_DECISIONS.md](../frontend/docs/STACK_DECISIONS.md) (пины версий точными числами и ловушки, сверены с вебом 02.08) + [BACKLOG.md](../frontend/docs/BACKLOG.md) · [../platform/](../platform/) — SaaS control plane: README + [BACKLOG.md](../platform/BACKLOG.md) (П-1..П-14) + `docs/` (зонный журнал `platform-PROGRESS.md` · регистр дефектов · архив промтов P0P5).
- `archive/` — история ([правила архива](archive/README.md)): закрытые промты (`prompts/`) · отчёты с ревью-шапками (`reports/` — на них ссылаются приёмки) · исполненные арх-доки (`architecture/`) · слайсы хроники `PROGRESS-*.md`. Инструкции оттуда не исполнять.
- Диаграммы: [../backend/docs/components.puml](../backend/docs/components.puml) · [../backend/docs/pipeline.puml](../backend/docs/pipeline.puml) — дом рядом с кодом (D39.80), правятся бэкендом одним коммитом с кодом; вручную НЕ рендерить (владелец смотрит PlantUML-расширением VS Code).