textmachine/docs/architecture/05-decisions-log.md

503 lines
292 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Журнал решений оркестратора — контракт D1D39.131 (живой файл: карта · эрраты · живые тела · голова 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+).
> ⚠ **Навигация (актуализация 07.08, эра D39.1xx):** append-only-дисциплина (D23.3) означает, что
> НЕВЕРНЫЙ ФАКТ внутри старой ноты не переписывается, а получает эрратау — и тогда он опасен ровно
> тем, что грепающий его найдёт ПЕРВЫМ, а эрратау ниже может не дочитать. Поэтому поправки к фактам
> живут ЗДЕСЬ, в карте, а не только в хвосте: **D39.109 п.3 читать через D39.112 п.2(а)** («30 суток
> — не буква NIST: SHALL требует установить overall-таймаут, 30 суток это SHOULD; сбрасывает ли его
> успешная ре-аутентификация, NIST не говорит — наш жёсткий предел это НАШ выбор, строже нормы») ·
> **D39.109 п.4 читать через D39.106 п.3** (PD-59 superseded, пайп-путь `supervisor.go` = дев-режим)
> · **D39.109 п.1 и «живой уязвимости не нашла» читать через D39.112 п.2(в)** (отказ в обслуживании
> входа ЕСТЬ — PD-80) · **D39.110 п.1 «дословно по смыслу» читать как ПЕРЕСКАЗ** решения, не цитату ·
> **D39.108 (продуктовый вывод «второй проход на dspro отрицателен», эксп-20 §5.2 «со слов») читать
> через D39.117 п.4** — опровергнут эксп-21 честным ригом: `A/F3` +2.50 Holm 0.0004, топология
> подтверждена, жильцы неразличимы · **D39.113 (таблица потерь: «правки промта — параллельный
> оркестратор») читать через D39.117 п.7** — ошибочная атрибуция: правки параллельного не терялись
> (его HEAD — финальная версия); чьи модификации были в дереве — достоверно неизвестно.
> ⚠ **Навигация (актуализация 04.08):** два supersede-указателя эры D39.9x: **D39.88/D39.84 п.8 (право самокоммита фронта/платформы) → отозвано, коммитит ТОЛЬКО оркестратор** (D39.98 п.3; тела переписаны на месте с санкцией владельца, pre-rewrite — git `2b166b7`) · **норма 30.07 «короткая приёмка» → амендирована владельцем 03.08: приёмка всегда адверсариальная** (носитель — промт оркестратора §Анти-паттерны + D39.101 п.1) — упоминания «короткой приёмки» в телах читать через эту пометку · **двухсекционная редакторская инъекция и смягчающая роль маркера ⟨проверить⟩ → доктрина инжекта D39.104**: банк на проводе = ЗАКОН для всех ролей независимо от статуса строки, право «перевести иначе» упразднено, блок редактора — ЕДИНЫЙ, маркер с провода снимается (статусы строк и подписная таблица не меняются; внесение в движок — строка 134 после пробы 18) — упоминания двухсекционки/смягчения в телах читать через это.
> ⚠ **РЕЕСТР ВСЕХ НОТ (карта актуальности v2) — [`05-decisions-index.md`](05-decisions-index.md):** одна строка на ноту (№ · дата · суть · статус жив/частично/superseded→кем · где тело), покрытие ВСЕХ нот целиком (голова — по титулу реестра); полноту сторожит `docs/scripts/counts.py --check`. Прозаические списки прежних ревизий («полностью superseded» · «частично амендировано» · «живое ядро» — покрывали только D1D39.28) пересобраны туда ПОСТРОЧНО докс-паком 167 (09.08, оркестратор №16); тела нот не тронуты — они дословно здесь и в слайсах. Новые ноты аппендятся В ХВОСТ живого файла (**свежая голова — С ХВОСТА**); сводка головы и очередь — CURRENT-STATE в `../PROGRESS.md`.
> ⚠ **Форма эрраты впредь — ОДНА: навигационная пометка в этой шапке** (D39.125 п.3; правка тел задним числом — против D23.3). Прижизненные правки-на-месте остаются с маркерами по месту и новыми не множатся: D39.110 п.2(в) («⚠ ИСПРАВЛЕНО 08.08» → D39.115) · D39.112 п.2(а) (поправка к поправке тем же днём) · D39.98 п.3 (тела D39.84 п.8/D39.88 переписаны с санкцией владельца, pre-rewrite `2b166b7`).
---
> **⟶ ТЕЛА ЗАКРЫТЫХ НОТВ СЛАЙСАХ `docs/archive/architecture/05-decisions-*.md` (D39.125):** `D1-D38` · `D39-arch-reset` (D39D39.19) · `D39-20-58` · `D39-59-90` · `D39-91-105`. Грепай номер СНАЧАЛА здесь (живые тела + карта + эрраты), затем в слайсах. В живом файле телом остались: D22 · D25 · D29 · D30 · D39.25 · 30 · 33 · 42 · 47 · 58 · 62 · 63 · 64 · 69 · 70 · 81 · 84 · 85 · 93 · 99 · 100 · 102 · 104 и вся голова D39.106+. **Статус/суть КАЖДОГО номера — реестр [`05-decisions-index.md`](05-decisions-index.md).**
## D22. Приёмка пакетов «бэкенд №3» и «полигон-erotica» + развязки 18+/эха/L3 (10.07, оркестратор). ✅
Внешнее ревью обоих пакетов (8 ревьюеров, всё исполнением: go build/vet/test -race + 11 мутационных ревертов в scratchpad-копии; пересчёт exp11 из сырья поштучно независимой репликой классификатора; Fisher-статистика на клеймах; вендор-цены по официальным страницам с датами). Вердикты: **оба ACCEPT_WITH_FIXES, залендены (e1fcee4, 3551997)**; микро-дефекты журнала исправлены оркестратором (заголовок пакета-2 восстановлен; счёт диффа бэкенда 20 файлов +860/143).
1. **D14.4 ЗАКРЫТ — последний critical проекта.** 18+ эмпирика полна: violence (exp10) + erotica по трём парам/регистрам (exp11). Mistral-дефолт канала B подтверждён 18/18 на классике/вебновелле/романе; 0 content-отказов у всех переводчиков (0/18×5 армов).
2. **Спека D15.2: v3 принята с двумя ОБЯЗАТЕЛЬНЫМИ амендментами (v3.1) до реализации.** (а) `Book.SourceLang/TargetLang` → verdictSnapshotID: ревью сконструировало и ИСПОЛНИЛО stale-hit, который v3 пропускает (языки — вердикт-входы вне рендера: cjk-гейт/coverage-коридоры; `editor.md` не рендерит `{{target_lang}}` → content_hash их не ловит; на этой оси v3 была СЛАБЕЕ текущего snapshotID, клейм «нет ре-открытия stale-serve» опровергнут); правило §4 переформулировать: судьбу обязано получить ЛЮБОЕ brief-поле, потребляемое вне рендера. (б) cache_ttl-противоречие: `Context.CacheTTL` демотировать до advisory (wire-инертен — не доходит ни до одного клиента) либо честно признать полную переоплату; `prov.CacheTTL` — в маппинг §4. Плюс до реализации: axis-sensitivity-тест RequestHash (флип role/stage меняет хеш — сейчас мутация «удалить role» выживает весь сьют); абзац «паритетные не-цели» в §8 (classify-Source для editor-строк; Retries/Escal.BudgetUSD вне хешей; транспорт); line-refs обновить. Отклонение YoPolicy/StyleAllowlist → verdictSnapshotID (консервативнее подсказки D20.1c, цена $0) — **ратифицировано**. Узкий клейм §3.3 (guard ⊇ stageSnap wire-поля) подтверждён поле-за-полем.
3. **Деньги Gemini: `reasoning: additive_total` РАТИФИЦИРОВАН** — закрыт недоучёт 146×/вызов (thinking только в `total_tokens`; settle деривит totalpromptcompletion; mutation-hardened; кэш не задваивается). Условия до заводки Gemini-стадии в прод: $0.01-проба «thinking ⊆ max_tokens» на 3.1-pro-preview (резерв для additive_total сознательно 0 — допущение проверено только на 2.5-flash; пробой потолка ограничен одним вызовом), негативный кейс деривации (total<prompt+completion мутация гарда сейчас выживает), квирк-строка в exp00. Экспозиция Ф1 нулевая (gemini не на wire-пути дефолт-конфига).
4. **D3-текст исправлен:** апекс = `gemini-3.1-pro-preview` (голый 404; квирк был ратифицирован 04.07 синк живых доков по grep-списку ревью выполнен). **Цена Mistral $0.5/$1.5 (Large 3) закрыта** тройной сходимостью: полигон (зеркала) + бэкенд (/pricing/api) + ревью (вендор-страница); $2/$6 = legacy Large 2 (ретайр 31.05.2026). Вопрос 3 бэкенда закрыт.
5. **D19.1 — register-оговорка (амендмент):** «reasoning-ON снимает эхо grok» подтверждено для СОВРЕМЕННОЙ прозы (совр. zh-вебновелла 0/10 exp10; совр. ja 1/6; en 0/6), но на архаичной плотно-ханьской (金瓶梅, минский байхуа, упрощ. графика) НЕ спасает: **4/6 verbatim при reasoning_tokens 349847** (vs совр. zh p=0.008; vs ja p=0.12 не значимо; ON vs OFF на архаике неразличимы p=0.28; для OFF регистр-эффекта нет p=0.79). «Регистр входа» как общий закон рабочая гипотеза до контрольных ячеек (дешёвый PD-контроль: совр.-zh-эротика + violence-пассажи 水滸傳 полигону, не срочно). Следствия: echo-гейт обязателен на ВСЕХ конфигурациях включая reasoning-ON (D19.2 подтверждён); эскалация на grok-ON НЕ лекарство от эха на архаичных zh (echo-rate хопа ~2/3 жжёт бюджет на почти гарантированный ре-флаг); для приёмочной 蛊真人 (совр. вебновелла) D19.1 в силе. Квирк-строка дописана.
6. **Судьи 18+ (сужение exp10/D19.1):** формула «судьи 18+ = Grok+Gemini, замена не нужна» **ОТМЕНЕНА для эротики**: Gemini fail-closed на графичной эротике (8× `PROHIBITED_CONTENT` wire-verified; фильтр неконфигурируем native API не спасёт; на violence/SFW Gemini остаётся). **Grok — первичный судья эротики для НЕ-grok переводов.** Дублёр НЕ ратифицирован: gpt-5-mini на эротике не мерен (и ушёл с прайс-страницы), а D13.3-коллизия оставляет grok-эскалированные 18+ чанки вовсе без померенного судьи **проба-гейт (полигону, центы, материал уже в eval/data):** gpt-5-mini + минимум один не-Google/не-xAI кандидат (mistral-судья для grok-выходов; kimi/glm после ToS-чека) на 18 Mistral- и 13 чистых grok-ON-переводах; пре-регистрировать refusal-rate и agreement.
7. **L3-скрин РАТИФИЦИРОВАН как задача (рамка, не дизайн).** Ключевой факт exp11: отказ провайдера НЕ сигнал уровня (0/18 на L2-explicit; DeepSeek переводит против собственного ToS) пре-скрин не «глубина обороны», а единственная автоматическая линия L3 (сегодня линию держит только ручная дисциплина корпуса/сида). Рамка: (а) per-chunk скрин на ingest для `adult:true` книг ДО любого wire-вызова (детерминированный лексикон-префильтр + локальный классификатор); (б) чек перед эскалационным хопом; (в) fail-closed: неэскалируемый терминальный флаг + человек, redrive только с явным ack; (г) НЕ реализовывать без спеки+метрики приёмки классификатора (FN-rate на размеченной пробе; методику сидируют minor-marker-скрины corpus_build; закрывает дыру стратревью §4.69.12). Спека бэкенд-пакет после рефакторинга; ОБЯЗАТЕЛЕН до первой erotica-книги в проде (приёмку 蛊真人 не блокирует). Настройка «переводить L3» отклонена владельцем 10.07.
8. **Fix-лист полигону (пакет №4):** (а) major: матчер content-filter подстрокой + самотест на составной `'content_filter: PROHIBITED_CONTENT'` (сейчас 8/8 отказов лежат `behaviour='empty'` латентная мина классификации); (б) major: параметризовать язык/жанр судейского промпта `explicit_judges.py` (ja/en-fidelity сняты под zh-рамкой переснять при переиспользовании); (в) мигрировать судью `memory_eval.py` (инлайн 2.5-flash EOL 16.10 + двойной `extra_body` + нет 404-ретрая ружьё на стене пилота); (г) U+FF70 из kana-корзины + parity-кейс с ; (д) append-only провенанс: ретраи отдельным файлом/superseded-полем, error-записи не удалять; (е) judge-raw без `[:600]` или оговорка; (ж) проба судьи-дублёра (п.6) + fidelity-хвост P4 (висит) + wire-аудит пре-шаг temp-свипа (D21.9) + контрольные ячейки регистра (п.5, не срочно).
9. **Fix-лист бэкенду (в реализационный пакет D15.2, попутно):** v3.1-амендменты (п.2); CLI-тест проводки `redrive --resnapshot` (хедлайн-фикс без покрытия мутация `_ = resnapshot` выживает); axis-тест RequestHash; негативный кейс additive_total; комментарии `models.yaml` «native Gemini для судьи 18+ Ф2» устарели против exp11 (поправить при следующем касании); опц. smoke-тест LoadModels на боевом yaml.
10. **Кодифицировано:** transient-прогоны в ЧУЖОЙ зоне только в копии вне рабочего дерева (полигон гонял go test в живом backend/ при чужих незакоммиченных правках обошлось, но впредь запрещено).
11. **Приёмка Ф1 разблокирована полностью:** сид финализирован (白凝冰 gender=hidden, 49 записей чисто воспроизведено ревью боевым loader'ом), цепочка D3/escalate_to заведены, деньги Gemini честны, D14.4 закрыт. Приёмочная сессия ОБЯЗАНА выставить `escalation.budget_usd>0` (иначе echo-эскалация черновика D18 не стреляет). Очередь предложена: приёмка бэкенд-4 (рефакторинг, промт выдан) GPT-восхождение (промт выдан); порядок приёмкарефакторинг за владельцем.
## D25. Приёмка research/17 (внешняя критика GPT-5.6 «восхождение»): вердикт и абсорбция (11.07, оркестратор). ✅
Ревью по мандату владельца «воспринять критично» (воркфлоу 12 агентов: 19 первоисточников по живым URL 0 несуществующих/чужих; протокол-аудит анти-якорения; аудит ~30 line-refs; red-team 11 строк §C против контракта; аудит §DИтога»): **ACCEPT_WITH_FIXES, залендено (a148f41) с ревью-шапкой** правила чтения там: §B2Итог» переграждены в PLAUSIBLE (ценностные «чей сильнее» CONFIRMED по его же §1); конвергенция §Aпроект на осях, засеянных нашим мандатом, НЕ считается независимым подтверждением; анти-якорение критиком соблюдено (лексический аудит + errata-без-правки-§A); критик не видел ни кода, ни результатов этапа A. Решения по абсорбции:
1. **Release-state контракт (§C-R1) — ПРИНЯТ КАК ЗАДАЧА С ГЕЙТОМ** (единственный blocker-класс вопрос совсем без D-решения): лестница `run_complete / structurally_complete / quality_reviewed / publishable`; детерминированный fail-closed экспорт для структурных/policy-дыр; semantic-флаги только через audited waiver. Ложится на disposition/паспорта D12 + Ф1-задачу экспорта. Ратифицировать при постройке читательского экспорта, ДО первого reader-facing артефакта (этап B не гейтит его экспорт owner-facing). Семантика «publishable» и право подписи waiver владельцу. Живой якорь уже есть: экспорт этапа A несёт флагнутые чанки маркированными zh-плейсхолдерами «run complete» «publishable» продемонстрировано.
2. **Fidelity evidence cascade (R2) — ПРИНЯТ КАК Ф2-ЭКСПЕРИМЕНТ, SHADOW**: минимальные пары 100150 (естественные + контрфактуальные: отрицание, агент/пациенс, число, род, модальность), обязательная случайная выборка unflagged, метрики corrected recall/precision + review-minutes/error; в гейт только после доказанного utility. **Гейт очерёдности: НЕ вперёд пилота Ф2.5** (D1.2 привязывает замер C1 к живому билингвальному судье пилота; каскад конкурирует за самый дефицитный ресурс билингв-якорь). Подготовку пар совместить с корпус-подготовкой пилота (полигон).
3. **Sequential-repeat судьи (R7) — амендмент D13.3 ТОЛЬКО как вложенный анализ**: решающие вердикты пилота остаются полными 11+ со свапом (пре-регистрация не трогается); prefix-анализ 1/3/5 vs full-11 считается из ТЕХ ЖЕ данных (cluster bootstrap по айтемам, $0 сверху); sequential-stopping как протокол только пост-пилот/production после этой валидации. Как замена решающего протокола ОТКЛОНЁН.
4. **L3 (R5) — расширения в спеку D22.7; методика валидации — вопрос владельцу.** В спеку: versioned policy, book/entity-контекст (cross-chunk возраст/алиасы/отрицание/цитаты-бэкстори), тройной выход `adult/prohibited/uncertain`, terminal uncertainty, human-confirm всех релевантных сцен первых adult-книг. Требование «~300 positive cases для 99% sensitivity» СТАЛКИВАЕТСЯ с гардрейлом «L3 не обрабатывать/не анализировать»: допустимый путь валидации (синтетические маркер-прокси / внешние размеченные бенчи / human-only контроль первых книг) и численный FN-bound решения владельца при приёмке спеки.
5. **Trust boundary (R10) — В КОНТРАКТ немедленно** (стоимость $0): текст книги и любая веб-выдача = untrusted DATA, никогда инструкции; translator/editor-роли не имеют tools/секретов/исходящих действий (сегодня выполняется конструкцией фиксируется как ИНВАРИАНТ, не случайность); **action-security gate — именованный блокер перед дачей tools/webfetch (Ф3)**. Адверсариальная инъекция-проба (plain/Unicode-obfuscated/quoted-fiction/false-positive) в eval-очередь перед Ф3, не срочно.
6. **Review bundle (R4) — ПРИНЯТ в minimal-форме**: экспортируемый бандл поверх существующих flags/disposition (reason, evidence, typed resolution, seconds, reviewer, reuse-маркер) БЕЗ нового persistent-домена; инструментировка minutes/flag + typed resolutions в пре-регистрацию пилота (полигон); persistent ReviewTask-домен только если данные этапа B/пилота его оправдают (flag-rate 5.3% с концентрацией 2/25 глав поддерживает минимализм).
7. **Echo-gate калибровка (R6) — задача полигону** (после флора D24.3): накопленные echo-провалы + 3050 чистых выходов на язык + синтетические partial/tail-эхо; порог при фиксированном FP-бюджете; каузальная модель «регистра» для гейта НЕ нужна (контрольные ячейки D22.5 остаются некритичными). Формулировка критика «prompt mitigation только экономит fallback» принята с поправкой этапа A: сам fallback-хоп до D24.3 был сломан бюджетом.
8. **Остальное:** R9 (summary baseline: source-retrieval vs prose+citations vs typed claims на 2030 дальних зависимостях ДО постройки typed claim store) Ф2 design-gate, принят; R3/R8 конвергенция без действий (= D15.2/D22.2 и D21.24), из R8 абсорбируется только **метрика over-stylization/fidelity в voice-арм пилота**; R11 rights/data manifest приложен к висящему юр-пакету владельца, строка «API-only vs all-in COGS раздельно» в exp08 v3 (D21.8) + логирование human-minutes в пилоте. Нюанс источников (шапка research/17): морф-оговорку Exel et al. НЕ абсорбировать в форме критика (инверсия: морфологию ломают constrained-decoding методы, не «терминологические констрейнты вообще» наш decl-aware путь ей не противоречит, а отвечает).
9. **§D: ранжирование реально открытых вопросов** (для владельца и очереди): **Q1 билингв-якорь zh/ja→ru** (блокер валидности пилота; владельцу: рекрут билингв-аннотаторов ИЛИ явное принятие ограничений en-моста в пре-регистрации) > Q3 publishable (п.1) > Q2 human budget (инструментировка в пилот; числа — владельцу пост-пилот) > Q5 L3 FN-bound (п.4) > Q4 юр-пакет (уже висит) > Q7 календарь G1/B6/морфо-гейта (оркестратор, после пилот-подготовки) > Q6 fact-gate резюме (Ф2-дизайн). Q8 (doc-drift) снят: владелец = оркестратор; его наблюдение подтверждено и закрыто — `02-mvp-plan:24,31` (ja→ru приёмка вопреки D18) исправлены этим лендингом.
10. **Методологический урок для будущих внешних критик**: (а) §A хешировать/коммитить ДО открытия фазы 2 (фриз research/17 — attested, not proven); (б) оси мандата формулировать нейтрально, не встраивая наши выводы; (в) список признанных дыр (фаза-3(г)) выдавать только ПОСЛЕ фиксации §A.
## D29. Приёмка research/16 «Ридер-IDE» + абсорбция фронт-требований в бэкенд-контракт (12.07, оркестратор). ✅
Внешнее ревью (4 оси: калибровочный и якорный источник-батчи по первоисточникам — все несущие клеймы существуют и держат силу, ниты в шапке дока; независимая реплика $0-пробы — арифметика воспроизведена точно, но база stale и метрика диапазонная; red-team контракта против status.go/D15.2-спеки — 4 major-поправки). **ACCEPT_WITH_FIXES, залендён с ревью-шапкой (458b0ea).** Ядро принято: чанк = несущий якорь (иерархия глава→чанк→абзац-best-effort→предложение; синк ко-локацией, не скролл-синком); калибровка YELLOW важнее покрытия (precision-гейт перед показом цветов, FP-бюджет <10%/флаг, severity-таблица, worst-child+счёт); детект-флаггер вместо форс-структуры промптом; числовой confidence НИКОГДА без QE-модели. Решения по абсорбции:
1. **В реализационный пакет D15.2 (бэкенд; промт после развязки exp12 — D28.4):**
(а) **`tmctl export`** настоящая команда (канонический ассемблер перевода + `annotations.json` annot-v1) НЕ «проекция как status --json»: src_range требует офсетов в чанкере, dst_range nullable/эфемерный, source_file_hash новое поле, спаны style-флагов пересчёт линтерами на экспорте; схему ратифицировать с колонкой exists/derivable/net-new; **нормализация выхода** (markdown-`###` в 8/54 финалов, унификация разделителей абзацев); paragraph_anchors v1 = детерминированная позиционная пара ТОЛЬКО при равном числе абзацев, aligner-based Ф3;
(б) **политика красных**: editor-facing маркированный плейсхолдер (текущее); reader-facing fail-closed (0 красных для `structurally_complete`) реализуется вместе с release-state лестницей D25.1 в этой же экспорт-задаче;
(в) **цвет-мап + GREY** (RED = дополнение: flagged && reasonglossary_miss; YELLOW = done∧(escalated glossary_miss postcheck_misses>0 style_flags>0); GREY = pending) + **passport-rollup 3-тир — как ЯВНЫЙ амендмент вердикт-правила D12/exp07** (при gate-on glossary_miss уже катится в fail-счётчик — сохранить консистентность с exit-кодом translate);
(г) **human_override слой 1 (LOCK)**: per-chunk provenance-состояние, ключ = **хеш сырого src-текста чанка** (НЕ content_hash=rendered-msgs — ловушка ложных re-review), консультируется redrive/status/export (redrive НЕ мутирует override — тест); слой 2 (context-keyed carry-over с состоянием «override needs re-review», метрика «тихо-потерян=0») — дизайн вместе с v3.1 wire/verdict-split; override НЕ кормит глоссарий/память книги (чекпоинт-кэш не может по построению);
(д) **диалог-аварный флаггер парности** — verdict-side класс (bump cheapGateVersion → снапшот: только с D15.2, не «$0 сейчас»), калибровка на конфиге-победителе exp12 (stage-A вёрстка будет снесена reflow-фиксом).
2. **Полигону:** (а) диалог-пере-нарезка stage-A пробы — falsification-only (данные устареют с reflow); (б) precision-замер флагов — post-hoc против существующих заметок владельца (пре-регистрацию exp12 НЕ трогать; <10%-гейт = отдельный проход по 25 главам пост-reflow, гейтит только показ цветов Ф3); (в) Bertalign zhru spot-check перед GOLD-парами пилота (лицензия GPL-3.0 учесть в тулинге); (г) arity-полоса паспорта с пином определения абзаца (диапазон 4458% по метрике ревью).
3. **Ф3 (в F3-brief, не сейчас):** chat-edit (span-map re-insert, только YELLOW/RED, re-flag выхода, метрить $/edit); ко-локация спаренных якорей; «Not useful»-петля; aligner-based paragraph_anchors; cost-of-fix ранжирование.
4. **Зафиксировано:** reader-embedded книго-полоса из детерминированных вердиктов новый синтез при скрининге (сужение как D21.7, не «аналогов нет»); Bertalign-мост «прошлый том» кандидат пилот-подготовки (гейт: spot-check).
## D30. Приёмка exp12 + флип D1 (моно→билингв) + пакет качественных фиксов + трек дешёвых моделей (12.07, оркестратор; владелец: дешёвый трек). ✅
Внешнее ревью exp12 (4 оси, всё исполнением по diag/-артефактам и store-копии: реплика активности под 3 метриками, аудит судейского слоя с пере-агрегацией, root-cause против промптов/store, scope+COGS+мемо): **все оси ACCEPT_WITH_FIXES, залендено с ревью-шапкой.** Ядро диагноза «нечитаемо = связка 4 дефектов» (пассивный моно-редактор + кривой сид + построчная вёрстка от промптов + отсутствие санитайзера) подтверждено независимой репликой; украшения сняты (шапка exp12: «единогласный #1» ложен; fidelity-гейт не доказан A2 сам внёс инверсию смысла). Решения:
1. **Флип D1: редактор — БИЛИНГВАЛЬНЫЙ (черновик + исходник), новый дефолт. Ратифицирован с явным supersede D17.в** (решение было закреплено за пилот-армом D13.1; переопределяю по досрочной эмпирике exp12 тройная ОТНОСИТЕЛЬНАЯ триангуляция: механика активности + судьи (билингв>моно устойчиво у всех) + 2 флагмана слепо; пилот-арм D13.1 остаётся ПОДТВЕРЖДАЮЩИМ на решающем корпусе). Вакуум верности (D1.1) закрывается обязательным re-gate на пере-прогоне: span-цитирующий fidelity-судья reasoning-ON + охота на класс инверсий/порч правки («пожертвуй мной»/«молва считал» — новые классы, вносимые АКТИВНЫМ редактором). **Editor-модель пере-прогона: glm-5 билингв** (цена ×13 vs gemini, 0 утечек; НЕ «единогласие судей»); gemini-3.1-pro — премиум-эскалация редактора ТОЛЬКО за санитайзером (утечка преамбул 6/6); **grok-4.3 reasoning-off из редакторских ролей СНЯТ** (no-op; exp04-ранг был на дефолт-reasoning билингв).
2. **Reflow-вёрстка:** снять «Сохраняй разбивку на абзацы» из zh→ru промптов (`translator.md:9`, `editor.md:8` — дословно подтверждено) + разрешить нормативную репараграфизацию (1:N на диалоге — норма, D29/research-16 §2.3) → bump prompt_version → resnapshot. Механизм реверстки (в промпте редактора vs отдельный пасс) — открытый вопрос пере-прогона (CAND-данные n=6 недостаточны); пере-прогон обязан мерить консистентность вёрстки явно.
3. **Output-санитайзер — новый детерминированный гейт-класс** (бэкенд, в пакет D15.2): ведущие преамбулы И хвостовые «заметки» (gemini 6/6), битые словоформы («Первок предок», «валуне»), латиница-врезки, markdown-`###` (8/54 финалов этапа A — D29-находка), утёкшие заметки переводчика. Ни один существующий гейт классы не ловит (проверено кодом). Дисциплина D2 (flag+skip), вердикт-ось.
4. **COGS-рамка (поправка мемо):** флип D1 = **+1525% (~$0.830.86/ранобэ)** — принято как цена качества (замер: вход редактора +60% токенов, книга +19%); «$1.52/ранобэ» = ОПЦИЯ Б (селективный апекс по exp08 + слой памяти) — отдельное решение владельца, НЕ подписано; проценты мемо (+117190%) арифметически верны, но относятся к опции Б.
5. **Глоссарий v2 — условная ратификация:** бесспорные 11 правок + 8 добавлений — принять; **спорные (修炼/культивация, 人祖/Первопредок, род «гу», 花酒行者 — добавлен ревью: тихо перезаписывал пожелание владельца) → `status:draft` ДО подписи владельца** (иначе уйдут в CONFIRMED-hard-constraints — memory.go:419/473); тихие промоушены draft→approved откатить в draft. Сид-обогащение мн.ч. (D24.4/полигон-№4-п.1) слить в ту же v2-итерацию — **один resnapshot** вместе с п.2/промптами.
6. **exp13 «бейк-офф переводчиков» — ратифицирован, приоритет №1 полигона** (премисса верифицирована: draft выбран за цену/токенизатор/кэш, качеством как переводчик не мерен НИКОГДА; exp04 мерил редакторов). Армы: mistral-large-2512 / glm-5 / deepseek-v4-pro / **grok-4.3 reasoning-ON** (добавка ревью: единственный CJK-чистый замер 10/10 exp10; ключ разблокирован D27); qwen — опционально, гейт на DashScope-ключ владельца; deepseek — thinking ON (эхо-мина). Судьи span-цитирующие reasoning-ON (урок п.1) + флагман-сверка владельца тем же monitor-паттерном.
7. **Трек владельца: дешёвые модели сейчас, фронтир — потом.** Зафиксировано: архитектура УЖЕ конфиг-первая (Р2/Р4: один раннер, пайплайн = yaml, C0C3) — «несколько бэкендов со своими пайплайнами качества» = несколько pipeline-конфигов поверх одной машинерии; фронтир-тир позже = модели в models.yaml + новый pipeline-yaml + resnapshot, БЕЗ переделки кода. Интерим-планка пере-прогона: «лучше фан-перевода» на дешёвом миксе; полная планка запуска (лучше-фана/гибрид/издательский + честный COGS опции Б) — остаётся открытым решением владельца (мемо-эскалация).
8. **«Модели не следят за сюжетом»** = слой авто-памяти/состояния (Annotator, межглавные резюме, voice/reveal — D21) — Ф2, связка с пилотом Ф2.5 зафиксирована; mid-run-append ограничение (D8/D15.1/D21.1а) не демонтируется. Owner-proposal «модель гуглит термины» = Ф3+ (D25.5 trust boundary); near-term = засев глоссария фан-конвенциями (v2 это и делает).
9. **Дорожка:** бэкенд-пакет D15.2 (промт ВЫДАН — `BACKEND_D152_SESSION_PROMPT.md`: v3.1 + фикс-листы D22.9/D23.4-остаток/D28.3 + D29.1-экспорт/override + D30.2/30.3 промпты/санитайзер + golden-refresh с расширением фикстуры D28.2) ∥ полигон exp13 (`POLYGON_EXP13_SESSION_PROMPT.md`) + финализация сида v2 → единый resnapshot → **пере-прогон 25 глав кандидат-конфигом** (переводчик по exp13; glm-5-билингв; reflow; сид v2; санитайзер) с re-gate верности → чтение владельца → этап B.
10. Гигиена полигону (из ревью, в exp13): каждый платный скрипт персистит usage/cost; пре-регистрацию коммитить до первого платного вызова; parse-чек полноты ранжирования судьи; флагман-сырьё — в diag/.
## D39.25 — Архитектурная директива владельца: в движке НЕТ понятия «18+» — generic content-labels × provider-capabilities; refusal-обработка причино-агностична (25.07, оркестратор №7). ✅
**Директива (владелец, 25.07, при ревью промта пака-17):** не городить 18+-костыль. Движок несёт ОДИН generic-механизм: **content-label** книги/глав (данные книги — «пометочка на фронте») × **capability провайдера** (данные models.yaml) × выбор цепочки/политика (конфиг). «adult» — ЗНАЧЕНИЕ данных; Go-идентификаторов/веток «18+/adult/канал B» в движке нет. Мысленный тест второго лейбла: archaic-register (D19.1-эхо grok на архаике — та же фигура «свойство контента × способность модели») обязан добавляться данными. **Проактивный роутинг по лейблу = ToS-гигиена, не оптимизация**: провайдер без способности не должен ПОЛУЧИТЬ контент (DeepSeek/Anthropic без adult-capability — строки данных), независимо от того, откажет ли. **Refusal-обработка generic**: D12-таксономия детектит ФАКТ отказа (hard/soft), причина (эротика/политика/прочее) — только операторская диагностика; путь один — регенерация → эскалация по цепочке лейбла → flag+skip (D2); параметризуется политика цепочки в конфиге, не код. **Честно 18+-специфичное (вне движка):** L3 = политика ВХОДА (человеческий уровень, спека D22.7 у владельца) · ToS-флаги = данные · пометка в экспорте/ридере = фронт. Продуктовое имя «канал B» остаётся в доках; инженерная форма — лейблы. Норматив: `12-go-style-notes.md` §0 п.6; промт пака-17 переписан под эту форму ДО запуска сессии.
## D39.30 — Решения владельца по итогам пакета-5: лейбл `violence` НЕ заводится (интерпретация зафиксирована письменно), риск Z.AI принят сознательно, две строки `accepts_labels` ПОДПИСАНЫ и применены (25.07, оркестратор №8). ✅
Три решения приняты владельцем 25.07 по фактам D39.29. Записаны здесь, потому что это ровно тот класс, который обязан иметь аудит-след: юридическая ось, 18+, принятый риск.
1. **`violence` — лейбл механически НЕ заводится; интерпретация фиксируется письменно (вариант 2 + аудит-след).** Подписанное чтение владельца: **нейтральное художественное изображение насилия в вымысле не является «promoting / inciting / glorifying / facilitating violence»** — то есть под глаголы-пропаганды, которыми оперируют все проверенные AUP, наши тексты не подпадают. Практика: лейбл `violence` в вокабуляре остаётся (механизм его держит), но книгам не назначается и `accepts_labels` им не заполняется — это ровно статус-кво, под которым уже прошли exp10 и rerun2, поэтому нового риска решение не создаёт, а приёмочная 蛊真人 едет как ехала. **Обратимость:** вариант «выдать `violence` вендорам с глаголами-пропагандами» остаётся доступен одной правкой данных в любой момент; `zai` под ним не подпадает в любом случае (плоский запрет), `xai` — тоже (чистое молчание). **Граница честности:** это интерпретация, а не право, выданное текстом; она защищает решение как обдуманное, но не заменяет разъяснения вендора.
2. **Риск Z.AI ПРИНЯТ сознательно, с записью.** Факт: Z.ai Terms of Use (Last Update 2026-04-14) п. f) запрещает «obscene, pornographic, **violent**, murderous, terroristic, or criminal incitement content» — «violent content» плоско, без глагола-пропаганды, то есть в отличие от п.1 здесь интерпретация не спасает. Экспозиция УЖЕ состоялась: glm-арм (`configs/pipeline-arm-glm.yaml`, `role: editor / model: glm-5`) гонялся живьём на 蛊真人 в rerun2 (D39.20). **Решение владельца: риск принять** — прогон исследовательский, на собственной книге, без публикации; glm-5 остаётся резервным армом редактора. **Условия, при которых решение пересматривается (записываю как часть принятия):** переход к публикации/клиентским книгам · использование glm на не-своём контенте · смена политики Z.AI (пере-проверка 2026-10-25). `glm-5.1` в `chains.default` (`configs/pipeline-c1.yaml:109`) остаётся недостижимым по построению (single-hop через `escalate_to`, `budget_usd: 0`), так что дополнительного вектора цепочка не даёт.
3. **Две строки `accepts_labels` ПОДПИСАНЫ и ПРИМЕНЕНЫ мной в `backend/configs/models.yaml`:** `xai: accepts_labels: [sexually-explicit]` (xAI AUP Effective 2026-06-26 + Enterprise ToS Last Updated 2026-05-12) и `mistral: accepts_labels: [sexually-explicit]` (Mistral Usage Policy Effective 2026-06-11, хост `legal.mistral.ai`). Обоснование — в комментариях у строк, цитаты — в `experiments/00-provider-quirks.md`. **Ни одна книга лейблов не несёт, поэтому применение строк НИЧЕГО не запускает и ничего не двигает** (проверено: `go test ./internal/config/` зелёный; строки — данные провайдера, вне хешей и вне снапшотов). Механизм перестал быть пустым и готов к первой explicit-книге; для неё по-прежнему обязательны предусловие D22.7 (L3-скрин) и Q2 (выбор редактора под лейблом).
**Остались открытыми (не блокируют, у владельца):** чтение Gemini-оговорки «for example … pornography or sexual gratification» (сужение vs иллюстрация) · связывает ли нас OpenAI Sharing & publication policy 2022 (единственное, что держит обе клетки OpenAI в UNCLEAR) · применимость Ollama ToS §4 к локальному инференсу · различать ли в конфиге причину пустоты (`FORBIDDEN` vs `UNCLEAR`) · дата заведения аккаунта OpenAI (§17 привязывает редакцию политик к дате договора) · ре-чек политик по хешу перед платными прогонами (триггеры: головной Google ToS 30.07.2026, квартал 25.10.2026). **Продуктовое (Ф3, вне движка):** Gemini API Additional ToS запрещает клиентов, «likely to be accessed by individuals under 18» — обязательство на конечный продукт (ридер/публикация).
## D39.33 — Директива владельца: МАСШТАБ — ПОСЛЕДНИМ, после достройки алгоритмического идеала; мини-прогоны ~10 глав = штатный инструмент доказательства эффективности (25.07, оркестратор №8). ✅
**Директива (владелец, 25.07):** «масштаб гонял бы уже при полностью построенном бэкенде — достроили весь идеал алгоритмический, который запланировали, и только тогда масштаб. Мини-прогоны на глав 10 можно делать, чтобы доказать эффективность крупных изменений».
**Что это меняет в контракте.** Ратифицированный курс D39.22 ставил «масштаб целой книги» ПЕРВЫМ после паков 12/13 («масштаб целой книги · канал B вживую · Ф2-механизмы · ja→ru §B5»). **Порядок амендируется: масштаб уходит в КОНЕЦ**, за достройку алгоритмического ядра. Обоснование владельца принимаю и усиливаю фактурой: приёмочная книга — 7,78 млн символов и ~2284 раздела (`第N节`), то есть масштаб-прогон стоит дорого не деньгами, а ВРЕМЕНЕМ и необратимостью решений, снятых на форме, которую мы всё равно собирались менять; а измерять эффект крупных правок на 510 главах мы уже умеем (rerun2: генерация всей книги-среза стоила центы, дорогая часть — судья, и он не обязателен).
**Мини-прогон становится штатным инструментом (норма, не разовое решение):** ~10 глав · детерминированные чекеры и read-only скан остатка первыми (ратифицированный приоритет «детерминированный скорер > судьи, где возможен») · судья зовётся ТОЛЬКО когда от его вердикта зависит решение · каждый мини-прогон отвечает на НАЗВАННЫЙ вопрос, иначе не запускается.
**Определение «алгоритмического идеала» (чтобы «достроено» было проверяемым, а не на глаз).** Свожу из ратифицированного корпуса; список — рабочий контур, уточняется ответами владельца ниже:
1. **Ф2-механизмы D21** — voice-профиль · реестр обращений (ты/вы) · reveal-окна. Ратифицированы 09.07, в коде отсутствуют. Промт пака-19 готов.
2. **Решение о петле ремонта (слой 3, D39.24)** — включение платного пути по замеру остатка; замер теперь едет мини-прогоном.
3. **Слой 2: извлечение дискурс-норм и few-shot из ТЕЛ промтов** (открытая строка шапки-таблицы `09-target-architecture.md`; форсинг — вторая пара).
4. **ru-target долг (слой 7)**`isRuTarget`×11 прод-сайтов · `TokenizeCyrillic`×6 · ключ «ru» в санитайзере; сегодня ограничение, а не дефект (кусает только не-русский таргет).
5. **Два нита общности** — едут первым же resnapshot (D39.31 п.5).
6. **native-Gemini судья** — механизм Ф2; нужен ли он В ДВИЖКЕ до пилота — вопрос ниже.
**ВОПРОСЫ ВЛАДЕЛЬЦУ (определяют границу «идеала», не блокируют старт п.1):**
- **Annotator-пре-пасс (D21 п.5)** — входит в идеал или остаётся опцией? Это LLM-проход (~+10% к вебновелле по D21 п.8), то есть деньги в COGS, а не только код.
- **Семантический span-судья / полярность** — D38.4 ратифицировал ОТКАЗ от него («защита = editor-swap»). Подтверждаем отказ как часть идеала или возвращаем в скоуп?
- **ja→ru §B5 (вторая пара)** — часть «идеала» (общность движка) или отдельная работа после?
- **ru-target долг** — до масштаба (то есть часть идеала) или можно после, раз таргет у нас один?
**Следствия, вступающие в силу сразу:** (а) пак-19 «голос и состояние» РАСПАРКОВЫВАЕТСЯ — под новым курсом он законно первый, и это уже не ре-ордеринг оркестратора, а исполнение директивы; (б) «следующий платный прогон» переопределяется из полного в МИНИ (~10 глав) и перестаёт быть гейтом чего-либо, кроме собственного вопроса; (в) «масштаб целой книги» уходит из ближайшей очереди в финальную позицию — перед пилотом Ф2.5.
**Честная запись о том, как это вскрылось (норма «признавай ошибки явно»):** позицию пака-19 я вчера предложил САМ, подав ре-ордеринг как исполнение плана; владелец усомнился, проверка дословными цитатами (D39.22 + CURRENT-STATE) подтвердила его сомнение, промт был запаркован (`16420c6`). Директива D39.33 делает ту позицию правильной ПО СУЩЕСТВУ — но она не задним числом оправдывает метод: вывод, совпавший с репликой собеседника, обязан быть проверен ПРОТИВ документов до выдачи, а не после.
## D39.42 — Решения владельца по фазе 2 пака-20 (26.07): ядро — новая роль ТЕРМИНОЛОГ (переводит весь смердженный банк по полным контекстам после черновой волны); флаг = опциональный аппрув поверх его выхода; редактор ест неподписанное С ПОМЕТКОЙ в авто-режиме; банкнота отдельным файлом; смена банка = ТОЧЕЧНАЯ ре-редактура по ключу со сметой и согласием; веб-фетч в v1 НЕ входит. ✅
**Архитектура — словами владельца:** «мы намайнить в банк можем весь контекст, потому что есть черновые переводы всей книги сразу … дальше отрабатывает модель, которая видит весь контекст и ПЕРЕВОДИТ весь банк памяти сразу, далее начинают работу редакторы и у них уже есть готовый весь переведённый банк. Если аппрув опционален — просто иди в перевод, который в банке; если обязателен — пайплайн останавливается и ждёт правок». Это ложится на волновую архитектуру без перестройки: draft-волна → майнер (из ИСХОДНИКА) + банкнота (варианты из черновиков) → **терминолог** (не построен — та самая дырка покрытия 3%) → стоп/авто → edit-волна. Направленная банкнота из ядра пака УХОДИТ (терминолог закрывает покрытие адреснее); банкнота остаётся evidence-каналом.
**Ратифицировано пунктами:** (1) **Терминолог** — роль в пар-паке; вход = смердженный банк (двусторонний $0-джойн майнер∪банкнота) + KWIC-контексты вхождений из исходника + варианты черновиков + Палладий + **жанровый словарь пары** (новые данные langpack: общепринятое индустрией — «культивация», не «совершенствование»; слова владельца: «не надо тащить чужой фан-канон, но надо тащить общепринятое»); выход = консолидированное dst на каждый терм (формула §C2 п.3, не мажоритарность) + провенанс + разброс; двухрежимная эмиссия §C2-7 (есть dst → `draft`, нет → `auto`); батчи, дешёвая модель, центы/книга. (2) **Веб-фетч в v1 НЕ входит** — полигону ресёрч-вопрос (улучшает ли, источники, провенанс); интерфейс роли закладывается расширяемым. (3) **Авто-режим**: неподписанные строки с dst едут редактору (и черновикам следующих прогонов) с маркером ⟨проверить⟩ (механизм D32/S1 готов); редакторский блок расширяется на не-Confirmed отдельной помеченной секцией; **ВСЕ строки банка фолдятся в версию памяти** ⇒ тихой пере-оплаты не существует как класса, **README-инвариант №2 НЕ трогается**, ось `lane`/P1 НЕ строится. (4) **Банкнота**: отдельный `translator-banknote.md` + `prompt_override` (книги без канала — $0, класс «таблица в экспорте» невозможен) + безусловный срез; бюджет 144 пере-считать (D39.41: впритык/отрицателен). (5) **Смена банка после оплаты** (поздняя подпись и любая правка) = пере-редактура ТОЛЬКО затронутых юнитов через `--resnapshot`-семантику (пере-пин $0 неизменных байт), со сметой «N юнитов, ~$X» ДО согласия — для честной сметы чинится P3 (проекция по contentHash + `sanitizer_stripped`); слова владельца: «если меняется банк — перезапускается редактура; вопрос насколько широко, на какие главы».
**Уточнения к записанному:** D39.36 п.3 «в инъекцию идёт только CONFIRMED» — верно ТОЛЬКО для редакторского блока; блок переводчика рендерит не-Confirmed с маркером (S1, тест). Моё объяснение владельцу «пометка нужна главам 450 того же прогона» было неверным для волновой архитектуры — взято назад (в волне черновики готовы до майнинга; пометка живёт на edit-волне авто-режима и в черновиках следующих частей). research/20 §C2 «не-мажоритарность» и §B3 «evidence-файл» — код расходится осознанно (S10/S11): §C2-формула уезжает в терминолога, артефакт кандидатов остаётся в сторе (спека амендирована этим блоком). Р7 «auto→approved автоматом» — superseded семантикой владельца D39.36/39.42.
**НЕ строить в фазе 2:** ось lane / durable-реестр P1 · ретирование `Gates.Banknote.Enabled` · направленная банкнота (вернуться по замеру покрытия терминолога) · неподвижная точка P5 · веб-фетч · M2-кэш (доктрина Д2 остаётся кандидатом на отдельную ратификацию).
## D39.47 — Владелец (26.07): ЖАНРОВЫЙ СЛОВАРЬ ОТМЕНЁН КАК КЛАСС — решение о переводе принадлежит ПОДПИСИ владельца на банк КНИГИ; пар-словарь форсит один регистр как единственно верный. Амендмент D39.42 п.1 / D39.44 (Q2, Z2) / D39.46 (Z-B1/B2/B6, Z-B4 сужен). Главный открытый вопрос покрытия — расширение эмиссии на класс term. ✅
**Принцип (слова владельца):** одна книга законно хочет «культивацию», другая — «совершенствование»; жанровый файл предписывал видение мимо подписи. Улики полигона это подтверждают: центральная строка 修炼 не подписывается В ПРИНЦИПЕ (выбор регистра, не факт — итог Z4-добора); «общепринятого нет — есть школы» (ложная сходимость: один английский глоссарий + один блогер); покрытие механизма 0/80, четыре строки из шести — ноль вхождений в книге стенда; консистентность уже даёт фактор «согласие с ПОДПИСАННЫМ соседом» («факт о книге», не предписание). **Честная запись о провенансе посылки:** «жанровый словарь» вошёл в контракт через оркестратора (D39.42 п.1 — из реплики владельца о «общепринятом», без улик), полигон затем измерил основание для отмены и НЕ сделал вывода (признание сессии; неиспользованный канал вопросов; цена задержки $0.01362 ≈ 3% пакета — при этом именно эти траты произвели отрицательный результат, которым отмена обоснована).
**Снимается:** Z-B2 (17 строк на подпись → справочная фактура ресёрча) · Z-B6 (беспредметен) · Z-B4 сужен (веб-фетч в роль по-прежнему НЕ вводится; «офлайн-словарь как пар-данные» полигон снял сам: польза 1/80) · Z-B1 беспредметен. **Уцелело целиком, перепрогоны не нужны:** контексты — главный рычаг (D39.46) · узкое правило транскрипции (Z-B3; боевой интерим-промпт УЖЕ в узкой форме — сверено по HEAD) · судья = катастроф-экран · вся фактура майнера/эмиссии/квадратичности.
**Размотка кода — дельта бэкендерам (адреса сверены оркестратором по HEAD):** `terminology.go` ScoreOpts.GenreDst + фактор genreAgrees/genreBonus (:357-359, :375, :433-434) · `terminologist.go` genreGlossaryMap/передача/инъекция блока (:130, :163-166, :322) · `langpack.go` поле GenreGlossary + parseGenreGlossary + GenreGlossaryFor · два теста-пина · файл `configs/langpacks/zh-ru/genre-glossary.txt` — удалить. ⟦TM-CANON⟧-якоря и CanonConflicts НЕ трогаются. Цена: пере-покупка только батчей терминолога (файл вне pack.Version — правка самого пака это обеспечила); волны не двигаются. **Вместо словаря главным вопросом становится эмиссия:** recall term=0.040 (修行 ×326 невидим терминологу); расширение СОГЛАСУЕТСЯ с принципом — даёт владельцу больше строк на решение, ничего не решая за него; цена известна из абляции (cap→0.429 при 624 строках; +тип→0.875 при 13 246, precision ≈0.15) + feed_cap (D39.45); kwic-дефолты 3×40 не покрыты замером (мерено на ~8×120). Санкция владельца на дизайн расширения — ожидается.
**Процессное правило №4 — в нормы промтов** (к трём из D39.46): деливерабл промта не отменяет права сессии сказать «этого делать не надо»; замер, подрывающий ПОСЫЛКУ задачи (не исполнение), обязывает остановиться и поднять через канал вопросов, а не выдать формально требуемый артефакт.
## D39.58 — ХОЛОДНЫЙ МИНИ-ПРОГОН ПРИНЯТ И ЗАЛЕНДЕН ($0.126068 из $0.50; закрыт владельцем после банк-стопа, Р7 «замер достаточен»): ГЛАВНОЕ — совместный recall холодного банка майнер∪банкнота = **0.918/0.980** против 0.0690.103 у майнера соло, банк приходит владельцу ПЕРЕВЕДЁННЫМ (149/150 строк с dst) · банкнота-парсер v2 ПАР-СЛЕПОЙ («src непуст и засвидетельствован книгой», строка 19 закрыта) + восстановление порядка колонок тем же инвариантом · РАЗДЕЛЕНИЕ ВЕРСИЙ КАНАЛА ратифицировано (Р2, амендмент инварианта №2: `bankSliceVersion` фолдится — его выход оплачен чекпойнтом; `bankParseVersion` едет с прогоном — его выход пересчитываемые улики) · секция редактора по ПРОВЕНАНСУ (S7), путь (ii) — экспозиция 0 доказана диффом (1119 пар «запись×ключ», 32 банка, позитивный контроль; версии не бампались) · ЭХО-МИНА ЖИВА при thinking-ON (П3 пре-регистрации: 2/20 черновиков чистым исходником, han_share 0.999; гейт `cjk_artifact` поймал, эскалация вылечила; «echo 0» D39.20 — свойство выборки, не гарантия) (31.07, оркестратор №9). ✅
## D39.62 — ОТВЕТЫ ВЛАДЕЛЬЦА ПО §12 ОБЩНОСТИ + НОРМА САМОПРОВЕРКИ + ДИРЕКТИВА ГОРИЗОНТА (01.08): **(Q1) П1 цель-шов САНКЦИОНИРОВАН** в состав rewrite-пакетов — формула владельца: «поедет в следующих паках — не принципиально когда и где именно, главное бэкенд писать по умному; цель исследования = найти и предложить, как снять инертность китайского/мастер-гу подхода в коде» ⇒ заморозка D39.24 §15.3 («ru-target-долг НЕ чинить») АМЕНДИРОВАНА: назначенный носитель = П1, приёмка = «пара, которой нет в репо, проходит слой 7 без правки Go»; **(Q5) пак-21 как единица РАСТВОРЁН** («мне в принципе без разницы» + карта D39.60): дешёвая шестёрка (#11 · #2 · #4 · гомоглиф · строгий OffLanguage с оговоркой 36а · строка 26) → батч фазы 2 · корзина (II) → П1/П2/П3 · #9 → арка банка (строка 73) · #12/K4a — сняты как не-дефекты; **(Q2)** resnapshot-фигура объяснена владельцу по-человечески — его внимания сверх одной будущей подписи не требует: запуск ОДНОГО общего resnapshot после развилки 74, цена сегодня ~$0.30.5 корпуса, после МАСШТАБА — порядки; **(Q3)** расщепление хеша пар-данных — НЕ делаем (объяснено; дисциплина взамен: правки данных копятся в тот же resnapshot-батч); **(Q4)** Р2/Р4 раскрыты владельцу отдельным сообщением, ответы ожидаются (строка 1); **НОРМА (дословно по смыслу): «сессиям ВСЕГДА писать мандат самопроверки исполнением на ВАЖНЫХ задачах — как текущий бэкенд и ресёрчи; на мелких — самопроверки меньше»** — вписана в промт-нормы оркестратора (вместе с уроком D39.61 «вывод на агрегате до вскрытия единиц запрещён»); **директива «планировать подальше и получше»** — горизонт достроен в CURRENT-STATE до Ф3 (фаза 2 общности → арка автономности банка → пере-замеры на новом стеке одним мини-прогоном → свип гипотез качества → добор идеала → ВТОРАЯ ПАРА живьём → МАСШТАБ → пилот Ф2.5 → Ф3 ридер-IDE); выданы промты: `BACKEND_GENERALITY_PHASE2_SESSION_PROMPT.md` (П0П4+шестёрка+77/78, $0-код, resnapshot только по отдельному слову) · `POLYGON_BANK_RAWMATERIAL_SESSION_PROMPT.md` (строки 21/22 + аудит типов 36а на сырье холодного прогона, $0; проб-пакет §12.7 — только по слову владельца) (01.08, оркестратор №9). ✅
## D39.63 — Р2/Р4 ОТВЕЧЕНЫ + ФИГУРА RESNAPSHOT РАСТВОРЕНА ПОСЫЛКОЙ ВЛАДЕЛЬЦА (01.08): **(1) Р2 = ЗНАЧЕНИЕ**: контракт семейства детекторов единиц/шкал (DC1-часы · магнитуды 万/億 · 成-доли · любой пересчёт) — жёсткий флаг ТОЛЬКО за неверное ЗНАЧЕНИЕ; неконвертированная в единицы читателя форма = мягкий счётчик/линт, НЕ дефект (согласуется с precision 1.000 против 0.167 разметки пакета-6); контракт передан фазе-2 промтом; **(2) Р4 — норма подтверждена** («Ладно»): у правила бывает потолок полноты by construction, записывается в контракт правила, «неразрешимая речь/мысль» не дефект и поклассово не переспрашивается ⇒ **строка 1 (Р1Р4) ЗАКРЫТА ЦЕЛИКОМ** (Р1 расщеплён D39.60, Р3 закрыт D39.44 Q4); **(3) владелец оспорил посылку «один общий resnapshot» — и ПРАВ для текущей фазы**: боевых книг в полёте нет, стендовый корпус ОДНОРАЗОВЫЙ (старые БД остаются читаемым $0-сырьём, перекупать их не для чего), каждый следующий замер — СВЕЖИЙ мини-прогон на новом стеке ⇒ фигура D39.60 п.(2) вырождается в дисциплину секвенирования: платных замеров не покупать, пока фаза-2 не залендена (иначе меряем вчерашний стек); механика `--resnapshot`/условных фолдов/П0-хеширования остаётся и строится — она про эру боевых книг после МАСШТАБА; побочное упрощение: данные-правки (шестёрка · #8 两 · класс speech-cue) на этой фазе перестают быть «дорогими»; **(4) развилка 74 — оперативное состояние «(в) ждать» по умолчанию**: платных прогонов до конца фазы-2 нет; перед следующим платным прогоном — ре-проба flash за копейки, довесок того же прогона — итерация №2 редакторов (D39.22); **(5) само-ревью выданных промтов по вопросу владельца — три дыры найдены и закрыты правками**: контракт Р2 вписан бэкенду · заметка о параллельной сессии и заморозке бинаря — обоим · карта чтения — полигону; параллельный запуск двух сессий подтверждён безопасным (зоны и артефакты не пересекаются) (01.08, оркестратор №9). ✅
## D39.64 — ОБЩНОСТЬ ФАЗА 2 ПРИНЯТА И ЗАЛЕНДЕНА ($0 — ноль платных вызовов, `--resnapshot` НЕ запускался; приёмка исполнением + адверсариальное 6-агентное ревью оркестратора: ни одно несущее утверждение отчёта не опровергнуто): построено **П0** — `lang.EmbeddedVersion()` (sha256 эмбед-данных, framing как у `Load`) БЕЗУСЛОВНЫМ фолдом в снапшот, дыра эмбед-плоскости ЗАКРЫТА (строка 76; мутационный тест: байт `target-ru.txt`/`injection.txt` = громкий resnapshot); **П1 цель-шов слоя 7 по данным** — `isRuTarget`×6 УДАЛЁН → `TargetActive()`/`TargetScriptNonLatin()`, токенизатор цели `TokenizeScript` с алфавитом из `word_script` данных + Mn-фолд U+0301 (#11 закрыт) = ЕДИНЫЙ шов линт↔репэйр (долг `repair.go` РЕПЭЙНУТ), `ExportNormalize`-гейт (7 сайтов), `ruSanitizer`→per-run поля `Checkers`, реестр целей из эмбед-файлов; книга `target_lang: en` инертна ПО ОТСУТСТВИЮ данных (мут.тест) — строка 32 ЗАКРЫТА; **П2 скрипт-шов источника** — `cjkShare`→`sourceScriptShare` по ОБЪЯВЛЕННОМУ письму (новый `lang-script.txt` + единый реестр `scriptRanges`), Hangul в CJK-leak: живой баг ko ЗАКРЫТ (строка 75), en/ko-эхо больше не слепые (вердикт-вокабуляр `cjk_artifact` сохранён); **П3** — 話-глава данными · sourceAbbrevs по языку книги · generic-детект глав без units («Chapter 12») · sizing-таксономия в ОДНОМ доме (`text.DenseScript`); **П4** — табличные опц-файлы + манифест-по-каналам: источник без пиньинь-морфологии грузится без Palladius-файлов, манифест-less пак БАЙТ-ИДЕНТИЧЕН (`langpack-v2-a28ed743c99c` — независимая проба оркестратора HEAD-vs-дерево), `packAlgoVersion` НЕ бампался — самый жёсткий блокер слоя данных СНЯТ; **шестёрка 2/6** — #11 + `translitInterjections`→данные (строка 26 закрыта); **#77** — ручка `RegenerateEchoBeforeEscalate` (дефолт 0 = байт-в-байт текущее поведение; гейт D19.2 не тронут; включение — решением при ре-пробе 74; при включении помнить: общий счётчик attempt с length-ре-геном + рост `maxTokensForAttempt` на каждом ре-гене). Верификация оркестратора: `-race` 14/14 · **Ш-1 НЕЗАВИСИМОЙ классификацией диффа голдена: 172 строки = ровно 5 осей** (`embedded_version` НОВАЯ · cheapgate-v6 · sanitizer-v7-hangul-leak · classify-v2 · chunker-v6; content_hash/disp/wire-тела/stage_text — 0) · майнер-парити EXACT (`n=13618`, катастрофы точны, recall 0.9655) · перекупок НЕТ (D39.63). Приёмочный критерий «пара, которой нет в репо, проходит слой без правки Go» ДЕРЖИТСЯ для П0/П1/П2/П4 + generic-П3 (свип: новых языковых ветвлений диф не внёс; остатки = документированные ru-дефолт-обёртки + флаги). **9 флагов §5 (не «10» — off-by-one) — очередь владельца (строка 14):** ё-фолд→данные (вердикт-несущий банк, сдвиг `memory_version`) · segmentation-фолбэк громким (ломает контракт corridor-фолбэка — `pipeline.go:839-848` + голден-фикстура на нём) · Fertility-map (калибровка ждёт боевого токенизатора) · encoding-реестр · 4 дефекта пака-21 → пакет-чекеров при свежем мини-прогоне (корпус `labels/` на стенде ЕСТЬ — барьер = утраченный в scratch харнесс) · #78 money-путь (дизайн §5.6 готов, не $0-хастл — строка 78 остаётся). Новая строка 79: остаточные Cyrillic-хардкоды пар-гейтед DC-чекеров (`checks/repair.go:131` · `checkers.go:457,474`) — инертны без dc-данных пары, кандидат на `c.wordScript`. Строки 72 · 75 · 76 · 77 · 26 · 32 ЗАКРЫТЫ (01.08, оркестратор №9). ✅
## D39.69 — КАЧЕСТВО БАНКА: ОБА ЭТАПА ПРИНЯТЫ И ЗАЛЕНДЕНЫ (этап 1 дизайн ратифицирован ВЛАДЕЛЬЦЕМ напрямую; этап 2 стройка той же сессией, $0, чекер-пак ещё не стартовал — коллизий нет; приёмка оркестратора: тесты/парити/голден исполнением + независимое воспроизведение флагманских чисел + 4-агентное адверсариальное ревью): **ПОСТРОЕНО ТРИ ПРИМИТИВА** — **§1 серия-батчинг (36в ЗАКРЫТА)**: `DetectSeries` HEAD-AWARE (равная длина · общая голова · различие только в модификаторе · L=1 вне · без транзитивного замыкания) + серия ЦЕЛИКОМ в батч + value-порядок отреза бюджета (частота-desc — **feed_cap ЗАКРЫТ этим**, из строки 86 изъят); канал по классу письма из данных (`lang-script.txt`), алфавитный источник инертен; «ровно 4 серии на живом BANK-FULL, ноль блоба, 方源/元石/元海 вне» — воспроизведено оркестратором НЕЗАВИСИМО; **§2 тип-классификатор ПЕРВИЧНЫМ (36а ЗАКРЫТА)**: отдельная фокус-фаза ДО RenderBatch (единственная форма с живой пробой 6/6), корректный тип роутит conform + праймит рендер + банкуется `attachClassifiedType` БЕЗ смены эмиссии (D39.50 не реоткрыт); своя роль/бюджет/промт `classifier.md`, request-hash-ось, fail-loud пары без промпта; честный $0-экран (тест ПИНИТ, что он пропускает юаньши/Юаньхай — флаг, не гейт); денежный цикл терминолога зарефакторен в общий `runBankRoleBatches` (resume $0 запинен тестом); **§3 Decl-шов (строки 27/84 ЗАКРЫТЫ)**: `lang.TargetStemmer` из ru-ДАННЫХ `decl_suffix` (пара без данных инертна) → `dstFormPresent` принимает косвенные падежи; короткая форма 27 — уже работала через `decl.forms[]` (пин пре-существующим тестом); neuter end-to-end (enum · `gender_neuter` в injection-данных · SeedLint громко отбраковывает неизвестный род); ось = **scoped `neuter-directive-v1`-фолд в `memory_version`** (отступление от дизайна ПРИНЯТО как улучшение — точнее правила условного фолда §6.2, книга без neuter байт-идентична, голден доказал). **ЗАКРЫТО ПО НУЖНОСТИ дизайном (ратификация закрытий):** 36б второе мнение — бэкенд-стройки НЕТ, маршрут = полигон-замер (Q2, строка 5 перевязана) · резюме-слой (строка 80) — проза-суммарайзер закрыт, строка = ГЕЙТ ПИЛОТА Ф2.5 («допускает ли нарратив-строка детерминированный верификатор — или это D1 со схемой») · эмиссия головы 蛊 — сид-половина (чек-лист) + измер-гейт Q7 ПОСЛЕ #10 (строка 18 перевязана) · эмбеддинг A7/D2 — закрыт по нужности, реопен = измеренный recall-разрыв на МАСШТАБЕ, только batch-time лейн · STITCH — закрыт до давления МАСШТАБА (реопен = бюджет ИЛИ измеренный эффект размера инъекции) · ranked-set — качество закрыто §1, hard-режим = Q4. **First-occurrence-тест ($0, исполнен): гипотеза первенства ОПРОВЕРГНУТА** — роль не первовхожденческий и не частотный выбиратель, ре-решает контекстом (позитивное подтверждение D39.65). **Голден: 172/172 hex-only** (сдвиг = `embedded_version` от данных injection/target-ru), вердикты байт-идентичны. **Фикс-лист → строка 87** (несущее: «ь» в `decl_suffix` — приёмочный кейс «Фан Юаню» сейчас ПРОВАЛИВАЕТСЯ; неверный комментарий Batch про независимость request-hash; оверсайз-серия одним батчом — помнить cap-8000; classify-валидация/тесты; мутационный тест neuter; voice-stemmer вопрос). **⚠ Вопрос владельцу Q8: `classifier.md` несёт книжные каноны (方源 и др.) в общий пар-слой** — санкция или жанрово-генерические примеры. Вопросы §9 Q1Q7 + Q8 — строка 88. Платный порог «6/6 harm» — добрать при ре-пробе 74 (02.08, оркестратор №9). ✅
## D39.70 — ОТВЕТЫ ВЛАДЕЛЬЦА ПО §9 БАНК-ПАКА + КАНОН ЦЕЛЕЙ (02.08): **(Q8) книжные примеры в `classifier.md` САНКЦИОНИРОВАНЫ** с восстановленной нормой: языко-/книго-специфичное ДЕЛАТЬ МОЖНО — но выносить в данные/отдельные модули, встраиваемые архитектурно чисто (пар-промпт = легитимный модуль); **(Q1Q7) делегированы инженерному «как лучше по исследованию, соблюдая цели»** — диспозиции: Q1 канон-пин серий НЕ сейчас (вернуться на МАСШТАБЕ) · Q2 полигон-замер нужности 36б — ДА, до любой стройки (слот при ре-пробе 74) · Q3 резюме = гейт пилота Ф2.5 ПОДТВЕРЖДЁН (строка 80) · Q4 hard-инъективность — НЕТ (warning-only по дизайну, порядок закрыт серией) · Q5 авто-транслит реалий — промпт-инструкцией роли «предпочитай смысловой перевод реалий; транслит — именам собственным» (данные пар-промпта, в фикс-лист 87; судится следующим прогоном) · Q6 «сокращённая форма» = МОРФОКЛИП (`decl.forms[]` достаточно, $0; прозвища живут алиасами банка — отдельного поля НЕ строить); отбраковка неизвестного рода компат-безопасна (neuter-сидов в природе нет) — строка 27 остаётся закрытой · Q7 замер эмиссии головы — ДА, дешёвым полигон-слотом ПОСЛЕ #10 (очередью с ре-пробой; строка 18 уже так стоит); **(2) оценка `series.go` по канонам (вопрос владельца)**: ядро — ПО КАНОНАМ (пакет пар-агностичен, параметры приходят значением, алгоритм generic и детерминирован, языковые примеры только в комментариях с измеренным «почему»); один этаж ниже канона — `SeriesMorphology`: `head_final` захардкожен Go-константой CJK-класса вместо данных (код сам помечает «the one place to revisit») → в фикс-лист 87 добавлено «`series`/`head_final` → строкой в `lang-script.txt`» + консолидация дубля `lang.TokenizeWords`↔`text.TokenizeScript`; **(3) КАНОН ЦЕЛЕЙ ПРОЕКТА сформулирован и вписан в CLAUDE.md** («Цели и мерило», 6 пунктов: продукт-качество · мультиязычность модулями/данными · чистая поддерживаемая архитектура · современные подходы/харнесс-превосходство · экономика с видимыми деньгами · детерминизм) — собран оркестратором из формулировок владельца (START_PROMT, 24.07 общность, 01.08 критерий, 02.08 харнесс-буллеты), НА ПОПРАВКУ владельцу; сессионные промты далее ссылаются на канон вместо пере-цитирования. Строка 88 ЗАКРЫТА (02.08, оркестратор №9). ✅
## D39.72 — ОСТАТКИ КАРТЫ ОБЩНОСТИ ПОЛУЧАЮТ НОСИТЕЛЯ (вопрос владельца 02.08 «мы что-то взяли оттуда в бэклог?» — аудит показал ПРОПУСК оркестратора): из карты D39.60 взято и закрыто/затрекано ПОЧТИ всё — П0П4 построены (D39.64) · П5 generic-майнер = строка 35 (гейт ja→ru) · П6 отклонён (D39.62 Q3) · 4 data-флага = строка 14 · остаток ведра C = строки 79/34 · книго-ось чиста по построению; **НЕ имело носителя ведро D («удалить», 12 сайтов)** — свип D39.66 заметил «не удалено, вне скоупа фазы-2», но строку я не завёл (нарушение собственной нормы D39.66 «каждое отложено получает строку тем же лендингом»); живые остатки подтверждены грепом: указатели на несуществующий `checkers_zh_ru.go` в комментариях (cheapgates.go:56,125,130 · langpack.go:73+) · ложная шапка checkers.go:22-25 · дубль isHeaderContentRune↔isHeaderSeparator · minerPackVersion «zh-universal-v1» · глифы ⟨проверить⟩ в tmctl/render · вес palladius в miner.go (часть исходной дюжины могла уйти фазой-2 — сверить по карте §3). **Заведена строка 89** (аудит-и-чистка ведра D + сверка ведра B «6 пар-модуль-без-гейта» против фазы-2); носитель = ПАКЕТ-ЧЕКЕРОВ (бо́льшая часть сайтов в checks/ — промт дополнен пунктом) либо мелкая пачка (02.08, оркестратор №9). ✅
## D39.73 — РЕКОНСИЛЯЦИЯ ТРИАЖА: ПОЛНАЯ МАШИННАЯ СВЕРКА НАХОДОК ПРОТИВ НОСИТЕЛЕЙ (владелец 02.08 «что ещё проебал? технические решения сессий проебал?»): все 77 находок свипа D39.66 + рекомендации пост-чека + фикс-листы приёмок D39.6471 прогнаны механически против живых строк/дописок/закрытий. **Вердикт по решениям СЕССИЙ: целы** — их держал 951-позиционный свип (92% доказанных диспозиций) и адверсариальный пост-чек кодом; **провал локализован в ТРИАЖЕ оркестратора**: из ~95 рекомендаций уронено 5 (ведро D — уже исправлено D39.72; идиоматика-словари сехоуюй/васэй-эйго/вэньянь → дописка 52; Ф2-хвосты 02-mvp CometKiwi/T-index · Batch API судьи · llama-server · стриминг → строка 90 к пилот-препу; arity-полоса паспорта D29.2г → дописка 55; платный порог приёмки §2 «6/6 harm» жил только в гниющей шапке → дописка в строку 74 с полигон-слотами Q2/Q7). 7 из 8 греп-кандидатов оказались ложными (носители живы: порог-3 в 25 · lintNumberMagnitude в 79 · источник 74 · триггер 12 · линк 02-mvp починен · F3-brief в 71 · echo-R6 в PACKAGE4). Норма-урок: триаж многоисточниковых находок завершать МАШИННОЙ сверкой «каждая рекомендация → носитель», не глазами (вписано в промт-нормы оркестратора) (02.08, оркестратор №9). ✅
## D39.81 — Фронт открыт: SaaS ратифицирован, процессная модель движка, инвариант непротекания конвейера, бэкенд-работы Ф3 получили строки (02.08)
По релею записки фронт-направления; все несущие техутверждения сверены кодом до записи (HTTP-слоя в backend нет — 0 вхождений ListenAndServe; рамка research/16:13 «выхлоп = экспорт-артефакты, НЕ веб-сервер; API/SSE — Ф3» дословна; `pipeline/ratelimit.go:11` — гарды per-процесс, mistral ~48% отказов под параллелизмом; `store.go:43` EXCLUSIVE flock + `OpenReadOnly`-пути без flock; банк-пауза `--verify-bank` построена). Ратифицировано: **(1) Продукт = SaaS**, не локальное приложение (решение владельца 02.08); зоны `frontend/` (фронт-сессия на моках, промт `frontend/docs/FRONTEND_SESSION_PROMPT.md`) и `platform/` (control plane) — живые, роль «Платформа» в CLAUDE.md; натив-прицел V0-п.26 снят этим решением (реестр ПТ-23). **(2) Инвариант непротекания конвейера:** интерфейс не раскрывает модели/стадии/внутреннюю терминологию — пользователь видит «загрузка → разбор → перевод → подпись банка → финал → готово»; API отдаёт продуктовые понятия, слой перевода внутренних вердиктов обязателен (сегодняшний read-model с flag_reason/стадиями наружу не выдаётся); ревью-вопрос — зеркало общности: «сменится стадия конвейера — придётся ли править фронт?» (реестр ПТ-33). **(3) Процессная модель:** движок = процесс-на-прогон (EXCLUSIVE flock — инвариант, не ограничение); СЕРВЕР В backend НЕ ПИШЕТСЯ — HTTP/SSE и пользователи/квоты/очередь живут в `platform/`; read-API строится поверх готовых `OpenReadOnly`-путей. **(4) Строки:** НОВЫЕ 95 «контракт API v0 + продуктовый словарь статусов» ($0; ЕДИНСТВЕННАЯ ранняя вставка — фронт на моках, без пришпиленного контракта моки и API разойдутся классом «док↔код»; двухфазный поток вывести из готового `--verify-bank`, не проектировать) · 96 «HTTP/SSE + сервисная обвязка в platform» (Ф3, после 95) · 97 «глобальный брокер рейт-лимитов» (гейт «до второго параллельного пользователя»); ПЕРЕВЕСЫ: 49 annot-половина D15.2 → «скоро» (annot-v1 = источник замечаний фронта, критический путь подключения) · 94 → «к подключению фронта». **(5) Курс НЕ пере-упорядочен:** движковая очередь (смолпак → ре-проба 74 → добор идеала → ja→ru → МАСШТАБ) стоит — фронт бэкенда не ждёт. Поправки записке при приёмке: реестр требований, который она предлагает завести, УЖЕ построен (D39.80, `product-requirements.md`); H7/H8/H10 уже несла строка 94; ETA — строка 54; H-требования сверены — статусы записки совпали с реестром (02.08.2026, оркестратор №9, по релею владельца «надо записать в планы»). ✅
## D39.84 — Стек фронта/платформы запинен, восемь решений владельца ратифицированы, работы движка под фронт получили строки, перевод не индексируется (02.08)
По релею отчёта фронт-сессии (исследование стека закрыто: 15 агентов — 7 направлений × независимые скептики-опровергатели + синтез, версии сверены с вебом 02.08, blocker/major-поправки скептиков записаны исправленными вариантами; артефакты `frontend/docs/STACK_DECISIONS.md` и переписанный `frontend/docs/FRONTEND_SESSION_PROMPT.md` — фронт режется на этапы S0S7, первая кодовая сессия кончается витриной токенов). Приёмка оркестратора: 10-агентный refute-воркфлоу — ВСЕ несущие бэкенд-утверждения записки CONFIRMED по коду, 8/8 веб-пинов подтверждены первоисточниками (TS7 GA 08.07.2026 БЕЗ программного API до 7.1 → TS 6.0.3 · Vite 8 = Rolldown · Fleet закрыт 22.12.2025 · react-resizable-panels v4 Group/Separator · react-router 8.3 Node≥22.22 — стенд 22.22.3 проходит). **(1) Восемь решений владельца:** рынок глобальный, SEO только Google (Яндекс снят) · выравнивание колонок грубое по единицам экспорта — механизм ГОТОВ (`tmctl export --pairs`, побайтное выравнивание по edit-unit, `internal/pipeline/export.go:89-93`; уточнение приёмки: draft-only-пайплайн шипит по чанкам, для штатного edit-пайплайна утверждение точно) · подсветка сомнительных мест только блок/глава, внутритекстовые спаны НЕ строятся (у $0-гейтов нет байтовых смещений) · остановка на подписи банка = параметр запуска per-run — ГОТОВО (`--verify-bank`, exit 3, `invocation.go:108`/`main.go:39-46`; галочка формы = передача флага, движок не трогается; в draft-only не останавливает — `mining.go:193-197`) · оплат в MVP нет, денежных полей в UI нет вовсе (расход остаётся телеметрией владельца; потолки/rebill-согласие движка канон §5 не трогает) · десктоп = устанавливаемое PWA первым шагом, Tauri по явным триггерам · макет-инструменты не используются, источник вида = пиксель-замеры референса (Fleet невоспроизводим — растровое совпадение не критерий готовности) · аутентификация: ОДНА серверная сессия, предъявление кукой (браузер) или Bearer (десктоп/CLI), principal только в middleware — вход дизайна П-1 платформенного бэклога. **(2) ПТ-34, продуктовый запрет:** ни один символ пользовательского перевода никогда не попадает на публично индексируемый URL — ни витрин, ни «поделиться», ни публичных ссылок чтения (авторское право + политика Google по масштабируемому машин-контенту бьют по всему домену); носитель — двухконтурный деплой (SPA `app.<домен>` целиком под noindex + статический публичный контур, STACK_DECISIONS §4). **(3) ПТ-21 переформулировано:** якорь чтения = edit-unit экспорта, НЕ «чанк пайплайна» — финальный текст существует только на уровне юнита (~1.9 юнита/главу по замеру фронта; «4276 юнитов» из артефактов репо не выводится — полнокнижной БД не существует, что само подтверждает тезис о ре-ингесте; принято как замер сессии, порядок величин сходится с coldrun-a); читалка обязана жить с «глава = один блок». **(4) Работы движка → строки 99102** (каждая проверена кодом): 99 пофазный прогресс draft N/M ∥ edit N/M (done = все draft-строки членов + edit-строка, `status.go:328-331/365` — индикатор 0% ВСЮ черновую волну; `chunk_status` уже несёт гранулярность — выводимо без миграции схемы) · 100 персист манифеста глав/чанков + хеш источника (каждый read-вызов заново ингестит и режет исходник — `status.go:177-195`, redrive дважды за вызов; замер фронта 1.421.51 с CPU/23 МБ; `chunker_version` уже в снапшоте — `pipeline/render.go:53`) · 101 машиночитаемая таблица подписи банка (кап 20 = только stdout `render.go:98`; полная таблица — текстовый сайдкар `.bank-stop.txt`; JSON нет нигде) · 102 внешний trace-контекст в tmctl (TraceID минтится заново каждым вызовом — `main.go:67-70`; внутри вызова трасса цельная, `request_log.trace_id` персистится). **(5) Противоречие разрешено ВЕРНО:** рекомендация интеграционного агента «долгоживущий демон в backend» отвергнута самой сессией по D39.81 — ратификация удержана, HTTP/SSE/очередь в `platform/`. **(6) Две ловушки эксплуатации подтверждены и заведены входами дизайна (строка 95 · П-1):** подпись термина ≠ UPDATE строки — банк пересобирается каждым прогоном (seedGlossary REPLACES + ReplaceBank DELETE/re-INSERT, `seeding.go:18/110`, `glossary.go:158-162`; контракт подписи пишет в файлы-источники: mined-delta/сид; след затирания — только журнальная строка glossary_revisions, без предупреждения) · порядок деплоя платформы: read-путь схему НЕ мигрирует никогда (`store.go:135-143`, «schema vN … expects vM» в обе стороны; чинит write-команда, годится и `redrive --dry-run`; `tmctl backup` НЕ мигрирует). **(7) Норма зонных бэклогов (решение владельца при лендинге):** фронт и платформа держат СВОИ бэклоги в своих зонах — `frontend/docs/BACKLOG.md` (Ф-1..Ф-6) · `platform/BACKLOG.md` (П-1..П-4); засеяны оркестратором при лендинге переносом уже записанных отложенных решений, дальше ведут зоны; ЕДИНЫЙ бэклог PROGRESS фронт/платформа-строк НЕ принимает — остаётся трекером движка/полигона/доков; движковые стыки фронта (зона «бэкенд») живут в едином (строки 99102); строки 96/97 переехали в платформенный (П-1/П-2) с ID-надгробиями-указателями (ID стабильны навсегда — внешние ссылки не рвутся). **(8) Лендинг зон** `frontend/` + `platform/` + `.gitignore` (`frontend/references/` — скриншоты вне git, пины замеров сохранены в доках). (02.08.2026, оркестратор №9). ✅
## D39.85 — Шов движок↔платформа: индустриальный стандарт ратифицирован — событийный поток, материализация, артефакты; ресёрч записан (02.08)
По слову владельца («двигаемся в сторону стандарта индустрии, запиши что узнал аргументированно»). Ресёрч: `docs/research/23-engine-platform-seam.md` (5-агентный воркфлоу: три веб-направления по первоисточникам + репо-инвентаризация + независимый арбитраж — 9/9 вердиктов подтверждены, 3 поправки внесены; правила internal проверены ЖИВЫМИ сборками go1.26.4; $0). Ратифицировано: **(1) Форма шва — три канала:** живой статус = версионированный однонаправленный NDJSON-поток событий движка (шаблон terraform -json: version-хендшейк первой строкой, semver «минор = ignore-unknown / мажор = reject», stdout только потоку — человеческие логи уже на stderr) → воркер-обёртка платформы материализует в СВОЙ Postgres идемпотентным апсертом (run_id, seq) → SSE и все чтения ТОЛЬКО из Postgres (Reporting Database, НЕ полный CQRS — предостережение Фаулера принято); массивный контент = артефакты границ стадий (export-JSON готов · таблица банка = строка 101 · манифест = строка 100); пост-фактум/ре-синк = `status --json`/`export` (CLI-as-API по критериям git-porcelain/kubectl/terraform — только для завершённого состояния, не для поллинга живого прогона). Реконсиляция обязательна: на обрыве потока материализация пересобирается из status --json и артефактов (BEP-каveat о потерянных при краше событиях). **(2) Анти-паттерны — запреты:** платформа НЕ читает живой SQLite движка (EXCLUSIVE-локи + смешение локинг-протоколов = порча по howtocorrupt §2.4 · checkpoint starvation = операционное проникновение · IntegrationDatabase-связность со схемой v1v14+ · индустрия единодушна: Litestream/LiteFS/sqlite3_rsync/Fossil строят снапшот/реплику, не шарят живой файл); движок НЕ пушит HTTP (направление: движок эмитит — адаптер платформы пушит); человеческий вывод не парсится; неверсионированный ad-hoc JSON не эмитится (прецедент гниения docker jsonmessage); допустимая будущая форма чтения файла — ТОЛЬКО immutable-снапшот, экспортированный самим движком (VACUUM INTO уже есть — F4) с явным export-контрактом. **(3) Публичный read-пакет ОТКЛОНЁН репо-фактом:** NewReadOnlyRunner тянет 12 из 14 internal-пакетов (полный конфиг-стек + шаблоны + langpack + ре-рендер снапшотов, `runner.go:151-266`; арбитраж усилил: 12/14, не 10/13) — тонкого среза не существует; процессный контракт D39.81 подтверждён дословно. **(4) Модули:** sibling-структура двух модулей правильная — честный аргумент НЕ видимость (один модуль дал бы ту же изоляцию internal), а изоляция графа зависимостей: pgx/river не попадают в go.mod движка и не двигают транзитивные версии через MVS — довод от детерминизма; живой эксперимент-лазейка: модуль с путём, вложенным под `textmachine/backend/*`, импортирует internal (проверка по префиксу пути, golang/go#23970) → **ревью-гард: пути Go-модулей платформы/фронта никогда не вкладывать под путь движка**; go.work закоммитить при появлении Go-кода платформы (паттерн kubernetes/grafana). **(5) Носители:** НОВАЯ строка 103 (NDJSON-эмиттер со стабильным словарём + событие потолка — единственное отсутствующее, деньги сейчас только в тексте ошибки `stagerun.go:472-494`; малое касание — единичные call-sites рядом с готовыми slog) · входы контракта 95 дополнены тройкой (i)поток/(ii)артефакты/(iii)ре-синк · П-1 платформенного бэклога уточнён формой потока · README research-навигация += 23. Дизайн-промт контракта 95 — по слову владельца; словарь событий и продуктовый словарь статусов (ПТ-33) проектируются вместе (02.08.2026, оркестратор №9). ✅
## D39.93 — Дизайн-ввод владельца по строке 46 (02.08, ночь): проверки выхода — ИЗОЛИРОВАННЫМ модулем с ИМЕНОВАННЫМИ причинами; деталь «переиспользовать FlagCJKArtifact» СНЯТА в пользу именованного флага. ✅
Слово владельца: «какая разница почему пришёл отказ — бэкенду надо ПРИЧИНУ назвать (эхо · не тот язык · вообще не ответила); я выступаю за степень изолированности кода» + классический вопрос «сколько стоит добавить пару». Следствия, вносимые в дизайн пака экрана ДО его выдачи: (1) детекторы выхода живут отдельным пакетом чистых функций (вход: текст + дата-план цели; выход: именованный вердикт + счёт), движок только вызывает и маппит в диспозицию; (2) **деталь §3.6 отчёта «переиспользовать `FlagCJKArtifact` для нового экрана» СНЯТА** — она экономила правку `escalatable()`, но ВРЁТ о причине (off-target-язык лёг бы в телеметрию как «артефакт исходной письменности»); правильно: новый именованный флаг + явное включение в белый список `escalatable()` (диспозиция та же: эскалируем, не ретраим); (3) пары: сам экран пар-слепой (скрипт-набор цели из `data/lang-script.txt`), новая пара = строка данных; известные ограничения — 115 (явный embed-список: новая ЦЕЛЬ сегодня требует правки Go) и семантика ПОДМНОЖЕСТВ письменностей для ja/ko (чисто китайский выход для →ja набирает 1.000 — решается в данных набором скриптов, не в Go). Попутно: предложение владельца по DeepSeek «поднять токены размышления при low» = ровно открытый замер строки 44 (вариация флора при `low` не проводилась; при `high` фальсифицировано D39.86) — мини-проба ждёт его санкции.
## D39.99 — КОНТРАКТ API v0 РАТИФИЦИРОВАН: строка 95 закрыта; форма = OpenAPI 3.1; три пасса приёмки, 19/19 находок вправлены; пост-мортем промт-ревью в канон (04.08). ✅
**1. Артефакт и форма.** S3 упёрлась в замок (контракта не существовало, строка 95 без промта) — по слову владельца написала вход Ф-14 (`frontend/docs/API_CONTRACT_INPUT.md`) и черновик контракта. **Решение владельца о форме: нормативная поверхность = OpenAPI 3.1** (`openapi.yaml`: JSON Schema моделей, spectral-линт шестым шагом `npm run check`, типы фронта ГЕНЕРЯТСЯ `openapi-typescript` с дрифт-тестом по голден-паттерну, MSW типизируется от них) — класс «фикстура выдумала форму», случившийся ЧЕТЫРЕЖДЫ (org/fullname · титульная политика · «Раздел N» · девять статусов), закрыт механически; прозаический md остался компаньоном (провенанс ✓/◆/○ · обоснования · К-вопросы). AsyncAPI отложен с записью (Ф-24). **Дом ратифицированной копии — `docs/architecture/14-api-contract/`** (спека байт-копией + компаньон-README с ревью-шапкой; байт-сверка копий — обязанность каждого лендинга; генерация типов далее из ратифицированной копии — контракт первичен).
**2. Приёмка — три адверсариальных воркфлоу-пасса, 0 опровергнутых из 19 подтверждённых** (черновик: 4 линзы×скептики, 2 high — «withheld=текст не выдан» ложно о движке (sanitizer_stripped и c-lite drop отгружают текст под флагом, `disposition.go:96-104`/`export.go:203-215`) и чтения без канала шва (текст юнитов посреди прогона · полный банк — строка 101 это таблица подписи, не экспорт) + 8 medium — сквозной паттерн «инфляция провенанса ✓ на ◆-предложениях»; round-1 дофикс: 6/6 применён, перепроверено кодом, генерённая цепочка подтверждена пере-генерацией байт-в-байт; round-2 свежий взгляд на новые схемы: 5 medium — экспорт ненаблюдаем · promote без dst (движок hard-reject, `memseed.go:84-86`) · закрытый required kind против легального пустого (`memseed.go:323-326`) · самопротиворечие §2.7 · resume после потолка без канала поднятия; все вправлены, включая if/then-констрейнт с честным замером «openapi-typescript игнорирует 3.1-условия» → К-11). Сессия сама завела К-10 (несплитованный счётчик главы) и К-12 (poll vs push экспорта). State выведен из ПАРЫ (вердикт, наличие текста); фразы приложения А — плейсхолдеры (В-3 за владельцем); ПТ-34-инвариант вписан (noindex · no-store · выгрузка только владельцу).
**3. Очередь.** Строка 95 ЗАКРЫТА. **99/100/101/103 перевешены «к подключению фронта» → «скоро, БЛОКЕРЫ контракта»** (аргументы сессии подтверждены кодом: без 100 у главы нет стабильного id — нумерация плотная, `chunker.go:99-105`; без 99 индикатор 0% всю черновую волну — `status.go:328-331`; без 101 подписной экран читает сайдкар с капом 20 — `cmd/tmctl/render.go:98`). НОВЫЕ строки: **125** банк-экспорт артефакт (канал `/bank`) · **126** механизм поднятия потолка (платформа; продуктовое слово — К-8) · **127** DDL-коммент `migrate.go:193` устарел (`auto` не пишет никто — фантом утёк во фронт-доки дважды). Счёт скриптом: 103 строки · скоро 21 · бэкенд 58/66.
**4. Пост-мортем процесса (вопрос владельца «где мы ошиблись на берегу») — три слоя, фиксы в канон.** (а) Ошибка последовательности оркестратора: ратифицирован S3-промт с мёртвым основным сценарием (замок закрыт, промта строки 95 не существовало) — фронт три сессии упирался в один вход. (б) Ревью промта было структурным, не построчным: инструкция «пинг в docs/PROGRESS.md» дословно следовала таблице ролей CLAUDE.md, но противоречила решению владельца 02.08 из шапки зонного журнала. (в) Системная дыра: решения владельца, принятые в зонных сессиях, не доезжают до канона. **Фиксы:** CLAUDE.md — пинг-канал фронта/платформы = ЗОННЫЙ журнал (`frontend/docs/frontend-PROGRESS.md` — переименован по слову владельца, писать туда всем включая оркестратора), не docs/PROGRESS.md; промт оркестратора — два чек-пункта (хендофф-промты сверяются ПОСТРОЧНО: каждая инструкция с путём/каналом вне зоны — против зонной таблицы; при каждом лендинге зоны — свип новых «решений владельца» из зонного журнала на confirm списком); шапка `frontend/docs/BACKLOG.md` разведена «предлагать обязан / ратифицирует оркестратор» (просьба №3 сессии — прежняя формулировка спровоцировала остановку первого захода).
**5. Открыто на владельце:** продуктовые К контракта — К-1 (десять статусов) · К-3 (метка главы в дереве) · К-5 (ETA в MVP; ПТ-19 существует) · К-6 (ось ступеней замечаний — операторская унаследована) · К-8 (слово и статус стопа по потолку) + заполнение приложения А (В-3) + прежний список D39.98 п.4 (confirm двух решений · авторство подчистки · приёмка банк-арбитража). **Следующий разговор на берегу — бутстрап платформы П-1: у второй стороны контракта ноль строк кода, К-4/К-7/К-12 адресованы зоне, которой нет** (урок строки 95 — не ждать, пока три сессии упрутся). (04.08.2026, оркестратор №12). ✅
## D39.100 — РЕШЕНИЯ ВЛАДЕЛЬЦА 04.08 ВЕЧЕР: четыре К контракта закрыты, лимиты «как Claude Code» (ПТ-35), платформа ОТКРЫТА промтом P0, зонные журналы = name-PROGRESS (04.08). ✅
**1. К-вопросы контракта, закрытые владельцем:** **К-1** — десять статусов приняты. **К-8** — механизм «как Claude Code»: страница лимитов/использования в настройках (СТАТУС, не суммы — запрет денег на экране D39.84 в силе и НЕ superseded), стоп по потолку = новое 11-е значение `BookStatus:paused` + оповещение «перевод остановлен: лимиты исчерпаны»; заведены **ПТ-35** (реестр) и **П-5** (платформенный бэклог: API лимитов — форму проектирует P0). **К-5** — ETA показывать: `eta_seconds` в спеку (движок отдаёт, `status.go:112`). **К-6** — принцип принят: две ступени замечаний, граница по ЧИТАТЕЛЬСКОМУ эффекту, не по операторской шкале; карта пере-раскладки — одним листом с фразами В-3 на подпись (владелец: «позже»). **К-3** — закрыт канон-уточнением владельца: метка главы — ИЗ ДАННЫХ книги, зашитой формы «Глава N» не существует (это шаблон langpack-данных; легальна книга без номеров/глав вовсе) — фронту проверить спеку и фикстуры на зашитую форму. Правки спеки — задачей первого шага S3 (блок в `S3_SESSION_PROMPT.md`; минорный бамп версии + регенерация типов + байт-сверка копий; канон правит только оркестратор пере-ратификацией диффа).
**2. Платформа ОТКРЫТА:** выдан промт **P0** (`platform/docs/PLATFORM_SESSION_PROMPT.md`): стек live-сверкой → layout (гард D39.85: модуль НЕ под путём движка) → компилируемый скелет (HTTP+`/healthz` · session-auth каркас П-1 · драфт схемы read-model · интерфейс NDJSON-ингеста) → зонная батарея → дизайн-ответы К-4/К-7/К-12 + форма П-5 ПРЕДЛОЖЕНИЯМИ (ратифицирует оркестратор); $0, LLM не зовёт, не в скоупе П-2/деплой/UI. **Норма зонных журналов (решение владельца): весь прогресс фронта и платформы — в зонных `frontend/docs/frontend-PROGRESS.md` / `platform/docs/platform-PROGRESS.md`** (заведён), пишут все включая оркестратора; `docs/PROGRESS.md` = движок/полигон/доки.
**3. Старые хвосты:** оба «решения владельца 04.08» из журнала фронта CONFIRMED («+» в левой панели = Добавить книгу, половина Ф-7 закрыта легитимно · референсы возвращены на диск). Подчистка D-лога (D39.98 п.3): владелец — «не я, но санкционировал, может, и я» ⇒ закрыто как «санкционировано владельцем, исполнено сессией-синхронизатором»; дисциплина D23.3 впредь — без изменений. Приёмка банк-арбитража — ПОЗЖЕ по слову владельца (артефакты остаются в дереве незалендены). Заполнение приложения А (В-3 фразы + карта К-6) — позже, готовит оркестратор с фронтом одним листом.
**4. Актуализация носителей этим лендингом:** ПТ-реестр (ПТ-35 нов; ПТ-18/19/20/33 — ссылки на закрытую строку 95 заменены контрактом 14) · CLAUDE.md (пинг-канал платформы = зонный журнал) · docs/README (промт платформы в активных) · шапка ратифицированного компаньона (пост-ратификационные решения). Единый бэклог не менялся: счёт прежний (103 · скоро 21 · бэкенд 58/66, D39.99). (04.08.2026, оркестратор №12). ✅
## D39.102 — ПРИЁМКА БАНК-АРБИТРАЖА (оркестратор №13): research/24 ПРИНЯТ — все числа чисты пере-раном; консилиум закрыт классом, бэкенд-доработки спланированы строками 128132, 4 вопроса владельцу (04.08). ✅
**1. Вердикт.** Отчёт `research/24-bank-arbitration.md` + харнесс `eval/bank_arbitration/` + черновик v1 (`archive/reports/`) ПРИНЯТЫ и залендены. Верификация тремя контурами: (а) 12-агентный воркфлоу — пере-раны ВСЕХ строк «заявление = команда» ($0, офлайн по сырью): 8/8 CONFIRMED без единого расхождения чисел; 23/23 адресов §A подтверждены по HEAD `7f6270a`; веб-сверка §D по первоисточникам; байт-сверка инжект-пробы с рендером движка; (б) независимое ревью харнесса: деньги пересчитаны из сырья — $0.107334 против $0.107335 (округление записи), цены = `models.yaml`, 84/84 finish=stop, слаг-дрейфа нет, голд 53/53 против сида; арифметика ПИНГА («+$0.0161») — склейка инкрементов C+E, леджер чист; «потолок $1.00» — со слов сессии (ратифицирован $1.20, D39.90 п.5), при факте $0.107 беспредметно; (в) слепое ревью кода банка (author≠reviewer) + 12 опровергателей. Оговорки приёмки (конфаунд армов C/D · хрупкий C4 · SC=недетерминизм провайдера · пары-иллюстрации A4 · атрибуция Xiong'23) — в ревью-шапке research/24; выводов отчёта они не двигают.
**2. Ратификации по итогам замера** (в русле приоров D39.46/50/65/69): корзина «закрыть по нужности» ратифицирована ЦЕЛИКОМ — равноправный консилиум как прод-механизм · кросс-модельное взвешивание уверенностью · self-consistency N прогонов · селекция «выбери из вариантов» (потолок 17/45 классом) · отказ-сигнал ⟦TM-NO-DST⟧ · эмбеддинг-фетч (остаётся закрыт D39.69). Строка 5 пере-скоуплена: остаток Q2 = рецензент-второго-семейства ТОЛЬКО на спорных КЛАСТЕРАХ (слот при ре-пробе 74), роутинг целыми family/series-юнитами (урок E1-химеры), эмиссия рецензента — та же draft/⟨проверить⟩ (инвариант D39.42 §C2-7 не тронут). Вербализованная числовая уверенность — ordinal-очередь ревью ВНУТРИ модели (AUC 0.770.85), не арбитр и не кросс-модельный сигнал. Маркер ⟨проверить⟩ на транслятор-проводе поведенчески пуст (Δ=0) — доктрина «неподписанное с пометкой» получает цену; проба редакторского провода — вопрос владельцу.
**3. Бэкенд-доработки строками.** **128** — фикс-пак банка (вход §G, класс D39.71; гейт — подпись владельца, вопрос №4 отчёта). **129** — банкнота-парсер теряет хвост многословного dst (`banknote.go:236` против ре-джойна `terminology.go:880-885`; находка приёмки против клейма A10). **130** — emitRankCap×writeAutoBank: терм, выпавший из топ-200, молча стирается из авто-банка посреди книги; FL-3 ратифицирован ДО авто-провода D39.42, взаимодействие не ратифицировалось. **131** — кап инъекции не считает маркер/гендер-ноты: авто-книга превышает бюджет ~на 4060% (биллинг компенсирован резервацией по рендеру); фикс двигает RequestHash ⇒ СТОП-решение. **132** — стойкий аутедж ТОЛЬКО банк-провайдера валит ран вопреки коммент-контракту «optional step never aborts». Строка 38 дополнена указателем «со слов» (ординал-адресация чекпойнтов). Опровергнуто/не заводится: term-класс эмиссии (ратифицирован замером D39.43/50, гейт Q7 строки 18) · «луна»-пример Палладия (жадная сегментация не даёт; класс «сама/вода» реален, бласт-радиус — порядок drafts под подписью) · NoDst-почти-сентинел на zh-ru (target_script обязателен конфигом, OffLanguage отбивает; остаток — латиница-target, хвост 128).
**4. Вопросы владельцу** (подняты отчётом, приёмка подтверждает): (i) мини-голд алиасов §E-1 research/20 (висит с 17.07) — делать?; (ii) «Гуюэ» слитно — пар-норма Палладия для составных фамилий (данные класса Z-B3, чинит 8/45) или вкус книги (канал — сид)?; (iii) санкция пробы редакторского провода двухсекционки (~$0.05); (iv) выдать промт фикс-пака 128 одним паком (перекупка бэнк-батчей — центы)? Рекомендация оркестратора: (ii) пар-норма и (iv) да.
**5. Гигиена лендинга:** путь промта в шапке research/24 → архив; аннотации приёмки в §A4/§D; пинг «Полигон» получил закрывающий маркер с поправкой арифметики; README/CURRENT-STATE актуализированы; `platform/*` не тронуто; сырьё (84 json) сверено sha256-манифестом до/после пере-ранов — байт-нетронуто; `gold.jsonl`/`forms_dump.json` пере-раном воспроизведены байт-в-байт.
## D39.104 — ДОКТРИНА ИНЖЕКТА РАТИФИЦИРОВАНА: банк на проводе — ЗАКОН для всех ролей независимо от статуса строки; свобода — только по ОБЛАСТИ употребления; «Гуюэ» закрыт (04.08). ✅
**1. Доктрина** (слова владельца: «надо давать везде одинаково; если кто-то ошибся — это уровнем выше»; финал — «фиксируем так»): банк на проводе = ЗАКОН для всех ролей, независимо от статуса строки; право «перевести иначе, если сомнительно» УПРАЗДНЕНО — это канал разнобоя между параллельными главами по построению, а настоящие юзкейсы свободы (игра слов · разбор знаков · буквальное не-терминное прочтение) от статуса строки не зависят и получают узкую оговорку ОБЛАСТИ употребления, действующую на все строки одинаково. **Принятая цена:** неверная авто-строка едет консистентно до ревью (чинится одной правкой банка + ре-эдитом; разнобой не чинится ничем). **Остаточный риск:** оговорка как лазейка — под leakage-метрикой пробы. Инвариант D39.42 §C2-7 не задет: статусы draft/auto и подписная таблица не меняются — доктрина о ПРОВОДЕ. Ошибки чинятся уровнем выше (терминолог+гейты+подпись) ⇒ фикс-пак 128 — главный рычаг качества банка.
**2. Форма на проводе:** единый закон-блок редактора вместо двухсекционки; маркер ⟨проверить⟩ с провода снимается (поведенчески пуст — research/24 §C; минус токены); транслятор-заголовок — та же логика. Кандидат-тексты — §B промта пробы; внесение в движок — **строка 134** ПОСЛЕ отчёта пробы (двигает рендер → RequestHash → перекупка, цену назвать при внесении).
**3. «Гуюэ» (вопрос (ii) D39.102) ЗАКРЫТ: не чинить** — расхождение с голдом = вкус, канал сида; конвенцию в проде держит сам банк инжектом; ру-специфика этого класса на голде ровно одна (замер research/24 §F1) ⇒ отдельный аудит транскрипционных правил не заводится. Зависимость принята владельцем: **фикс-пак 128 обязателен** — без него авто-банк даёт не конвенцию, а химеру.
## D39.106 — ШОВ: прогон переживает деплой платформы; журнал в каталоге книги + systemd-юнит-на-прогон; платформа НЕ родитель движка (05.08). ✅
**1. Решение владельца 05.08.** Верификация до ратификации: четыре чистых панели, ~18 агентов, две модели (research/25, там же отвергнутые альтернативы с причинами) — 0 голосов за «родитель+пайп», 0 за монолит, 0 за gRPC/брокер; атака на готовое решение: «доминирующей альтернативы нет».
**2. Форма (заменяет ТРАНСПОРТ D39.85 §1; остальное D39.85 в силе):** движок = транзиентный systemd-юнит на прогон (`Restart=no`, SIGTERM); события = `events.jsonl` каталога книги как проекция коммитов SQLite движка (outbox, та же транзакция, что чекпойнт); платформа тейлит, курсор `(engine_run_id, seq)` коммитится с эффектом в одной Postgres-транзакции; `status --json` — ремонт по остановленному прогону. Формат NDJSON/hello/seq, деньги (холд+потолок = защита, события = свежесть, D39.84/D39.100) и запрет на живой SQLite — без изменений.
**3. Обязательные механизмы при постройке — research/25 §«Обязательные механизмы» (реконсилятор на каждый выход юнита + перезапуск после ребута · intent/`uncertain` + ночная сверка с провайдером · пиннинг версии бинаря на прогон · гейт потолка пер-вызов). Следствия: PD-59 superseded; пайп-путь `supervisor.go` P1 = дев-режим; ответ PD-13 переезжает на cgroup юнита прогона. Строка 103 и денежные строки единого бэклога — при освобождении PROGRESS.md; задачи зонам — промтами.**
## D39.107 — ЗАКРЫТИЕ СЕССИИ №14 И ПЕРЕДАЧА №15: P0 принят и заленден, по P1 выдан пул доработок (приёмка доработанного дерева — №15), D39.106 ратифицирован пятью верификациями (06.08). ✅
**1. Итог №14:** приёмка P0 платформы — ПРИНЯТ, заленден `eeeef89`+`954c034` (регистр PD-1..19) · направление платформы ратифицировано (`PLATFORM_DIRECTION.md`, `99c9cb0`) · решения владельца по кредитам записаны (`87be7b9`, `6469479`) · по P1 проведена адверсариальная проверка (43 посадки, 31 поймана; сверка с RFC 9700 · ASVS 5.0 L2 · OIDC Core) — она дала ПУЛ ДОРАБОТОК (регистр до PD-59), сессия платформы взяла его в работу, и **дерево зоны с тех пор сильно изменилось (≈40 файлов, новая миграция 00008) — эта доработка НЕ принята и НЕ залендена: полная приёмка изменённого дерева = №15** · **D39.106 ратифицирован** (шов: журнал в каталоге книги + systemd-юнит-на-прогон, платформа не родитель) после пяти верификаций — 4 чистых панели + кросс-чек GPT; фактура и требования к постройке — `research/25` · промт S3 актуализирован и готов к запуску (`6ac26f3`).
**2. Дельта норм (уроки №14, оплачены):** проверки ВНУТРИ репозитория ≠ приёмка решения — решения зон сверять с действующим первоисточником нормы (RFC/ASVS/спека) с номером раздела; слабая аргументация ≠ неверная позиция — сильные прецеденты искать САМОМУ до вердикта; свой контраргумент проверять чужими руками; допущения в ПОСТАНОВКЕ — такой же объект проверки, как ответ; изоляция панелей = запрет ФАЙЛОВЫХ тулов + аудит постфактум по journal.jsonl (сеть не запрещать — заземляет); адвокатская постановка покупает риторику за счёт строгости. Также в memory `acceptance-antipatterns`.
**3. Очередь №15 (PROGRESS CURRENT-STATE не обновлён — занят живым полигоном; обновить при его лендинге):** (1) **приёмка доработанного дерева платформы** после передачи: ВСЕ изменённые файлы, по `ENGINEERING_STANDARDS` §3, со СВОИМИ посадками (готовый тест PD-52 — в журнале зоны; батарею гонять с живым PG — рецепт стенда без root в `platform/docs/STACK_DECISIONS.md`), лендить pathspec-формой · (2) по освобождении PROGRESS.md: строка 103 = эмиттер журнала по `research/25` §эмиттер + 4 денежные строки (реконсилятор · uncertain-эскроу · сверка с провайдером · пер-вызовный гейт) + пиннинг версии; пересчёт очереди скриптом · (3) по команде владельца: промты бэкенду (эмиттер) и платформе (реконсилятор/тейлер/юниты; пайп-`supervisor.go` → дев-режим) — носители: D39.106 + research/25 включая пометки (GPT) · (4) приёмки полигона: экспы 18/19/20 живые · (5) незакоммиченное Приложение А (`14-api-contract/README.md`) — слово владельца · (6) запуск S3 — промт готов · (7) вахта deepseek-v4-pro (триггер прошёл) · (8) мини-проба флора (строка 44) одобрена, промт не выдан. **Грабли:** сессии зон ЖИВЫ, пока владелец не сказал обратного — платформа и полигон работают прямо сейчас; git только pathspec-формой.
## D39.108 — ПРИЁМКА ЭКСПОВ 18/19/20: приняты и залендены; закрытие D21.4/D21.10; курс на эксп-21 «топология ролей» (06.08). ✅
**1. Приёмка** (7 верификаторов: слепой вердикт до чтения отчёта · ре-раны «заявление=команда» · деньги из сырья двумя путями · бэкенд-пинги исполнением боевого Go-кода · охота вне карты · свип квирк-цитат; изоляция панелей аудирована по журналам). Экспы 18 (`41cde9f`) · 19 (`0c3b55f`) · 20 (`3d5d5d5`) ПРИНЯТЫ; квирк-отзыв §3б заленден (`bb82876`, §3а в силе). Несущие вердикты чисты ре-раном: закон-блок 21/21 · неверная строка банка 6/6 (вытеснение 5/6, единогласие 6/6) · контроль без блока ломает 512/20 · гейт Q4b «диффы откладываются» · фронтир терминолога не оправдан (конвенция 古月 = 18% голда — рычаг данных) · польза второго прохода = свойство пары модель×роль (dspro отрицателен, glm-5 положителен). Поправки приёмки — в ревью-шапках отчётов; главные: §5.2 экспа 20 НЕ персистирован (статус «со слов»; направление держит персистированный судья §5.3) · offblock-числа сняты до-фризовым стемом (черновик 16/41, не 18/41) · цена раунда починки не входила в дифф (lu/ON 0.89→1.08) · «вся сессия $2.1793» включала $0.107335 сырья research/24 — фактическая цена 18+19+20 = **$2.0720** · оба бэкенд-пинга: наблюдения верны, вердикты опровергнуты (микро-утечку ловит санитайзер; банкнота жива ран-локальным конфигом D39.42 п.4 — реальный дефект = декларация против shipping-конфига, строка 140). Фризы предшествуют платным вызовам (46 с · 21 с · 49 мин); amend `4d1d9e5` разобран по reflog — пре-рег-текст не трогал (девиация арма E + premise_review); процесс-нота: девиации оформлять новым коммитом, не amend'ом фриза. Эксп-20 шёл без фриза — принят exploratory по санкции.
**2. Решения владельца 06.08:** санкции экспов 19/20 и подъёмы потолков — CONFIRM · лендинг и актуализация доков санкционированы · направление эксп-21 подтверждено · норма «гард проклятия знанием» (онбординг-блок проблемы в каждом хендофф-промте) вписана в промт оркестратора п.1а.
**3. Эксп-21 «топология ролей» — промт выдан** (`docs/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT.md`); двойной аудит: слепая панель 3 линз без файловых тулов (изоляция чиста) + полноконтекстный анти-паттерн-агент. Добавки панели, принятые в промт: арм F do-nothing (потерянная норма exp15:486) · MQM-lite/error-span протокол + мощность/MDE и шумовой пол ДО бейк-оффа · guarded+routed арм G · обратная связка E · Палладий-линт транскрипции · мини-проба глоссарий-лока · факторная рамка на замороженных черновиках · декой D39.46(б) и запрет судьи семейства жильца · пере-проба маппинга dspro до Ф1 (вахта 108). Потолки ПРЕДВАРИТЕЛЬНЫЕ (≈$7.3 стадиями с ранним отсевом; пере-сверка сметы после предзамера мощности — обязательна); запуск = слово владельца. Два тезиса разжалованы в гипотезы бейк-оффа (анти-соглашательство): «экономическое оправдание черновика пало» и «черновик = опора верности».
**4. Закрытия и диспозиции:** **D21.4 (арм minimal-diff с тирингом) и D21.10 (поручение спеки апплая) ЗАКРЫТЫ явно** по букве гейта Q4b (exp15:147): аппликатор построен полигоном и замерен (15/15; комплаенс 0.966 на боевой единице), диффы отложены; реактивация — через строку 106/эксп-21. Строки **135144** заведены (денежный пакет шва D39.107 п.2: пер-вызовный гейт · uncertain-эскроу · сверка с провайдером · реконсилятор · пиннинг версии; находки приёмки: банкнота-декларация 140 · дыра сносок 141 · механизм починки-по-флагу 142 · норматив судейства 143 · вахта grok-биллинга 144); строки 103/106/134/65/55/12 пере-диспозиционированы. Исполненный промт пробы 18 архивирован. PROGRESS CURRENT-STATE обновлён на №15 (долг D39.107 погашен).
## D39.109 — ПРИЁМКА ПЛАТФОРМЫ P1+P2: приняты и залендены одним коммитом; регистр до PD-107, одна major; два вопроса владельцу (07.08). ✅
**1. Вердикт.** Дерево зоны `platform/` (30 изменённых отслеживаемых файлов, 22 новых, миграции 0000400008) ПРИНЯТО и заленжено. ⚠ **Факт, который доки завышали:** журнал зоны объявлял «P1 ПРИНЯТ и заленден» — в git код P1 не уезжал (`git ls-files platform/internal/login` = 0 до этого коммита), уехали только P0 (`eeeef89`/`954c034`), направление (`99c9cb0`) и решения владельца (`87be7b9`/`6469479`). Формулировка исправлена на месте с пометкой оркестратора; строки регистра ошибки не несли — они честно говорят `fixed(P1, дерево сессии)`. Живой уязвимости приёмка не нашла.
**2. Метод — исполнением, второй рубеж по своей карте.** Батарея пере-прогнана мной: офлайн зелёная (линтер 0 issues), с живым PostgreSQL 18.4 без root — **скипов ноль** (26 БД-тестов отработали), `make vuln` чист. **Свои 45 мутаций в четыре батча по СВОЕЙ карте несущих свойств (не по таблице пинов зоны): 33 поймано поимённо, 8 выжило, 4 моих посадки оказались негодными и разобраны вслух.** Мутации ставились в КОПИИ зоны вне репозитория — незакоммиченное дерево сессии не тронуто, сверено хешами диффа до и после. Живые пробы на боевом бинаре: PD-2 (10 полу-кормленных POST отпущены на 30.0 с), пять форм CSRF, ПТ-34-заголовки, RFC 9207 (Google действительно шлёт `iss`; сорванный → `issuer_missing`, чужой → `issuer_mismatch`, обмена кода нет). PD-71 пере-проверен своим прогоном на боевых данных: `DownTo(4)` падает на `users_email_key` SQLSTATE 23505, данные целы. Фаззеры: 3.0 и 3.35 млн исполнений, крэшеров нет. **Цитаты норм сверены по первоисточникам, не по пересказу** — RFC 9700 §4.4.2/§4.4.2.2, NIST SP 800-63B-4 §2.1.3, ASVS 5.0 7.1.1/7.1.2/7.1.3/7.6.1/7.6.2 дословны, номера и уровень L2 верны; это несущая проверка, на этих цитатах стоит смена боевого значения 90 → 30 суток. Плюс воркфлоу-панель: семь линз с зажатыми промтами (отчётные доки зоны запрещены) и адверсариальный опровергатель на каждую находку весом minor+ — 20 подтверждено, 2 опровергнуто.
**3. Ратифицировано (6 из 6):** абсолютный срок сессии **30 суток** (буква NIST AAL1; у прежних 90 обоснования не было) · контрмера mix-up = **`iss` авторизационного ответа (RFC 9207)**, миграция 00008, а не раздельные redirect URI (норма объявляет их фолбэком) · **`STACK_DECISIONS §13`** как документ соответствия ASVS 7.1.1/7.1.2/7.1.3 с прямо названным рассогласованием с федеративной сессией · **ломающие изменения зоны** (`NewServer` без `Timeouts` — устранение класса сильнее теста · `Prober.Ready` · `login.Fail` без `*http.Request`; внешних потребителей нет, фронт говорит по HTTP) · **`MemoryMax=80%` + явный `OOMPolicy=continue`** (сверено с `systemd.resource-control(5)`/`systemd.service(5)`; ⚠ под systemd не исполнялось) · **PD-71 принят риском** в форме зоны: правило append-only дороже доступности отката ниже версии 5, место записи — `deploy/README.md` у оператора.
**4. Найдено приёмкой: 29 строк PD-79…PD-107, одна major.** **PD-80 (major):** ведро лимитера одно на `/auth/login` и `/auth/callback`, а колбэк стирает login-куку ДО своей проверки лимитера ⇒ анонимный поток ~3 rps закрывает вход всем И добивает начатые входы невосстановимо (воспроизведено мной на бинаре и независимо панелью; фикс — порядок двух строк плюс раздельные ведра). Остальное minor/info, несущие: строковый `"null"` в `committed_usd` читается как НОЛЬ денег (PD-79, закрыть до воркера) · три «закрыто, но не запинено» по собственному правилу зоны — половина PD-3, лимитер PD-29, ветка обновления адреса (PD-83/84/85) · установка по наброску даёт нестартующий юнит и `ProtectHome` против «книги в `~/books`» (PD-91) · админ-CLI, единственный писатель денег, без единого теста (PD-106) · доккоммент `events.go` предлагает то, что PD-59 уже отклонил (PD-95) · дрейф реализованной поверхности `/auth/*`+`X-TM-Client` против контракта 14 (PD-96/остаток) · декодер и норматив зоны расходятся на дубле `seq`, и после PD-12 цена — убитый платный прогон (PD-105: разрешать ратификацией вместе с промтом эмиттера, строка 103) · удаление аккаунта обходит защиту PD-25 через каскад `users → reservations` (PD-107, гейт перед появлением такой операции).
**5. Опровергнуто приёмкой, включая свои промахи** (дисциплина «заявление=команда» действует и на приёмку): версия панели «удаление аккаунта падает на композитном FK при закрытых резервациях» — мой прогон удаляет · «`money` читает JSON `null` как ноль» — голый `null` даёт nil, дыра в СТРОКЕ `"null"` · «WARN на каждый отбитый вход = неограниченная запись в лог» — `AccessLog` и так пишет INFO на каждый запрос · моя посадка «грант фри-тира не запинен» НЕГОДНА (грант живёт в ветке новой личности; корректная посадка ловится тестом) · моё «падение `FuzzDecoder`» — голод по CPU от параллельных батчей, чистый прогон зелёный · PD-20 — калибровка, а не находка: пин вероятностный по природе дефекта. Отдельно названо, что `TestMigrationsRollBackAndReapply` откатывает ПУСТУЮ базу и для 00005 не доказывает ничего.
**6. Владельцу — два вопроса:** (а) срок сессии 30 суток означает, что не заходивший месяц человек увидит экран входа — если это против замысла, это одна переменная `TM_PLATFORM_SESSION_MAX_AGE` плюс явная запись отклонения в §13; (б) **новое (PD-104):** фри-тир печатается неаутентифицированным потоком по $5 за каждую новую подтверждённую пару `(provider, subject)`, агрегатного потолка и счётчика аномалий нет нигде — нужен ли суточный лимит грантов до открытия беты.
**7. Долг лендинга, названный вслух:** PROGRESS CURRENT-STATE **не обновлён** — файл занят живым полигоном (его пинг по эксп-21 лежит незакоммиченным, коммит `d472599` его же). Тот же случай, что D39.107 п.3: обновляет тот, кто лендит полигон. `docs/README.md` обновлён этим же коммитом (норма D39.80), промт P0 платформы получил баннер-исход.
**D39.109-эррата (07.08, по вопросу владельца — процессом НЕ поймано).** Приёмка №15 при лендинге пропустила, что **D39.106 п.3 снял пайп-транспорт**: «PD-59 superseded; пайп-путь `supervisor.go` P1 = дев-режим; ответ PD-13 переезжает на cgroup юнита прогона». Зонный журнал платформы при этом длинно доказывает обратное («канал остаётся stdout», SIGPIPE-аргумент), и я принял эту секцию как живое решение — классический анти-паттерн «связность вместо истинности»: аргументация убедительна, а голова D-лога её уже перекрыла. Ошибка ушла в мою же строку PD-95, которая ссылалась на снятый PD-59 как на действующий. **Исправлено:** секция журнала помечена SUPERSEDED с дословным перечислением ратифицированной формы (`research/25` §Форма: транзиентный systemd-юнит на прогон · платформа НЕ родитель · `events.jsonl` в каталоге книги как outbox-проекция коммитов SQLite · тейл платформой с курсором `(engine_run_id, seq)` в одной транзакции с эффектом; отвергнуты с нулём голосов: родитель+пайп 0/15, выделенный fd 3 — 0, stdout/journald как источник — 0) · PD-95 переписан на верное основание и поднят в вес (его прочтёт эмиттер-сессия как задание) · **PD-92 понижен до info** (дефект дев-пути: в проде родителя нет, `cmd.StdoutPipe()` не существует) · **PD-105 повышен** (при тейле журнала повторное чтение строк после краша читателя — НОРМА, значит норматив зоны «at-least-once, дубль не ошибка» буквально верен, а фатальный отказ декодера ему противоречит) · **PD-60 пере-диспозиционирован** (постановка про 64 КиБ пайпа устарела; переформулируется вместе со строкой 103 как «что делает движок, когда журнал не пишется»). Вердикт лендинга не меняется: код принят как дев-путь, которым его и объявил D39.107 п.3, — меняются ДОКИ зоны и вес трёх строк. **Носители работы существовали и до эрраты:** строка 103 несёт эмиттер уже в форме D39.106, строки 138/139 — реконсилятор и пиннинг версии, строка 126 — механизм поднятия потолка. **Урок в норму:** при лендинге зоны каждый вывод зонного дока, спорящий с транспортом или швом, грепается по D-логу на supersede ДО ратификации — «решение, живущее только в зонном доке при противоречащем каноне, — дефект синхронизации» (норма D39.99 п.4) действует и в обратную сторону: канон мог снять зонный вывод, а не только наоборот.
## D39.110 — ПОТОЛОК ПРОГОНА УПРАВЛЯЕМЫЙ: решение владельца 07.08 ратифицировано формой; фри-тир — предложение оркестратора на confirm; строка 145 заведена (07.08). ✅
**1. Решение владельца 07.08 (дословно по смыслу):** потолок управляется двумя вещами — «выключить потолок» и «выставить вручную с фронта»; форма — шкала в интерфейсе от минимума (ноль выбрать НЕЛЬЗЯ, подсвечен серым) до максимума баланса аккаунта, конкретный виджет на выбор исполнителя. **Ратифицировано формой, и форма сама снимает конфликт с Р7:** максимум = баланс ⇒ движок всегда получает положительное число, состояния «потолка нет» не существует, валидатор `book.go:250-251` («a ledger with no ceiling is forbidden, Р7») не правится и Р7 не амендируется. Носитель — пере-поставленная строка **126**.
**2. Три следствия, без которых форма неполна (добор оркестратора, каждое проверено кодом).** **(а) Единица шкалы — НЕ доллары, а главы (либо % баланса).** Тогда минимум объясняет себя сам («одна глава», ниже прогон бессмыслен — владелец сам отметил, что непонятно, какое минимальное число ставить), а **D39.84 остаётся цел**: читатель не видит структуру наших расходов, платформа сама переводит главы в доллары по оценке движка. Доллары на ПОЛЬЗОВАТЕЛЬСКОМ экране = осознанный амендмент D39.84, и это отдельное решение владельца, а не побочный эффект виджета (П-5 показывает процент ровно по этой причине). **(б) Это потолок ПРОГОНА, значит он не пишется в `book.yaml`.** Дизайн платформы объявлял её владельцем `book.yaml` и намеревался поднимать `ceilings.book_usd` правкой файла — тогда пользовательское число становится постоянной записью в данных движка, что смешивает зоны против D39.81/D39.85. В коде этого НЕТ (проверено: платформа только ставит `cmd.Dir`), значит форма выбирается бесплатно ⇒ **НОВАЯ строка 145**: движок принимает потолок аргументом прогона; сегодня ни флага, ни ENV не существует (`tmctl` таких флагов не имеет, значение идёт только через `Ceilings.BookUSD`, `stagerun.go:480,505`). Цена нулевая: `Ceilings` в `BriefHash` не входит (`book.go:280-297`) — ни снапшот, ни ре-билл не двигаются. **(в) Максимум шкалы = доступный остаток аккаунта.** ⚠ **ИСПРАВЛЕНО 08.08 приёмкой S3 (D39.115): первая редакция этого подпункта говорила «баланс МИНУС открытые холды» — это ОШИБКА, вычитание дважды.** `Hold` пишет в леджер отрицательную строку и тем же знаком двигает кэш баланса (`credits.go:179``appendLedger` `:297-305`), поэтому баланс УЖЕ не содержит открытых холдов; `Reserved` — отдельная справочная сумма. Замерено приёмкой на живом PG: грант $10, холд $1 → `Balance=9.000000`, `Reserved=1.000000`, а «баланс минус Reserved» дало бы $8. Поймала фронт-сессия S3 чтением Go-кода платформы, а не доков — и ради этого нарушила мой же запрет ходить в чужую зону. Платформа берёт холд на сумму потолка ДО спавна, поэтому ползунок в упоре запирает весь баланс на одну книгу и вторую начать нельзя; `ReadAccount` уже отдаёт `Balance` и `Reserved` раздельно, данных хватает.
**3. Фри-тир — вопрос владельца («а как это обычно делается в бэкендах?»), ответ и ПРЕДЛОЖЕНИЕ, а не ратификация.** Разделяется на две половины, и стандартный ответ есть только у одной. **Где живёт начисление:** учебник — промо-кредит пишется строкой леджера в ТОЙ ЖЕ транзакции, что создание аккаунта, идемпотентно по `(аккаунт, source, source_id)`; код зоны это уже делает верно (`upsertIdentityTx`), менять нечего. **Стреляет ли само:** норма — «автоматически, но с ЯКОРЕМ, который стоит абьюзеру денег» (карта на файле — AWS/GCP; телефон — OpenAI добавил его к своим $5 после фарминга; инвайт), плюс бюджет кампании отдельной суммой и алерт при упоре. `email_verified` от Google якорем НЕ является — аккаунты бесплатны и создаются пачками, признак доказывает существование ящика, а не отдельного человека. У нас нет ни одного из трёх, а деньги — предоплаченные ключи владельца. **Предложение: на бете дефолт в НОЛЬ и начисление руками** (платёжного инструмента нет ⇒ между скриптом и ключами нет ничего; бета-тестеров столько, что одна команда в шелле на человека не работа); при появлении платежей дефолт возвращается к $5 ВМЕСТЕ с суточным агрегатным потолком — якорь и потолок приезжают по одному поводу. Ждёт слова владельца; носитель — PD-104.
**4. Расхождение док↔код, чинится независимо от п.3:** реестр при закрытии PD-30 утверждает «аккаунт создаётся с нулём, начисление руками из админки», а код создаёт аккаунт С $5 (`config.go:73` дефолт `5 * 1_000_000``main.go:99``login.go:285`). Один из двух текстов лжёт прямо сейчас; строка PD-104 переписана и несёт оба факта.
**5. Счёт очереди пере-считан скриптом (норма D39.101):** всего **120** строк · зона бэкенд **62** строго / **79** широко · «скоро» **32** (добавлены 126 и 145).
## D39.111 — ПРОМТ S3 ДОПИСАН приёмкой платформы (управляемый потолок + запрет кросс-origin); фикс-пак платформы передан запиской (07.08). ✅
**1. S3 получил два новых пункта списка правок спеки** (`frontend/docs/S3_SESSION_PROMPT.md`, шапка списка пере-атрибутирована №15; промт НЕ запущен, поэтому правка файла легальна без релея). **В-трис — управляемый потолок прогона** по решению владельца 07.08 (D39.110): шкала от минимума до доступного остатка, ноль недоступен, виджет на выбор сессии, и три «делай РОВНО так» — единица ГЛАВЫ (доллары = амендмент D39.84, он не выдан) · максимум = баланс МИНУС открытые холды (иначе шкала в упоре запирает весь баланс на одну книгу) · потолок принадлежит ПРОГОНУ, не книге; пересчёт «главы → деньги» наружу не выходит вовсе. **В-кватер — фронт живёт на том же origin, и это факт, а не выбор:** CORS-слоя в платформе нет, preflight `OPTIONS` с чужим `Origin` получает 401 от гарда сессии (замер приёмки на живом бинаре, PD-96) ⇒ в деве ходить через прокси dev-сервера, кросс-origin не проектировать; `X-TM-Client` обязателен и на same-origin — он не про CORS.
**2. Фикс-пак платформы передан ЗАПИСКОЙ, а не отдельным промтом** — по прецеденту №14 (восемь пунктов жили разделом зонного журнала и были отработаны) и по норме пропорциональности: это точечные фиксы, а не дизайн. Носитель — раздел «Ратификация приёмкой P2» зонного журнала, фикс-лист там же с порядком. Состав: **PD-80** (единственная major — доступность входа: лимитер прежде очистки login-куки плюс раздельные ведра) · **PD-79** (строковый `"null"` = ноль денег, до появления вызывающего у `Settle`) · **PD-100** (колбэк глотает ошибки стора и discovery — класс PD-5, закрытый в `auth/`, но не в `login/`) · **PD-83/84/85** (три «закрыто, но не запинено» по собственному правилу зоны) · **PD-106** (админ-CLI — единственный писатель денег — без единого теста) · **PD-91** (установка по наброску даёт нестартующий юнит; `ProtectHome` против «книги в `~/books`») · **PD-95** (транспортный доккоммент — ДО промта эмиттера, иначе эмиттер-сессия прочтёт его как задание). **Граница пака названа явно:** PD-92/93/96/99/102/105/107 НЕ трогать — они латентны за воркером и эмиттером, и правка сейчас означала бы угадывание формы, которую задаёт строка 103.
**3. Условный пункт:** если владелец подтверждает предложение по фри-тиру (D39.110 п.3), в тот же пак заходит дефолт `SignupGrantMicroUSD` в НОЛЬ; расхождение док↔код (PD-104) чинится независимо от ответа.
## D39.112 — ВЕРИФИКАЦИЯ ЗАПИСЕЙ №15 НЕЗАВИСИМЫМ АГЕНТОМ: восемь фактических правок и восемь пробелов закрыты; поправка к D39.109/D39.110 (07.08). ✅
**1. Заказ владельца:** один чистый агент читает промт оркестратора и доки «где мы сейчас» и проверяет записи №15 по четырём осям — факты, пробелы, понятность холодной сессии, вода. Вердикт агента: «можно доверять С ПРАВКАМИ». Он пере-считал очередь своим скриптом (120 · 62/79 · «скоро» 32 — сошлось до строки), механически сверил ВСЕ `file:line` новых строк реестра (все существуют и говорят заявленное), пере-проверил номера норм по первоисточникам, прогнал `build`/`vet`/`test`/`golangci-lint` в зоне (0 issues) и подтвердил существование всех пинов ратифицированных решений. Не заверено им (стенд без Postgres): 45 мутаций, 26 БД-тестов, живые пробы на бинаре, `make vuln`, счёт фаззеров — остаются со слов приёмки, и так и помечено.
**2. Поправки к D39.109 — принять как исправление, буква нот не переписывается (D23.3).** **(а) п.3 пере-формулировал NIST.** Сказано «30 суток — БУКВА NIST AAL1»; по первоисточнику SP 800-63B-4 §2.1.3 буква иная: SHALL — только «установить определённый reauthentication overall timeout», сами 30 суток — **SHOULD**, и это интервал ре-аутентификации, который успешная ре-аутентификация СБРАСЫВАЕТ, а не неснимаемый предел; термин «absolute maximum session lifetime» принадлежит ASVS, не NIST. Верная формулировка: **NIST требует (SHALL) установить определённый overall-таймаут ре-аутентификации и рекомендует (SHOULD) не более 30 суток на AAL1; наш жёсткий абсолютный срок 30 суток этой планке соответствует и трактует её строже.****Поправка к поправке, внесена в тот же день по перепроверке у первоисточника:** первая редакция этого пункта утверждала со слов верификатора, что 30 суток — интервал, который успешная ре-аутентификация СБРАСЫВАЕТ. Проверено у NIST: документ этого НЕ говорит — про сброс там не сказано ничего, поведение оставлено открытым. Значит наше чтение «жёсткий предел, который ничем не продлевается» — НАШ выбор, и он строже нормы, а не вычитан из неё. Подтверждается только вторая половина находки верификатора: термин «absolute maximum session lifetime» в NIST действительно отсутствует, он из ASVS. **Урок сессии: верификатор убедителен, и его собственные подпункты подлежат той же сверке с первоисточником, что и проверяемый текст — иначе приёмка приёмки просто переносит доверие на шаг.** Зонные носителя (`STACK_DECISIONS §13`, `config.go:62-64`) цитируют верно — ошибка была только в ноте, то есть в источнике истины №1. Номера разделов всех трёх норм верны. **Замечание по прицелу:** 7.1.x требуют ДОКУМЕНТА, величину требуют 7.3.1/7.3.2 — если §13 будут судить как соответствие ЗНАЧЕНИЮ, ссылка нужна на 7.3.2, её нет ни в одном доке. **(б) п.4 сохранил снятое основание** «доккоммент предлагает то, что PD-59 уже отклонил»: PD-59 сам superseded (D39.106 п.3), эррата это признала и переписала строку реестра, но текст п.4 остался — читать через эту поправку. **(в) «Живой уязвимости приёмка не нашла»** — термин не определён и гасит единственную major. Верно так: уязвимости с потерей денег, данных или захватом сессии нет; отказ в обслуживании входа ЕСТЬ и воспроизведён (PD-80, класс `vuln`). Формулировка в зонном журнале и CURRENT-STATE исправлена.
**3. Поправка к D39.110:** п.1 назван «решение владельца (дословно по смыслу)» — оксюморон, запрещённый нормой «цитаты только дословные, овер-атрибуция — типовой провал»; читать как **пересказ** решения. Форма и три следствия не меняются.
**4. Закрытые пробелы (все — в носителях, а не в нотах, потому что сессии зон читают носители).** PD-100 объявлялся в составе фикс-пака, а в фикс-листе зонного журнала отсутствовал — **добавлен пунктом 7** · граница пака («PD-92/93/96/99/102/105/107 не трогать») жила только в D-логе, а фикс-лист говорил обратное «остальное по весу строк» — **перенесена в журнал пунктом 8, формулировка «по весу» снята** · пункт 6 фикс-листа был одиннадцатью строками истории моей ошибки без задания — **сжат до задания** («переписать доккоммент `events.go:6-12` под форму D39.106 ДО промта эмиттера») · «три строки блокируют деплой и воркер» не называли, какие — **названы поимённо** (PD-91 деплой · PD-79 воркер · PD-95 промт эмиттера) · счёт весов регистра отстал от эрраты — **пере-считан скриптом: 37 открытых, 3 major, 14 minor, 20 info**, исправлен в двух местах · PD-105 нёс `minor` в колонке при «повышен» в теле — **колонка приведена** · словарь классов в шапке реестра не знал `doc`/`standards`, введённых новыми строками — **дописан** · PD-60/PD-61 выпали из списка «разрулить до промта эмиттера» — **возвращены** · пересчёт «главы → деньги» и ручка границ шкалы не были поручены никому — **носитель назван в строке 126** (считает платформа, поверхность объявляется правкой спеки; ручки в контракте сегодня нет) · «CONFIRM владельца на 30 суток» стоял в CURRENT-STATE как полученный, а в ноте и журнале — как открытый вопрос: **confirm получен 07.08, тексты сведены**.
**5. Два пробела класса «повторил свой же урок».** **(а)** Эррата D39.109 ввела правило «каждый вывод зонного дока, спорящий со швом, грепается на supersede ДО ратификации» — и не применила его к ПОТОЛКУ: раздел П-5 зонного журнала продолжал объявлять платформу владельцем `book.yaml`, хотя D39.110 п.2(б) это отменил в тот же день. Абзац помечен SUPERSEDED. **(б)** Голова CURRENT-STATE отставала — **третий раз в истории проекта** (после D39.81 и D39.83, оба названы в промте оркестратора): нота D39.111 была ратифицирована, а шапка показывала D39.110. Механический чек головы обязателен ПОСЛЕ каждого аппенда, а не после «важных».
**6. Не минтить номера чужим сессиям.** CURRENT-STATE ввёл «оркестратор №16» для параллельной приёмки полигона — при том что счётчик объявлен каноническим и ОДНИМ, живёт в промте оркестратора и показывает №15, а по D-логу №16 не существует. Номер снят: второй оркестратор назван ролью («параллельный, приёмка полигона»), номер выдаёт тот, кто пишет ему промт.
**7. Долг, оставленный сознательно:** срез хроники PROGRESS в архивный слайс (живой хвост несёт №11№13, эра D39.91105, всё закрытое) — НЕ сделан, потому что файл держит живая полигон-сессия, а срез это перекладывание сотни строк в контендящемся файле. Режет тот, кто лендит полигон. Туда же: архивация отработанного `PLATFORM_SESSION_PROMPT.md` (баннер-исход на нём стоит) — после приёмки фикс-пака, чтобы не ломать ссылку живой сессии.
## D39.113 — ИНЦИДЕНТ 08.08: агент панели откатил незакоммиченные правки двух параллельных сессий; один файл восстановлен, шесть потеряны; норма изоляции панелей ужесточена (08.08). ✅
**1. Что произошло.** В 00:13:39 агент воркфлоу-панели, которому я дал шелл, попытался работать в песочнице; его `cd` молча провалился (каталог песочницы исчез между вызовами), и следующая команда той же строки — `git reset -q; git checkout -q -- .` — отработала в РЕАЛЬНОМ рабочем дереве. Подтверждение: `git reflog` — два `reset: moving to HEAD` с этой меткой времени. Откатились незакоммиченные правки СЕМИ отслеживаемых файлов двух чужих сессий (полигон эксп-21 и параллельный оркестратор его приёмки). Коммиты обеих сессий целы; нетрекаемые файлы (`eval/role_topology/phase2b.py`) уцелели — `checkout -- .` их не трогает.
**2. Корень — МОЯ ошибка проектирования панели, не поведение агента.** Две причины, обе мои: (а) трём агентам панели я выдал ОДИН путь скрэтчпада, и они затирали друг другу подкаталоги — отсюда исчезнувшая песочница; (б) агентам с шеллом не был запрещён `git`, меняющий состояние дерева, при том что промт панели содержал запрет «ничего не редактируй в репозитории» — запрет прозой против команды, которая правит дерево не редактором, а git-ом. Прецедент этого класса в проекте уже был (урок 09.07: перезапись истории оркестратором стёрла незакоммиченные правки полигона) и не был превращён в механизм.
**3. Восстановлено одно из семи.** `docs/PROGRESS.md` — пинг полигона (26 строк секции «Полигон») восстановлен из моего собственного бэкапа, снятого в 00:08 при тестировании хука, за пять минут до инцидента; сверено, что дельта к HEAD = ровно эти 26 строк и ни одной моей. ⚠ Правки полигона в окне 00:0800:13:39, если они были, в бэкап не попали. **Потеряно безвозвратно** (git-объектов нет — файлы не стейджились, `git fsck` и полный обход `--batch-all-objects` по маркерам дали пусто): незакоммиченные правки `docs/experiments/21-role-topology.md` · `docs/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT.md` · `docs/architecture/14-api-contract/README.md` (заполненное Приложение А от №14 — в HEAD осталась ЗАГОТОВКА с плейсхолдерами) · `eval/role_topology/absjudge.py` · `drift.py` · `verify_report.py`. Инвентарь и уцелевшие материалы — в скрэтчпаде сессии, записка НЦИДЕНТ_08-08_потери.md`; текст Приложения А я держу в контексте и отдаю как РЕКОНСТРУКЦИЮ-черновик, а в дерево сознательно не писал: подменить потерянный файл правдоподобным хуже честной дыры.
**3-эррата (08.08, по ответу параллельного оркестратора — моя таблица потерь ошиблась в двух местах).** **(а) Неверная атрибуция.** Я записал незакоммиченные правки `docs/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT.md` как потерю ПАРАЛЛЕЛЬНОГО ОРКЕСТРАТОРА. Он это опровергает и грунтует: после лендинга `73a7e7a` он не держал в этом файле ничего незакоммиченного, HEAD (21838 байт) — его финальная версия. Модифицированное состояние файла до инцидента принадлежало ПОЛИГОНУ, который аннотировал промт (требование ригов, стр. 59); суть той правки уцелела в пинге, а её ратификация — работа приёмки полигона. Атрибуция исправлена здесь; в потерях у параллельного оркестратора не осталось ничего, кроме Приложения А, унаследованного от №14. **(б) Ущерб отчёта я преуменьшил.** Я записал «незакоммиченные правки отчёта»; фактически на HEAD лежит ВТОРАЯ-ТРЕТЬЯ редакция (деньги стр. 49: «$4.85… третья $0.55»; слов «четвёртая/пятая» в файле нет), а пинг описывает ПЯТУЮ ($4.92166, absjudge, агенты-судьи, семейство Холма из семи). Потеряны две ЦЕЛЫЕ редакции, а не правки. **(в) Восстановление полигоном оказалось неточным:** параллельный оркестратор нашёл в восстановленном `eval/role_topology/verify_report.py:237` затенение `med = med(costs)` при функции `med` на строке 53 — `UnboundLocalError` на первой итерации, секция ЭКОНОМИКА и всё после неё не исполняются. Пере-проверено мной по коду: находка верна. Чинит полигон (его зона); для приёмки это значит, что «восстановлено из контекста» ≠ «восстановлено верно», и восстановленное подлежит той же проверке исполнением, что и новое.
**4. Норма (жёстче прежней, потому что прозой не сработала).** Агенту панели с шеллом: **свой каталог песочницы на КАЖДОГО агента** (общий путь = гонка и исчезающие каталоги) · **запрет на state-changing git явным перечислением** (`reset` · `checkout --` · `restore` · `clean` · `stash` · `add` · `commit`), а не общей фразой «не редактируй» · перед панелью, работающей в дереве с чужими незакоммиченными правками, **снимать бэкап этих правок** (`git diff > файл` вне репозитория) — сегодня спас именно случайный бэкап, а не процедура · формулировка «работай в копии» без выданного пути и без проверки, что копия существует, — приглашение к этому же инциденту. ⚠ Для читающего дальше: три доступных мне механизма изоляции (worktree на агента, запрет тулов, копия репозитория) не были применены ни один.
## D39.114 — ФИКС-ПАК ПЛАТФОРМЫ (P3) ПРИНЯТ И ЗАЛЕНДЕН: девять строк регистра закрыты, 8/8 моих посадок поймано, PD-80 и PD-91 пере-проверены исполнением (08.08). ✅
**1. Вердикт:** ПРИНЯТ, заленден `99f049c` (18 файлов, +856/86). Отработаны все восемь пунктов фикс-листа приёмки P2; закрыты **PD-79 · PD-80 · PD-83 · PD-84 · PD-85 · PD-91 · PD-95 · PD-100 · PD-106**. Приёмка по весу пака — инлайн и своим исполнением, без панели (норма пропорциональности; после инцидента D39.113 панели без слова владельца я не запускаю).
**2. Метод.** Батарея пере-прогнана мной: офлайн и с живым PostgreSQL 18.4 под `-race` — все десять пакетов зелёные, включая новый `cmd/tmplatformctl`, линтер 0 issues, `make vuln` чист. **Свои посадки — 8 из 8 поймано поимённо**, в копии зоны вне репозитория; посадки ставились В СВОЙСТВО каждой закрытой строки, потому что предмет проверки фикс-пака — именно карта пинов зоны, а не поиск мимо неё. ⚠ Первая редакция моей посадки PD-100 была нацелена мимо (регексп снял соседний лог) и «выжила»; точная посадка ловится `TestInfrastructureFailuresInTheCallbackAreLogged` — записано, потому что «заявление=команда» действует и на приёмку.
**3. Пере-проверено исполнением, не со слов.** **PD-80** на собранном бинаре: сорок запросов выжигают ведро `/auth/login`, после чего честный колбэк с живым state получает **400, а не 429** — бюджет завершения входа флудом начала больше не тратится (до фикса тот же сценарий давал 429 со стёртой login-кукой; воспроизводилось дважды независимо). **PD-91**: замер зоны воспроизведён моими руками — `systemd-run --user --wait -p ProtectSystem=strict -p ReadWritePaths=<несуществующий>` даёт `226/NAMESPACE`, тот же путь созданным даёт `0/SUCCESS`. Способ проверки БЕЗ sudo зона нашла сама, и это сильнее, чем предполагала строка PD-91: свойства песочницы теперь измерены, а не вычитаны из доки; что не проверено (юнит целиком, `MemoryMax`/`OOMPolicy`) названо на месте. **PD-95**: доккоммент `events.go` несёт ратифицированную форму D39.106 — устранён риск, что эмиттер-сессия прочтёт снятую форму как задание.
**4. Ратифицировано отдельно: PD-104 оставлен открытым ПРАВИЛЬНО.** Зона починила половину док↔код (ячейка PD-30 больше не обещает нулевой аккаунт при автогранте) и строку не закрыла, потому что продуктовая половина — ноль на бете, суточный агрегатный потолок, счётчик аномалий — ждёт слова владельца. Это правило PD-83 («свойство без пина закрытым не считается»), применённое зоной к себе.
**5. Оговорка зоны принята как честная:** адверсариального ревью вторым читателем у P3 не было — сессия без права на субагентов. Второй читатель — эта приёмка. **Живой счёт регистра руками больше не переписывается** (норма D39.112): `python3 docs/scripts/counts.py`; исторические числа в CURRENT-STATE помечены историческими, а литерал веса снят с автопроверки, потому что легитимного живого носителя в зоне `docs` у него нет.
## D39.115 — S3 «СЛОЙ ДАННЫХ» ПРИНЯТ И ЗАЛЕНДЕН: контракт 0.2.0 в каноне, три ошибки ОРКЕСТРАТОРА поймала сама сессия, правило 0.x ратифицировано (08.08). ✅
**1. Вердикт:** ПРИНЯТ, заленден `60595f6` (46 файлов). Пере-прогнано мной: `npm run check` — 108 тестов, prettier/eslint/stylelint/tsc чисты, spectral по спеке без замечаний; `npm run check:full` — сборка плюс СЕМЬ кадров с axe, включая новый маршрут `/partial` (отказал один рид при рабочих остальных — ветка жила незамеченной именно потому, что её нельзя было открыть по ссылке). Кадр `/scale` прочитан глазами: пер-главный счётчик замечаний на месте, и честно оставленный Ф-30 виден прямо на экране — глава без заголовка показана голым номером «12», а не выдуманной «Главой N».
**2. Три моих ошибки, найденные сессией. Это главный результат пака.** **(а) «Максимум шкалы = баланс МИНУС открытые холды» (D39.110 п.2(в), строка 126, промт S3 п.17) — НЕВЕРНО, вычитание дважды.** `Hold` пишет отрицательную строку в леджер и тем же знаком двигает кэш баланса (`credits.go:179``appendLedger` `:297-305`), значит баланс УЖЕ не содержит открытых холдов, а `Reserved` — справочная сумма. Пере-мерено мной на живом PostgreSQL: грант $10 и холд $1 дают `Balance` 9.000000 при `Reserved` 1.000000, а моя формула дала бы 8 — шкала вдвое короче правды. Исправлено во всех трёх носителях. **(б) Форма `nullable: true`,** которую я вписал в промт для `GET /usage`, в OpenAPI 3.1 невалидна; сессия выразила через `oneOf` с `type: 'null'`, как во всей остальной спеке. **(в) Инструкция ВНУТРИ нормативного дока протухает от исполнения:** я оставил в шапке спеки фразу «version всё ещё `-draft` — S3 бампнет первым действием», и после бампа она стала ложной; сессия заменила её на правду и назвала это отступлением вслух. Тот же класс, что рукописные производные числа (D39.112): предписание, записанное в артефакт, живёт до первого действия.
**3. Норму «не ходить в чужую зону» АМЕНДИРУЮ, потому что она и была источником (а).** Сессия объявила вслух, что нарушила мой запрет и читала Go платформы (только чтение, ничего не тронуто) — и ровно этим нашла ошибку в моей ратификации. Новая формулировка: **в чужую зону НЕ ПИСАТЬ; ЧИТАТЬ код для сверки несущего утверждения — можно и НУЖНО**, потому что доки врут, и это норма проекта («не верь заголовкам, грунтуй `file:line`»). Запрет читать превращал сессию в заложника моего текста. Отдельно: раскрытие нарушения вслух — правильное поведение, и его надо поощрять, а не наказывать.
**4. Ратифицировано.** Форма управляемого потолка — `GET /books/{bookId}/run-options``CeilingBounds` отдельным ресурсом, а не полем карточки книги (максимум зависит от АККАУНТА и двигается, когда книга не менялась; карточка кэшируется библиотекой и назвала бы протухший максимум ровно в момент выбора) · три числа вместо двух, `max_chapters` приходит уже подрезанным и клиенту подрезать второй раз запрещено, `default_chapters` — продуктовая политика платформы, `max_chapters: 0` легален и означает «прогон начать нельзя» · `ceiling_chapters` обязателен в запросе старта и на `Run` · `409` покрывает «потолок больше не помещается». **Правило версий 0.x:** минорный бамп — законная полоса ломающих правок (semver §4), клиент пинит точную 0.x-версию; с 1.0.0 действует общее правило. Сессия НЕ стала править раздел Versioning своей рукой, а назвала противоречие — это верно, правило версий принадлежит владельцу контракта; вписано мной в обе копии. **Блоки компаньона 2.14 (поверхность входа) · 2.15 (потолок) · 2.16 (тот же origin — факт, CORS-слоя нет)** внесены в канон; патч-файл `S3_CONTRACT_HANDOFF.md` применён и удалён, как он сам себя и объявил.
**5. Канон и зонная копия снова байт-равны** (`ba7f3745…`), spectral по обеим чист.
**6. На владельце — три вопроса, сессия их назвала сама.** (а) Метка «остановлена: лимиты» в дереве — сжатие ратифицированной фразы «перевод остановлен: лимиты исчерпаны», сделанное сессией; продуктовые слова по В-3/Ф-21 не её. (б) **К-13 (Ф-31): упереться в СВОЙ потолок прогона и остаться без кредита сегодня неразличимо**`paused_reason` имеет одно значение `credit_exhausted`, и первому из двух фраза врёт, а следующее действие у него другое. (в) Ф-30: глава без заголовка показана голым порядковым номером, потому что синтез «Глава N» запрещён К-3; это вопрос В-4, уже стоящий владельцу. Плюс три поля, придуманные сессией по её собственному признанию и ратифицированные мной выше: `default_chapters`, `maxLength: 200` у заголовка, `paused_reason` в кадре статуса.
**7. Открытые хвосты зоны, заведённые честно:** Ф-29 (мок едет в прод-бандл — цена того, что скриншот-цикл гоняет прод-сборку; папка удаляется в день живой платформы) · Ф-32 (замечания читаются пер-книжно, показываются пер-главно: экран починен, память нет — на книге с тысячами замечаний клиент тянет весь список ради трёх строк) · `ceiling_chapters` обязателен сегодня бесплатно, после первого реального прогона это станет ломающей правкой.
## D39.116 — АКТУАЛИЗАЦИЯ ДОКОВ: 78 находок свипа, отработанные промты в архив, живая ошибка счёта исправлена, три строки заведены (08.08). ✅
**1. Заказ владельца:** полная актуализация — занести незанесённое, перенести в архив сделанное, убрать воду, снять stale. Метод — read-only фан-аут по четырём осям (активные промты · stale-факты · вода и дубли · незанесённые обязательства) по ВСЕМ 107 живым докам (~25 тыс. строк), правки делал я. **Изоляция панели по норме D39.113:** свой каталог каждому агенту, запрет state-changing git перечислением (плюс тот же запрет теперь в `deny` настроек — проверено, `git stash list` отбивается), бэкап всего чужого незакоммиченного снят ДО запуска. Итог свипа: **78 находок** — 14 по промтам, 29 stale, 19 воды, 16 незанесённых.
**2. Живая ошибка в МОИХ числах, найденная и исправленная.** Счётчик `docs/scripts/counts.py` читал колонки таблицы СЛЕВА, а строка бэклога 127 законно несёт `seed|ruby|auto` внутри ячейки — разбор принимал за зону слово «ruby». В CURRENT-STATE стояло «зона бэкенд 62 строго / 79 широко» при истине 63/80. Исправлено: колонки читаются С КОНЦА (хвостовые короткие и `|` в них не бывает), **битая форма строки теперь расхождение, а не тихий `IndexError`**, голова берётся по МАКСИМАЛЬНОМУ номеру, а не по последней строке файла (в D-логе уже есть внеочередные аппенды `D39.17``D39.19``D39.18`), регекспы больше не прибиты к эре `D39`. Все четыре дефекта назвала панель ревью, ни один не был моей находкой.
**3. Отработанные промты — в архив с баннером-исходом.** `frontend/docs/S3_SESSION_PROMPT.md` (исполнен двумя сессиями, принят D39.115) и `platform/docs/PLATFORM_SESSION_PROMPT.md` (ЧЕТЫРЕ сессии, P3 принят D39.114) → копии в `docs/archive/prompts/`, указатели `docs/README.md` переписаны. Цена отсутствия баннера была названа прямо: следующая фронт-сессия открыла бы S3-промт с императивом «первый шаг — правки спеки» и **откатила бы ратифицированный контракт 0.2.0**. Из платформенного баннера убран рукописный перечень живых PD-строк — он разошёлся с реестром на первом же фиксе, то есть я сам нарушил свою же норму D39.112 «один носитель на факт»; заменён указателем на скрипт и реестр.
**4. Снятые stale, которые сработали бы на холодной сессии.** Живой бэкенд-промт нёс «в дереве живёт ЧУЖОЕ `platform/*`, ждёт приёмки P0» — платформа принята и залендена, а РЕАЛЬНО живая параллельная работа (полигон) в промте не названа вовсе; заменено на «сверь `git status` в начале сессии» с указанием живой зоны. Тот же промт велел писать пинг в `docs/PROGRESS.md` без протокола — файл держат три сессии, и его секция уже терялась (D39.113); дописан протокол «только append своей секции, CURRENT-STATE не касаться». `POLYGON_PACKAGE4` §1 требовал исполнить сид-обогащение, исполненное D32, указывая на МЁРТВЫЙ `guzhenren-seed.yaml` v1 при живом v2 — помечено исполненным. Компаньон КАНОНА контракта четверо суток называл себя «черновиком фронт-сессии S3 на ратификацию» — тот же класс, что шапка `info` спеки, исправлено. Зонный журнал фронта в «Текущем состоянии» говорил «S3 НЕ сделана, контракта нет» против собственной хроники; журнал платформы — «дерево НЕ закоммичено, ждёт приёмки» после лендинга. Висячие ссылки на удалённый патч `S3_CONTRACT_HANDOFF.md` починены в трёх живых доках (в D-логе оставлены как история — append-only).
**5. Заведены строки 146 · 147 · 148** (обязательства без носителя): два техдолга движка, жившие только в справочнике якорей (`prices_checked` гейтит $0-путь · `cache_write_per_m` под один TTL) · транспортные частичные research/21 §1617 (HTTP/1.1-escape как диагностика тихого усечения · assistant-prefill continuation вместо ре-рана) · **восстановление Приложения А контракта после инцидента** — решение владельца. Счёт очереди пере-выставлен скриптом: **123** строки · бэкенд 64 строго / 82 широко · «скоро» 33.
**6. Норма изоляции панелей перенесена из D-лога в промт оркестратора** — она жила только в ноте, а читают промт. Там же пустой заголовок «Текущее состояние и очередь — НЕ здесь» получил тело: где именно они живут и что числа берутся скриптом.
**7. Что НЕ сделано и почему.** Срез хроники PROGRESS в архивный слайс (живой хвост несёт №11№13, эра D39.91105) — не делал: файл прямо сейчас держит полигон-сессия, а срез это перекладывание сотни строк в контендящемся файле, то есть способ потерять чужую работу второй раз за сутки. Режет тот, кто лендит полигон. Из 78 находок закрыт первый эшелон (промты, статусы, висячие ссылки, незанесённое) — остаток воды (дубли пин-таблиц, историческое тело `API_CONTRACT_DRAFT.md`, §1 «как есть» в `09-target-architecture.md`) в этот проход не тронут: он не вводит сессию в заблуждение, а только удлиняет чтение.
## D39.117 — ЭКСП-21 ПРИНЯТ; подтверждения владельца по тратам и агент-судейству получены; строка 65 закрыта; курс — эксп-22 «панель жильцов» + Sol-арбитраж (08.08, параллельный оркестратор — приёмка полигона, мандат владельца 08.08). ✅
**1. Вердикт: ПРИНЯТ.** Проверено исполнением 08.08: `verify_report.py` — 90 проверок, ноль провалов, код 0; `itog.py` пере-снимает каждое число ИТОГа из сырья, код 0. Встречные аудиты полигона (снизу вверх / сверху вниз) приняты; мой краш-репорт `med = med(costs)` (`verify_report.py:237`, неточное восстановление после инцидента D39.113) полигоном починен, линтер зоны заведён. Приёмка по норме пропорциональности — инлайн + исполнение гейтов, без панели. Механика — пинг «Полигон» и §18 отчёта, здесь не дублируется (D39.112).
**2. Подтверждения владельца 08.08** (в чате этой сессии; пересказ, не цитаты): **(а)** траты 07.08 — устная санкция владельца по ходу сессии БЫЛА и подтверждена («я разрешал тратить»); против буквы промта пробития остаются зафиксированными в отчёте, промт эксп-22 закрывает класс механическим стопом и тестом кассы на свои теги. **(б)** Амендмент «судья пака не покупается за токены» (агент-судейство вместо платного) — подтверждён ⇒ числа §11§18 легитимны, платный пере-суд не нужен. **(в)** Правка риг-требований («оба порядка» → абсолютная шкала) — это девиация от промта ОРКЕСТРАТОРА, не решение владельца, ратифицирую сам: требование зеркальности писалось под платного ПАР-судью; в абсолютном протоколе позиции пары не существует, а позиционный сдвиг замерен и вычтен (+0.147/шаг метки); все четыре агента независимо свернули парные пакеты в абсолютные оценки — инструмент сам отверг форму. Для ПАРНЫХ предъявлений (Sol-пакеты) оба порядка остаются обязательными.
**3. Диспозиции гейт-строк (гейт «эксп-21» исполнен).** **142** — точечная починка ОТКЛОНЕНА как замена редактора (`C2/A_law` 3.75 Holm 0.0006; при реальной детекции не лучше черновика, `C2/F3` 0.94; гипотеза эксп-20 «$0.0002 чинит всё» мерилась при идеальных флагах и пала) и ПРИНЯТА формой «механический пре-гейт ПЕРЕД редактором» (брак 5 клеток против 10/23 при половинной цене $0.00298/$0.00602; ремонт ТОЛЬКО с банком — без банка ломает канон 0.917→0.895); стройка — бэкенд-промтом по команде владельца. **65** — ЗАКРЫТА: движки dspro/glm-5 неразличимы (`A/B` +0.06 p=0.95; `A_law/B` 0.69 порога не проходит) ⇒ жилец редактора — вопрос ЦЕНЫ, то есть конфиг; остаток строки (слепое чтение инструментарием D39.8(3)) переезжает в Sol-протокол, строка 150. **106**НЕ закрывается: эксп-21 дал довод против диффов (полный regen выигрывает у ремонта), но с оговоркой полигона — чинил дешёвый фиксер по предложению, а не сильный редактор узким мандатом; гейт «перепроверить до стройки» в силе, приоритет понижен. **55** — частично закрыта (направление главного вывода воспроизведено на чистом en-материале, узнавание 1/5); остаток «неконтаминированный zh-срез» — заказ ПОВТОРЁН эксп-22 Ф0 жёстко: эксп-21 его не исполнил (главный zh-замер на книге 4/5, без пинга).
**4. Опровергнута продуктовая строка D39.108 «второй проход на dspro отрицателен по слепому суду»** — она стояла на непersisted замере §5.2 эксп-20 и была помечена «со слов»; эксп-21 честным ригом дал обратное (`A/F3` +2.50 Holm 0.0004 · `A_law/F3` +2.81 Holm 0.0098 · нога 2×2: работает топология, не жилец). Стек-баннер CURRENT-STATE поправлен, supersede-указатель добавлен в карту. Пометка «со слов» отработала как задумано — величина не успела стать основанием стройки.
**5. Курс владельца 08.08:** **(а)** эксп-22 «панель жильцов» — промт выдан (`docs/POLYGON_TENANT_PANEL_SESSION_PROMPT.md`): профиль-скрин с pass/fail порогами, записанными ДО замера → панель черновиков (слот несёт ~70% эффекта финала — §16.2; за всю историю проекта черновиком была одна модель) → панель редакторов поверх замороженных черновиков (обязательный кандидат `gemini-3.1-pro` — аутлаер-гипотеза эксп-04, современным ригом не мерена) + шумовой пол (§8 п.1) + прямой `D_/A` (§8 п.2) довесками. **(б)** Слепое чтение владельца ЗАМЕНЕНО Sol-арбитражем (владелец черновики читать не хочет; ChatGPT Sol high-reasoning руками владельца через подписку = внешний контур третьего семейства): пере-суживаются расходящиеся контрасты эксп-21 (`A/F`: luna +0.84 против gemini +3.03 — расхождение 2.19 балла = 14 стандартных отклонений шума судьи-замены, собственным шумом не объясняется) и слепые пары эксп-22. **Правило ничьей эксп-22 ратифицировано:** при перевесе ниже порога различимости рекомендация отчёта — самый дешёвый жилец. Оговорка записана честно: Sol — LLM, «издательское качество для человека» им не доказывается; человеческий контур остаётся за пилотом Ф2.5. **(в)** Агент-судейство — под явным капом (агенты не бесплатны — слово владельца 08.08; кап ≤60 запусков в промте эксп-22).
**6. Хвосты в трекер:** строки **149153** заведены (эксп-22 · Sol-арбитраж · отказной режим связки · слипание абзацев · чистый контраст мандата); строки **12 и 82** получили $0-прототипы эксп-21 (`battery.check_numbers` — синтетика 16/16 · `battery.check_gender` по карточкам сида, 86112 сверок/арм) — указатели внесены в их тела, сами строки живы (движковые гейты не построены); кредиты xAI — в лист владельца; три провод-факта эксп-21 §8 внесены в quirks 00 (Gemini fail-closed приходит БЕЗ объекта `message` · `gpt-5.6-luna` без ручки эффорта — пустой оплаченный выход · `glm-5` гасится `extra_body`).
**7. Поправка к D39.113:** строка таблицы потерь «незакоммиченные правки промта — параллельный оркестратор» — ошибочная атрибуция: HEAD `73a7e7a` и был финальной версией промта параллельного оркестратора, его правки не терялись. Чьи модификации были в дереве — достоверно неизвестно; вероятно, полигона (его пинг предлагает правку требования стр.59 того же файла), и тогда их суть уцелела в пинге. Буква D39.113 не переписывается (D23.3) — читать через эту поправку.
## D39.118 — ФИКС-ПАК БАНКА (строки 128+129+130-минимум) ПРИНЯТ И ЗАЛЕНДЕН: семьи термов со-батчатся юнитами, наблюдаемость подписи построена, дофикс-раунд закрыл major приёмки (08.08). ✅
**1. Вердикт:** ПРИНЯТ, код заленден **`bccf2d8`** (27 файлов, +2935/201; деньги пака $0). Метод — четырёхконтурный воркфлоу приёмки: слепой дифф-ревьюер с мнением ДО чтения отчёта · пере-ран всех заявлений исполнением · 8 своих посадок в копии зоны вне репозитория (6 CAUGHT сразу, 2 выжившие) · охота вне карты отчёта; затем дофикс-раунд сессии и ре-чек (battery целиком EXIT=0 · `-race` EXIT=0 · счёт тестов 685→717 подтверждён независимо · пере-посадки 3/3 CAUGHT, выживших 0). Механика и полный фикс-лист — ревью-шапка `archive/reports/BANK_CLUSTER_FIXPACK_2026-08-08.md` и пинг «Бэкенд» PROGRESS; здесь не дублируются (D39.112).
**2. Находки приёмки, закрытые дофиксом:** клейм «батарея зелёная» первой редакции был ложным — lint не гонялся и был красным (3× errcheck), исправлено с честным признанием в отчёте · MAJOR вне карты: WARN строки 130 структурно мёртв в проде — `ownerHandled` на сыром seed само-исключал строки движка со второго прогона; закрыт `unsignedEngineSurfaces(seed)` + e2e-тест двумя реальными прогонами через стор · две дыры пинов на space-run-форме (conf-хвост и ре-джойн банкноты отключались незаметно) · `bankParseVersion` не потреблялся ничем — теперь логируется на стопе, v2.1/v2.2-артефакты различимы · три тихих отказа канала семей: script-колонка валидируется по реестру диапазонов, пол-таблица отвергается, словарь типов синхронизирован (`CandidateTypes` с `nickname` + правило пары + пин покрытия каждого типа).
**3. Ратифицировано:** **сдвиг edit-волны bank-only ПРИНЯТ** (слово владельца 08.08 «не против реснапшота»; сдвиг громкий `--resnapshot`, `moveBankOnly` даёт $0-репин юнитам без терма; уточнение приёмки: двигается и при выключенном гейте терминолога, classify-чекпойнты перекупаются тем же центовым разом) · **bankdata-плоскость** — отдельный `//go:embed` вне волнового фолда со своей `BankDataVersion` (вместо колонки `script-series.txt` — та фолдится в `EmbeddedVersion` и перекупила бы драфт-волну без права $0-репина; девиация ратифицирована как правильный шов) · **инверсия ранжирования семей** (размер прежде длины якоря; спековый порядок ломал критерий линейки 转) — принята, девиация дописана в §4 отчёта по требованию приёмки · **имена эвиктнутых — лог, миграция НЕ заводится** (гейт: доказанная потребность; строка 159, вместе с 49а) · **«двойной пробел» закрыт замером:** 0 внутренних прогонов на 585 строк эталона (пере-ран приёмкой; наивный grep без rstrip даёт 55 хвостовых — парсер их триммит).
**4. Строки трекера:** **128 и 129 ЗАКРЫТЫ** · **130 пере-скоуплена** (минимум исполнен; остаток = накопительный мердж/слоты — СТОП-решение владельца, материал даст WARN со второго прогона) · **заведены 154159** (одноруновая голова семьи · скрипт-слепой резолв к ja→ru · `banknote_truncated`-пол за гейтом канала · пере-подтверждение `family_max_members=24` · conf без гейта данных пары · durable-имена эвиктнутых) · дописаны 37 (вынос Aho-Corasick = рефакторинг слоя, «чисто не ложится») · 38 (ординальная механика подтверждена кодом: G1 двигает состав юнитов — на первом прогоне после пака перекупаются все бэнк-батчи, центы) · 57 (ссылка на фикс-пак закрыта). Остаточный принятый риск: пин покрытия типов работает по зеркальной фикстуре `zhFamily` — рассинхрон зеркала со shipped-строками пином не ловится.
**5. Верификация эффекта** — §6 отчёта (10 конкретных проверок по артефактам, $0); гейт — первый холодный прогон: `families=`/`families_held=` · химера 古月/转 в стоп-таблице · `self_conflicts=` · колонка `confidence` при не выросшем `bad_lines` · WARN диффа авто-банка со второго прогона. Активного промта бэкенда после этого лендинга НЕТ — следующий (эмиттер строки 103 + денежные строки шва) по слову владельца (D39.107 п.3). *(⚠ поправка курса тем же днём: следующим выдан пак «блокеры контракта», эмиттер — за ним; слово владельца — D39.119 п.1.)*
## D39.119 — КУРС ВЛАДЕЛЬЦА 08.08: эмиттер отложен, выданы ДВА промта (бэкенд «блокеры контракта» · платформа «раннер»); S4 гейчен качеством оболочки; PD-105 ратифицирован (08.08). ✅
**1. Слово владельца 08.08 (пересказ):** с эмиттером jsonl подождать — вокруг него техдолг бэклога; но платформу и фронт пора разблокировать. Разбор оркестратора, подтверждённый владельцем формой «пиши»: настоящие разблокираторы фронта/платформы — движковые строки контракта **99/100/101/125/145** (строка 49 annot-v1 — следующим паком) и платформенный раннер с ручками; эмиттер нужен СВЕЖЕСТИ статуса и деньгам шва, не первым экранам — резерв на это время = периодический `status --json`-резюнк (построен в P1). Поправка к D39.118 п.5: эмиттер идёт бэкенд-промтом ПОСЛЕ пака блокеров.
**2. Выданы два промта** (оба аудированы перед выдачей: два холодных читателя + фактчекер, 35 опор подтверждено, поправки внесены): **бэкенд**`docs/BACKEND_CONTRACT_BLOCKERS_SESSION_PROMPT.md` (строки 99+100+101+125+145; $0; сетевых поверхностей в движке не появляется — D39.81) · **платформа**`platform/docs/PLATFORM_RUNNER_SESSION_PROMPT.md` (транзиентные юниты D39.106 · River+воркер+холд-до-спавна · реконсилятор 138 · тейлер наготове · первые ручки /v0 по контракту 0.2.0 (П-1/П-5) · PD-99; координация с бэкенд-паком — узкие интерфейсы с дев-стабами, форма только из HEAD). Запуск сессий — владелец.
**3. Ратификация PD-105:** доставка событий шва = at-least-once; ДУБЛЬ `seq` — норма повторного чтения, декодер обязан принимать идемпотентно без фатала; тот же `seq` с ДРУГИМ payload = карантин прогона (research/25). Девиация от буквы реестра («ратифицировать вместе с промтом эмиттера») осознанная — тейлер-сторона строится сейчас; строку реестра обновляет платформа-сессия паком.
**4. Слово владельца о КАЧЕСТВЕ ФРОНТА — гейт на S4.** Владельцу не нравится «логика спама вкладками»: вкладки обязаны работать как в VS Code (preview-вкладка от одиночного клика, замещение её следующим, пин по двойному клику/взаимодействию). Полный список претензий владелец сформулирует отдельным входом. Диспозиция: **S4 не стартует до списка**; форма — «S3.5 фикс-пак оболочки» (VS Code-вкладки + Ф-19 + список владельца) → S4 на починенной оболочке. Носитель — запись оркестратора в `frontend/docs/frontend-PROGRESS.md` 08.08; ПТ-строка в продуктовый реестр — при полном списке. Бэкенд/платформа фронт не ждут.
## D39.120 — КРОСС-МОДЕЛЬНЫЕ КОНТУРЫ РЕВЬЮ И ПРЕДМЕТНЫЕ ОСИ САМОПРОВЕРКИ — нормой-направлением (владелец 08.08). ✅
**1. Ратифицировано словом владельца 08.08 (пересказ; финал — «да, нормально» с оговоркой свободы):** (а) в приёмочных панелях ≥1 опровергатель ДРУГОЙ моделью семейства на текстовых/оценочных линзах (глушит контекстное закрепление и self-preference; механические линзы от смены модели не выигрывают); (б) тяжёлые ратификации класса D39.106 и периодический аудит записей оркестратора — параллельная сессия-ревьюер другой моделью с СОБСТВЕННЫМ онбордингом (снимает фрейминг оркестратора; промт — оркестратор, старт — владелец, мнение — владельцу ДО ратификации; прецеденты D39.106/D39.112); (в) семейный слепой участок кросс-моделью внутри Anthropic не снимается — оценочные вердикты по-прежнему калибруются внешним семейством, первичны пере-ран и исполнение; (г) каждый кодовый промт несёт 13 ПРЕДМЕТНЫЕ оси самопроверки по характеру работы (бэкенд — общность §0.1; платформа — индустриальный первоисточник/stdlib прежде велосипеда; фронт — контракт/доступность), дисциплина ревьюера (шесть антипаттернов) в сессионные промты не грузится.
**2. Оговорка владельца — часть нормы:** всё выше — НАПРАВЛЕНИЕ, не буква; сессиям и оркестратору оставлена свобода суждения, разумное отступление с аргументом легитимно и приветствуется; упарывание в букву стандарта и соглашательство с нормой ради нормы — сами по себе антипаттерн. Носитель — промт оркестратора (два новых буллета «Методологии»).
## D39.121 — ЗАПИСКА-ПЛАН ПОСЛЕ ТЯЖЁЛОГО РЕВЬЮ + ОФИЦИАЛЬНЫЕ ПРАКТИКИ ANTHROPIC абсорбированы нормой-направлением (владелец 09.08). ✅
**1. Слово владельца 09.08 (пересказ):** сессии должны решать свои проблемы максимально самостоятельно — после сложного ревью с верифицированными находками сессия составляет МИНИ-ПРОМТ САМОЙ СЕБЕ (записанный план) и движется по нему, а не по памяти; плюс заказ: разобрать официальные гайды Anthropic и перетянуть применимое. Исполнено веб-ресёрчем (3 агента, 86 рекомендаций с URL-грунтовкой) — выжимка и карта применимости: **`docs/research/26-anthropic-guidance-digest.md`**.
**2. Ратифицировано (направление, не буква — оговорка D39.120 п.2 действует):** (а) **записка-план**: после тяжёлого ревью — структурированный файл «ID находки → статус → улика» (не проза: инцидент диспозиций 08.08 случился в прозе, и Anthropic это же говорит о Markdown против JSON), движение по записке, сдача гейтится сверкой «все ID имеют диспозицию»; (б) «заявление=команда» распространяется на клеймы ревью о себе; (в) комплектность против заказа — механически (пункт промта → исполнено/отказ), для паков среднего+ веса; (г) числовой гейт сторожит присутствие, не истинность — сравнительные/пороговые утверждения приёмка читает списком; (д) стандартный блок будущих кодовых хендоффов из официальных сниппетов (ground-progress-claims · «проверь последний абзац» · запрет подгонки тестов · интервальная самоверификация против явных критериев); (е) панелям — obstacle reporting обязательным полем схемы и анти-оверфлаг-рамки ревьюеру. Носители: промт оркестратора (два буллета) + CLAUDE.md (компакция-инструкция и запрет подгонки тестов — механизм-уровень, читается каждой сессией).
**3. Конвергенция зафиксирована** (research/26 §2): половина канона проекта совпала с официальными рекомендациями независимо («заявление=команда» = show-evidence · author≠reviewer = fresh-context verifiers · execute-first приёмка = grade-final-state · онбординг-диета = lean CLAUDE.md · «один носитель на факт» = JIT-указатели). Не перенимается: promptfoo · lock-файлы (нужны только при двух сессиях в одной зоне) · метапромпт как прод-механизм (§5 research/26). Вопрос владельца о «сайте prompts md» закрыт указателем — research/26 §4.
## D39.122 — ПАК «ДВИЖКОВЫЕ БЛОКЕРЫ КОНТРАКТА» ПРИНЯТ И ЗАЛЕНДЕН; ратификации приёмки; строки 99·100·101·125·145 закрыты; research/27 (главы) принят фактурой (09.08). ✅
**1. Приёмка (оркестратор №15, полный аппарат + новые нормы).** Три раунда: (а) 7-агентный воркфлоу — слепой дифф-ревьюер · **кросс-модельный опровергатель отчёта на Opus (первое применение D39.120)** · пере-ран заявлений (battery целиком, 717→738, формы артефактов на стенде, cmp проекций) · 7/7 посадок CAUGHT в копии зоны · два охотника вне карты · перф-замер на независимом стенде с бинарём «до» из `06f0342` (status 1.401.46→0.050.07 c — таблица §2.4 воспроизведена); (б) фикс-лист F1F6 (несущее: **F1 MAJOR от опровергателя — `unit.id` первого юнита главы переживал любой разрез**, «граница инвалидации» отчёта была ложной; закрыт ТЕГОМ РАЗРЕЗА в id) + ре-чек с пере-мутациями (поймано: V2-1 не исполнен и не задекларирован · клейм покрытия F6 ложен · зазор МОЕЙ спеки cutTag без langpack/embedded/norm · manifestVersion не бампнут); (в) микро-раунд V2-1..4 исполнен, и сессия СВЕРХ заказа провела третий слепой аудит своих клеймов — нашла 4 непокрытых тестами оси (худшая: быстрый путь манифеста удалялся при зелёной батарее — тест сравнения проекций вырождался в «медленный против медленного»; проводка `--ceiling-usd` в CLI не пинилась) и запинила; призналась в холостых прогонах двух мутаций (`go test -run` без совпадений = ok) и добавила сторож. Итог: тестов **717→749** (+32/0), battery EXIT=0 целиком, голден/снапшот/подпись банка нетронуты. (г) Финальный ре-чек V2+аудита (по слову владельца) — ВСЁ CONFIRMED исполнением: состав V2-диффа точен (5 файлов, ничего сверх), каждая V2-ось и все три §11б-теста перебиты мутациями заново (слепое пятно «ServesTheReadModelsIdentically зелёный при мёртвом быстром пути» воспроизведено буквально), счёт 749 поимённо, стенд `tm-manifest-v2` 2283/4276/5071 c единым cutTag, cmp-проекции IDENTICAL (0.080.16 c против 1.421.43 c). Одна MINOR-находка ре-чека принята БЕЗ дофикса: тест границы `manifestMaxChunks` пинит механизм, но не значение константы (absurd выводится из неё же — поднятие до 1<<62 тест переживает); диспозиция значение константы сторожится ревью, NOTE в ревью-шапке отчёта.
**2. Ратификации приёмки.** (а) **Граница `report`/`export --pairs`/ре-билла на пере-нарезке — ГРАНИЦА, не долг**: `QualityReport` по построению требует исходный текст юнита (residual-скан), манифест текст не несёт намеренно. (б) **`done` пофазных счётчиков = «разрешено волной»** (ok/flagged/skipped); следствие `edit.done ≥ done` честное, с оговоркой draft-only в доккоменте. (в) **`--ceiling-usd` = КНИЖНЫЙ потолок в силе, не бюджет прогона**: леджер сравнивает с накопленным committed+reserved книги; пересчёт «пользовательский прирост абсолют» обязанность ПЛАТФОРМЫ, данные уже отдаются (`committed_usd`/`reserved_usd` в `status --json`); вторая денежная ось НЕ заводится. (г) Все 8 девиаций §8 отчёта приняты (`tmctl manifest` · `--ceiling-usd` в redrive · счётчики на главу · `draftOnly` · ленивый провайдер · `BankStopVariant` · асимметрия таблиц · length-prefix ключа id). (д) **`heading` манифеста = ВРЕМЕННЫЙ рендер движка (решение владельца 09.08)**: противоречие с закрытым К-3 признано, настоящие заголовки строка 160 (titleRaw, Этап 0 структуры глав). (е) **Форма артефактов для потребителей**: `unit.id = <chapterID>:<cutTag>:<firstChunkIdx>`, манифест `tm-manifest-v2` платформе читать как новую форму (пинг в зонный журнал). (ж) `.gitignore` дополнен паттернами сайдкаров.
**3. Бэклог.** Строки 99·100·101·125·145 ЗАКРЫТЫ (удалены из таблицы). Новые: **163** версии модулей x/text|x/net меняют нарезку, не двигая ни ключ/снапшот/чекпойнты (класс всей чекпойнт-плоскости, унаследован манифестом); **164** rebill-проекция `status` с nil baseMemory может завышать `RebillUSD` против translate (преexisting, консервативная сторона). NOTE без строк: провести `--ceiling-usd` в `status` по желанию платформы (в пинге зоны); fsync каталога; U+001F закрыт V2-1. Строки 160162 (структура глав по research/27) заведены до лендинга тем же днём.
**4. research/27 «Определение глав» принят ФАКТУРОЙ** (веб-ресёрч · панель двух моделей · карта по коду · жизненный цикл дерева §3а · развилка парсинг-стадии закрыта словом владельца: оригинальные названия, платный перевод со старта прогона; мини-сессия названий §5а редакторский слот · инъекция банка · двухфазность вокруг подписи). **Дизайн стройки НЕ ратифицирован** отдельное решение при постановке строк 160162 в очередь.
**5. Очередь дальше:** приёмка платформы-раннера (сессия жива) · лендинг эксп-22 (8 CONFIRM/DENY владельца) · промт эмиттера (103 + деньги шва) эмиттер-сессии ПЕРЕД стартом прочесть PD-95/105/79/99/107/60/61 и D39.106 (09.08.2026, оркестратор 15).
## D39.123 — ПАК ПЛАТФОРМЫ P4 «РАННЕР» ПРИНЯТ И ЗАЛЕНДЕН (`d29e30c`); ратификации приёмки вкл. поправку формулы потолка (PD-158); строки 138·139 закрыты (09.08). ✅
**1. Приёмка (оркестратор №15, три раунда, 13 агентов).** (а) 7-агентный воркфлоу: слепой дифф · опровергатель-Opus (D39.120) · пере-ран батареи · 10 посадок (8 CAUGHT) · контракт-сверка 47 wire-проверок · охотник-деньги · охотник-systemd с РЕАЛЬНЫМ tmctl из HEAD (argv/поля status/exit-контракт/маркер совпали; четыре systemd-клейма пере-мерены). Пять MAJOR: **F1 — аргумент `--ceiling-usd` = чистый прирост против кумулятивной семантики движка** (двустороннее исполнение; сквозная проба сессии прошла на фейке без кумулятива сессия строила параллельно лендингу 145 и честно это записала) · **F2 — PD-129 закрыт ложным клеймом**, дедлок booksrun_attempts 258/300 через реальные API + транзиентный 40P01 карантинил проекцию навсегда · F3/F4 два незапиненных денежных свойства (мутации пережили полную батарею) · **F5 — settle по устаревшему снапшоту свипа возвращал холд целиком потратившему прогону** (исполнением). (б) Дофикс F1F8 + селф-ревью сессии нашло **PD-159** (отложенный расчёт прогона N оплачивал работу N+1, и N+1 платил снова $2.10 за прогон ценой $0.10; закрыт `SpendBound` = min базовых линий последующих попыток; воспроизведён приёмкой на до-фиксном дереве, 4 края границы точны). Ре-чек дельты нашёл V2-1 (классификация транзиентности неполна: 57P0x/08/net reset карантинили навсегда) и V2-2 (ретрай спавна передавал потолок от сдвинутого счётчика PD-161 наполовину). (в) V2 исполнен; финальный ре-чек: 5/5 пере-мутаций убиты поимённо, правка комментов миграций 00009/00011 правомерна (тела SQL байт-равны, обе рождены паком, причина в шапке sha256). Итог: тестов **105→261** (+156/0), батарея EXIT=0 с живым PG 18.4 под -race, скипов 0, регистр 171 строка (открыт 1 major PD-113). Сессия поймала и мою ошибку: PD-167 = коммент 00009, не 00011.
**2. Ратификации приёмки.** (а) **Privilege-модель: linger-пользователь, не polkit** по свойству (polkit авторизует глагол; транзиентный системный юнит без `User=` идёт от root; до v257 в запросе нет имени юнита), разбор STACK_DECISIONS §15; уточнение верификатора (шаблонный системный юнит с фикс-`User=` не рассматривался) приложено, выбора не меняет. (б) **ПОПРАВКА к D39.122(в)/пингу: формула аргумента потолка = `committed + прирост×ставка`, БЕЗ reserved (PD-158)** `store.Open` движка зануляет утёкший reserved до первой судимой резервации, read-only `status` этого не делает reserved из status всегда leftover; исполнение обеих формул против гейта: ратифицированная переплачивала запасом ровно на leftover сверх холда, консервативная точна и не недодаёт (flock исключает второго писателя). Формула моего пинга в зонном журнале была неверна в этом нюансе прав оказался «громкий» отказ зоны исполнять её молча. (в) **PD-105-реализация: карантин ПРОЕКЦИИ (попытки), не прогона** уточнение D39.119; деньги прогона сеттлятся ремонт-каналом. (г) **Ставка $0.03/глава конфиг-константой платформы** (провенанс exp08 v2 $0.0219 D30.4 +1525% вверх; сверен). (д) Формы: MaxAttempts:1 · холд+прогон+попытка+очередь в одной транзакции · ExecStopPost-маркер вместо D-Bus · ceiling-шаблон из конфига. (е) **Решения по вопросам зоны (владелец делегировал 09.08)**: `default_chapters` = верх шкалы ОСТАЁТСЯ (дробный дефолт непонятен; компромисс «весь баланс под одну книгу» принят осознанно) · **503 внесён в контракт** (0.2.00.2.1, зеркало фронта синхронно; PD-112 закрыт ратификацией) · PD-114: env-only остаётся, строка переформулирована в «печать эффективной конфигурации на старте» · PD-115: направление «внешний версионированный эталон на каждую ось» ратифицировано. (ж) PD-113 остаётся ЕДИНСТВЕННЫМ открытым major до эмиттера; после PD-158 его цена выросла консервативный потолок останавливает ровно на исчерпании холда, и «деньги кончились» неотличимо от «инфраструктура упала».
**3. Бэклог.** Строки 138·139 ЗАКРЫТЫ (реконсилятор со свипом+бутом построен; пиннинг бинаря исполняется и резюмом PD-143/134 закрыты с пинами). Новые строки движку: **165** различимые exit-коды tmctl для потолочной остановки и graceful-stop (сегодня оба = 1: платформа отдаёт «failed» на штатный стоп и на исчерпание потолка; вскрыто реальным tmctl фейк пробы умирал ОТ сигнала; приоритет поднят PD-158) · **166** движковая поверхность оценки $/глава (П-10 зоны; ставка-константа временная мера беты). `.gitignore` += `.check.log`; `counts.py` научен статусу `open (…)` (аннотированные строки регистра считались «иное»).
**4. Очередь дальше:** лендинг эксп-22 (8 CONFIRM/DENY владельца; у полигона в дереве уже виден незаявленный эксп-23 editor_tier при лендинге спросить) · промт эмиттера (103 + деньги шва; читать PD-95/105/79/99/107/60/61 + D39.106 + новые 165) · следующий платформенный промт по слову владельца (кандидаты: стоп/резюм-ручки + эскроу 136) (09.08.2026, оркестратор 15).
## D39.124 — ЗАКРЫТИЕ СЕССИИ №15, передача №16; докс-диета: хроники в архив-слайсы, CURRENT-STATE и зонный журнал платформы подрезаны (09.08). ✅
**1. Итог №15 одной строкой:** семь приёмок эры закрыты (D39.109123, лента в CURRENT-STATE); последняя платформа-раннер P4 (`d29e30c`, D39.123). Все реестры/финдингс-гейты закрыты, `counts --check` зелёный, чужие живые зоны (полигон эксп-22/23, правка владельца в промте оркестратора) не тронуты кроме санкционированного: правка владельца по D39.120 (FableOpus как «другая модель семейства») причёсана и залендена этим же коммитом.
**2. Докс-диета (заказ владельца 09.08: stale-вес мешает моделям читать).** Перемещено ДОСЛОВНО, без переписывания: (а) зонный журнал платформы 1856→~630 строк эры P0P3 (сессии + ратификации P1/P2/P3, вопросы P0/P1) `platform/docs/archive/platform-PROGRESS-P0-P3.md`; «Текущее состояние» переписано на живые факты; пинги оркестратора (формы артефактов движка) оставлены живыми в хвосте; (б) `docs/PROGRESS.md`: хроника 11–№13 (D39.91105) + снимок шести бюллетеней шапки эры 15 `docs/archive/PROGRESS-2026-08-02-04.md`; шапка CURRENT-STATE пересобрана (лента · живое · открыто-на-владельце · указатели; служебные буллеты курс/горизонт/стек/счёт сохранены) (лента закрытого · живое · открыто-на-владельце · указатели); (в) `docs/README.md`: строка «активные промты» сведена к действительно активным, отработанные общим указателем на архив. Правило прежнее: архив = дословный перенос с баннером, решения живут в D-логе.
**3. Хендофф №16** *(очередь ДОПОЛНЕНА D39.125 п.4: докс-пак 167 — первой задачей)*. Счётчик в `ORCHESTRATOR_SESSION_PROMPT.md` бампнут (№15 закрыт после этой ноты). Очередь CURRENT-STATE п. «ЖИВОЕ»: лендинг эксп-22 (+вопрос про эксп-23) · промт эмиттера (входное чтение п.4 D39.123) · платформенный промт по слову. Норма-добавка в промт оркестратора: хендофф-артефакты другим сессиям только durable абсолютные пути (`~/tm-handoff/`, `~/tm-backups/`), не scratchpad. Незакоммиченного за 15 не осталось; в дереве только живой полигон (09.08.2026, оркестратор 15).
## D39.125 — ДОКС-ДИЕТА ПО АУДИТУ: D-лог слайсирован (66%), PROGRESS 42%, факты-против-кода исправлены; нормы формы доков; сессия №15 закрыта передачей №16 (09.08). ✅
**1. Аудит (заказ владельца 09.08, метод — его же).** Инвентарь ОБОИХ файлов целиком отдельным Opus-агентом + 4 холодных Opus-читателя с поисковыми заданиями (главы · деньги · эмиттер · модели) + верификатор жалоб: **61 VALID / 9 PARTIAL / 1 INVALID**; ответы читателей без фактических ошибок но ценой двойных чтений и слепых грепов. Worksheet с ревью-шапкой: `archive/reports/DOC_AUDIT_INVENTORY_2026-08-09.md`. Диагноз: оба замысла выродились в хронику приёмок; событие жило в 34 носителях; дублирование дало три ФАКТИЧЕСКИХ расхождения (каждое ловила приёмка, ни одно процесс); карта D-лога покрывала 14% веса.
**2. Исполнено этой нотой.** (а) **Слайсинг D-лога**: тела закрытых эр 5 слайсов `archive/architecture/05-decisions-{D1-D38, D39-arch-reset, D39-20-58, D39-59-90, D39-91-105}.md` ДОСЛОВНО (сверка разбиения побайтным ассертом); телом в живом остались карта+эрраты, гейт-ноты D22·D25·D29·D30, несущие D39.25·30·33·42·47·58·62·63·64·69·70·81·84·85·93·99·100·102·104 и вся голова D39.106+; живой файл 961323 КБ. (б) **PROGRESS 215→131 КБ**: пинги закрытых паков и блоки закрытых экспов `archive/PROGRESS-2026-08-04-09.md`; мёртвые секции Память/Голос/Ридер-IDE закрыты указателем (синк CLAUDE.md); «Свежее состояние бэкенда» указатель на CURRENT-STATE (D39.80). (в) **Факты-против-кода**: эррата D39.111 (баланс-минус-холды superseded D39.115) в шапку; research/27+строка 160 subtitle ПОНИЖАЕТСЯ в тело, не выбрасывается. (г) Глоссарий: легенда неймспейсов (PD/П/Ф/В/К), «глава», денежный словарь, лексикон экспов. (д) README: правило чтения со слайсами, экспы 21 закрыт / 22-23 живые.
**3. Нормы формы (направление).** D-нота = РЕШЕНИЯ (что+почему одной фразой+указатель на нарратив); нарратив приёмки живёт ТОЛЬКО в ревью-шапке отчёта, прочие носители указатели. Эррата ОДНОЙ формой: навигационная в шапке D-лога (правка тел задним числом против D23.3). Слайсы только дословный перенос. Бэклог-строка: «диспозиция сверху, археология вниз»; ячейка >800 байт — кандидат на выселение в носитель. Статус-строка под заголовком каждого отчёта эксперимента (ПРИНЯТ Dxx / не ратифицирован). Остальной объём аудита — **строка 167** (карта→реестр всех нот · разгрузка жирных строк · 15-money-path · нормативный док эмиттера СО строкой 103 · STACK.md · DEFECT_REGISTER-форма П-строкой).
**4. Хендофф №16.** Очередь: докс-пак 167 ПЕРВОЙ задачей (worksheet готов) · лендинг эксп-22 (+вопрос про эксп-23) · промт эмиттера (входное чтение — D39.123 п.4 + нормативный док шва из 167) · платформенный промт по слову. Урок сессии — в промт оркестратора: двухфайловая правка одним скриптом БЕЗ транзакционной проверки потеряла блок (восстановлен из git за минуту; правки читающих>1 файла — сначала все чтения, потом все записи, затем сверка). Незакоммиченного за №15 нет; в дереве — живой полигон (09.08.2026, оркестратор №15). ✅
## D39.126 — ДОКС-ПАК СТРОКИ 167 ИСПОЛНЕН: реестр всех нот + линтер формы + разгрузка бэклога + топикальные входы (деньги · эмиттер · стек); строка 167 пере-скоуплена в остаток (09.08). ✅
**1. Исполнено** (состав заказа — worksheet `../archive/reports/DOC_AUDIT_INVENTORY_2026-08-09.md`; механика — дифф лендинга, здесь не пересказывается): (а) **реестр всех нот** — [`05-decisions-index.md`](05-decisions-index.md) (№·дата·суть·статус·тело·темы; извлечение 6+6 агентов воркфлоу, полнота против заголовков шести файлов сверена скриптом, единственная находка верификатора — титул D39.64 — вправлена); прозаическая карта шапки (17-КБ строка, покрытие 14% веса) заменена указателем на реестр, вводный текст Фазы 1 перенесён ДОСЛОВНО в слайс D1-D38; (б) **counts.py**: `--check` += полнота реестра (нота без строки реестра = расхождение), новый `--lint` = file:line-якоря живых доков (файл существует · строка ≤ длины файла; обзоры чужого кода research/21/26 вне линта); линт доведён до нуля — 8 путей research/17 на заархивированные файлы поправлены; (в) **разгрузка топ-10 жирных строк бэклога** (46·108·126·121·105·106·44·122·109·13б): тела ячеек ДОСЛОВНО → `13-tech-debt-anchors.md` §Б-*, в таблице — диспозиция+указатель («диспозиция сверху, археология вниз», D39.125 п.3); PROGRESS 24.5 КБ; (г) **топикальные входы**: [`15-money-path.md`](15-money-path.md) (деньги от гранта до settle; якоря сверены кодом) · [`16-events-emitter.md`](16-events-emitter.md) (сборка-норматив эмиттера, обязательное пре-чтение сессии строки 103; разрешённое расхождение «карантин прогона → карантин ПРОЕКЦИИ» показано, побеждает D39.123 п.2в) · [`../STACK.md`](../STACK.md) (роль→модель→конфиг→квирки); (д) **К-статусы компаньона контракта** сведены: шапка `:14` противоречила блоку пост-ратификации и таблице §4 — К-1/К-3/К-5/К-8 аннотированы ЗАКРЫТЫМИ (D39.100), К-13 заведён строкой таблицы (его там не было вовсе); (е) шапка 09-target дотянута до пост-D39.125 · product-requirements освежён (ПТ-9/19/20/25/35) · CURRENT-STATE сжат (лента-дубль и рукописный скоро-список сняты, курс/горизонт/стек — короче с указателями) · форма эрраты впредь — ТОЛЬКО навигационная в шапке (три прижизненных правки-на-месте поименованы там же).
**2. Находки пака, получившие носителей:** (а) ⚠ **ВЕСЬ банковый контур (банкнота+терминолог+классификатор) жив только ран-локальным конфигом книги** — шире заявленного строкой 140 («банкнота»); сверено грепом shipping-c1 (`gates.terminology`/`gates.banknote` = 0 вхождений), дописано в строку 140 и STACK.md; (б) эскалация в shipping мертва `budget_usd: 0` — STACK.md §примечания; (в) шапка-таблица эндпоинтов quirks датирована 04.07 и отстала — полигону при лендинге эксп-22 (вместе со статус-баннерами экспов); (г) кросс-ссылка 160↔Ф-30/В-4 поставлена (строка 160 + пинг в журнал фронта); пинг платформе о форме DEFECT_REGISTER секциями отправлен (П-строку заводит зона).
**3. Строка 167 пере-скоуплена в остаток:** статус-баннеры экспов + шапка эндпоинтов quirks (полигон, при лендинге эксп-22) · DEFECT_REGISTER секциями (зона платформы, пинг отправлен). Счёт очереди не меняется (09.08.2026, оркестратор №16). ✅
## D39.127 — ПРИЁМКА ФРОНТА S3.6 ПРИНЯТА И ЗАЛЕНДЕНА (`57e6bd1`); промт S3.7 выдан; Ф-47 ратифицирован (`sense` обязателен); строка 169 — экспорт банка (10.08). ✅
**1. Приёмка (оркестратор №16; воркфлоу 12 агентов: 6 линз + скептики-верификаторы, author≠reviewer).** Гейты пере-прогнаны ИСПОЛНЕНИЕМ: `check:full` EXIT=0 · vitest 160 · `shot` ×3 · сценарии зелёные; десять ключевых клеймов записи S3.6 подтверждены кодом. **12 находок CONFIRMED (1 high: замер ширин таблицы банка молча проваливается в скрытой keep-alive вкладке и не повторяется при показе — `frontend/src/ui/Table.tsx:232`), 24 минорных, 1 опровергнута** — все переданы промтом S3.7 §8. Нарратив и поправки к записи S3.6 (ложный клейм §12 о механизме сторожа спойлера · число-дрейф §7§14 · обратный порядок разделов 1215) — приёмочная запись в зонном журнале фронта, здесь не пересказываются. Референс fleet_2.png докинут владельцем при приёмке, якоря палитры подтверждены пиксельной пробой (доминанта #181818 · #292929 · #184176 дословно).
**2. Ратификации.** (а) **Ф-47: `BankTerm.sense` — обязательное поле, пустая строка = «различителя нет»** (спека объявляет `sense` частью ключа уникальности `(book, src, sense, since, until)`, держа его вне `required` — противоречие внутри одного файла); исполняет S3.7 в зонной копии (0.2.1→0.2.2), канон `14-api-contract/` — диффом при лендинге S3.7. (б) Черновик ДОБАВОЧНЫХ полей `BankTerm` (note/gender/contexts/variants/…) НЕ ратифицирован — ждёт слова владельца по границе ПТ-33 (contexts = спойлер по построению; variants/confidence раскрывают конвейер). (в) Гейт S4 (D39.119 п.4) снят этой приёмкой; очередь фронта: S3.7 → приёмка → S4. (г) **Владелец при ревью выданного промта поймал ПРОПУСК приёмки: Ф-35 (интерфейс без хардкода русского) в промт не попала** — оркестратор собрал состав пака из бэклога зоны и долгов, записанных самой сессией, не пройдя лист владельца (START_PROMT) независимым свипом; промт дополнен задачей 9 (словарь строк + линт-гейт против кириллических литералов + хранилище выбора; переводы и список языков НЕ выдумываются). Свип вглубь показал: требование отсутствовало и в реестре продукта — заведено строкой **ПТ-36**. Урок в память оркестратора: состав пака сверять со ВСЕМИ источниками требований, не только с трекером зоны.
**3. Бэклог.** Новая строка **169** — экспорт банка для чтения фронтом (Ф-43: канала под `GET /books/{id}/bank` нет вообще; банк в приватном SQLite, платформе читать запрещено D39.85): движковый артефакт экспорта + платформенная проекция, гейт подписного экрана S5.
**4. Хвосты чужих зон, НЕ тронуты (передано полигонному лендингу):** застейдженный `docs/README.md` линкует `POLYGON_EXP2223_DOVODKA_SESSION_PROMPT.md`, а файл в индексе — `POLYGON_EXP2223_REDO_SESSION_PROMPT.md` (битая ссылка после коммита); тот же указатель в полигонной части CURRENT-STATE; строка «активные промты» README отстаёт по фронту (S3.5→S3.7) — чинится тем же касанием (10.08.2026, оркестратор №16). ✅
## D39.128 — ПОЛНОЕ ПЕРЕ-ЧТЕНИЕ КОРПУСА ПО ЗАКАЗУ ВЛАДЕЛЬЦА; выданы промты: бэкенд-эмиттер (103+135+165, закрывает PD-113) и платформа P5 (П-9+PD-140+П-11) (10.08). ✅
**1. Чтение.** По заказу владельца 10.08 («изучи вопрос досконально, перепрочитай документацию, не грепами») прочитаны ЦЕЛИКОМ: живой D-лог (все тела, 1469) · `docs/PROGRESS.md` · `platform/docs/platform-PROGRESS.md` · `frontend/docs/frontend-PROGRESS.md` · `16-events-emitter.md` · `15-money-path.md` · `research/23` (через баннер) · `research/25`. Противоречий, меняющих план паков, не найдено; одно поверхностное расхождение передано сессии задачей (граница гейта потолка: `15-money-path.md` §2 пп.12 расходятся на поверхности — выяснить по коду, строка 135).
**2. Промты (запуск обоих — по слову владельца; параллельность легальна, зоны не пересекаются; фронт S3.7 живёт в `frontend/` параллельно).** (а) **Бэкенд-эмиттер** `docs/BACKEND_EMITTER_SESSION_PROMPT.md`: строка 103 (журнал `events.jsonl` по форме D39.106; словарь — ответ ДИФФОМ на предложение платформы `events.go`; сквозная проба своим журналом через настоящий декодер платформы в копии зоны) + 135 (гейт потолка пер-вызов) + 165 (различимые exit-коды — PD-113) + 102 опционально; $0; дизайн-развилки нормдока §5 отданы сессии с записью решений; голден/снапшот-нейтральность — обязательное доказательство. (б) **Платформа P5** `platform/docs/PLATFORM_P5_SESSION_PROMPT.md`: П-9 `POST /books` (+PD-72; ⚠ развилка «кто пишет `book.yaml` при интейке» ГЕЙЧЕНА ратификацией — вопрос в зонный журнал до стройки той половины) + стоп/резюм PD-140 (кандидат-дизайн: намерение стопа своей стороной до SIGTERM — дискриминатор против PD-152) + наблюдаемость П-11 + печать конфигурации PD-114 + DEFECT_REGISTER секциями (остаток 167).
**3. Хвост чужого дерева (повтор D39.127 п.4):** строка «активные промты» `docs/README.md` отстаёт (S3.5→S3.7, эмиттер/P5 не назван) и несёт чужой застейдженный полигонный hunk — актуализирует полигонный лендинг (10.08.2026, оркестратор №16). ✅
## D39.129 — ПРИЁМКА ФРОНТА S3.7 ПРИНЯТА И ЗАЛЕНДЕНА (`3e465bd`); канон контракта — 0.2.2; арбитраж 8.1: HIGH приёмки S3.6 снята как ложноположительная (10.08). ✅
**1. Приёмка (оркестратор №16; воркфлоу 11 агентов: 6 линз + скептики, отдельная арбитражная линза по спорной 8.1).** Гейты исполнением: `check:full` EXIT=0 · vitest **279** · 9 сценариев / 88 проверок. **12 находок CONFIRMED (1 high: запись ложно клеймит импорт `fill.ts` сценами — дубль подстановки в `scenes.mjs` жив и добавлен самой сессией), 0 опровергнуто, 16 minor**; блокеров лендинга нет. Носитель находок — блок «находки приёмки S3.7» следующего фронт-промта (S4); нарратив — приёмочная запись зонного журнала.
**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 ключей · гейт «текст местом» · стор языка · `<html lang>`), содержимое — только 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). ✅
## D39.131 — ПРИЁМКА БЭКЕНД-ПАКА «ЭМИТТЕР ШВА»: строки 103+135+165+102 закрыты, движковая половина PD-113/PD-196 построена (14.08). ✅
**1. Приёмка и лендинг (`9cfe080`, 31 файл, тестов 749→794).** Панель 5 верификаторов: сквозная проба ПЕРЕ-СНЯТА с нуля (свой tmctl из дерева пака → живой `ingest.Tail` платформы в копии зоны: hello adopted, чужой регион пропущен, повтор за курсором = 0, подделка payload = `ErrPayloadConflict`) · 5 СВОИХ мутаций вне списка сессии — все CAUGHT (суммарно 16/16) · деньги исполнением (settle+чекпойнт+`spend` — одна транзакция; репэйр-гейт «2.0×→0» воспроизведён; micro-USD int64 с ceil; события вне BriefHash/снапшота/RequestHash — голден бит-в-бит) · кросс-модельный опровергатель (D39.120 п.1а). Дофикс-раунд ДО лендинга: `once_key`-lookup предикатом `AND once_key <> ''` (частичный индекс заработал — EXPLAIN-пин над боевой константой, до фикса SCAN = O(units²) на пути волны) · `PendingEvents` батчем LIMIT 256 (аварийный путь из O(N²) в константу на событие) · `StreamVersion` 1.0→1.1 (добавлены `Ceiling.Scope` и outcome `ceiling|stopped` — минор по собственному правилу). Механика — журнал, секция «Бэкенд» §0§10.
**2. Ратификации.** (а) Полоса отказов **1019** с классами словарём (10 конфиг · 11 «прочли и нарезали — книги в байтах нет» · 12 лок · 19 безымянный) + exit **4** потолок / **5** graceful stop; сужение класса 11 ратифицировано (11 = вердикт, по которому интейк удаляет загрузку; всё конфиг-объяснимое = 10). (б) `eta_seconds` эмитится из темпа ТЕКУЩЕГО прогона (пропуск поля ОБНУЛЯЛ бы колонку читателя каждой строкой — `pgstore/sink.go:110-113`). (в) Отказ не пишет терминального `finished`. (г) Предложение платформе «фолд `unit_done` ПРИСВАИВАНИЕМ, не инкрементом» ратифицировано направлением (at-least-once требует идемпотентности у потребителя; заодно самолечит потерю недодрейненного хвоста при рестарте). (д) Эскалационный кап НЕ прицениваает хоп — ОСТАВЛЕН: перелёт ≤1 хопа escalate_to-модели, задокументирован и запинен; реопен — первый живой инцидент. (е) Посылка «гейт потолка на границе юнита» ОПРОВЕРГНУТА кодом: `Reserve` всегда был пер-вызовным; на границе юнита сидел репэйр-суб-бюджет — он и ужесточён (строка 135); `15-money-path.md` §2 поправлен.
**3. Находки приёмки → носители.** **ПЛАТФОРМЕННАЯ половина шва НЕ построена** — заленденный потребитель не читает новые сигналы: exit 4 превращается в `failed` (outcome() знает 0/2/3, `paused_reason` читается из stale-снапшота ДО drain), `refusedTheSource()` не смотрит на код вовсе (опечатка book.yaml по-прежнему ведёт к удалению загрузки), `Ceiling.Scope` дропается, dev-супервизор стейл ⇒ **П-15 зонного бэклога платформы** (пинг в их журнал; PD-113/PD-196 в их регистре остаются open до её стройки). **Деадлок деплоя v15**: `status` (read-only) отказывает старой схеме, а платформа зовёт его ПЕРЕД каждым спавном и settle ⇒ апгрейд бинаря запирает все старые книги — строка **174** (решить ДО деплоя нового бинаря: `tmctl migrate`-команда либо деплой-порядок). `backupStamp` секундной точности маскирует класс «занято» — строка **173**. Сериализацию писателей журнала держит только flock проекта (два конфига в одном каталоге = перемешанный поток) — наблюдение в теле, реопен при живом инциденте.
**4. Инцидент нормы: «author≠reviewer» сессия исполнила как стиль чтения** (свой контекст, без второго) и в первой редакции отчёта приписала себе разделение — сама вскрыла, независимые панели провела пост-фактум; корень («требование без механизма исполнения») канонизирован п.6а норм хендофф-промтов (`aef64f3`) ДО этой приёмки. Ультраревью владельца 14.08 шва не видело (облачный бандл собирает только tracked-файлы, пак был untracked) — «молчание ревью ≠ свидетельство корректности» (14.08.2026, оркестратор №16). ✅