diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 88e8eda9..d994a5f8 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,14 +1,14 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-10, голова D39.129; хендофф №15→№16 — D39.124/125, приёмки фронта S3.6/S3.7 — D39.127/129, промты эмиттера и P5 — D39.128). Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей после инцидента отката чужих файлов — D39.113, гардрейлы в CLAUDE.md. +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-14, голова D39.130; приёмки S3.6/S3.7 — D39.127/129, промты эмиттера и P5 — D39.128, приёмка P5 — D39.130). Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей после инцидента отката чужих файлов — D39.113, гардрейлы в CLAUDE.md. > - **Эра №15 закрыта — семь приёмок, все ПРИНЯТЫ и залендены**; лента, коммиты и разборы — D39.109–123 (D-лог) и реестр нот `architecture/05-decisions-index.md`; снимок прежних бюллетеней этой шапки — архив-слайс `-08-02-04`. -> - **ЖИВОЕ:** полигон эксп-22/23 — дерево ЗАЛЕНДЕНО 10.08 с ревью-шапками приёмки №16 (числа подтверждены независимым пересчётом; **выводы НЕ ратифицированы** — владелец 10.08 признал постановку неполной), **фаза Д заказана**: промт `docs/POLYGON_EXP2223_DOVODKA_SESSION_PROMPT.md`, запуск по слову владельца (санкция потолка $10.00 при запуске) · фронт: S3.5–S3.7 ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.127/D39.129, лендинги `57e6bd1`/`3e465bd`), контракт **0.2.2** в каноне, i18n-механизм построен (ПТ-36 🔶) — **S4 следующий, промт выдаёт оркестратор ПОСЛЕ приёмки P5** (экран загрузки стоит на `POST /books`) · промты бэкенда/платформы ВЫДАНЫ 10.08 (D39.128, после полного пере-чтения корпуса по заказу владельца): **эмиттер** (`docs/BACKEND_EMITTER_SESSION_PROMPT.md` — строки 103+135+165, закрывает PD-113; вход = `16-events-emitter.md` целиком) · **платформа P5** (`platform/docs/PLATFORM_P5_SESSION_PROMPT.md` — П-9 `POST /books`+PD-72 · стоп/резюм PD-140 · наблюдаемость П-11+PD-114); запуск обоих — по слову владельца, параллельность легальна; эскроу (136) — следующим денежным промтом. +> - **ЖИВОЕ:** полигон эксп-22/23 — дерево ЗАЛЕНДЕНО 10.08 с ревью-шапками приёмки №16 (числа подтверждены независимым пересчётом; **выводы НЕ ратифицированы** — владелец 10.08 признал постановку неполной), **фаза Д заказана**: промт `docs/POLYGON_EXP2223_DOVODKA_SESSION_PROMPT.md`, запуск по слову владельца (санкция потолка $10.00 при запуске) · фронт: S3.5–S3.7 ИСПОЛНЕНЫ и ПРИНЯТЫ (D39.127/D39.129, лендинги `57e6bd1`/`3e465bd`), контракт **0.2.2** в каноне, i18n-механизм построен (ПТ-36 🔶) — **гейт S4 ПАЛ (P5 принят D39.130): S4-промт по слову владельца** (вход: экраны библиотеки/загрузки на живом `POST /books` · находки приёмки S3.7 · спек-правка 0.2.3) · **платформа P5 ИСПОЛНЕНА и ПРИНЯТА в три раунда (D39.130, `69d485a`)**: интейк книг `POST /books` с сентинелом хранилища · стоп/резюм с намерением в Postgres · Prometheus · Go-floor 1.26.6; развилка `book.yaml`: бета = форма Б (стройка следующим касанием зоны), движковая форма = строка 170 · **эмиттер** — промт ВЫДАН (`docs/BACKEND_EMITTER_SESSION_PROMPT.md`, D39.128 — строки 103+135+165+PD-196, закрывает PD-113), запуск по слову владельца · эскроу (136) — следующим денежным промтом. > - **Открыто на владельце:** запуск фазы Д полигона (слово + санкция потолка $10.00) · Приложение А контракта (148: реконструкция с баннером или заново) · продуктовое слово «остановлена: лимиты» (В-3) · К-13/Ф-31 (paused_reason один — «свой потолок» и «нет кредита» неразличимы) · В-4/Ф-30 (глава без заголовка) · фри-тир PD-104 (ноль на бете против автогранта $5 с суточным потолком) · порог 116 · мини-проба флора 44 (одобрена, промт не выдан) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · запуск S3.7/эмиттера/следующего платформенного пака · фронт-вопросы зонного журнала: В-7 (плотность интерфейса; держит и Ф-54 — обрезку центра на зуме) · В-8 (слово состояния в дереве) · **В-9 (какие языки интерфейса обещает продукт — механизм готов, ПТ-36)** · Ф-38 (вкладка «Замечания») · граница ПТ-33 для добавочных полей `BankTerm` (черновик S3.5/S3.6, D39.127 п.2б). > - **Сделано (сводно)** — снимок ленты закрытых эр в [archive/PROGRESS-2026-08-04-09.md](archive/PROGRESS-2026-08-04-09.md); детали — D-лог и слайсы. > - **Курс:** ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.59–78) → **ФРОНТ-ЭРА** (D39.81–100: зоны живые, контракт API ратифицирован) → **шов/платформа/движковые блокеры построены** (D39.106–123). Хвосты курса живут строками: 16 (edit-волна не гонялась НИ РАЗУ — держит и оси голоса 13б/24) · 46 (дизайн заморожен D39.92/93, промт ждёт выдачи) · coldrun-b фаза C заморожена чекпойнтом легитимно (D39.86; эталон денег/поведения — coldrun-a, read-only); развилка 0731 решена и исполнена (D39.87/91, код `553f1a3`). > - **Горизонт (D39.62/67, освежён D39.95):** **ДОБОР ИДЕАЛА** (первым прогоном: оси голоса 24 · авто-режим · цена 16; жильцы ролей решаются ДО прогона эксп-22 — строка 149 · веса K1–K12 13а · вне-претрейн чекпоинт 55; остаток арбитража банка = рецензент спорных кластеров при ре-пробе 74 — D39.102) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 62–68, 85) → Ф3 ридер-IDE (69–71). **Стоячие:** ToS-триггер 25.10 · Ш-2 до go1.27 (⚠ + x/text Unicode 17 тем же тулчейном — строка 119, реестр §Б-108 справочника якорей) · платные прогоны разблокированы (проба провода — D39.97, конфиги 112 залендены). > - **Стек (полная карта роль→модель→конфиг→квирки — [STACK.md](STACK.md), D39.126):** draft deepseek-v4-flash thinking-ON `low` **⚠0731** → терминолог (та же модель) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (топология ПОДТВЕРЖДЕНА при неразличимости жильцов — D39.117; закон-блок ОБЯЗАТЕЛЕН — строка 134; glm-5 резерв; вахта маппинга эффорта pro — §Б-108) → судья gemini (Ф2, в движке НЕ построен — строка 33); канал B Mistral+grok; ~$0.85/ранобэ (D30.4, пере-калибровка при следующем платном прогоне). ⚠ **ВЕСЬ банковый контур (банкнота+терминолог+классификатор) в shipping-c1 НЕ включён** — жив ран-локальным конфигом книги (строка 140; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping за `budget_usd: 0` (STACK.md §примечания). -> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 10.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **134** строки · зона бэкенд **68** строго / **91** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **33** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 10.08 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **135** строк · зона бэкенд **69** строго / **92** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0**, платные прогоны разблокированы · «скоро» **33** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74 (D39.102 п.2); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). > - Архивы хроники: `archive/PROGRESS-2026-07-04-10.md` (D31) · `-10-13` (D39.6-гигиена) · `-13-25` (стройка паков 11–16, rerun2) · **`-25-31` (паки 17–20 · мини-прогон · полигон-пакеты 5–8 · ToS · холодный прогон; D39.26–58)** · **`-08-01-02` (сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.59–90, срез D39.105)** · **`-08-02-04` (сессии №11–№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91–105 + снимок шапки эры №15)**. Записи ниже — живой хвост (№14+, эра D39.106+). ## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора) @@ -110,11 +110,12 @@ | 162 | **Структура глав, Этап 2**: in-band метки глав в потоке перевода (третий эшелон детекта + коррекция структуры по ходу черновой волны, §3а п.3) + канон-гейт названий ($0) + миграционные карты якорей (same/moved/split/merged/gone/new) + калибровочный корпус детекта в CI | бэкенд + полигон | когда-нибудь (после Этапа 1) | пак + корпус | research/27 §5/§6 Этап 2 | | 163 | **Версии модулей x/text|x/net двигают нарезку МИМО всех ключей** (NFC в NormalizeSource — таблицы модуля, не тулчейна; epub-токенайзер): бамп `go get -u` тихо меняет нарезку при свежих на вид манифесте/чекпойнтах/снапшоте — класс всей чекпойнт-плоскости, унаследован манифестом; вплести версии модулей (debug.ReadBuildInfo) в NormVersion/chunkerVersion либо явный запрет бампа без `--resnapshot` | бэкенд | когда-нибудь (до второго прогона книги) | малое касание | **D39.122**, приёмка (охотник №1) | | 164 | **Rebill-проекция `status` с nil baseMemory завышает RebillUSD**: read-путь не материализует base-банк → renderedContentHashes даёт пустую инъекцию → repin недоопознан, строка считается re-pay (консервативная сторона, но противоречит комменту «status can never quote a different number than translate»); материализовать base-банк на read-пути либо смягчить клейм | бэкенд | когда-нибудь | малое касание | **D39.122**, приёмка (охотник №1); preexisting | -| 165 | **Различимые exit-коды tmctl: потолочная остановка и graceful-stop** (сегодня оба = exit 1 ⇒ платформа отдаёт `failed` и на штатный стоп, и на исчерпание потолка — PD-113 платформы; после поправки формулы потолка (D39.123, PD-158) стоп по потолку = ровно исчерпание холда, цена неразличимости выросла; вскрыто приёмкой раннера на РЕАЛЬНОМ tmctl — фейк пробы умирал от сигнала) | бэкенд | скоро (вместе с эмиттером 103) | бэкенд-пак эмиттера | D39.123 | +| 165 | **Различимые exit-коды tmctl: потолочная остановка и graceful-stop** (сегодня оба = exit 1 ⇒ платформа отдаёт `failed` и на штатный стоп, и на исчерпание потолка — PD-113 платформы; после поправки формулы потолка (D39.123, PD-158) стоп по потолку = ровно исчерпание холда, цена неразличимости выросла; вскрыто приёмкой раннера на РЕАЛЬНОМ tmctl — фейк пробы умирал от сигнала); **+ PD-196 платформы (D39.130): exit 1 не различает и классы отказа `manifest` — «источник нечитаем» / «конфиг битый» / «лок занят» — интейк чуть не удалил файл пользователя за опечатку оператора; различимость классов отказа — тем же паком** | бэкенд | скоро (вместе с эмиттером 103) | бэкенд-пак эмиттера | D39.123, **D39.130** | | 166 | **Движковая поверхность оценки $/глава** (ставка-константа платформы $0.03 из exp08 v2 — временная мера беты, П-10 зоны платформы; честная оценка по книге/паре — движковая) | бэкенд | когда-нибудь | отдельный пак | D39.123 | | 167 | **Докс-пак по аудиту D39.125 — ЯДРО ИСПОЛНЕНО (D39.126):** реестр всех нот `architecture/05-decisions-index.md` · counts.py `--check` полнота реестра + `--lint` якорей · разгрузка топ-10 строк · входы 15-money-path/16-events-emitter/STACK.md · К-статусы сведены · 09-target/product-requirements освежены. **Остаток строки:** статус-баннеры экспов + шапка эндпоинтов quirks (передано полигону промтом фазы Д, §Д8 п.12) · DEFECT_REGISTER секциями (зона платформы, пинг отправлен 09.08) | доки/полигон/платформа | скоро (остаток — фаза Д полигона) | пинги зонам | D39.125, **D39.126** | | 168 | **Состав волн пайплайна = пар-конфиг (данные), не общий хардкод**: вопрос владельца 10.08 «нормально ли под китайский строить весь бэкенд и конфиги?» — жильцы ролей и промпты уже конфиг/langpacks, но ТОПОЛОГИЯ волн (перепис · точечный edit-контур · без второго прохода) одна на всех пар; если фаза Д покажет разных победителей по парам (H-3/H-4: en-черновик+edit против zh-связки), состав волн уезжает в пар-конфиг данными; ревью-вопрос общности §0 `12-go-style-notes.md` | бэкенд | когда-нибудь (после данных фазы Д) | замер (фаза Д) → решение владельца → малое касание | слово владельца 10.08, промт фазы Д | | 169 | **Экспорт банка для чтения фронтом** — канала под `GET /books/{id}/bank` нет ВООБЩЕ: банк живёт в приватном SQLite движка, платформе читать его запрещено (D39.85), артефакта экспорта нет (строка 101 дала таблицу подписи, не банк); нужен движковый артефакт экспорта (машиночитаемый, по образцу стоп-таблицы `tm-bank-stop-v1`) + проекция платформы; без него витрина банка стоит на моке, а подписной экран S5 фронта строить не на чем | бэкенд → платформа | скоро (гейт S5 фронта) | отдельное решение → пак | Ф-43 фронта, компаньон контракта §3, **D39.127** | +| 170 | **`tmctl init` — движок сам заводит книгу** (форма В развилки интейка): платформа зовёт $0-команду, движок пишет СВОЙ `book.yaml` — требования к полям живут там же, где проверяются (`config/book.go`); до неё бета живёт формой Б (рендер из деплой-шаблона платформой при создании книги, ратификация D39.130) | бэкенд | когда-нибудь (после беты формы Б) | малый пак | приёмка P5, **D39.130** | | 49 | **Этапы Б+В спеки D15.2** (content-addressed resume / `guard_hash` — D39.31 сознательно не строил) ; этап В = tmctl export-контракт D29.1 (annot-v1 · цвет-мап+rollup · политика красных fail-closed) + операторский протокол-документ релиза гендер-твиста (D5.1): сам механизм УЖЕ построен — until_ch-правка → точечный re-edit со сметой и $0-пере-пином (`repin.go`/`rebill.go`, D39.42 п.5/D39.45) | бэкенд | скоро (ПОДТЯНУТА D39.81: annot-v1 = источник замечаний для фронта — критический путь подключения) | отдельное решение (annot-половина — по контракту 14, D39.99) | D39.34(4), D33 п.5, D39.81 | | 49а | **ALTER-шаги миграций v8–v14 не идемпотентны вопреки шапке `migrate.go:9-11`** (полу-применённая БД не сходится; счётчик версий скрывает) — находка критика полноты пака-19 | бэкенд | когда-нибудь | отдельное решение | D39.56, PACK19_BUILD §6.9 | | 50 | F3-остаток идемпотентности | бэкенд | когда-нибудь | отдельное решение | D39.34(4) | diff --git a/docs/architecture/05-decisions-index.md b/docs/architecture/05-decisions-index.md index fb8db3fb..8335024e 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -182,3 +182,4 @@ | D39.127 | 10.08 | Приёмка фронта S3.6 принята и залендена (57e6bd1): гейты пере-прогнаны исполнением, 12 находок ревью → промт S3.7; Ф-47 ратифицирован (sense обязателен, спека 0.2.2); строка 169 — экспорт банка | ЖИВОЕ: S3.7 выдан (запуск по слову владельца), S4 после его приёмки; канон sense — диффом при лендинге S3.7 | жив | фронт контракт | | D39.128 | 10.08 | Полное пере-чтение корпуса по заказу владельца; выданы промты: бэкенд-эмиттер (103+135+165, PD-113) и платформа P5 (П-9/PD-72 + PD-140 + П-11/PD-114) | ЖИВОЕ: запуск обоих по слову владельца; развилка book.yaml при интейке гейчена ратификацией | жив | шов деньги платформа процесс | | D39.129 | 10.08 | Приёмка фронта S3.7 принята и залендена (3e465bd): канон контракта 0.2.2, i18n-механизм построен (ПТ-36 🔶); арбитраж 8.1 — HIGH приёмки S3.6 снята как ложноположительная, урок «браузерный вердикт только живым прогоном» | ЖИВОЕ: находки приёмки → блок S4-промта; S4 после приёмки P5; В-9 (языки интерфейса) на владельце | жив | фронт контракт процесс | +| D39.130 | 14.08 | Приёмка платформы P5 в три раунда (69d485a): интейк книг с сентинелом хранилища, стоп/резюм с намерением, Prometheus; ратификации Go-floor 1.26.6 + book.yaml формой Б; строка 170, дописка 165 (PD-196) | ЖИВОЕ: гейт S4 фронта пал — S4-промт по слову владельца (вход: POST /books + находки S3.7 + спека 0.2.3); стройка формы Б — следующим касанием зоны | жив | платформа деньги контракт шов | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index e84b04ac..c0bbe48e 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.129 (живой файл: карта · эрраты · живые тела · голова D39.106+; тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) +# Журнал решений оркестратора — контракт D1–D39.130 (живой файл: карта · эрраты · живые тела · голова D39.106+; тела закрытых эр — в слайсах `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+). @@ -483,3 +483,11 @@ **2. Арбитраж 8.1 (спор моей приёмки S3.6 с сессией): ПРАВА СЕССИЯ.** В Chromium геометрический запрос форсит расчёт раскладки и под `content-visibility: hidden` — замер таблицы в скрытой keep-alive вкладке даёт ширины эталона (живой прогон сцены `hidden` при этой приёмке). HIGH из D39.127 п.1 снята как ложноположительная; сессия не поверила приёмке, замерила и сняла свой же готовый механизм — образцовое поведение. **Урок в норму приёмки (дописан в память оркестратора): браузерное поведение не подтверждается рассуждением от кода — вердикт без живого прогона = PLAUSIBLE, не CONFIRMED.** **3. Ратификации и закрытия.** (а) Канон `14-api-contract/` догнал **0.2.2** байт-копией зонной спеки (`sense` → required, пустая строка = «различителя нет» — исполнение D39.127 п.2а); зеркало байт-равно. (б) Строки зоны Ф-47/Ф-49/Ф-50/Ф-51/Ф-40 закрыты; Ф-25/Ф-35 закрыты код-половиной; заведены Ф-52…Ф-55 и вопрос **В-9** (какие языки интерфейса обещает продукт — владелец). (в) **ПТ-36 → 🔶**: механизм i18n построен (каталог 157 ключей · гейт «текст местом» · стор языка · ``), содержимое — только ru; список языков — 🔒 владелец. (г) Остатки слоя данных из ревью (глушащие отметки reread · `asked` при resync · дырка гейта вычисленных литералов · вакуумные пассы perf/zoom-сторожей) — фронт-зона, в блок находок S4-промта. **S4 — следующий этап; промт после приёмки P5** (экран загрузки стоит на `POST /books`) (10.08.2026, оркестратор №16). ✅ + +## D39.130 — ПРИЁМКА ПЛАТФОРМЫ P5 ПРИНЯТА И ЗАЛЕНДЕНА В ТРИ РАУНДА (`69d485a`); ратификации: Go-floor 1.26.6 · интейк `book.yaml` формой Б · контракт-диспозиции · строка 170 и дописка 165; гейт S4 фронта ПАЛ (14.08). ✅ + +**1. Приёмка (оркестратор №16).** Раунд 1 — воркфлоу 10 агентов: **8 находок (1 high: пол ревизии библиотеки игнорировался на вставке; деньги: `FinishUnspawnedStop` без гарда живой попытки; интейк: цепочки зомби/потери исходника), 0 опровергнуто.** Раунд 2 — ре-чек дофикса 6 агентами: **3 находки (2 high: гейт тулчейна фактически ПРИНИМАЛ 1.26.5 — floor жил только в тексте ошибки; гард корня хранилища не переживал unmount-в-BooksDir и маскировался бутовым MkdirAll).** Раунд 3 — закрыт с пинами/посадками; кросс-семейное ревью дофикса самой сессией дало 5 находок (две — уничтожение данных), эмпирически подтвердив D39.120. Финальная верификация исполнением: батарея EXIT=0 (16 пакетов, `-race`, живой PG `~/.local/pgsql:55433`); **гейт версий живьём отказывает 1.26.5 и `go1.27rc1`, принимает 1.26.6/1.26.10**; сентинел `.tmplatform-books`; `revision+1` ровно у двух заявленных прогресс-писателей; тестов **261→359** (удалённых 0), регистр **198** (145 закрыто · 48 открыто · 1 major PD-113 — ждёт эмиттера). Живые числа проб — «со слов» с пометкой. Нарратив — зонный журнал (три записки-плана). + +**2. Ратификации.** (а) **Go-floor 1.26.6** (пять stdlib-адвизори, две трассированы в живые пути сетевого модуля): `make version-check` сравнением версий (`sort -V`, пререлизы отвергаются) + `toolchain go1.26.6` в go.mod; цена названа и принята — офлайн-хост с `GOTOOLCHAIN=local` и 1.26.5 зону не соберёт; **движок этим не двигается** (патч-версия, x/text-вахта Ш-2/119 не задета). (б) **Интейк `book.yaml` — форма Б** (платформа ОДИН раз рендерит стартовый конфиг новой книги из деплой-шаблона; дальше файл принадлежит оператору): ратифицирована как ИНТЕРПРЕТАЦИЯ D39.110 §2б с аудит-следом — то решение о потолках/правке СУЩЕСТВУЮЩЕГО файла, создание стартового конфига несуществующей книги ему не противоречит; несогласие владельца отменяет одной репликой; стройка Б — следующим касанием зоны. **Форма В** — строка **170** (`tmctl init`, движок пишет свой конфиг). (в) **Контракт (диспозиции владельца контракта):** PD-172 `file` последним · PD-173 enum-причина `rejected` (продуктовые фразы — владелец) · PD-174 404/503-классы · PD-180 «201 несёт `parsing`» + перечень отказов интейка — спек-правка **0.2.3 = задача S4-промта** (фронт бампит зеркало и типы, канон — диффом при лендинге S4). (г) Мотивированное исключение Н2 (два прогресс-писателя синка остаются на `revision+1` — прыжок через пол развязал бы книжную и главную шкалы) ПРИНЯТО. (д) PD-178 закрыта переформулировкой (состояние user-менеджера плавает между сессиями стенда) + скип-гейт по СПОСОБНОСТИ. + +**3. Бэклог и очередь.** Строка **170** заведена; строка **165** дополнена PD-196 (exit 1 движка не различает классы отказа `manifest` — «источник нечитаем»/«конфиг битый»/«лок»; интейк чуть не удалил файл пользователя за опечатку оператора — различимость классов = мандат эмиттер-пака). **Гейт S4 фронта ПАЛ** (D39.129 условие исполнено): вход S4 = экраны библиотеки/загрузки на живом `POST /books` + находки приёмки S3.7 + спек-правка 0.2.3; промт — по слову владельца (14.08.2026, оркестратор №16). ✅