diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index c71ea3b0..ecbcc8a5 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,6 +1,6 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-30, голова D39.176 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №20** (единственный носитель — здесь; роль передана 30.08, №19 закрыт нотой передачи): **(1) РАЗРЫВ ЦИКЛА: книга не отдаётся файлом — ни одной стороной.** Канон обещает `createExport`/`getExport`, платформа их НЕ монтирует (смонтировано 15 операций из 20; нет также `getRun`, `updateBook`, `deleteBook`), а движок писателя не имеет вовсе — `tmctl export` пишет только в stdout (JSON `tm-export-v1` либо текст с аудит-баннерами). ⚠ Прежняя редакция обосновывала это грепом `epub|fb2|docx` («21 хит, все на стороне ингеста») — довод СНЯТ 30.08: он и был хрупким (сырой счёт хитов), и стал ложным после лендинга. Долг числится с P8 (`platform/BACKLOG.md` П-17), с тех пор легло пять паков и ни один его не взял. **Слово «отдаёт результат» сегодня ложно по букве** — ⚠ 30.08: ДВИЖКОВАЯ половина ЗАКРЫТА паком «писатель книги» (D39.175, `8adcb86`): `tmctl build` отдаёт EPUB 3 + чистый txt с шестью состояниями честности; открытой остаётся дверь платформы (п.4) · **(2) холодный прогон движка на текущем HEAD** — гейт строк 202/216, слово владельца 20.08: с 27.08 легло ~15 нот (шов, стоп банка флажком, схема v16, класс отказа 15, объёмный потолок, гейт схемы) и НИ ОДНА не проверена деньгами; ≈$0.05. ⚠ **ГЕЙТ КЛЮЧЕЙ СНЯТ словом владельца 30.08** (D39.176 п.6): движковые ключи починены, движок берёт конвенционный `.env` рядом с `book.yaml` — прогон разблокирован, ждёт только промта оркестратора. Для п.3 нужен ДРУГОЙ файл (путь платформы `TM_PLATFORM_ENGINE_KEYS_PATH`) — вопрос владельцу открыт · **(3) живой сквозной прогон через API платформы** — форма манифеста, сайдкара банка и карта причин флагов сочинены платформой САМОСТОЯТЕЛЬНО и первыми настоящими данными движка не проверялись · **(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.8.0`, и первый из них — ЛОМАЮЩИЙ 0.3.0), 16 операций против 20; отставание ратифицировано D39.142 п.5 на время фриза и две ручки разъехались, размораживать раньше значит перегенерировать типы дважды. ⚠ **ДВА ЗАГЕЙЧЕННЫХ ТРИГГЕРА НАЖАТЫ И НЕ ОТРАБОТАНЫ** (`13-tech-debt-anchors.md` §Б-108): `go.work` — у платформы свой модуль есть, файла в корне НЕТ; вендор-сверка маппинга эффорта `deepseek-v4-pro` — сработала 13.08, носители противоречат, закрывается ТОЛЬКО вендор-докой. ⚠ **ЧТО В ПРЕЖНЕЙ ОЧЕРЕДИ БЫЛО НЕВЕРНО, проверено деревом 30.08:** пункт про `sqlc` отдельной сессией ИСПОЛНЕН (D39.172, `63fcee5`); «работа полигона в дереве НЕЗАКОММИЧЕНА, читать `git status -- eval/`» ОПРОВЕРГНУТО — она лежит коммитом `28c2d0f` на ветке `polygon`, запушена, в `main` не влита, а названная команда возвращает пустоту и уводит в вывод «работы нет»; «развязка git с origin» ОПРОВЕРГНУТА — `main` и `origin/main` на одном коммите. +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-30, голова D39.177 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №21** (единственный носитель — здесь; роль передана 31.08, №20 закрыт нотой передачи D39.177): **(1) РАЗРЫВ ЦИКЛА: книга не отдаётся файлом — ни одной стороной.** Канон обещает `createExport`/`getExport`, платформа их НЕ монтирует (смонтировано 15 операций из 20; нет также `getRun`, `updateBook`, `deleteBook`), а движок писателя не имеет вовсе — `tmctl export` пишет только в stdout (JSON `tm-export-v1` либо текст с аудит-баннерами). ⚠ Прежняя редакция обосновывала это грепом `epub|fb2|docx` («21 хит, все на стороне ингеста») — довод СНЯТ 30.08: он и был хрупким (сырой счёт хитов), и стал ложным после лендинга. Долг числится с P8 (`platform/BACKLOG.md` П-17), с тех пор легло пять паков и ни один его не взял. **Слово «отдаёт результат» сегодня ложно по букве** — ⚠ 30.08: ДВИЖКОВАЯ половина ЗАКРЫТА паком «писатель книги» (D39.175, `8adcb86`): `tmctl build` отдаёт EPUB 3 + чистый txt с шестью состояниями честности; открытой остаётся дверь платформы (п.4) · **(2) холодный прогон движка на текущем HEAD** — гейт строк 202/216, слово владельца 20.08: с 27.08 легло ~15 нот (шов, стоп банка флажком, схема v16, класс отказа 15, объёмный потолок, гейт схемы) и НИ ОДНА не проверена деньгами; ≈$0.05. ⚠ **ГЕЙТ КЛЮЧЕЙ СНЯТ словом владельца 30.08** (D39.176 п.6): движковые ключи починены, движок берёт конвенционный `.env` рядом с `book.yaml` — прогон разблокирован, ждёт только промта оркестратора. Для п.3 нужен ДРУГОЙ файл (путь платформы `TM_PLATFORM_ENGINE_KEYS_PATH`) — вопрос владельцу открыт · **(3) живой сквозной прогон через API платформы** — форма манифеста, сайдкара банка и карта причин флагов сочинены платформой САМОСТОЯТЕЛЬНО и первыми настоящими данными движка не проверялись · **(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.8.0`, и первый из них — ЛОМАЮЩИЙ 0.3.0), 16 операций против 20; отставание ратифицировано D39.142 п.5 на время фриза и две ручки разъехались, размораживать раньше значит перегенерировать типы дважды. ⚠ **ДВА ЗАГЕЙЧЕННЫХ ТРИГГЕРА НАЖАТЫ И НЕ ОТРАБОТАНЫ** (`13-tech-debt-anchors.md` §Б-108): `go.work` — у платформы свой модуль есть, файла в корне НЕТ; вендор-сверка маппинга эффорта `deepseek-v4-pro` — сработала 13.08, носители противоречат, закрывается ТОЛЬКО вендор-докой. ⚠ **ЧТО В ПРЕЖНЕЙ ОЧЕРЕДИ БЫЛО НЕВЕРНО, проверено деревом 30.08:** пункт про `sqlc` отдельной сессией ИСПОЛНЕН (D39.172, `63fcee5`); «работа полигона в дереве НЕЗАКОММИЧЕНА, читать `git status -- eval/`» ОПРОВЕРГНУТО — она лежит коммитом `28c2d0f` на ветке `polygon`, запушена, в `main` не влита, а названная команда возвращает пустоту и уводит в вывод «работы нет»; «развязка git с origin» ОПРОВЕРГНУТА — `main` и `origin/main` на одном коммите. > - ⚠ **ОБЯЗАТЕЛЬСТВА ЛЕНДИНГА P9 ИСПОЛНЕНЫ — но НЕ лендингом** (снято оркестратором №20 30.08, сверено статусами регистра): `PD-400`.2 → `accepted-risk`, `PD-401` и `PD-166` → `fixed` перевёл аудит доков **D39.167** (`373ccc7`, 28.08), чья находка №1 и говорит: «регистр расходился с МОИМИ ЖЕ актами лендинга — четыре строки». Прежние два буллета висели здесь двое суток после исполнения, и проверочная команда одного из них сама возвращала `fixed`. **Урок в норму приёмки: акт лендинга, объявивший закрытие строки, обязан быть сверен статусом В ТОТ ЖЕ заход.** > - ⚠ **ЛЕНТА КОНТРАКТА за 27–28.08, свёрнуто аудитом 28.08 (D39.167):** **0.5.0** — D39.161 (снос отменённой пер-термной модели подписи + дверь правок банка) · **0.6.0** — D39.162/D39.163 (сквозная полоса прогресса; `Progress.stage` ВТОРЫМ и последним исключением границы) · **0.7.0** — D39.166 (покупка пере-прохода членом `RunRequest.re_pass`). Прожитые дампы приёмки P9 и P10 вынесены в `archive/PROGRESS-2026-08-backend.md` и в тела нот; здесь остаётся только лента версий. > - ⚠ **27.08: ВЫДАН ПРОМТ КОНТРАКТНОГО МИНОРА** (`CONTRACT_MINOR_SESSION_PROMPT.md`, пункт 2б очереди D39.156). **ВОПРОС ЗАКРЫТ СЛОВОМ ВЛАДЕЛЬЦА 27.08 (D39.160):** сквозная полоса прогресса (строка **200**) из минора ИСКЛЮЧЕНА и едет с паком (2в). Причина механическая: гейт платформы требует, чтобы объявленная деплоем версия равнялась канону, поэтому канон и деплой обязаны совпасть В МОМЕНТ ЛЕНДИНГА; снос двери этому не мешает (платформа свою половину снесла 22.08), а смена семантики прогресса мешает — сервер её не считает и не будет до пака (2в), и `0.5.0` у старого прогресса был бы ровно той ложью, против которой гейт стоит. Прежнее «одним куском» покупалось тем, что иначе фронт перегенерируется дважды, — но фронт ЗАМОРОЖЕН и перегенерируется один раз независимо от числа миноров. Промт ВЫДАН: прошёл оба рубежа роли, девять находок опровергателя применены. @@ -33,12 +33,13 @@ ⛔ **Проводка `--max-units` в платформу остаётся ГЕЙЧЕНОЙ — но основание УТОЧНЕНО 30.08, прежняя формулировка протухла за сутки.** Довод «с `--resnapshot` потолок не держит» СНЯТ: пробой пере-сидом банка вылечен структурно тем же паком (пере-план против реального снапшота + отказ волны работать с чужим планом, `TestAMidRunBankMoveNeverBillsBeyondTheGrant`, D39.170). **Живое основание одно и оно механическое:** единственный писатель `bank_moved_at` — дверь правок банка (`platform/internal/runs/bank.go:182`), а рост АВТО-банка от майнинга этого флага не ставит, поэтому майнящая книга на второй покупке идёт без `--resnapshot` и умирает на снапшот-гарде движка — холд взят, попытка сожжена (`PD-422`). Это чинится проводкой признака движения банка от майнинга, а не решением владельца. -**ОТКРЫТО НА ОРКЕСТРАТОРЕ №20 (снимок 30.08, после смены голов D39.175/176):** -1. **Приёмка пака P12** — платформа, сессия `textmachine-main-b5`, эхо принято 30.08; дерево на её старте `4bb3404`. Порядок приёмки — как у пака «писатель книги»: адверсариальные линзы + верификатор на находку, дерево на время прохода морозится. -2. **Возможный пинг сессии P12 по §3.2** — если выбранная форма «эпохи» потребует правки ФРАЗЫ канона рядом с пере-нарезкой, это контрактный минор ЧЕРЕЗ РАТИФИКАЦИЮ ОРКЕСТРАТОРА; ответ обещан быстрый, чтобы сессия не стояла. -3. **Промт холодного прогона движка** (очередь п.2) — НЕ написан; гейт ключей снят, писать можно сразу. -4. **`PD-425`** — денежный `major` (обрыв клиента теряет факт правки банка навсегда); отсрочка была записана на оркестратора, ⚠ теперь ВЗЯТ первым пунктом пака P12 — при его приёмке строку закрыть или пере-диспозиционировать. -5. **Вопрос владельцу открыт:** путь к файлу провайдерских ключей ДЛЯ ПЛАТФОРМЫ (`TM_PLATFORM_ENGINE_KEYS_PATH`); формат совпадает с движковым `.env`, лечение операционное, проверять прогоном (файлы ключей оркестратор не открывает — гардрейл). +**ОТКРЫТО НА ОРКЕСТРАТОРЕ №21 (снимок 31.08, передано нотой D39.177):** +1. **Приёмка пака P12** — платформа, сессия `textmachine-main-b5`, работает; ⚠ её лендинг несёт РАТИФИЦИРОВАННЫЙ минор канона **0.9.0** (вторая граница пересчёта `chapters_done` + непрозрачный `shape_epoch` в `Book`; ограничение: признак формы конвейера на провод НЕ выносится — третьего исключения границы D39.163 нет). Канон и деплой обязаны совпасть В МОМЕНТ лендинга. +2. **Промт холодного прогона движка** (очередь п.2) — НЕ написан; гейт ключей снят словом владельца 30.08. +3. **`PD-425`** — денежный `major`, взят первым пунктом P12: при приёмке закрыть или пере-диспозиционировать. +4. **Вопрос владельцу открыт:** путь к файлу провайдерских ключей ДЛЯ ПЛАТФОРМЫ (`TM_PLATFORM_ENGINE_KEYS_PATH`); формат совпадает с движковым, лечение операционное, проверять прогоном (файлы ключей оркестратор не открывает). +5. **Ресёрч-сессия `textmachine-36`** пишет `docs/research/29-harness-topology-survey.md` (топологии харнесса), не коммитит — лендинг и ратификация на №21. +⚠ **В дереве ЛЕЖИТ НЕЗАКОММИЧЕННОЕ И ЭТО НОРМА:** код пака P12 + записка-план сессии в зонном журнале + ПИНГ оркестратора №20 в том же журнале (аудит доков нашёл три места зоны, ставших ложными). Коммитить их ОДНИМ лендингом при приёмке P12; №20 не коммитил, чтобы не унести чужую работу под своим сообщением. **НОРМЫ, ЗАРАБОТАННЫЕ ЭТИМИ ПРИЁМКАМИ:** - **Зелёная батарея — это ПОЛНЫЙ список пакетов ПЛЮС отсутствие FAIL**, а не отсутствие FAIL: обёртка diff --git a/docs/architecture/05-decisions-index.md b/docs/architecture/05-decisions-index.md index a894e5fa..71b0a260 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -1,4 +1,4 @@ -# Реестр D-нот — карта актуальности v2 (D1–D39.176; +# Реестр D-нот — карта актуальности v2 (D1–D39.177; > ⚠ **СЛАБОЕ МЕСТО, КОТОРОЕ БЫЛО ЗДЕСЬ (вписано 22.08, ЗАКРЫТО 24.08 — D39.157 п.6).** Колонка ТЕЛА > у нот D39.107…D39.123 говорила «жив», хотя тела уехали в слайс подрезкой D39.139; семнадцать строк @@ -238,3 +238,4 @@ | D39.174 | 30.08 | **Передача роли оркестратора №19 → №20.** За смену принято пять паков (P11 + минор 0.8.0, движковые «деньги», починка двух зеленевших вхолостую store-тестов, `sqlc`, гейт схемы движка). Три урока смены: тихо-зелёное дороже красного · метод измерения бывает слабее предмета (покрытие сказало «почти ничего», решение приняли шесть выживших мутаций) · верный прогон при неверной гипотезе неотличим от «дефекта нет». Семь моих ошибок названы полностью, включая двойную ошибку атрибуции и лендинг без `make lint`. Что ловило лучше меня: опровергатель промта, охотник вне карты, линтер якорей, гейт чисел и сами сессии. | жив | ЖИВОЕ: очередь №20 в CURRENT-STATE; `PD-425` на оркестраторе; строка 237 — два нажатых триггера | передача процесс нормы | | D39.175 | 30.08 | **Бэкенд-пак «писатель книги» принят и заленджен** (`8adcb86`): `tmctl build` — EPUB 3 + чистый txt из `BookExport` (`internal/bookfile`, stdlib), шесть состояний честности (pending·withheld·incomplete·ghost·stale; drift — отчётом), отказ exit 16 / `--partial` с маркером на каждой дыре, пути в `StatusArtifacts.book_files`, `tm-export-v1` аддитивно, reader-слова — данные вне `Pack.Version()`. **Слово владельца: drift — НЕ дыра файла; дверь выдачи обязана сверять `BuildReport`.** Приёмка: 4 линзы + верификаторы, 2 дофикса до лендинга; epubcheck 0/0/0, оракул июля 14/14, `--plaintext` побайтово прежний. | жив | ЖИВОЕ: строка 236 сужена до двери платформы; хвосты — 238/239; вопросы владельцу — лестница D25.1, лейбл К-3, RTL | движок экспорт файл приёмка дрейф | | D39.176 | 30.08 | **Пакет слов владельца по платформе**: продуктовых КВОТ НЕТ (живём на покупке API, бонусы из админки — `П-12`/`PD-175` сняты как продуктовая развилка, техническая гигиена остаётся инженерной) · продажа ПЛАНИРУЕТСЯ, но не в бете (`П-7` отложен, не отменён) · после пополнения баланса прогон возобновляется ЯВНЫМ действием (пункт снят с листа) · фразы пользователя ДЕЛЕГИРОВАНЫ проекту с требованием ИНТЕРНАЦИОНАЛЬНОСТИ — не литерал, а данные по коду причины и локали (гейт `PD-246`/строка 204). Ключи: движок берёт `--keys-file` ИЛИ конвенционный `.env`; холодный прогон разблокирован, живой через API — нет (платформа читает свой путь). | жив | ЖИВОЕ: на владельце остался ОДИН платформенный пункт — `PD-421` (держит ли открытый поток сессию живой), переформулирован | платформа продукт владелец квоты фразы | +| D39.177 | 31.08 | **Передача роли оркестратора №20 → №21.** Смена приняла пак «писатель книги» (D39.175) и закрыла продуктовый лист платформы (D39.176), выдала промт P12 и ратифицировала минор 0.9.0 по пингу сессии. Три урока: опровергатель промта окупился в третий и четвёртый раз (62 находки; самая дорогая — «копия книги» через симлинк мигрировала бы ОРИГИНАЛ) · долг без носителя переживает приёмки (две находки ревью P9 прожили двое суток без строки) · якорь по номеру в файл живой сессии заведомо мёртв. Четыре ошибки названы; ТРИ из них поймал ВЛАДЕЛЕЦ вопросами «ты уверен / ты дочитал / почему не закрыл». Аудит всех живых доков: 57 находок, 55 применены. | жив | ЖИВОЕ: очередь №21 в CURRENT-STATE; пять обязательств переходят; незакоммиченное дерево пака P12 — норма, лендить при приёмке | передача процесс нормы аудит | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 86e7c5f9..14820afc 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.176 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) +# Журнал решений оркестратора — контракт D1–D39.177 (живой файл: карта · эрраты · живые тела · голова 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+). @@ -1612,3 +1612,43 @@ head-1 это семнадцать бюджетируемых операций, 4. **Фразы, которые видит пользователь (В-3 · К-6 · Приложение А), ДЕЛЕГИРОВАНЫ проекту** — слово: «оставляю проектирование фраз на вас, главное чтоб это было интернациональным». ⚠ Это не «свобода формулировки», а **инженерное требование**: фраза не может быть литералом ни в Go платформы, ни в TSX фронта — только данными, ключуемыми машинным кодом причины и локалью (механизм языков интерфейса уже построен, `ПТ-36`/`В-9`). Следствия: словарь фраз — носитель ДАННЫХ, один на продукт; `PD-246` (граница `attention`/`glance` — сегодня ДОГАДКА платформы по 15 причинам движка) закрывается вместе с ним, а не отдельно; строка **204** (движок не публикует причины флагов данными) становится его гейтом. Проектирование — оркестратор + зоны, подпись владельца больше не ожидается. 5. **Осталось на владельце из платформенного листа — ОДИН пункт, и он переформулирован** (`PD-421`): держит ли ОТКРЫТЫЙ поток событий сессию живой. Владелец ответа не дал, попросив раскрыть предмет; вопрос переформулирован в терминах продукта и вынесен заново. 6. ⚠ **Ключи провайдеров — развилка снята фактом, а не решением:** движок берёт их ДВУМЯ путями (`--keys-file` деплоя ПОБЕЖДАЕТ конвенционный `.env` рядом с `book.yaml` — `backend/cmd/tmctl/invocation.go:145`=`keys-file`), формат обоих — `KEY=VALUE`. Владелец 30.08 сообщил, что чинил ключи движка; **из этого следует, что холодный прогон движка (очередь №20 п.2) разблокирован, а живой прогон через API (п.3) — нет**: платформа читает СВОЙ путь (`TM_PLATFORM_ENGINE_KEYS_PATH`, `platform/internal/config/config.go:436`=`ENGINE_KEYS_PATH`), и по записи P9 живых ключей в нём не было. Лечение — операционное и $0: направить переменную платформы на уже заполненный файл (формат совпадает), проверять — прогоном, не чтением (гардрейл `.env` в силе, оркестратор файлов ключей не открывал). + +## D39.177 — ПЕРЕДАЧА РОЛИ ОРКЕСТРАТОРА №20 → №21: что смена приняла и построила, четыре моих ошибки (две поймал владелец) и очередь, сверенная деревом (31.08). ✅ + +**Счётчик роли бампнут №20 → №21** (D39.112 п.6). Очередь работ — CURRENT-STATE в `docs/PROGRESS.md`, **единственный носитель**; здесь её копии НЕТ. + +### 1. Что принято и заленджено за смену + +**Пак «писатель книги»** (D39.175, `8adcb86`) — переведённая книга впервые становится файлом: `tmctl build` → EPUB 3 + чистый txt, шесть состояний честности, отказ exit 16 / `--partial`, пути в `StatusArtifacts.book_files`. **Четыре ратификации слов владельца:** дрейф — не дыра файла (D39.175 п.2) · экспорт юзеру всегда строится, отказ ему не отдаётся · пометки как построены, отдельный варнинг-слой не строим · форма «модель размечает главы метадатой» вписана в строку 162. **D39.176** — платформенный продуктовый лист закрыт целиком: квот нет, продажа не в бете, возобновление явным действием, фразы делегированы проекту с требованием интернациональности. **Промт P12 выдан** платформенной сессии (7 открытых major + висевшее с 27.08 обязательство). **Минор контракта 0.9.0 ратифицирован** по пингу сессии P12 (вторая граница пересчёта `chapters_done` + непрозрачный `shape_epoch`), с ограничением: признак формы конвейера на провод НЕ выносится — это было бы третьим исключением границы, запрещённым D39.163. + +### 2. ЧТО СМЕНА УЗНАЛА — три вещи, стоящие передачи + +**(а) Опровергатель промта окупился в третий и четвёртый раз подряд.** 41 находка по промту писателя книги, 21 по P12. Самая дорогая: моя «копия книги в песочнице» через симлинк мигрировала бы ОРИГИНАЛ в чужом репозитории — сессия исполнила бы буквально и испортила данные владельца. **Перечтение автором рубежом не считается — подтвердилось снова.** + +**(б) Долг без носителя переживает любые приёмки.** Ревизия P9 показала: из 18 находок его ревью две прожили двое суток БЕЗ строки — Д3 и снятие обхода `--verify-bank`; акт лендинга объявлял закрытыми четыре ряда чужого регистра, которые остались `open` (их закрыл аудит доков, не лендинг). Норма записана в ролевой промт: **утверждение акта о ЧУЖОМ ряде сверяется его статусом В ТОТ ЖЕ заход, и расхождение в чужой зоне переводит ЗОНА — твоё действие пинг, не своя правка.** + +**(в) Якорь по номеру строки в файл, который правит ЖИВАЯ сессия, — заведомо мёртвый.** За смену гейт `--lint` поймал их девять; лечение не «чинить номер», а снимать номер: греп-указатель по токену. Это касается зонных журналов, канона под минором и кода зоны в работе. + +### 3. МОИ ОШИБКИ, полностью + +1. **«Открытая вкладка теряет сессию примерно через час» — вынес владельцу как факт.** Спутал ПЕРИОДИЧНОСТЬ уборки с сроком жизни сессии: реально 14 суток бездействия / 30 абсолют. Поймал ВЛАДЕЛЕЦ вопросом «ты уверен или придумываешь?». Эррата 30.08-а; вопрос снят с его листа как несуществующий. Класс — вывод из соседнего числа, тот же, что у №19. +2. **Принёс владельцу продуктовый вопрос, которого у него нет** (квоты фри-тира), не разделив продуктовую развилку и инженерную гигиену. Поймал владелец: «почему этот вопрос ещё не закрыл?». Норма следствия: вопрос владельцу обязан быть уже очищен от инженерной половины. +3. **Собрал состав пака P12 ДО чтения документации зоны.** Черновик содержал П-20 как автоматику — прямо против записанного решения зоны («автоматический ответ и есть эскроу»). Поймал владелец вопросом «платформенную документацию ты дочитал всю?»; после полного чтения состав изменился на треть. +4. **Дважды вписал номер строки ДО грепа** (`invocation.go`, `middleware.go`) — оба раза поймал гейт якорей. Мелочь, но ровно тот же класс, что №1. + +### 4. ЧТО ЛОВИЛО МЕНЯ ЛУЧШЕ, ЧЕМ Я САМ + +- **Владелец.** Три ошибки из четырёх — его вопросами, и все три вопроса были формы «ты уверен / ты дочитал / почему не закрыл». Прямой вопрос владельца дороже любого моего прохода. +- **Опровергатель промта** (два пака, 62 удержанных находки суммарно) и **приёмочные линзы** (слепая к отчёту + охотник вне карты). +- **Гейт якорей `counts.py --lint`** — девять протухших указателей за смену, включая мои свежие. +- **Сами сессии.** Бэкенд-сессия принесла obstacle о чужих `-wal/-shm` и сама назвала свой ложный прогон батареи; платформенная принесла пинг по канону вместо тихой подгонки и нашла самопротиворечие канона, у которого не было носителя (строка 241). + +### 5. ЧТО ОТКРЫТО НА НОВОМ ОРКЕСТРАТОРЕ + +**Очередь №21 — в CURRENT-STATE.** Пять обязательств смены переходят: **приёмка пака P12** (сессия `textmachine-main-b5` работает; ратифицированный минор 0.9.0 придёт её лендингом) · **промт холодного прогона движка** (не написан; гейт ключей снят словом владельца) · **`PD-425`** взят в P12 — закрыть или пере-диспозиционировать при приёмке · **вопрос владельцу**: путь к файлу провайдерских ключей ДЛЯ ПЛАТФОРМЫ · **ресёрч-сессия `textmachine-36`** пишет `docs/research/29-harness-topology-survey.md` — файл не коммитит, лендинг и ратификация на №21. + +⚠ **В дереве лежит НЕЗАКОММИЧЕННОЕ и это НОРМА:** работа пака P12 (код зоны + её записка-план в зонном журнале) и МОЙ пинг зоне в том же журнале — коммитить их вместе при приёмке P12; я не коммитил, чтобы не унести чужую работу под своим сообщением. + +### 6. АУДИТ ДОКОВ 30–31.08 — что было неверно и почему это повторится + +Инвентарь ВСЕХ живых доков (5 аудиторов + верификатор на находку): **57 находок, 55 удержаны**, применены. Самые дорогие классы: глоссарий знал 10 глаголов из 11 и объявлял список полным (третий рецидив подряд) · реестр требований не имел строки о выдаче книги пользователю (заведена ПТ-44) · закон шва объявлял ПРЕДСТОЯЩИМИ две уже построенные двери · money-path не знал второго потолка и держал провенанс ставки как действующий · очередь обосновывала блокер грепом, ставшим ложным в день лендинга · хвост журнала на четверть состоял из прожитых дампов (вынесены в слайс). ⚠ **Форма реестра нот разъехалась на 74 строках из 224** — приведение машинным правилом, строка **242**; чинить руками дороже пользы.