From 2bc5e130632613976f17fead648bf7e5f7456a93 Mon Sep 17 00:00:00 2001 From: heaven Date: Fri, 4 Sep 2026 03:10:49 +0300 Subject: [PATCH] Record the owner's sanction for paid test runs, and that the pack names the ceiling because the sanction did not --- docs/NEXT_PACKS_PLAN.md | 6 ++++-- docs/PROGRESS.md | 2 +- docs/architecture/05-decisions-index.md | 1 + docs/architecture/05-decisions-log.md | 12 +++++++++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/NEXT_PACKS_PLAN.md b/docs/NEXT_PACKS_PLAN.md index 1278e8c7..b0cac95a 100644 --- a/docs/NEXT_PACKS_PLAN.md +++ b/docs/NEXT_PACKS_PLAN.md @@ -104,8 +104,10 @@ ## 3. ЧТО ОСТАЁТСЯ НА ВЛАДЕЛЬЦЕ — три решения, без которых состав неполон -1. **Санкция на платный сквозной прогон** (пункт 1 платформы). Без неё платформенный пак теряет - половину: батарея против заглушки уже есть, а форму настоящих данных заменить нечем. +1. ~~**Санкция на платный сквозной прогон**~~ — **ДАНА 03.09 (`D39.189`):** «разрешаю платные прогоны + с ключами для тестов». ⚠ Потолок числом НЕ назван, поэтому его называет пак: оценка своим замером + + обязательный `--ceiling-usd` + правило «перелёт оценки — СТОП и пинг». Опора — холодный прогон + 31.08: $0.436110 на десяти главах полной цепью. 2. **Семантика переноса слота** (открыто с 03.09). Пока не решена, `--max-units` держит слоты, а не деньги; замер: грант 2 оплачивает 4 юнита, и флагнувшийся без текста юнит пере-оплачивается каждой покупкой. diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index ed2c6283..6a1388b3 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,6 +1,6 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-03, голова D39.188 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №22** (единственный носитель — здесь; роль передана 01.09, №21 закрыт нотой передачи D39.184). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ПЕРВЫМ:** (0а) **ревизия документации на ПРОТУХШЕЕ** — по всем зонам, не только тронутым; (0б) **планы доработок в БЭКЕНД и ПЛАТФОРМУ** по остатку бэклога и регистра; (0в) **вынос неактуального в АРХИВ** (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **88** живых доков в `docs/` против **198** заархивированных, 8 в `platform/docs`, 9 в `backend/docs` — ⚠ из 88 три ВРЕМЕННЫЕ (`DOC_CLEANUP_PLAN` · `DOC_REVISION_FINDINGS` · `DOC_REVISION_REFUTED`), они уедут в архив по закрытии разбора, то есть постоянных **85**; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 97 (major 3) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) РАЗРЫВ ЦИКЛА: книга не отдаётся файлом ПОЛЬЗОВАТЕЛЮ — открыта ПЛАТФОРМЕННАЯ половина.** Движок пишет файл с 30.08 (`tmctl build` — EPUB 3 + чистый txt, D39.175), и холодный прогон 31.08 предъявил это живьём: собранный EPUB настоящего перевода прошёл `epubcheck` 0/0/0/0 и передан владельцу. Открыто ровно одно: канон обещает `createExport`/`getExport`, а платформа их НЕ монтирует (смонтировано 15 операций из 20; нет также `getRun`, `updateBook`, `deleteBook`). Долг числится с P8 (`platform/BACKLOG.md` П-17), и НИ ОДИН пак платформы после P7 его не взял (проверка вместо ручного счёта, чтобы не гнило при каждом лендинге: `grep -rn 'createExport\|getExport' platform/internal/ --include=*.go` — пусто). **Слово «отдаёт результат» ложно по букве ТОЛЬКО платформенной половиной** (п.4) · **(2) ~~холодный прогон движка~~ ОТРАБОТАЛ 31.08, закрыт РЕШЕНИЕМ ВЛАДЕЛЬЦА «не доводить»** (отчёт — `archive/reports/COLDRUN_V16_REPORT_2026-08-31.md`, числа относятся к `065d8ac`). Потрачено **$0.436110** из санкции $0.80. ПРЕДЪЯВЛЕНО живьём: объёмный потолок · D39.158 ОБЕИМИ половинами (стоп и не-стоп) · exit 16 · строки 154/198/239/240. ⚠ **Причина большой доли редактора НЕ УСТАНОВЛЕНА** (каузальные истории и их снятие — §4 отчёта). Доля редактора идёт с ДВУМЯ знаменателями: **49.3%** от всего прогона ($0.214865 из $0.436110) и **81.3%** внутри порции П1 (⚠ ходившее «73%» — фантом, в отчёте его нет ни разу). Следующий шаг — контролируемая проба по ЧЕТЫРЁМ осям (роли осей и три требования, купленные ошибками этого прогона, — §14 отчёта; ось `stale` НЕДОСТИЖИМА — §10 там же). ⚠ **Цена: слово владельца 31.08 — ≈$0.60, потолок $0.80, ДЕСЯТЬ глав ПОЛНОЙ цепью включая редакторскую волну.** ⚠ **КЛЮЧИ: гейт снят словом владельца 30.08, разбор двух путей — D39.176 п.6.** Живое отсюда: конвенционного `.env` НЕТ НИ У ОДНОЙ книги корпуса (заполнены только `projects/textmachine/backend/.env` и `.../eval/.env`), поэтому прогон движка обязан передавать `--keys-file` абсолютным путём и только на `translate`; для п.3 нужен ДРУГОЙ файл — `TM_PLATFORM_ENGINE_KEYS_PATH`, тоже АБСОЛЮТНЫМ путём (`platform/internal/config/config.go`, греп `must be an absolute path`). Лечение операционное и $0 — направить переменную на уже заполненный файл; проверять ПРОГОНОМ, не чтением (гардрейл `.env`) · **(3) живой сквозной прогон через API платформы** — форма манифеста, сайдкара банка и карта причин флагов сочинены платформой САМОСТОЯТЕЛЬНО. ⚠ Уточнено 01.09: гейт СНЯТ холодным прогоном, и настоящие артефакты движка теперь ЕСТЬ (каталог `books/gu-zhenren/coldrun-v16/`), но сверка вышла ТОНКОЙ: на шов реально вышло **одно значение `flag_reason` из пятнадцати** (`sanitizer_stripped`), остальные четырнадцать по-прежнему только чтением кода, а манифест против `platform/internal/ingest/manifest.go` не сверялся вовсе · **(4) дверь выдачи** — строго ПОСЛЕ (3) (⚠ слово владельца 30.08: дверь ВСЕГДА строит файл — отказ юзеру не отдаётся, неполная книга уходит с пометкой, т.е. дверь зовёт `tmctl build --partial`; отказ по умолчанию остаётся операторской ручкой CLI; D29.1(б) «fail-closed» читать как «никогда молча» — честность несут пометки) · **(5) проводка `--max-units`** — снятие гейта, а не стройка: механизм в движке стоит (D39.170), живое основание гейта — `PD-422` · **(6) разморозка фронта** — ПОСЛЕ (4): зеркало отстало на СЕМЬ миноров (`frontend/docs/api-contract/openapi.yaml` — `0.2.3` против канона `0.9.0`, и первый из них — ЛОМАЮЩИЙ 0.3.0), 16 операций против 20; отставание ратифицировано D39.142 п.5 на время фриза и две ручки разъехались, размораживать раньше значит перегенерировать типы дважды. ⚠ **ДВА ЗАГЕЙЧЕННЫХ ТРИГГЕРА НАЖАТЫ И НЕ ОТРАБОТАНЫ — строка бэклога 237** (`go.work` · вендор-сверка эффорта `deepseek-v4-pro`; реестр `13-tech-debt-anchors.md` §Б-108). ⚠ **Состояние git — снимать КОМАНДАМИ, не чтением** (ветка `polygon` ушла вперёд, коммит здесь не цитирую): работа полигона лежит на ней и в `main` НЕ влита, а `git status -- eval/` в main-дереве пуст ПО ПОСТРОЕНИЮ и уводит в ложный вывод «работы нет»; **«развязка git с origin» ОПРОВЕРГНУТА** — `origin/main` остаётся ПРЕДКОМ `main`, расхождения нет (`git merge-base --is-ancestor origin/main main` → rc 0). ⚠ Пункт «развязка git с origin» в листе владельца ниже держится ТОЛЬКО как вопрос про force-push его рукой; утверждением о расхождении дерева он не является — арбитр этой пары именно здесь. +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-03, голова D39.189 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №22** (единственный носитель — здесь; роль передана 01.09, №21 закрыт нотой передачи D39.184). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ПЕРВЫМ:** (0а) **ревизия документации на ПРОТУХШЕЕ** — по всем зонам, не только тронутым; (0б) **планы доработок в БЭКЕНД и ПЛАТФОРМУ** по остатку бэклога и регистра; (0в) **вынос неактуального в АРХИВ** (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **88** живых доков в `docs/` против **198** заархивированных, 8 в `platform/docs`, 9 в `backend/docs` — ⚠ из 88 три ВРЕМЕННЫЕ (`DOC_CLEANUP_PLAN` · `DOC_REVISION_FINDINGS` · `DOC_REVISION_REFUTED`), они уедут в архив по закрытии разбора, то есть постоянных **85**; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 97 (major 3) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) РАЗРЫВ ЦИКЛА: книга не отдаётся файлом ПОЛЬЗОВАТЕЛЮ — открыта ПЛАТФОРМЕННАЯ половина.** Движок пишет файл с 30.08 (`tmctl build` — EPUB 3 + чистый txt, D39.175), и холодный прогон 31.08 предъявил это живьём: собранный EPUB настоящего перевода прошёл `epubcheck` 0/0/0/0 и передан владельцу. Открыто ровно одно: канон обещает `createExport`/`getExport`, а платформа их НЕ монтирует (смонтировано 15 операций из 20; нет также `getRun`, `updateBook`, `deleteBook`). Долг числится с P8 (`platform/BACKLOG.md` П-17), и НИ ОДИН пак платформы после P7 его не взял (проверка вместо ручного счёта, чтобы не гнило при каждом лендинге: `grep -rn 'createExport\|getExport' platform/internal/ --include=*.go` — пусто). **Слово «отдаёт результат» ложно по букве ТОЛЬКО платформенной половиной** (п.4) · **(2) ~~холодный прогон движка~~ ОТРАБОТАЛ 31.08, закрыт РЕШЕНИЕМ ВЛАДЕЛЬЦА «не доводить»** (отчёт — `archive/reports/COLDRUN_V16_REPORT_2026-08-31.md`, числа относятся к `065d8ac`). Потрачено **$0.436110** из санкции $0.80. ПРЕДЪЯВЛЕНО живьём: объёмный потолок · D39.158 ОБЕИМИ половинами (стоп и не-стоп) · exit 16 · строки 154/198/239/240. ⚠ **Причина большой доли редактора НЕ УСТАНОВЛЕНА** (каузальные истории и их снятие — §4 отчёта). Доля редактора идёт с ДВУМЯ знаменателями: **49.3%** от всего прогона ($0.214865 из $0.436110) и **81.3%** внутри порции П1 (⚠ ходившее «73%» — фантом, в отчёте его нет ни разу). Следующий шаг — контролируемая проба по ЧЕТЫРЁМ осям (роли осей и три требования, купленные ошибками этого прогона, — §14 отчёта; ось `stale` НЕДОСТИЖИМА — §10 там же). ⚠ **Цена: слово владельца 31.08 — ≈$0.60, потолок $0.80, ДЕСЯТЬ глав ПОЛНОЙ цепью включая редакторскую волну.** ⚠ **КЛЮЧИ: гейт снят словом владельца 30.08, разбор двух путей — D39.176 п.6.** Живое отсюда: конвенционного `.env` НЕТ НИ У ОДНОЙ книги корпуса (заполнены только `projects/textmachine/backend/.env` и `.../eval/.env`), поэтому прогон движка обязан передавать `--keys-file` абсолютным путём и только на `translate`; для п.3 нужен ДРУГОЙ файл — `TM_PLATFORM_ENGINE_KEYS_PATH`, тоже АБСОЛЮТНЫМ путём (`platform/internal/config/config.go`, греп `must be an absolute path`). Лечение операционное и $0 — направить переменную на уже заполненный файл; проверять ПРОГОНОМ, не чтением (гардрейл `.env`) · **(3) живой сквозной прогон через API платформы** — форма манифеста, сайдкара банка и карта причин флагов сочинены платформой САМОСТОЯТЕЛЬНО. ⚠ Уточнено 01.09: гейт СНЯТ холодным прогоном, и настоящие артефакты движка теперь ЕСТЬ (каталог `books/gu-zhenren/coldrun-v16/`), но сверка вышла ТОНКОЙ: на шов реально вышло **одно значение `flag_reason` из пятнадцати** (`sanitizer_stripped`), остальные четырнадцать по-прежнему только чтением кода, а манифест против `platform/internal/ingest/manifest.go` не сверялся вовсе · **(4) дверь выдачи** — строго ПОСЛЕ (3) (⚠ слово владельца 30.08: дверь ВСЕГДА строит файл — отказ юзеру не отдаётся, неполная книга уходит с пометкой, т.е. дверь зовёт `tmctl build --partial`; отказ по умолчанию остаётся операторской ручкой CLI; D29.1(б) «fail-closed» читать как «никогда молча» — честность несут пометки) · **(5) проводка `--max-units`** — снятие гейта, а не стройка: механизм в движке стоит (D39.170), живое основание гейта — `PD-422` · **(6) разморозка фронта** — ПОСЛЕ (4): зеркало отстало на СЕМЬ миноров (`frontend/docs/api-contract/openapi.yaml` — `0.2.3` против канона `0.9.0`, и первый из них — ЛОМАЮЩИЙ 0.3.0), 16 операций против 20; отставание ратифицировано D39.142 п.5 на время фриза и две ручки разъехались, размораживать раньше значит перегенерировать типы дважды. ⚠ **ДВА ЗАГЕЙЧЕННЫХ ТРИГГЕРА НАЖАТЫ И НЕ ОТРАБОТАНЫ — строка бэклога 237** (`go.work` · вендор-сверка эффорта `deepseek-v4-pro`; реестр `13-tech-debt-anchors.md` §Б-108). ⚠ **Состояние git — снимать КОМАНДАМИ, не чтением** (ветка `polygon` ушла вперёд, коммит здесь не цитирую): работа полигона лежит на ней и в `main` НЕ влита, а `git status -- eval/` в main-дереве пуст ПО ПОСТРОЕНИЮ и уводит в ложный вывод «работы нет»; **«развязка git с origin» ОПРОВЕРГНУТА** — `origin/main` остаётся ПРЕДКОМ `main`, расхождения нет (`git merge-base --is-ancestor origin/main main` → rc 0). ⚠ Пункт «развязка git с origin» в листе владельца ниже держится ТОЛЬКО как вопрос про force-push его рукой; утверждением о расхождении дерева он не является — арбитр этой пары именно здесь. > - ⚠ **Норма приёмки, купленная аудитом D39.167 п.1:** акт лендинга, объявивший закрытие строки регистра или бэклога, обязан быть СВЕРЕН СТАТУСОМ в тот же заход — иначе следующий пак собирается ПО РЕГИСТРУ и едет чинить построенное. Машинная половина — строка бэклога **225**. > - ⚠ **ЛЕНТА КОНТРАКТНЫХ МИНОРОВ** (что принёс каждый — телом ноты): **0.5.0** — D39.161 · **0.6.0** — D39.162/D39.163 · **0.7.0** — D39.166 · **0.8.0** — D39.169 · **0.9.0** — D39.180. Прожитые дампы приёмок P9/P10 — `archive/PROGRESS-2026-08-backend.md` и тела нот. > - **ЖИВОЕ:** полигон — **фаза Д ИДЁТ** (заказ 10.08; деньги санкционированы 15.08 напрямую полигону — ⚠ числа потолка в носителях расходятся, фактическую цепь сверить при лендинге петель; ja-книга `enkan_no_hate_ja`; при ратификации фазы Д в D-ноту: декой-правило + обязательный кросс-семейный опровергатель приёмки — одобрены 10.08; свежие фриз-коммиты полигона в дереве — НЕ трогать) · платформа и контракт — статус в строке выше, здесь НЕ дублируется (один носитель на факт) · **фронт ЗАМОРОЖЕН** (D39.136 п.2 + **D39.147: морозится ДАЛЬШЕ лендинга P7 — слово владельца 17.08; P7 зону НЕ размораживает, S5-промт не выдаётся, разморозка отдельным словом по достижении сквозного пути**; перечень первого касания зоны — синк зеркала на ТЕКУЩИЙ канон (отставание и его цена — п.6 очереди выше и строка бэклога 183(б)) + перегенерация типов + моки + гейт утечки конвейера + ФС-1..12 + Ф-63/Ф-28 + фразы В-11 по словарю кодов — не отменён, ждёт разморозки) · закрытые стройки эры — реестром нот `architecture/05-decisions-index.md` (D39.130–137, одна строка на ноту). diff --git a/docs/architecture/05-decisions-index.md b/docs/architecture/05-decisions-index.md index b3a39177..18f89cb6 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -247,3 +247,4 @@ | D39.186 | 02.09 | **Ревизия и чистка документации ВСЕХ зон по заказу владельца.** 1432 утверждения проверены исполнением, 130 живых находок (6 блокеров); три прохода агентами + финальный: живые доки 4.41 → 3.68 МБ (снято 731 КБ), вход сессии 347 → ~270 КБ. Контроль — агент Fable 5.1 сквозным контекстом: 18 потерь защищённых классов и ~27 дефектов реза найдены и починены. Нормы переведены в гейты: префикс веса бэклога · минимум токена якоря 12 знаков; линтер 52 → 0, сверяемых 16% → 22%. Строки бэклога 194/238/239/240 закрыты D39.185. | жив | | D39.187 | 03.09 | **Приёмка бэкенд-пака «число согласия» и его дофикса.** Принят исполнением в два круга: батарея зелёная, тестов 1083→1105 при нуле удалённых, каталог мутаций 73→92 и все 19 новых КРАСНЫЕ. ⚠ Норма, купленная паком: **приёмка обязана сажать СВОИ мутации, а не пере-гонять чужие** — первый круг пропустил три неприбитые гарантии, нашли их только собственные посадки. Ратифицированы СВЕРХ заказа два правила денежного пути (обход `usd()` через $0-вызов · раскрытие $0-строки с чужим новейшим вызовом) — направление п.1 D39.150 | жив | ЖИВОЕ: развилка стоп-строки прибита с одной стороны · граница `bound()` не прибита · семантика переноса отложена словом владельца 03.09 | приёмка бэкенд деньги мутации | | D39.188 | 03.09 | **Приёмка платформенного пака P13 и его дофикса.** Заказ пункта 3 был НЕДОСТАТОЧЕН: голое пере-упорядочивание отказов расширяло класс — зона доказала это до и после правки, завела `PD-438` (major) и вылечила остановкой чтения на чужом handshake'е; приёмка опровергла ОБОСНОВАНИЕ («Nothing of ours can follow»), дофикс дал припаркованной попытке `ErrForeignStreamAhead` + ресинк. Гейты доведены до своих обещаний; 20 посадок приёмки красны. Закрыты `fixed(6ae3e76)`: `PD-89` · `PD-168` · `PD-214` · `PD-426` | жив | ЖИВОЕ: записка о хосте различает по имени машины, а оно общее · `PD-439` и правило ухода из класса — на оркестраторе · остаток `PD-374`: имя условия через константу невидимо | приёмка платформа шов гейты | +| D39.189 | 03.09 | **Санкция владельца: платные прогоны с ключами разрешены для тестов.** Снимает предусловие живого сквозного прогона через API платформы (строка 202) — до сих пор он не гонялся ни разу, форму настоящих данных платформа сочинила сама. ⚠ Потолок числом НЕ назван, поэтому его называет ПАК: оценка своим замером + обязательный `--ceiling-usd` + правило «перелёт — стоп и пинг». Опора для оценки — холодный прогон 31.08 ($0.436110 на десяти главах) | жив | ЖИВОЕ: операционное предусловие — `TM_PLATFORM_ENGINE_KEYS_PATH` абсолютным путём на заполненный файл, проверять прогоном | санкция деньги прогон | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 9a740525..c72ade87 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.188 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) +# Журнал решений оркестратора — контракт D1–D39.189 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) > **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Работая с контрактом (греп номера: живой файл → слайсы, целиком НЕ читать — D39.125), держи под рукой, что чем перекрыто: > ⚠ **Эррата 09.08 (D39.125):** D39.111 п.1 предписывал промту S3 «максимум = баланс МИНУС открытые холды» — формула ОШИБОЧНА (вычитание дважды), исправлена D39.115 п.2(а): максимум = Balance КАК ЕСТЬ; тело D39.111 живёт ниже в этом файле (голова D39.106+). @@ -1981,3 +1981,13 @@ Fable 5.1 со сквозным контекстом (решение владе **4. АКТ ЛЕНДИНГА — статусы сверены (D39.167 п.1).** Закрыты `fixed(6ae3e76)` и перенесены в секцию «Закрытые — эра P13»: **`PD-89`** (ключ идемпотентности на пути ошибки) · **`PD-168`** (бюджет из холда) · **`PD-214`** и **`PD-426`** (порядок принадлежности + ручка `run unquarantine`). ⚠ **Пункт наряда «снять `PD-168` из `alarmBaseline`» зона ОТКАЗАЛАСЬ исполнять, и отказ был прав:** предпосылка наряда опиралась на правку регистра, которая до её дерева не доехала — на всех четырёх деревьях ряд стоял `open`, гейт и база согласованно печатали 12. Закрытие ряда сделано ЗДЕСЬ, актом лендинга, вместе с переносом; согласование базы гейта с новым составом — пункт дофикса зоне. Регистр: 439 рядов, открытых **97**, `major` **3**. **5. ОСТАЁТСЯ ОТКРЫТЫМ.** (а) Записка зоны о предусловии хоста различает хосты ИМЕНЕМ МАШИНЫ, а имя у этого хоста то же самое (`DESKTOP-IN1MCEA`) при противоположных условиях: `~/go/bin` существует и держит `sqlc`, `make tools-check` на дефолтном PATH падает, сокет только `55433`. Различает не хост, а пользователь — разные WSL-инстансы под одним именем. Цена — потерянный старт батареи у следующей смены. (б) `PD-439` (семь рядов со статусом вне словаря) и правило ухода из охраняемого класса — решение оркестратора, от него зависит форма третьей калитки гейта. (03.09.2026, оркестратор №22) ✅ + +## D39.189 — САНКЦИЯ ВЛАДЕЛЬЦА 03.09: платные прогоны с ключами РАЗРЕШЕНЫ для тестов; потолок числом не назван, поэтому его называет пак (03.09). ✅ + +**1. Слово владельца дословно (03.09):** «да, разрешаю платные прогоны с ключами для тестов». Этим снимается предусловие пункта 1 планируемого платформенного пака — живого сквозного прогона книги через API платформы (строка бэклога **202**), который до сих пор не гонялся НИ РАЗУ: всё после «прогон стартовал и остановился» покрыто батареей против живого Postgres, но с движком-заглушкой, а настоящий манифест, сайдкар банка и карта причин флагов до сих пор сочинены платформой самостоятельно. + +**2. Что санкция НЕ содержит и как это закрывается.** Потолок числом не назван — в отличие от санкции 31.08 (≈$0.60 при потолке $0.80 на десять глав полной цепью). Поэтому потолок называет ПАК, а не сессия по ходу дела: промт обязан нести (а) оценку стоимости своим замером, (б) обязательный `--ceiling-usd` на движковом вызове, (в) правило «перелёт оценки — СТОП и пинг, а не продолжение». Основание — канон целей п.5 («деньги видимы с первого вызова · потолки · явное согласие на пере-оплату»): санкция на класс расходов не отменяет обязанность показать число до первого вызова. Опорный замер для оценки — холодный прогон 31.08: **$0.436110** на десяти главах полной цепью при собственной проекции движка `projected_book_usd = 1.1377277707`. + +**3. Операционное предусловие, живое и $0.** Конвенционного `.env` нет ни у одной книги корпуса; движковый прогон обязан передавать `--keys-file` АБСОЛЮТНЫМ путём и только на `translate`, а платформе нужен ДРУГОЙ файл — `TM_PLATFORM_ENGINE_KEYS_PATH`, тоже абсолютным путём (`platform/internal/config/config.go`, греп `must be an absolute path`). Лечение — направить переменную на уже заполненный файл; проверять ПРОГОНОМ, не чтением (гардрейл `.env`: читать его запрещено). + +**4. Область.** Санкция читается как разрешение класса «платный прогон ради ПРОВЕРКИ механизма», а не как открытый бюджет: каждый пак предъявляет своё число и свой потолок, и на пере-оплату спрашивает отдельно. (03.09.2026, оркестратор №22) ✅