# TextMachine — документация Проект: издательский художественный перевод крупных текстов (книги, ранобэ, вебновеллы) мультиагентным пайплайном поверх LLM API; **пара языков — данные, не код**, сегодня боевая zh→ru. Go-бэкенд + веб-фронт ридер-IDE (Ф3) + платформа (SaaS control plane, `platform/`, D39.81). Цели и мерило — канон в [../CLAUDE.md](../CLAUDE.md); онбординг сессий — там же. Стартовый бриф владельца: [../START_PROMT.MD](../START_PROMT.MD) — **живой документ**, его V-идеи разобраны в реестр требований (ниже). **Состояние проекта НЕ здесь** — кроме таблицы активных промтов ниже, и это осознанное исключение: она отвечает на вопрос «какой файл мой», без которого холодная сессия выбирает роль сама (проверено слепым замером входа). Всё остальное состояние — Очередь и курс — CURRENT-STATE в шапке [PROGRESS.md](PROGRESS.md), а долг — единый бэклог [BACKLOG.md](BACKLOG.md); решения — [architecture/05-decisions-log.md](architecture/05-decisions-log.md) (при конфликте с любым доком побеждает он). Эта страница — только карта «что где лежит». ## Карта - [glossary.md](glossary.md) — жаргон и сокращения (D-номер, паки, банк, голден, K/DC/H/L…) одним экраном. - [product-requirements.md](product-requirements.md) — реестр «что продукт обязан уметь»: производное живого брифа владельца и его находок, статусы сверены кодом. - `architecture/` — синтез и контракты: - [05-decisions-log.md](architecture/05-decisions-log.md) — **источник истины по решениям**: ратифицированный контракт, при конфликте побеждает он. Дисциплина чтения (грепать номер, не читать целиком, баннер прежде тела) — в каноне `../CLAUDE.md`, здесь не дублируется. Статус и тело ЛЮБОГО номера одним хопом — реестр [05-decisions-index.md](architecture/05-decisions-index.md) (все ноты, колонка тем для грепа «какой закон по X»). - [09-target-architecture.md](architecture/09-target-architecture.md) — целевая 7-слойная архитектура (статус стройки — шапка-таблица; §3 — карта находок H/L) · [10-prompt-architecture.md](architecture/10-prompt-architecture.md) — промпт-слой · [12-go-style-notes.md](architecture/12-go-style-notes.md) — норматив общности §0 · [13-tech-debt-anchors.md](architecture/13-tech-debt-anchors.md) — якоря техдолга + археология выселенных строк бэклога §Б-* (справочник к бэклогу, НЕ трекер) · [14-api-contract/](architecture/14-api-contract/) — **контракт API v0 фронт↔платформа (D39.99)**: нормативная спека OpenAPI 3.1 (типы фронта генерятся из неё) + компаньон-README с провенансом каждой строки (легенда — в нём самом; зонная копия `frontend/docs/api-contract/` ОТСТАЛА на `0.2.3` при каноне `0.10.0` (испр. 05.09; ⚠ версию канона брать ФАЙЛОМ — `grep '^ version:' architecture/14-api-contract/openapi.yaml`, число здесь стареет) и зеркалом сегодня НЕ является — зона заморожена, синк при разморозке; читать ТОЛЬКО канон). - Топикальные входы (D39.126; НЕ источники истины, при конфликте побеждает D-лог): [15-money-path.md](architecture/15-money-path.md) — деньги от гранта до settle одним маршрутом · [16-events-emitter.md](architecture/16-events-emitter.md) — сборка-норматив эмиттера шва — обязательное пре-чтение перед кодом эмиттера · **[17-seam-inbound-law.md](architecture/17-seam-inbound-law.md) — закон ВХОДНОЙ двери шва движок↔платформа — РАТИФИЦИРОВАН D39.156: семь пунктов дисциплины, двери встают паками без нового решения владельца** · **[18-bank-ontology.md](architecture/18-bank-ontology.md) — онтология банка памяти (РАТИФИЦИРОВАНА D39.158): три роли носителей, единственные писатели, дисциплина проекции — обязательное пре-чтение перед кодом, трогающим банк или его артефакты** · [STACK.md](STACK.md) — карта «роль → модель → конфиг → квирки». - Исторические, читать через ⚠-баннеры: [01-decisions.md](architecture/01-decisions.md) (Р1–Р10) · [02-mvp-plan.md](architecture/02-mvp-plan.md) · [03-implementation-notes.md](architecture/03-implementation-notes.md) · [04-unhappy-paths.md](architecture/04-unhappy-paths.md) · [06-memory-risk-registry.md](architecture/06-memory-risk-registry.md). - `experiments/` — эмпирика полигона: [00-provider-quirks.md](experiments/00-provider-quirks.md) — **читать перед любым вызовом провайдера**; [08-cost-model-v2.md](experiments/08-cost-model-v2.md) — денежная модель; [09-pilot-protocol.md](experiments/09-pilot-protocol.md) — пилот Ф2.5; остальные — отчёты экспериментов. ⚠ **У каждого отчёта статус в его ревью-шапке: читай шапку прежде тела** — она первична и говорит, ратифицированы выводы или заморожены. - `research/` — фактура ресёрчей; у принятых — ревью-шапки, часть тел под ⚠ superseded: **читай баннер прежде содержимого**. Ключевые для навигации: 15 голос · 16 ридер-IDE · 17 внешняя критика · 18 рычаги качества · 19 нарезка · 20 банк-майнинг · 21 обзор транспорта · 22 доменные харнессы · 23 шов движок↔платформа · 25 холодное ревью шва — **читать перед любым кодом стыка** · 24 арбитраж банка · 26 официальные практики Anthropic · 28 контракт-ревью API v0 — **носитель для исполняющих сессий, читать оригинал, не пересказ** · 27 детекция глав · 33 техдолг бэкенда — **основание курса перекроя; диспозиции ратифицированы D39.224, адреса §3 читать через эррату шапки** · **34 банк памяти и качество перевода — что механизм консистентности держит, чего не держит и что доработать; читать через ревью-шапку (14 находок из 15 отвергнуты верификацией по ВЕСУ, синтез написан после неё)**. - [PROGRESS.md](PROGRESS.md) — журнал: CURRENT-STATE + состояние паков + живой хвост хроники и зонные секции «Бэкенд»/«Полигон». НЕ источник решений. - [BACKLOG.md](BACKLOG.md) — **ЕДИНЫЙ БЭКЛОГ проекта** (единственный трекер; «строка N» — стабильный ID). Вынесен из `PROGRESS.md` 06.09 (D39.218; исключение из дословности названо в шапке того файла); зонные бэклоги — свои и с другими ID (`П-N`, `Ф-N`, `PD-N`). - **Тулчейн на чистой машине.** Версии не здесь — их носители: `backend/Makefile` и `platform/Makefile` (`GO_MIN_VERSION`, `GOLANGCI_VERSION`), `frontend/package.json` (`engines`), `platform/docs/STACK_DECISIONS.md` §«Postgres на стенде без root», `eval/requirements.txt` + `eval/.python-version`. Здесь только то, чего нет нигде: ставим в `~/.local/opt/<инструмент>` с симлинком в `~/.local/bin` (он уже в `PATH`), берём **последний патч пинованного минора, а не следующий минор** — линтер пинован точным равенством и разъедется. Root требуют ровно два пакета: `build-essential` (без C-компилятора нет `-race`, а снять `-race` значит выдать отсутствие тулчейна за зелёный прогон — см. комментарий над целью `test` в `backend/Makefile`) и `python3-venv` (в системном питоне нет `ensurepip`, и установка полигона по `eval/README.md` обрывается на первом шаге). - [orchestrator-norms-scratchpad.md](orchestrator-norms-scratchpad.md) — **рабочий чек-лист смены №23**: стоячие правила владельца на луп, механическая сверка перед выдачей промта и перед лендингом, живая раскладка слотов зон и журнал выдач. ⚠ Копий норм не несёт — они в `ORCHESTRATOR_SESSION_PROMPT.md`; умирает вместе с очередью. - [NEAR_TERM_PLAN.md](NEAR_TERM_PLAN.md) — **горизонт на 3–5 ближайших промтов**: порядок, зоны и чем каждый заперт. Рабочая записка оркестратора, живёт до исполнения. ⚠ Не трекер и не реестр: долг — в `BACKLOG.md`, решения — нотами. - `scripts/counts.py` — **производные числа доков считаются им, а не руками** (голова по трём носителям · счёт очереди и зон · вес открытых строк регистра платформы · полнота реестра нот); `--check` даёт ненулевой код на расхождении; `--lint` — линтер file:line-якорей живых доков (D39.126). Его же зовёт зонный хук `scripts/githooks/pre-commit`: **`--lint` якорей — при ЛЮБОМ коммите с непустым индексом, включая коммиты чистого КОДА (гейт по составу снят 21.08: цели якорей живут в коде, и двигает их кодовый коммит; шумовое следствие — строка бэклога 244); `--check` чисел и головы — только при коммите с D-логом или PROGRESS** (оба `--from-index`, предупреждает, не блокирует). ⚠ **Гейт бутстрапится ЧУЖОЙ зоной — это ДЕФЕКТ, а не порядок работы (строка бэклога 220):** судит он `CLAUDE.md` и доки трёх зон, а в `.git/hooks/` его кладёт единственный установщик `frontend/scripts/githooks/install.mjs`, то есть побочный эффект `npm install` в зоне, которая ЗАМОРОЖЕНА. На свежем клоне `.git/hooks/` пуст и гейт молчит, не проверив ничего. Пока строка открыта, бутстрап делается руками (`node frontend/scripts/githooks/install.mjs`) — и это ВРЕМЕННАЯ мера, которую строка 220 закрывает, а не способ жить дальше. ⚠ Шапка систематически отстаёт от хвоста у ЛЮБОГО автора — потому проверка механическая, а не «посмотрю внимательно». - **Активные хендофф-промты — какой файл ТВОЙ** (состав обновляется при каждом лендинге, D39.80; хроника, причины и статусы РАБОТ — CURRENT-STATE и D-лог): | Роль | Активный промт | Статус | |---|---|---| | **Бэкенд · КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО** | [BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md](BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md) | ✍️ **написан 11.09**, выдаётся `textmachine-b1`. Предмет решён владельцем (`D39.204`): отказ резервации на РЕТРАЕ деградирует во флаг с отдельной причиной. Сегодня он уходит наверх из цикла попыток раньше `UpsertChunkStatus` ⇒ юнит виден `pending` НАВСЕГДА, прогон уходит `exit 4` при доставленных купленных юнитах. Платформенная половина — отдельным промтом, акт ОДИН на две. $0 | | **Сквозной · ХОЛОДНЫЙ ПРОГОН B** | [COLD_RUN_B_SESSION_PROMPT.md](COLD_RUN_B_SESSION_PROMPT.md) | ✍️ **написан 11.09**, выдаётся `textmachine-82`. ⛔ **ПЛАТНЫЙ, санкция владельца получена** («разрешаю»): ждём ≈$0.42, кап ≈$2.5 холда. Покупает первое ЖИВОЕ исполнение миграций `v17`+`v18`, числа консистентности с прогона (а не с пере-скана), платформенный пак сквозь и вторую точку по денежной дыре с ПРЕ-РЕГИСТРИРОВАННЫМ знаменателем (по ЕДИНИЦАМ: на A — 4 из 17 = 23.5 %). Кода не правит | | Оркестратор | [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) | роль и нормы; счётчик роли — CURRENT-STATE | | Бэкенд · ДВЕ ОСТАНОВКИ | активного НЕТ | пак ОТМЕНЁН ВЛАДЕЛЬЦЕМ 10.09 до лендинга — акт **D39.240**; промт в `archive/prompts/` с баннером. Причина — размах правки, не качество. ⚠ Предмет ЗАМЕНЁН и сузился: остановка остаётся жёсткой, **деньги терять допустимо**, но она обязана быть КОРРЕКТНОЙ (без гонок, без половинчатых состояний, верное возобновление). ⭐ Пак успел купить `D39.236`–`D39.238` и строку **385** | | Платформа · ДВЕ ОСТАНОВКИ | активного НЕТ | пак ОТМЕНЁН ВЛАДЕЛЬЦЕМ 10.09 до лендинга — акт **D39.240**; промт в `archive/prompts/` с баннером. Причина — размах правки, не качество. ⚠ Предмет ЗАМЕНЁН и сузился: остановка остаётся жёсткой, **деньги терять допустимо**, но она обязана быть КОРРЕКТНОЙ (без гонок, без половинчатых состояний, верное возобновление). ⭐ Пак успел купить `D39.236`–`D39.238` и строку **385** | | Бэкенд · ВЫЗОВ, КОТОРЫЙ ОБОРВАЛИ МЫ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ 10.09** — акт **D39.232** (`3f05fab`, 28 путей, $0); промт в `archive/prompts/` с баннером-исходом. Движок перестал платить дважды за одну генерацию; закрыты строки 360 · 369 · 78. Восемь кругов ревью; приёмка двумя рубежами нашла пять выживших мутаций на носителях ВИДИМОСТИ денег. Живое из остатков — **375** · **376** · **377** (⚠ форма испр. 10.09: здесь стоял ДИАПАЗОН «374–377», а 374 закрыта — диапазон о закрытии ряда внутри себя не узнаёт, поэтому в этой таблице только перечисления) | | Бэкенд · ДВИЖОК УЖЕ ЗНАЕТ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДВУМЯ ДОФИКСАМИ 08.09** — акт **D39.228** (`2b6f1f4`, 21 путь); промт в `archive/prompts/` с баннером-исходом. Закрыты строки 355 · 357 · 358; у **253** и **312** закрыта ДВИЖКОВАЯ половина, платформенная жива (испр. 08.09 по кросс-модельному ревью: акт объявил обе закрытыми целиком). Живое из не взятого — **362** (ремонт против ремонта, 77 % денег чанка) и **363** (текстовый сайдкар молчит о неполноте); **360** ждёт слова владельца по денежной половине | | Бэкенд · КОНСИСТЕНТНОСТЬ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 07.09** — акт **D39.222**; промт в `archive/prompts/` с баннером исхода. Строки 267 и 318 закрыты, у 320 исполнена половина (а). Живой остаток зоны ЗАКРЫТ актом **D39.226** (строки 333–338); живое — **353** · **354** · **356** · **359** (⚠ форма испр. 10.09: стоял диапазон «353–359», а 355 · 357 · 358 закрыты) | | Бэкенд · ПРАВДА ОПЕРАТОРУ И ДЕНЬГИ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 08.09** — акт **D39.226**, живой платный прогон; промт в `archive/prompts/` с баннером-исходом | | Бэкенд · ГЕЙТ ВМЕСТО ПРОЗЫ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 07.09** — акт **D39.225**; промт в `archive/prompts/` с баннером-исходом | | Бэкенд · КОНСИСТЕНТНОСТЬ, КОТОРУЮ МОЖНО ПРЕДЪЯВИТЬ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 11.09** — акт **D39.249** (`0997e41`, 26 путей, $0); промт в [archive/prompts/](archive/prompts/BACKEND_CONSISTENCY_YOU_CAN_SHOW_SESSION_PROMPT.md) с баннером-исходом. ⭐ **Приоритет №1 впервые ИЗМЕРИМ по отгруженному тексту.** ⛔ Первый круг приёмки — шесть выживших посадок из шести; порядок колонок ратифицирован и отменён в тот же день (правило и два триггера — ряд **406**). Каталог **169/169 RED, выживших 0**. Живое: **407** и **419** наполовину · **408** с опровергнутым мотивом · **409** не тронут · новые **425–427** · **428** · **431** · **432** | Бэкенд · СТРУКТУРА ГЛАВ (ДИЗАЙН) | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ 11.09 БЕЗ СХОДИМОСТИ, правилом остановки** — акт **D39.245** (`1d2fab6`, 3 пути, $0); результат — `backend/docs/CHAPTER_STRUCTURE_DESIGN.md` (2062 строки), статус ПРЕДЛОЖЕНИЕ до пака стройки. Глава становится ИДЕНТИЧНОСТЬЮ; предметная часть устояла в четырёх кругах опровержения, механика исполнения — нет, и пак стройки обязан начать с прогона миграционной механики ОПЫТОМ. Промт был — [CHAPTER_STRUCTURE_DESIGN_SESSION_PROMPT.md](archive/prompts/CHAPTER_STRUCTURE_DESIGN_SESSION_PROMPT.md), выдан 11.09 (актуализирован пятью врезками + 19 правок по опровергателю: мёртвые адреса, две таксономии осей, три «уже построено», собственная зона записи `backend/docs/` с дизайном-оф-рекорд `D15.2` и прибором shiftmap). ⚠ **ПРОЕКТИРОВАНИЕ, НЕ СТРОЙКА** (`D39.136` п.3): дизайн окна большой пере-нарезки — чем адресуется глава и развязка чанкера (161) · карта осей сдвига · банк-окна на chapter-ID · контент-адресуемый resume `D15.2` · IR/адаптеры/индуктор · правило заголовка и не-CJK путь (303) · гранулярность EPUB (302) и выдача (283). Снимает временный отказ интейка книге из одной главы (`D39.221`). Пак 1 «форматы и честный словарь» ОТРАБОТАН и ПРИНЯТ 06.09 — акт **D39.210**, промт в `archive/prompts/`. ⚠ **ПАК 2 (лексиконы не-CJK, корпус, замер оракулом) — НЕ НАПИСАН и ждёт файлов владельца** | | Бэкенд · ЗА ОДНУ ЕДИНИЦУ ПЛАТИМ ДВАЖДЫ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 11.09** — акт **D39.251** (22 пути, +947/−66, 8 новых тестовых, $0); промт в [archive/prompts/](archive/prompts/BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md) с баннером-исходом. ⭐ Наблюдаемость двойной оплаты построена, **лекарство лендится ВЫКЛЮЧЕННЫМ** и достаёт один случай из четырёх — условие включения в ряду **433**. ⛔ Посылка промта была ПЕРЕВЁРНУТА и снята зоной ДО первой правки (`empty` ×3 = 89 % потери, не `length`); `reasoning_tokens` ронял НАШ адаптер, а не вендор. | | Бэкенд · отозванный | активного НЕТ | пак КАЧЕСТВО написан и ОТОЗВАН до выдачи 05.09 (`archive/prompts/…_WITHDRAWN.md`): предмет дешевле пака — точность чекера уже измерена, пере-снять её стоит одной команды. Следующий пак — СТРУКТУРА ГЛАВ (решение владельца 05.09 «любая книга любого формата»), пишется | | Бэкенд · прежний | активного НЕТ | пак «денежный стоп» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.206** (`81a89e9` + `616a8e4`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **291** (флаг вместо клина, `D39.204`) · **294** (форма «сколько добавить», `D39.203`) · **296** (точечная перегенерация по промаху глоссария, после 295) | | Платформа · ОТВЕТ, НЕ ЗАВИСЯЩИЙ ОТ ВЕЗЕНИЯ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДВУМЯ ДОФИКСАМИ 11.09** — акт **D39.250** (`711569d`, 27 путей, 24 новых теста, $0), контрактный минор **0.15.0**; промт в [archive/prompts/](archive/prompts/PLATFORM_ANSWER_THAT_DOES_NOT_DEPEND_ON_LUCK_SESSION_PROMPT.md) с баннером-исходом. ⭐ Предмет ПЕРЕ-ОПРЕДЕЛЁН замером зоны ДО первой правки: не гонка, а ординарный путь. ⛔ Оба денежных предохранителя проверены не тем прибором; лечением стал СНОС $0-рецепта, а не починка. Закрыты `PD-448` · `PD-466` · `PD-162` · `PD-139` · `П-22` · `П-23`. Живое — эскроу `П-18` и одно названное слепое пятно (адрес вызова не пинится изнутри набора, который на хосте не бежит) | Платформа · ПРАВДА У ДВЕРИ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 11.09** — акт **D39.246** (`49f74d9`, 15 путей, $0). `PD-455` закрыт, `PD-162` наполовину у обеих денежных дверей, `PD-448` разобран и НЕ построен (четвёртый путь принят направлением, строит следующий пак вместе с минором **0.15.0**). ⛔ Приёмка нашла два дефекта ВНЕ карты автора: выживший мутант на единственной проводке `BooksDir` и тихо-зелёное в самом новом гейте. Живое — `PD-162` (эскроу), `PD-466`, `PD-139`. Промт был — [PLATFORM_TRUTH_AT_THE_DOOR_SESSION_PROMPT.md](archive/prompts/PLATFORM_TRUTH_AT_THE_DOOR_SESSION_PROMPT.md), выдан 11.09: `PD-455` (форма обещает то, в чём дверь откажет — точка роста `Blocked.code`, не закрытый enum вердикта) · `PD-448` (двойной клик по «продолжить» — **исследуй и предложи, НЕ строй**: все три законных пути требуют контрактного минора или миграции) · `PD-162` (прогон книги с исчезнувшим каталогом висит с холдом — валидация каталога ПРИ ДОПУСКЕ). ⛔ Свип сирот и потолок аплоадов СНЯТЫ подписанным пропуском: их гейт — открытая регистрация, которой в закрытой бете нет (`PD-175` + `D39.176` п.1) | | Платформа · РАЗРЕЗ ПРИЁМА И ПРАВДА О СЕБЕ | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ 08.09** — акт **D39.229** (`ddcbf0c`, 26 путей, $0); промт в `archive/prompts/` с баннером-исходом. Синхронный вход разреза под потолком, граница хвоста выведена из кода, зонный журнал и регистр приведены к правде (открытых 112 → 109, major 3 → 1). Живое из не взятого — строка **364** (потолок разрезов не есть потолок процессов движка) | | Платформа · ДЕНЬГИ И ПРАВДА | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ С ДОФИКСОМ 07.09** — акт **D39.221**, контрактный минор **0.13.0**; промт в `archive/prompts/` с баннером исхода. ⚠ **Синхронный разрез приёма остановлен правилом остановки и заландён построенным, но НЕ готовым** — десять пунктов несёт строка бэклога **332**, и она же заказ следующему паку зоны; ложный инвариант бюджета заландён осознанно (окно 8 с при дефолте в 16 минутах) | | Платформа · ФОРМА ЗАКАЗА | активного НЕТ | пак ОТРАБОТАН, ПРИНЯТ С ДОФИКСОМ и ЗАЛЕНДЕН 06.09 — акт **D39.208**, код + канон **0.11.0**; промт уведён в `archive/prompts/ORDER_FORM_SESSION_PROMPT_2026-09-05.md` с баннером исхода. ⚠ **НЕ построено, хотя заказывалось:** денежный ползунок на проводе объявлен, а отправить его нечем, и оценки под ВЫБРАННЫЙ заказ нет; «упрощение резюма» не сделано — обе позиции живут строками бэклога, брать их как новый пак СЛЕДУЮЩЕЙ сессии, не читать промт как задание | | Платформа · прежний | активного НЕТ | пак «пустить внутрь можно» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.201** (`7e2226a` + `3e84716`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **294** (зеркало словаря под минор потока) ⚠ (строка 293 — зона ОРКЕСТРАТОРА, не платформы: правило игнора общее для всех рабочих деревьев клона) | | **Полигон** | активного НЕТ | ⛔ **ЗОНА ВЫВЕДЕНА ИЗ СКОУПА СЛОВОМ ВЛАДЕЛЬЦА 11.09: «полигон это вообще не наш скоуп».** Все четыре её промта уведены в `archive/prompts/` с баннерами: [РЕМОНТ ПРИБОРА](archive/prompts/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md) (был готов и не выдан) · [ХОЛОДНЫЙ ПРОГОН A](archive/prompts/POLYGON_COLD_RUN_A_SESSION_PROMPT.md) (ОТРАБОТАН и ПРИНЯТ актом **D39.247** — строка 16 закрыта замером, книга доведена до файла за $0.419424) · [фаза Д](archive/prompts/POLYGON_EXP2223_REDO_SESSION_PROMPT.md) · [хендофф фазы Д](archive/prompts/POLYGON_PHASE_D_HANDOFF.md). ⚠ **Инструкции оттуда НЕ исполнять**; пере-открытие — только новым словом владельца. Ссылки на эти файлы из журнала решений и старых отчётов НЕ правлены сознательно: тела нот не переписываются. ⭐ Живое, что зона успела купить и что остаётся работой ДРУГИХ зон: ряды **413** (пин цены flash протух) · **414** · **415** (четверть денег купила пустоту) · **416** · **417** · **422** | | Фронт | активного НЕТ | **ЗОНА ЗАМОРОЖЕНА** (D39.136 п.2 + D39.147: разморозка отдельным словом владельца, не привязана к P7); перечень первого касания — в зонном журнале | | Контракт | активного НЕТ | канон — `architecture/14-api-contract/`; ⚠ версию брать ФАЙЛОМ (`grep '^ version:' openapi.yaml`), не отсюда: миноры ратифицируются D-нотами и их содержание грепается по реестру нот. | - Чужие зоны — фронт и платформа (читать при касании стыка; каждая ведёт СВОЙ зонный бэклог — единый бэклог их строк не принимает, D39.84): [../frontend/](../frontend/) — веб-интерфейс: зонный журнал `docs/frontend-PROGRESS.md` (прогресс зоны только там, D39.100) + промт фронт-сессий + [STACK_DECISIONS.md](../frontend/docs/STACK_DECISIONS.md) (пины версий точными числами и ловушки) + [BACKLOG.md](../frontend/docs/BACKLOG.md) · [../platform/](../platform/) — SaaS control plane: README + [BACKLOG.md](../platform/BACKLOG.md) + `docs/` (зонный журнал `platform-PROGRESS.md` · регистр дефектов · `STACK_DECISIONS.md` с рецептом стенда и инвентарём каналов шва · **[ENGINEERING_STANDARDS.md](../platform/docs/ENGINEERING_STANDARDS.md) — ратифицирован; КАЖДЫЙ промт платформенной сессии обязан на него ссылаться, отступление = пинг** · **[PLATFORM_DIRECTION.md](../platform/docs/PLATFORM_DIRECTION.md) — ратифицированное направление зоны: аутентификация, деньги, стандарты, скорость** · архив промтов). - `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), правятся бэкендом одним коммитом с кодом; не рендерить (гардрейл CLAUDE.md). ## Ключи провайдеров **Имена** переменных per-провайдер — поле `api_key_env` в `backend/configs/models.yaml` (носитель, который читает КОД, поэтому разойтись с реальностью резолва не может). У полигона свои дополнительные провайдеры — имена в его же скриптах, движковый носитель их не покрывает и не должен. **Наполненность** ключей — `.env` деплоя, его НЕ читать; при сомнении спрашивать владельца. ⚠ Ручной перечень здесь не держим: он уже лгал умолчанием — называл семь имён, когда в ходу было девять.