# Журнал решений оркестратора — контракт D1–D39.123 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07) > **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Читая контракт целиком, держи под рукой, что чем перекрыто: > ⚠ **Навигация (актуализация 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) — упоминания двухсекционки/смягчения в телах читать через это. > ⚠ **Навигация (актуализация 01.08):** карта ниже детально покрывает D1–D39.28; решения D39.29+ живут хронологически в теле файла, **свежая голова — С ХВОСТА** (новые ноты аппендятся вниз). Сводка текущей головы и очередь — CURRENT-STATE в `../PROGRESS.md`. > - **Полностью superseded:** **D1 (моно-редактор) → D17 → D30.1 (редактор БИЛИНГВ)** · D9 (ja-приёмка) → D18 (蛊真人 zh→ru; ja — второй прогон) · D17 → D30.1 · скобка D19.4 «ключ без data-sharing» и D20.3 «чистый ключ = блокер пилота» → **D27** (единый ключ С data-sharing, отключение перед продом) · exp04-дефолт «editor grok-4.3» (D3) → D30.1 (grok reasoning-off из редакторских ролей СНЯТ — no-op; кандидат glm-5-билингв; gemini — премиум-эскалация только за санитайзером D30.3). · **Транспорт шва D39.85 §1 (stdout-пайп, платформа-родитель) → D39.106** (журнал в каталоге книги + systemd-юнит-на-прогон); остальное D39.85 в силе. > - **Частично амендировано:** D3 (канал B → D14.1/D19.1 + оговорки D22.5/D22.6; апекс-слаг `-preview` — D22.4; draft под вопросом exp13 — D30.6) · D6 («off/minimal для draft/edit» эродирован: draft thinking-ON принудительно, editor-off снят D30.1; живы per-роль принцип и D6.2-буфер) · D10 (+D24.2 alias-слепое пятно, истинная консистентность ≈99.5%) · D11-числа → exp08 → **D30.4** (флип D1 = +15–25%, ~$0.85/ранобэ; «$1.5–2» = неподписанная опция Б) · D12 (+D24.3 флоры max_tokens; +D29.1в rollup — амендмент вердикт-правила) · D13.1-арм из решающего → ПОДТВЕРЖДАЮЩИЙ (D30.1); +D25.3 prefix-анализ судьи · D14.2 закрыт D19.1/D22.4; D14.4 закрыт D22.1 · D15.3 исполнен; спека D15.2: v2→v3→v3.1 (D22.2), реализация = текущий пакет (D30.9) · D24.4 +D28.1 (precision/recall-трейдофф; hard-gate требует пере-замера) · порядок D24.5 отложен D26.1 (этап B — после читаемых 25 глав). > - **Живое ядро без изменений:** D2 (+новый гейт-класс D30.3), D4, D5, D7, D8, D10-механизм, D12-таксономия отказов, D16, D18, D19.1–19.2, D21 (Ф2-механизмы voice/address/reveal), D22.5–22.7, D23 (golden = инвариант №8), D24–D39.28 — действующая голова контракта (**D39.28 = ПАК-17 ЗАКРЫТ ЦЕЛИКОМ: третье действие `allow` (assert-only) построено ⇒ ратифицированная ПАРА `violence`/`sexually-explicit` выразима ДАННЫМИ; тройка `route|allow|terminal` несёт ОДИН инвариант и различается остальным; `accepts_labels` пусты = верное fail-closed до ФАКТОВ ToS по первоисточникам (пер-лейблу, зона полигона)**; **D39.27 = пак-17 фаза 2 ПРИНЯТ и залендён [механизм построен по всем 15 «ровно так»; golden байт-в-байт, парити EXACT, `-race`, ценз 433→451 диффом имён; мои три мутации пойманы именованными тестами]; форма добора B = гейт над резолвнутой моделью НЕЗАВИСИМО от `off` + generic-предупреждение `sourceEchoExposure`; **вокабуляр владельца = ПАРА `violence`/`sexually-explicit`** (сохраняет D14 п.1 и dspro-редактора) ⇒ обязательная дельта: третье значение `action` assert-only; Q2 редактор ОТЛОЖЕН с записью (связывает только explicit-книги); новая петля: лейбл НЕ доезжает до промпта — промпт-слой решается отдельно**; **D39.26 = дизайн пака-17 «generic content-labels × provider-capabilities» ратифицирован В РЕДАКЦИИ §14 отчёта [лейблы НЕ входят ни в один хеш — назначенный слой D20.2-Q3 = резолвнутая модель стадии пер-стадийно/пер-волново · резолв ДО валидации, «достижимое» лейбл-зависимо · один хоп `chain[0]`, `len>1` громко, `budget_usd>0` обязателен · Q1 = книга по аргументу ГАРАНТИИ · вокабуляр `content_labels`(книга)/`accepts_labels`(модель, `*[]string` только сужает) · `permissive`+`Stage.Channel`+enum+блок D4.1 отставляются ОДНИМ диффом · `failover.go` удаляется · отказы за `forWrite`, резолв всегда]; добор оркестратора: единый лейбл «adult» схлопывает violence-развязку D14 п.1 → вокабуляр владельцу · `reasoning:"off"` — тихий выход из аддитивного И эхо-гейта на xai (обобщение D19.1 п.2 в данные не доехало) · рейт-гард деградирует молча; НА ВЛАДЕЛЬЦЕ: вокабуляр лейблов + Q2 редактор; D22.7 паком НЕ снимается**; **D39.25 = в движке НЕТ понятия 18+ [generic content-labels × provider-capabilities, refusal причино-агностичен, «adult» = значение данных; §0 п.6]**; **D39.24 = дизайн пака-16 diff-редактора ратифицирован с перестановкой: $0-части (позиционная детекция · read-only скан · фиксы ru_hours_re/半个时辰) строим, платная машинерия §D3–D5+§15.2 под enabled:false, включение = решение владельца по замеру остатка пост-профилактики; поправки §15.2 (позитивный ре-гейт+анти-удаление · счётчики из role='repair' без миграции · отбрасывание пересечений · reserve-деградация · classify-гард); ru-target-долг = ограничение**; **D39.23 = пак-15 «структура+форма» ратифицирован [хойст text/value-базы → сплит miner/checks/membank/chunk по ИЗМЕРЕННОЙ связности (прил. A пака-14 с поправкой ревью-шапки) · форм-фиксы Export/RequestHash/resolveChunkState · конфиг-слой пары (пар-калибровки из ран-конфигов, промпт-резолв конвенцией) · overlay-хвосты, unionStringMap-коллизия = громкая ошибка; §1 12-go-style амендирован; байт-точность+парити EXACT; crush-масштаб НЕ эмулируем]**; **D39.22 = эксп пере-прогона ЗАКРЫТ решением владельца; итерация №2 ОТЛОЖЕНА [её вопросы — довесок следующего платного прогона]; редактор = deepseek-v4-pro ИНТЕРИМ [судья №1 · проза/глоссарий · дефекты чинибельны · ×2 дешевле], glm-резерв, дефолт-конфиг при лендинге пака-13; курс = разработка бэкенда [масштаб книги · канал B · Ф2-механизмы · ja→ru §B5]**; **D39.21 = стайл-решения владельца: меры → единицы языка читателя [时辰=2ч] · generic-«гу» СРЕДНИЙ род, именные — по-термово из банка · стихи СМЫСЛОМ · 资质=«талант»; + директива аудита полноты банк-инъекции**; **D39.20 = ПЕРЕ-ПРОГОН исполнен+прочитан [операционка вся живьём: $0-резюм драфта ×3 арма · echo 0 · $6.63<$15; судья dspro 0.679>glm 0.589>>mistral 0.232 при floor-шуме 0; слепые чтения ×2: сводные выборы разошлись, чисто-художественные ИДЕНТИЧНЫ = mistral 4/5 → анти-корреляция гладкость↔верность доказана трижды]; планка ≤2 НЕ пройдена → пилот не открыт; mistral ИСКЛЮЧЁН как несущий редактор [критические смысловые вне гейтов; голос = north-star промпта]; dspro-vs-glm НЕ ратифицирован [зазор ~шум] → итерация №2 после механизации [драфт $0]; дефект-классы→механика: 时辰-юнит-чекер · число-масштабы · broken-word/latin · заголовок-шаблон · банк-дельта 元/资质/赤城 · mined_delta-крэш-фикс [пак-13]; решения владельца: род «гу»/меры/стихи/春秋蝉; полигон: авто-QA ключевать слепыми метками**; **D39.19 = пере-прогон-преп ЗАЛЕНДЕН [6 фиксов: R1-FL-A CLI-exit-3 · R1-FL-B reject-set-livelock-закрыт · R1-FL-C x/text-в-Ш-2 · echo-сплит · read-model-naming · ниты]; golden version-only [masked=0]; парити EXACT; §8-манифест полон; gender-signoff закрыт; бэкенд готов к пере-прогону**; **D39.18 = blast-radius edit-единицы: c-lite (редактура чистого остатка вместо бланка всей единицы; вариант владельца (c)+fallback (b)) залендён `488c8d4`, no-flag путь байт-идентичен; + 4 read-модель-фикса пост-лендинг-ревью [quality-echo/status-first-flagged/export-pairs/detail], открытое решение владельцу = echo-метрика семантика; R1-FL-A/B/C deferred в пере-прогон-преп**; **D39.17-errata = runWave parent-cancellation баг [мой рубеж-2 пропустил, 2-я сессия поймала], фикс `5fc4860`**; **D39.17 = R1 драйвер-свитч ЗАЛЕНДЕН [волновой исполнитель черновик∥→банк-майнинг-стоп→редактура∥; редактор не пере-рендерит draft; Ш-1/Ш-2; golden-рерайт; read-модели per-unit]; полный рубеж-2 [5 линз вкл. синк-с-ресёрчем] = clean bill по несущим осям, 3 MINOR/NOTE-фикса (R1-FL-A CLI-exit-код · R1-FL-B mining-стоп-reject · R1-FL-C x/text-версия) в стенд-only mining-пути → пере-прогон-преп; ПАК-11 ЗАВЕРШЁН**; **D39.16 = арх-проход ЗАЛЕНДЕН: майнер-данные (百家姓/Палладий/частицы/суффиксы) вынесены в `internal/lang`+`configs/langpacks/` [граница компиль-enforced, байт-точно — парити EXACT, golden байт-идентичен]; FL-1/2/3+тест-путь; РАТИФИЦИРОВАНЫ 3 дивергенции: language.Tag ОТВЕРГНУТ [CLDR-инстабильность в вердиктах], DC-чекеры+снапшот-фолд DEFER [майнер offline/нейтральность]; общность структурно доказана; промт отработан→архив**; **D39.15 = директива владельца: изоляция языковых данных из `pipeline/` [движок общий · `internal/lang/`+`configs/langpacks/` данными-файлами · `x/text/language.Tag` вместо `isRuTarget` · снапшот-folded как промпты · алгоритмы не трогать]; архитектурный проход ПЕРЕД R1 [ре-секвенс]; поведенчески нейтрально zh→ru [golden байт-стабилен]; не минор-хант/не rewrite-ради-rewrite; промт `BACKEND_ARCH_CLEANUP_SESSION_PROMPT.md` 5-фазный [ресёрч→синтез→фикс-лист→исполнение→ревью]; ja→ru = тест общности §B5 позже**; **D39.14 = пак-11 continuation ПРИНЯТ и залендён [R2 майнер паритет-EXACT · R3 банкнота 12-точек · R4 DC-чекеры+export--pairs · R5 арм-конфиги · R1-аддитив; рубеж-2 D39.13-долга погашен: 3 MINOR/PARTIAL-находки [FL-1 bankTokenBudget-фолд · FL-2 banknote-телеметрия-резюм · FL-3 emission-top-N-кап], все латентны → R1-продолжение; R1 драйвер-свитч резидуал; clean bill по деньгам/wire/порту]**; **D39.13 = пак-11 Block A ПРИНЯТ и залендён [WS2 целиком (вкл. src→dst-блок редактора = закрытие D30.1) + WS1a/b/c-инфра + WS4-ядро; 2 девиации ратифицированы; резидуал R1–R5 в PACK11_REPORT; промт остаётся активным; рубеж-2 приёмки — долг]**; **D39.12 = план `architecture/11-implementation-plan.md` РАТИФИЦИРОВАН [три рубежа: ревью-2 F1–F11 → 7-агентный адверсариал → подтверждающий пас; пер-волновой снапшот + инвариант секвенирования = «переоплата ОДНА»; EditCeilingOut=3200; лемматизатор дефолт B; 4 гейтнутых арма]; бэкенд-пак ЕДИНОЙ сессией — `BACKEND_PLAN11_SESSION_PROMPT.md`**; **D39.11 = директива владельца: стройка ТОЛЬКО после дизайн-синтез сессии с верифицированными алгоритмами; хендофф №5**; **D39.10 = exp16: WHICH подтверждена [V-C recall 0.97, $0] / WHAT→банкнота+Палладий [canon-recovery <70%], 9B-споттер не нужен, Z1→облако, ре-аудит exp14b чист [errata не требуется]; исследовательская программа ЗАВЕРШЕНА → бэкенд-пак слоёв 1+4**; **D39.9 = Q4a: верность НЕ на translate-стадии [flash уже верен, pro ×3.67 не ратифицирован], смысл ломает glm-РЕДАКТОР [свап-арм приоритетен], DET-пол 0.261; exp14b-правила дефектны → $0-ре-аудит в exp16**; **D39.8 = слепое чтение: планка не пройдена никем, дефекты распределены [читатель подтвердил floor-null], битва качества → дефект-классы [时辰-юниты, числа, gender-enforce, стих, регистр]**; **D39.7 = exp15 залендён REV.2: «граница вредит» отозван [артефакт окна судьи], все когезия-эффекты под floor 0.126, «sequential нигде не лучше» LOO-stable [не ратифицированный зелёный свет], фертильность 1.20/0.39, $12.79/$15; гейт = слепое чтение владельца**; **D39.6 = research/20 банк-майнинг залендён [детектор-лестница V-A/B/C, алиас-ярусы, banknote-v1 с 12 гейт-точками, §B5 плагины P1–P6, §D-пре-рег]; полигон-стадия после exp15**; **D39.5 = пак-1.5+F1–F9 залендены [tmctl export с manifest/drift-гардами · fold-first санитайзер · bounded глосс · пример zh-ru]; экстракция полигона впредь через tmctl export**; **D39.4 = адверсариал-долг ПОГАШЕН [8 осей: 0 CRIT/1 HIGH/6 MED], пак-1.5 придержан под фикс-лист F1–F9 в §T4**; **D39.3 = пакет банк-майнинга W1.5 [диспозиция H15/V4-п4] ратифицирован, research/20-промт с HOLD до фриза exp15**; **D39.2 = трек-A пак-1 залендён `d3f6b34`: trust-gated suppressor [терм-дрейф закрыт в КОДЕ] + export-contract нормализация + pair-сеам + реестры + quality-report; адверсариал-долг за 529**; **D39.1 = research/19 залендён: конфликт exp14↔research/18 разрешён [эмиссия≠окно≠связность], Go-спека чанкера+когезии, волновая архитектура W0–W3 [вводная владельца: параллелизм], пре-рег эмпирики Q0–Q5; оркестратор-ревью снято владельцем**; **D39 = АРХ-РЕСЕТ: синк-аудит сломанного телефона [65 находок, 0 refuted, `08-sync-audit-ledger.md`] + целевая 7-слойная архитектура [`09-target-architecture.md`] + фазовый план [трек A build-now ∥ трек B ресёрч, пере-прогон после]; формализует фантомный «D35.7» как цель слоя 1; терм-дрейф код-корень жив [сид-воркэраунд]; редактор 4-мандата-full-regen = причина инверсий**; D35 = пивот качество-первым; D36 = приёмка research/18; D37 = приёмка exp14: претензия-1=промпт-рычаг; D38 = приёмка exp14b: «только gpt-5.4» ОПРОВЕРГНУТО [mistral/deepseek-pro чинят], фронтир в дефолт НЕ нужен, корень терм-дрейфа = статус-draft сида; **D38.1 = слепой h2h P1a↔F-disc залендён [ChatGPT «фронтир сильнее» / Claude «near-parity» расходятся, СХОДЯТСЯ: дефекты = инфра] → РАЗВОРОТ «мерить→строить», выдан BACKEND_INFRA_PACK; D38.2 = консолидация/док-гигиена: спент exp-скрипты в `eval/exp12|13|14|14b/`, статус-доки+.puml актуализированы; D38.3 = инфра-пак читаемости залендён (санитайзер-классы strip+export + число/omission-гард), верифицирован исполнением [build/vet/test зелёные, 3 span-дефекта запинены]; D38.4 = аудит полноты exp14/14b: чэнъюй-рычаг забыт near-term→дописан в дискурс-промпт; inversion-гард D37 §2г не строился (число/omission ≠ полярность)→editor-swap = защита от инверсий (приоритет↑); нарезка = re-run-арм; гард-тумблер вкл. при resnapshot; D38.5 = компоненты resnapshot залендены+верифицированы [reseed-сид eb409f2 · дискурс+чэнъюй editor v3 0ac5f7a с few_shot-тумблером] → следующий шаг единый resnapshot + пере-прогон**). Ответ на вопросы бэкенд-сессии (PROGRESS §«Вопросы от бэкенда», §«[НУЖНО РЕШЕНИЕ] перед Фазой 1» — с ревизии D31 в `archive/PROGRESS-2026-07-04-10.md`) и полигона (think-режим). Каждое решение прошло адверсариальную панель из 3 критиков (research / экономика / исполнимость в коде Фазы 0); ни одно не отклонено, все уточнены. Это **контракт Фазы 1** — бэкенд исполняет отсюда; при конфликте с буквой 01-decisions/02-mvp-plan — источник истины здесь (потом сольём в основные доки). Статусы: ✅ принято · ✅+ принято с уточнением панели. --- ## D12. Модель устойчивости к отказам (веха coverage-гейта, 04.07) — заземлена на durable-execution prior-art 4 вопроса бэкенда + большой вопрос владельца «падать ли / фолбечиться / как не терять книгу». Заземлено ресёрчем (Temporal / Step Functions / Airflow / River / Stripe idempotency / OpenRouter/LiteLLM fallback; проверено по первоисточникам). **4 вопроса — все A:** - **Q1 (сегментация): порт 1:1 наивного split.** `refusal_bench.py::split_sentences` = **источник истины** (он же приёмочный оракул); Go зеркалит бит-в-бит; любое изменение — Python-first, лок-степ. §3.7 «поглощение кавычек» → v1.1 (координированно). Иначе Go-гейт и Python-оракул разъедутся. - **Q2 (эскалация): минимальный single-hop.** НЕ противоречит D4: D4 запрещал массовый outage-своп, а это точечная эскалация ОДНОГО чанка на детерминированном контент-провале. Нужна сейчас (DeepSeek-эхо воспроизводим). Минимально: 1 хоп → флаг; полные цепочки — шаг 7. - **Q3 (детект): только excision_suspect (нижняя граница).** Верхняя аномалия-дописывание ложно флагает (ru-выход 1.4–1.9× исходника) — нужен entity-счёт+судья (Ф2); coverage_fail/D10 блокирован памятью v2. - **Q4 (активация): opt-in (`enabled:false`), тестами.** Боевой флип — после валидации precision владельцем на реальных чанках (порог N флагов — за владельцем); до починки диалоговой сегментации флип ложно флагал бы диалого-плотные главы. **[exp07, коммит 3911baf]: precision гейта = 0 ложных/57 на реальных чанках; вердикт главы — ≥2 флага→fail, 1→attention; `finish_reason=content_filter` не эмитит ни один из 5 провайдеров (ветка эмпирически мертва). Флип `enabled:true` всё ещё за подписью владельца.** **Таксономия отказа — ТРИ класса (не бинар «фолбэк vs пауза» — это мис-фрейминг):** | Класс | Триггер | Реакция | |---|---|---| | Транзиентный / бюджетный | 429/5xx/timeout; `finish=length`/пустой | same-model retry (ось `attempt`, бо́льший max_tokens); ретраятся только `{length, empty}` | | **Детерминированный контент-провал** | echo / cjk_artifact / excision / refusal — **HTTP 200!** детектит app-слой post-settle, НЕ транспорт | **single-hop escalation** на ДРУГУЮ модель (same-model retry бессмыслен); 1 хоп → флаг; отдельная ось модели в request_hash (не `attempt`); `escalation.budget_usd`; результат **ре-гейтится**; канал B изолирован ТИПОМ (permissive/nil-guard в failover.go), пишет новую TM-запись (model_id в ключе) | | Outage / системный | 503-storm, 429-исчерпание, terminal-4xx, ceiling — **не per-chunk** | circuit-breaker (Azure Closed/Open/Half-Open, ~30с health-окно) → **пауза джобы + resume** (НЕ mass-swap: D4, стиль поплывёт + TM-инвалидация); супервизор рестартит `tmctl` | **F3 фикс (оплаченный неидемпотентный вызов):** - Provider idempotency-key = **существующий `request_hash`**, заморожен на входе (константа через транспорт-ретраи и resume), в заголовке `Idempotency-Key` где поддержано. ⚠ **Матрица (проверено по первоисточникам): OpenAI поддерживает; DeepSeek / xAI / Gemini / Kimi — НЕТ.** Центральный стек (draft-DeepSeek, editor-grok, judge-Gemini) provider-dedup не имеет → **не архитектурить F3 вокруг него.** Capability-флаг `supports_idempotency_key` в models.yaml (в готовый capability-слой). - Для непокрытого стека — **at-most-once cap**: класс «billed-but-unconfirmed» (2xx с нечитаемым НЕусечённым телом / чистый timeout после отправки) получает бюджет **≤1 доп. вызова**, не `MaxAttempts−1` (Temporal «maxAttempts=1 для non-idempotent»). Восстанавливает приёмку «≤1 вызов». + **консервативный settle оценки (не Release)** на post-send-timeout, чтобы потолок не был слеп (расширить существующий `BilledDecodeError`-путь); ledger-состояние AMBIGUOUS-BILLED. Честная модель — **«at-most-once billed, replay бесплатен»**, не exactly-once (saga/exactly-once на оплаченный вызов не мапятся). **Consistency-aware fallback by stage:** draft-фолбэк свободно (editor ре-нормализует стиль — 2605.13368); **editor pinned per book** (на отказе editor — пауза / same-family, не чужая модель); model-per-chunk логировать для последующего uniformity-пасса. **Global call-budget guard:** суммарные попытки на чанк = `retries_on_primary + 1 fallback hop`, **НЕ сбрасывается на фолбэке** (иначе retry×fallback = 30+ оплаченных вызовов — LiteLLM #19985). **Прогресс — единственный реальный пробел (ответ на «подсвечивать прогресс»):** - `tmctl status --config book.yaml` — **READ-ONLY** проекция `chunk_status`+`jobs`+`spend`+`request_log` (Temporal query-handler аналог; 0 LLM, 0 replay); `--json` (стабильные disposition/flag_reason enum как контракт) для CI/IDE. `chunk_status` бэкенд УЖЕ построил — read-model есть; нет только команды и знаменателя. - **Book manifest на snapshot** (всего глав/чанков-на-главу) — иначе честный N/M невозможен. Вести **unit-счётом** (done/in-progress/flagged/skipped/pending), % только из N/M; **никакого синтетического time-бара** (fictional-bar анти-паттерн, Cloud Four). - Словарь статусов (Airflow/Step-Functions): flagged≠failed (`jobs.status.failed` = infra-only), skipped с upstream-reason; **всегда REASON** (GitLab «explain why skipped»). - **Паспорт качества главы** (JUnit `` + SonarQube gate): chunks total/ok/flagged/skipped, worst flag_reason, coverage-вердикт (pass|attention|fail по 500–2500-char порогам), $, версия — против «проклятия 300-й главы» (04-unhappy §10). - ETA от **сглаженного throughput** (EWMA α≈2/(n+1)), не present-state; unit-счёт ведущий, ETA вторично. Деньги в status: committed/reserved/ceiling%, F3-честный кумулятив, projected book cost = (cost/done-chunk)×remaining. Re-drivable флагнутые (Step Functions redrive), не трогать DispOK. **Не строить (cautions верификатора):** distributed-движок (Temporal/Step Functions инфра — мы single-node/один файл, брать паттерны не инфру и не их HA-числа); прозрачный cross-provider fallback главного пути (D4); детектор контент-провала в транспорте (обязан быть app-слой post-settle — транспорт видит 200); real-time SSE-прогресс (Ф3, IDE вне MVP); наивный параллелизм чанков (гонка `Runner.clients` + «коммит терминов только на границе джоб»). --- ## Вторая волна развязок Фазы 1 (04.07, вопросы бэкенда после survey) — D8–D11 Онбординг-поправки бэкенда **ратифицированы**: (1) дефолт-редактор grok-4.3 @ temp 0.4 thinking-OFF (не Kimi — «Kimi-editor 400» как повод для capability-слоя снят; живые 400 дают Gemini/gpt-5); (2) `deepseek-v4-pro` нигде не подтверждён → слаг канала A резолвить через `/models`, не хардкодить (deepseek-chat депрекейт **2026-07-24, ~3 недели** — миграция черновика срочная); (3) Gemini wire-слаг `gemini-3.1-pro-preview` (суффикс несущий, голый → 404); (4) models.yaml на диске отстаёт — бэкенд обновляет сам (его зона); (5) F4 (усечённый length течёт в edit как OK) чинить в A, F3 (retryable-but-paid переоплата) учесть явно. A/B/C-план бэкенда принят как есть. ### D8 (Q1) — memory-компонент snapshotID: **content-hash материализации** (не version-counter). ✅ Хэшировать детерминированно ORDER-BY-материализованное **полное состояние инъектируемой памяти на старте джобы** (approved-глоссарий + резюме + series-bible-lite — тот пул, из которого per-chunk селективная инъекция потом выбирает; сам per-chunk выбор детерминирован и уже покрыт request_hash через rendered messages). **Drift-proof — решающий довод:** version-counter (буква §3.2/D5.2) молча дрейфует, если забыли бампнуть, и переоткрывает ровно тот баг тихой переоплаты, который D5.2 закрывает. Content-hash забыть нельзя. Стоимость (хэш пула раз на джобу, не на чанк) — ничтожна, не горячий путь. Правит §3.2: memory-компонент снапшота = content-hash, не счётчик. ### D9 (Q2) — приёмочная книга Фазы 1 = **ja→ru ранобэ** (~150k токенов). ✅+ Причины: соответствует флагманскому «ранобэ»; COGS-запас (R5 ~$3.1 стандарт vs потолок); **ставит ruby/фуригану на критический путь импорта** — форсирует закрытие известной дыры (04-unhappy §4), иначе отложат и забудут. **Уточнение (границы ruby):** извлекать чтения фуриганы при первом появлении → **глоссарий-лок имени**, НЕ сохранять ruby в выходной вёрстке (это остаётся ограничением epub-v1, план:25). Хедж: если полное ruby-извлечение окажется тайм-синком, блокирующим веху — принять на ранобэ, где чтения имён капчатся из первого появления обычным путём, а полный ruby-лок — fast-follow внутри Фазы 1. CJK-echo (zh) тестируется CJK-гейтом отдельно (не требует zh-приёмочной книги). Все три пары строятся; коммерческая проверка пар — пилот Ф2.5. ### D10 (Q3) — знаменатель глоссарной консистентности = **ВСЕ approved-термины** (имена + выдуманные термины/титулы). ✅ Матчит букву R7 («гейт считает approved-термины») и — важнее — **бьёт по реальной жалобе №1 читателей**: коллапс терминосистемы рангов/титулов («Immortal, immortal or immortal», 04-unhappy §1) страшнее скачущих имён. Гейт параметризовать (знаменатель = вхождения src/алиасов, числитель = лемма dst по `decl`), **names-only — как под-метрика для диагностики**. Порог 98% — на детерминированном слое (pre-replace+инъекция+post-check) достижим (механизм не модель-зависим); если приёмка покажет систематическую недостижимость — ревизуем порог, НЕ знаменатель (не геймить метрику сужением). ### D11 (Q4) — премиум-микс: **конфиг-потолок, не гейт приёмки** ✅+ — но ОБА cost-числа устарели, не только премиум. budget_usd = R5-clamp; дефолты **под селективный apex (пересчёт ВЫПОЛНЕН — [exp08](../experiments/08-cost-model-v2.md)):** ранобэ/роман ~$2, вебновелла — потолок-на-главу/`apex_fraction`; полный apex вебновеллы (~$82) не дефолт. Приёмка держится на резюмируемости + гейтах + **точности телеметрии денег**, а не на конкретном премиум-числе (exp01 намерял ~$49/$26 на Sonnet-апексе — заменено exp08 на Gemini-апексе с reasoning-as-output). **Расширение за рамки вопроса бэкенда: порог стандарт-микса $0.6 ТОЖЕ устарел** — он считался с дешёвым редактором (GLM/DeepSeek), а дефолт-редактор теперь **grok-4.3 ($2.50/M output ≈ 10× дороже draft)**. Пересчёт ja→ru ранобэ: draft ~$0.065 + grok-editor ~$0.67 = **~$0.73 стандарт-микс** (выше $0.6). Экономика при этом здоровая (том <$1 против якоря $100 — маржа огромна), но **конкретные приёмочные числа ($0.6 стандарт, $5 премиум) оба устарели после смены редактора на grok**. → Приёмка Фазы 1 по стоимости = (а) escalation уважает конфигурируемый budget_usd (тест механизма); (б) телеметрия денег точна (ledger корректно биллит grok/gemini с их квирками — grok reasoning=0 при thinking-OFF через ЯВНЫЙ `reasoning_effort:none` — дефолт grok = low, gemini reasoning-as-output); мягкий sanity-check ~$0.69/ранобэ ([exp08](../experiments/08-cost-model-v2.md)), жёсткий гейт $0.6/$5 СНЯТ. Числа пересчитаны — exp08 (draft DeepSeek + editor grok + премиум Gemini). ### Ре-флаг (grok как центральная модель — усилилось с D8): гигиена аккаунтов xAI критична grok-4.3 теперь дефолт-редактор → **каждый чанк каждой книги идёт через xAI**. Значит: (1) дефолт-редактор продакшна — **чистый xAI-аккаунт БЕЗ data-sharing** (промо-$150-аккаунт с data-sharing — только eval/NSFW, реальные книги через него нельзя, research/08); (2) концентрация трёх ролей (редактор+канал B+судья 18+) на xAI — риск доступности (Р10 №6): провайдер лёг → пауза/resume (D4), премиум-редактор gemini как валидированная замена под рукой. --- ## D1. Редактор C1 — монолингвальный. ✅+ **Решение:** редактор Фазы 1 видит только черновик + одобренный глоссарий (dst-термины как target-констрейнты), **не** исходник. Убрать `{{text}}` из `prompts/editor.md`. **Обоснование:** издательская норма (редактор не знает язык оригинала — research/07); билингвальный редактор в zh→ru якорится к исходнику и плодит кальки (главная translationese-болезнь); монолингвальный редактор к тому же дешевле (исходник не сидит на входе каждого edit-вызова). **Уточнения панели (обязательны):** 1. **Честно: coverage-гейт НЕ контролирует верность.** Он ловит только omission/дописывание по длине; same-length mistranslation (свап рода, «кто кого», неверная полисемия) проходит насквозь. Значит в Фазе 1 верность после черновика **не контролирует ничто** до билингвального судьи Фазы 2. Это допустимо (Фаза 1 — инфраструктурная веха), но записать прямо: **приёмка Фазы 1 не содержит критерия верности** — не маскировать это coverage-гейтом. 2. Пилот Ф2.5: плечо C1 (draft→editor) меряется на win-rate **только вместе с живым билингвальным судьёй** — иначе C1 по собственному признанию полирует неверное в «гладко-неверное». 3. **Код:** убрать `{{text}}` меняет SHA256 шаблона → resnapshot-гейт сработает громко (хорошо), но `prompt_version: "v0-draft"` в `pipeline-c1.yaml` станет врать (тот же лейбл на двух SHA). **Поднять edit `prompt_version` при этой правке.** ## D2. Диспозиция плохого чанка — skip+flag+continue. ✅+ **Решение:** `finish=length` → ретрай с бо́льшим max_tokens до капа, потом флаг; hard refusal/`content_filter` → флаг+продолжить; пустой оплаченный → skip+flag (не падение прогона); soft refusal (blacklist) → флаг. Флагнутый чанк не коммитит мусор/пустоту в TM. **Уточнения панели (обязательны):** 1. **`attempt` этого НЕ несёт** (переоценка в моём ответе). В коде Фазы 0 нет ни цикла по чанкам (chapter=1/chunk=0 захардкожены, `runner.go:235`), ни хранилища флагов, ни статуса «skipped/flagged»; любой ненормальный путь сейчас = `SetJobStatus(failed)+return`. Механика skip+flag+continue — **net-new работа Фазы 1** (цикл + таблица флагов + колонка disposition, читаемая resume-путём). `attempt` — необходим, но не достаточен. 2. **Тегировать `flag_reason`.** `retry-flagged` переатакует **только** `length`/`empty` на той же модели; `content_filter`/refusal детерминирован per-модель/канал — повтор на том же SFW-канале снова откажет и снова спишет деньги. В Фазе 1 refusal-флаги просто **не переатаковать** (деньги на гарантированный отказ не жечь); маршрутизация в канал B/эскалацию — Фаза 2. 3. **Детектор вырождения перед удвоением max_tokens.** У дешёвого черновика `finish=length` чаще всего — repetition-loop; бо́льший max_tokens лишь оплачивает больше повтора (усугубляется неидемпотентными ретраями F3). Дешёвый n-gram-loop чек ПЕРЕД удвоением → при вырождении сразу флаг, без оплаты цикла. 4. **`content_filter` ненадёжен как ветка:** OpenAI-совместимый адаптер отдаёт `finish_reason` сырым (`httpllm.go`), пробрасывают ли его DeepSeek/GLM/Kimi — не проверено. Реальная страховка — **refusal-blacklist гейт**, а не ветка по finish_reason. Полигону: замерить, эмитят ли провайдеры `content_filter`. **[exp07: НЕ эмитит ни один из 5 — ветка эмпирически мертва, страховка = refusal-blacklist гейт.]** 5. **Edit `max_tokens` считать от длины ЧЕРНОВИКА, не исходника** (`runner.go:283-287` сейчас от source). Для монолингвального редактора (D1), чей вход/выход ≈ русский черновик (~1.9× токенов исходника zh→ru), оценка от source мис-сайзит бюджет и ложно триггерит length-ретрай. ## D3. Эскалация. ✅+ **Решение:** канал A — DeepSeek V4 Pro → GLM-5.1 → апекс Gemini 3.1 Pro (wire-слаг ТОЛЬКО `gemini-3.1-pro-preview`, голый → 404 — испр. оркестратором по пингу пакета №3/D22; квирк ратифицирован 04.07, см. преамбулу D8–D11); канал B (18+) — **Grok 4.3 основной пермиссивный тир** + DeepSeek офиц. + локальная abliterated. Sonnet удалён (Anthropic — дорого); OpenAI остаётся (ключ есть) — GPT-5 nano альт черновика, GPT-5 mini кандидат в редакторы/second-opinion судьи. **Правка по xAI (04.07, вопрос владельца — xAI НЕ выведен):** ретайрнулся только дешёвый Grok 4.1 Fast; сам провайдер жив, ключ есть. grok-4.3 ($1.25/$2.50) — средний тир, не «дорогой крайний». Роли Grok: (а) **переводчик канала B** (самый пермиссивный крупный API — стандарт R-rated); (б) **судья/QA 18+ контента** — не отказывается оценивать explicit, в отличие от Gemini (нужен нативный safety-off) и Claude (отказ). Ограничения: reasoning xAI **аддитивный** → канал B с thinking OFF, а think-ON на Grok — только после reasoning-буфера в `EstimateUSD` (D6.2). Промо xAI **$150 за data-sharing**: брать на выделенный NSFW/eval-аккаунт для PD/тест-корпуса и refusal/18+-бенчмарка (разблокирует висящую 18+ часть эксп.02) — но **не гнать через data-sharing реальные/конфиденциальные клиентские книги** (конфликт с ToS-гарантией и zero-retention режимом B2B, research/08). **Правка редактора (04.07, эксп.04 полигона — бейк-офф): дефолт-редактор Фазы 1 = `grok-4.3`.** Слепой бейк-офф glm-4.6 / kimi-k2.6 / gemini-3.1-pro / grok-4.3 на 4 фрагментах (2 фронтир-судьи, сверка с каноническими ru-переводами, согласие независимо): **grok-4.3** — ранг-1 верность, ранг-2 стиль, самый дешёвый+быстрый (~13с без reasoning) → лучший value «одной модели на роль». **gemini-3.1-pro-preview** — лучшая проза → премиум-эскалация редактора. **GLM-4.6 слабейший** (опровергает допущение Р4 «редактор=GLM»; перемерить при GLM-5), **Kimi худший value** (~11k reasoning-ток./абзац, ранг-последний по верности) → оба сняты с дефолта редактора. Это **закрывает вопрос бэкенда №2** (дефолт редактора). Оговорка: LLM-судьи на коротких фрагментах — провизорный дефолт Фазы 1; **эксп.04 кормил редактор БИЛИНГВАЛЬНО (исходник+черновик), а боевой редактор D1 — МОНОЯЗЫЧНЫЙ (только черновик) → рейтинг grok на моноредактуре строго не перенесён (exp08 §Ограничения, Quality-transfer риск), проверяется в пилоте**; финальный выбор редактора/ядра — человеческий пилот Ф2.5. Р4 обновлён. Следствие: grok-4.3 стал центральной моделью (редактор SFW + канал B + судья 18+) — гигиена аккаунтов xAI на три использования (Р4), редактор с thinking OFF через ЯВНЫЙ `reasoning_effort:none` (дефолт grok = `low`; ledger чист). **Уточнения панели (обязательны):** 1. **Часть моделей ОТСУТСТВУЕТ в конфиге (частично закрыто на 05.07).** Заведены с тех пор: `grok-4.3` + провайдер `xai` (commit 636919c); `deepseek-v4-pro` подтверждён живьём и по цене ($0.435/$0.87). Ещё НЕ заведены: провайдеры `gemini`/`openai`, модели `deepseek-v4-pro`/`glm-5.1`/`gemini-3.1-pro-preview` в `models.yaml`; цепочки эскалации всё ещё `[kimi-k2.6]`-заглушки; редактор всё ещё `glm-5`. Задача бэкенда (см. промт консолидации): завести недостающие провайдеры+модели+цены и заменить заглушки цепочкой D3. - **ПОПРАВКА (принял корректировку бэкенда): «без новых адаптеров» было оптимистично.** Провайдеры OpenAI-совместимы по эндпоинту, но не по телу запроса: текущий `openAIRequest` всегда шлёт `temperature` + `max_tokens`, а Kimi требует `temperature: 1` (иначе 400), gpt-5-mini — `max_completion_tokens` без temperature + `reasoning_effort: minimal`, Gemini 3.1 Pro — обязательный thinking (`thinking_budget: 0` → 400). Это **не строчка в yaml, а per-model capability-слой** в адаптере, и он нужен **раньше D3**: Kimi — уже альтернативный редактор Р4, edit-стадия на temp 0.4 даст 400 на первом вызове. → Capability-слой — фундаментальный элемент Фазы 1. Форма (согласована с принципом «модели/цены только в конфиге», Р4): каждая модель в `models.yaml` декларирует возможности — `budget_field: max_tokens|max_completion_tokens`, `temperature: send|omit|locked:1`, `reasoning_control: none|extra_body_disable|effort_minimal|mandatory`; адаптер строит тело запроса по ним. `experiments/00-provider-quirks.md` — эталонная таблица квирков. 2. **Премиум-бюджет $5/$30 УСТАРЕЛ** — выведен из калибровки на Sonnet $3/$15. Апекс теперь Gemini 3.1 Pro ($2/$12 ≤200k) с **обязательным thinking** (reasoning биллится как output $12/M — тот же класс недоучёта, что сжёг vojo 30–44%). Плюс `batch −50%` к inline-эскалации неприменим (последовательна из-за STM), только к судье/QA. Плюс Gemini = и апекс, и судья → эскалированный чанк платит Gemini дважды (перевод+ре-джадж), оба с форсированным reasoning. **Полигону: пересчитать бюджет на фактическом Sonnet-free стеке с reasoning-as-output, batch только на судью.** До пересчёта — $-потолок конфигурируемый (D-эконом ниже), дефолты $5/$30 держим как консервативную заглушку. ## D4. Provider-fallback — НЕ добавлять для облачных draft/edit. ✅+ **Решение:** авто-кросс-провайдерного фоллбека для облачных ролей нет (фоллбек драфта = разный стиль/термины по чанкам + `model_id` в ключе TM обнулит хиты на ре-ране). Провайдер лёг → durable pause → resume. Локальный→облако failover из vojo — только для local-ролей, channel-aware. Ночь — супервизор перезапускает `tmctl`. **Уточнения панели (обязательны):** 1. **Channel-aware изоляция в коде НЕ обеспечена** (дыра). `FailoverConfig` не имеет поля канала/пермиссивности — изоляция сейчас лишь doc-comment для вызывающего; сам failover в Фазе 0 не подключён. Хуже: ветка «fallback отсутствует → fail loud» **сделает nil-panic** (нет nil-guard, `c.fallback.Complete` разыменует nil), а путь «пустой local-контент → облако» — ровно тот сайлент-шип, о котором предупреждает заголовок, без guard. **При подключении failover (Фаза 2): изоляцию канала B делать типом (поле permissive/channel) или явной fail-loud веткой на nil-fallback, а не комментарием.** 2. Формулировка «resume бесплатен» переусилена: техдолг F3 — retryable-но-оплаченные вызовы не идемпотентны, resume может переплатить прерванный in-flight (до `MaxAttempts−1`). Точнее: «resume переоплачивает максимум прерванный in-flight, всё равно кратно дешевле mixed-model failover». 3. Local→cloud failover для local-ролей канала A (экстракция глоссария, дешёвый судья-гейт) при OOM 8GB GPU молча превращает $0-вызовы в платные облачные — **un-budgeted; пометить** (телеметрия должна показывать, когда local-роль ушла в облако). ## D5. Онгоинг Analyst — инкрементально. ✅+ **Решение:** book-brief заморожен; новые главы — Analyst инкрементально расширяет резюме и ищет новые термины; approved-глоссарий/series-bible наследуются read-only, новые термины append, approved не ревизуются молча (research/07); разрешение gender=hidden-твиста — ручное событие. **Уточнения панели (обязательны):** 1. **Проактивная эвристика `gender=hidden`.** Онгоинг структурно теряет преимущество «книга целиком видит твист заранее»: инкрементальный Analyst не видит ещё не загруженных глав, поздний реверс-трап (女扮男装) → уже вмороженные главы закоммитили род. Митигация: когда Analyst в **загруженных** главах видит намеренную неоднозначность (омофонное ta / pro-drop без дизамбигуации), ставить `gender=hidden` и гнать безродовые конструкции (гайд ООН) **до** раскрытия, а не дефолтить в мужской (TACL-биас). Плюс ретро-патч-протокол «с тома N — так» с показом стоимости пере-перевода вмороженных глав, которые твист фальсифицировал. 2. **КРИТИЧНО (impl): `snapshotID` не покрывает память и сборку контекста.** Сейчас хэширует только brief_hash + план стадий + defaults, **не** context-assembly (`glossary_injection`/`stm_depth`/`overlap`) и **не** инъектированный глоссарий/резюме/series-bible. Как только Фаза 1 начнёт инъектить память в `msgs`: изменённая память меняет `request_hash` (msgs в нём), но `snapshotID` не меняется → resnapshot-гейт **не сработает** → ре-ран старой главы молча промахивается мимо чекпоинта и переоплачивает **расходящимся** переводом — ломается сам инвариант Р6, на который D5 опирается. **Свернуть memory-state + context-assembly hash в `snapshotID` ДО того, как приедет инъекция Фазы 1.** Это общий гейт Фазы 1 — держит и D1 (глоссарий редактору), и D5. ## D6. Think-режим — не глобальный дефолт, но пилотить на переводчике. ✅+ (существенно переписано) **Решение:** `reasoning_effort` per-роль, дефолт **off/minimal** для draft/edit — но **по операционным причинам** (эмпирика полигона: GLM ×3 таймауты, Gemini жрёт max_tokens, gpt-5-mini выжигает бюджет — `00-provider-quirks`), НЕ потому что «reasoning вредит переводу». **Переписанное обоснование (панель отозвала мою посылку):** прежняя «think ломает роль переводчика — пустой вывод» — **отозванная находка**: запись «Сессия 2 полигона» (04.07, ныне `archive/PROGRESS-2026-07-04-10.md`) исправляет её («пустота — артефакт тесного контекста, не зависание; с ctx 16k think завершается и реально чинит реалии: 羅生門→Радзёмон, чтение 朱雀»). DRT (research/03, arXiv:2412.17498) независимо показывает: long-CoT над метафорами/сравнениями **поднимает литперевод** — это роль ПЕРЕВОДЧИКА. Владелец был прав в гипотезе. **Уточнения (обязательны):** 1. **Пилот Ф2.5 think-ON vs OFF по качеству включает draft/translator и editor** (не только Terminologist+эскалацию, как я ошибочно сузил) — именно туда указывают и полигон, и DRT. Дефолт-off остаётся до результатов пилота. 2. **Скоуп think-ON эскалации — только subset-billing провайдеры** (deepseek/zai/kimi, где reasoning ⊆ completion ≤ maxTokens, `EstimateUSD` покрывает). **xAI/Grok исключить из think-ON** пока `EstimateUSD` не резервирует явный reasoning-бюджет (additive reasoning xAI → «потолок пробьётся» ровно на премиум-пути канала B). 3. **Gemini-апекс/судья — форсированный think-ON** (не чтит `reasoning='off'` → HTTP 400). Заложить его в бюджет как reasoning-as-output ($12/M), а не как opt-in. `runner.go` шлёт `st.Reasoning` — адаптеру Gemini `off` придётся молча глотать; этот кейс назвать явно. 4. «×2–3 COGS» занижает многословных ризонеров: Kimi-k2.6 ~11k reasoning-ток./абзац = ×4…×20 на output этой роли — учесть в бюджете эскалации. --- ## D7. Схема банка памяти v1 — скоуп. ✅+ **Решение (подтверждаю рекомендацию бэкенда с двумя правками):** - **v1 (store v2-миграция):** база Р3 (`src, dst, type, aliases, gender, speech, decl, since_ch/until_ch, status, note`) + **alias-граф** (типы: имя/цзы/хао/прозвище/титул) + `gender=hidden(until_ch)` + `translit_policy` (западные имена через катакану — `04-unhappy §9`) + `first_person` + **series-bible-lite = gender + ты/вы**. - **Правка 1 (панель D5):** ты/вы в series-bible-lite — **журнал событий переходов**, а не статичная матрица пар (переход ты↔вы — сюжетное событие, `12-ru-target §2`). Поле `gender` — с проактивной установкой `hidden` Analyst-ом на неоднозначности (D5.1). - **Правка 2:** `nickname_translation` **оставить в v1** (это одна колонка + лок «перевести раз навсегда», `04-unhappy §1` относит в Фазу 1); дорогая только логика первичного перевода сильной моделью — её можно отложить, но поле держать. - **Отложить в v1.1:** `ranked-set` (инъективность ступеней), словарь эвфемизмов, число-словарь мер/разрядов (сам число-**гейт** — Фаза 1, а словарь конвертаций — v1.1). - **Обязательно:** сверка с «Следствиями для плана» `04-unhappy-paths`; и `snapshotID` покрывает состояние памяти (D5.2) — иначе схема памяти без хеша в снапшоте молча ломает resume. ## Q3/Q4 бэкенда — прямые ответы - **Q3 (эскалационный дефолт RU-контура):** см. D3 — не-Anthropic, дёшево-первым (DeepSeek Pro/GLM-5.1), апекс Gemini; Sonnet не дефолт (удалён). В будущем зарубежном контуре премиум-эскалация опциональна, но не сейчас. - **Q4 (per-role provider-fallback):** см. D4 — **нет** для облачных draft/edit; pause/resume; local→cloud только для local-ролей, channel-aware типом. ## Требования Фазы 1, не покрытые 6 решениями (из «missed» панели) — в скоуп 1. **Runner без цикла по чанкам/главам — главный длинный шест** (chapter/chunk захардкожены). Цикл + хранилище флагов + disposition-колонка — фундамент, на который опираются D2, D5, гейты, эскалация. Строить первым. 2. **`snapshotID` расширить** memory-state + context-assembly hash ДО инъекции (см. D5.2) — общий гейт. 3. **ruby/фуригана-парсер в спеку импорта Фазы 1** (детерминированная часть, `04-unhappy-paths §4`). Противоречие с планом:25 («epub v1 фуригану не сохраняет») разрешить: для ja→ru фуригана несёт авторские чтения имён → глоссарий-лок; молчаливая потеря подрывает приёмку ≥98% консистентности ja-книг. Извлекать чтения на инжесте (не сохранять инлайн-разметку, а **выхватить ruby в глоссарий**). 4. **Дешёвые детерминированные гейты Фазы 1** (были в `04-unhappy-paths §6/§9`, но выпали из плана): линтер тире-диалогов (Розенталь §47–52), ёфикатор, блок-лист транслит-междометий, число-гейт разрядов 万/億. Самый дешёвый и заметный читателю класс — «максимум воспринимаемого качества за минимум денег». Морфозависимые (канцелярит) остаются Фазой 2 (Python-сайдкар); эти четыре — детерминированные, Go, Фаза 1. 5. **Экономика инвалидации TM** (`[НУЖНО РЕШЕНИЕ] п.2в`): смена параметров чанкера = полная инвалидация «как смена brief» с показом стоимости — **да, подтверждаю** (ключ TM от src-чанка, перечанкование by design инвалидирует; пользователю показывать $ пере-перевода). prompt_version и model_id в ключе (уже зафиксировано Р6) означают: правка промпта обнуляет TM-библиотеку, эскалация пишет новую запись — это осознанная плата за корректность, не баг. ## Экономические открытые пункты (полигону, гейтят достоверность бюджета) - Пересчёт премиум-бюджета на Sonnet-free стеке с reasoning-as-output (D3.2), апекс Gemini 3.1 Pro (форсированный thinking). - ~~Проброс cache-hit/batch RU-агрегаторами~~ — **СНЯТО** (коррекция владельца 04.07: EU-SaaS, прямые ключи, BYOK отменён; см. Р5). Вся cache/batch-экономика теперь по прямым ключам без оговорок — это канон. - `budget_usd: 0` в `pipeline-c1.yaml` — заглушка; $-потолок владелец задаёт по ценовому намерению, дефолты $5/$30 держим до пересчёта. --- # Пост-ревью решения D13–D17 + D18–D21 (2026-07-09, оркестратор) Ратификация выводов стратегического ревью [`07-strategic-review.md`](../archive/architecture/07-strategic-review.md) (метод: 14 сборщиков + 9 адверсариальных верификаторов, 8 CONFIRMED / 1 PARTIAL). Владелец подтвердил курс 09.07 (вкл. «Rust — нет, не сейчас»: Р1/Go остаётся; вопрос закрыт до пост-пилота и требует конкретного триггера, где Go упирается). Каждое решение ниже — контракт для следующих сессий «Бэкенд»/«Полигон»; хендофф-промты выдаёт оркестратор. ## D13. Пилот Ф2.5 — поправки протокола (гейтят валидность главного решения). ✅ Дополнения к `experiments/09-pilot-protocol.md` (полигон вносит в док и харнесс ДО пре-регистрации): 1. **Новый арм: «моно vs билингв редактор на ОДНОЙ модели, простой general-промпт»** — прямой тест D1. Основание (верифицировано по PDF arXiv:2605.13368, вкл. en→ru): monolingual-рефайнмент теряет accuracy с ПЕРВОГО прохода (−2.2…−5.6 MQM у всех 6 моделей), general-рефайнмент С исходником даёт тот же fluency при accuracy ~flat и лучшем overall. Существующий 7-bis (моно-бейкофф МОДЕЛЕЙ) сохраняется — это другой вопрос. 2. **C2 — только с ГЕТЕРОГЕННЫМИ кандидатами** (draft-кандидаты от разных моделей, не N сэмплов одной): на гомогенных селекция ≈ монета (2603.20324: WR 0.512 homogeneous; LitMT 2606.05924: best-of-8+судья — последнее место). Иначе плечо C2 предрешено и жжёт бюджет впустую. 3. **Панель судей — переконфигурация**: (а) 2–3 семейства максимум — 9 судей ≈ 2 эффективных голоса (2605.29800), лучший одиночный ≥ панели; (б) **11+ повторов на вердикт со свапом позиций A/B** — одиночный прогон нестабилен (13.6% флипов, парафраз меняет исход в 25%; 2606.13685); (в) агрегация медианой/Bradley-Terry (JP-TL-Bench-паттерн), не средним; (г) **grok исключён из судейства grok-редактированных выходов** (нарушение собственного анти-self-preference правила §5); (д) валидация судьи — по κ против человеческого IAA + tie-rate/top-1 within-prompt (2603.12520), не по средней корреляции. 4. **Пре-регистрация расширена**: MDE/мощность (число BWS-наборов), N аннотаторов ≥3 (при «минимум владелец» κ неисчислим — тогда честно писать «безκ-режим»), развести имена: C0–C3 = конфигурации ядра, **M0–M3 = режимы терминологии memory-eval** (коллизия имён в exp09 устранена). 5. **Харнесс чинится ДО решающего прогона** (верифицированные дефекты): memory_eval — стрип/запрет эха глоссарий-преамбулы, сохранение ПОЛНЫХ выходов (не out[:160]), реализация fidelity-оси (без неё правило «M3 роняет vs M0» непроверяемо; текущий индикатив ЗАНИЖАЕТ вред неверной инъекции — chunk1-C3 надут эхом); оценочные артефакты — пере-рандомизация меток по фрагментам, ключ/цены ВНЕ артефакта (слепота exp04 была структурно сломана: ключ лежал в том же документе при LLM-оценке). Инструменты: Pearmut (2601.02933) вместо самописного BWS-тулинга — оценить перед постройкой своего. 6. **Think-арм grok-редактора требует reasoning-буфера в `EstimateUSD`** (D6.2) — иначе экономически главный think-вопрос пилот не ответит; бэкенду заложить до прогона. ## D14. Канал B (18+) — ревизия состава. ✅ 1. **DeepSeek ВЫВЕДЕН из explicit-части канала B**: ToS DeepSeek (upd 2026-03-27) §3.4(5) прямо запрещает «pornographic, obscene, or sexually explicit (e.g., sexual chatbots)» — верифицировано по первоисточнику. Для violence-фрагментов (не sexually explicit) DeepSeek остаётся допустим. Интерим D3 «DeepSeek офиц. + локальная abliterated» сужается до «локальная abliterated + Grok». 2. **Mistral — кандидат-фолбэк канала B**: Usage Policy (eff. 2026-06-11) не содержит бланкетного запрета adult-текста (только CSAM/NCII/эксплуатация) — верифицировано по первоисточнику. Полигону: прогнать refusal/excision-пробу Mistral на explicit-корпусе, бэкенду — слот в конфиге при положительной пробе. 3. **Обоснование xAI поправлено**: «цитата Маска про R-rated текст» — на деле про Grok Imagine (картинки); опора — сам AUP xAI (нет бланкетного запрета adult-текста; запрещены CSAM и порно реальных лиц). Позиция стабильна на 09.07, но политика xAI волатильна — мониторинг остаётся. 4. **18+ эмпирика — единственный critical ревью**: refusal/excision на explicit-корпусе (Grok/Mistral/abliterated) + качество Grok-судьи 18+ + поведение Gemini-судьи на explicit — обязательная рука exp02/пилота. Гейтится фрагментами от владельца. ## D15. Resume-экономика и онгоинг. ✅ Верифицировано исполнением: `snapshotID` вшит в `RequestHash` → любой `--resnapshot` (флип гейта, append approved-терминов, бамп версии классификатора) переоплачивает ВСЮ книгу, включая байт-идентичные запросы; redrive флагнутых нет. Решения: 1. **Текущий all-or-nothing ПРИЕМЛЕМ для статичной приёмочной книги Ф1** (гейт громкий, расхождений не бывает) — НЕ чинить до приёмки. 2. **Онгоинг-режим (`add-chapters`, сегмент «ИИ-фабрик») ГЕЙТИТСЯ** одним из двух: content-addressed переиспользование чекпоинтов (`msgsContentHash` уже существует — `render.go:233-249`) ИЛИ селективный redrive. Бэкенду: спека-дизайн (не код) в ближайший пакет; реализация — Ф1.5. 3. **Немедленно (в ближайший бэкенд-пакет)**: исправить лгущие комментарии `runner.go:156-160` / `coverage.go:29-33` («re-classify for FREE» верно только внутри неизменного снапшота); `tmctl status` + redrive флагнутых — приоритет D12-хвостов подтверждён (status → redrive → F3); бампнуть edit `prompt_version` (D1-уточнение №3 не исполнено — один лейбл `v0-draft` на два SHA). ## D16. Банк памяти — фиксы границ доверия (4 верифицированных дыры). ✅ Ядро (F1/нормализация/спойлер/детерминизм/инъекция) ревью подтвердило чистым; все находки — на границах доверия, каждая воспроизведена временным Go-тестом: 1. **Полисемия same-src**: две approved-записи (один src, разные sense/dst, пересекающиеся окна) инжектятся ОБЕ как CONFIRMED + post-check даёт гарантированный confirmed-miss (с гейтом ON — детерминированный livelock чанка). Фикс: fail-loud на пересекающихся окнах разных sense в `loadGlossarySeed` ИЛИ даунгрейд обоих совпадений в AMBIGUOUS. (`memory.go:198-204,299-306`; `memseed.go:155-163`) 2. **Sticky-апгрейд**: collision-prone AMBIGUOUS попадает в activeIDs без disposition (`memory.go:323`) → в следующем чанке sticky даёт status-based CONFIRMED, минуя post-check, прямо в редакторские констрейнты. Фикс: наследовать disposition исходного матча в sticky-кэрри (или не класть не-CONFIRMED в activeIDs). ⚠ Это был **ложно-негативный отсев 44-агентного ревью (0/3)** — рациональ «sticky несёт установленный в сцене термин» не проверялась на коллизионном входе; бэкенду выборочно перепроверить остальные отсевы того ревью. 3. **Source-граница для фонетических ключей ≥4**: `rose` (approved) фаерится CONFIRMED внутри `roseanne` — collision-даунгрейд покрывает только ≤3, Aho-Corasick границ не знает, target-сторона границу имеет (асимметрия). Фикс: script/word-граница на source-стороне для фонетических скриптов. 4. **Ruby-чтение не матчится**: для ручных терминов чтение выбрасывается (`memseed.go:217-220`), у auto-кандидатов surfaces строятся только при непустом dst → ja-чанк с именем каной даёт 0 матчей. До реализации B6: ruby-reading → auto-alias ручного термина; интерим — **обязательный пункт чек-листа подготовки ja-книги: kana-написания сид-имён вносить als aliases руками**. Плюс: kana-precision замер (minKeyLenPhonetic=3 — «консервативный дефолт до замера») — полигону, расширение E1-протокола; C4-автозаполнение `decl` остаётся Ф2, но признаётся условием реалистичности жёсткого postcheck-гейта. ## D17. D1 (монолингвальный редактор) — статус понижен до «дефолт Ф1, оспорен внешним замером». ✅ D1 остаётся дефолтом Фазы 1 (менять конфигурацию до пилота не будем — kalki-риск не опровергнут, а вакуум верности Ф1 уже признан D1.1). Но: (а) сильная форма обоснования («исходник в контексте редактора ⇒ кальки») понижена до гипотезы — подтверждений в литературе 2025–26 нет, кальки документированы как болезнь ДРАФТА; (б) экономический довод слаб (билингв-редактор = +15–20% стандарт-микса ≈ +$0.10–0.14/ранобэ); (в) решает пилот-арм D13.1. Если арм покажет паритет верности при моно — D1 подтверждается дёшево; если налог на верность воспроизведётся — флип на «редактор с исходником, простой промпт» дешевле любой альтернативной митигции. ## Ратификации по итогам внешнего ревью двух пакетов (09.07 вечер, оркестратор) Оба пакета (бэкенд D15/D16, полигон D13-харнесс) прошли внешнее ревью оркестратора (7 ревьюеров, всё исполнением: моки, мутационные реверты, CLI-прогоны $0, пересчёт данных). Вердикты: **оба ACCEPT_WITH_FIXES, залендены** (153277e, 9afea37) — блокеров на дефолтном конфиге нет, деньги/корректность целы. Решения: 1. **D16.3-дивергенция бэкенда (kana/Han без source-границы) — РАТИФИЦИРОВАНА.** Кана-граница рушит recall (すずきは-класс: TP 15→1 — независимая эмпирика полигона, exp09 §6-bis), homograph-класс длино-инвариантен и границей не лечится. Митигация kana-омографов — POS/known-word-гейтинг или ruby-якорь → **скоуп B6** (вместе с Палладий/Поливанов-валидатором). **MIN=3 для фонетических ключей ратифицирован как дефолт** (kana-замер полигона; precision там trap-set-относительная — не продовая метрика). 2. **Спека D15.2 — направление ратифицировано, реализация ЗАБЛОКИРОВАНА до доработки** (3 дизайн-дыры ревью): (а) fast-path-гард обязан покрывать ВЕСЬ wire stage-план (текущий драфт теряет model/temp/reasoning/maxTokens-деривацию → смена temperature или reasoning low→none тихо отдаёт stale-текст — ре-открытие F1); (б) расщепление memory_version (wire vs verdict) — ОБЯЗАТЕЛЬНО, не «опционально» (иначе append-термина/toggle гейта = переоплата книги, главный сценарий не материализуется; подсказка ревью: postcheck пересчитывается вживую и в chunk_status не хранится — memory_version можно целиком убрать из ключа вызова); (в) замена loud-гейта согласия — pre-flight dry-run «N чанков, ~$X» с порогом явного флага (Р6-класс согласия на трату не демонтируется без замены). Плюс: полевой маппинг всего снапшота (wire/verdict/dropped), судьба chunk_status.snapshot_id/status-ридеров, sequencing миграции ДО первой онгоинг-книги, blast-radius append-а моделировать со sticky+eviction+каскадом стадий. 3. **D14.2 Mistral: refusal-часть ПРИНЯТА** (11/11 ok, провенанс на месте), **fidelity-числа (85–95) НЕ приняты** — сырых выходов и судейских вердиктов в репо нет (провенанс-обещание не выполнено); пере-прогнать с персистом до финализации D14.2. Explicit-часть — ждёт фрагменты владельца. 4. **Pearmut — отказ ратифицирован** (нет BWS); инструмент пилота = тонкий свой + Potato-фронт + attention-checks. 5. **Новые задачи бэкенду (следующий пакет):** (а) GB18030-детект/конверсия в ingest (реальные zh .txt — не UTF-8; укусит на первой живой книге); (б) **homophone first-wins** — major ревью: при двух ручных омофонах (разные dst, чтение ≥4 каны) алфавитно-первый получает авторитетный kana-алиас CONFIRMED (attachRubyAliasesToManual видит коллизию только вторым проходом; группировать чтения по нормализованному ключу МЕЖДУ базами до аттача); (в) закрепить мутационно инвариант redrive «DispOK-стадии не сбрасываются» (тест с флагом на ПОСЛЕДНЕЙ стадии; сейчас мутант выживает) + тест --reason-селектора; (г) snapshot-чек ДО ResetChunkStages (сейчас громкий отказ redrive уничтожает флаг-телеметрию); (д) minors: --json exit-код при флагах, developer-подсказка для gate-промоченного glossary_miss (redrive-тупик), README «миграции v1–v6», ETA→EWMA или пометка отступления. 6. **Новые задачи полигону (следующий пакет):** (а) зеркало ↔ Go: дозеркалить suppressUnboundedPhonetic (D16.3) и апостроф-фолд memnorm-v3 (оба продемонстрированы расхождением; критично для en→ru руки пилота); (б) эхо-детектор — ловить хвостовой/встроенный эхо-глоссарий, не только преамбулу; (в) Mistral-переснятие с персистом (п.3); (г) байт-синк заголовка инъекции с Go (⟨проверить⟩-пояснение); (д) minors: ts в refusal-записи, «508→500» trad2simp-дедуп/пометка, in-file карантин старых C-меточных данных. 7. **Гигиена:** `*.key.json` добавлен в .gitignore (остаточный риск утечки ключа слепоты); правило git-координации мультисессий внесено в CLAUDE.md (инцидент: перезапись истории оркестратором при грязном дереве полигона — недопустимо без сверки чужих правок). ## D18. Приёмочная книга Фазы 1 — 蛊真人 (zh→ru); ja→ru прогон отложен. ✅ (амендмент D9, решение владельца 09.07) **Решение:** приёмка Фазы 1 (end-to-end книга целиком) выполняется на **蛊真人 (Reverend Insanity, «Мастер Гу»)**, zh→ru — реальная вебновелла от владельца, уже на стенде (чистая вычитанная .txt, GB18030; 7 глав прогнаны вебновелл-срезом). ja→ru прогон (буква D9) понижен до «второй прогон при появлении ja-epub от владельца». **Обоснование:** (1) форсирующая функция D9 — «ruby на критическом пути» — ВЫПОЛНЕНА (ruby-захват/сид реализованы и покрыты тестами, шаги 3a/4); (2) zh→ru вебновелла — коммерчески флагманский сегмент («ИИ-фабрики», Р9), а ja-книги на стенде нет; (3) терминологическая плотность 蛊真人 (ранги/титулы гу, рекуррентные имена) — идеальный стресс банка памяти по жалобе №1 читателей; (4) deepseek-эхо 25% на этом тексте (замер полигона 09.07) — боевой тест echo-гейта и single-hop эскалации черновика. **Следствия:** GB18030-детект/конверсия в ingest обязательны ДО прогона (пакет №2 бэкенда); сид-глоссарий 蛊真人 (имена/ранги, dst по Палладию, decl) готовит полигон с владельцем — сам текст и производные **вне git** (Р8: приватная обработка легальна, нарушение — при распространении); OpenCC-полнота trad2simp некритична (текст в упрощённых); Поливанов/Палладий-валидатор — B6/Ф2 как и был; epub-путь остаётся на юнитах до первой epub-книги. Приёмочные критерии 02-mvp-plan v3 не меняются, кроме пары (zh→ru) и cost-sanity (пропорция вебновеллы exp08). Эскалация draft при эхе требует заведённого `escalate_to` — минимум одна фолбэк-модель черновика в конфиге до прогона. ## D19. Канал B v2 + развязки сида (амендмент D3/D14; по exp10 и внешнему ревью полигон-пакета №2, 09.07 поздний вечер). ✅ Внешнее ревью пакета (4 ревьюера, всё исполнением): mirror ACCEPT, остальные ACCEPT_WITH_FIXES; микро-дефекты доков исправлены оркестратором при лендинге (слаг переводчика в exp07-Task5 = `grok-4.20-0309-non-reasoning`, не grok-4.3; Mistral overall = ≈93.8, не 95.4 — баг агрегации median=max при 2 судьях; счётчики 8b 8/10). Ключевая эмпирика D19 подтверждена сырьём: эхо grok-off — реальный zh verbatim при `reasoning_tokens=0`, контроль reasoning-ON честный (`reasoning_tokens>0`, те же фрагменты). 1. **Состав канала B (18+):** **переводчик-дефолт = Mistral** (`mistral-large-2512`: 10/10 чисто на violence, честная fidelity ≈93.8 двумя кросс-семейными судьями, policy 11.06.2026 без запрета adult); **эскалация = grok-4.3 reasoning-ON** (10/10 чисто; биллинг через additive-буфер D13.6); **local abliterated 8b** — скрининг/дешёвый фолбэк (8/10 ok); **судьи 18+ = Grok-4.3 + Gemini-3.1-pro** (оба 10/10 без отказов — замена не нужна, D14.4-вопрос судей закрыт). **grok reasoning-OFF как CJK-переводчик непригоден** (5/10 провалов: 4 эха + 1 дегенеративный луп) — «канал B thinking-OFF» из D3/D6.2 в части переводчика ОТМЕНЁН. DeepSeek в explicit остаётся исключён (ToS; на violence переводит — контроль 9/10). Оговорки: N=10, violence-only; **erotica не мерена** — ждёт второй источник владельца (единственный остаток D14.4); **цена Mistral перепроверяется** до wiring экономики (комментарий $0.5/$1.5 при $2/$6 на маркетинг-странице — 4×). 2. **Эхо-класс обобщён:** «reasoning-off + плотный CJK-вход = зона эха» — свойство класса моделей (DeepSeek, оба grok-слага), не квирк вендора. Полигону: обобщающая строка в `00-provider-quirks.md`. Митигации промптом — мандат voice-state ресёрча (3-bis). Echo-гейт вниз по потоку — обязателен навсегда, промпт-митигции его не заменяют. 3. **Сид-развязки ратифицированы:** (а) значащие имена гу — ПЕРЕВОД (пиньинь в note; исключения через `translit_policy`); (б) 古月 = «Гуюэ» слитно (составная клановая фамилия, аналогия Сыма/Оуян); (в) **白凝冰 → `gender=hidden`**, НЕ female/draft — это хрестоматийный кейс механизма D5.1 (первые главы 他/«он», канон female): безродовые конструкции до раскрытия; `until_ch` выставить при определении главы раскрытия (полигону при следующей курации сида — правка одного поля). 4. **Гигиена xAI пост-фактум:** прогон exp10 на текущем (единственном, платном, без data-sharing) xAI-ключе — ратифицирован; категория «приёмочная книга владельца (копирайт, не клиентская)» — допустима для eval-обработки (Р8, приватная обработка); data-sharing промо-аккаунт — по-прежнему только PD. **До пилота: завести выделенный NSFW/eval-ключ xAI**, разделение ключей зафиксировать. 5. **Fix-лист полигону (микро, со следующим пакетом):** агрегация `mistral_fidelity.py` (mean при n=2); перепроверка цены Mistral по офиц. прайсу; провенанс-нота `ahq_final` (прогнан до-Task-1 зеркалом — для zh no-op); токен-корзина ゛゜/々/halfwidth-кана (info); line-start-FP эхо-детектора задокументировать. 6. **Пинг бэкенду (СРОЧНО, до их коммита):** внешний ревьюер заметил в их незакоммиченном `memseed.go:463-466` отладочную заглушку `if true { return false }`, **отключающую contested()-проверку омофонов** (их же фикс 1a!), + временный `zz_probe_test.go` в дереве. Убрать до коммита пакета. ## D20. Приёмка бэкенд-пакета №2 + ратификация D15.2 v2 с правками + развязки §13 (09.07 ночь). ✅ Внешнее ревью (5 ревьюеров, всё исполнением и мутациями; smoke-деньги сверены по артефактам БД до микроцента): fixlist/spec-v2 — ACCEPT_WITH_FIXES, ingest/gates/smoke-coord — ACCEPT. **Пакет залендён (b51ac4c).** Заглушка contested() из D19.6 убрана и мутационно защищена (проверено реинжекцией мутанта). Ingest-клеймы воспроизведены точно (2283 главы / 5088 чанков / 0 U+FFFD на реальном GB18030-файле); Shift-JIS/EUC-JP-ловушка отсекается zh-скоупом (mutation-verified). 1. **Спека D15.2: направление и 90% деталей РАТИФИЦИРОВАНЫ; реализация разблокируется после v3-правок** (обе маленькие, бэкенду со следующим пакетом): (а) **role + имя стадии в guard_hash** — без них формула не суперсет текущей защиты (конструируемый stale-VERDICT fast-path hit при флипе роли; заявление «строго сильнее» пока ложно); (б) **аналитическое правило editor-каскада в dry-run §7**: любая стадия ниже re-bill-юнита того же чанка считается re-bill (иначе консент-проекция занижает ~2× на самом дорогом классе правок — temp/reasoning/model translator'а); (в) доукомплектовать маппинг §4: `style_check_version`, слой YoPolicy/StyleAllowlist («dropped: live-recomputed, класс post-check»), memoryNormVersion (target-часть) — и в postcheck-версию, судьба `jobs.snapshot_id` одним предложением, verdict-фолд конфига гейтов только при enabled (дисциплина coverageSnap). 2. **Ответы на §13:** **Q1 — пер-стадийная гранулярность wireSnapshotID, ДА** (живой довод: вероятная смена редактора glm-5→grok-4.3 при book-global пере-оплатила бы весь translator-бэклог; поверхность мала — snapshotID уже итерирует стадии). **Q2 — порог `min($0.50, 5%×ProjectedBookUSD)` и флаг `--accept-rebill[=usd]` — ПРИНЯТЫ** с поправками: сначала фикс каскада (п.1б), форма флага с опциональным потолком суммы (Р6 = согласие на КОНКРЕТНУЮ трату), fallback-флор при ProjectedBookUSD=0. **Q3 — `Adult` остаётся wire/verdict-нейтральным, слой не назначать**; вместо хеша — load-time линт консистентности (adult:true без единой channel:adult-стадии → громко); первый рантайм-потребитель Adult обязан явно назначить слой. 3. **Редактор приёмки Ф1:** приёмка — инфраструктурная веха (деньги/resume/гейты/консистентность; качество меряет пилот) → **glm-5-редактор ДОПУСТИМ для приёмки**, если чистый xAI-ключ не появится к её старту; **пилот Ф2.5 требует боевой grok-4.3-редактор** → чистый xAI-ключ (без data-sharing) от владельца — блокер пилота, не приёмки. ja-путь: Shift-JIS сознательно fail-loud (ja-книги UTF-8/epub) — ратифицировано. 4. **Fix-лист бэкенду №3 (не блокирует приёмку):** README «миграции v1–v7» (устарел в том же пакете); **cheap-gates v2** (3 ложных срабатывания адверсариального ревью: «-цитата с начала строки как «смешение стилей»; 万 в составе имени + постороннее число в выводе; перефраз магнитуды + год — правка правил = громкий bump cheapGateVersion; + note про дефисные редупликации мимо блок-листа); NUL-гард на GB18030/UTF-16-путях декода (сейчас только UTF-8); `tmctl redrive --resnapshot` молча игнорируется (ошибка или поддержка); style-колонка в human-таблице глав status (косметика); report без API-ключей для read-only аудита (опционально). Принятые трейд-оффы (задокументированы, не чинить): drift-гард redrive пере-сеет глоссарий на abort-пути (идемпотентно); нарратив «один redrive» в журнале сжал два раунда (материальные клеймы верны). ## D21. Приёмка research/15 «Голос и состояние» + ратификация механизмов Ф2 (09.07 ночь, оркестратор-преемник). ✅ Внешнее ревью (9 агентов: 5 спот-чеков несущих CONFIRMED-клеймов по первоисточникам, пересчёт проб из сырых артефактов, консистентность, red-team ратификации, аудит доков). Вердикт: **ACCEPT_WITH_FIXES, залендён (5953b37)**. Спот-чеки: DelTA — CONFIRMED точно (все 5 подклеймов, вкл. анти-клейм «+0.36 не существует»); RoleLLM / Voita / similarity-harm / WMT25 — CONFIRMED_WITH_NUANCE (числа верны, нюансы атрибуции/метрик вписаны в док пометками *(ревью)*; ни один не ломает выводов яруса-1). Пробы пересчитаны поштучно: P4-таблица сходится на 100% (вкл. кросс-чек пересечения эхо-фрагментов с exp10 полигона), wire-клейм reasoning_tokens подтверждён (v1 всегда >0, префилл всегда =0), бюджет $0.28 сведён по usage×прайс. Исправлены оркестратором: агрегат 0/26→0/29, «~35%»→«30–67% по армам (пул ~44%)», три deepseek-эха rt 111/182/149 (не «оба 111/149»), пятый судья = gemini-2.5-flash (не 3.5), строгий пересчёт маркера 奴婢 (0/4→2/4→3/4→4/4 — порядок армов устойчив), знаменатель «$2.50» = кап probe_runner.py. 1. **Voice-профиль (схема research/15 §1.5) — механизм Ф2, ратифицирован с оговорками red-team:** (а) до лендинга D15.2 профиль **заморожен per-job** — самодозаполнение exemplars = mid-run append памяти = переоплата книги при D8/D15.1; (б) приоритет бюджета инъекции: CONFIRMED-глоссарий > address_pair > voice_profile > reveal-алиасы; кап voice-слоя ≤300 ток./чанк; (в) `brightness`/«серые голоса не инжектить» — гипотеза-под-пилот (T2, N=2 свапа), не жёсткое правило схемы; (г) драфт-слот — дефолт, editor-слот НЕ исключён до пилота (P3 = 4 вызова на чистых черновиках); (д) сид exemplars курирует владелец по СТИЛЕВОМУ критерию ru-стороны, верность реплики-экземпляра гейтится кросс-семейным судьёй (процесса «approved-перевод» в Ф1 нет — D1.1); (е) членство топ-героев в кэш-префиксе уважает окна профиля (смена манеры → миграция в селективный слот; «кэш почти бесплатен» — только при неизменном префиксе). 2. **Реестр обращений пар (address_pair, §2.1) — ратифицирован как МАТЕРИАЛИЗАЦИЯ журнала ты/вы D7-Правки-1** (один источник истины, не второе хранилище; бэкенду миграционная нота при заведении типа). Схема + детерминированный ты/вы-флаггер — безусловно; **инъекционная часть — условно** до полигон-эксперимента на ТРУДНЫХ парах (лифт на лёгких = 0; исход «только флаггер-ось» легитимен и дешевле). 3. **Reveal-окна (`reveal_ch` + pre/post-reveal алиасы, §2.2) — Ф2, ратифицированы с переобоснованием:** опора = (а) само-нанесённый риск банка (post-reveal dst инжектится до раскрытия — та же логика спойлер-окон) + (б) механический родовой канал zh→ru (2311.08836), НЕ «12-common §16» (провенанс дока не зафиксирован — числа не абсорбируем). Judge-вопрос «раскрыто ли X до гл. N» гонять и на вебновелл-срезе вне претрейна. 4. **Армы пилота — приняты С ТИРИНГОМ** (защита мощности первичных вопросов D13.4): первичные (ядро C0–C3 / память / D13.1 / think) — полный N человеческого BWS; voice-A/B/C/D — на voice-маркированном подкорпусе; формат инъекции и «сэндвич» — судейские армы с echo/cjk_share как охранной метрикой (урок P4-инверсии); minimal-diff редактор — гейтится машинерией search/replace-апплая (спека бэкенду до пилота). НЕ ставить в решающий прогон: двухпроходность-в-одном-вызове (пост-пилотная проба допустима при флипе смежных выводов), min_p (не экспонирован нашими API). 5. **Скоуп Annotator Ф2 (§2.3) ратифицирован** (детерминированный пре-гейт 说/道 → LLM на implicit → disposition; CONFIRMED-only в инъекцию; отношения курировать как глоссарий; пространство/эмоции/эпистемику вне reveal не аннотировать). Ресурс gold-бенча назван честно: zh-читателя в проекте нет → якорь через en-фан-перевод (спикер-сверка мостом) либо LLM-консенсус двух семейств + выборочная человеческая проверка; «LLM-предразметка + ручная дочистка» в оригинальной форме неисполнима. 6. **Анти-эхо пакет: направление ПРИНЯТО, wiring ГЕЙТИТСЯ** fidelity-хвостом P4 (35 пар, пинг полигону стоит) И повторным echo-rate замером (эхо стохастично per-fragment). Скоуп wiring = **только deepseek-драфт**; Mistral/канал B без собственного замера не трогать (база чиста 10/10; P4: одна строка system инвертировала grok-none 3/10→9/10). Wiring только на границе `prompt_version` (правка промпта обнуляет TM — Р6). **Запрет: языковые констрейнты в промпты reasoning-off путей без per-model замера.** ⚠ Латентное: `translator.md:10` уже содержит языковую строку — сегодня едет только на thinking-ON DeepSeek (вне зоны инверсии); при заводке Mistral-канала B — прогнать P4-реплику на боевом промпте. Зафиксирован вендор-конфликт: few-shot в thinking-драфт противоречит «DeepSeek R1-классу few-shot вредит» (§3.1) и research/14 M1 — fidelity-хвост разрешает именно его, до него канал A не трогать. 7. **Клеймы уникальности сужены** (доки/память синхронизировать): «аналогов не найдено» → «не найдено при скрининге (границы — research/15 §5); патентная часть — скрининг, не FTO»; «первые с механизмом» → «механизм не раскрыт ни одним найденным конкурентом»; спойлер-окна: CONFIRMED-absence → PLAUSIBLE-absence. 8. **Экономика:** «+$0.2–0.3/вебновелла» — верхняя граница editor-side инъекции; при рекомендованном драфт-слоте ~+$0.02–0.05. Незакрытые статьи Ф2 — Annotator-пасс (~+10% к вебновелле) и курация сида → **exp08 v3** (полигону: строки annotator + voice/pair по стадиям) до фиксации budget_usd-дефолтов Ф2. 9. **Поручения полигону** (следующий пакет, после erotica): fidelity-хвост P4 (35 пар); пре-шаг wire-аудита ДО любого temp-свипа (thinking×sampling no-op DeepSeek, V4-маппинг, grok `none`+penalties); voice-A/B на трудных парах + вебновелл-срезе; эвал-база ru-детектора (IWSLT22-RU + mSynthSTEL + пертурбации); exp08 v3; **строка эхо-класса в 00-provider-quirks (поручение D19.2 — не выполнено и не потерять) + инверсия языкового констрейнта**; миграция судьи memory_eval с gemini-2.5-flash (интермиттентный 404; 3.1-flash-lite проверен пробой) + ревизия exp07-вывода: `content_filter` на Gemini 3.x ЖИВ (`PROHIBITED_CONTENT`). 10. **Поручения бэкенду** (пакет №3, БЕЗ кода памяти): резервирование места под voice_profile/address_pair/reveal_ch в схеме v2 (note, не реализация); wire-probe «пишется ли temperature в thinking-канале DeepSeek» — в бэклог; языковые констрейнты не вносить (п.6); спека minimal-diff апплая — по готовности. Сопутствующее: сырые артефакты проб продублированы оркестратором в `/home/ubuntu/books/gu-zhenren/research15-probes/` (вне git; scratchpad /tmp волатилен); статус-доки (CURRENT-STATE, README, CLAUDE.md, quirks editor-строка по D19.1) — синхронизированы отдельным коммитом. ## 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 деривит total−prompt−completion; mutation-hardened; кэш не задваивается). Условия до заводки Gemini-стадии в прод: $0.01-проба «thinking ⊆ max_tokens» на 3.1-pro-preview (резерв для additive_total сознательно 0 — допущение проверено только на 2.5-flash; пробой потолка ограничен одним вызовом), негативный кейс деривации (total0` (иначе echo-эскалация черновика D18 не стреляет). Очередь предложена: приёмка → бэкенд-№4 (рефакторинг, промт выдан) → GPT-восхождение (промт выдан); порядок приёмка↔рефакторинг — за владельцем. ## D23. Приёмка рефакторинг-пакета №4: golden-гард и OpenReadOnly (10.07, оркестратор). ✅ Внешнее ревью (5 ревьюеров, всё исполнением в scratchpad-копиях, $0): golden-эквивалентность / инварианты-деньги / дифф-аудит / OpenReadOnly / журнал-скоуп. Вердикты: invariants и diff — **ACCEPT**, остальные — **ACCEPT_WITH_FIXES**; **пакет залендён (296419c)**. Эквивалентность «форма, не поведение» доказана трижды независимо: (а) новый golden прогнан на ЧИСТОМ HEAD-коде — PASS байт-в-байт (snapshotID, все 11 request_hash вкл. эскалационные, wire-тела, вердикты, resume с 0 вызовов; единственный шим — аддитивный read-view); (б) чувствительность golden 5/5 кодовых мутаций (render / snapshotID-компонент / request_hash-домен / nil-гард injected_ids / порядок терминов) — все валят тест громко; (в) AST-дифф 36 деклараций: 29 байт-идентичны, 7 изменены только заявленными способами, 0 потеряно; CLI-контракты сверены исполнением двух бинарей (exit-коды/stderr байт-идентичны). Инварианты 1–7: 9/9 мутаций убиты; go.mod, миграции, схема БД, боевые промпты и конфиги — нетронуты (sha256). 1. **Golden-гард — постоянный инвариант №8 бэкенда.** Обновление `capture.golden` — ТОЛЬКО при ратифицированной смене поведения (`TM_UPDATE_GOLDEN=1` вручную; при заводке CI переменную в раннеры не экспортировать — сегодня «CI не перепишет» вакуумно, CI нет). Известные слепые пятна фикстуры задокументированы (attempt>1 regeneration-путь, STM, coverage/postcheck-гейты ON, AMBIGUOUS=0) — расширение опционально с реализационным пакетом D15.2. 2. **OpenReadOnly САНКЦИОНИРОВАН как изменение поведения** (боль воспроизведена исполнением; покрыт приоритетом-2 мандата): `status`/`report` без flock/миграций/recovery, работают ПРИ живом прогоне; запись гарантированно падает (`PRAGMA query_only` на каждом соединении — mutation-verified; барьер SQL-уровня, НЕ файловый); кросс-процессная конкурентность доказана (WAL-снимок, 1702 чтения под settle-штормом без busy). **Трейд-офф ратифицирован:** после краха reserved-хвост (≤1 резервации — раннер последователен) виден в status до следующей write-команды; read-команды НИКОГДА не чинят ledger (честнее старого поведения, где «read-only» status сам мутировал ledger — это и было причиной flock); schema-mismatch громкий в обе стороны; нет БД → fallback на создающий Open; read-only ФС/иммутабельные бэкапы не поддерживаются (WAL). Рекомендация, не блокер: staleness-маркер через неблокирующий flock-probe. 3. **Микро-дефекты исправлены оркестратором при лендинге:** diffstat +3317 (не +3295); фикстура фактически 4 главы/5 чанков/11 тел; line-refs старого runner.go починены в живых доках (06:71, 07:42/109/192, research/13:196/198 — по полной карте ревью); исторические цитаты (D-лог 04.07, журнал) не переписываются; refs D15.2-спеки (15 шт., зона бэкенда) — с v3.1-правками (уже в D22.2). 4. **Fix-лист бэкенду (попутно с реализационным пакетом D15.2):** тест errTail на границу руны (реверт фикса сейчас выживает сьют — против дисциплины mutation-verified); лог-ассерты retryLoop (retry_in / отсутствие «will retry» на последней попытке — unit-able через slog-capture); AMBIGUOUS>0 ячейка в фикстуру или смягчение коммента golden_test.go:32; опц.: компонент-тест snapshotID-payload (самопроверка fold'а без golden), kill9 rounds 3→5. 5. **Ф2-критерий выполнен:** канал B садится файлом в `escalation.go`, annotator/voice — в `chunkrun.go`; runner.go = 168 строк сетапа. Очередь размораживается: GPT-восхождение деблокировано (условие владельца «после рефакторинга» выполнено); промт приёмочной сессии Ф1 выдан (`ACCEPTANCE_SESSION_PROMPT.md`). ## D24. Приёмка Ф1 этапа A ратифицирована с оговорками + развязки floor max_tokens / post-check + порядок этапа B (11.07, оркестратор-преемник №3). ✅ Внешняя верификация отчёта приёмки (воркфлоу 5 осей — money / d10-recount / dispositions / lifecycle / red-team; ВСЁ исполнением по read-only копии store, phase-логам, экспортам, сиду, коду; $0): все хедлайны воспроизведены — деньги до float-epsilon (130 чекпоинтов пересчитаны из usage_json × models.yaml, SUM(request_log)=committed=$0.4080773152 ровно), классификация 55 промахов D10 реплицирована бит-в-бит независимой реализацией матчера, SIGKILL/honest-stop/resume сверены по логам (EXIT=137 в живом glm-5 вызове; killed call оставил 0 записей), конфиг-паритет с pipeline-c1 подтверждён diff'ом (ровно две санкционированные дельты D20.3/D22.11). Текстовые дефекты отчёта (денежная опечатка ×10, смешение двух resume, «==» после redrive, «0 дрейфа») исправлены при лендинге с пометками (7ca14c2). Решения: 1. **Вердикт ратифицирован: критерии Ф1 выполнены как инфраструктурная веха — с оговорками**, дополненными верификацией: (а) объём — срез 25/2283 глав, полный объём двигается в этап B; (б) recall-тест coverage-гейта «≥90% искусственных пропусков» не гонялся (гейт OFF) — **задача бэкенд-пакету №5** (синтетический мини-набор пропусков юнит/интеграционным тестом, без wire); (в) grok-биллинг не мерен (glm-5 по D20.3) — закроется пилотом/чистым ключом; (г) budget_usd эскалации проверен только в направлении «>0 → стреляет», отказ по исчерпанию — в тест-лист №5. Ни одна оговорка — не машинный отказ. 2. **Alias-слепое пятно post-check зафиксировано** (найдено red-team-ревью): 1 дрейф-вхождение вне видимости флаггера — гл.18/0 рендерит 古月方源 раздельно «гу юэ фан юань» (против «гуюэ»×154 в корпусе); longest-match поглощает вложенный алиас (古月) внутри полного имени, dst родителя (方源→Фан Юань) присутствует → промах не фаерится. Истинная консистентность этапа A ≈99.5%, не 100%. Класс редкий (~1/190 поверхностей клан-имени); фикс в Ф1 НЕ заказывается; полигону — пометка класса в `06-memory-risk-registry` при следующем касании + учесть в методике D10-пересчёта этапа B. 3. **Развязка (а) — per-model floor `min_max_tokens`: РАТИФИЦИРОВАН схемой** (capability-слой models.yaml, НЕ комментарий): применяется при деривации max_tokens ЛЮБОГО вызова модели — праймари-аттемпты И эскалационные хопы (`stagerun.go:89-92`; хоп наследует бюджет праймари — `maybeEscalate`), ДО request_hash (wire-видимо). Флоры по quirks: deepseek-v4-flash/pro **8000**, gemini-3.1-pro-preview **8000**, kimi-k2.6 **16000**; glm-5/5.1 (reasoning off) и grok-4.3 (`reasoning_effort:none`) — без флора. Основание: эмпирика этапа A — хопы deepseek-v4-pro получили унаследованные 2048/3291, вернули finish=length (один — 0 байт контента), ~3× цены draft впустую; при реализации прайора эха ~25% (exp10/D18) на полной книге это ≈$3.6 эскалаций-пустышек и ~25% глав без перевода → **флор = блокер этапа B**. Резерв-инфляция EstimateUSD тривиальна (≤$0.10/вызов на самом дорогом тарифе); committed не растёт (биллинг по факту). Изменение wire → снапшот → **golden update ратифицирован** (процедура инварианта №8, D23.1). 4. **Развязка (б) — post-check `dstFormPresent`: правка КОДА, сид — дополнительно.** Код: базовый dst ВСЕГДА в множестве проверяемых форм (union `declForms ∪ normalizeTargetForm(dst)`, `mempostcheck.go:85-96`) — закрывает 37/55 ложных промахов (nominative_gap). Рациональ кода-над-сидом: базовая форма — сама approved-форма; требовать её дублирования в decl — избыточный ввод, на который наступит каждая будущая книга; правка только снижает false positives *(уточнение D28.1, поймано самим пакетом №5: строго — precision/recall-трейдофф; узкий реальный класс ложных пропусков — нарицательная база рядом «не по делу» при дропнутом термине; на данных этапа A recall не пострадал; **флип `postcheck_gate` в hard-gate требует пере-замера recall на нарицательных терминах**)*. Сид (полигон): дописать мн.ч. в `decl.forms` счётных терминов (元石/凡人/蛊师-класс) — закрывает 18/55 (inflection_gap); C4-автозаполнение decl остаётся Ф2. Правка кода меняет вердикты (verdict-ось) → golden update тем же пакетом; правка сида меняет memory content-hash (D8) → тот же resnapshot. 5. **Порядок этапа B (ответ на развязку хендоффа «до или после фиксов»): ФИКСЫ — ДО.** (i) бэкенд-мини-пакет №5 (п.3+4 код, coverage-recall тест п.1б, budget_usd-отказ тест, golden re-capture, mutation-verified) ∥ сид-обогащение полигона; (ii) ЕДИНЫЙ resnapshot; (iii) этап B на новом снапшоте: **скоуп переопределён владельцем — срез ~300 глав, проекция ~$4.9–6** (нужен «да» + потолок; рекомендация `book_usd≈7`; editor glm-5 — сравнимость с этапом A и D20.3). Этап B дополнительно обязан: echo-rate чекпоинт против прайора ~25% (статистика на ~680 чанках vs 3.5% этапа A на 57); контроль эскалаций после флора (length-класс хопов должен начать проходить ре-гейт; cjk_artifact-класс гл.1 останется — интринсик); перегенерация parallel-экспорта (stale ch1/4); методика D10-пересчёта — скриптом в артефактах. 6. **Ответы на вопросы отчёта владельцу:** №1 — скоуп B изменён владельцем на ~300 глав, потолок за ним; №2 — glm-5 (grok ждёт чистого ключа и нужен пилоту, не приёмке); №3 — сид дописать ДО этапа B (тот же resnapshot, что и фиксы; D10-флаггер на B становится осмысленным). ## 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**: минимальные пары 100–150 (естественные + контрфактуальные: отрицание, агент/пациенс, число, род, модальность), обязательная случайная выборка 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-провалы + 30–50 чистых выходов на язык + синтетические partial/tail-эхо; порог при фиксированном FP-бюджете; каузальная модель «регистра» для гейта НЕ нужна (контрольные ячейки D22.5 остаются некритичными). Формулировка критика «prompt mitigation только экономит fallback» принята с поправкой этапа A: сам fallback-хоп до D24.3 был сломан бюджетом. 8. **Остальное:** R9 (summary baseline: source-retrieval vs prose+citations vs typed claims на 20–30 дальних зависимостях ДО постройки typed claim store) — Ф2 design-gate, принят; R3/R8 — конвергенция без действий (= D15.2/D22.2 и D21.2–4), из 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. ## D26. Качество-первым: этап B заморожен, диагностика exp12 вперёд (11.07, решение владельца + оркестратор). ✅ **Триггер:** первое человеческое чтение продукта — владелец прочитал 25 глав этапа A (draft deepseek-v4-flash → editor glm-5 моно) и вынес вердикт: качество нечитаемо, слабейшее звено — редактура. Это ПЕРВЫЙ замер читаемости на реальной книге; он не противоречит D24 (приёмка Ф1 = инфраструктура по D1.1 и читаемость не мерила), но меняет очерёдность: масштабировать нечитаемый конфиг смысла нет. Наблюдение согласуется с тремя задокументированными рисками: редактор этапа A = glm-5 (замена D20.3; GLM-линейка — слабейшая в бейк-оффе exp04, glm-5 не перемерян), D1-моно оспорен (D17: −2.2…−5.6 MQM), рейтинг grok снят билингвально при боевом моно-промпте (quality-transfer риск exp08). Решения: 1. **Этап B (~300 глав) ЗАМОРОЖЕН** до достижения читаемого конфига на 25 главах (подтверждение — чтение владельца). D24.5-порядок (фиксы→resnapshot→B) не отменён — отложен; предусловия B пополняются: «читаемый конфиг ратифицирован». 2. **exp12 «диагностика качества» — приоритет №1 полигона** (промт `POLYGON_QUALITY_DIAG_SESSION_PROMPT.md`): армы на 3 чистых главах {draft-only · glm-5-моно(=этап A) · glm-5-билингв · grok-4.3-моно · grok-4.3-билингв · gemini-премиум-билингв · grok-моно-без-констрейнтов}; слепые пакеты владельцу-читателю (безκ-режим честно, N=1 — пре-скрин пилота, НЕ пилот); LLM-судьи вторично (кросс-семейные, свои выходы не судят, верность билингвально — «гладко-неверное» не побеждает молча); root-cause разбор 10–20 худших мест чтения (черновик/редактор/констрейнты/оформление). Кап $5; текущий xAI-ключ допустим (категория D19.4). Дефолт-конфиг по итогам меняется только ратификацией. 3. **Полигон №4 — второй приоритет** (сид мн.ч. без этапа B не горит; D22.8-очередь не отменена). 4. **Бэкенд не тормозится:** №5 без изменений (floor/post-check нужны любому конфигу); следующий пакет после №5 — D15.2 v3.1+реализация: пер-стадийный wireSnapshotID (D20.1-Q1) делает смену редактора без переоплаты черновиков — прямая синергия с качественной итерацией. 5. **Дорожка после диагностики:** пере-прогон 25 глав выигравшим конфигом (~$0.5–1) → чтение владельца → читаемо → этап B и подготовка пилота Ф2.5 (пилот остаётся решающей точкой; диагностика его не подменяет и не разбавляет — D25.2-гейт про билингв-якорь в силе). ## D27. xAI-ключевая политика: единый ключ с data-sharing для тестов/пилота, отключение перед продом (11.07, решение владельца). ✅ **Решение владельца 11.07 (амендмент D19.4/D20.3):** отдельный «чистый» xAI-ключ НЕ заводится. Текущий ключ — **с data-sharing** (промо; уточнение владельца — supersedes скобку D19.4 «без data-sharing»: либо устарела, либо была ошибкой записи) — используется для ВСЕХ тестов полигона И пилота Ф2.5; тот же ключ пойдёт в прод — **перед релизом data-sharing на нём отключается**. Рациональ владельца: промо-кредиты существуют ровно для тестов; не пользоваться ими странно. 1. **«Чистый ключ» СНЯТ из блокеров пилота** (правка D20.3). Блокеры пилота теперь: корпус 25–35 глав, аннотаторы ≥3, билингв-якорь (D25.9-Q1), проба судьи-дублёра 18+ (D22.6). 2. **Следствие для редактора:** вынужденная замена grok→glm-5 (D20.3) не нужна — grok-4.3 доступен на текущем ключе для exp12-армов, пере-прогона 25 глав и этапа B, если выиграет диагностику. 3. **Принятые владельцем риски (зафиксированы с калибровкой):** (а) 蛊真人 — чужой копирайт: data-sharing = передача текста в обучение (иная правовая поза, чем приватная обработка Р8) — принято для собственных тестов, для клиентских книг НИКОГДА; (б) NSFW-eval-история на аккаунте — риск бана принят, мониторинг политики xAI (D14.3) продолжается. 4. **Митигация контаминации (рекомендация оркестратора, дёшево):** на окно прогонов ПИЛОТНОГО корпуса (вебновеллы вне претрейна — их «чистота» = валидность замеров) data-sharing временно выключать, затем включать обратно; PD-классика и 蛊真人 (в претрейне) — шарить без ограничений. Статус: предложено владельцу, ждёт его «да/нет» к пре-регистрации пилота. 5. **Перед релизом:** механику отключения сверить с вендор-докой xAI (немедленность, независимость от промо-периода; уже переданное не отзывается) — правило двух направлений; задача уходит в чек-лист первого боевого прогона. ## D28. Приёмка бэкенд-пакета №5 (11.07 ночь, оркестратор). ✅ Внешнее ревью (5 осей: floor-wire / postcheck-union / golden-empty / tests-mutations / scope-report; всё исполнением в scratchpad-копиях при ДВУХ живых сессиях в дереве; ~10 мутаций переисполнено независимо, повторный `-race` после каждого реверта): **все оси ACCEPT, 0 critical/major. Пакет залендён (aa47e25).** Ключевая проверка: альтернативная гипотеза «floor/union мертвы (потому golden пуст)» убита исполнением в обе стороны — флор на фикстурной модели валит golden диффом wire-класса (11×max_tokens + snapshotID), oblique-only сид флипает postcheck-вердикты 2/1/2→1/0/1; пустой дифф — data-driven (фикстура нефлорнута, сид несёт базу первой формой). Scope чист (ровно 4 флора в models.yaml, PROGRESS — один аддитивный ханк, чужие exp12-файлы не тронуты, контрабанды нет). 1. **D24.4 амендирован** (поймано самим пакетом, подтверждено ревью репро 剑→меч): «recall не страдает» → честный precision/recall-трейдофф; флип `postcheck_gate` в hard-gate — только после пере-замера recall на нарицательных терминах (пометка внесена в D24.4). 2. **Ответы на оговорки пакета:** (1) расширение golden-фикстуры (флорнутая модель + oblique-only entry) — ПРИНЯТО как задача следующего ОСОЗНАННОГО golden-рефреша (реализационный пакет D15.2; ревью подтвердило исполнением, что это дифф вне санкции {a,b} текущего пакета — отложено корректно); (2) resnapshot реального конфига — ожидаем, ровно план D24.5; (3) композиция floor×global = max() подтверждена исполнением в обе стороны (global 9500 бьёт флор 8000; флор бьёт global 512). 3. **Fix-лист бэкенду (в реализационный пакет D15.2, попутно):** (а) mutation-pin fbHash-зеркала хопа — hop-checkpoint-replay тест (краш после settle хопа + resume при исчерпанном budget_usd: десинк fbHash↔runAttempt сегодня выжил бы сьют; кода-дефекта НЕТ — гэп покрытия); (б) note/реестр: `provider_local` MaxTokens-override молча побеждает флор на wire для local-моделей (сегодня флорнутых local нет — латентно, не пкг5-дефект); (в) косметика: коммент `mempostcheck.go:84` «D24.3/D24.4»→«D24.4»; (г) стейл-комменты models.yaml «чистый ключ/data-sharing» привести к D27 при следующем касании файла. 4. **Очередь бэкенда:** свободен. Реализационный пакет D15.2 (v3.1-правки D22.2 первым шагом + fix-листы D22.9/D23.4-остаток/D28.3) — промт выдаётся ПОСЛЕ развязки exp12: селективный reuse и смена редактора взаимодействуют (D20.1-Q1 пер-стадийная гранулярность), исход диагностики может добавить пакету требования — не плодить ревизии промта. ## 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 && reason≠glossary_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 zh→ru spot-check перед GOLD-парами пилота (лицензия GPL-3.0 — учесть в тулинге); (г) arity-полоса паспорта — с пином определения абзаца (диапазон 44–58% по метрике — ревью). 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 = **+15–25% (~$0.83–0.86/ранобэ)** — принято как цена качества (замер: вход редактора +60% токенов, книга +19%); «$1.5–2/ранобэ» = ОПЦИЯ Б (селективный апекс по exp08 + слой памяти) — отдельное решение владельца, НЕ подписано; проценты мемо (+117–190%) арифметически верны, но относятся к опции Б. 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, C0–C3) — «несколько бэкендов со своими пайплайнами качества» = несколько 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/. ## D31. Тотальная ревизия документации (12.07, оркестратор, по мандату владельца). ✅ Проект за 8 дней дорос до D30; половина «истин» в онбординг-доках перевёрнута (CLAUDE.md в шапке говорил «монолингвальный редактор grok-4.3»), PROGRESS распух до 393KB. Полный staleness-инвентарь мультиагентным аудитом (5 кластеров: architecture / experiments / research / PROGRESS / root+prompts; read-only, каждый клейм сверен с D-логом построчно). **Дисциплина: исторические записи НЕ переписываются (D23.3) — только баннеры/inline-пометки/архив/актуализация живых доков.** Применено: 1. **PROGRESS.md разделён (9e3762e):** закрытая хроника 04–10.07 (~330KB: день-0, стратревью, пакеты бэкенда №0–4, сессии полигона 1–3+18+, память/голос/ридер-IDE) → `archive/PROGRESS-2026-07-04-10.md` с точка-во-времени-баннером и **дословно сохранёнными заголовками** (на них ссылаются комменты кода `models.yaml:31`/`models.go`/`llm.go` и eval-скрипты — grep-совместимость). В живом файле: CURRENT-STATE + отчёт приёмки этапа A + оркестраторские записи 11–12.07 + якоря секций «Бэкенд/Полигон/Память/Голос/Ридер-IDE» для аппенда сессий. **393→63KB (~85–100K токенов экономии на онбординге).** Единственный числовой line-ref в репо (`05-decisions-log:122 → PROGRESS:230`, уже сломан дрейфом до сплита) и 5 name-refs живых доков репойнчены на архив. 2. **D-лог получил карту актуальности сверху** (что чем superseded — быстрый чек при чтении контракта); титул обновлён до D1–D31. 3. **CLAUDE.md актуализирован:** шапка-пайплайн (моно-grok → БИЛИНГВ-кандидат-glm-5, COGS ~$0.85), счётчик D1–D31, блок «Текущее состояние» под дорожку D30.9; гардрейл grok reasoning-off помечен «из редакторских ролей снят»; добавлен указатель на архив PROGRESS. Гардрейлы/зоны/онбординг-порядок — целы. 4. **Баннеры/пометки живых доков:** architecture — шапка-указатель на `01-decisions` (модели/цены проигрывают D-логу), точка-во-времени на `03-implementation-notes`/`07-strategic-review` (вердикты развязаны), inline на `02-mvp-plan` v3.2 (флип D1, дорожка), `06-memory-risk-registry` (+D24.2/G2/D28.1), критическая пометка §3.2 (content-hash, не счётчик — D8). experiments — **опасные editor-grok строки `00-provider-quirks` (reasoning-off = no-op редактор) исправлены** + gemini-судья/additive_total/преамбула-утечка дописаны; баннеры на `04-editor-quality` (рекомендация отменена) и `08-cost-model-v2` (до-D30 экономика); указатели на `09-pilot-protocol` (пост-D13 амендменты) и `07-coverage-precision` (content_filter жив на Gemini). research — баннер `04-api-providers` обновлён под D30, баннер `11-gap-2` (канал B пересобран), указатели `15`/`17` (флип D1 меняет editor-слот/§C), inline `13`/`14` (post-check реализован decl-путём, не pymorphy). 5. **Промты:** старые версии в архив (`ORCHESTRATOR v2`, `ACCEPTANCE v1`, `READER_IDE` — задача закрыта D29); **написаны заново: ORCHESTRATOR хендофф №3** (пост-D31, дорожка D30.9, столпы обновлены) и **ACCEPTANCE под пере-прогон+этап B** (баннерная стратегия старого исчерпала себя — три противоречащих слоя; сохранены золотой чек-лист методологии этапа A + re-gate верности D30.1 + методика D10 скриптом + alias-слепое пятно + echo-rate чекпоинт). 6. **Сознательно НЕ тронуто (низкий приоритет, покрыто картой актуальности D-лога):** `01-token-calibration`/`02-refusal-benchmark`/`10-explicit-benchmark` — нишевые закрытые эксперименты, стейл-части кросс-ссылаются корректно; правки backend/README (D1–D23→D1–D31, «D15.2 после правок») и eval/README (exp04/exp08-каветки) — ЧУЖИЕ зоны, переданы в fix-листы пакета D15.2 и exp13 (не правил из оркестраторской ревизии). Провенанс `12-*`-доков — по-прежнему открытый вопрос владельца. ## D32. Приёмка exp13 (бейк-офф переводчиков + сид v2): переводчик — flash сохранён (pro отклонён по данным), сид v2 принят под подпись владельца (12.07, оркестратор). ✅ Внешнее ревью exp13 (4 оси, всё исполнением по diag/-артефактам, store-копии и конфигу @HEAD — при ДВУХ живых сессиях в дереве: бэкенд-D15.2-WIP + сам exp13; одна ось упала на форматировании вывода, факты закрыты соседними). **Арифметика отчёта воспроизводится точно** (ранги API pro 2.50 < mistral 2.92 < grok 3.10 < flash 3.16 < glm 3.33 сходятся; гейты 30/30; бюджет $5.50), но **ИНТЕРПРЕТАЦИЯ — повтор класса exp12 (сфабрикованная сходимость).** Решения: 1. **Смена переводчика flash→deepseek-v4-pro — ОТКЛОНЕНА по данным. Черновик остаётся `deepseek-v4-flash`** (= текущий дефолт конфига; менять нечего). Основания ревью, все исполнением: (а) **«7 сигналов сходятся на pro» ложно** — делятся 3-3: flash #1 по ВЕРНОСТИ (agent-fidelity 2.0, API-fid 2.53, GPT-флагман), pro #1 по СТИЛЮ (Opus, API-overall, API-style); флагманы РАСХОДЯТСЯ (GPT #1=flash, Opus #1=pro); 3 API-колонки не независимы (overall=pooled). «#1 в 4/7» — реально 3. (б) **#1 у pro держится на gemini-судье** (leave-one-out: без gemini #1=mistral 2.76<2.82); **gpt-5-mini — названный якорь отчёта — ставит mistral #1, pro #3.** Точный failure-mode exp12. (в) **«У pro нет катастроф» ложно:** pro — ЕДИНСТВЕННЫЙ арм, переводящий заглавный термин 蛊 как «гусеницы» ×2 в тезисной фразе (внутренний десинк с «гу»/«гу-мастер» в том же выходе); оба флагмана флагнули. Катастрофа класса дефектов, которыми забракованы mistral/grok/glm. (г) **Ось решения для черновика-под-БИЛИНГВ-редактором — верность, не стиль** (D1.1/D30.1: редактор задаёт прозу, но не обязан восстанавливать искажённый/опущенный смысл): по верности flash ≥ pro; стиль редактор переписывает. Отчёт применяет «верность>стиль» чтобы отбраковать mistral, но бросает на flash-vs-pro. (д) **Цена:** pro ×3.7 flash; пере-прогон 25 глав → ~$0.63 (сверх оценки $0.4–0.6), этап B → ~$7.6. Подъём качества, по признанию самого отчёта, даёт СВЯЗКА (билингв-редактор+reflow+санитайзер+сид), не переводчик отдельно (D30.6-премисса подтверждена лишь частично, на стиле). **Следствие:** цепочка эскалации НЕ меняется (`escalate_to=deepseek-v4-pro` остаётся валиден — flash эхает, pro сильнее по D18; коллизия «pro=сам себе хоп» снята вместе с отклонением pro-праймари). Backend-конфиг стабилен. **Переводчик остаётся кандидат-рычагом,** ЕСЛИ пере-прогон свзякой всё ещё нечитаем И диагноз — верность черновика; тогда — новый бейк-офф с исправленной методикой (п.4). 2. **Сид v2 (D30.5) — ПРИНЯТ, гейтится подписью владельца.** Верифицировано исполнением: `guzhenren-seed-v2.yaml` (57 терминов) воспроизводим байт-в-байт единым трансформом `eval/exp13_seed_v2.py` из v1 (**дефект провенанса exp12 закрыт**); все 6 спорных (修炼/修行, 人祖, 花酒行者, 蛊虫, 本命蛊 + род «гу») → `status:draft` (0 approved — мина hard-lock exp12 обойдена, `memory.go:419` draft→soft-inject); бесспорные 8 правок + 5 добавлений → approved; **мн.ч. D24.4 влито (полигон-№4 сид-задача ЗАКРЫТА)**. Гейт: **владелец подписывает 6 спорных + род «гу» в `diag/glossary_v2_signoff.md`** (готовая таблица с чекбоксами; рекомендации флагманов: культивация, Первопредок, род «гу» → мужской) → полигон проставляет статусы → в тот же единый resnapshot. 3. **Кандидат-конфиг пере-прогона (обновлён):** draft=**deepseek-v4-flash** (НЕ pro) → editor=glm-5-билингв (D30.1) → reflow на ЗАЛЁНЖЕННОМ прод-промпте (D30.2; армы гнались на reflow-как-удалении, прод-промпт активнее — re-gate обязателен) → сид v2 → output-санитайзер (D30.3) → **re-gate верности span-цитирующим судьёй reasoning-ON** (D30.1). Единый resnapshot. Оценка пере-прогона ~$0.4–0.5 (flash-draft; без pro-надбавки). 4. **Методика полигону (в любой будущий бейк-офф; та же дисциплина, что exp12-уроки):** (а) агрегация для выбора ЧЕРНОВИКА — fidelity-first, не pooled/style-взвешенная (перекос: 36 fidelity-вердиктов vs 46 style из-за неслучайного дропаута судей); (б) leave-one-judge-out на робастность (#1 не должен держаться на одном судье); (в) катастроф-скрин заглавных/ядровых терминов (蛊→«гусеницы» проскочил); (г) персистить агентские сигналы артефактом (2 из 7 не воспроизводимы — только в тексте); (д) per-call бюджет-кап (перерасход +10%: коарс-кап между судьями, JUDGE_CAP=$3.5); (е) **сверить grok reasoning-token wire-квирк с docs.x.ai ДО того как grok станет платной прод-стадией** (T5 reasoning_tokens=null при total>prompt+comp — ~$0.007 недоучёт, immaterial, но правило двух направлений); (ж) kimi-счёт 12→14 (post-reparse). 5. **Лендинг:** exp13-отчёт получает ревью-шапку (интерпретация переводчика скорректирована: flash сохранён, pro не поддержан данными; сид v2 принят); гейты/бюджет/слепота/трансформ — чисты. Дорожка: **подпись владельца сида ∥ бэкенд-пакет D15.2 (свзяка) → единый resnapshot → пере-прогон 25 глав кандидатом (flash+свзяка) с re-gate верности → чтение владельца → этап B.** ## D33. Приёмка бэкенд-пакета D15.2 этап А (билингв-редактор + reflow + санитайзер + golden): принят, 2 обязательных фикса санитайзера до пере-прогона (12.07, оркестратор). ✅ Внешнее ревью (4 оси исполнением в scratchpad-копиях WIP, при чистом дереве кроме этого пакета): **golden ACCEPT, wiring ACCEPT, sanitizer/spec-scope ACCEPT_WITH_FIXES. Пакет залендён (00f8e36).** Верифицировано исполнением: (а) golden байт-в-байт воспроизводим (TM_UPDATE_GOLDEN=1 → тот же sha256), **дифф-класс ровно санкционированный** (санитайзер-fold + floor + D28.2-фикстура; 0 дрейфа term-order/injected-id на старых чанках), все 3 новых поведения **запинены мутацией** (floor 4000→4200, union-реверт ch5 postcheck 0→2, isFinal-guard removal ch6); (б) билингв {{text}} доказан рендер-пробой (edit-стадия USER несёт исходник перед черновиком; `stagerun.go:59` Text:ch.Text безусловно), reflow снят из обоих промптов + мандат репараграфизации, prompt_version бампнут в c1/c2, snapshot дополнительно хеширует PromptSHA256; (в) **конфиг-флип D32 соблюдён** — editor=glm-5, draft=deepseek-v4-flash, escalate_to=deepseek-v4-pro и цепочка [pro,glm-5.1,gemini] НЕ тронуты, grok как редактор отсутствует; (г) build/vet/test-race зелёные, спека v3.1 §0-бис — только дизайн (RequestHash/fast-path не тронуты — этап Б НЕ утёк), скоуп backend-only, деньги/схема/миграции не тронуты, контрабанды нет. 1. **Два ОБЯЗАТЕЛЬНЫХ фикса санитайзера ДО пере-прогона** (оба ревью нашло, backend-ревью пропустило; санитайзер enabled в c1). Правят вердикт-ось → **сворачиваются в тот же единый resnapshot пере-прогона + golden re-capture** (нулевая доп. цена — resnapshot и так предстоит): (а) **[major] хвостовой класс НЕ ловит «Основные правки для справки»** — ту самую gemini-утечку A5/5_1 (exp12:229), ради которой гейт enabled; ловит ведущую преамбулу, но не хвостовую форму → контаминированный чанк уйдёт в TM/экспорт без флага. Фикс: high-precision альтернатива на «основные правки/для справки» + fire-тест точной строкой 5_1. (б) **[major] класс «битые словоформы» ЛОЖНО флагает нормальную прозу** — «около колонны/колодца», «стало талой» фаерятся как реальный «Первок предок» (гард полиптотона исключает только префикс-вложенность, не случайное совпадение морфемной границы 4+ руны); «около» частый → флаг-шторм на 25 главах. Фикс: требовать перекрытия бо́льшей части ОБОИХ токенов ИЛИ снять класс (он и так признаёт, что канонический «Первок предок» не ловит — recall-gap до Ф2-морфологии). + clean-пины «около колонны»/«стало талой». 2. **Мелочи санитайзера (документировать как границы ИЛИ быстро сузить, не блокеры):** латиница-heavy на 5+ брендах (исключить капитализированные одиночные латинские токены); хвостовой «Примечание:»/«Комментарий:» в последних строках; «# # #»/«## ***» разделители (требовать букву/цифру после хешей); разговорный префикс «Конечно!/Готово!» перед преамбулой (recall — precision-over-recall дизайн, ок). Recall-gap «Первок предок» — **принятая граница до Ф2-морфологии**. 3. **Ответы на вопросы бэкенда:** (1) **editor grok-4.3→glm-5 — ПОДТВЕРЖДЁН** (D30.1: grok reasoning-off-редактор = ратифицированный no-op; glm-5-билингв — кандидат; оставить grok = противоречивый конфиг). (2) Латиница-мото/«Первок предок» как «принятые FP» — **частично отклонено**: recall-gap «Первок предок» принят, но FALSE-POSITIVE-классы («около колонны», латиница-бренды) фаерятся на легитимной прозе — НЕ приемлемо, чинить (п.1б/2). (3) **Да, этот resnapshot (промпты+editor-модель+санитайзер) = единый resnapshot пере-прогона** (D30.9) — в него же вливаются 2 фикса санитайзера + подписанный сид v2. 4. **Структурные ноты (fix-лист, не блокеры):** (а) `editor-mono.md` — свеже-производный (не старый editor.md дословно), с reflow, DORMANT (ни в один конфиг не подключён) — подключить к конфигу до пилот-арма D13.1 (reflow в моно-арме корректен: изолирует source-visibility как единственную переменную A/B); (б) санитайзер enabled в c1, ОТСУТСТВУЕТ в c2 (c2 — неисполнимый Ф2-скелет, нет Ф1-влияния; включить когда c2 оживёт — gemini-эскалация c2 тоже течёт); (в) golden НЕ пинит билингв {{text}}/reflow prompt_version (фикстура держит свой моно editor.md — инвариант №8 не покрывает эту wire-правку; follow-up: перевести golden-editor.md на билингв ИЛИ выделенный ассерт). 5. **Этап Б (реализация content-addressed resume) и В (`tmctl export`/annotations/override) — НЕ начаты, осознанно** (backend): Б трогает денежно-критичный resume-путь (RequestHash/fast-path) — рывковая частичная реализация рискует минами F1/D15 (тихая переоплата/stale-serve); Б связан (fast-path снимает loud-гейт согласия → dry-run обязан заменить §7 — всё-или-ничего). Спека v3.1 = дизайн-оф-рекорд, план §12 + тест-лист §12.9 готовы. **Порядок правильный: этап А гейтит пере-прогон, Б/В — нет.** Промт следующей бэкенд-сессии на Б+В — выдам после пере-прогона (исход чтения может уточнить экспорт-требования В). 6. **Дорожка:** обязательные фиксы санитайзера (п.1) — быстрый backend-follow-up ∥ подпись владельца сида v2 (D32) → **единый resnapshot** (промпты+editor+санитайзер-фикс+сид v2) → пере-прогон 25 глав (flash+свзяка, `escalation.budget_usd>0` — D22.11, иначе echo-эскалация не стреляет) с re-gate верности → чтение владельца → этап B. ## D33.1 — ЗАКРЫТ (12.07): 2 обязательных фикса санитайзера залендены и приняты. ✅ Мини-сессия по `BACKEND_SANITIZER_FIX_SESSION_PROMPT.md`. Верификация исполнением (сфокусированный агент в scratchpad-копии, все 6 осей): **ACCEPT, залендено.** (а) хвостовой класс теперь ловит «Основные правки для справки:» (gemini-утечка A5/5_1) + colon-вариант, НЕ фаерит нарратив «Основные правки внёс редактор» — 2 fire + 1 clean-пин; (б) класс «битые словоформы» СНЯТ целиком (backend-разбор: порог не отделяет «около колонны» от «Первок предок», у реального доля перекрытия даже ниже; канонический дефект и так не ловился → умнее убрать шумный класс, чем подкручивать), оставлены 2 zero-FP сигнатуры (невалид ь/ъ, кир+лат гомоглиф) — 3 clean-пина «около колонны/колодца», «стало талой»; мелочи D33.2 (# # #-разделители, латиница-бренды) сужены. Golden re-capture — дифф-класс РОВНО version-fold (sanitizer-v1→v2; маскированный дифф пуст, 0 дрейфа disposition/flag/final_text/cost/postcheck/injected_ids/term-order, 206=206, регенерация байт-в-байт). build/vet/test-race зелёные, скоуп 3 файла + журнал, stdlib-only, контрабанды нет. **Принятая граница (документируется рядом с recall-gap «Первок предок»):** строка-ОПЕНЕР абзаца «Основные правки … для справки предоставил …» ещё фаерит — редакторский регистр, не проза; неизбежная поверхность «для справки»-гейтящей сигнатуры (снять = потерять целевую gemini-утечку); precision-over-recall → редкий FP деградирует один чанк, не портит выход. **Санитайзер как блокер пере-прогона снят** (D33.6-предусловие №1 закрыто); остаётся сид v2-финализация (полигон) + единый resnapshot. ## D34. Сид v2 ПОДПИСАН владельцем + гейт repoint приёмочного конфига перед пере-прогоном (12.07, оркестратор). ✅ Полигон сдал сид v2 под подписью владельца (закрытие D32.2/D30.5). Сверено прямой проверкой файла (`guzhenren-seed-v2.yaml`): все спорные → approved с ФАКТИЧЕСКИМИ формами владельца (часть переопределена против sign-off-таблицы — решения владельца, в протокол): 1. **Владельческие формы (инвариант — в D-лог как факт):** - 人祖 → **Жэнь Цзу** (НЕ «Первопредок»; транслит). - 花酒行者 → **Монах Цветочного Вина** (НЕ «Странник Цветов и Вина»/«Винный Странник»). - 本命蛊 → **гу Жизни** (возврат к v1; НЕ «жизненный гу»). - 古月山寨 → **деревня Гуюэ** (+ выровнены 白家寨/熊家寨 → «деревня Бай/Сюн» ради консистентности 寨). - 元石 → **первобытный камень** (+мн.ч.; НЕ «изначальный»/«первокамень»). - Подтверждены без изменений: 蛊虫 гу-червь · 修炼/修行 культивация · 空窍 апертура · 元海 море истинной ци. - Род свободного «гу» (蛊) → **мужской** (владелец принял; документарно — 蛊 инвариантен, НЕ на hot-path A3 → не hard-constraint, согласование мягкое). Провенанс: `eval/exp13_seed_signoff.py` (воспроизводимый трансформ) + лог `diag/glossary_v2_signoff_applied.md`. 10 оставшихся draft — не-спорные v1-остатки (甲乙丙丁 разряд А–Г, 南疆 Наньцзян, 沈嬷嬷, пара гу-имён) — инъектятся ⟨проверить⟩ (soft), resnapshot не держат; смести отдельным проходом при желании владельца (не блокер). 2. **⚠ ГЕЙТ: приёмочный конфиг РАССИНХРОНЕН — repoint ОБЯЗАТЕЛЕН до пере-прогона** (поймал полигон, подтверждено прямой сверкой). `acceptance/book.yaml` → `glossary_seed: guzhenren-seed.yaml` (сид **V1**); `pipeline-acceptance.yaml` → `prompt_version: v0-draft/v1-monolingual` (**моно-редактор, БЕЗ reflow** — до-D30 состояние). Наивный `--resnapshot` на нём тихо заснапшотит СТАРЫЙ сломанный конфиг → весь пере-прогон впустую (класс «тихо неправильный снапшот», F1/D15). **Требование к пере-прогону (в ACCEPTANCE-промт, усилено):** первый шаг сессии — ПЕРЕСОБРАТЬ приёмочный конфиг из БОЕВОГО `pipeline-c1.yaml` @HEAD (post-D33: draft=deepseek-v4-flash `v1-reflow`, editor=glm-5 `v2-bilingual-reflow`, escalate_to=deepseek-v4-pro, sanitizer.enabled=true) + book-side дельты: `book.yaml glossary_seed → guzhenren-seed-v2.yaml`, `escalation.budget_usd>0` (D22.11). **Свежий store** (новая БД — избежать stale-чекпоинтов старого прогона; «единый resnapshot» = все правки в одном новом снапшоте, НЕ --resnapshot старого). Промпты/пороги НЕ трогать — брать из pipeline-c1. 3. **Fidelity re-gate (D30.1, закрытие вакуума D1.1) — НЕЗАВИСИМЫМ судьёй.** Пере-прогон переводит; **fidelity re-gate гонит ПОЛИГОН** (не сессия-переводчик — author≠reviewer): span-цитирующий судья верности reasoning-ON + охота на класс инверсий правки (exp12: билингв-редактор внёс «пожертвуй мной»). Без него пере-прогон НЕ засчитан. 4. **Гейт пере-прогона СНЯТ по всем блокерам:** санитайзер-фикс (D33.1) ✅, сид v2 подписан (D34.1) ✅, переводчик flash (D32) ✅, эскалация не тронута ✅. Осталось: repoint конфига (D34.2, делает сессия пере-прогона первым шагом) → пере-прогон 25 глав связкой с re-gate → **чтение владельца** (арбитр читаемости). ## D35. Пивот после пере-прогона: цикл прогонов закрыт (инфра ✅/читаемость ❌ = не провал), планка = 2 претензии владельца, «мерить→строить» (12.07, оркестратор). ✅ Владелец прочитал пере-прогон 25 глав связкой (flash `v1-reflow` → glm-5 `v2-bilingual-reflow` + сид v2 + reflow + санитайзер): **«лучше (из-за сида), но крайне слабо художественно»** — 2 претензии: (1) нет логической редактуры абзацев / конвенций русского; (2) места, где модель не понимает связей/смысла. Внешнее ревью (3 оси исполнением по копии re-run store + логам/выходам; одна ось упала на форматировании, факты закрыты соседними). **Конфиг-корректность подтверждена (снапшот несёт v1-reflow/v2-bilingual-reflow/сид-v2 — НЕ старая моно-мина D34.2 → вердикт валиден).** Решения: 1. **Диагноз ПОДТВЕРЖДЁН исполнением: «слабо» — настоящий недострой машинерии качества (Ф2) + near-term промпт/нарезка/глоссарий-рычаги, НЕ тихий баг.** Все баг-гипотезы опровергнуты: reflow ПРИМЕНЁН (блочные абзацы 1.6 предл./строка, не построчно этапа A — но ЗЕРКАЛИТ рубленость исходника, не сливает в русские абзацы = промпт-рычаг, фиксимо сейчас); билингв-редактор АКТИВЕН (draft→final sim 0.643, 34/55 сильно правлены — не пассивен как моно exp12); сид v2 инъектится (628 хитов; Монах Цветочного Вина/гу Жизни/первобытный камень в выходе). Различие полигона **внутри-чанк (промпт-фиксимо: чанк пакует ~34 абзаца) / кросс-чанк (~1.28 стыка/глава = Ф2)** — эмпирически верно. **Флор D24.3 валидирован в проде** (эхо-эскалация ch16/0 → pro@max_tokens=8000 → реальный результат 5966 симв., не пустышка/length — прод-подтверждение фикса пакета №5). 2. **РАТИФИЦИРОВАНО (а) закрытие цикла приёмочных прогонов** — инфра ✅ (деньги D15.3-направление, kill-9, echo-эскалация, санитайзер 2TP/0FP, spine 25/25) / читаемость ❌ (блок на непостроенной Ф2) = **НЕ провал** (инфра — переиспользуемая ценность); идентичный пере-прогон = 0 decision-relevant информации (потолок структурный, стохастичный ре-дро не двигает). **(б) планка приёмки впредь = 2 претензии владельца** — но **ЯВНО ИНТЕРИМ пре-скрин** («лучше фана», D30.7), НЕ вердикт пилота Ф2.5 (D25.2-гейт: диагностики не подменяют/не разбавляют пилот; ≥3 аннотатора + билингв-якорь по-прежнему гейтят настоящий вердикт). **(в) последовательность «ты→ресёрчер→полигон→бэкенд» (мерить→строить)** — Р2/эмпирика-первой; бэкенд строит только под доказанный полигоном ROI. 3. **Ключевой невыжатый рычаг подтверждён: ось «нарезка × промпт»** — (глава целиком | чанк) × (сильный дискурс-промпт | текущий) — exp04/12/13 её НЕ крутили (варьировали только МОДЕЛЬ в фикс-нарезке; reflow-промпт уже вшит). Дешёвая высокоценная проба. **Фронтир-арм (владелец согласовал трату)** — ДИАГНОСТИКА потолка (модели vs наша нарезка/промпт), D30.7-совместимо (не прод-обязательство). 4. **РЕАЛЬНЫЕ фиксы до качественной работы:** (а) **[major] экспорт-баг:** санитайзер-флагнутые чанки экспортятся ПУСТЫМИ (ch5/0, ch20/0 — ~44% зачина глав 5/20 молча выпали; текст правки цел, дефектен только ведущий `###`). Фикс: экспорт стрипает ведущий заголовок ИЛИ фолбэк на draft, НЕ дропает (бэкенд-fix-лист; связано с D29.1а export-нормализация). **Полигон ОБЯЗАН исключить/починить ch5/ch20 до слепых пакетов** (дыры спутают художественную оценку). (б) заголовок `###` рождается в ЧЕРНОВИКЕ deepseek (не glm-5 — атрибуция минор-бэклога исправлена) → фикс целить в translator.md/экспорт. (в) дешёвый глоссарий: засидить разряд 甲乙丙丁/资质 (raw-китайский в ch4/1 = видимый худ-дефект; часть претензии 2 глоссарий-адресуема, не Ф2). (г) **fidelity re-gate (D34.3) остаётся ЖЁСТКИМ гейтом** — не waived под «цикл закрыт»; квантифицирует претензию 2 + ловит инверсии активного редактора (ch11/0 аутлайер: редактор расширил 3009→4631 при draft finish=stop, sim 0.064 — вопрос верности). 5. **Промт ресёрчера — НЕЙТРАЛЬНЫЙ (анти-анкоринг D25.10):** ревью поймало, что §3 хендоффа встраивает наши выводы (лестница Ур.3 draft=чанк/edit=глава, рамка «без Ф2») при декларации анти-анкоринга — ровно D25.10-ловушка. Промт (`RESEARCHER_QUALITY_SESSION_PROMPT.md`) даёт только 2 претензии + сырьё/код, спрашивает ОТКРЫТО (на какой гранулярности/промпте работает дискурс-литперевод zh→ru, где потолок, что рекомендует фронтир/академия/MTL-прайор-арт для кросс-чанк переверстки + понимания связей); наши гипотезы (лестница, draft=чанк) — НЕ выдавать, ресёрчер фиксирует свою рамку ПЕРВЫМ. 6. **Промт полигона (после отчёта ресёрчера) — эмпирика:** ось нарезка×промпт (прямыми вызовами, чанк-арм воспроизводит прод-инъекцию как якорь), фронтир-арм (гарды: эхо-скрин/исключить grok на архаичной ch1 — D22.5; self-family exclusion для фронтир-мета-ревьюера; per-call кап + пре-регистрация — exp13 перерасход +10%), кривая размер-чанка↔качество↔биллинг↔ретраи, fidelity re-gate, слепые пакеты владельцу; методика-guard D32.4 (fidelity-first, leave-one-out, катастроф-скрин, per-call кап, независимость сигналов). Fidelity re-gate (`rerun/FIDELITY_REGATE_HANDOFF.md`) — независим от ресёрчера, полигон может гнать параллельно. 7. **Бэкенд (§5 хендоффа) — не сейчас, только под доказанный ROI.** Кандидаты: развязка `draft=чанк/edit=глава` (Ур.3 — **runner-уровень**: per-stage гранулярность + TM/resume-ключ, Р2/Р6), сильный дискурс-промпт, адаптив-к-главе размер, затем Ф2 (аннотатор/судья/reference-тома). Минор-бэклог: экспорт-`###`-нормализация (D29.1а), 修炼/修行→«культивация» (владелец подписал D34.1 — намеренно). ## Сопутствующие правки доков (оркестратор, 09.07) `02-mvp-plan.md` → v3 (мёртвые пороги/интерим-18+/фазовые списки синхронизированы с D-логом); обе `*.puml` → v3 (убраны Opus/BYOK/«≤2×», дорисованы ре-гейт эскалации, три класса отказов D12, человек в петле, фазовые пометки); superseded-баннеры на `research/01, 02, 03, 04, 09`; провенанс-шапки на `research/12-architecture-as-antipattern.md` и `12-common-failures.md` (происхождение не зафиксировано — до уточнения владельцем числа оттуда не абсорбировать как факты); закрытые промты → `docs/archive/prompts/`; онбординг: корневой `CLAUDE.md` + `backend/README.md` + `eval/README.md`. ## D36. Приёмка research/18 (два независимых отчёта рычагов качества) + выдача промта полигон-эмпирики (12.07, оркестратор №4). ✅ Оба отчёта (`research/18-quality-levers.md` — сессия-ресёрчер Claude, анти-анкоринг; `research/18-quality-levers-chatgpt.md` — параллельный ChatGPT, запущен владельцем) отревьюированы и залендены с ревью-шапками. Внешнее ревью — мультиагентный воркфлоу 26 агентов ($0, refute-by-default, author≠reviewer; первоисточники через web + реплика сырья `rerun/records.json`+`rerun-ru.txt`; заморозка §A сверена крипто). 1. **ВЕРИФИКАЦИЯ (исполнением/первоисточники):** (а) **§A-заморозка Claude sha256 `44f90364…` воспроизведена побайтно из закоммиченных байтов BEGIN..END → MATCH** → §A доказуемо не редактировалась после заморозки (мой самый сильный анти-ретро-подгон контроль). (б) **57/57 несущих цитат СУЩЕСТВУЮТ — 0 сфабрикованных**, включая ВСЕ «2026»-препринты (2601.08070/2605.31056/2605.29800/2605.13596/2605.13368/2511.09796 — резолвятся к заявленным заголовкам; главный риск галлюцинации фан-аута снят). 50/57 claim-fidelity полная, 7 «частично» (источник реален, атрибуция переисчерпана). (в) **Эмпирика воспроизведена:** ch5.0 (5425→ПУСТ `sanitizer_defect`)+ch20.0 ТОЧНО; CJK-утечка 13 финалов точно (draft-«21» включает U+3000-отступ → настоящих 9); 41/51 ~1:1 в допуске; ChatGPT-«95.3% строк-абзацев» точно (но частично артефакт формата — метрика Claude «медиана 1 предл./абзац» проб́ивнее); gl.7-инверсия/gl.8-сплющивание фактически ЕСТЬ (тяжесть — на fidelity re-gate). (г) **Ван Цуй (несущий вклад) ПОДТВЕРЖДЁН по ТЕЛУ статьи** (скептик-агент декодировал CID/Identity-H шрифт PDF ~42к симв.: 5 техник + причастные/деепричастные обороты + подчинение + прескриптивная необходимость; Вестник МГУ Сер.22 2024№3 с.86–105, рецензирован). 2. **ВЕРДИКТЫ. Claude — ACCEPT_WITH_FIXES** (5 поправок в ревью-шапке, §A заморожена → правки в шапке+§E: [цитата] DocRepair-числа принадлежат D19-1081/1909.01383 не P19-1116 — числа ВСЕ верны; TransAgents двойная-метка PP/TACL; Z5 автор Dingxu Shi не Li&Thompson; [рамка] Ван Цуй = прескрипция ТЕХНИКИ zh→ru, не «связующая норма языка» — норму держат Розенталь/Правила-1956; «пост-черновая регрессия > 2 претензий» пере-возвышена — ярчайший кейс ch5-void = экспорт-баг, не порча смысла). **ChatGPT — ACCEPT** (цитатно-чист на всех спот-чеках, хеджирование дисциплинировано, §C — самый прямо-исполнимый скелет полигона; оговорки: §A-заморозка НЕ воспроизводима из документа (плейсхолдер вместо байт-маркеров) = дисконт на вес сходимости; §C4-гейт не ссылается на мандатный re-gate D34.3). 3. **«Тройная сходимость» — калибрована (не разворот, D25.10 взята честно).** Оговорка про общую внешне-лит-ногу присутствует; уточнения оркестратора: (а) вторая необъявленная общая нога — оба §A читали одно сырьё/код (совпадение по «изоляция чанков/инертный reflow» тоже не независимо); (б) цитатные базы двух отчётов почти НЕ пересекаются (~3 общие статьи) → где литература расходится, совпадение вывода сильнее; (в) ChatGPT-заморозку класть с дисконтом. Итог: карта «строить» держится, но не как «3 независимых голоса» — как «2 внешние карты (с общими ногами) ⟂ эмпирика команды». 4. **АБСОРБЦИЯ.** (а) **Ван Цуй-контент (5 техник + причастно-деепричастный инструмент) → в дискурс-reflow-промпт полигона** — прямой zh→ru ответ на вопрос владельца «конвенция языка, не стиль автора» (апгрейд research/16 «слияние дискреционно» → «слияние — требуемая переводческая операция, и КАК»). (б) **Экспорт-баг ch5/ch20 подтверждён двумя независимыми репликами** → усиливает бэкенд-fix D35.4a (не новый). (в) **CJK-утечка в ФИНАЛ (13 строк, вкл. 特产 ch8, 资质乙等-разряды ch4.1)** — часть внесена редактурой → цель детерм. reflow-постпроцессора (§C#4 «CJK-глиф=0») + глоссарий-засид 甲乙丙丁 (D35.4в). (г) слой «пакет конвенций пары» — идея в бэклог архитектуры (зона оркестратора/бэкенда), стройка под ROI. 5. **ВЫДАН промт полигон-эмпирики `POLYGON_QUALITY_EMPIRICS_SESSION_PROMPT.md`** (D36; ратифицирует §C обоих отчётов в исполнимый дизайн): скелет §C ChatGPT (P0-baseline → армы с фаза-тегами → пре-рег метрики/гейты → дерево решений) + графт из Claude (Ван Цуй-контент reflow-промпта, COGS-модель кириллица-фертильность/cache-ordering, привязка мандатного re-gate D34.3); **добавлены** недостающая ячейка `текущий-промпт × глава` (полный 2×2 нарезка×промпт — оба отчёта её не крутили) и явный чистый baseline; **ch5/ch20 исключены/чинятся до слепых пакетов** (дыры спутают худ-оценку). Гарды: fidelity-first, leave-one-out, катастроф-скрин, per-call кап (exp13 +10%), эхо-скрин/grok-off на архаичной ch1 (D22.5), self-family exclusion фронтир-мета-ревьюера, пре-регистрация до платных вызовов. Fidelity re-gate (D34.3) — параллельно, независимо. 6. **Курс не разворачивается.** research/18 — вход эмпирики, НЕ приговор; планка = 2 претензии владельца (ИНТЕРИМ пре-скрин, D35); пилот Ф2.5 остаётся решающей точкой и не разбавляется. Порядок: полигон-эмпирика → владелец читает результат → решение «дешёвый трек дотягивает / нужен фронтир / нужна Ф2» → бэкенд под доказанный ROI. ## D36.1 — Документационная гигиена + подтверждённые бюджеты ключей (12.07, оркестратор №4, по запросу владельца). ✅ 1. **Заархивированы 5 спент/superseded промтов** в `docs/archive/prompts/` (git mv, история журнала/D-лога НЕ переписана — D23.3, только карта актуальности): ресёрчер research/18 (→D36), exp13 (→D32), санитайзер-фикс (→D33.1), **приёмка v2-пере-прогон** (цикл прогонов ЗАКРЫТ D35 — идентичный ре-прогон = 0 инфо), **D152-этап-А** (→D33; этап Б/В — СВЕЖИЙ промт после качественной развязки, дизайн-оф-рекорд = спека D15.2 v3.1). **НЕ архивирован `POLYGON_PACKAGE4_SESSION_PROMPT.md`** (проверка по запросу владельца): как сессия НЕ запускался; отработана только task-1 сид-мн.ч. (влита в exp13/D32); **residual ЖИВ и НЕ пуст — пилот/18+/echo-трек, ОРТОГОНАЛЬНО exp14:** D22.6 судья-дублёр (НАЗВАННЫЙ блокер пилота), D25.7 echo-калибровка, миграция `memory_eval` с gemini-2.5-flash (EOL 16.10), пилот-пре-рег (`09-pilot-protocol.md`), D21.9 P4 fidelity-хвост, D22.8-минорки. Оставлен активным как residual-трекер со статус-баннером; НЕ вносить в exp14 (разбавит SFW-пре-рег); переупакуется в пилот-преп-промт при активации пилота. **Активны:** `ORCHESTRATOR_*` + `POLYGON_QUALITY_EMPIRICS_*` (exp14) + `POLYGON_PACKAGE4_*` (пилот-residual, отложен). README-карта актуализирована; титул контракта D35→D36. 2. **Бюджеты ключей подтверждены владельцем (12.07):** OpenAI ~$9, Gemini ~€2.6, DeepSeek/ZAI(glm)/Kimi/xAI(grok)/Mistral ~$9 каждый; ДРУГИХ ключей нет; «полигон делает что нужно в этих рамках» → снимает блокер фронтир-`ceiling` из D36. **Импликация exp14:** Gemini-бюджет крошечный (€2.6, thinking = аддитив-биллинг) → фронтир-переводчик/редактор преим. **GPT-5** ($9); Gemini — экономно, лучше кросс-семейным мета-ревьюером (self-family exclusion); grok ($9) доступен, НЕ на архаичной ch1 (D22.5); Claude/Opus нет. Per-call predicted-cost кап + пре-рег остаются (exp13 +10% урок). Записано в промт полигона. ## D37. Приёмка exp14 (эмпирика рычагов качества: нарезка×промпт + фронтир 2×2 + fidelity re-gate + кривая) + слепое чтение владельца + схема разрядов (12.07, оркестратор №4). ✅ Полигон прогнал exp14 (P0/P1a/P1b/P1c + аблации layout/2pass/ref + фронтир 3-семейный F=gpt-5.4/G=gemini/X=grok × base/disc + кривая нарезки + fidelity re-gate + слепые финалисты). Владелец прочёл монитор (3 главы, слепо) + 2 внешние сессии (ChatGPT+Claude). Независимая верификация — 7-агентный воркфлоу (span-уровень, refute-by-default, реплика сырья, $0). **Отчёт был закоммичен инкрементально сессией (6 коммитов) — отклонение от «лендит оркестратор»; принято как есть (историю не переписываю), верификация пост-хок.** 1. **ВЕРДИКТ ACCEPT_WITH_FIXES (ИНТЕРИМ пре-скрин, НЕ пилот).** Лучший по дисциплине прогон: сам поправил переобобщение партии 1 (floor→model-specific), демотировал своего фаворита A-2pass на верифицированной катастрофе, отказался менять дефолт. 2. **РАТИФИЦИРОВАНО (несущее, верифицировано span-уровнем):** (а) **Претензия 1 (абзацы/конвенции РЯ) = рычаг ПРОМПТА/активации, НЕ модель** — F-base (gpt-5.4+текущий промпт) рубит ХУЖЕ P0 (пересчёт 1.75<1.95 spp); дискурс-промпт реверстает у всех семей; «сильнее модель» абзацы НЕ чинит. Ход: дешёвый дискурс-reflow-промпт (Ван Цуй, ОДИНАРНЫЙ пасс) + крупная edit-единица (кривая: крупнее чанк = дешевле И лучше абзацы, но на 2 главах/0 ретраев — направленно). (б) **A-2pass НЕ рекомендован** (2-й пасс дрейфует — span: 人上之人→«среди людей», одинарный P0 починил). (в) **Дрейф разрядов 甲乙丙 = реальный читательский дефект** (span ch9.1/ch18.1/ch16.0 + 2 внешние + владелец) → **владелец зафиксировал схему: кириллица «класс А/Б/В/Г», развести с 转→«ранг», принудительная сверка** (D35.4в апгрейд в приоритет; курация сида → полигон/бэкенд-глоссарий). (г) **Класс инверсий редактуры D34.3 РЕАЛЕН** — ~5–6 верифицированных редактор-порч смысла (ch10.1 числа 10×; ch9.1/ch15.1 ранг; ch13.1 эмоция; ch16.0 иерархия+CJK-утечка; ch18.1 грейд) → reflow-армам нужен omission/inversion-гард; пере-прогон засчитан НЕ полностью. 3. **ПОПРАВЛЕНО верификацией (НЕ абсорбировать как есть):** (а) **«13 катастроф» ЗАВЫШЕНО** — 10/13 от kimi (ошибся 29/55 + оверфлаг); ~7 флагов = judge-FP/минор, вкл. **ch11.0 (аутлайер D34.3-хендоффа) — редактор его УЛУЧШИЛ** (полнее + починил инверсию черновика 瞳孔猛缩). Реальный хвост ≈5–6. (б) **§2Б.3 «панель литерал-смещена → P0 не вернее» = ПЕРЕ-НАТЯЖКА**: панель единогласно ставит P0 вернее на ch17/18/19; T1-катастрофа (ch7) — ВНЕ ранг-выборки (категориальная ошибка); IN-SAMPLE спан ch17.0 ВЫГОРАЖИВАЕТ P0. На типовых главах верность дешёвой в порядке (= чтение владельца); превосходство F-disc по верности внутренне НЕ доказано. Не дисконтировать свою панель ради фронтира (мемо #2/#4). (в) **«0 ошибок» неточно** — 36 вызовов ошиблись+билленулись ($0.89/~10%); капы соблюдены, деньги $8.67 (в 2%). 4. **ХОЛД — нога 2 (селективная эскалация смысл-риска на gpt-5.4) НЕДО-МОЩНА.** Факт (glm/grok/gemini инвертируют двойное отрицание T1, только gpt-5.4 чинит) ВЕРИФИЦИРОВАН, НО на 1 конструкции + одно-судейно на фронтире (gpt-5-mini self-excluded). Дорогое COGS-routing НЕ ратифицировать до батареи смысл-трапов. **Ответ «модели vs организация» расщепляется:** претензия-1 = организация (дёшево, ратифицировано); претензия-2 = типовые главы дешёвая тянет, но хвост жёстких смысл-трапов (двойн.отриц./числа/ранг) валит дешёвую И grok/gemini — только gpt-5.4 → мерить, потом коммитить. 5. **СЛЕДУЮЩИЙ ПОЛИГОН-ШАГ (свежий промт, exp14b):** батарея смысл-трапов (≥3–5 типов инверсий/чисел/ранга/кросс-граница, ≥2 кросс-семейных фронтир-судьи) для ноги-2 + **ранжирование P1a (рекомендованный near-term конфиг) head-to-head против F-disc** (финалисты его исключили — прямых данных P1a-vs-фронтир НЕТ) + omission-гард. Дешёвые фиксы (промпт-глоссарий/санитайзер) — параллельно. 6. **ПРОЦЕСС:** сессии фризят ТОЛЬКО пре-рег, батчи — оркестратору на лендинг (exp14 закоммитил 6 батчей сам — впредь тайтить). Курс не разворачивается; планка = 2 претензии ИНТЕРИМ; пилот Ф2.5 не разбавляется. ## D38. Приёмка exp14b (батарея смысл-трапов = нога-2 + ранг P1a↔F-disc): «только gpt-5.4» ОПРОВЕРГНУТО, фронтир в дефолт не нужен, корень терм-дрейфа = статус-draft сида (12.07, оркестратор №4). ✅ exp14b (D37-мандат) прогнал батарею DET-смысл-трапов (5 классов a/b/c/d) × 6 семей-редакторов (glm-5/gpt-5.4/grok-4.3/deepseek-pro/mistral/kimi, промпт-константа = дискурс) + SOFT (чэнъюй/кореф, ≥2 кросс-семейных судьи) + P1a↔F-disc. Сессия **НЕ коммитила батчи** (процесс-фикс D37 отработал; §1-пре-рег заморожен 48e3f39, §2 залендён мной). Независимая верификация — 3 параллельных агента span-читкой сырья ($0). **Мандат самопроверки (CLAUDE.md 12.07) отработал: self-review сессии сам поймал+починил 2 бага до вывода.** 1. **ВЕРДИКТ ACCEPT_WITH_FIXES (ИНТЕРИМ пре-скрин).** Лучший по дисциплине прогон (self-review, ≥2 судьи, ручной DET span-read вместо брикнутого авто-скорера, честные 13 ошибок, 6 семей, дефолт не менял). 2. **РАТИФИЦИРОВАНО (span-верифицировано):** (а) **Нога-2 exp14 «только gpt-5.4 чинит смысл» ОПРОВЕРГНУТА** — на крит-трапе a1 (двойн.отриц `没有一个不知道`) **deepseek-pro И mistral чинят** то, что glm-5 И grok ИНВЕРТИРУЮТ (в «ни один»); gpt-5.4 тоже чинит, но он «самый ровный», НЕ «единственный». **Дешёвый mistral ($0.5/$1.5) чинит то, что текущий дефолт glm-5 ($1/$3.2) инвертирует — и дешевле.** exp14-экстраполяция (n=1 фронтир, 1 судья) была артефактом. (б) **Провалы РАЗБРОСАНЫ по модель×конструкция** (a1: glm+grok; c1 人上之人: grok+deepseek; c3: glm+mistral) — нет модели безупречной/безнадёжной, нет одной эскалации на всё → **смысл-floor УЗКИЙ и РАЗБРОСАН**, не широкий. (в) **Фронтир (gpt-5.4) в дефолт НЕ нужен:** абзацы — P1a(glm-дискурс) ≈ F-disc(gpt-5.4) по mean_spp (тай 2.56/2.65); смысл — дешёвые mistral/deepseek-pro чинят крит-трапы. Дорогая gpt-5.4-эскалация пере-взвешена ВНИЗ. (г) **Soft: 0 катастроф ≥2-глазами** (все CAT-флаги одно-судейны, mistral-судья оверфлагает); чэнъюй-сплющивание (物是人非) универсально → рычаг промпта/глоссария, не модель. 3. **КОРЕНЬ ТЕРМ-ДРЕЙФА НАЙДЕН (глоссарий-статус, НЕ непонимание модели) — верифицирован по коду:** важные термы в сиде `status:draft` → `renderEditorConstraintBlock` (`memory.go:489`, CONFIRMED-only) их НЕ инъектит в editor-констрейнт; хуже — `suppressContained` (longest-match A3) СЪЕДАЕТ верный approved `族长→«глава клана»` (вложен в draft-длинный `四代族长`), оставляя только approved-соседа `家老→«старейшина»` → глоссарий-обедиентные glm/mistral подтянули «старейшину». **Draft-запись АКТИВНО ВРЕДНА.** **Фикс (владелец направил):** promote грейды `甲乙丙丁`(→dst «класс А/Б/В/Г», D37)+`四代族长` **draft→approved** (enforce) + reseed; owner-only (approved-инвариант). Это дешёвый ДЕТЕРМИНИРОВАННЫЙ фикс, не модель-проблема. 4. **ПОПРАВКИ верификации (в ревью-шапке):** `share_1sent`(0.381/0.427) НЕ воспроизводится (тай держится на mean_spp; направление флипает) — сабметрику не абсорбировать как напечатана; «все CAT-флаги от mistral» — 1 из 8 от gpt-5-mini (суть цела); c1-mistral = ✓«над толпой» (отчёт дал «?»→M имеет 0 способностных провалов). Деньги $1.36/13 ошибок — точно. 5. **ХОЛД — кандидат СМЕНЫ дешёвого редактора glm-5 → deepseek-pro ИЛИ mistral** (оба дешевле glm И чинят a1, что glm валит). НЕ ратифицировать до **бейк-оффа их ПРОЗЫ + omission-гарда** (exp14b мерил верность, не стиль/полноту полностью — урок exp13: не менять на частичном сигнале). Следующий полигон-шаг. 6. **Провайдер-квирк вынесен:** **gpt-5.4 `reasoning_effort:"medium"` обрезает длинный вывод** (223 out-ток вместо ~5000, finish=stop — тихо) → в роли редактора слать `low` (`00-provider-quirks.md`, верифицировано). kimi НЕПРИГОДЕН как редактор (8/10 обрезки/таймауты). **Ретро-аудит exp14:** «36 ошибок» = судейский слой (kimi-флейкость), скрытых обрезок арм-моделей (gpt/grok/glm/deepseek) НЕТ — уточняет D37. 7. **Стратегически:** «потолок в моделях vs организации» — **эмпирика сошлась на ОРГАНИЗАЦИИ**: обе претензии дешёвый трек закрывает (абзацы — дискурс-промпт на glm=P1a; смысл — лучший дешёвый редактор + глоссарий-статус-фикс). **Фронтир НЕ нужен.** D30.7-трек «дешёвые модели сейчас» подтверждён эмпирикой. Планка = 2 претензии ИНТЕРИМ; пилот Ф2.5 (BWS ≥3 аннотатора) остаётся решающей точкой, не разбавляется. Порядок: бейк-офф редактора (проза/omission) + reseed-глоссарий → бэкенд под доказанный конфиг (дискурс-промпт, дешёвый редактор-кандидат, промоут-статусы, число/omission-гард, число/CJK-санитайзер). ## D38.1 — Слепой h2h P1a↔F-disc залендён + разворот к ИНФРА-паку (следующий шаг = «строить», не «мерить») (12.07, оркестратор №4). ✅ Владелец прогнал слепой h2h-пакет (`exp14b/monitor/h2h.md`, P1a=glm-дискурс ↔ F-disc=gpt-5.4, метки перемешаны) через 2 внешние сессии. - **ChatGPT↔Claude РАСХОДЯТСЯ на заголовке (НЕ подгоняю сходимость):** ChatGPT — фронтир заметно сильнее (победил все 3 главы; дешёвый провалил QA в 17–18; потолок дешёвого в гл.19 ~85–90%). Claude — near-parity (у фронтира СВОИ дефекты: битая фраза 333, скачущие грейды; разрыв — инфра, не способность). **СОГЛАСИЕ:** дефекты — ИНФРА (глоссарий-согласованность + output-санитайзер), не понимание; **ни одна версия НЕ publishable без человека/редактора** → фронтир «издательский» тоже не покупает (это даёт пилот). - **Оркестратор span-проверил 3 дешёвых дефекта:** `却有` (CJK) в русском предложении (arms/C/17.0 — санитайзер СЕЙЧАС не ловит Han-класс); `丙→«разряда Б»` (=статус-draft корень D38); «не брал» vs «не бил» (`没打过` — точечная осечка, НЕ детерм.-ловима, есть и у фронтира). 2 из 3 = дешёвая инфра; 3-й точечный, общий для обеих моделей. - **РАЗВОРОТ (уточняет D38 §5):** «ещё один editor-бейк-офф» даёт мало — редакторов сравнивали 4× (exp04/12/14/14b: верность, проза, пассивность покрыты). **Следующий шаг = «строить» ИНФРА-пак под доказанный ROI, НЕ «мерить»:** бэкенд (san-класс CJK-в-выходе + экспорт-фикс флагнутого-в-пусто D35.4a + число/omission-гард) ∥ reseed-глоссарий (промоут грейды А/Б/В/Г + 四代族长 approved). **Смена редактора glm→mistral/deepseek-pro — НЕ отдельный эксп, а почти-бесплатный АРМ в пере-прогоне** (exp14b за них по смыслу; если проза не хуже — бесплатный апгрейд). Промт выдан: `BACKEND_INFRA_PACK_SESSION_PROMPT.md`. Единый resnapshot (san+промпт+сид, D30.9) → пере-прогон 3–10 глав → чтение владельца. (Опц., для будущего дефолт-редактора: формальный подсчёт дефектов по рубрике решит «near-parity vs фронтир-лучше» — инфра-пак не блокирует.) ## D38.2 — Консолидация репозитория и актуализация документации (док-гигиена, owner-directed) (12.07, оркестратор №5). ✅ Владелец: «апдейтнуть все доки + подрефакторить полигон-репозиторий чтоб синхронно жило; архивирование; удалять ничего не стоит; ссылки аккуратно проверить; бэкенд-сессию не нарушить». Исполнено оркестратором после read-only карты (5 агентов: число-лаг / целостность ссылок [1799 проверено] / .puml-дельта / граф цитирований eval / точность индекса полигона). - **eval-код — логическая группировка по папкам (НЕ «архив»: код-репо, поправка владельца mid-flight):** спент-семьи → `eval/exp12|13|14|14b/` (30 скриптов). **Живой сид (`exp13_seed_v2`/`_signoff`) и оракулы (`refusal_bench` и пр.) ОСТАВЛЕНЫ в `eval/`** → контракт (D-лог:400/437, D30.5) НЕ трогали. Импорты сохранены: 7 `refusal_bench`-импортёров дотянуты шимом `.parent.parent`; `exp14b`→`exp14_common`/`prompts` через `../exp14`. **Верифицировано `py_compile`(30/30) + `find_spec`(вся цепочка).** Path-цитаты (`experiments/12/13/14`, `eval/README §Карта`) починены. - **Док-актуализация до головы D38.1:** статус-абзацы `CLAUDE.md`/`docs/README.md`/`PROGRESS` (были заморожены на D35 — «research/18 UNCOMMITTED», эмпирика как «будущее»); число-лаг диапазонов «D1–D35/D31»→«D1–D38»; карта актуальности +D38.1/D38.2. - **`.puml` синхронизированы D17→D38.1** (targeted-patch, скелет цел): флагман моно→БИЛИНГВ-редактор (D30.1); +узлы output-санитайзер (D30.3/D33) и диагностик-харнесс; канал-B v2, сид v2, роли провайдеров (glm=дефолт-редактор, grok/mistral/gemini переформулированы), ряд [Ф1*]→[OK]. Синтаксис активити выверен (внутренние `;` → `·`, иначе рвут рендер). - **Ссылки:** живой битый ref `research/17` → архивный путь acceptance-промта; над-атрибуция индекса (exp04 «D30.1/D32/D38»→D30.1; exp12 «D30/D35»→D30 — обе флагнуты владельцем/картой). **Историч. цитаты D-лога:87/91 (runner.go, D12 04.07) и link-rot frozen-архива НЕ переписаны** — дисциплина D23.3 + прецедент D-лог:288 (историч. журнал не рерайтится; чинятся только ЖИВЫЕ доки). - **Гигиена + мультисессия:** спент-промт `POLYGON_CLEANUP` заархивирован с баннером-исходом. **Бэкенд-сессия (infra-pack, 19 WIP-файлов) НЕ тронута** — стейджинг строго пофайловый, коммиты path-scoped. **Контракт-РЕШЕНИЯ не менялись** — чистая гигиена (код-структура + доки + ссылки), не пересмотр курса. ## D38.3 — Приёмка/лендинг инфра-пака читаемости (бэкенд, deliverable D38.1) + верификация ИСПОЛНЕНИЕМ (12.07, оркестратор №5). ✅ Бэкенд-сессия исполнила `BACKEND_INFRA_PACK` (4 задачи, зона `backend/` only, не коммитила — лендит оркестратор). Оркестратор верифицировал ИСПОЛНЕНИЕМ (второй рубеж, не замена самопроверки бэкенда): `go build`/`go vet`/`go test -race ./...` — зелёные; **3 span-дефекта отчёта запинены РЕАЛЬНЫМИ тестами** (не «0 ошибок» на веру): `却有`→fire+strip+export (`TestSanitizerCJKLeak`/`TestStripCosmetic`/golden ch8); `### Глава`→strip+export (golden ch7); `44`→«четыре десятых» number-drift fire (`TestRegressionGuardNumberDrift`). 1. **ВЕРДИКТ ACCEPT (код верифицирован исполнением; 3 дизайн-вопроса — владельцу).** Залендено `d5beefc` (19 файлов, path-scoped). 2. **Сделано (span-дефекты закрыты):** (а) **Экспорт флагнутого чанка (D35.4a):** дисп-по-классу — КОСМЕТИКА (`### Глава`, CJK-утечка) → `FlagSanitizerStripped`: `stripCosmetic` чистит, очищенный остаток = $0 derived-чекпоинт, штатный экспорт (`final_hash`) отдаёт текст (ch5/ch20 не пустые), чанк остаётся flagged; СУБСТАНЦИЯ → skip+пусто; смешанный → субстанция(drop). Resume-детерминизм (golden fresh==resume, $0). (б) **Класс `cjk_leak`:** `\p{Han}`+кана+полноширина+CJK-пункт (U+3000 исключён — индент); content-bearing полноширина ФОЛДИТСЯ (`123`→123, число цело), удалённый ран→пробел (нет склейки). (в) **Число/omission-гард (opt-in `Gates.RegressionGuard`, НАБЛЮДАЕМОСТЬ не drop):** коллапс длины >40% (флор 200) + дрейф ≥2-значных чисел (ститчинг «10 000», одиночные искл.); не фолдится в снапшот (тумблер без resnapshot). (г) **Reseed-enforce верифицирован (не код):** `renderEditorConstraintBlock` (`memory.go:485`, CONFIRMED-only) + longest-match готовы enforce-ить промоут; сид не трогал. 3. **Самопроверка бэкенда (мандат отработал живьём):** 19-агентный адверсариал → 4 CONFIRMED+1 UNCERTAIN, все починены ДО отчёта: [MAJOR] полноширина удалялась как косметика (потеря числа)→фолд; [MINOR] tidy ел пробел «2 : 1»→убрал `:`; [MINOR] эскалация-фолбэк терял восстановимый перевод→stripped-фолбэк авторитетен-флагнут; [NIT] resume finish=""; [UNCERTAIN] Han-глосс оставлял «()»→чистка. Честная осечка: один `git checkout ` стёр незакоммиченную работу (нарушил гардрейл)→реконструировал, дальше только Edit. 4. **3 ДИЗАЙН-ВОПРОСА — владельцу (НЕ блокируют лендинг; пак opt-in/precision>recall):** (а) **Порог число-гарда** 40%/200/≥2-знака — принят revisable-дефолтом наблюдаемости. (б) **Легит CJK-глоссы:** класс стрипает намеренный source-глосс в скобках (`Кулак Ло Хань (羅漢拳)`→глосс теряется, precision>recall: strip+флаг, не drop). ВОПРОС: нужны ли издательские глоссы source-термов? да→сузить класс. (в) **Тяжёлая-но-под-эхо CJK-утечка** (~10% Han <15%) сейчас косметически стрипается (экспортит рвань-флагнут); альтернатива magnitude-кап (>X%→drop) НЕ реализована — нужен ли кап, за владельцем. 5. **Рычаг №1 (дискурс-промпт P1a→боевой editor) НЕ в этом паке** (промпт-зона) — единый resnapshot = **код(✅)+промпт(pending)+reseed(pending)**, координирует оркестратор (D30.9). Golden осознанно re-captured (маскир. дифф = ровно санкц. классы; ch1–6 без дрейфа). ## D38.4 — Аудит полноты exp14/14b (владелец: «не забыли ли полезные выводы?») → 4 незакрытых пункта + правки near-term-конфига (12.07, оркестратор №5). ✅ По запросу владельца — ledger ВСЕХ ратифицированных выводов exp14/14b → диспозиция (субагент + спот-верификация ИСПОЛНЕНИЕМ по коду/промптам/exp-докам, file:line). Большинство пристроено (D38.3 код / дискурс-промпт / reseed / re-run-армы / провайдер-квирки / refutation). **НЕ-отслежены 4 (+1 минор):** 1. **⚠ Чэнъюй-сплющивание — ЗАБЫТ near-term (главная находка; подозрение владельца подтверждено).** D38 §2г: `物是人非`→«всё изменилось» УНИВЕРСАЛЬНО у всех моделей = рычаг ПРОМПТА/глоссария. Отсутствовал в P1a-атом-листе (`eval/exp14/exp14_prompts.py:36` — участники/действия/числа/полярность/заголовки, идиом НЕТ), в `editor.md:5` (там ПРОТИВОПОЛОЖНОЕ — де-буквализация калек), в reseed. Долгосрочный дом ЕСТЬ (Ф2 Annotator чэнъюй-маски — `04-unhappy §124/§62`) — пробел в NEAR-TERM дешёвом рычаге. **Фикс:** атом «идиомы/чэнъюй — оба компонента» дописан в дискурс-промпт (окно открыто, in-flight); пере-прогон измерит (`物是人非` = вход fidelity re-gate). Глоссарий-сидинг чэнъюй НЕ делаем (dst контекст-зависим — риск over-constrain). 2. **⚠ Inversion-гард из D37 §2г НЕ построен — разрыв не был зафиксирован.** D38.3 = число/omission (длина/числа); инверсии полярности/ранга/эмоции by-design НЕ ловит (та же длина/числа). Полярные инверсии (a1 `没有一个不知道`) glm инвертирует НЕЗАВИСИМО от промпта (PROGRESS:66); детерминированного прод-бэкстопа НЕТ. **Диспозиция (фиксирую ЯВНО):** инверсии закрываются (а) fidelity re-gate = СКОРИНГ пере-прогона (не прод-гейт), (б) ВЫБОРОМ editor-модели. **Следствие:** editor-swap glm→mistral/deepseek-pro — НЕ «опция полировки», а ЕДИНСТВЕННАЯ near-term защита от полярных инверсий (glm демонстрируемо валит a1) → приоритет бейк-оффа свапа ПОДНЯТ, свап = сильный кандидат в ДЕФОЛТ. 3. **b1 word↔word число-дрейф покрыт ЧАСТИЧНО.** Гард ловит дрейф, только если черновик арабскими цифрами (`regressionguard.go:24-27` честно фиксирует дыру); точный glm-кейс (слова↔слова `四成四`→«четыре десятых») слеп. НЕ считать b1 «закрытым» — остаётся Ф2 / канон-глоссарий разрядов. 4. **Крупная edit-единица (нарезка / «умное чанкование») — явный re-run-АРМ.** Направленно (D37 §2а, оптимум ~3200c/глава, 2 главы/0 ретраев). Был только в оговорке дискурс-промпта. **Фиксирую как backlog-арм пере-прогона:** тест текущий-чанк vs крупная edit-единица на дискурс-промпте (почти бесплатно в пере-прогоне; подтверждает/опровергает направленный сигнал — прод-изменение нарезки НЕ строить до подтверждения). 5. **(минор) Число/omission-гард opt-in (off по умолчанию).** Оркестратор при сборке единого resnapshot ОБЯЗАН включить `Gates.RegressionGuard.Enabled`, иначе построенная наблюдаемость на пере-прогоне не сработает. **Итог:** курс НЕ меняется; near-term конфиг пере-прогона УТОЧНЁН — P1a + чэнъюй-атом, editor-swap ПРИОРИТЕТ (защита от инверсий), нарезка-арм, гард-тумблер вкл. при resnapshot. Долгосрочно чэнъюй/инверсии → Ф2 (Annotator-маски / judge-C2). Все дисп-факты спот-верифицированы по коду/промптам. ## D38.5 — Компоненты единого resnapshot залендены (reseed-сид + дискурс-editor P1a+чэнъюй+few_shot-тумблер), верифицированы ИСПОЛНЕНИЕМ (12.07, оркестратор №5). ✅ Два параллельных deliverable (промпты выданы 12.07) исполнены сессиями, верифицированы оркестратором исполнением (второй рубеж), залендены: 1. **Reseed (полигон) — `eb409f2`:** трансформ `eval/exp14b/exp14b_reseed_promote.py` промоутит РОВНО 5 направленных термов (грейды `甲乙丙丁` dst «разряд»→«класс А/Б/В/Г» + draft→approved; `四代族长`→approved), остальные draft (`南疆/沈嬷嬷`/гу-имена) не тронуты (approved-инвариант). Идемпотентен, байт-стабилен (D30.5); стейл-хвост грейд-заметок вычищен детерминированно. Enforce-проба: `四代族长` (approved-длинный) выигрывает longest-match над `族长`, `家老`=«старейшина» легитимно цел. Сид на диске (ВНЕ git). 2. **Дискурс-editor (бэкенд) — `0ac5f7a`:** P1a-дискурс-reflow (Ван Цуй, репараграфизация 1:N, single-pass) в боевой `editor.md` = **APPEND к baseline** (=победитель exp14, SHA `b3b4f604`; clean-replace не делали — непротестированный новый промпт). + **чэнъюй-атом D38.4** (`物是人非` оба компонента; полный SHA сдвинулся РОВНО на эту строку `b3b4f604`→`95b1085`). + **few_shot-тумблер** (`---FEWSHOT---` + per-stage `Stage.FewShot *bool`, absent=ON): ON=ядро+примеры, OFF=ядро без примеров (deepseek-pro swap-арм — thinking, few-shot мешает CoT, exp14 §2а). Детерминизм тройной (флип=громкий resnapshot); golden байт-идентичен (стаб без FEWSHOT). Верификация: `go build/vet/gofmt/test -race ./...` зелёные; тесты snapshot-fold/wire-core-only/absent-noop/golden — пройдены; editor.md-дифф = ровно дискурс+чэнъюй+FEWSHOT (baseline цел). `prompt_version=v3` (ещё не гонялся). **ИТОГ: все 3 компонента resnapshot ГОТОВЫ** — дискурс+чэнъюй editor (v3) · reseed-сид · инфра-пак (D38.3). **Следующий шаг = единый resnapshot** (D30.9, одна переоплата книги) + пере-прогон 3–10 глав: конфиг = glm=P1a-few-shot (дефолт) + армы {mistral few-shot · deepseek-pro `few_shot:false` = инверсия-защита D38.4 · крупная edit-единица = нарезка-арм D38.4} + `RegressionGuard` ON (D38.4). ПАРНО с чтением владельца (интерим-планка 2 претензии, D35). Крупная edit-единица — НЕ реализована (нарезка-арм, не промпт-порт). **[⟶ ПРИОСТАНОВЛЕНО D39: владелец остановил раунд для арх-ресета; пере-прогон гейтится треком B, см. D39.]** ## D39.17 — Приёмка R1 драйвер-свитч ЗАЛЕНДЕНА: волновой исполнитель (черновик∥→банк-майнинг-стоп→редактура∥); полный рубеж-2 — clean bill по несущим осям, 3 MINOR/NOTE-фикса в mining-wiring → пере-прогон-преп (19.07, оркестратор №7). ✅ Бэкенд-сессия сдала последний резидуал пака-11 — **волновой исполнитель** (`BACKEND_PLAN11` §R1; отчёт `docs/archive/reports/R1_DRIVER_SWITCH_REPORT_2026-07-19.md`, мой новый процесс соблюдён — не в `backend/`). **Залендено:** `translateBookWaves` заменил последовательный цикл — precompute($0)→**черновик-волна(∥ по чанкам, `snapshot_draft`=base-банк)**→**банк-майнинг-стоп**(подпись владельца или авто-continue)→**редактура-волна(∥ по edit-ЕДИНИЦАМ, `snapshot_edit`=enriched)**; редактор читает черновик как конкатенацию member-final по `final_hash`, **НИКОГДА не пере-рендерит draft** (несущий инвариант); `translateChunk` удалён. + wiring майнера в живой стоп (`loadLangPack` fail-loud/nil-and-run, `pack.Version()`-фолд omitempty, mined-write `Source:mined`) + **Ш-2** (`unicode.Version` в memnorm/classifier/style + chunker/estimator) + **Ш-1** (`goldenMaskedDiff`) + структурный golden-рерайт (8 глав→8 единиц, 19→18 вызовов) + read-модели per-unit + именование (директива: без W0/W1/W1.5/W2 в коде/логах → waveDraft/waveEdit/runBankMiningStop). **Приёмка — ПРЯМАЯ верификация исполнением + ПОЛНЫЙ рубеж-2** (R1 = ре-архитектура исполнения, тяжёлый адверсариал оправдан; владелец явно просил сверку волновых алгоритмов против ресёрчей). Прямая: `build/vet/test -race` зелёные (сам, `pipeline` ~31с); **8 волновых пинов** вербозно вкл. **кусачий регресс-пин `TestWaveMinedSignDoesNotRebillDraft`** (подписывает mined-терм, ре-прогон с `--resnapshot`, ассертит draft-волна байт-стабильна [SnapshotID+ContentHash+FinalHash] / edit-снапшот двинулся — падает без фикса); **golden байт-стабилен** независимо; построчное чтение `waverun.go` (алгоритм = план §1 / research/19 §B3-бис) + `mining.go` + `seeding.go` (base/enriched: `hasMined=false`→`baseMemory==memory`, golden цел). **Рубеж-2 (5-агентный × 5 линз, вкл. явную линзу СВЕРКИ с research/19 §B3-бис + research/20 §C + план §1/§2, refute-by-default, $0): 4 находки, 1 refuted, 3 выжили — ВСЕ MINOR/NOTE, 0 CRITICAL/MAJOR. Все несущие линзы (деньги/durability/параллелизм · секвенирование · детерминизм · СИНК-С-РЕСЁРЧЕМ · снапшот/golden) — ПУСТЫ; синк-линза расхождений от ратифицированного волнового дизайна НЕ нашла.** Сессия сама поймала MAJOR в своём чекпойнте (инъекция черновика считалась над ENRICHED-банком, снапшот пинился к base → тихий re-bill при подписи mined; фикс `r.baseMemory` base-scoped + регресс-пин). **Фикс-лист рубежа-2 (3, все в стенд-only mining-пути / трипваер — лендинг R1 НЕ блокируют; ГЕЙТ: закрыть до живого mining-раунда пере-прогона):** - **R1-FL-A (MINOR, F1):** CLI не обрабатывает `WaveSignatureStop` → mining-стоп даёт exit 1 (генерик-крэш) вместо distinct exit-2 (как `CompletedWithFlags`); коммент/отчёт («CLI-сентинел», «carried up like CompletedWithFlags») ПЕРЕ-заявили несуществующую проводку. Человек-mitigated (stderr печатается), но exit-код-автоматику вводит в заблуждение. Фикс: distinct exit-код + рендер Terms/SignaturePath; поправить оверклейм-коммент. - **R1-FL-B (MINOR, F2):** банк-майнинг-стоп очищается ТОЛЬКО при пустой дельте (`mining.go:56`); reject-механизма нет → терм, который владелец ОТКЛОНИЛ (опустил), ре-предлагается каждый ре-прогон → стоп фаерит вечно, edit-волна недостижима. escape (добавить как `status:auto`) не задокументирован в stop-сообщении. Связано с W1.5-UX (§10-1). Фикс: документировать escape / reject-механизм / clear-on-reviewed. - **R1-FL-C (NOTE, F3):** `x/text/norm` несёт свою Unicode-редакцию независимо от stdlib `unicode.Version` (сессия сама пометила `memnorm.go:48`) → standalone `go get -u golang.org/x/text` мог бы тихо сдвинуть NFKC/NFC → пере-вердикт post-check без сдвига `memoryNormVersion`. Расширить Ш-2: фолдить x/text-версию / трипваер «не бампать x/text без resnapshot». **Ратифицированные девиации/флаги (приняты):** пер-волновой `--resnapshot` СУРГИЧЕН (не all-or-nothing — прямое следствие пер-волнового снапшота §1(в); `TestRunnerSnapshotPinning` 4→3) · `escMu` сериализует эскалации через LLM-вызов (осознанный трейд: точность soft-cap > параллелизм редких эскалаций) · Ш-2 расширен на chunker/estimator (тот же silent-drift класс). **Пак-11 ЗАВЕРШЁН** (Block A + continuation + арх-проход + R1); промт `BACKEND_PLAN11` отработан → архив. **Очередь:** пере-прогон-преп (R1-FL-A/B/C mining-wiring + единый resnapshot §8 D30.9) → пере-прогон 3–10 глав (армы glm/mistral/deepseek-pro; live mining-раунд с подписью) → чтение владельца (планка 2 претензии). ## D39.19 — Пере-прогон-преп ЗАЛЕНДЕН: 6 целевых фиксов (R1-FL-A/B/C · echo-сплит · read-model naming · ниты) + §8-манифест полон; golden version-only; gender-signoff закрыт (19.07, оркестратор №7). ✅ Бэкенд-сессия исполнила `BACKEND_RERUN_PREP_SESSION_PROMPT` — все 6 пунктов + верификация §8-манифеста + свой 4-линзовый адверсариал (clean bill, 0 CRIT/MAJOR). **Залендено:** (1) **R1-FL-A** — CLI обрабатывает `WaveSignatureStop` → **exit 3** (distinct от 2-flagged/1-крэш, переживает `%w`), рендер terms/signature-path/resume-guidance, оверклейм-комменты выправлены; (2) **R1-FL-B** — **reject-set** (`Book.MinedRejects` yaml, не в BriefHash → не снапшот-двигающ; `MineBank(rejects)` дропает отклонённый терм С кластером [`markEmitted` против representative-shift re-fire], nil = байт-идентичный no-op → парити цел); стоп очищается когда каждый терм промоутнут ИЛИ отклонён — **livelock/W1.5-UX §10-1 закрыт**; (3) **R1-FL-C** — `xTextVersion="v0.38.0"` в `memoryNormAlgoVersion` (pin-константа: `ReadBuildInfo` пуст под `go test`; drift-чек `TestMemnormXTextVersionPin` против go.mod) — единственная снапшот-двигающая правка; (4) **echo-сплит** `echo_draft_rate`/`echo_edit_rate` (re-derive-костыль снят; edit-числитель gated `DispFlagged`); (5) **read-model naming** (chunk/total_chunks → unit-семантика Go+JSON; полигон-экстрактор читает per-record `chunk_idx`/`source`, не переименованные тоталы — не сломан); (6) **ниты** (мёртвый `minedToCandidates` снесён греп-подтверждённо; jobs.status advisory-note; escMu не тронут; HTTP-concurrency уже покрыт `TestWaveParallelWorkersMoneyConserved` через реальный транспорт). **Приёмка — прямая верификация исполнением** (локальные целевые фиксы — тяжёлый воркфлоу не нужен; сессия сама прогнала 4-линзовый адверсариал): build/vet/test -race зелёные (сам); **независимый masked-golden = 0 изменённых строк после маскировки хешей** — golden сдвинулся ЧИСТО на хеш-значениях (x/text-версия в `memoryNormVersion`), wire-тела/вердикты/final_text БАЙТ-ИДЕНТИЧНЫ (сильнейшее подтверждение version-only; 180 «version-only» сессии = все хеш-строки); все пины проходят (exit-код-контракт · reject-suppress · x/text-drift-pin · echo-сплит [draft 0.5/edit 0 на dropped-echo] · **парити EXACT** [reject nil no-op] · mined-delta-base-stable · golden); спот-чтение несущих диффов (x/text pin+drift, reject cluster-touch+markEmitted, echo-сплит). **§8-манифест:** сессия сверила все live снапшот-фолды — полны (memmatch/reseed/mined/gender-данные/sanitizer/editor/segmentation/chunker-v5/src→dst/banknote/langpack/per-wave/**+x/text**); DEFER-строки (DC-пакет-данные, promote 甲乙丙丁/四代族长) корректно не-фолдятся (не построены). **Док-правка оркестратора:** x/text-строка добавлена в план §8 (сессия флагнула отсутствие — моя зона; выправлено). Дисциплина «не упарываться на миноры» соблюдена (ниты лёгкие, escMu не тронут, снос только греп-мёртвого). **Gender-signoff карты exp16 ЗАКРЫТ (владелец «male ок», оркестратор проставил корректно):** male 10 name-персон (方源/古月/方正/人祖/花酒行者/古月-клан) · female 沈嬷嬷 (нянька) + 沈翠 (KWIC разрешил: служанка, дочь няньки — не бланк-male) · hidden 白凝冰 · n/a title/term/place + 困境 (имя стаи). Карта (dst-канон+пол) готова к сид-дельте. **ПАК-11 + преп ЗАВЕРШЕНЫ; бэкенд-код готов к пере-прогону.** Промт препа отработан → архив. **Очередь:** **пере-прогон** (операционная сессия: ОДИН `--resnapshot` fresh-translate + langpack+contrast+подписанная карта+армы редактора glm/mistral/deepseek-pro; риг-стандарт D39.7; finish=stop) → чтение владельца (планка 2 претензии). **Гейт: ре-чек прайса DeepSeek у катовера слагов 24.07 ДО платных вызовов.** ## D39.18 — Blast-radius edit-единицы: c-lite (редактура чистого остатка) залендён (`488c8d4`); + 4 read-модель-фикса пост-лендинг-ревью (19.07, оркестратор №7). ✅ **Product-решение владельца по blast-radius (эскалировано D39.17-errata):** в волновой модели флаг одного черновик-члена бланкал ВСЮ edit-единицу (≈1–2 чанка ≈ глава для мелких глав), отбрасывая оплаченные драфты хороших соседей — регресс от per-chunk модели. Опции: (a) accept · (b) экспорт сырых хороших · (c) редактура чистого остатка. **Ратифицирован (c) с fallback (b)** (моя рекомендация: (c) не намного сложнее (b) — склейка хороших `draftParts` уже собиралась; деградирует до «потеряли один битый чанк» + сохранённая редактура хороших). **Залендено (c-lite):** флагнутый член ДРОПАЕТСЯ, редактор бежит по `cleanSources`+`draftParts` (source+draft чистых членов), единица шипит отредактированный остаток флагнутой; только при ВСЕХ флагнутых → "". Ключевое для нейтральности: без флага `cleanSources join == unit.sourceText()` байт-в-байт → **golden/нормальный путь не тронут**. **Приёмка — прямая (пропорционально: локализованный flag-путь + read-модели, не конц-край):** build/vet/test -race зелёные (сам), golden байт-стабилен, c-lite пины (dropped-member · all-members-flagged · parent-cancel цел), деньги честны (`draftCost` по ВСЕМ членам до флаг-чека, редактура биллится 1×, нет задвоения), весь дифф прочитан построчно. Тяжёлый воркфлоу НЕ гонял — сессия сама прогнала 4-линзовый адверсариал. **4 read-модель-фикса пост-лендинг-ревью сессии (все MINOR/NIT, впитаны):** (1) `quality.go` — echo дропнутого члена пропадал из `EchoRate` (метрика приёмки владельца) → пере-выведен per-unit из member-рядов [**ОТКРЫТОЕ решение владельцу:** сохранена pre-c-lite семантика «echo где угодно, вкл. дропнутых членов»; альтернатива «echo только в шипнутом тексте» — one-line, за владельцем]; (2) `status.go` `resolveChunkState` — FIRST-flagged reason (было тихо last-wins; коммент уже это заявлял) → выровнено с export/translate; (3) `export --pairs` source realign на чистый остаток (DC1/DC2-FP видит реальную пару); (4) export Detail дропнутого члена пропагируется. Отчёт — `docs/archive/reports/R1_POST_LANDING_REVIEW_2026-07-19.md`. **R1-FL-A/B/C — deferred в пере-прогон-преп** (live-mining-гейтнуты; R1-FL-B нужен W1.5-UX reject-set дизайн). ## D39.17-errata — MEDIUM-HIGH баг `runWave` (parent-cancellation), ПРОПУЩЕННЫЙ рубежом-2 оркестратора, пойман 2-й ревью-сессией и залендён фиксом (`5fc4860`) (19.07, оркестратор №7). ✅ **Честная фиксация промаха.** После лендинга R1 (D39.17) владелец запустил ВТОРУЮ независимую ревью-сессию (4 адверсариальных ревьюера + трейс) по волновой фиче. Она нашла **реальный MEDIUM-HIGH баг, который мой рубеж-2 дал clean bill и пропустил:** `runWave` (`waverun.go`) ставил `firstErr` ТОЛЬКО из ошибки воркера и возвращал его после `wg.Wait()`. При parent-cancellation (Ctrl-C/SIGTERM — CLI вешает `signal.NotifyContext`, `main.go:55`) фидер бросает оставшиеся items на `ctx.Done()`, НО воркер не обязан ошибиться, чтобы завершиться — **$0-resume-воркер резолвится через свой `opContext` store-ридами, не трогая cancellable ctx**, → `firstErr` остаётся nil при недоделанных items → `runWave` возвращает nil. Дальше: edit-пайплайн (прод C1 дефолт) → `unitOutcomes[i]==nil` → **nil-deref паника** (`waverun.go:169`); draft-only → zero-value fake-`DispOK ""` → **exit 0 на неполной книге** (скриптовый `translate && export` шипит усечённую книгу как успех). Надёжно бьёт на Ctrl-C'нутом резюме — первоклассный путь. Durable-store был ВСЕГДА корректен (недоделанные items не чекпойнтились → ре-прогон их резюмит) — потери денег/данных НЕТ; ущерб = крэш / ложный сигнал успеха. **Фикс (session, залендён):** после `wg.Wait()` при `firstErr==nil` вернуть `parent.Err()` (nil на чистом прогоне, `context.Canceled` на прерванном — стандартная errgroup-дисциплина). **Верификация оркестратора — РЕД/ГРИН исполнением:** реверт `waverun.go` к залендённому HEAD → регресс-пин `TestRunWaveSurfacesParentCancellation` ПАДАЕТ («runWave returned nil on a cancelled parent ctx»); фикс восстановлен → PASS; полный suite -race зелёный, golden байт-стабилен, ровно 2 файла. **Урок (честно):** мой рубеж-2 имел линзу «runWave race-safety: lost error / cancel-path» — но агенты не дотрейсили путь «$0-resume-воркер никогда не ошибается → firstErr nil при parent-cancel». 5-линзовый адверсариал МОЖЕТ пропустить тонкий concurrency-путь; вторая независимая сессия его поймала — это валидирует практику независимых ревью, но **мой clean bill на D39.17 был НЕПОЛОН**, фиксирую явно. Остальное R1-ядро подтверждено 3 ревьюерами+трейсом (деньги атомарны, переоплата-ОДНА на обоих уровнях, память immutable, снапшот-пиннинг) — держится. Прочие находки 2-й сессии: **product-решение владельцу** (edit-unit blast-radius: один флагнутый member-черновик бланкает ВСЮ единицу-главу, отбрасывая оплаченные драфты хороших соседей — опции accept / export-good-raw-flagged / split-on-bad → §пере-прогон-преп, эскалировано) + подтверждение R1-FL-A/B/C + ниты (jobs.status-трэш advisory, read-model naming-debt, escMu-throughput, minedToCandidates dead-code, HTTP-адаптер concurrency неотестирован — в фикс-лист/гигиену пере-прогон-препа). ## D39.16 — Приёмка арх-прохода D39.15 ЗАЛЕНДЕНА: язык-данные майнера вынесены в `internal/lang`+`configs/langpacks`, байт-точно (парити EXACT); три дивергенции от предложения оркестратора ратифицированы (19.07, оркестратор №7). ✅ Бэкенд-сессия исполнила `BACKEND_ARCH_CLEANUP_SESSION_PROMPT` (5 фаз-воркфлоу: ресёрч 2×3 → синтез → фикс-лист do/defer/don't → исполнение → ревью). **Залендено:** zh/Палладий-данные майнера (百家姓 single/compound, титул/топо/rank-инвентари, частицы `aliasParticle`, таблица Палладия) вынесены из Go-констант `internal/pipeline/` в **`configs/langpacks/zh|zh-ru/` (10 файлов)**, грузятся новым leaf-пакетом **`internal/lang`** (данные+загрузчик+`Version()` content-hash; **НЕ импортит pipeline → граница компиль-enforced**); движок читает резолвнутый `*lang.Pack` через DI (как `contrast`). Плюс риды-along: **FL-1** (`bankTokenBudget`→`banknoteSnap.TokenBudget`), **FL-2** (банкнота-телеметрия репопулируется на резюме из `prev.NBanknote*`, guard `FromResume && Enabled`), **FL-3** (`emitRankCap=200` перед emission-фильтрами, зеркало `a3[:200]`), тест-путь (env-override `TM_MINER_PARITY_{CONTRAST,RECORDS,SEED}`, skip-if-absent). **Приёмка — ПРЯМАЯ верификация исполнением:** `go build/vet/test -race` зелёные вкл. новый `internal/lang` (сам); **golden БАЙТ-ИДЕНТИЧЕН** (нулевой дифф — сильнее допущенного «одно version-поле»; поведенческая нейтральность механически доказана); **байт-точность перемещения ДОКАЗАНА парити-тестом** — константы УДАЛЕНЫ (грепом нет), майнер читает langpack через DI, `TM_MINER_PARITY=1` даёт EXACT `n=13618 {方源:0,蛊:1,蛊师:2,古月:22} recall 0.9649` против замороженного Python-референса (сдвинься хоть руна данных — набор/ранги поехали бы; ручной регекс-парсинг констант ненадёжен из-за соседних многострочных инвентарей — парити строже); граница `internal/lang`↛`pipeline` подтверждена грепом; FL-1/2/3+тест-путь спот-верифицированы построчно. Сессия сама прогнала Phase-5 ревью (3 минора пофикшены). **Ратифицирую три дивергенции от стартового предложения оркестратора (пресс-тест сработал — сессия опровергла даже МОЙ буллет с доказательством):** 1. **`isRuTarget`/`isCJKTarget` → `x/text/language.Tag`: ОТВЕРГНУТО (держим точные строковые предикаты).** Ресёрч-опровержение: `language.Tag`-матч тянет CLDR «likely-subtags» (документированно «subject to change» — golang/go#24211); 6/18 расхождений; **CLDR-инстабильность попадала бы в снапшот-ВЕРДИКТЫ** (`isRuTarget` гейтит санитайзер → экспортный FinalText) → недетерминизм байт-воспроизводимости при апгрейде `x/text`. Мой стартовый буллет был наивен; отклонение ВЕРНО (детерминизм > идиоматика в вердикт-пути). 2. **Живые DC-чекеры (`checkers_zh_ru` 时辰/числительные/регистр — назван владельцем) в langpack: DEFER до ja→ru-реплики.** Они бегут ПАРА-АГНОСТИЧНО сегодня → пара-кеинг СЕЙЧАС = живая смена поведения (нарушает мандат нейтральности); `translitInterjections` (ара-ара/маа) — ЯПОНСКИЕ филлеры, мис-кей-ловушка. Два ресёрч-агента сошлись независимо. Поедут по тому же сеаму, когда реальная 2-я пара сделает их src/tgt/pair-ось тестируемой. 3. **Снапшот-фолд `pack.Version()`: DEFER до R1.** Майнер OFFLINE → его данные не wire/вердикт-определяющи → фолд СЕЙЧАС = преждевременный resnapshot (инвариант №2). `pack.Version()` построен и готов; R1 фолдит его при wiring майнера в живой W1.5 (один resnapshot тогда). Резкое и верное наблюдение (мой буллет «folded как промпты» не учёл, что майнер ещё не живой). Плюс честные DEFER-2 (`sourceAbbrevs` — 28 англ-аббревиатур в chunker, единственный per-source инвентарь движка) / DEFER-4 (`isCJK/RuTarget` как langpack-атрибут — если реестр расширится). Дисциплина «не упарываться на миноры / не rewrite-ради-rewrite» соблюдена: один оправданный рефактор + реальные FL-фиксы, косметика не плодилась. **Записка сессии (Ш-1/Ш-2) — диспозиция оркестратора (ратифицирую, обе → R1, НЕ в нейтральный пак):** сессия при пресс-тесте нашла две слепые зоны снапшот-гарда (не дефекты текущего кода — сейчас консистентно, go1.26.4, x/text Unicode 15.0.0, дрейфа нет; всплывут при след. смене поведения / первом бампе тулчейна). **Ш-2 (несущее):** снапшот-версии (`memoryNormVersion` `memnorm.go:56` + classifier/style) НЕ фолдят `unicode.Version` — а `norm.NFKC` (парити майнера + матчер банка) и голые `unicode.Han/Cyrillic` (~10 файлов) привязаны к Unicode-версии тулчейна → **бамп до go1.27 (Unicode 15→17) сменил бы NFKC/классификацию БЕЗ сдвига снапшот-версии = тихая дивергенция** (тот же класс, что отвергнутый `language.Tag`). Фикс: вплести `unicode.Version` в norm/classifier/style-версии → любой Unicode-бамп = громкий resnapshot. **Едет в R1** (R1 и так делает resnapshot при фолде `pack.Version()` — один заход покрывает оба); **ТРИПВАЕР: обязательно ДО любого go1.27-бампа** (сейчас не горит — на 1.26.4, бампать ради свежести не рекомендовано). **Ш-1 (безопасность, низкая срочность):** masked structural diff при golden re-capture — ручная дисциплина ревью, не код; хелпер (на `TM_UPDATE_GOLDEN=1` маскировать хеш/версия-поля + печатать «N вердикт-изменений / M version-only» ДО записи) делает re-capture безопасным по построению. → R1/гигиена. Обе вписаны в фикс-лист R1. **Процесс-правка (мандат владельца 19.07): сессии НЕ плодят персистентные `backend/*_REPORT.md`** — постоянный record = D-блоки + PROGRESS; детальный приёмочный артефакт (если нужен оркестратору) пишется в `docs/archive/reports/`, не в код-зону. Три существующих репорта (PACK11/PACK11_CONT/ARCH_CLEANUP) вынесены из `backend/` в `docs/archive/reports/` (архив-не-удаление). **Общность доказана структурно:** синтетик-пара роутится через сеам, fail-loud на неизвестный/пустой пак. Полный тест §B5 — ja→ru-реплика (когда исполнится, DEFER-1 чекеры едут туда же). **Честная калибровка:** мульти-агентный рубеж-2 на этой приёмке не гонялся — golden байт-идентичен (механический пруф нейтральности) + парити EXACT (пруф байт-точности данных) делают correctness-риск рефактора близким к нулю; прямая верификация (граница/байт-точность/фиксы/дивергенции) пропорциональна. Промт арх-прохода ОТРАБОТАН → архив с баннером. **Очередь:** R1-продолжение (`BACKEND_PLAN11_SESSION_PROMPT.md` активен; R1 фолдит `pack.Version()` + грузит пак в раннере при wiring майнера) → resnapshot → пере-прогон → чтение. ## D39.15 — Директива владельца: изоляция языковых данных из `pipeline/` (архитектурный проход ПЕРЕД R1); промт выдан (19.07, оркестратор №7). ✅ **Триггер:** владелец при обзоре кода нашёл zh/ru-вставки внутри `internal/pipeline/` (百家姓 `surnamesSingleRaw`, таблица Палладия, `aliasParticle` 的了在是…, `checkers_zh_ru` 时辰/числительные/регистр, `isRuTarget` ручной). **Разбор оркестратора (по коду, честно):** §0.1-сеам РЕАЛЕН и соблюдён — язык-логика за централизованными гейтами (`isRuTarget`/`isCJKTarget` `disposition.go:294,307`; pair-keyed промпты `PromptPathFor` fail-loud; движок параметризован Source/TargetLang; фертильность CJK/other = per-pair конфиг, вырождается корректно на не-CJK; майнер не подключён в прод — R1-резидуал). en→es СЕГОДНЯ = **fail-loud на резолве промпта** (не крэш, не тихая порча). Хардкод-пути — ТОЛЬКО в `miner_parity_test.go` (тест, data-gated). `clusterAlias` — корректный union-find (не «мусор из циклов»). **НО настоящий зазор подтверждён:** язык-данные зашиты Go-КОНСТАНТАМИ внутри `pipeline/` (добавить пару = перекомпиляция), а §0.1-идеал = данные-файлом; `golang.org/x/text` (v0.38 уже в deps) недоиспользован (`language.Tag` не применён). **Директива владельца (ратифицирую как курс):** язык-специфика — ВНЕ `pipeline/`, под сотни языков; библиотеки где уместно; данные-файлами не константами; чистый код + нормальные алгоритмы, стандарт «сеньор Google»; **но не упарываться на миноры, никакого rewrite-ради-rewrite**. **Секвенс (решение владельца):** вставить архитектурный проход ПЕРЕД R1-драйвер-свитчем (пока не накопился ещё язык-код и до того, как майнер станет живым в W1.5). ja→ru-реплика — приёмочный тест общности §B5 (позже). **Целевая форма (стартовое предложение оркестратора — пресс-тест ресёрчем в промте, не догма):** движок общий; новый `internal/lang/` (интерфейсы `LangPack`/P1–P6 + загрузчик + реестр, БЕЗ данных) + `configs/langpacks//*.yaml` (百家姓/суффиксы/частицы zh · Палладий zh-ru · регистр/числительные/гендер ru · единицы zh-ru); резолв по `Book.LangPair()`, снапшот-folded (как промпты — прецедент расширяем, не новый паттерн); `x/text/language.Tag` вместо `isRuTarget`. Добавить язык = каталог данных, без правок `pipeline/`. Правильные алгоритмы (union-find, детерм. сортировки, целочисленные пути) — НЕ трогать; из движка уходят ДАННЫЕ. **Промт выдан: `BACKEND_ARCH_CLEANUP_SESSION_PROMPT.md`** — промежуточная бэкенд-сессия, 5 фаз-воркфлоу (ресёрч 2×3 независимый → синтез входов [ресёрч+оркестратор+владелец+фикс-лист] → вывод фикс-листа с диспозициями do/defer/don't → исполнение → мульти-линзовое ревью). Рефактор ПОВЕДЕНЧЕСКИ НЕЙТРАЛЕН zh→ru (golden байт-стабилен до одного version-поля, один resnapshot). Риды-along: фикс-лист FL-1/2/3 (D39.14) + тест-путь. Скоуп-барьер: НЕ R1, НЕ пере-прогон, НЕ смена поведения перевода, НЕ минор-хант. **Очередь пере-упорядочена:** этот пак → R1-продолжение (`BACKEND_PLAN11_SESSION_PROMPT.md`, остаётся активным) → resnapshot → пере-прогон → чтение. ## D39.14 — Приёмка пака-11 continuation (R2–R5 + R1-аддитив) ЗАЛЕНДЕНА; рубеж-2 D39.13-долга погашен: clean bill по несущим осям, 3-пунктовый MINOR-фикс-лист → R1-продолжение (19.07, оркестратор №7). ✅ Бэкенд-сессия сдала continuation по санкционированному порядку (вариант 1: R2→R3→R4→R5, R1-аддитив, драйвер-свитч честным резидуалом). **Залендено** (`git`): **R2 WS3 Go-майнер** (порт frozen exp16, дефолт-B; паритет EXACT — 13618-СЕТ, катастроф {方源:0,蛊:1,蛊师:2,古月:22}, recall 0.9649; алиас-ярус-1, `MinedDeltaYAML`, `Source:mined`-путь, `tmctl seed-lint`) · **R3 WS4 банкнота 12 точек** (срез-до-classify fresh+resume, `tm-banknote-v1:` derived + re-point после эскалации, `banknoteSnap` omitempty, store v9-телеметрия, finish=stop-гейт) · **R4 WS5** (`export --pairs`, DC1/DC2/DC6 байт-верны референсу, DC3 gender-инъекция, 2 golden re-capture masked-чист) · **R5 WS6** (2 арм-конфига mistral/deepseek-pro + `echo_mine_test` под варианты + rate-guard связка) · **R1-аддитив** (`snapshotIDForWave` «переоплата ОДНА» + W0 sticky-precompute байт-идентично — golden доказал). **R1 драйвер-свитч (W1/W1.5/W2 dispatch + структурный golden-рерайт) — резидуал** (санкционированный исход; точный 6-шаговый дизайн `PACK11_CONT_REPORT.md §R1`). **Приёмка — ПРЯМАЯ верификация исполнением:** `go build/vet/test -race` зелёные (сам); ~40 пинов свежим `-count=1` вербозно (майнер-паритет `TM_MINER_PARITY=1` EXACT, банкнота 12-точек, DC-чекеры, seed-lint, snapshotIDForWave, алиас-правила); **независимая masked-golden репликация** (18 строк, все объяснимы: render-format v1→v2 + cheapgate v2→v3 + gender-note в src→dst-блоке; **0 изменений final_text/disposition**); построчное чтение несущих диффов (stagerun деньги-путь: settle пишет `ResponseText: resp.Text` RAW, applyBanknote срез ПОСЛЕ durable settle, чекпоинт хранит raw, резюм re-slice детерминирован — деньги нетронуты; re-point зеркалит sanitizer-прецедент, стоит после резолва эскалации; W0-precompute байт-идентичен по построению; base≠enriched домен-сепарированы). **Погашение долга рубежа-2 (D39.13):** мульти-агентный адверсариал по ОБОИМ кускам пака (Block A + continuation), 5 линз × refute-by-default, 8 агентов, $0 к провайдерам. **Итог: 3 находки, все MINOR/PARTIAL, 0 refuted; ВСЕ CRITICAL/MAJOR-линзы пусты** (деньги/durability · wire-детерминизм · порт майнера [инварианты EXACT] · banknote-резюм-в-редактор · инвариант base/enriched · честность residual — clean bill). Спот-верифицировал каждую находку сам против кода+референса. **Фикс-лист (→ R1-продолжение, все латентны/observability — лендинг НЕ блокируют; банкнота выключена по дефолту `BanknoteGate.Enabled=false`, майнер-эмиссия ещё не в живом прогоне за R1):** - **FL-1 (MINOR, F1):** `bankTokenBudget` (144, wire-affecting via max_tokens∈RequestHash) НЕ свёрнут в `banknoteSnap{enabled,parser_version}` → правка конста `bankMaxLines` без бампа parser_version = тихий re-bill книги на резюме (loudness дисциплиной, не механизмом — единственный такой пропуск; снапшот фолдит MaxOutputRatio/MinMaxTokens/etc). Фикс: свернуть `bankMaxLines`/бюджет в `banknoteSnap`. - **FL-2 (MINOR, F2, observability-only):** `resumeFromChunkStatus` (`resume.go:22`) не репопулирует `BankFlags` (ставится только fresh-путём `stagerun.go:234`) → `persistRetrievalState` обнуляет `n_banknote_lines/parse_fail/truncated` на КАЖДОМ резюме готовых чанков; коммент «self-heals on resume» ложен для этих 3 колонок (сырой блок — в непрочитанном attempt-чекпоинте, derived хранит очищенный). Фикс: re-derive из сырого чекпоинта ИЛИ не обнулять эти колонки на резюме ИЛИ поправить коммент. - **FL-3 (PARTIAL, F3, порт-fidelity):** `miner_emit.go:68` идёт по полному `mr.ranked`, референс капит `a3[:200]` (alias-пул) / `[:30]` (precision-лист) ДО фильтров (`alias.py:165`, `emit_owner_sheets.py:143/162/169`) → эмитируемая сид-дельта/карта подписи шумнее референса (НЕ затрагивает WHICH-инварианты SET/recall/катастроф — только объём подписываемого владельцем). Фикс: добавить top-N кап перед emission-фильтрами. Гасить ДО живого W1.5-прогона (владелец подписывает эту карту). **Ратифицированные девиации (обе с эскалация-нотой, приняты):** (1) `banknoteSnap` omitempty-указатель (не безусловное `{enabled:false}` зеркало sanitizerSnap) — добавление опц. фичи не инвалидирует banknote-OFF книги/golden, включение/бамп-парсера всё равно громкий сдвиг (несущая loudness §4а-п6 цела); (2) DC-пакет = код-консты за `isRuTarget`-гейтом (конфиг-форма — резидуал; §0.1-сеам защищает от неверного на новой паре, extraction-в-конфиг честно не доделан — открытый вопрос владельцу, увязать с ja→ru-репликой). **Промт `BACKEND_PLAN11_SESSION_PROMPT.md` остаётся АКТИВНЫМ** (R1 драйвер-свитч + FL-1/2/3); фикс-лист вписан в него. Очередь: R1-продолжение (драйвер-свитч + фикс-лист) → приёмка → единый resnapshot → пере-прогон 3–10 глав → чтение. ## D39 — Арх-ресет: синк-аудит «сломанного телефона» + целевая 7-слойная архитектура + фазовый план (13.07, оркестратор №6). ✅ Владелец остановил build-раунд: тактическое латание вместо архитектуры с первых принципов + «сломанный телефон» полигон(ресёрч)→оркестратор(выводы)→бэкенд(реализация) (триггер — чуть не потеряли «умное чанкование»). Хендофф `ORCHESTRATOR_ARCH_RESET_PROMPT.md` (5 концернов). **Проведён синк-аудит** (многоагентный воркфлоу, 42 агента, $0/только-чтение, адверсариальная верификация refute-by-default): **65 находок, 0 REFUTED, 25 CONFIRMED** — `docs/architecture/08-sync-audit-ledger.md`. Целевая архитектура и дорожная карта — `docs/architecture/09-target-architecture.md`. **Стратегический вывод (grounded):** потолок художественности — в НАШЕЙ организации пайплайна (нарезка + структура редакторских проходов + контракт переводчик/редактор + отсутствие меж-чанковой когезии), НЕ в моделях. Подтверждает D30.7; переопределяет источник следующего прироста качества = архитектурный. Рычаги **сцеплены** (редактор репараграфизует ВНУТРИ чанка → нарезка ограничивает потолок дискурс-переверстки) → концерны 1/2/4 проектируются вместе. **Ратифицированные диспозиции несущих находок (все CONFIRMED по file:line):** 1. **Редактор = ОДНА full-regen с 4 мандатами** (верность/стиль/глоссарий/reflow) — DISTORTION research/07 («узкие мандаты + диффы»); причина хвоста инверсий D34.3. → слой 3 (узкие проходы / diff-editing). 2. **Верности нет владельца в дешёвом пути** — inversion-guard D37 §2г НЕ построен; до Ф2 смысл в проде не контролирует ничто. → слой 5 (детерм. inversion/omission-бэкстоп). 3. **Нарезка — потерянный рычаг:** размер = const в неверной единице (символы исходника, не выходные токены); границы бюджетные, не логические; edit-единица=draft-единица; меж-чанковой когезии нет (мёртвые заглушки `STMDepth`/`OverlapTokens`). → слой 1. 4. **«D35.7» — фантомный номер** (декаплинг draft=чанк/edit=глава цитируется как решение в PROGRESS/exp14/research18, записи в D-логе НЕТ; в контракте — лишь un-ratified кандидат D35 п.7, `05:471`). **Формализуется здесь:** декаплинг = ратифицированная ЦЕЛЬ слоя 1, реализация гейтится треком B; **фантомные цитаты `D35.7` подлежат вычистке/переуказанию на D39** (док-долг трека A). 5. **Терм-дрейф: код-корень жив** — D38.5-фикс = сид-воркэраунд (промоут 5 термов), `memory.go` не тронут; `suppressContained` disposition-слепой + editor-блок CONFIRMED-only → любой draft-длиннее-approved снова тихо (и НЕлогируемо) уронит верный термин. → слой 4 (disposition-gate suppressor + громкий лог). 6. **В контуре ноль сигнала качества** — запрос владельца (п.25/п.31) + research/18 §C1 #10 «СЕЙЧАС» молча спущен в Ф2. → слой 5. 7. **Слоя пар языков нет** — промты zh→ru-baked, `Book.LangPair()` мёртв, ja-пример едет через «китайский паратаксис»; язык промпта всегда русский (V4-п5 не закрыт). Сам версионируемый слой был осознанно отложен под ROI (`05:471`, НЕ телефон), но латентный баг + V4-п5 открыты. → слой 2. 8. **Чистота бьёт по грядущим расширениям:** readability-гейты target-слепы; role→инъекция = рукоправимый switch; strip-and-export размазан по 5 файлам; сироты-промпты; мёртвый `gatesEnabled()`. → слой 7. Плюс подтверждено ВЕРНОЕ (не трогать): разделение переводчик/редактор осознанно (D30.2); few-shot редактора структурны (не «правильно-переводные» — претензия владельца тут мимо); техники Ван Цуй перенесены дословно; чэнъюй-атом корректен. **Решения владельца по подходу (AskUserQuestion 13.07):** (1) **фазово** — трек A build-now (память-корень → детерм. quality-сигнал+inversion-бэкстоп → export-contract → гигиена-сеамы → слой-2-сеам → док-долг) ∥ трек B ресёрч (единая матрица `граница×edit-единица×когезия×где-reflow` + интернет-best-practices нарезки; ⚠ exp14 vs research/18 §A конфликтуют по размеру чанка — решает эмпирика); **пере-прогон — только после трека B** + приёмки ключевых build-now. (2) **Слой пар = СЕАМ сейчас, контент только zh→ru** (убирает латентный баг, разблокирует расширяемость; другие пары — под реальную книгу). **Процесс (концерн 5):** постоянный findings-ledger как повторяющийся шаг оркестратора (этот аудит = экземпляр 1, `08-*`); вопросы research/18 §D «к бэкенду» маршрутизируются обратно; completeness-critic на границе фаз. Незакрытые владельческие идеи (input-limit V2-п3, abuse-prescreen V2-п1, user-stop V2-п2, parallelism/speed V4-п1, glossary-auto-build V4-п4, self-improvement V1/V3) — получают явную диспозицию в треке A (док-долг), даже если «Ф2/Ф3». **Курс/столпы целы** (деньги/durability, snapshot, детерм. память, echo-гейт, 18+, дешёвый трек, конфиг-первое ядро); целевая арх = декомпозиция+достройка по сеамам, не переписывание. Планка пере-прогона — 2 претензии (интерим, не пилот Ф2.5). Следующее от оркестратора: хендофф-промты трека A (бэкенд) и трека B (полигон+ресёрч). ## D39.1 — Трек B: research/19 (нарезка+когезия+контракт t/e+пре-рег эмпирики) ЗАЛЕНДЕН (16.07, оркестратор №6). ✅ Сессия-ресёрчер исполнила `RESEARCHER_CHUNKING_COHESION_SESSION_PROMPT` (архив с баннером). Выход: **`docs/research/19-chunking-cohesion.md`** + приложение `-sources.md` (52 несущих клейма: 36 CONFIRMED / 16 OVERSTATED-с-внесёнными-коррекциями; 65-агентный веб-воркфлоу author≠reviewer + 5-линзовое пост-хок само-ревью, 8 MAJOR исправлены до сдачи; §A заморожен sha256 до чтения стека). **Оркестратор-ревью НЕ проводилось — прямое решение владельца 16.07** («сильное ревью уже было, сильная модель верифицировала») — фиксирую отступление от дисциплины research/15–18 как владельческое, не прецедент по умолчанию. **Ратифицирую содержание как дизайн-оф-рекорд трека B:** 1. **Конфликт exp14↔research/18 разрешён как ложная дихотомия:** «чанк» склеивал три параметра — **единица эмиссии** (деградация на 2k–8k out; потери смещены в хвост), **окно чтения** (кэш делает префикс дешёвым, но качество падает на длинном входе — Context Rot/NoLiMa), **единица связности** (сцена/глава). Дизайн: мелко-средняя эмиссия + селективное read-only окно + когезия МЕХАНИЗМОМ (carryover/lookahead/детерм. стейт), не размером. 2. **Go-спека чанкера (слой 1):** снапшот-folded конфиг (strategy greedy|logical; бюджет в ВЫХОДНЫХ токенах через калиброванную фертильность); структурный профиль (шаг 0) → классы границ B0–B5 → **DP-упаковка в целых числах** (Кнут-Пласс; никаких float в путевых суммах); фоллбек-веер (плоский текст/стихи/паратекст/мега-предложение); `Chunk` расширяется аддитивно. Анти-скоуп: НЕ LLM-сегментация, НЕ ML-сцены (F1≈24–37%), НЕ эмбеддинг-границы, НЕ LLM-running-summary в проде, НЕ RAG-оверлап. 3. **Когезия (B3):** carryover K=2–3 (src ∥ невыровненный target-хвост) + lookahead M (катафора; параллелизм-безопасен; шов-дедуп-гард — coverage не проверяет верхний len_ratio) + детерминированный сцен-стейт (sticky ids + пол из сида). Новые кнобы `carryover_sentences`/`lookahead_sentences` (мёртвые `stm_depth`/`overlap_tokens` снести); байты — через messages→request_hash, кнобы — в снапшот. 4. **Волновая архитектура W0–W3 (B3-бис, вводная владельца 16.07 = V4-п1):** параллелизм чанков в волнах (W1 черновики параллельно с src-контекстом → **W1.5 глобальная консолидация банка** [= V4-п4 glossary-auto-build; глобальная пост-хок сборка бьёт онлайн-замок — LTCR/BooookScore] → W2 редактура параллельно с draft-соседями → W2.5 швейный микро-пасс по Q5 → W3 reflow-план). Последовательность несут ВОЛНЫ, не чанки; ретрай изолирован (нет каскадной переоплаты). Цена параллелизма (draft-сосед vs final-сосед) — измеряется Q3a. 5. **§D = пре-рег дизайн эмпирики Q0–Q5** (фриз коммитом до первого платного вызова, пинит хеши бэкенда/сида/промтов): корпус S1–S4 (платные армы только zh→ru S1/S2; S3/S4 — $0 чанкер-профилирование, инвариант общности §0.1); маркированный трап-набор 8 типов (стратификация по дистанции антецедента, общий знаменатель контраста — анти-null); армы: Q1 граница (size-match!), Q2a edit=глава (draft приколочен — атрибуция), Q2b ре-атрибуция sizecurve ($0), Q2c широкое-окно/узкая-эмиссия (развязка §A.1), Q3a carryover×3 режима (= цена параллелизма), Q3b lookahead, Q4a сильный переводчик (+do-nothing суб-арм), Q4b diff-редактор, Q4c reflow-пасс, Q0 do-nothing эквивалентность (TOST); двойной якорь A0↔A0′ = floor шума; reflow-инвариантный omission (длино-гарды смещены против крупных чанков); карта независимости сигналов (D32.4-гард); бюджет ~$8–15; человеческий эндпоинт гейтит. 6. **Открытые вопросы:** владельцу — §E.1 (гибрид при ненулевой цене параллелизма? человеческий гейт W1.5 в середине книги?), §E.2 (пол в схеме сида — подпись), §E.3 (транскрипция per-book), §E.4 (бюджет пакета); бэкенду — §E.5–8-бис (аддитивный `Chunk`, кнобы когезии, дифф-apply после Q4b, **⚠ чек слагов DeepSeek до 2026-07-24**, **⚠ вендор-чек префикс-кэша ZAI/GLM** — вся кэш-экономика W1/Q2c условна на нём). **Дальше:** полигон-эмпирика по §D — отдельный промт оркестратора (после лендинга трека A пак-1); правки exp14↔research/18-цитат не требуются (оба остаются верными в своих осях — §A.1 их примиряет). ## D39.2 — Трек A пак-1 ЗАЛЕНДЕН (`d3f6b34`): trust-gate памяти + export-contract + pair-сеам + реестры + quality-report (16.07, оркестратор №6). ✅ Бэкенд-сессия исполнила `BACKEND_TRACKA_PACK1_SESSION_PROMPT` (T1–T4, только `backend/`, не коммитила). **Верификация оркестратора — ПРЯМАЯ, исполнением:** `go build/vet/test -race ./...` зелёные (прогнал сам); golden-детерминизм fresh↔resume PASS; все пиновые тесты вербозно (4 suppressor-кейса, exportNormalize/stripCosmetic, sanitizer firing↔non-firing, pair fail-loud ja / resolve zh, quality-KPI); построчное чтение несущих диффов (`memory.go` trust-gate — семантика корректна вкл. «продолжай скан на ≥-trust контейнер» и «событие только если термин выжил»; `stagerun.go` — strip считается ОДИН раз, симметрично fresh/resume, эскалация консистентна, деньги не тронуты; `exportNormalize` — трассирован ephemeral: только FinalText-проекция + quality.go, НЕ wire/hash/чекпоинты); **golden re-capture воспроизведён независимо** — маскированный структурный дифф старого↔нового = 0 строк расхождения (менялись только хеши/версии + два новых пустых поля). Бэкенд-само-ревью: 13-агентный адверсариал (0 critical/high; поймал и починил EchoRate>100% и NFKC-регресс «…»→«...» → width.Fold). **⚠ Честная калибровка: мульти-агентный второй рубеж оркестратора 3× подряд упал на API-529 (перегруз, 0 токенов) — НЕ проведён; зарегистрирован ДОЛГОМ** (прогнать по восстановлении API; находки → фикс-лист пак-2 — штатный маршрут D37, лендинг не блокирует). **Что залендено:** **T1** — disposition-gated `suppressContained` (`memmatch-v4`; draft-длиннее больше не съедает вложенный approved; отказ = громкий `retrieval_state.n_trust_gated_suppress`+detail, миграция store v8) + стейл-D1-комменты сняты (поведение CONFIRMED-only цело). **T2** — `exportNormalize` на КАЖДЫЙ FinalText (width.Fold НЕ NFKC — NFKC калечит «…»/«№»; 、。-маппинг; стрип комбинирующего ударения с NFC-гардом на й/ё); санитайзер = чистый детектор (recoverable-глифы чинятся молча, флаг только на contentless-Han). **T3** — реестр `roleInjectionRenderers`; readability-гейты за `isRuTarget`; **pair-keyed промпт-сеам** (`Stage.Prompts{zh-ru:…}` + fail-loud, `Book.LangPair()` ожил; SHA-нейтрально для zh→ru); strip-resolver один (classifyOutput возвращает stripped); сироты `analyst/terminologist.md` снесены, `gatesEnabled()` снесён, `foldModelWire` извлечён. **T4** — `tmctl report`: детерм. per-run quality-report (mean_spp, тире, CJK, глоссарий, дрейф, echo; rate-знаменатель bounded), наблюдаемость не гейт. Снапшот-сдвиги: memmatch-v4 + sanitizer-v5 → плановый единый `--resnapshot` (уже требовался D38.5). **Открытые вопросы пак-1 (маршрутизация):** (1) **полигон-поверхность экспорта** — `records.json`/сырые чекпоинты не видят export-normalize; фикс НЕ в Python-зеркале, а бэкенд-поверхностью (`tmctl`-экспорт / derived-checkpoint — пак-2; решить до пере-прогона). (2) билингв-редактор src→dst — открытый дизайн-вопрос D30.1 (в Q-очередь трека B/пак-2). (3) CJK-глоссы `(羅漢拳)` — решение владельца. (4) `example/book.yaml` (ja) теперь fail-loud — ja-ru пакет или переоформить пример (мелочь, пак-2). Плюс входящие из research/19 §E.5–8-бис (кнобы когезии, дифф-apply после Q4b, **DeepSeek-слаги до 24.07**, **вендор-чек кэша ZAI/GLM**). ## D39.3 — Пакет «банк-майнинг W1.5» ратифицирован: диспозиция H15/V4-п4, промт research/20 выдан с HOLD-гейтом (16.07, оркестратор №6). ✅ По записке ресёрчера-19 (передана владельцем; владелец хочет проработку авто-формирования банка из черновиков отдельным пакетом «ресёрч → полигон → бэкенд-дизайн»). Это штатная диспозиция док-долга D39: **H15 (NEVER_CLOSED) + V4-п4 → АКТИВНЫЙ пакет**; V4-п1-эскиз владельца (сноски переводчика → парсинг → банк) абсорбирован как арм (б). Ядро пакета: (а) потолок ЧИСТОГО КОДА — recall/precision детектора (частота × PMI × **разброс переводов в черновиках** — новый сигнал) против сида v2 как ground truth, ДО любого LLM; (б) канал «сноска переводчика» (строгий разделитель, срез кодом на границе волн, редактор не видит) vs код vs гибрид — по recall и цене (~$0.004/$0/~$0.02 на ранобэ — пере-верифицировать); ⚠ сноска затрагивает детерминированные гейты (sanitizer trailing-note, coverage-знаменатель, max_tokens, echo, request_hash) — интеграционные точки перечислить в дизайне; (в) консолидация W1.5 (канон по всем вхождениям, алиасы+пол, дисциплина сида НЕ меняется); (г) слепые зоны кода (консистентно-неверный перевод, 转-полисемия, редкие реалии) → где LLM/локальная-9B (exp06, спот=локаль/рендер=облако). **Гипотеза №1 владельца («код сам разметит всё») — проверяемая, не пресуппозиция.** Прайор-арт: exp06/research-06, G1-эскиз, память v2, сид v2; данные черновиков $0 (records.json + артефакты exp14/15). **Тайминг (условие ресёрчера-19, ратифицирую): промт `RESEARCHER_BANK_MINING_SESSION_PROMPT.md` ВЫДАН с HOLD-гейтом — запуск после пре-рег фриза exp15** (фокус полигона не разбавлять); полигон-стадия пакета — после завершения exp15; слой-1 пакетом не гейтится. ## D39.4 — Адверсариал-долг D39.2 ПОГАШЕН (8 осей, оба пака); лендинг пака-1.5 ПРИДЕРЖАН под фикс-лист F1–F9 (17.07, оркестратор №6). ✅ API-529-долг закрыт: 8-осевой refute-by-default воркфлоу (деньги/resume · снапшот · trust-gate · export-normalize · pair-сеам/конфиг · quality-report · export-поверхность · глосс-whitelist), всё исполнением, ~1M токенов, $0 к провайдерам. **Итог: 0 CRITICAL · 1 HIGH · 6 MEDIUM · 14 LOW · 14 NOTE**; ядро обоих паков держится (деньги/resume/детерминизм/SHA-нейтральность/trust-gate-семантика — CONFIRMED-SAFE), находки — по краям новых поверхностей. **Несущее:** (1) **HIGH — обход санитайзер-гейта, воспроизведён исполнением:** 5/6 классов детектят по сырому тексту, exportNormalize шипит свёрнутый → полноширинная вариация сигнатуры («перевод:», «###») обходит детектор, а нормализация изготавливает ASCII-дефект в экспорте; регресс vs v4-поведения. Фикс = fold-first детекция + инвариант `sanitizeOutput(exportNormalize(x))==0`. (2) **MED×2 (глосс):** isValidGloss не ограничивает латиницу — «(拳 the …)» проносит английскую фразу чистой (найдено НЕЗАВИСИМО осями 4 и 8). (3) **MED×2 (export):** gate-drift (гейт из текущего конфига, не снапшота) + нет manifest-сверки (частичная книга молча «полная» — класс D37-скью). (4) **MED×2 (quality):** gate-withheld чанки в KPI-популяции; `cjk_leak_rate` считает markdown-only strips. **Решение:** пак-1.5 НЕ лендится до F1–F6 (+дешёвые F7–F9); v6 не лендился → fold-first вливается в ТОТ ЖЕ бамп v5→v6 (один golden re-capture). Фикс-лист вписан в `BACKEND_TRACKA_PACK15_SESSION_PROMPT.md` §T4 (слот ровно для этого). LOW/NOTE-хвост — в ledger-очередь (Retries-снапшот pre-existing; pair-fail-loud-до-store; trustGateEvent первый-отказ; и пр.). Прямая верификация оркестратора (build/vet/race, 12 пиновых тестов, независимая репликация masked-golden-диффа = ПУСТО) — подтверждена воркфлоу без расхождений. ## D39.5 — Трек-A пак-1.5 + фикс-лист F1–F9 ЗАЛЕНДЕНЫ одним пакетом (17.07, оркестратор №6). ✅ Бэкенд исполнил §T4-фикс-лист поверх T1–T3; оркестратор верифицировал исполнением (свежий `-count=1 -race` весь зелёный; 16 пиновых тестов вербозно; независимая репликация masked-golden-диффа = ПУСТО — только хеши + sanitizer-v5→v6; спот-чтение fold-first: детекция по свёрнутому, strip/export по оригиналу, офсеты не пересекаются, fold идемпотентен) и залендил (`git log -1`). **Что залендено:** **T1** `tmctl export` — read-only поверхность для полигонной экстракции (final_hash→checkpoint→exportNormalize; glossary-gate re-derive как status; +F3 ConfigDrift-поле/WARN при снапшот-дрейфе; +F4 manifest-join: `[]` не null, pending-строки, Total/Pending-счётчики, ghost-строки дропаются с WARN; +F9 fail-loud на DispOK без final_hash). **T2** глосс-whitelist v6 (голова+скобки, ≤6 CJK; +F2 бound не-CJK: ≤40 рун, пиньинь-токены ≤24 рун/≤cjk+1; +F1 **fold-first детекция всех 6 классов** — закрыт HIGH-обход полноширинными сигнатурами; инвариант-тест `sanitizeOutput(exportNormalize(x))==0`). **T3** пример zh→ru runnable (+F8 palladius). **F5/F6** quality: gate-withheld вне KPI-популяции; `cjk_leak_rate`→`cosmetic_strip_rate`. **F7** resume Model-атрибуция. Сессионный адверсариал (author≠reviewer) поймал+запинил 2 дефекта своих же фиксов (U+3000-глосс детекция↔strip дивергенция; joined-пиньинь кап 14→24). **Решения по открытым вопросам:** капы `maxGlossCJKRunes=6`/`maxGlossLatinTokenRunes=24` — приняты как tunable-эвристики (residual = сохранённый глосс, не дроп чанка; ревизия по пере-прогону); F6-rename принят (CJK-специфичный сплит — дешёвый follow-up по надобности); F3-поза field+WARN (не fail-loud) — принята, зеркалит Status. **Ledger-очередь без изменений** (golden-глосс-ячейка, escalated+stripped тест, Retries-снапшот, пунктуационные огрызки и пр.). D39.2-open №1 (полигон-поверхность) — ЗАКРЫТ этим лендингом; полигонная экстракция пере-прогона обязана читать `tmctl export`, не сырые чекпоинты. ## D39.6 — research/20 (банк-майнинг W1.5) ЗАЛЕНДЕН с ревью-шапкой; §D-эмпирика гейтится exp15 (17.07, оркестратор №6). ✅ Ресёрчер-20 исполнил D39.3-промт (с амендментами ресёрчера-19: 3 варианта детектора V-A/V-B/V-C с trade-off-таблицей; алиас-кластеризация — явная подзадача с трёхъярусной границей код/LLM/человек). Верификация оркестратора: §A-хеш байт-в-байт MATCH; репо-клеймы спот-проверены file:line; **конфаунд глоссарий-инъекции в records.json corroborated** (черновики rerun генерились С сидом → спред-сигнал на GT подавлен → cold-start срез в §D несущий). Отклонение HOLD-гейта принято (запуск указанием владельца; exp15 не стартовал — фокус полигона не тронут). **Несущее из отчёта:** (1) внешний потолок ATE (ACTER F1 0.14–0.58) — floor-калибровка, наш таргет уже (салиентные сущности; гипотеза №1 правдоподобна из-за узости); (2) детектор-лестница V-A (частота×контраст×c-value с фиксом одночарной вырожденности) → V-B (+спред переводов, LTCR-стиль) → V-C (+паттерны 百家姓/титулы/форманты + Палладий-детектор ru-стороны + жанр-паки = детерминированный H15-рычаг); (3) алиасы: ярус-1 код R1–R4 (вкл. негативные констрейнты: 族长⊂四代族长-урок D38 §3), ярус-2 = кореференция (LLM/9B, §D-A6b), ярус-3 подпись; ГТ алиасов тонкий (2 шт.) → мини-голд у владельца; (4) канал сноски banknote-v1: 12 интеграционных точек с гейтами перечислены (мандат D39.3), включая несущий re-point final_hash OK-пути на derived-чекпоинт при резюме; цена пере-верифицирована $0.01–0.1/ранобэ (оценка 19-го «$0.004» занижена, класс «копейки» подтверждён); (5) **§B5 инвариант общности слоя 4** (вводная владельца 17.07): движок языко-агностичен, 6 плагин-интерфейсов P1–P6 (данные, не ветки кода), политика degrade-with-flag (кроме P1 fail-loud); (6) §C: консолидация = канон по ВСЕМ вхождениям × Палладий-конформность (не мажоритарность), майнер НИКОГДА не пишет approved; (7) §D: пре-рег с порог-дисциплиной 60/40, катастроф-скрин ядра, решающие правила гипотезы №1 (recall ≥85% f≥3 И canon-recovery ≥70% cold-start) и канала сноски (маржин ≥10 п.п. на f<3 И Δкачества≈0 И parse_fail<5%). **Тайминг без изменений:** полигон-стадия §D — ОТДЕЛЬНЫМ промтом ПОСЛЕ exp15. §E-владельцу (мини-голд · ≤$5 · политика канона · жанр-паки · реплика ja→ru) — вынесены. §E-бэкенду — слоты, не строить до §D. ## D39.7 — exp15 (сегментация/когезия Q1/Q3/Q0+FLOOR) ЗАЛЕНДЕН в REV.2 после двухраундовой верификации; «граница вредит» ОТОЗВАН как артефакт рига (18.07, оркестратор №6). ✅ **Дуга:** платный блок exp15 сдан → верификация оркестратора (6 осей по сырью) поймала **CRITICAL**: заголовок Q1b «оракул хуже слепого −0.564» был артефактом судейского окна `HEAD_CHARS=1100` (dependent оракул-арма сидел вне окна в 13/18 ячеек; 17/18 трапов оракул вообще не резал; T-ent-«size-контроль» — пост-хок с тем же артефактом) + Q3a «цена параллелизма ≈ 0» не ратифицировалась (floor-гейт пропущен, подмена метрик, пост-хок T-ana-only, катастрофа победителя T-ell-43 не раскрыта) + Q0 «эквивалентность» не установлена (TOST fail). Полигон исполнил фикс-лист (харднинг ригов, per-vote персист, FLOOR-блок $1.24, пере-суд Q1b полными чанками $1.72, floor-относительный рерайт §7) → **точечная пере-верификация (3 оси): CONFIRMED из per-vote сырья, 0 расхождений в числах**; остаточные док-дефекты (счётчик 556, список девиаций, T-ana-33/чанк-42, скоуп-метки) исправлены оркестратором при лендинге (`fe34a16`). **Ратифицированные результаты (все floor-относительные; floor судейского шума = 0.126 per-cell, A0↔A0′ matched full-chunk):** 1. **Q1b:** «граница вредит» ОТОЗВАН — свинг +0.689 после полных окон (T-ana −0.564→+0.125; артефакт-сигнатура dep-in/dep-out +0.238/−0.872 → +0.176/+0.028 = чистое устранение). Исправленный вердикт: primary +0.072 CI90 [−0.05,+0.20] — на/под полом, LOO-хрупко (grok +0.31/mistral −0.03, судьи расходятся по знаку), пре-рег пин (≥+0.10 И p<0.05 Holm) не пройден → **граница — НЕ рычаг на этом материале** (ни вред, ни польза). Q1a: статическая детекция сцен 0/7 = слепой greedy (STSS-класс). Единственный устойчивый хвост: слепые разрезы иногда рвут entity-кореференцию (T-ent катастрофы flat 15 vs oracle 1) — control-класс, на полу. 2. **Q3a:** carryover — все эффекты под полом (пре-рег primary src −0.005; fix-rate pooled 2/6 во всех режимах); T-ell-43 = катастрофа carryover-победителя (раскрыта). Выживает ТОЛЬКО: **«преимущества последовательного final-соседа нет нигде» (точка ≤0 в обеих метриках, все LOO-срезы)** — волновое направление не опровергнуто, но «зелёный свет» НЕ ратифицирован (§D5-правила такой ветки не дают; мощность |cost|≲0.05–0.10). 3. **Q0:** редактор на когезия-трапах — TOST fail → «данных мало» (ветка §D5 «мандаты редактора пересматриваются» НЕ триггерится); при этом редактор режет катастроф-хвост 66→52 (−21%, vote-единицы). Стиль/reflow-ценность редактора здесь НЕ мерилась (exp14). 4. **Несущие $0-находки:** фертильность **est_out = 1.20·cjk + 0.39·other** (R²=0.96) — вход фикса `L2-budget-wrong-unit` слоя-1; DeepSeek peak-valley официально (пики UTC 01–04/06–10 = ×2) → scheduler-aware волны = прямой COGS-рычаг (бэклог слоя-1); baseline: пайплайн держит ~73–77% адверсариальных кросс-граничных анафор (вклад глоссария не изолирован; возможна претрейн-инфляция). **Следствия для слоя-1 (пред-варительно до слепого чтения владельца + чистовика на свежей новелле):** сцен-детекцию и carryover-машинерию для книг этого класса НЕ строить; приоритет — размер/бюджет в выходных токенах (фертильность) + волновой параллелизм (направление чисто) + W1.5-банк (exp16). **Гейтящий эндпоинт — слепое чтение владельца** (пакет выдан; метрики номинируют, чтение ратифицирует). **Q4a** вынесен отдельной мини-сессией (~$2 вне капа, промт выдан). Деньги: **$12.79/$15, кап удержан**; спент верифицирован до цента, v1-леджер сохранён в провенансе без двойного счёта. **Процесс:** двухступенчатый мандат отработал образцово — сессия поймала 9 багов до трат, рубеж-2 поймал артефакт до контракта (D37-класс), per-vote персист теперь стандарт судейских ригов. ## D39.8 — Слепое чтение exp15: планка НЕ пройдена ни одним армом; читатель подтвердил метрический null; битва качества переносится в дефект-классы (18.07, оркестратор №6). ✅ Гейтящий человеческий эндпоинт exp15 исполнен (владелец + 2 внешние слепые читки; un-blind ПОСЛЕ вердиктов; аддендум §7.9 `034660c`). **Ключ: V1=oracle · V2=q3a-src-carryover · V3=flat-A0=прод.** Вердикт: «≤2 претензии» не проходит никто; обе исторические претензии живы. **Несущее: дефекты РАСПРЕДЕЛЕНЫ по армам** (род — верно только у прод-V3; «терем» избежал только carryover-V2; стих плоский у всех; ритм-спот худший у оракула-V1) — читательский уровень подтверждает floor-null D39.7: армы различаются тем, ГДЕ ошиблись, не классом ошибок. Ранжирование читок (V1→V3→V2) объясняется НЕ рычагами когезии: V2-брак = eval-риг без прод-гейтов (санитайзер поймал бы 待遇/一步登天) + гипотеза «src-carryover → больше исходника в контексте → выше CJK-протечка» (к пере-прогону); V1-опознание = баг генератора пакета (хвост за границей референса). **Ратифицировано:** (1) курс D39.7 подтверждён финально — сцен-детекция/carryover-машинерия НЕ строятся для книг этого класса (оба уровня согласны: метрики + читатель); (2) **дефект-класс-леджер пере-прогона** (все — пак/банк/гейт-уровня, НЕ нарезка): 时辰-юниты (НОВЫЙ класс: детерминированная конверсия единиц в пакет пары; «3 часа» вместо ~6 системно в 2/3 армов) · числа-масштабы 千万/数十万 (b1, свежая эмпирика) · gender-enforce полем сида (Бай Нинбин: hidden→male-до-reveal, D19.3-класс пойман живьём) + род говорящего в диалоге (Ф2-annotator) · стих/аллюзии (пак-политика + сноски-lever) · регистр-лексикон (негатив-лист «терем»-класса); (3) **инструмент-фиксы слепых пакетов** (в промты будущих мониторов): авто-QA до человека, обрезка по общему финалу, 2-way для тонких контрастов, тир-структура претензий; (4) леджер Opus принят в сырьё. Чистовик всех exp15-выводов — на вне-претрейн новелле (без изменений). ## D39.9 — Q4a «сильный переводчик» ЗАЛЕНДЕН: верность НЕ покупается на translate-стадии; слабое звено — редактор; pro-арм НЕ ратифицирован (18.07, оркестратор №6). ✅ Мини-сессия исполнила B-hybrid (санкция оркестратора: инструмент = детерминированные смысл-трапы exp14b-класса с исправленными правилами, floor-иммунный; парность байт-идентичная). Полный квадрат {flash, pro}×{сырой, +glm-редактор}×3 сида = 84 ячейки, 9 трапов. Верификация оркестратора: скорер пере-исполнен ($0) — покрытие 26/27=26/27, COGS ×3.67, glm-ломки воспроизводятся; внутренний адверс-верификатор сессии поймал и отозвал ложный заголовок «pro омитит 6×» ДО сдачи (усечение finish=length + локатор-асимметрия — HEAD_CHARS-класс, пойман рубежом author≠reviewer). **Ратифицировано:** (1) **flash-черновик уже верен на смысле** (25 fix/0 fail/27); pro — не точнее (роняет d2-контрфактив), покрытие равное, цена ×3.67 → **pro-арм НЕ ратифицирован**, «верность у переводчика» закрыта как направление для этой пары моделей; (2) **смысл-катастрофы рождает glm-РЕДАКТОР** (инвертирует 丙→«разряд Б», 族长→«старейшина» из чистого черновика) → путь D38 подтверждён третьим независимым способом: **слабое звено = редактор; свап glm→mistral/deepseek-pro — приоритетный арм пере-прогона**; (3) судейский пол на смысл-трапах 0.261 (>0.126 когезии) — выбор DET-primary валидирован: судьи на этот вопрос ответить не могли. Деньги $1.32/$2, вся траектория персистирована, pro — в долине; A-мини пропущен обоснованно. **Дефекты инструментов (наследие exp14/14b, к $0-ре-аудиту):** (а) правила exp14b `rule_counterfactual`/`polarity_envy`/`b1` дефектны — исправленные оверрайды в `eval/exp15/q4a_traps.py`, при пере-чтении exp14/14b использовать ИХ; (б) **харнес `exp14_common.call` НЕ отклоняет `finish=length`** — усечённый выход проходит как валидный («0 ошибок» слеп к нему). **Диспозиция: платный пере-прогон exp14b НЕ нужен** (несущие вердикты D38 span-верифицированы независимо от правил при лендинге; Q4a-эмпирика бьёт в ту же точку), но заказан **$0-ре-аудит** (пре-задача exp16): пере-скорить сохранённые exp14b-выходы исправленными правилами + свип finish=length по exp14/14b-леджерам; флип любого D38-вердикта → errata-блок в D-лог. exp15-программа ЗАКРЫТА ПОЛНОСТЬЮ (D39.7 метрики · D39.8 чтение · D39.9 Q4a). ## D39.10 — exp16 (банк-майнинг W1.5) ЗАЛЕНДЕН: гипотеза №1 РАСЩЕПЛЕНА — код находит сущности (0.97), но канон-dst доставляет БАНКНОТА; ре-аудит exp14b чист (19.07, оркестратор №6). ✅ Программа §D research/20 исполнена полностью за **$0.0226/$10** (почти всё — детерминированный код + стенд). Верификация оркестратора: тюнинг-свипы пере-исполнены ($0, детерминированно — пороги/катастроф-скрин воспроизводятся); 6-осевой адверсариальный селф-ревью сессии (0 critical; MAJOR стоп-гейт пойман ДО спенда: truncation-гейт был length-only, а DeepSeek режет и с `insufficient_system_resource` → принимается только `finish=stop`). **Ратифицировано:** 1. **WHICH — ПОДТВЕРЖДЕНА:** детектор V-C (паттерны+форманты+Палладий-канал) находит сущности банка за $0 детерминированно: **recall 0.97 (f≥3) / 0.965 overall на held-out** (ch16–25), катастроф-скрин PASS, алиасы 2/2; паттерны закрывают частотно-слепое (f<3: 0→0.71). Спред-сигнал на инъектированных черновиках — конфаунд (изолирован; на cold-start реален, но скромен). 2. **WHAT — ОПРОВЕРГНУТА для ко-оккуренции:** canon-recovery 0.20–0.68 < порога 70% — chunk-Dice/PMI не извлекают dst из черновиков (вырождение на вездесущих/локализованных термах — гранулярность, не базовая ставка). Имена доставляет Палладий; термы — НЕТ. **⟶ dst-канал = БАНКНОТА + облако+Палладий, НЕ ко-оккуренция** (вход бэкенд-дизайна слоя 4). 3. **Банкнота (идея владельца V4-п1) эмпирически оправдана в своей нише:** parse_fail 0%, переводчик сам эмитит dst (蛊→«гу», blurb-термы, + не-сидовая 龙公); ниша = доставка dst, НЕ recall (код сильнее на f<3: 8/10 vs 5/10). Плюс показала Z2-дрейф без якоря (转→«оборот»). 4. **Локальная 9B:** споттер на вебновеллах 0.895 (оговорка exp06 «0.98 на PD-классике» ПОДТВЕРЖДЕНА; код ≥ локаль → локальный споттер не нужен); **Z1-верификатор слаб (wrong-catch 0.33**, принимает 族长→«старейшина») → **Z1-адъюдикация в облако**, не локаль. 5. **Ре-аудит exp14b (§0): ядро D38 ДЕРЖИТСЯ** — каждая локализуемая исправленным скорером ячейка совпала с ручной span-читкой D38 дословно; 2 расхождения = пустой span (`?`), не семантический флип. Свип 477 записей: 32 усечёнки, **ни одна не в несущей DET-ячейке** (gemini/kimi-армы дропнуты ещё в D38; новая находка D 2.1 = SOFT-усечёнка — риг-гигиена, несущее не задето). **Errata к D38 НЕ требуется.** Errata coldstart_gen (stop-only) — принята (само-ревью ДО спенда). 6. **Флаг (правило двух направлений):** пик-окно D39.7 (01–04/06–10 UTC, из офиц. сайта через владельца) vs документированный старый off-peak 16:30–00:30 UTC — сверить актуальную вендор-доку ДО следующих платных deepseek-прогонов (прогон exp16 шёл в дешёвом окне по обеим трактовкам; ни одну не абсорбировать без сверки). **Итог: W1.5-дизайн для бэкенд-слоя 4 полностью подкреплён данными** — детектор V-C (WHICH, $0) + банкнота (dst) + Палладий (имена) + консолидация §C2 + подпись владельца. Тачпойнты владельца (карта подписи/пол · мини-голд алиасов · precision@30) — сайдкары готовы, не блокируют бэкенд-пак. **Исследовательская программа арх-ресета ЗАВЕРШЕНА** (exp15 D39.7–9 + exp16 D39.10) — следующий шаг: бэкенд-пак слоёв 1+4 под доказанный конфиг. ## D39.11 — Директива владельца: стройке предшествует ДИЗАЙН-СИНТЕЗ с верифицированными алгоритмами; хендофф оркестратора №5; сессия №6 закрывается (19.07). ✅ **Процесс-решение владельца (ратифицирую дословно):** в бэкенд «просто так не бросаться». Между завершённой исследовательской программой (D39.1–D39.10) и бэкенд-паком вставляется **проект-ресёрч сессия дизайн-синтеза**: синхронизировать ВСЕ находки (research/19–20, exp15/16, аудит 08, дефект-классы слепого чтения) → выработать чёткий план реализации «что и как меняем» с **разработанными и верифицированными алгоритмами** (self-проверки в каждом шаге) → ратификация плана → только затем промт бэкенда → бэкенд реализует. Это финальное закрытие концерна «тактическое латание»: стройка только по ратифицированному плану. **Хендофф:** оркестратор №6 закрывает сессию (арка D39–D39.10 исполнена целиком: синк-аудит → 7-слойная архитектура → трек A построен → трек B исследован → exp15/exp16 закрыты с двухраундовой верификацией). Роль передаётся хендоффом №5 (`ORCHESTRATOR_SESSION_PROMPT.md` переписан начисто; №4 — в архив). **Первый deliverable №5 — промт дизайн-синтез сессии.** Висящие тачпойнты владельца (карта подписи/пол · мини-голд алиасов · precision@30 · старые решения) и опция ja→ru-реплики — в хендоффе. ## D39.12 — План реализации (`architecture/11-implementation-plan.md`) РАТИФИЦИРОВАН после трёх рубежей; бэкенд-пак — ЕДИНОЙ сессией (19.07, оркестратор №7). ✅ Дизайн-синтез сессия исполнила D39.11-промт (выдан `766a60e` после 20-находочного адверсариального ревью самого промта): **`docs/architecture/11-implementation-plan.md`** (1066 строк: WS1 волновой раннер · WS2 чанкер-бюджет+edit-единицы · WS3 Go-майнер W1.5 · WS4 банкнота×12 · WS5 дефект-чекеры+пакет-данные · WS6 армы; §7 порядок · §8 манифест единого resnapshot · §9 диспозиции L1–L8+H5–H19+парковки · §10 реестр 14 вопросов владельцу · §11 самопроверка · §12 quirks-заготовка) + `eval/design11/` (7 $0-скриптов, шесть верификаций PASS, детерминированы). **Верификация трёхрубежная:** (1) **ревью-2 оркестратора** (соло по лимит-констрейнту владельца — полное чтение + file:line-спот-чеки по HEAD исполнением): 8 находок [3 MAJOR: противоречие дефолтов `EditCeilingOut` 8000↔3200 · скоуп подписи W1.5 не запинен · инъекция W2 для edit-единиц не специфицирована] + 2 замечания владельца [per-model rate-guard mistral (~48% retry-fails, exp15 §7.6 REV.2) · полы per-editor-model/per-материал] + Q9-провенанс [клейм D39.7 «официально» — через владельца без пина; свежий чек 19.07: офиц. прайс ФЛЭТ → ×2 остаётся риск-пином до ре-чека 24.07]. (2) **Пост-фикс 7-агентный адверсариал сессии** (мульти-агентный рубеж, которого ревью-2 не гоняло): все 11 фиксов подтверждены, 5 новых находок впитаны — **F8 ПЕРЕПИСАН** (моя формулировка «сайзить от est_out» была неверна: `stagerun.go:87-90` уже сайзит редактора от черновика `prev`) · F1 пере-симулирован (**ратифицированный дефолт 3200 → 25 глав = 37 edit-единиц**, фикстура) · **mined-write-путь** (`loadGlossarySeed` хардкодит `Source:seed` → дельта персистится отдельным путём со штампом `Source:mined`; промоут 甲乙丙丁/四代族长 = pre-run reseed, НЕ W1.5) · снапшот-loudness реконсилирован к выделенному `render-format-version` · F6 усилен (2-я DC3-сработка = narrative-coref на hidden → довод к Ф2 сильнее). (3) **3-агентный подтверждающий пас:** 2 резидуала реконсиляции закрыты. Спот-чек внесения при лендинге — исполнением (36 маркеров, все фиксы найдены grep'ом). **Ратифицирую как дизайн-оф-рекорд:** пер-волновой снапшот (`base-bank` = approved `Source∈{seed,ruby}` / `enriched-bank` = все approved) + **инвариант секвенирования** (W2 никогда не пере-рендерит draft-стадию; черновик по `final_hash`) ⇒ «переоплата ОДНА» доказуема при обоих состояниях PostcheckGate · `EditCeilingOut=3200` · src→dst-формат констрейнт-блока редактора (закрытие D30.1) · лемматизатор — дефолт B (дроп Палладий-подканала, пере-пин 古月→22, катастроф-скрин PASS) · банкнота 12 точек (`banknoteSnap`, re-point ПОСЛЕ резолва эскалации) · DC3-инъекция всех трёх состояний вкл. hidden-мандат (hidden-чекер → Ф2) · DC5 → пак-локусы (детерм. детекция 74%/42% FP — не лендится) · mistral rate-guard (quirks-запись внесена из §12). **Гейтнутые армы (4, стройка сердцевины не ждёт):** крупная edit-единица >3200 (платный Q2a, объединить с полигон-прогоном) · качество свап-арма (платный полигон) · DC-чекеры landing ($0-FP на свежем прогоне) · mistral-арм (rate-guard). Развилки §10 — у владельца, стройку НЕ блокируют (дефолты консервативны; смена решения = конфиг/аддитив). **Решение владельца (19.07): бэкенд-пак — ОДНОЙ сессией** (не паки 2/3/4 порознь), блоками A/B/C/D с чекпойнт-ревью между; свободы сессии: рефакторинг/перенос кода разрешён (архитектурная чистота, без велосипедов), временные тесты, багфиксы по пути со скоуп-пометкой; Go-каноны; неконсистентности — даблчек всеми тулзами + эскалация; $0 к провайдерам. **Промт выдан: `BACKEND_PLAN11_SESSION_PROMPT.md`.** Очередь после пака: приёмка оркестратора (рубеж-2) → единый resnapshot (§8) → пере-прогон 3–10 глав (армы редактора) → чтение владельца (планка 2 претензии). Спент-промт дизайн-синтеза архивирован с баннером. ## D39.13 — Приёмка пака-11 Block A: WS2 + WS1a/b/c-инфра + WS4-ядро ЗАЛЕНДЕНЫ; волновой исполнитель и WS3/WS5 — резидуал с дизайнами (19.07, оркестратор №7). ✅ Бэкенд-сессия исполнила `BACKEND_PLAN11_SESSION_PROMPT` частично — с ЧЕСТНЫМ резидуалом вместо сломанного суита (мандат промта): **сдано и залендено** — **WS2 целиком** (бюджет чанкера в ВЫХОДНЫХ токенах `est_out=1.1978·cjk+0.3852·other` на реальных `unicode.RangeTable`; edit-единицы; `Chunk`+`EstOut/OversizedSentence/EditUnitID` аддитивно; мега-предложение passthrough+флаг; снос `STMDepth`/`OverlapTokens`; **src→dst констрейнт-блок редактора** [закрытие D30.1] + выделенный `render-format-version`; `segmentationSnap`; `chunkerVersion` v4→v5; golden re-capture) · **WS1a** (eager-build клиентов + read-only `client()` — гонка `runner.go:171-181` закрыта) · **WS1b** (пер-модельный rate-guard `ratelimit.go`: семафор+пейсинг конфигом `models.yaml`, транспорт-ось, обёрнут вокруг единственного provider-вызова) · **WS1c-инфра** (base/enriched `MemoryVersion`-split: base = все approved КРОМЕ `Source:mined`, домен-сепарирован; enriched байт-идентичен прежнему фолду — текущий снапшот не двигается) · **WS4-core** (`banknote.go` — байт-верный порт `banknote.py`, 7 инвариант-тестов) · WS6-частично (mistral `rate_limit`-конфиг). **Верификация оркестратора — ПРЯМАЯ, исполнением:** `go build/vet/test -race` зелёные (прогнал сам); пины свежим `-count=1 -race` вербозно (27 тестов PASS: чанкер/rate-guard/memory-split/render-блок/банкнота/golden); **независимая репликация masked-golden-диффа** — все категории объяснимы (chunker v4→v5 · снятые stm/overlap · новый `segmentation{1797,3200,1.1978,0.3852}` · `render_format_version` · src→dst-блок; 12-hex токены = хеш-производные эхо fake-модели); построчное чтение несущих диффов (memory/snapshot/models/stagerun/chunker + оба новых файла) — семантика соответствует плану. Сессионный 9-агентный чекпойнт-адверсариал Block A: 6 находок → 3 confirmed (пофикшены: 2 doc-коммента base/enriched + gofmt), 3 refuted обоснованно. **Ратифицированные девиации (обе — с эскалация-нотой сессии, принимаю):** (1) **edit-единица = grouping ЦЕЛЫХ draft-чанков** (не независимый para-pack): эмпирически те же 37 единиц / 0 straddle на корпусе, а по построению — гарантия чистой W2-реконструкции (draft-границы и так абзацные — сильнее плановой формулировки, не слабее); (2) **base-bank = «все approved кроме mined»** (вкл. Source:auto/ruby) — точная реализация ИНТЕНТА §1(в) (стабильность W1 сквозь W1.5, которое только добавляет mined); домен-сепаратор base≠enriched (W1-джоба никогда не адресуется к W2-чекпоинту) — верное усиление. **Честная калибровка: мульти-агентный рубеж-2 оркестратора при ЭТОЙ приёмке не гонялся (лимит-режим владельца) — регистрирую ДОЛГОМ** (прецедент D39.2); гасится при приёмке продолжения-пака вместе с его ревью. **Резидуал R1–R5** (волновой ИСПОЛНИТЕЛЬ W1/W1.5/W2 + пер-волновой снапшот-wiring · WS3-майнер · WS4-12-точек · WS5-чекеры · арм-конфиги) — точные дизайны в `backend/PACK11_REPORT.md` §Резидуал; **промт BACKEND_PLAN11 остаётся АКТИВНЫМ со статус-баннером** (дисциплина частично-отработанных промтов) — продолжение-сессия стартует по нему + отчёту. Очередь без изменений: продолжение-пак (R1–R5) → приёмка (с погашением долга рубежа-2) → единый resnapshot → пере-прогон → чтение. ## D39.20 — ПЕРЕ-ПРОГОН исполнен и прочитан: планка не пройдена, но дефект-классы механизируемы; mistral исключён как несущий редактор; итерация №2 дёшево (23.07, оркестратор №7). ✅ **Операционно — все несущие D39-инварианты подтверждены живыми деньгами** (`rerun2/RERUN_REPORT.md`): один `--resnapshot`; драфт оплачен один раз ($0.0109) и резюмлен за **$0.000000 на всех 3 армах** (0 flash-вызовов); echo=0; finish=stop 100%; майнинг-стоп→подпись→reject-set отработали (2 decline + 1 promote + 2 бонус-гу владельца); $6.63 < $15 (судья $6.46 — доминирующая статья). **Три независимых сигнала качества (НЕ слиты, по правилу несфабрикованной сходимости):** 1. **Судья-риг D39.7** (floor 14/14 tie = шум 0; 56 игр/арм): dspro **0.679** > glm 0.589 >> mistral **0.232**; катастроф-скрин: mistral CRITICAL (пропуск абзаца о природе гу, числа 千万→«тысячи», перенос вины 4-1, потеря 蛊师), glm/dspro MAJOR (аварии выпуска). 2. **Слепое чтение №1 (ChatGPT, сводное):** A/B/B/A/A → dspro 2 · mistral 2 · glm 1; лучшая сборка ~7.8/10 «хороший редакторский черновик». 3. **Слепое чтение №2 (Fable, гигиена-первым):** C/B/B/A/C → mistral 2 · glm 2 · dspro 1; «планку ≤2 стабильно не проходит ни одна рука». **Триангуляционная находка:** чисто-художественные выборы обоих читателей **ИДЕНТИЧНЫ** (A/A/B/C/A) и маппятся в **mistral 4/5** — тот самый арм, что у судьи-верности последний с критическими. **Анти-корреляция «гладкость↔верность» доказана трижды независимо.** **РЕШЕНИЯ:** (а) **планка ≤2 претензии НЕ пройдена** — пилот Ф2.5 этим чтением не открывается; (б) **mistral ИСКЛЮЧЁН как несущий редактор** (критические смысловые аварии, которые детерминированные гейты принципиально не ловят); его голос — north-star дискурс-промпта, не рука; (в) **dspro-vs-glm НЕ ратифицируется** этим чтением (судейский зазор 17:11 близок к шуму; сводные выборы читателей разошлись; дефект-классы обоих механизируемы) → решается итерацией №2 ПОСЛЕ механизации, дёшево (драфт $0, edit ~$0.08/арм + судья). **Дефект-классы → механизмы (маппинг полный, ложится в пак-13 «выпускной QA» + банк):** (1) 时辰=«час» — системный драфт-баг всех рук (гл.1: 三个时辰=6ч→«три часа») → промпт/глоссарий-строка + детерминированный юнит-чекер; (2) масштабы/проценты (千万, 数十万, 六成六=66%→«6,6») → расширение число-дрейф-чекера; (3) сломанные словоформы/латиница (again·«лять»·«войть»·«Вперди»·«глава клан») → broken-word/latin-residue чекеры; (4) заголовки-хаос (CJK-strip ест 第N节; огрызки « :») → заголовок-шаблон пайплайна + санитайзер-фикс; (5) терм-семейства (元-корень един, 资质=канон, 赤城 склонение, 学堂家老) → банк-дельта; род «гу» · меры (шичэнь-vs-часы) · политика стихов · 春秋蝉 — решения владельца; (6) крэш «карта→mined_delta» при терме-уже-в-сиде (UNIQUE без `source`, `store/migrate.go:202`) → бэкенд-фикс. **Гигиена:** auto_qa.json был ключёван именем модели → частичная деанонимизация гл.1 для читателя №2 (зафиксировано им честно); полигону: авто-QA впредь ключевать слепыми метками. Floor-замер A0↔A0′ interim ратифицирован. Читатель №2 зафиксировал посторонний policy-блок в своём транскрипте (инъекция-подобный) — на вердикт не повлиял, дисциплина «фиксировать, не исполнять» отработала. **Очередь:** пак-12 транспорт-гигиена (гейт ОТКРЫТ — платный путь завершён) ∥ промт пака-13 → стайл-решения владельца → банк-дельта → **итерация №2** (edit dspro+glm на том же драфте + судья-lite) → чтение-lite → выбор редактора → пилот Ф2.5. ## D39.21 — Стайл-решения владельца пост-чтения + директива аудита банк-инъекции (23.07). ✅ [ТЕЛО ВЫНЕСЕНО 26.07] **Содержание перенесено по гардрейлу «книго-каноны → данные книги» (урок 26.07: сессии запинались о книжный канон в контракте движка).** Книжные каноны (род «гу», 资质) — `books/gu-zhenren/CANON-NOTES.md` (вне git, живут с книгой); пара-политики (меры/时辰=2ч, стихи смыслом) — данные пары/промпты, исполнены паками 13/18 и мини-прогоном; директива аудита банк-инъекции — исполнена паком-13. В D-логе книжного канона больше нет. ## D39.22 — Решение владельца: эксперимент пере-прогона ЗАКРЫТ, итерация №2 ОТЛОЖЕНА, редактор = deepseek-v4-pro (интерим), курс — разработка бэкенда (23.07). ✅ **Решение владельца:** выделенную итерацию №2 не гонять; эксперимент считается пройденным; курс — дальше разрабатывать бэкенд. **Фиксация редактора (оркестратор, по совокупности):** слепое чтение №2 единой руки НЕ короновало (2/2/1 при перетасованных метках) → интерим-редактор = **deepseek-v4-pro**: судья №1 (0.679, floor-шум 0) · лучшая проза+глоссарий · дефекты чинибельного класса (заголовки/CJK-strip → пак-13) · ×2 дешевле glm. glm-5 — резервный арм (конфиг живёт), mistral — вон (D39.20). Выбор отменяем одним арм-конфигом. **Вопросы итерации №2 НЕ отменены — едут бесплатным довеском в следующий естественный платный прогон** (масштаб-прогон / пилот Ф2.5); отдельной петли нет. Планка ≤2 — на следующее чтение по ходу разработки. **Дефолт-редактор прод-конфига → deepseek-v4-pro при лендинге пака-13** (wire всё равно двигается — тот же resnapshot). **Курс бэкенда после паков 12/13:** масштаб целой книги (волны/майнинг-каденс/потолки/ETA на сотни глав) · канал B (18+) вживую в волновом стеке · Ф2-механизмы (голос/состояние D21 · native-Gemini судья) · ja→ru §B5. Решающая точка неизменна — пилот Ф2.5 (блокеры не бэкендовые: корпус · билингв-якорь D25.9-Q1 · судья-дублёр D22.6). ## D39.23 — Пак-15 «структура+форма» РАТИФИЦИРОВАН: пакетный сплит по измеренной связности, поправка §1 норматива, конфиг-слой пары (24.07, оркестратор №7). ✅ **Триггер:** харнес-сверка пака-14 (crush ~71 фокус-пакет / провайдеры-данные; GalTransl/AiNiee — data-мандат, но текут языком в тела чекеров = наша вылеченная утечка) + **ИЗМЕРЕННАЯ карта связности** `internal/pipeline` (отчёт пака-14, прил. A, с поправкой ревью-шапки: ведро «distinct/matches 8» — греп-артефакт; miner→membank = 32 вхождения / 14 кодовых = шаред-субстрат, не API). §1-эскейп-тест («отдельная подсистема с узким API») прогнан против фактуры — его проходят miner/checks/membank/chunk. Не гонка за индустрией: crush-масштаб НЕ эмулируется, сплит только по измеренному узкому API (4 подсистемы + база). **Решения:** (а) **сплит**: порядок — хойст общего субстрата (`internal/text`: NormalizeSourceKey/RunesEqual/TokenizeCyrillic + пакет value-типов Chunk/MinerChunk/SegBudget/Document) → `internal/miner` → `internal/checks` → `internal/membank` → `internal/chunk`; драйвер+инфра остаются композит-корнем `internal/pipeline`; каждый этап лендится верифицированным (build/test/golden/парити) до следующего; экспорт-поверхности — прил. B отчёта пака-14 как отправная точка. (б) **§1 `12-go-style-notes.md` амендирован**: file-count не смелл — остаётся; предписан ратифицированный сплит. (в) **форм-фиксы тем же паком**: Export()-декомпозиция с ОБЩЕЙ derivation member-drop (сейчас байт-согласие по комменту) · sticky-сентинел → поле · RequestHash 13 позиционных → struct · resolveChunkState 5-кортеж → struct. (г) **конфиг-слой пары**: пар-калибровки (fertility/len_ratio_bounds) из ран-конфигов → `configs/pairs/<пара>`; промпт-резолв конвенцией `prompts/<пара>/<роль>.md` вместо перечисления `prompts:`-мап (fail-loud сохраняется; `prompt_override` для армов; wire-нейтрально — байты/SHA промптов не двигаются). (д) **остаток пака-14**: тесты Палладия (unknown-category/required-fail) · fail-loud оверлея уровнем выше (пропавший overlayRoot = ошибка — явный opt-in; чужие root-файлы; категория-опечатка в overlay) · **unionStringMap: коллизия ключа base↔overlay = громкая ошибка** (override не ратифицирован; пересмотр — когда книге реально понадобится) · empty-probe гард lintMagnitudeScale · терминаторы chunker/coverage → одна точка истины · `第` → cjk-section. **НЕ в паке:** diff-редактор (слой 3) · isRuTarget/таргет-тред (канал B) · translit-interj (DEFER D39.16). Инвариант — байт-точность (golden байт-идентичен · парити EXACT · wire нетронут). Промт: `BACKEND_PACK15_STRUCTURE_SESSION_PROMPT.md`. ## D39.24 — Дизайн пака-16 «слой-3 diff-редактор» РАТИФИЦИРОВАН с перестановкой §15.1: всё $0-е строим, платный вызов за `enabled: false` до замера остатка (25.07, оркестратор №7). ✅ **Отчёт:** `docs/archive/reports/PACK16_DESIGN_2026-07-25.md` (§0–14 дизайн + §15 пост-панельная ревизия отдельным слоем). Принят ЦЕЛИКОМ с поправками §15.2: (A) ре-гейт = ПОЗИТИВНЫЕ пост-условия по классам + анти-удаление (голое «отсутствие флага» удовлетворялось удалением спана); (B) счётчики починок — из durable-чекпойнтов `role='repair'` + namespace `final_hash` (миграция v11 ОТМЕНЕНА; self-healing на резюме); (C) пересекающиеся спаны отбрасываются + ассерт непересечения перед сплайсом; (D) `errReserveCeiling` в ремонте деградирует как опциональный хоп (иначе терялась строка оплаченной редактуры); (E) `classify` — шестой гард ответа ремонта (ловит soft_refusal, проходящий пять гардов). **Замер §15.1 (реплицирован панелью и сессией независимо; таймлайн сверен оркестратором):** профилактика 时辰/成 (`2f91b04`, 24.07 03:19) легла ~3 ч ПОСЛЕ снятия цифр пере-прогона (24.07 00:09) → на прод-арме dspro всего 2 кандидата/7 юнитов, из них 1 — FP-гипербола (杀了千万人); поверхность `shichen_re` = 120/266 (半个时辰 — 32% — слеп); живой FP `ru_hours_re` («три части» → актуатор переписал бы в «шесть часов» И правка прошла бы ре-гейт). → **Порядок работ:** (1) `checks.RepairCandidates` — позиционная детекция, вердикт-нейтральная (`CheapGateVersion` НЕ бампится — доказательство исполнением: golden байт-идентичен + счётчики фикстур не сдвинулись); (2) read-only скан остатка по классам ($0 на любой прогнанной книге); (3) два пар-данных фикса — правая граница `ru_hours_re` + 半个时辰 в `shichen_re` (обязательны ДО актуатора; сдвиг версии пака = version-only, классифицировать при сдаче); (4) машинерия ремонта §D3–D5 с §15.2 — под `enabled: false`; **ВКЛЮЧЕНИЕ платного пути = отдельное решение владельца по замеру остатка на пост-профилактическом прогоне** (открытая петля; заменяет mini-live гейт D6). **Ратифицированные отклонения (§15.3):** промпты ремонта `prompts/<пара>/repair/<класс>.md` (ключ = класс дефекта, не роль стадии; fail-loud только для применимых классов пары) · тип ошибки доезжает ВЫБОРОМ файла промпта, не интерполяцией англ. диагностики (языковая утечка) · запрет additive-провайдера в repair-роли (least mechanism вместо нового кноба). **Унаследованный ru-target-долг** (isRuTarget-колл-сайты · TokenizeCyrillic · множитель ×2 в Go) зафиксирован ОГРАНИЧЕНИЕМ: класс работает на новой ПАРЕ данными, на новом ТАРГЕТЕ — нет; НЕ чинить этим паком (едет с канал-B/таргет-работой). Метод фазы 1 (эхо → 7 инвентаризаций → панель 6 линз → 13 скептиков «опровергни по коду» → §15-ревизия отдельным слоем, тело не переписано) — образец для будущих дизайн-фаз. ## 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.26 — Дизайн пака-17 «generic content-labels × provider-capabilities» РАТИФИЦИРОВАН В РЕДАКЦИИ §14: лейблы ВНЕ хешей (wire-судьба = резолвнутая модель пер-стадийно), резолв ДО валидации, один хоп из цепочки лейбла; вокабуляр лейблов и редактор — владельцу (25.07, оркестратор №8). ✅ **Отчёт:** `docs/archive/reports/PACK17_DESIGN_2026-07-25.md` — §0–13 дизайн + **§14 пост-панельная ревизия отдельным слоем** (метод D39.24: эхо → 7 инвентаризаций → 11 адверсариальных агентов → ревизия, тело не переписано). Сессия сама отменила три своих решения и перевернула две рекомендации. **Принято в редакции §14: тело §0–13 читать ТОЛЬКО через неё** (при расхождении побеждает §14). **Верификация приёмки (пропорциональная, инлайн-исполнением — всё пере-выведено мной, ни один клейм не принят с чужих слов):** - **Денежный кейстоун M1 ре-деривирован независимо** (питон-канон по `book.go:214-228` против `testdata/golden/capture.golden:6`): все пять дайджестов совпали посимвольно — сегодня `c2021b1b…cab0df` · поле убрано `58883ff5…b39822` · `content_labels:null` `29a3031d…8c87b` · **omitempty-хвост при пустых лейблах = байт-в-байт `c2021b1b…`** · с `["adult"]` `0e2f3111…c9d2c`. Заморозка `"adult":false` на 7-й позиции канона — единственный путь без пере-оплаты стенда (Ф7: замер остатка пака-16 поедет на этих же книгах). - **Фантом-гард D-ссылок (норма 9): ни одной фантомной** — существуют и говорят заявленное D2 · D3 · D4 п.1 · D6.2 · D12 · D13.6 · D14 п.1 · D15 п.2 (+спека `backend/docs/D15.2-*.md`) · D19 п.1 · D19.1 · D20.2-Q1/Q2 (`:245`) · D20.4 (`:247` — read-only аудит без ключей действительно в фикс-листе) · D22.5/D22.6/D22.7 (`:276`) · D25 п.4 (`:310`) · D30.1 · D39.20/22/24/25. - **Спот-чеки несущих фактов (мои исполнения):** единственный `Complete` в проде `stagerun.go:442` + единственный `r.client(` `:410`, failover без вызывающих · `repair.go:384` синтетическая стадия теряет `Channel` (⇒ ассерт обязан ключеваться на данных книги) · `Stage.Channel` = НОЛЬ рантайм-читателей (только `pipeline.go:341,549,569`) · `Escal.Chains` = валидация `pipeline.go:578` + `CheckKeys` `models.go:508` · `BriefHash` в ОБЩЕМ билдере обеих волн при пер-стадийном `stageSnap` с волновым фильтром `waveStages` ⇒ **§14.1 верна** · `reachableModels` = сырое `st.Model ∪ st.EscalateTo ∪ repair(ТОЛЬКО при `Gates.Repair.Enabled`)` ⇒ **§14.2 верна** · `escMu` через `defer` + пин `waverun_test.go` «перерасход ≤ 1 хоп» (бюджет 0.001 < хоп ≈0.00182, `workers:4`), `Waves.Workers` дефолт 1 ⇒ **§14.3-отмена лока-на-итерацию верна** · `chains.default[0]=deepseek-v4-pro` = `escalate_to` драфта (`pipeline-c1.yaml:109` vs `:51`) ⇒ неограниченный дедуп упал бы на шиппинге · golden пинит `esc_model="fake-fallback"` на ОТКАЗАВШЕМ хопе (`capture.golden:24`) ⇒ **§14.6.1-вынос верен** · `style_check_version` фолдится БЕЗУСЛОВНО (payload `capture.golden:3`) ⇒ **§14.6.2-условие верно** · ровно 13 файлов вне git несут `adult:` + `example/book.yaml:9` ⇒ терпимость отставки обязательна · порядок `runAttempt`: `GetCheckpoint:337` → `Reserve:379` → `client:410` → `Complete:442` ⇒ **§14.5.6 верна** (реплей ничего не отправляет; ассерт до резерва). - **Неточности отчёта, выводов не меняющие:** манифест «`accept-rebill` грепом пусто» — 9 попаданий, ВСЕ в `backend/docs/D15.2-*.md` (в коде/CLI действительно нет, клейм в силе); «23 сайта `LoadPipeline`» включает строку определения (1 прод + 21 тест). **РАТИФИЦИРОВАНО (моё решение, редакция §14 целиком):** 1. **Лейблы НЕ входят ни в один хеш (§14.1) — и это разрядка D20.2-Q3** («первый рантайм-потребитель `Adult` обязан ЯВНО назначить слой»): назначенный слой = **РЕЗОЛВНУТАЯ модель стадии + её wire-фолд, пер-стадийно и пер-волново** (`stageSnap`); лейбл, маршрутизирующий только редактора, двигает ТОЛЬКО edit-волну — оплаченный драфт резюмится за $0. Провенанс набора лейблов — шапка отчёта (B6.1), не хеш. Канон brief заморожен: `"adult":false` остаётся 7-м полем, omitempty-хвост НЕ нужен. Шестое условие байт-идентичности принято: `stageSnap.Escalate*` сохраняют имя/тег/позицию/правило заполнения, любой фолд хопов — строго аддитивный указатель+omitempty. 2. **Порядок РЕЗОЛВ → ВАЛИДАЦИЯ → все читатели видят резолвнутое (§14.2).** Лейблы приходят в `LoadPipeline` тем же швом, что `pair`; резолвнутые поля — `yaml:"-"` (конвенция `PromptPath`); «достижимое» лейбл-зависимо (`st.EscalateTo`/`chains.default` под лейблом НЕДОСТИЖИМЫ); дедуп применяется только к цепочкам активных лейблов ИСПОЛНЯЕМОГО конфига (поправка §14.8.4: `chains.adult` в 5 конфигах, `pipeline-c2.yaml:66` → kimi, но C2 неисполняем `CheckRunnable`); резолв работает и на read-путях (`export.go` пере-считывает снапшот). 3. **Q4 = B3-A′ (переворот сессии принят): ОДИН хоп = `chain[0]`**, `len(chain)>1` = громкая ошибка «мульти-хоп не построен» (никакого тихого усечения), `escalation.budget_usd > 0` ОБЯЗАТЕЛЕН на загрузке для route-лейбла (иначе «гейт, который не может выстрелить»), `escMu` — как сегодня. Полный обход цепочки остаётся спроектированным (§5 + 6 добавленных форм) и ждёт данных. 4. **Q1 = КНИГА** по аргументу §14.4 (**гарантия против стоимости**): авто-скрина нет и не будет в этом паке, поэтому пер-главная разметка сводит ToS-гарантию к точности ручного чтения. `labelsFor()` объявляется БЕЗ аргумента с ассертом книго-константы — форма не обещает того, чего механизм не держит. Диапазоны глав (идиома `until_ch` реальна) остаются данно-формным расширением и возвращаются только вместе с решением владельца принять ручной риск. 5. **Q3 = D12 сохраняется** (отказ РЕДАКТОРА под лейблом терминален, flag+skip без хопа — дрейф стиля дороже потери юнита). **Q5 = `chains.default` остаётся мёртвым** в этом паке. **Q6 = механизм `terminal` строим, значение не заводим**; из примера реестра `prohibited` УБРАТЬ (§14.8.2 — два из трёх выходов будущего L3 не воспроизводить в примере), будущий L3-скрин подключается НАЗВАННЫМ пер-лейбловым хуком политики, а не через `terminal`. 6. **Вокабуляр и форма данных (§14.5):** книга — `content_labels:`, провайдер/модель — `accepts_labels:` (РАЗНЫЕ ключи: свойство контента ≠ разрешение получателя); пер-модельный оверрайд — `*[]string`, только СУЖАЕТ (nil = наследовать, указатель на пустой = «ни одного», модельный ⊆ провайдерского); реестр политик — УПОРЯДОЧЕННЫЙ СПИСОК (map-порядок в Go не хранится), «первая политика, претендующая на стадию, выигрывает», равное притязание = громко; эффективный список хопов — упорядоченное объединение с дедупом ПОСЛЕ резолва. Отставки `permissive` (громко при наличии) и `adult:` книги (громко только на `true`; `false`/отсутствие терпимо — 13 файлов вне git) — Go-идентификатор БЕЗ слова adult, тег = замороженный ключ данных. 7. **Отставка `Stage.Channel` — В ТОМ ЖЕ диффе (§14.8.1):** канал, его enum и блок изоляции D4.1 уходят вместе с `permissive`, иначе `providerPermissive` возвращает false ВСЕГДА и выживший `channel: adult` даёт операторский тупик; два существующих adult-теста перепи́сываются/удаляются тем же диффом (иначе семантически ложны). 8. **Рантайм-ассерт — в `runAttempt` ДО `Reserve`, через `clientFor(model, labels)`** (компиль-энфорс: ни один будущий путь на провод не получит клиента, не объявив контент). Место ассерта НЕ переносится до `GetCheckpoint` (реплей провайдеру ничего не отправляет — ToS-экспозиции нет; перенос отнял бы $0-реплей); негативный тест обязан гонять СВЕЖИЙ вызов и ассертить идентичность ОШИБКИ, а не дельту `spend`. 9. **Отказы загрузки — за `forWrite`, резолв — всегда (§14.8.3):** книга, помеченная ПОСЛЕ оплаты, обязана остаться читаемой (`status`/`report`/`export` = $0, D20.4), иначе единственный выход — снять лейбл, то есть тихий обход; на read-пути то же самое = громкое предупреждение + флаг в шапке отчёта. 10. **`failover.go` — УДАЛИТЬ в этом паке** (моё решение, отклоняю рекомендацию §14.5.8 «дать конструктору лейблы»): вызывающих нет, файл несёт nil-panic-дыру D4 п.1 и пересылает тот же запрос другому провайдеру — ровно то, что лейбл-механизм запрещает; если local→cloud фолбэк когда-нибудь понадобится, он родится под лейблами с первой строки. Удаление тестов файла — объявить в цензе `^func Test` исполнением. Гард-тест шва остаётся: `\.Complete(` вне `internal/llm` и вне `stagerun.go` пуст, с ИМЕНОВАННЫМ аллоулистом `live_conformance_test.go` (второй сем реален, §14.5.7). **ДОБОР ОРКЕСТРАТОРА — три находки, которых нет ни в теле, ни у панели (все проверены моими исполнениями):** - **(A) Один лейбл `adult` схлопывает ратифицированную развязку D14 п.1 (HIGH, данные+продукт).** D14 п.1: ToS DeepSeek §3.4(5) запрещает *sexually explicit*, а «для violence-фрагментов (не sexually explicit) DeepSeek остаётся допустим» — верифицировано по первоисточнику. Единственное значение «adult» гонит violence-тяжёлую книгу (наш приёмочный класс) ЦЕЛИКОМ мимо DeepSeek: переводчик → mistral, редактор → не-dspro, то есть пак тихо пере-решает ратифицированного интерим-редактора (D39.22) и умножает выходную цену. Механизм это УЖЕ держит данными (упорядоченный реестр + `label_models` + две цепочки), поэтому вокабуляр (`violence` / `sexually-explicit` против единого `adult`) — решение владельца, а не сессии; ратифицирую его как ОБЯЗАТЕЛЬНУЮ развилку перед заводкой первой лейблованной книги, но НЕ блокирую стройку (значение = строка данных). - **(B) `reasoning:"off"` — тихий выход из обоих гейтов на аддитивном провайдере (MED-HIGH).** Отчёт §4 утверждает, что grok-редактор «обязан объявить `reasoning_max_tokens>0`, иначе загрузка падает». Проверил: гейт `pipeline.go:541` внешним условием `st.Reasoning != "off"` — а шиппинг-стадия edit объявляет ровно `reasoning: "off"` (`pipeline-c1.yaml`, no-op для dspro). Для grok это НЕ no-op: `capabilities.reasoning {control: effort, off_effort: none}` (`models.yaml:188-190`) шлёт явный `reasoning_effort:"none"` ⇒ деньги как раз честны (`AdditiveReasoningTokens` = 0 законно), но мы попадаем в ратифицированную ЭХО-зону D19.1 п.2 («reasoning-off + плотный CJK = свойство класса моделей, DeepSeek и ОБА grok-слага») при билингв-редакторе, который видит плотный исходник, — а гейт `echoMineViolation` физически не может выстрелить: `echoes_when_thinking_off` стоит ТОЛЬКО у deepseek (`models.yaml:38`), обобщение D19.1 в данные не доехало. Итог: какую бы ветку ни выбрали для лейблованного редактора на аддитивном провайдере, ОДИН гейт молчит. **Закрытие обязательно** (форму выбирает сессия и аргументирует): либо `echoes_when_thinking_off: true` у xai как ДАННЫЕ — тогда `off` становится громким, либо аддитивный гейт расширяется на резолвнутую модель независимо от `off`. - **(C) Рейт-гард деградирует МОЛЧА в «неограниченно» (MED).** `rateGuard()` возвращает nil для модели вне `reachableModels`, а nil трактуется как без-лимита (`ratelimit.go:92-97`) — в отличие от `r.client`, который падает громко. Лейблованный переводчик — ровно `mistral-large-2512` с `rate_limit.max_concurrency: 2` (~48% retry-fails под N-∥). Расширение `reachableModels` (п.2) закрывает это механически, но приёмка обязана утверждать гарды ПОЗИТИВНО (тест, что резолвнутая лейблованная модель получила свой гард), а не выводить из общего фикса. **НА ВЛАДЕЛЬЦЕ (деньги/продукт/18+ — стройку не блокируют, оба ответа = строки данных):** **вокабуляр лейблов** (единый `adult` против `violence`/`sexually-explicit` — находка A: цена гарантии против цены прогона и сохранения dspro-редактора) · **Q2 редактор под лейблом** (кандидаты только из способных: grok-4.3 ИНТЕРИМ — exp04 мерил его билингвально, ранг-1 верность, ратифицированный первичный судья эротики D22.6, но $1.25/$2.50 против $0.435/$0.87 + развилка (B); mistral отвергнут как несущий D39.20; local-8b — скрининг; glm-5 = ОДНА строка данных, но только после сверки ToS/AUP Z.AI по первоисточнику — угадывать ToS запрещено) · **Q1 денежное следствие книжной гранулярности** (лейблованная книга едет по цене permissive-тира целиком). **СКОУП-ВЫНОСЫ (пинги сессии приняты — норма 5):** (1) `escalation_model` = ОТВЕТИВШАЯ модель — ВНЕ пака-17: golden пинит `esc_model` на отказавшем хопе, маскировка это не скрывает ⇒ вердикт-изменение, отдельная ратификация с санкционированным пере-капчером. (2) Два нита общности из петель (Detail-строки чекеров из данных · множитель ×2 `lintTimeUnits`) — УСЛОВНО: только в БАЙТ-НЕЙТРАЛЬНОЙ форме (фолд лишь при отличии от дефолта) и с доказательством исполнением, иначе `CheapGateVersion`/`pack.Version()` двигают снапшот стендовых книг и убивают $0-резюм драфта под замер остатка пака-16; при недоказуемости — отложить. (3) **D22.7 НЕ снимается этим паком:** ратифицированное «пер-чанковый L3-скрин ОБЯЗАТЕЛЕН до первой erotica-книги в проде» остаётся отдельным гейтом — оптовая ратификация пака-17 разрешением на первую erotica-книгу НЕ является; `action: terminal` — book-level отказ входа, механизм СЛАБЕЕ D22.7. (4) Ратифицированный D20.2-Q2 (`--accept-rebill[=usd]` с порогом `min($0.50, 5%×ProjectedBookUSD)`) в коде/CLI отсутствует (живёт только в спеке) — открытая петля, не пак-17. **Границы гарантии (в контракт, не в код):** инвариант формулируется как «egress прогонов ДВИЖКА»: механизм не утверждает ничего о НЕОБЪЯВЛЕННОМ контенте (лейблы — данные владельца) и об eval-стороне (`eval/*.py` зовут провайдеров сами). Судья 18+ — eval-сторона (проба-гейт D22.6), в пак не входит. **Метод фазы 1 подтверждён как норма:** сессия принесла три отмены и два переворота СВОИХ решений с грунтовкой по коду — это ровно поведение, которое приёмка поощряет (нормы 5/10); мой рубеж-2 добавил три находки и ноль опровержений её §14. **Фаза 2** размечена «ровно так»-списком в `docs/BACKEND_PACK17_CHANNEL_B_SESSION_PROMPT.md` (инварианты: golden байт-идентичен без пере-капчера · парити EXACT · `-race` · сэндбокс-репродукции через настоящий драйвер · дифф `^func Test` исполнением · сессия не коммитит). ## D39.27 — Пак-17 фаза 2 (generic content-labels × provider-capabilities) ПРИНЯТ и залендён; форма добора B зафиксирована; вокабуляр владельца = ПАРА `violence`/`sexually-explicit` → дельта: третье значение `action` (assert-only) (25.07, оркестратор №8). ✅ **Отчёт:** `docs/archive/reports/PACK17_CHANNEL_B_REPORT_2026-07-25.md` (с ревью-шапкой). Сессия исполнила все 15 «ровно так» D39.26 и провела собственное ревью ИСПОЛНЕНИЕМ (6 ревьюеров, мутации): 8 существенных дефектов найдено и исправлено ДО сдачи, каждый фикс проверен мутацией. Три пинга нормы 5 — все по делу, диспозиции ниже. **Моя приёмка — execute-first, каждый манифест-пункт ре-ранен мной:** `go build`/`go vet` чисты · **`go test -race -count=1 ./...` — 12 пакетов ok, 0 FAIL** · **golden `f7641993…4f0020f8` БАЙТ-В-БАЙТ равен `HEAD`-версии фикстуры** (сверил с `git show HEAD:…capture.golden | sha256sum`), `git status` по `testdata/` пуст ⇒ пере-капчера не было · **парити EXACT: `n=13618 catastrophe{方源:0 蛊:1 蛊师:2 古月:22} recall@proposed=0.9655 (56/58)`** — тождественно пакам 15/16 · **ценз тестов проверен ДИФФОМ ИМЁН, не счётчиком: 433→451**, удалены ровно 8 (6 failover + `TestCheckAdultChannel` + `TestRunnerChannelBRequiresPermissive`), добавлены 26 · `-shuffle=on` зелёный · шов на провод — `stagerun.go:447` + именованный аллоулист `live_conformance_test.go`. **Рубеж-2: три СВОИХ мутации в копии дерева (не повторяют список сессии) — все пойманы именованными тестами:** (A) вернул лейблы в канон `BriefHash` (omitempty-хвост) → красный `TestEditorOnlyLabelLeavesTheDraftWaveUntouched`; **инвариант D39.26 п.1 запинён СЛЕДСТВИЕМ (снапшот драфт-волны не двигается), что сильнее ассерта равенства хешей**; (B) отключил лейбл-проверку в `clientFor` → красные `TestLabelledRuntimeAssertPrecedesMoney` + `TestClientForRefusesUnknownModel`; (C) сделал отказ маршрутизации безусловным → красный `TestLabelledReadPathStaysAlive`. Сьюта несущая, не вакуумная. **Структурные проверки (мои, по коду):** `ReachableModels()` строится из `ResolvedModel`/`ResolvedHop` ⇒ достижимость действительно лейбл-зависима, `chains.default` под лейблом недостижим · `r.client(` в дереве больше НЕТ — единственный вход `clientFor(model, labels)` (компиль-энфорс реален) · порядок в `runAttempt`: `GetCheckpoint:337` → `clientFor:374` → `Reserve:390` ⇒ ассерт до денег и после $0-реплея, ровно как ратифицировано · **добор C закрыт именованным тестом** (`rateGuard(m) == nil` по всем достижимым; комментарий теста прямо ссылается на добор) · все поля отчётности `omitempty` · **шиппинг-конфиги: НИ ОДНОЙ поведенческой правки** (диффы = комменты + три снятых `permissive: true`) · **стенд чист** — 0 файлов с `permissive:`/`channel:` вне git, все 5 стендовых книг ссылаются на репозиторный `configs/models.yaml` ⇒ отставки операционку не ломают, а 13 файлов с `adult: false` терпимы и покрыты `TestRetiredAdultKeyForms` · вокабуляр нигде не прибит (`accepts_labels`/`content_policy` в шиппинге — только комментарии с ДВУМЯ формами ответа). **РЕШЕНИЯ:** 1. **Форма закрытия добора B — ФИКСИРУЮ ФОРМУ 2** (гейт над резолвнутой моделью НЕЗАВИСИМО от `reasoning: off`), как исполнила сессия; её аргумент проверен мной по коду: форма 1 (`echoes_when_thinking_off: true` у xai) валит загрузку `models.yaml`, потому что `echoMineViolation` бьёт по `control: effort` — то есть требует снять у grok явный off-выключатель, запинённый денежным инвариантом. Цена формы 2 — консервативное ПЕРЕ-резервирование (потолок ужимается, слепым не становится) плюс одна обязательная строка `reasoning_max_tokens` у любой аддитивной стадии. Эхо-ось закрыта НЕ гейтом, а generic-предупреждением `sourceEchoExposure` (CJK-исходник × стадия, реально отправляющая исходник × модель, чей ПРОВОД гасит thinking; без имён провайдеров и лейблов) — принимаю: это ровно та неизмеренная экспозиция, которую отрицал устаревший коммент D30.1, и теперь она громкая, а не молчащая. 2. **Семантика хопа под лейблом** (подмена `escalate_to` ТОЛЬКО на пере-маршрутизированных стадиях) — ратифицирую: это прямое следствие D39.26 п.1, а не девиация; стадия, которую лейбл не трогает, сохраняет свой фолбэк и падает по ИМЕНИ модели, если тот не вправе получить контент. 3. **`labelsFor()` подписью, а не рантайм-ассертом** — принимаю: подпись без чанка СИЛЬНЕЕ проверки (пер-главная маршрутизация физически невыразима, а не отлавливается постфактум). 4. **Хвосты общности — «отложено-с-записью»**: причина проверена независимо (множитель версионируется `CheapGateVersion` и фолдится безусловно; langpack двигает `pack.Version()` стендовых книг ⇒ `--resnapshot` и потеря $0-резюма драфта под замер остатка пака-16). Возвращаются только в байт-нейтральной форме с доказательством исполнением. 5. **ВОКАБУЛЯР — решение владельца (25.07): ПАРА `violence` / `sexually-explicit`.** Основание: D14 п.1 (ToS DeepSeek запрещает sexually explicit, violence оставляет допустимым) — пара сохраняет dspro-редактора (D39.22) и цену на violence-тяжёлых книгах, единый `adult` терял их без нужды. 6. **ДЕЛЬТА, которую пара делает обязательной: третье значение `action` — assert-only (`allow`).** Проверено по коду: сегодня `route` требует `chain` + `escalation.budget_usd > 0` + хотя бы одну стадию с `label_models` (иначе отказ «routes nothing»), а `terminal` = не обрабатывать вовсе; для лейбла `violence` на канале A не подходит ни одно — нужен ЧИСТЫЙ capability-ассерт БЕЗ пере-маршрутизации (ToS-гарантия: любая достижимая модель обязана принимать violence, но маршрут не меняется). `checkContentRouting` уже action-агностичен (кроме `terminal`), поэтому дельта мала: значение enum + ветка валидации («allow не берёт chain/бюджет/`label_models`») + тесты + строка реестра. **Без неё пара невыразима данными, то есть механизм не проходит собственный тест «второй лейбл добавляется ДАННЫМИ».** 7. **Q2 (редактор под лейблом) — ОТЛОЖЕН С ЗАПИСЬЮ, а не «висит»:** при паре он связывает только `sexually-explicit`-книги, которых в проекте нет; на violence-книгах редактор остаётся `deepseek-v4-pro` (D39.22). Возвращается ВМЕСТЕ с предусловием D22.7 перед первой explicit-книгой — не раньше. 8. **ToS-факты под заполнение `accepts_labels` — по первоисточникам, пер-провайдер и ПЕР-ЛЕЙБЛ** (violence и sexually-explicit — разные ответы; правило двух направлений). Место фиксации фактов — `experiments/00-provider-quirks.md` (зона полигона). Пока не заполнено — механизм fail-closed, и это ВЕРНОЕ состояние: лейблованная книга падает громко, называя модель, провайдера и недостающий лейбл. 9. **Открытая петля (новая, вскрыта вопросом владельца): лейбл НЕ доезжает до промпта.** Сегодня content-label — чистые данные маршрутизации и load-time гарантии: он не рендерится ни в system, ни в user, не входит ни в один хеш, не едет на провод; модель не знает, что книга помечена. Если промпт ДОЛЖЕН знать о свойстве контента (инструкция переводчику/редактору), это отдельное решение промпт-слоя (`prompts/<пара>/<роль>.md` + при нужде `prompt_override` под лейблом) — не побочный эффект маршрутизации. 10. **Фикс-лист (не блокирует лендинг):** коммент поля `Stage.ReasoningMaxTokens` (`internal/config/pipeline.go:189-194`) всё ещё говорит «ignored for subset providers / reasoning-off» — после формы 2 вторая половина неверна; поправить ближайшим касанием файла. **Инварианты пака подтверждены моим исполнением:** golden байт-идентичен БЕЗ пере-капчера · парити EXACT · `-race` зелёный · ценз диффом имён · сессия не коммитила (лендинг мой). **Скоуп-выносы D39.26 чисты:** `escalation_model`-семантика не тронута, `--accept-rebill` не строился, D22.7 не снят, L3 не строился, live-вызовов с 18+ не было. ## D39.28 — Дельта пака-17 ПРИНЯТА и залендена: третье действие `allow` (assert-only) — ратифицированная ПАРА лейблов стала выразима ДАННЫМИ; пак-17 закрыт целиком (25.07, оркестратор №8). ✅ **Отчёт:** `docs/archive/reports/PACK17_DELTA_2026-07-25.md` (с ревью-шапкой). Закрывает единственную работу, которую открыл ответ владельца по вокабуляру (D39.27 п.5–6). **Ратифицировано:** тройка `route | allow | terminal`, где **ВСЕ ТРИ несут ОДИН инвариант** (каждая достижимая модель обязана принимать все лейблы книги) и различаются остальным: `allow` не меняет маршрут и ЗАПРЕЩАЕТ `chain`/`label_models`/бюджет как бессмысленные (автор, написавший их, имел в виду то, чего движок не сделает — дисциплина «громко, а не игнор»); `route` требует цепочку ровно из одного члена + `budget_usd > 0` + хотя бы одну стадию с `label_models`; `terminal` — ни одного вызова. Имя `allow` принимаю (приор промта): читается тройкой, `assert` оператору ничего не говорит. `checkContentRouting` править не пришлось — он уже был action-агностичен, что и предсказывал D39.27 п.6. **Моя приёмка — execute-first:** build/vet чисты · `gofmt` чист (единственная жалоба `internal/llm/llm.go` воспроизводится на HEAD — проверил `git show HEAD:… | gofmt -l`, сессия файл не трогала: честная оговорка) · **`-race` 12 пакетов ok, 0 FAIL** · **golden `f7641993…4f0020f8` = HEAD-версия байт-в-байт**, `testdata/` чист · **парити EXACT** `n=13618 … recall 0.9655 (56/58)` · **ценз диффом имён: 451→455, удалено 0**, добавлены ровно четыре названных. **Моя независимая мутация (не из списка сессии):** инвариант проверяет только ПЕРВЫЙ лейбл вместо объединения (`p.ContentLabels[:1]`) → красный `TestRatifiedLabelPairIsDataOnly` — то есть союзная семантика, на которой стоит ратифицированная ПАРА, запинена именно тем тестом, который кодирует форму ответа владельца. **Прочитал сквозняк `TestAssertOnlyLabelRunsWithoutMovingAnything`: не вакуумный** — сверяет число вызовов, КАЖДОЕ тело запроса построчно, суммарную стоимость и ОБА волновых снапшота; и гоняется при `budget_usd = 0`, то есть заодно доказывает, что assert-only не требует бюджета. **Данные:** `accepts_labels` осознанно ПУСТЫ (fail-closed) — ратифицирую это как верное состояние. Значения = ФАКТЫ ToS/AUP: только по первоисточникам, **ПЕР-ЛЕЙБЛУ** (`violence` ≠ `sexually-explicit` у одного вендора — на этом стоит D14 п.1), фиксация — полигон (`experiments/00-provider-quirks.md`). Проверил диффы `models.yaml`/`pipeline-c1.yaml`: ни одного ToS-утверждения от сессии, вокабуляр в шиппинг не прибит, примеры синтетические. **Фикс-лист D39.27 п.10 закрыт** (коммент `Stage.ReasoningMaxTokens` приведён в соответствие с формой 2). **Две объявленные правки фикстур принимаю** как отражение новой корректной семантики: кейс `terminal` больше не несёт `label_models` (они стали громкой ошибкой при не-route действии — само по себе покрыто тестом), и подстрока сообщения о неизвестном действии стала `route|allow|terminal`. **ПАК-17 ЗАКРЫТ ЦЕЛИКОМ** (D39.26 дизайн · D39.27 стройка · D39.28 дельта). Остаток — не код: ToS-факты под `accepts_labels` (петля полигона) · Q2 редактор и D22.7 (перед первой explicit-книгой) · хвосты общности (отложено-с-записью) · `--accept-rebill` (D20.2-Q2, вне пака). **До заполнения фактов ни одна лейблованная книга не запускается — это не дефект, а спроектированное fail-closed поведение.** ## D39.29 — Пакет-5 полигона ПРИНЯТ: право по ToS/AUP добыто первоисточниками (8 вендоров × 2 лейбла); две строки данных ждут ПОДПИСИ владельца; по `violence` права нет ни у кого — развилка владельцу; errata к ссылке D14 п.1 (25.07, оркестратор №8). ✅ **Отчёт:** `docs/archive/reports/POLYGON_TOS_LABELS_REPORT_2026-07-25.md` (с ревью-шапкой); факты — секция «Право по ToS/AUP: провайдер × content-label» в `docs/experiments/00-provider-quirks.md` (источник истины по цитатам). Метод сессии: три контура (добыча → независимая перечитка с мандатом сломать → собственный третий проход), 15 цитат с `grep -c -F` = 1 по своим копиям. **Моя приёмка — не чтением, а СВОИМИ копиями первоисточников** (три клетки с наибольшей ставкой, все подтвердились): - **mistral / sexually-explicit = ALLOWED — ПОДТВЕРЖДЕНО.** `legal.mistral.ai/terms/usage-policy` HTTP 200, объявленная ревизия *Effective: June 11, 2026* совпадает; в сексуальной семье названы CSAM, NCII («intimate images … without the explicit consent»), sexual services/trafficking — **взрослая художественная эротика не названа**; насилие — `promotes, incites, threatens, or glorifies violence` (глагол-пропаганда, не изображение) ⇒ `violence` UNCLEAR верно; **широкого контентного катч-олла в документе нет** (совпадения `otherwise` — про права третьих лиц и безопасность) ⇒ доктрина `contrastive-absence` применена законно. - **xai / sexually-explicit = ALLOWED и xai / violence = UNCLEAR — ПОДТВЕРЖДЕНО, включая самоопровержение сессии.** Прямой `x.ai` даёт **HTTP 403** (Cloudflare воспроизвёлся у меня буквально), снимок Wayback `id_` — 200, *Effective: June 26, 2026* совпадает; **`grep -c -i violen` = 0 по МОЕЙ копии** — то есть перевёрнутая сессией клетка (ALLOWED→UNCLEAR) перевёрнута правильно; в сексуальной семье названы только реальные лица (undressing/nudifying, порнографические изображения подобий) и дети ⇒ узкие соседи есть, наш класс не назван. Остаточная оговорка (моя, не опровержение): стем перечня — «don't use our Service or Outputs to promote or engage in illegal, harmful, or abusive activities, **including**:» — при желании читается как самостоятельный широкий стандарт; он привязан к законности и вводит перечень, поэтому доктрину не ломает, но это единственное место, где встречное чтение существует. - **zai = FORBIDDEN по обоим — ПОДТВЕРЖДЕНО.** `docs.z.ai/legal-agreement/terms-of-use` HTTP 200, *Last Update: April 14, 2026*; п. f) «Creating or disseminating obscene, pornographic, **violent**, murderous, terroristic, or criminal incitement content» — «violent **content**» ПЛОСКО, без глагола-пропаганды; п. g) «content that is sexually explicit, suggestive…». **Этим закрыт открытый вопрос D39.27 п.7:** сверка ToS Z.AI по первоисточнику сделана, glm-5 под любым из двух лейблов недоступен (для НЕпомеченных книг остаётся). **РАТИФИЦИРОВАНО:** 1. **Вердикты приняты как ФАКТЫ** (8 вендоров × 2 лейбла; таблица — в отчёте §2 и в quirks-секции). Доктрина сессии принимается целиком, включая два несущих правила: «молчание документа НЕ даёт ALLOWED» и «широкий катч-олл в применимом документе убивает `contrastive-absence`». Второе она применила ПРОТИВ своего же независимого контура (openai/violence: контур дал ALLOWED, она поставила UNCLEAR, потому что иначе доктрина стала бы подгонкой) — **это правильный выбор**: последовательность правила дороже одной выигранной клетки, а цена низка (OpenAI вне боевой цепочки, клетка переворачивается одной правкой данных). 2. **Две строки данных — `xai: accepts_labels: [sexually-explicit]` и `mistral: accepts_labels: [sexually-explicit]` — ГОТОВЫ, но НЕ применяются без подписи владельца** (18+/юридическая ось). До подписи механизм fail-closed — верное состояние. 3. **Errata к D14 п.1 (дисциплина D23.3: тело исторического блока НЕ переписываю, поправка живёт здесь).** Номер пункта верен дословно — `§3.4(5)`: «is pornographic, obscene, or sexually explicit (e.g., sexual chatbots)», — но живёт он в **DeepSeek Terms of Use** (*Last Update: March 27, 2026*), а не в «Open Platform Terms of Service», где §3.4 про оргтехмеры. На вывод не влияет (Open Platform ToS §3.1 втягивает ToU по ссылке), на воспроизводимость влияет: по названию документа пункт не находится. Класс дефекта — ровно целевой для пакета (верная цитата у не того документа). 4. **Судья 18+: договорное подтверждение поведенческого решения.** Gemini PUP запрещает sexually-explicit ⇒ grok-фолбэк D22.6 теперь обоснован не только `PROHIBITED_CONTENT`-поведением, но и текстом договора. Записано. 5. **Пинг-1 закрыт живым фактом:** катовер `deepseek-chat`/`-reasoner` ИСПОЛНЕН — 404 не только в листинге, но и на пер-слаговом retrieve (сильнее прежнего алиас-урока «нет в /models ≠ не работает»); цены не изменились ⇒ `prices_checked` в `models.yaml` можно продлить БЕЗ правки чисел (предложение бэкенду, не полигону — чужая зона). Все 8 пингов блока B закрыты. **НА ВЛАДЕЛЬЦЕ (§6 отчёта — семь вопросов; блокирующий один):** - **`violence`: права нет ни у одного вендора, и причина структурная** — все AUP регулируют ПРОПАГАНДУ насилия («promotes/incites/glorifies/facilitates»), нейтральное художественное изображение не называет ни один документ; два исключения в «неудобную» сторону (zai — плоский запрет; xai — полное молчание). **Экономическая посылка D14 п.1 первоисточниками НЕ подтверждается.** Три варианта отчёта §5.1 в силе; **моя рекомендация — синтез варианта 2 с аудит-следом:** механически лейбл `violence` НЕ заводить (это ровно сегодняшний статус-кво, под которым уже прошли exp10 и rerun2 — нового риска не появляется, а книга едет), а интерпретацию «нейтральное изображение ≠ пропаганда» зафиксировать письменно за подписью владельца ЗДЕСЬ, в контракте, не в данных: она даёт аудит-след «решение принято осознанно», ничего не блокируя. Вариант 1 (выдать `violence` вендорам с глаголами-пропагандами) остаётся доступен одной правкой данных в любой момент. - **НОВОЕ, вскрыто фактами и не зависит от лейблов (мой добор; формулировку уточнил ПОСЛЕ проверки — первая была мягче правды):** `zai` запрещает «violent content» ПЛОСКО, а **экспозиция уже СОСТОЯЛАСЬ**: glm-арм (`configs/pipeline-arm-glm.yaml`, `role: editor / model: glm-5`) гонялся живьём на 蛊真人 в пере-прогоне rerun2 (D39.20: судейские 0.589 по 56 играм на арм) — то есть насильственная проза уже отправлялась на Z.AI, и вопрос про `violence` касается не будущих помеченных книг, а совершённого. Уточнение в другую сторону: `glm-5.1` в `chains.default` (`configs/pipeline-c1.yaml:109`) сегодня НЕдостижим (раннер исполняет single-hop через `stage.escalate_to` = `deepseek-v4-pro`, плюс `budget_usd: 0` гасит эскалацию целиком) — вектор именно арм-конфиг, не цепочка. Решение владельца: снять glm с насильственных книг либо сознательно принять риск с записью; лейбл-механизм тут ни при чём. - Остальные шесть вопросов §6: чтение Gemini-оговорки «for example, … pornography or sexual gratification» (сужение или иллюстрация) · связывает ли нас OpenAI Sharing & publication policy 2022 (единственное, что держит обе клетки OpenAI в UNCLEAR) · применимость Ollama ToS §4 к локальному инференсу · различать ли в конфиге ПРИЧИНУ пустоты (FORBIDDEN vs UNCLEAR) · дата заведения аккаунта OpenAI (§17 привязывает редакцию политик к дате договора) · нужен ли ре-чек политик по хешу перед платными прогонами (триггеры известны: головной Google ToS 30.07.2026, квартал 25.10.2026). **Продуктовое, вне движка (в трекер):** Gemini API Additional ToS запрещает клиентов, «directed towards or … likely to be accessed by individuals under the age of 18» — обязательство на КОНЕЧНЫЙ продукт (ридер-IDE, публикация), действует независимо от лейблов; юрисдикционные annex'ы (австралийский у xAI) вводят депикт-запреты поверх общего AUP — при выходе на новые рынки перепроверять annex'ы, а не только AUP. ## 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.31 — Пак-18 «долги контракта» ПРИНЯТ и залендён: `--accept-rebill` построен, семантика `escalation_model` исправлена под санкционированный пере-капчер (новый baseline `211c9013…089045d6`), два нита общности отложены ПО ЗАМЕРУ (25.07, оркестратор №8). ✅ **Отчёт:** `docs/archive/reports/PACK18_DEBTS_REPORT_2026-07-25.md` (с ревью-шапкой). Сессия закрыла два долга из трёх и отложила третий с измеренной причиной; 19 собственных мутаций, из них две сначала ВЫЖИЛИ и вскрыли дыры в её же тестах (включая регресс-класс D20.4 «распарсено, но не проведено в раннер») — обе закрыты новыми тестами, а не списаны. **Моя приёмка — execute-first, всё пере-ранено:** `go build`/`go vet` чисты · `gofmt` — только `internal/llm/llm.go`, **воспроизводится на HEAD** (проверил: файл не трогали) · **`-race` 12 пакетов ok, 0 FAIL** · `-shuffle=on` по новым тестам зелёный · **парити EXACT** `n=13618 catastrophe{方源:0 蛊:1 蛊师:2 古月:22} recall 0.9655 (56/58)` · **ценз диффом ИМЁН: 455→475, удалено 0**, добавлены ровно 20 названных. **Санкционированный пере-капчер golden — проверен МАШИННО, ровно в границах санкции D39.26/D39.30-дисциплины:** сдвинулись **4 строки**, все на `ch3/0 draft` (кейс «хоп тоже отказал»), значение `esc_model="fake-fallback"` → `""`. Мой контроль: замаскировал `esc_model="…"` плейсхолдером в HEAD-версии и в рабочей — **файлы стали БАЙТ-ИДЕНТИЧНЫ**; `brief_hash`, `snapshot_draft_payload`, `snapshot_edit_payload`, `memory_version` совпадают построчно ⇒ **вердикт-изменение не утащило с собой ни одной другой оси, пере-оплаты нет**. **Новый baseline golden — `211c9013f5cfa31562857cc9518488393a647cce489d37113402b159089045d6`** (прежний `f7641993…4f0020f8` закрыт этим блоком). **Мои независимые мутации (не из списка сессии) — обе пойманы именованными тестами:** (D1) ратифицированную формулу порога `min($0.50, 5%×Projected)` заменил на `max` → красные `TestRebillConsentThresholdFormula` + пять смежных, включая оба CLI-провода; (D2) в проекцию пустил строки, которые резюмятся за $0 (завышение суммы, под которой просят подпись) → красные `TestRebillProjectionExcludesSkippedAndUnchanged`, `…IsPerWave`, `…IgnoresRetiredStages`. **РАТИФИЦИРОВАНО:** 1. **Развилка сессии «`--resnapshot` НЕ является согласием» — принята, и это даже не девиация:** ратифицированная спека прямо говорит «флаг `--accept-rebill[=usd]` (опциональный потолок суммы, **отдельный от `--resnapshot`-алиаса**)» (`backend/docs/D15.2-content-addressed-resume-spec.md:590`). Аргумент сессии сверх того верен: при алиас-прочтении порог D20.2-Q2 становится мёртвым кодом, потому что на пути `translate` `--resnapshot` требуется в любом случае и сам же был бы согласием — то есть гейт, который не может выстрелить, класс, который загрузчик уже отвергает. Цена (4 существующих теста получили строку согласия) принята. 2. **Гранулярность подтверждена по коду сессией, развилки не возникло:** каждая оплаченная строка под чужим снапшотом действительно пере-оплачивается; каскад §7.1-бис зафиксирован ВЫРОЖДЕННЫМ (пере-оплачивается всё, дополнять нечего), `guard_hash` не строился — ровно граница D39.31-предшественника (промт пака-18). 3. **Дефект честности, найденный сессией у себя, — правильного класса:** проекция считала строки-сироты (позиции, исчезнувшие из манифеста; снятые стадии) и **завышала сумму, под которой просят подпись**. Исправлено, запинено, отмутировано. Фиксирую как норму: сумма в запросе согласия — это утверждение о деньгах, и завышение здесь так же недопустимо, как занижение. 4. **`escalation_model` = авторитетная модель.** Идентичность отказавшего хопа не теряется (живёт в его чекпойнте и строке `request_log`) и это запинено тестом; миграции нет, исторические строки не переписываются — смешанная семантика в старых данных принята осознанно. 5. **Два нита общности — «отложено-с-записью», отсрочка ИЗМЕРЕНА, а не заявлена.** Одна новая строка в `configs/langpacks/zh-ru/dc-checkers.txt` двигает `pack.Version()` `a7d4be2c0465`→`133d71e8d132` и оба волновых снапшота, а стендовые книги объявляют `langpack_root` ровно на этот каталог (проверил: `/home/ubuntu/books/gu-zhenren/rerun2/book.yaml`) ⇒ `--resnapshot` и потеря $0-резюма драфта под замер остатка пака-16. Отдельно принимаю ОПРЕДЕЛИТЕЛЬНЫЙ аргумент по Detail-строкам: дефолт шаблона обязан рендерить сегодняшнюю строку байт-в-байт, значит 时辰-литерал остаётся в Go при любой форме данных — байт-нейтральной формы у этого нита не существует в принципе. **Оба нита едут на ближайший ПОЛНЫЙ `--resnapshot`** (план — в отчёте); до тех пор ограничение зафиксировано, а не забыто. **Координационная заметка (моя ошибка, фиксирую по норме «признавай явно»):** запись бэкенд-сессии в `docs/PROGRESS.md` уехала в мой предыдущий коммит `3bc9eb4` — я собрал общий файл целиком (`git add docs/PROGRESS.md`), пока её текст лежал в рабочем дереве. Вреда нет (текст легитимный и остаётся), но правило уточняю для себя и преемников: **для ОБЩИХ файлов (`PROGRESS.md`, D-лог) при живой параллельной сессии смотреть `git diff --cached` ПО СОДЕРЖИМОМУ, а не по списку имён** — списка имён недостаточно, он не показывает чужой абзац внутри моего файла. **Очередь бэкенда после пака-18:** долгов контракта не осталось; открыты — ru-target (слой 7, ждёт своего дизайн-пака) · два нита общности (на ближайший полный resnapshot) · масштаб целой книги · Ф2-механизмы (голос/состояние D21, native-Gemini судья) · извлечение дискурс-норм из тел промтов (слой 2). ## D39.32 — Ответы владельца по остатку ToS-вопросов: local = «политик нет, переводим всё» (строка применена) · Gemini-оговорка читается СУЖЕНИЕМ · ре-чек политик становится правилом; причина пустоты в конфиг НЕ выносится (25.07, оркестратор №8). ✅ 1. **`local` — решение владельца: вендорских контентных политик к локальному инференсу НЕ применяется, переводим всё.** Обоснование, которое кладу под решение: наружу ничего не уходит (инференс на стенде), веса `Qwen3-8B-abliterated` под Apache-2.0 без контентных ограничений, а Ollama ToS §4 («Transmit harmful, offensive, or illegal content») признан неприменимым к локальному `ollama serve` — «Service» там определён через софт, а не через нашу машину. **Строка применена:** `local: accepts_labels: [violence, sexually-explicit]`; `violence` сегодня инертен (лейбл книгам не назначается, D39.30 п.1) и стоит для полноты. 2. **Gemini: оговорка «-- for example, content created for the purpose of pornography or sexual gratification» читается СУЖЕНИЕМ** (владелец): запрет адресован контенту, СОЗДАННОМУ РАДИ порнографии/возбуждения, и сюжетная сцена внутри романа под него не подпадает. **Что это меняет и чего НЕ меняет:** вердикт перестаёт быть `FORBIDDEN`, но по нашей же доктрине (D39.29: молчание и «нас не запрещает» ≠ разрешение) он становится **UNCLEAR**, а не `ALLOWED` — строки Gemini не получает, маршрут не меняется, grok остаётся судьёй 18+ (D22.6). Чтобы Gemini получил право, нужна ОТДЕЛЬНАЯ подпись владельца в форме D39.30 п.1 («интерпретация как разрешение») — **ждёт одного слова, ничего не блокирует**. 3. **Различать ли в конфиге ПРИЧИНУ пустоты (`FORBIDDEN` против `UNCLEAR`) — НЕТ.** Конфиг несёт ПРАВА (что можно отправить), а причина отсутствия права — факт о документах, и живёт там, где живут факты: `experiments/00-provider-quirks.md`. Дублирование причины в конфиг создало бы вторую копию юридического суждения, которая устаревает молча. 4. **Ре-чек политик — ПРАВИЛО (владелец: «да»).** Перед каждым платным прогоном сверять применимые ToS/AUP по датам ревизий; безусловные триггеры: головной Google ToS **30.07.2026**, квартальный цикл **25.10.2026**, а также любая правка `accepts_labels`. Норму держит оркестратор в чек-листе лендинга; фиксация фактов — полигон. 5. **Дата аккаунта OpenAI — открыта, приоритет низкий:** OpenAI в боевой цепочке не стоит, обе его клетки и так `UNCLEAR`. Смотреть в биллинге/настройках организации `platform.openai.com` (дата создания организации либо первый счёт в истории платежей). **Замечание о судье (по вопросу владельца, факт из кода):** в ПРОДЕ судьи нет — шиппинг-конфиг C1 несёт ровно две стадии, `draft` и `edit`. Судья существует только как ИНСТРУМЕНТ ПОЛИГОНА (риг D39.7: попарные игры между армами, оба порядка, per-vote персист, измеренный шум-пол) и как ПЛАНИРУЕМЫЙ механизм Ф2 (native-Gemini), которого ещё нет. В rerun2 он съел $6.46 из $6.63 — 97% прогона. Ратифицированный приоритет «детерминированный скорер > судьи, где возможен» (нормы оркестратора) при следующем прогоне применяется буквально: замер остатка ремонта — детерминированный read-only скан ($0), судья для него НЕ нужен. ## D39.33 — Директива владельца: МАСШТАБ — ПОСЛЕДНИМ, после достройки алгоритмического идеала; мини-прогоны ~10 глав = штатный инструмент доказательства эффективности (25.07, оркестратор №8). ✅ **Директива (владелец, 25.07):** «масштаб гонял бы уже при полностью построенном бэкенде — достроили весь идеал алгоритмический, который запланировали, и только тогда масштаб. Мини-прогоны на глав 10 можно делать, чтобы доказать эффективность крупных изменений». **Что это меняет в контракте.** Ратифицированный курс D39.22 ставил «масштаб целой книги» ПЕРВЫМ после паков 12/13 («масштаб целой книги · канал B вживую · Ф2-механизмы · ja→ru §B5»). **Порядок амендируется: масштаб уходит в КОНЕЦ**, за достройку алгоритмического ядра. Обоснование владельца принимаю и усиливаю фактурой: приёмочная книга — 7,78 млн символов и ~2284 раздела (`第N节`), то есть масштаб-прогон стоит дорого не деньгами, а ВРЕМЕНЕМ и необратимостью решений, снятых на форме, которую мы всё равно собирались менять; а измерять эффект крупных правок на 5–10 главах мы уже умеем (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.34 — Сплошной аудит корпуса: 23 ратифицированные позиции БЕЗ диспозиции в трекере; подтверждён НЕИСПОЛНЕННЫЙ обязательный флип `RegressionGuard`; очередь и скоуп пака-19 исправлены по букве (25.07, оркестратор №8). ✅ **Метод:** 8-агентный аудит (6 читателей по срезам — D-лог · PROGRESS+3 архива · research · experiments · отчёты паков · арх-доки; синтез; критик с мандатом ОПРОВЕРГНУТЬ тезис оркестратора). 1.6M токенов. **Каждый несущий клейм я перепроверил исполнением сам** — ниже только подтверждённое. **НАХОДКА №1 (HIGH, обязательство, не исполнено): `Gates.RegressionGuard.Enabled` так и не включён.** D38.4 п.5 (`:540`) ратифицировал: «Оркестратор при сборке единого resnapshot **ОБЯЗАН включить** `Gates.RegressionGuard.Enabled`, иначе построенная наблюдаемость на пере-прогоне не сработает». Проверил: ключ `regression_guard` **отсутствует во ВСЕХ шиппинг-конфигах** ⇒ гейт = zero-value `false`. То есть пере-прогон rerun2 прошёл БЕЗ той наблюдаемости, ради которой инфра-пак D38.3 строился. Обязательство остаётся в силе и переносится на ближайший resnapshot; вписано в промт пака, который его вызовет. **НАХОДКА №2 (моя ошибка последовательности, принимаю).** Критик прав дважды: (а) **банк/сид-дельта стоит РАНЬШЕ** по ратифицированной очереди D39.20 (`:783`: «стайл-решения владельца → **банк-дельта** → итерация №2»), а я её из очереди уронил; (б) **аргумент про ниты у меня инвертирован**: D39.31 п.5 (`:934`) откладывал ниты именно ЧТОБЫ СОХРАНИТЬ $0-резюм драфта **под замер остатка**, — значит по той же логике замер обязан пройти ДО того, что вызывает resnapshot, а не после. Мой вчерашний вывод «прогон после пака-19» противоречит моей же ратификации суточной давности. **НАХОДКА №3 (над-атрибуция, моя).** В промте пака-19 стояло «Ниты общности едут ЭТИМ паком. **Ратифицировано D39.31 п.5**». D39.31 п.5 ратифицировал «ближайший ПОЛНЫЙ `--resnapshot`», а не пак-19. Формулировка исправлена: ниты едут первым resnapshot, каким бы паком он ни был вызван. **НАХОДКА №4 (скоуп пака-19 был шире ратификации).** D21 п.2 (`:254`) дословно: «Схема + детерминированный ты/вы-флаггер — **безусловно**; **инъекционная часть — условно** до полигон-эксперимента на ТРУДНЫХ парах (лифт на лёгких = 0; исход «только флаггер-ось» легитимен и дешевле)». Плюс `backend/internal/store/migrate.go:312`: механизмы «gated on the pilot and on D15.2 landing». ⇒ **пак-19 строит безусловную половину** (схема · детерминированный флаггер · reveal-окна), инъекция ПРОЕКТИРУЕТСЯ, но не проводится в прод до полигон-эксперимента. Промт исправлен. **ИСПРАВЛЕННАЯ ОЧЕРЕДЬ (по букве, с учётом D39.33):** 1. **Мини-прогон-замер ~10 глав на ТЕКУЩЕМ стеке, пока жив $0-резюм драфта** — отвечает разом: остаток дефектов (решение о петле ремонта D39.24) · итерация №2 dspro-vs-glm, если владелец её хочет · живая проверка построенного (rebill-гейт, лейблы). Судья НЕ зовётся (детерминированный скан первым). 2. **Параллельно, $0: сид/банк-дельта** (元 · 赤城 · 学堂家老 · 春秋蝉) — она стоит раньше по D39.20 и без неё чтение любого прогона искажено. 3. **Затем пак-19** в урезанном скоупе (безусловная половина D21) — он и вызовет первый resnapshot, которым поедут ниты общности И обязательный флип `RegressionGuard`. **23 позиции без диспозиции — приняты в трекер** (`PROGRESS.md`, блок «Найдено аудитом 25.07»), сгруппированы классами с явной диспозицией каждому. Три самые дорогие: неисполненный флип `RegressionGuard` (выше) · заморозка «этапа B ~300 глав» (D26 п.1) — **поглощена D39.33**, масштаб уходит в конец, отдельной петлёй больше не считается · этапы Б+В спеки D15.2 («промт выдам после пере-прогона», D33 п.5) — пере-прогон состоялся 23.07, промт не выдавался: остаётся открытым, но вне «идеала» (он про content-addressed resume, то есть про `guard_hash`, который D39.31 явно не строил). **Норма, которую этот аудит подтвердил делом:** трекер «Открытые петли» ловит то, что попало в него РУКАМИ оркестратора, и систематически теряет обещания, зашитые в ТЕЛА ратификаций («ОБЯЗАН включить», «выдам после», «в бэклог»). **Сплошной аудит корпуса становится периодической процедурой** — не реже чем перед каждым платным прогоном и при передаче роли; дешевле, чем один потерянный обязательный гейт. ## D39.35 — ЗАМЕР: $0-резюм драфта на стенде УЖЕ МЁРТВ (снапшот разошёлся по трём осям) — аргумент «гнать, пока он жив» ОТМЕНЁН; порядок исправлен: ниты и обязательный флип берём ДО прогона (25.07, оркестратор №8). ✅ **Проверка исполнением (мой замер, read-only, $0):** прочитал таблицу `snapshots` копии стендовой БД `rerun2/guzhenren-rerun2.db` и сравнил с кодом сегодня. | ось снапшота | стенд (23.07) | код сегодня | вердикт | |---|---|---|---| | `style_check_version` | `cheapgate-v3-dc-checkers+u15.0.0` | `cheapgate-v4-percent-latin-brokenword+u15.0.0` | **разошлась** | | `render_format_version` | `renderfmt-v2-editor-src2dst+dc3-gender` | `renderfmt-v3-draft-gender+editor-src2dst+dc3-gender` | **разошлась** | | `langpack_version` | `langpack-v1-09974d6cdac2` | `langpack-v1-a7d4be2c0465` | **разошлась** | **Следствие, отменяющее вчерашний аргумент (мой и критика):** резюм внутри снапшота — инвариант, а снапшот стенда сместили ещё паки 13–16 (профилактика чекеров, render-формат, langpack). Значит **«$0-резюм драфта» на стенде не существует уже двое суток**, и вся конструкция «мини-прогон срочно, пока он жив» была построена на предпосылке, которую никто не измерил. Признаю: я принял её от критика и не проверил, хотя проверка стоила одного SQL-запроса. **Что из этого следует практически (и это ЛУЧШЕ, а не хуже):** 1. Прогон в любом случае пере-оплачивается целиком, поэтому **срочности нет** — и, наоборот, дешевле сначала доложить в стек то, что и так поедет первым resnapshot, а потом мерить. Порядок исправляется на: **(1) микро-пак «предпрогонная гигиена» — два нита общности + ОБЯЗАТЕЛЬНЫЙ флип `Gates.RegressionGuard.Enabled` (D38.4 п.5, невыполненное обязательство, D39.34) + опц. проекция пере-оплаты в `tmctl status`; всё $0-код → (2) мини-прогон-замер ~10 глав на этом стеке → (3) пак-19.** 2. Смысл прогона от этого только растёт: он мерит форму, которую мы собираемся оставить, и заодно проверяет живьём построенное (rebill-гейт, лейбл-путь как no-op, майнинг-стоп, чекеры). 3. **Ниты больше ничего не «убивают»** — терять нечего, а значит их условность (D39.31 п.5) снимается: берём в микро-пак. **Деньги мини-прогона, по фактическим цифрам rerun2** (`rerun2/RERUN_REPORT.md`): срез 1–5 глав = 28 336 байт GB18030; драфт **$0.010931**, редактура за арм **$0.0401–0.0766**, судья $6.4617 (не зовём). Экстраполяция на ~10 глав: **драфт ≈ $0.02, редактура ≈ $0.08–0.15 за арм** ⇒ **один арм ≈ $0.10–0.17, два арма (итерация №2 dspro-vs-glm) ≈ $0.20–0.32.** Потолок книги $15 не приближается; судья остаётся невызванным по D39.32. **Операционное (в промт прогона):** стендовая БД на схеме **v9**, бинарь ожидает **v10** — первая же write-команда мигрирует; **перед прогоном сделать резервную копию `rerun2/*.db`** (запись rerun2 — единственный носитель фактуры того прогона). ## D39.36 — ДЕФЕКТ ШВА, найден вопросом владельца: канал WHAT (банкнота) ПАРСИТСЯ И ВЫБРАСЫВАЕТСЯ — владелец подписывает термины БЕЗ предложенного перевода; плюс майнинг-стоп жёсткий там, где замышлялся выбор (25.07, оркестратор №8). ✅ **Как вскрылось:** владелец описал свою модель работы майнинга («термины набираются по драфту → попадают в банк → получают ПРЕДПОЛАГАЕМЫЙ ПЕРЕВОД → дальше опциональный ОК: не ок — правим, ок — идём дальше без оков») и сказал, что «что-то не то». Проверка по коду показала: **его модель совпадает с ратифицированным ЗАМЫСЛОМ, а не с построенным**. **Замысел (в комментариях и в D39.10):** `internal/pipeline/mining.go:20` — «default B, WHICH-only — **the dst is the owner's to attach via the banknote at sign time**»; `internal/miner/miner.go:20` — «The dst (WHAT) is delivered by the banknote (WS4)»; D39.10 — «код находит сущности (0.97), но **канон-dst доставляет БАНКНОТА**». **Что построено (проверено исполнением):** 1. **`internal/pipeline/banknote.go:177`: `_, flags = parseBanknote(block, false)`** — распарсенные записи (`bankEntry{Src, Dst, Type}`, где `Dst` = «the model's proposed translation») **отбрасываются в `_`**; сохраняются ТОЛЬКО счётчики телеметрии (`n_banknote_lines`, `parse_fail`, `truncated`). Вне тестов `bankEntry` не используется НИГДЕ (грep по `internal`): 5 упоминаний, все внутри самого парсера. 2. **Сырой блок банкноты срезается из драфта до хранения** (`applyBanknote` → `commitBanknoteExport` персистит ЧИСТЫЙ текст), то есть предложенный перевод не остаётся и в артефактах прогона. 3. **Подписная карта — WHICH-only:** `miner.DeltaYAML` (`miner_emit.go:177-194`) кладёт `Src`, `Type`, `Status: auto`, алиасы и evidence-заметку — **поля dst в ней нет**. ⇒ **На майнинг-стопе владелец получает голые исходные термины и обязан придумывать русский вариант сам**, хотя модель его уже предложила и мы его выбросили. Шов «WHICH × WHAT», ради которого разводились каналы, физически не соединён. **Второе расхождение (флоу, не дефект — ратифицированный выбор, который владелец пересматривает):** непустая дельта ⇒ прогон **ЖЁСТКО останавливается** (`runBankMiningStop` → STOP перед edit-волной, `mining.go:36-87`), и стоп очищается, только когда КАЖДЫЙ терм либо промоутнут, либо отклонён. Владелец хочет **опциональный** ОК: идти дальше на предложенном банке, вмешиваясь лишь когда хочет поправить. **Третья, несущая связка, которую надо решить ЯВНО:** сегодня в инъекцию идёт **только CONFIRMED** (trust-gate банка, D39.2; D21 п.5). Значит «идти дальше на предложенном банке без оков» **не эквивалентно** «просто не останавливаться»: если mined-термы остаются `auto`, они в инъекцию НЕ попадают, и продолжение без подписи даёт банк, который для этих терминов не работает. Либо trust-gate ослабляется для mined+dst (и тогда в перевод едет НЕподписанный канон — с риском закрепить ошибку на всю книгу), либо остаётся, и «без оков» означает лишь «не блокировать прогон», а не «использовать предложенное». **Диспозиция:** дефект №1 (выброшенный dst) — чинить безусловно, он противоречит собственному замыслу и обесценивает канал WS4. Пункты 2 и 3 — **вопрос владельцу**, потому что это его продуктовый выбор между скоростью и риском закрепления неподписанного канона. До ответа мини-прогон ЗАМОРОЖЕН: он упрётся ровно в этот стоп и попросит подписать голые термины — то есть воспроизведёт трение, которое владелец только что назвал. ## D39.37 — Мини-прогон + фикс-пак + сквозная проверка ПРИНЯТЫ и залендены: операционка подтверждена живьём до цента, шов банкноты замкнут (но не запинён — фикс-лист), остаток = 0 в трёх классах петли; слабое место проекта — измерительный слой (26.07, оркестратор №8). ✅ **Отчёты:** `MINIRUN_REPORT_2026-07-25.md` (фактура, §0 пре-регистрация написана ДО первой траты с named-критериями ПРОВАЛА) · `MINIRUN_HANDOFF_2026-07-26.md` (веса чисел, самооценка фиксов, 8 хвостов) · `MINIRUN_NOTE_2026-07-26.md`. Сессия шла под живым надзором владельца (две подписи майнинг-стопа, диалог «школа/академия»); фикс-пак — с его санкцией в сессии («исследование → правки → ревью»). Сессия не коммитила; лендинг мой. **Моя приёмка — execute-first, всё пере-ранено:** build/vet/gofmt чисты (`internal/llm/llm.go` — HEAD-состояние) · **`-race` 13 пакетов ok, 0 FAIL** (в дереве появился `internal/obs` с тестами) · **ценз диффом ИМЁН 475→492, удалено 0** · **golden `281d7025…dd9b99b4`: мой маскированный структурный дифф против HEAD ПУСТ** вне трёх заявленных осей (`CheapGateVersion` v4→v5 · `min_max_tokens` dspro 8000→16000 · `langpack_version` `a7d4be2c0465`→`a28ed743c99c`) · парити EXACT `n=13618 … 0.9655`. **Деньги сверены по СЫРЫМ ЛЕДЖЕРАМ до цента:** главный прогон `spend.committed_usd = $0.114291` (совпал с проекцией rebill-гейта ТОЧНО — она суммирует хранимые `cost_usd`); проба банкноты $0.021688; микро-проект гейта $0.003081 (леджер несёт ОБЕ оплаты; my first sum читала chunk_status — текущее состояние — и потому недосчитывала); сквозная проверка $0.048855; **брак сессии $0.046668** (sed-сборка конфига по чужому `book.yaml` — честно отчитан, оригиналы целы, бэкап rerun2 проверен: схема v9, spend неизменен). Итог **$0.234583** — арифметика сходится побайтно с отчётом. **Спот-чеки по сырью (мои):** банкнота **71 строка / 9 из 20 чанков / truncated 0** — совпало с БД; миграция **v11** реальна (`first_flag_reason`, `banknote_detail`); **шов замкнут вживую** — `banknote_detail` несёт пары src→dst, включая «学堂家老 → старейшина школы», тот самый терм второй подписи; **`RegressionGuard` — первое живое срабатывание за историю проекта ПОДТВЕРЖДЕНО МОИМ ре-раном** `tmctl report` на verify2: `number_drift:1`, «draft numbers missing from the final: [66]»; главный прогон 34/34 строки ok. БД главного прогона на v10 — скан остатка принят по записанному выводу команды (артефакт эпохи до миграции; форсить миграцию фактуры не стал). **НАХОДКА РУБЕЖА-2 (моя независимая мутация, ВЫЖИЛА):** отключение джойна WHAT в точке вызова (`miner.DeltaYAML(mined, пустая_карта)` вместо `proposals`) оставляет **всю сьюту зелёной** — несущий продуктовый фикс сессии доказан живым прогоном, но НЕ запинён ни одним тестом: регрессия была бы молчаливой. 9 мутаций сессии были красными, но ни одна не целила в этот колл-сайт. **Фикс-лист №1 следующего касания бэкенда: сквозной тест «намайненный терм с предложением банкноты → подписная карта несёт dst».** **РАТИФИЦИРОВАНО:** 1. Гигиена: флип `RegressionGuard` в 5 конфигах (обязательство D38.4 п.5 ПОГАШЕНО) · оба нита общности в **fail-loud форме без Go-дефолта** — снимает моё возражение D39.31 п.5 (дефолта, обязанного рендерить сегодняшнюю строку, не существует) · проекция пере-оплаты в `status` тем же `projectRebill`. 2. Фикс-пак (санкция владельца в сессии): v11 · эхо-метрика через `first_flag_reason` · шов банкноты (dst как EVIDENCE, `status:auto` не трогается — подпись остаётся владельцу) · `dialogue_dash` · обрезка лога · флор 16000. **Две откаченные правки (`percent_scale`, `dc2`) фиксирую как ОБРАЗЕЦ:** обе маскировали бы настоящие ошибки; «написано → прогнано → откачено с причиной» — правильный исход, не потерянная работа. 3. **Хендофф-дисциплина «чего числа НЕ доказывают» — принимается как НОРМА отчётов** (вес каждого числа: «0 в трёх классах ≠ текст чистый» · «замер на обучающей выборке» · «доказано тестами, не прогоном»). 4. **Методические ошибки сессии №2/№3/№5** («рекомендация раньше фактуры», «польза фикса без проверки», «вывод быстрее обеспечения») — тот же класс, что мои D39.34-находки; в следующие промты идёт формула сессии: **«пере-мерь свой вывод ДРУГИМ способом, чем получил»**, вместо голого «самопроверься». **НА ВЛАДЕЛЬЦЕ (открылось решение):** **включение платной петли ремонта (D39.24) — замер ЕСТЬ: остаток 0 в трёх классах, которые петля умеет чинить.** По этой цифре корректно решить «НЕ включать» (чинить нечего) — с оговоркой сессии: это узость набора классов, не чистота текста; расширение набора — прежде повторного замера. Рекомендация моя: не включать, петля остаётся построенной за `enabled:false`. **ХВОСТЫ (в трекер, по убыванию веса):** (1) **размеченный набор для чекеров** — топ-выбор сессии и мой: без него каждая цифра качества держится на глазомере очередной сессии; (2) тест-пин джойна WHAT↔WHICH (моя выжившая мутация); (3) покрытие WHAT↔WHICH (замер: 0/2 и 1/2 — следующая работа шва не «замкнуть», а «покрыть») + майнинг-стоп очищается РАУНДАМИ (вход в развилку D39.36 п.2 — флаговый стоп, семантика владельцем озвучена, реализация открыта); (4) `dialogue_dash` подогнан под 蛊真人 — честный замер только на невиданном тексте; (5) **генеральность нарезки: кана и ханьцзи в одном классе** (`TokenizeClassCounts`) — на ja-книге `est_out` завышен ~1.7×, чанки вдвое мельче, вызовов вдвое больше, МОЛЧА; + `EstimateTokens` недосчитывает кириллицу → резервации занижены на русско-тяжёлых вызовах; (6) golden пинит только фолбэк-путь (без langpack) — нужна вторая фикстура; (7) `prompt_override` — легальный обход гарантии слоя-2, сформулировать честно; (8) майнер/банк не-CJK конструктивно не работают (манифест = китайская ономастика) — граница признана, едет с ja→ru; (9) `request_log` без скоупа/ретеншена + `first_flag_reason` = ТРЕТЬЕ представление истории попыток (корень — неразведённые скоупы) ; (10) флор-16000 — калиброванная константа без модели «thinking в completion»; (11) две единицы упёрлись в `max_tokens` — вернётся на en-книге. **Проверено исполнением сессии ($0): ja/en книги падают громко ДО цента; с обойдённым гейтом проходят ingest/чанкер/read-model без правки Go** — §0 держится на уровне кода, но калибровки фактически китайские. ## D39.38 — Санкции владельца (26.07): флаговый майнинг-стоп СТРОИМ (пак-20, двухфазный, ПЕРЕД паком-19); петля ремонта НЕ включается; полигону — размеченный набор чекеров; всем бэкенд-промтам — обязательный СИНК-шаг с ратифицированной базой. ✅ **Очередь ратифицирована владельцем:** пак-20 «банк: флаговый стоп + покрытие WHAT→WHICH» (двухфазный — синк → дизайн → ратификация → стройка) → пак-19 «голос/состояние» → свип «стартовый промт + гипотезы ресёрчей 01–22 против построенного» (владелец спросил «прошлись ли по всем?» — честный ответ был «не уверен»; свип $0, аудит-воркфлоу класса D39.34) → добор идеала (4 вопроса границы D39.33 всё ещё у владельца) → МАСШТАБ → пилот. Параллельно полигон: пакет-6 «размеченный набор для чекеров» (200–300 строк/класс, разметка до просмотра вердиктов, precision/recall текущих чекеров — линейки вместо глазомера). **Петля ремонта: НЕ включается** — отложено-с-записью: замер D39.37 дал 0 кандидатов в её классах, чинить нечего; вернуться при расширении набора классов и ненулевом остатке. **Мандат владельца в нормы промтов:** сессия ОБЯЗАНА синковать свою имплементацию об ратифицированную документацию и окружающий код ДО дизайна — таблица «источник ↔ код ↔ вердикт» в отчёте (шаг 0 пака-20; переносится во все последующие кодинг-промты). Контекст мандата: вопросы владельца об алгоритме банка показали, что доверие держится на прослеживаемости «ресёрч → ратификация → код», и её надо ПОКАЗЫВАТЬ, а не подразумевать. ## D39.39 — Пакет-6 ПРИНЯТ: линейки чекеров впервые измерены против человеческой разметки (3015 позиций, 6 реальных прогонов, $0) — где линейка стреляет, она почти не врёт; но recall почти везде низкий, K5c инвертирован, K6 шумит 14:1; «остаток=0» D39.37 уточнён как «ноль в охвате узких детекторов», НЕ «финал чист» (26.07, оркестратор №8). ✅ **Приёмка исполнением:** `metrics.json` воспроизведён ПОБАЙТНО ре-раном харнесса (настоящие `internal/checks` через replace-модуль); разметка пересчитана независимо (3015 позиций: 70 дефектов, 21 спорная); баг U+0301 в `TokenizeCyrillic` воспроизведён живьём («бо́льшим» → «бо»+«льшим»); инверсия K5c подтверждена по сырому корпусу (`acceptance:10:0`: 10×-ошибки шкалы «один процент» для 一成 при слове «процент» в юните, глушащем подчекер целиком — `checkers.go:355`); код-якоря заявленных дефектов сверены. Протокол «разметка ДО вердиктов» соблюдён по конструкции сборки. Отчёт: `docs/archive/reports/POLYGON_CHECKER_LABELS_2026-07-26.md`; набор — на стенде `books/gu-zhenren/labels/` (текст книги, вне git), ре-ран детерминирован. **Сводка первого честного замера** (полный разбор — в отчёте): K1 时辰 1.000/1.000 (N=15) · K2 латиница 1.000/0.75 как детектор и 0.50 в боевом охвате — заглавные («Cultivation» в ФИНАЛЕ), гомоглифы («гy») и короткие токены вне класса · K3 битые формы 1.000/0.100 — один шаблон «-йть» вместо класса · K4b смешение 0.833/0.109 — «8→0» подтверждено на мыслях (99/100 молчат), но 41/46 реплик ВСЛУХ не опознаны · K4a — 0 входов на 6863 строках, непроверяем · K5a магнитуда — 0 срабатываний на 149k знаков (предохранитель отсекает идиомы вместе со всеми реальными магнитудами) · K5b 1.000/1.000 (N=8) · K5c — 0.167 читательской меркой / 1.000 конвенцией кода (вопрос Р2) · K5d — precision 0.000 (4 срабатывания, все безобидные) · K6 глоссарий 0.067 — 14 ложных на 1 подлинный (7 — мн.число вне `decl.forms`, 6 — однознаковый ключ 转 на глаголах, 1 — кавычки в форме). 12 дефектов чекеров зафиксированы с file:line (не чинились — полигон не автор). **Следствия.** (а) Чтение D39.37: «остаток=0» = ноль срабатываний детекторов, чьи recall теперь ИЗМЕРЕНЫ (петлевые классы по боевому дефолту `repair.go:117`: латиница 0.50 в охвате, битые формы 0.10). Решение «петлю не включать» НЕ пересматривается — петля видит теми же детекторами, чинить ей нечего; но «финал чист» из этой цифры не следует. (б) Набор = постоянный измерительный стенд: любой фикс чекеров теперь приёмуется против него за $0 — «глазомер сессий» в этом слое закрыт как класс. (в) Вход будущего фикс-пака «чекеры»: 12 дефектов file:line + supressor K5c пер-вхождением + атрибуция K4b + `inner_marker` на тире + предохранитель K5a + 两 в `cheng_re` + U+0301 + мн.число в сид-тулинге + однознаковые ключи пост-чека; место в очереди — решение владельца. (г) Четыре вопроса разметки Р1–Р4 — владельцу (гипербола 千万 · что есть дефект в 成 · сокращённая форма термина · неразрешимая офлайн речь/мысль); от Р2 зависит целевая семантика K5c, от Р4 — потолок recall K4b by construction. (д) 38/40 дефектов латиницы живут в ЧЕРНОВИКАХ — вне охвата гейтов по сознательному контракту (`waverun.go:486`); в финалы доехало 2, поймано 1 — вопрос «гейт черновика» отдельный и не срочный (редактор черновик переписывает). ## D39.40 — Владелец (26.07): фикс-пак чекеров = ПАК-21; перед ним — мини-прогон ~10 глав на полностью построенном бэкенде (после лендинга паков 20 и 19). Очередь D39.38 амендирована этой вставкой. ✅ **Слова владельца:** фикс-пак чекеров — «в 21 промт»; «до этого промта попытался бы запуститься бэкендом на 10 глав — к тому времени мы будем алгоритмически иметь весь запланированный бэкенд (по большей части)». Очередь теперь: **пак-20 «банк» (идёт) → пак-19 «голос/состояние» → мини-прогон ~10 глав → пак-21 «чекеры» → свип гипотез → добор идеала → МАСШТАБ → пилот Ф2.5.** **Мини-прогон — по норме D39.33 (именованные вопросы):** покрытие WHAT→WHICH живьём при непустом пересечении (обязательство D39.37) · оба режима флага (стоп с таблицей / auto→Ambiguous от начала до конца) · срабатывания голос-флаггера пака-19 · эхо-метрика на живом эхо. Ограничение: `dialogue_dash` на 蛊真人 загрязнён подгонкой (D39.37 п.4) — его цифры мини-прогона аргументом не считаются. Скан остатка пойдёт по линейкам с ИЗВЕСТНЫМИ слепыми зонами (D39.39) — приемлемо: зоны документированы, чтение «тишина ≠ чисто» уже в силе. **Пак-21 «чекеры» (вход зафиксирован):** 12 дефектов D39.39 с file:line + переезд `translitInterjections` из Go в данные цели (улов владельца 26.07: захардкоженный словарь в `cheapgates.go:367` против нормы §0) + починки по ответам владельца на Р1–Р4 (дизайн пака пишется ПОСЛЕ этих ответов). Приёмка = ре-ран против размеченного набора пакета-6: recall вверх, precision не ниже текущей, `metrics.json` — сравнение с базлайном D39.39. ## D39.41 — Пак-20 ФАЗА 1 ПРИНЯТА: синк вскрыл 18 расхождений «доктрина↔код» и 4 структурных тупика; корпус доков УЖЕ содержит непостроенные ратифицированные ответы (двухрежимная эмиссия §C2-7 · M2 · журнал ревизий); вердикт сессии «P1–P5 в предъявленном виде не строятся» подтверждён верификацией 39 CONFIRMED / 7 PARTIAL / 0 REFUTED (26.07, оркестратор №8). ✅ **Приёмка исполнением (7 верификаторов, 46 клеймов, $0):** все несущие S-строки синка подтверждены кодом и исполнением (S1 — тест `TestRenderGlossaryBlock` PASS на `status:auto` + ⟨проверить⟩; S2 — вырез `Source:mined` из baseMemory + confirmed-only редактор = инертность на обоих проводах; S5 — срез банкноты не выполняется при выключенном гейте, ключа нет ни в одном конфиге; S8 — `contrast_path` не задан ни в одном тесте, тело майнинг-стопа `mining.go:40-102` не исполняется ни разу за сьюту, доказано подсчётом логов с позитивным контролем). Доктринальные цитаты Д1–Д8 сверены с первоисточниками; деньги пересчитаны из БД стенда тремя способами (verify $0.0161 / verify2 $0.0328, +104%); теорема FOI и Следствие B выдержали атаку (девятый путь не найден). PARTIAL-поправки — в ревью-шапке отчёта `docs/archive/reports/PACK20_BANK_DESIGN_2026-07-26.md`; весомые: цитата-парафраз в Д5 (овер-атрибуция), блокер 7 не грунтован текстом, посылка блокера 3 не предъявлена в отчёте. **Новая находка приёмки: бюджет банкноты `bankTokenBudget=144` по честной формуле движка впритык/отрицателен (худший блок пробы 142.6/147.2 est-токенов) — фазе 2 пере-считать.** **Статус: фаза 2 НЕ стартует** до решений владельца по блокирующим развилкам (следующий D-блок). Ключевое уточнение семантики от владельца (26.07, дословно по смыслу): флаг = ОПЦИОНАЛЬНАЯ ПОДПИСЬ — «можно запустить перевод так, чтоб сессия не останавливалась и не запрашивала верификацию банка, а просто как намайнит и закончит — шла в редактуру». Семантика D39.36 не пересматривается; сложность пака — не в стопе, а в том, ЧТО едет в провод, когда подпись пропущена (у большинства намайненных терминов нет dst — разъезд каналов 3% по построению; путь записи не существует; строки в проводе двигают хеши оплаченного). ## 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, тест). Моё объяснение владельцу «пометка нужна главам 4–50 того же прогона» было неверным для волновой архитектуры — взято назад (в волне черновики готовы до майнинга; пометка живёт на 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.43 — Пакет-7 фаза A ПРИНЯТА: recall боевого WHICH-канала впервые измерен (0.069–0.103; term 0.040; ограничивает слой ЭМИССИИ, снимается до 0.911) — количественное основание терминолога; посылка «культивация = общепринятое» уликами НЕ подтверждена (вскрыта ложная сходимость: один английский глоссарий + один блогер); смета терминолога на полном банке = ЕДИНИЦЫ ДОЛЛАРОВ, не «центы» — амендмент D39.42 п.1 (26.07, оркестратор №8). ✅ **Приёмка исполнением (5 верификаторов, 26 проверок): 24 CONFIRMED / 1 PARTIAL / 1 UNVERIFIABLE / 0 REFUTED** — майнер-прогоны и проба рубрики воспроизведены побайтно на пине 996bade, веб-улики подтверждены дословно, арифметика пересчитана. Отчёт: `docs/archive/reports/POLYGON_TERM_RESEARCH_A_2026-07-26.md` (ревью-шапка с нитами); инструменты: `eval/pkg7/`; $0. **Три следствия для контракта:** (1) **Амендмент D39.42 п.1:** «батчи, дешёвая модель, центы/книга» для терминолога верно ТОЛЬКО на выборках; на полном банке (13 246 кандидатов расширенной эмиссии × ~2.5k токенов контекстов ≈ 33 млн вх. токенов) — единицы долларов; смета фазы 2 пака-20 обязана считаться от реального объёма входа, и требование G7 (отделить «что показать владельцу» от «что отдать терминологу») получает денежное обоснование. (2) **Фактура в пак-20 и будущий пак generic-майнера:** требования G1–G10 (алфавит кандидатов = данные пары · многословные кандидаты · нормализация не выводит строку за пределы книги · порог частоты на класс · разметка исходника = сигнал · контраст на пару · ось эмиссии G7 · кластер не глотает родовой титул G8 · квадратичность ⇒ 4.6 ч на приёмочной книге G9 · тихая пустая дельта G10); точечный дефект кластеризации с адресом (`族长`/`学堂家老` проглочены кластером `葛家` — стоил подписанного терма). (3) **Правило жанровости (предложение сессии, разумное):** жанровое = встречается в ≥2 книгах жанра без смены смысла; книжное живёт с книгой. **Ресёрч:** 84 самопроверки источников (62C/14P/7MISQ/1OA/0 фабрикаций) + критик полноты, снявший собственные «сходимости» сессии (полтора слоя вместо трёх у «12 полей»; круговая валидация K3). Посылка D39.42 п.1 об индустрии НЕ подтверждена и НЕ опровергнута: издательская сторона стоит на маркетинговых аннотациях (систематически смещены против жаргона), фан-сторона — ложная сходимость из одного первоисточника; предложен V0 (не подписывать 修炼-строку до $0-добора: тела ISBN + НКРЯ/Ngram). Строки `genre-glossary.txt` (создан паком-20, куратор — владелец) 修炼/筑基/修士 — под этим же вопросом. **Статус: фаза B НЕ стартует** до решений владельца Z1–Z4 (рубрика K1–K12 + Q1–Q6 · вариант по 修炼 · смета B $1.20–2.60 с пре-регистрацией и критериями провала F1–F4 · $0-добор улик перед B). Решения — следующим блоком. ## D39.44 — Решения владельца по Z-развилкам пакета-7 (26.07): рубрика K1–K12 РАТИФИЦИРОВАНА (Q1–Q6 закрыты); по 修炼 — V0 (не подписывать до добора); смета фазы B $1.20–2.60 САНКЦИОНИРОВАНА; $0-добор улик — ДА, ПЕРЕД фазой B. Обе записки (полигону и аддендум паку-20) выданы СЕЙЧАС — бэкенд полигона не ждёт. ✅ **Q-ответы (санкция владельца по рекомендациям оркестратора):** Q1 — веса НЕ выбираются до данных фазы B (оценка там BWS по-критерийно, весов не требует; выбор весов — по фактуре); Q2 (жанр против академии) — решается вместе с Z2 после V0-добора (вопрос регистра издания); Q3 — порог «хорошо» = ВСЕ критерии ≥1 + катастроф-экран (строже и проще защищать); Q4 — сокращённая форма терма = ПОЛЕ существующей записи, не отдельная строка (концепт-ориентация записи, A1.1 отчёта) — **это же частично закрывает Р3 из D39.39** (сокращённая форма легитимна, если записана принятой формой банка; пост-чек обязан её принимать — вход дизайна пака-21); Q5 — штраф ПЕРВОГО вхождения + отдельный счётчик распространённости ошибки; Q6 — «краткость» в рубрику НЕ входит (Суперанская: точность выше краткости; конфликт с K1/K6). **Порядок работ полигона:** Z4-добор ($0, пять адресных заходов: тела ISBN · изданные русские переводы книг стенда → HUMAN-эталон · НКРЯ/Ngram · архивы + локальный парсинг (ГУГК/Концевич pdftotext, дамп БКРС) · GalTransl/SakuraLLM/AiNiee + JTF) → фаза B по пре-регистрации A5 (P0 случайный глоссарий · P0b без контекстов · HUMAN-арм · K2=н/д на ja/en · критерии провала F1–F4; пре-регистрация после старта не правится). **Секвенирование с паком-20 (вопрос владельца «не зря ли параллельно»):** параллель ОКУПИЛАСЬ — фаза A успела поправить смету терминолога, вход эмиссии и кластер-дефект ДО цементирования в коде. Аддендум-синк бэкенду уходит СЕЙЧАС (он зависит только от принятой фазы A): пп.1–5 фактура D39.43 + п.6 «промпт терминолога = ИНТЕРИМ v1, финальный текст выберет фаза B и ляжет дата-правкой; механизм обязан терпеть смену текста без правки кода» + п.7 «содержимое `genre-glossary.txt` = неподписанный драфт; строки 修炼/修士/筑基 спорны (V0), пометить/придержать, в golden не цементировать». Результаты фазы B лягут позже дата-правками — механизм бэкенда их не ждёт. ## D39.45 — Пак-20 ФАЗА 2 ПРИНЯТА И ЗАЛЕНДЕНА: терминолог (роль пар-пака, durable-деньги) + флаговый стоп `--verify-bank` (дефолт = авто) + авто-провод неподписанного с пометкой + точечная ре-редактура по ключу с $0-пере-пином + банкнота отдельным шиппинг-файлом — построено, живьём проверено на срезе 10 глав, деньги сходятся тремя путями до 9-го знака (26.07, оркестратор №8). ✅ **Приёмка исполнением (2 верификатора):** сьюта `-race` 14 пакетов ok · golden PASS · миграция v12 аддитивна · `bankTokenBudget` выведен (144→496, пересчитан вручную) · воронка эмиссии G10 на каждом вердикте стопа · синк-пункты аддендума исполнены дословно (промпт роли = интерим в файле; спорные строки словаря закомментированы с причиной; `TestGenreGlossaryEditDoesNotMoveThePackVersion` + обратная половина) · стенд: $0.047614504 (spend ≡ checkpoints ≡ request_log), 20 юнитов пере-пинены за $0 при bank-only-сдвиге, поздний сдвиг версии пака — платный (контраст верен). Ревью-шапка с нитами — на отчёте `docs/archive/reports/PACK20_BANK_BUILD_2026-07-26.md`. **Ключевые факты стройки:** живой прогон подтвердил ЗАДАЧУ (терминолог переоткрыл подписи владельца: 学堂→«школа», 学堂家老→«старейшина школы»; дрейф показан колонкой spread) и поймал дефект класса «канон-ломание» (роль переписала согласованный с подписями перевод — закрыто якорями ⟦TM-CANON⟧ + детектором CanonConflicts, живьём 1 честный конфликт из 35). Сессия сама вскрыла и закрыла: самоподтверждающую выборку своих мутаций (независимая линза: 20/30 выживших → закрыты; итог 48+ красных), фолд жанрового словаря в версию пака (подпись строки пере-оплачивала бы книги пары целиком — выведен из хеша, правка бьёт только батчи роли), 14 дефектов аудита §8.2 (вкл. бюджет роли ПОСЛЕ факта → стал предварительным; деньги роли вне TOTAL → входят; ложное «cjk_artifact» на легитимно-двуязычном ответе роли). **Микро-проба $0.02 снята как перекрытая живым прогоном.** Кластер-дефект G8 воспроизведён и оказался хуже («глава клана» приписывался фамилии) — закрыт на границе сборки входа (Origin: alias + провенанс Via), кластеризация не чинилась (отдельное решение). **Открытые решения владельца:** (1) `feed_cap` (ось G7) — предложен с деньгами (400 канд. ≈ $0.035, все 13 246 ≈ $1.10; бюджет-гейт режет хвост батча, не наименее ценное) — рекомендация оркестратора: строить малой дельтой; (2) жанровые метки `genre-glossary` — пар-широкие или выравнивание с `book.yaml`; (3) подпись содержимого словаря — после полигонской фазы B; (4) одноразовый `--resnapshot` книг с auto-строками (стендовые). **Хвосты в трекер:** `AttachKWIC` квадратичен (16.8 с / 2000 канд.) · смета молчит о пере-покупке прохода роли на каждой итерации подписи · S12 частичен (подмена слова разделителя не ловится) · `bankTokenBudget` worst-case зашит zh→ru (признанная утечка пары, §0) · ветка `dispositionFor`/S7 · gofmt-нит `llm.go` (до-паковый) · **вариативность банкноты 37↔14 строк между прогонами одной книги (n=2) — сигнал в полигонскую фазу B: бьёт премису «банк = детерминированный артефакт»** · веса формулы §C2-3 пере-мерены n=1 — пере-мер следующим живым касанием. ## D39.46 — Пакет-7 ЗАКРЫТ ЦЕЛИКОМ (фазы B + B′ приняты): «контексты — главный рычаг терминолога» РАТИФИЦИРОВАНО как измеренное (разрыв 6 термов при размахе 1); слепой LLM-судья = катастроф-экран, НЕ ранжировщик; жанровый словарь инертен до расширения эмиссии на класс term; три процессных правила полигона — В НОРМЫ ПРОМТОВ (26.07, оркестратор №8). ✅ **Приёмка исполнением: 7 CONFIRMED / 1 PARTIAL / 0 REFUTED** (деньги $0.31030+$0.14013 пересчитаны из usage всех 446 вызовов; замеры T/J/R фазы B′ воспроизведены из сырья; R1-неизмеримость контроля — независимым кодом). Ревью-шапка с нитами — на отчёте `POLYGON_TERM_RESEARCH_B_2026-07-26.md`; B′ — `POLYGON_TERM_RESEARCH_B2_2026-07-26.md`. Итого пакет-7: **$0.45043 из коридора $1.20–2.60**. Самокоррекция сессии (ревизия §B6 нашла 4 материальные ошибки СВОЕГО судейского слоя, B′ проверил ревизию замером) — прецедент нормы author≠reviewer: единственная фаза без критика полноты = единственная с ошибками. **Ратифицировано фактами:** (1) **контексты — главный рычаг качества терминолога** (Z-B8: арм без KWIC теряет 6–7/19 при внутриармовом размахе 1) — экономить на контекстах нельзя, kwic-настройки = главная ось качество↔цена; (2) **слепая оценка годна только как катастроф-экран с декоем** (H7: разрыв до декоя 1.27–1.42 против межарменного 0.20; ранговое согласие с объективным слоем ничтожно); (3) **жанровый словарь инертен (0/80), пока эмиссия/подача не расширены на класс term** — усиливает открытое решение feed_cap из D39.45; (4) отбраковка судей фазы B снята (Z-B7 — контроль был структурно неизмерим); (5) узкая формулировка правила транскрипции — поддержана замером как редакторская опция (широкая опровергнута: P2−P5=+0.013<0.05). **Три процессных правила — в нормы промтов сессий (стандарт, как синк-мандат D39.38):** (а) у каждого измеряемого фактора обязан быть арм БЕЗ него — фактор во всех армах не измеряется ни одним; (б) в сравнительном протоколе: дедуп кандидатов + отбор только расходящихся позиций + контрольный ДЕКОЙ (без него «отличает ли оценщик годное» неизмеримо); (в) критик полноты — на КАЖДУЮ фазу, не на пакет. **На владельце (подписи, не блокируют очередь):** Z-B1 修炼 остаётся неподписанной (V0 не снят — тел изданий нет) · Z-B2 подписать 17 строк словаря, закрытых БКРС (筑基 подтверждена; 修士→культиватор спорна — словарное «христ. монах») · Z-B3 узкая формулировка правила транскрипции как редакторское решение (цена: без правила ломаются 月光蛊/王婆) · Z-B4 веб-фетч в v2 роли НЕ вводить, офлайн-словарь как пар-данные (для zh→ru собран). Полигон-очередь пуста; кандидаты следующего пакета: **вариативность банкноты 37↔14 (сигнал пака-20)** · ёфикатор/санитайзер-разметка · dialogue_dash на невиданном тексте. ## 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.48 — Дельта пака-20 ПРИНЯТА И ЗАЛЕНДЕНА (размотка словаря чиста, golden без пере-капчера = версия langpack не сдвинута); синк-находки дельты ПЕРЕФОРМУЛИРУЮТ вопрос расширения: ось = «что банкуется без подписи ≠ что кладётся на подпись»; перед дизайном — ТРИ ПРЕ-ЗАМЕРА (~$0.14, ждут санкции владельца) (26.07, оркестратор №8). ✅ **Приёмка:** размотка снята ровно по списку D39.47 (grep-остатков нет; ⟦TM-CANON⟧/CanonConflicts/узкое правило не тронуты; формула вернулась к четырём ратифицированным множителям); мутации возврата красные, включая обобщённый пин «любой второй ⟦TM-блок»; вердикт «версия пака побайтно та же» доказан независимым путём (golden PASS без пере-капчера). Отклонение (обновлённая шапка промпта роли) принято. Отчёт: `docs/archive/reports/PACK20_DELTA_2026-07-26.md` с ревью-шапкой. **Синк-находки дельты (сверены оркестратором по коду):** (1) потребителей эмиссии ТРИ — лист на подпись · авто-банк (строки ⟨проверить⟩ редактору) · вход роли; расширение одного входа роли бесполезно (`attachConsolidatedDst` матчит только по ключам mined — dst небанкуемого кандидата умирает с прогоном) ⇒ **ось G7 переформулирована: «что банкуется без подписи ≠ что кладётся на подпись»**; лист подписи остаётся человеческого размера. (2) Реальный риск расширения — не потолок, а **доля отказов роли на мусоре**: правило ⟦TM-NO-DST⟧ ни разу не проверялось (0 пустых консолидаций из 875 — роль всегда отвечала строкой); мусор с выдуманным dst = строка ⟨проверить⟩ в памяти редактора. (3) kwic-дефолты 3×40 не покрыты замером (мерено 0 и 8×120); цена роли = подача × контекст (при 8×120 «весь банк» дорожает с ≈$1.10 до $4–7) — развилка «широкая подача × узкий контекст vs узкая × широкий» не измерена. **Плюс методологический вопрос к recall-программе пакета-7:** мерился майнер против сида, а живьём ~97% находок даёт банкнота; **совместный recall (майнер ∪ банкнота) против сида не считал никто** — а именно он определяет, стоит ли расширение денег; считается за $0 из черновиков corpus.jsonl пакета-6. **План пре-замеров ПЕРЕД дизайном расширения (ожидает санкции владельца):** (а) совместный recall майнер∪банкнота — $0, офлайн; (б) проба отказов роли: 100 кандидатов из хвоста варианта C, критерий заранее — ≈$0.01 (фолбэк при провале уже ратифицирован: судья-с-декоем как катастроф-экран, D39.46); (в) kwic × подача: сетка армов на харнессе пакета-7, ≈$0.12. Итого ≈$0.14. По итогам — дизайн-секция расширения (СТОП → ратификация → стройка). ## D39.49 — Владелец (26.07): три пре-замера D39.48 САНКЦИОНИРОВАНЫ (~$0.14, потолок $0.30), исполнитель — ПОЛИГОН («сначала идти в полигон, доделать замеры, потом продолжение в паке-20 бэкенда»). Выдан ПАКЕТ-8. ✅ Промт: `docs/POLYGON_PACKAGE8_PREMEASURE_SESSION_PROMPT.md` — (1) совместный recall майнер∪банкнота против сида ($0, из черновиков corpus.jsonl пакета-6); (2) доля отказов роли на мусоре (≈$0.01, боевой промпт HEAD, критерий до прогона); (3) сетка kwic × подача (≈$0.12, харнесс пакета-7). Нормы D39.46/47 вшиты. По итогам — дизайн-секция расширения эмиссии в продолжении пака-20 (СТОП → ратификация → стройка). Рекомендация оркестратора по параллельности: пак-19 (бэкенд-зона) может идти одновременно с пакетом-8 (полигон-зона); продолжение пака-20 — после обоих, перед мини-прогоном D39.40. ## D39.50 — Пакет-8 ПРИНЯТ (8/8 CONFIRMED, $0.11313): посылка «расширить эмиссию майнера» ЗАКРЫТА ОТРИЦАТЕЛЬНО — механизмом, не порогом; дизайн продолжения пака-20 переформулирован: ДИСЦИПЛИНА БАНКНОТЫ + ДЫРА ЯЗЫКА ОТВЕТА + allow_short + kwic_width в пар-данные; холодный старт — единственная неизмеренная цифра (26.07, оркестратор №8). ✅ **Ратифицировано фактами:** (1) **расширение `emitRankCap`/фильтра типа НЕ строится**: 66 из 74 поверхностей банкноты лежат вне варианта C по ЧАСТОТЕ (82% ниже emitMinFreq на срезе — вне кандидатного алфавита), а на хвосте расширенной эмиссии роль ВЫДУМЫВАЕТ dst 77–82% стабильно (сентинел ⟦TM-NO-DST⟧ различает «переводимо», не «терм», и нестабилен даже там — размах 0.375); (2) **носитель покрытия — банкнота** (5/6 кандидатов, класс term с dst), но она невоспроизводима (Жаккар 0.077–0.40 между прогонами одних глав) и эмитирует 《咏梅》/咏梅 как разные строки — лечения, выдержавшие проверку: нормализация книжных кавычек + агрегация по прогонам; **частотного экрана НЕ существует** (§5.1: 少年 1149 против 光阴之河 15 — порога нет; полигон сам снял свою рекомендацию); (3) **дыра языка ответа**: ⟦TM-CANON⟧ — де-факто якорь ЦЕЛЕВОГО ЯЗЫКА; без него 22/40 английских строк в одном прогоне из трёх (8×120 тоже течёт), и конвейер их банкует (`wellFormedLemma` пропускает латиницу) — закрыть ДО любого расширения канала; (4) **kwic-дефолт 3×40 ДОСТАТОЧЕН** (ни одна точка сетки не отличима, 0×0 — лучшая; развилка «подача×контекст» неразличима), НО `kwic_width` в РУНАХ = утечка пары в общий слой (43–84 морфемы zh против обрубка фразы en) → пар-данные; (5) **蛊/转 подписаны и не доезжают ни одним каналом** (`SignificantLen=1`) — правка ДАННЫХ сида (`allow_short: true`); (6) **условие судьи-экрана (фолбэк D39.46) наступило**, но экран платный за кандидата — дизайн обязан посчитать, где ставить и что снимается бесплатно; (7) **холодный старт с пустым банком — не мерил никто**, и именно там цена любого утверждения о покрытии (кандидат — совместить с мини-прогоном D39.40); (8) §6: **en-детектора НЕ СУЩЕСТВУЕТ** (`hanRuns` — 0 эмиссии на латинице), ja с zh-таблицами активно неверен (0/10) — второй книге нужен второй ДЕТЕКТОР, эксперименты на Кристоффе преждевременны; прототип каналов — `mine_nonhan.py` пакета-7. **Напряжение с D39.46 «контексты — главный рычаг» названо, НЕ отменено:** три различия постановки (лёгкая выборка · якорь в боевой сборке · нет строки drafts:); пере-замер на трудной выборке пакета-7 с боевой сборкой — кандидат, до него kwic не трогать. **Дефект нарезки пакета-7** (фильтр по номеру 节 при перезапуске нумерации в томах): абсолютные recall фазы A занижены втрое (0.089→0.255 на непрерывном срезе), структурный вывод (term кратно слабейший) УСТОЯЛ. Приёмка: 8/8 CONFIRMED, ревью-шапка с нитами на отчёте `POLYGON_PREMEASURE_2026-07-26.md`; деньги $0.11313 из потолка $0.30. ## D39.51 — Дизайн «дисциплина банкноты + дыра языка ответа» РАТИФИЦИРОВАН, стройка санкционирована (владелец: «идём», 26.07): языковой экран на ВЫХОДЕ + счётчик OffLanguage + фильтр свёртки банкноты + нормализация кавычек в свёртке (Q1) + агрегация из чекпойнтов (A1) + kwic_width в пар-данные (файл zh-ru НЕ шипуем) + doc-хвост. Судья ОТЛОЖЕН; мини-прогон D39.40 — В ХОЛОДНОЙ конфигурации; allow_short — на нём (26.07, оркестратор №8). ✅ **Отчёт:** `docs/archive/reports/PACK20_BANKNOTE_DESIGN_2026-07-26.md` (ревью-шапка). Принципиальные решения: (1) **гарантия языка — на выходе, не на входе** (предикат offLanguage по `*unicode.RangeTable` через конфиг гейта `target_script`, обязателен при enabled, вне снапшота, $0; направление отказа объявлено: отвергнутый законный латинизм дешевле англо-канона); (2) **кавычки — в свёртке (Q1), не в парсере/NormalizeSourceKey** (Q2/Q3 платят волной за косметику; Q1 $0 и ретроактивен; NormVersion не двигается — тест-страж); (3) **агрегация банкноты — производное из чекпойнтов (A1), без новых таблиц**; инвариант «прогон без новых черновиков даёт байт-идентичную карту» — пином; предложения отвергнутых попыток входят (решение: предложение = улика, не канон); (4) **судья-с-декоем НЕ строится** (≈$0.025/книга — цена не аргумент; его положительное решение = решение о переводе за владельца, против D39.47; популяция неизвестна до холодного старта; сначала P1); (5) **три расхождения сессии с записками оркестратора приняты** (allow_short = базовая версия = перепокупка книги → на холодный прогон; kwic-файл zh-ru не шипуем; судья отложен). **Замеры полигону:** пример формата в промпте (≈$0.009, критерий до прогона: 0 не-целевых строк ×3 против 22/40) · P1 consistency ($0: Σchunks-предложивших / chunks-содержащих; порог засчитывается при ≥80% термов и ≥60% мусора; арм-без-фактора = голая частота обязана провалиться; положительный исход = право на ПОРЯДОК, не на выброс строк) · приёмка предиката на живом сырье 147 вызовов (живо, подтверждено: ровно 27 строк §3.4 и ни одной сверх). **Мини-прогон D39.40 = холодная конфигурация** (пустой сид, банкнота+терминолог ON, --verify-bank, ОТДЕЛЬНАЯ БД) — пять ответов за ≤$0.23: банкнота без цензуры · совместный recall (замер 1 состоится) · язык при пустом якоре (счётчик OffLanguage как прибор) · побочки allow_short · второй сэмпл для агрегации. Приёмка стройки: мутации M-Я1/M-Я2 + регресс 16 живых строк + пин общности (латинская цель переворачивает вердикты) + пин инварианта агрегации + сырьё-приёмка. ## D39.52 — Замеры D39.51 закрыты ($0.00960; пакет-8 итого $0.12273): (а) строка примера формата ЧИНИТ срыв языка (22/120 → 0/120) — ИДЁТ В ПРОМПТ РОЛИ данными вместе со стройкой пп.1–7; (б) P1 consistency НЕ разделяет (вырожденность 0.740, критерий провален, частота — ноль) — права на порядок подачи нет, пере-замер на холодном прогоне $0 (26.07, оркестратор №8). ✅ Приёмка воспроизведением из сырья: (а) 0/120 не-целевых строк в арме с примером — независимый пересчёт; фактор один (дифф запросов — только три строки примера; пример-терм 师父 не входит ни в выборку, ни в якорь, ни в сид); мощность 0.104 названа до прогона, удвоение повторов не берём (страховка = экран + OffLanguage живьём). (б) ре-ран скорера: 54/73 вырождено, критерий ≥80/≥60 не выполнен нигде, частотный арм — независимое подтверждение §5.1 на другом наборе и другой разметке (три слепых модельных разметчика, согласие 0.973–0.986; оговорка «разметчики — модели» названа). **Хвост в пак-21: утечка алфавита** — «甲等 → категория A» (7 строк): языковой предикат пропускает (кириллица есть), подписанные dst латиницы не содержат вовсе; кандидаты — банк-линт латиницы в dst или строгая форма предиката (§2.2-Б дизайна). **Вопросы холодного мини-прогона пополнены:** + пере-замер P1 на популяции без цензуры ($0 из чекпойнтов). Стройка бэкенда: пп.1–7 §8 + п.8 «строка примера в промпте роли» — санкционирована, ждёт релея. ## D39.53 — Стройка «дисциплина банкноты + языковой экран» ПРИНЯТА И ЗАЛЕНДЕНА (пп.1–8 D39.51/52, $0, +454/−100): экран на выходе роли и черновой стороне · кавычки в свёртке · агрегация из чекпойнтов с голосами по ЧАНКАМ · kwic_width в пар-данные (zh-ru файл не шипуется) · строка примера побайтно та, что мерил полигон (26.07, оркестратор №8). ✅ **Приёмка:** M-Я1/M-Я2 красные + моя мутация (дедуп голосов) красная · предикат по живому сырью: 27 латинских строк §3.4 побайтно + **два улова сверх слепоты старой метрики** (китайские пересказы 第四代族长, 长老 — эхо-гейт и wellFormedLemma их пропускали) · регресс 16 живых строк чист, смешанная `Фан Юань (Fang Yuan)` проходит (экран судит язык, не написание) · пины общности/NormVersion/инварианта агрегации зелёные · vet/gofmt/golden чисты. Отчёт: `docs/archive/reports/PACK20_BANKNOTE_BUILD_2026-07-26.md` (ревью-шапка). Осей нет: снапшоты не двигаются; редакторская волна перекупается один раз только у книги, где банк реально изменится (иноязычная строка/кавычечные дубли). **Находка стройки, решение задефолчено:** `hasBankSrcHan` — канал банкноты МЁРТВ для не-CJK исходника (каждая строка отвергается с parse_fail; утечка языковой семьи в общий слой, существующая, не этой стройки). Дефолт: чинить пар-слепым правилом «исходная строка непуста и встречается в тексте книги» (заодно отсекает выдуманные строки) **на холодном мини-прогоне** — версия парсера фолдится в снапшот, а холодная база платит ноль. **Холодный мини-прогон теперь несёт:** свои пять вопросов (D39.51) + пере-замер P1 + веса §C2-3 + allow_short 蛊/转 + фикс парсера банкноты + счёт «утечки алфавита» (категория A) живьём. Очередь: пак-19 → холодный мини-прогон → пак-21. ## D39.54 — МАЛАЯ ПАЧКА 14а+14б ПРИНЯТА И ЗАЛЕНДЕНА ($0, +559/−94): ingest грязных епабов на токенайзере x/net/html (4 класса жёстких падений теперь импортируются; ТРИ регрессии — CDATA, self-closed raw-text, несбалансированный ruby — пойманы адверсариальным ревью сессии ДО лендинга и запинены байт-эталоном старого ридера, мутационная таблица сессии 17/17) · комментарии промпт-файлов вырезаются С ПРОВОДА до сплита, SHA по канонической форме (9/10 файлов байт-неподвижны, снапшоты книг не двигаются, терминолог перекупает батчи один раз — центы) · chunkerVersion НЕ поднят РАТИФИЦИРОВАННО (30.07, оркестратор №9). ✅ **Приёмка исполнением на неподвижных копиях:** независимый дампер оркестратора old-vs-new по трём епабам стенда — 205 документов, дифф глав и ruby ПУСТ (3.29 МБ на сторону); сьют `-race -count=1` 14/14 зелёный, vet/gofmt чисты; 4/4 спот-мутации вне порядка сессии (SHA-по-сырому · нейтрализация вырезания · raw-text везде · flushRuby в no-op) красные, восстановление зелёное. Единственная ось сверх паритета — ЛУЧШЕ старого и вне провода: чтение ruby при пропущенном `` теперь захватывается (старый терял; ruby питает только сид глоссария, не `ch.Text`). **Поправки посылок записки (замер сессии, перемерено оркестратором):** Empire of the Dawn = 126 itemref, не 958; ingest переисполняется КАЖДЫЙ прогон (`bookrun.go:112`, `status.go:190`) — «существующие БД не тронуты» держится на другом факте: все 8 книг стенда txt, `extractXHTML` достижим только из `ingestEPUB`. **chunkerVersion — осознанная девиация от буквы дока (`render.go:29`):** остаточная экспозиция (епаб-БД с legacy-сущностью без `;` либо `⟨`/`⟩` — единственные 2/252 расходящиеся имени, кросс-чек независимым стеком WHATWG↔`xml.HTMLEntity`) есть ПУСТОЕ МНОЖЕСТВО и возникнуть не может — новые епаб-книги создаются уже новым кодом, а подъём двигал бы снапшот всех книг (`snapshot.go:414`) = полная переоплата за изменение, не касающееся их байтов; строгая буква — одна строка за подписью владельца. `mimetype zip.Store` — верность фикстуры OCF, НЕ фикс поведения (ingest файл не читает). Хвосты: фикс-лист (1) — комментарий поля `SHA256` в `render.go:89` остался «hash of the raw file», одна строка на ближайшее касание; новая строка бэклога 34а — экран `` без XML-объявления (до-паковая дыра, §8 отчёта). Отчёт с ревью-шапкой: `archive/reports/SMALLPACK_INGEST_PROMPTS_2026-07-30.md`. ## D39.55 — ДИЗАЙН ПАКА-19 «голос/состояние» РАТИФИЦИРОВАН С ПОПРАВКАМИ (фаза 1, $0, стройка после «идём» владельца): три сущности = ТИПЫ ЗАПИСЕЙ БАНКА с УСЛОВНЫМ фолдом в `memory_version` (наследование точечной ре-редактуры подтверждено исполнением) · голос/обращения CONFIRMED-only, порядок инъекции «обязывающее перед необязывающим» · флаггер = свой гейт `gates.voice` БЕЗ фолда (версия логируется с прогоном) · оси A–C полноценно, ось D (регистр пары) отдельным счётчиком-индикатором · reveal-скоуп СОКРАЩЁН до флаггера спойлер-утечки без `reveal_ch` (амендмент ФОРМЫ D21 п.3, интент сохранён `spoilerBlocked`) · D21 п.1г амендирован: слот инъекции НЕ выбран, оба провода, решит полигон-эксперимент · D21 п.8 помечен model-bound (действующий порядок: драфт ~$0.04, редактор ~$0.07–0.10) (30.07, оркестратор №9). ✅ Приёмка: воркфлоу 7 верификаторов, 82 клейма = 71 CONFIRMED / 9 PARTIAL / 2 REFUTED (оба — полнота отчёта; поправки фактов — в ревью-шапке отчёта). Диспозиции пингов: (1) сокращение reveal ратифицировано; (2) `glossary.speech` → deprecated (журнал-строки вместо статической матрицы), `first_person` → переиспользуется полем профиля; (3) цифра D21 п.8 контрактно привязана к модели; (4) «драфт-слот дефолт» снят; (5) структурная неполнота оси D зафиксирована ДО фазы 2. **Новые «РОВНО ТАК» фазы 2 (из проб верификации):** (а) бюджет инъекции входит в денежный потолок/reserve — дозакрыть в отчёте стройки; (б) критик полноты в отчёте фазы 2 обязателен; (в) `Materialize` получает фильтр типа записи — строки голоса/обращений НЕ попадают в AC-матчер/глоссарную инъекцию как обычные строки (`memory.go:264-270` матчит всё с непустым Dst); (г) условный voice-тег копирует порядок «исключение скоупом ДО подсчёта условия» (`memory.go:352-357`); (д) `voiceSnap`/отдельный ключ снапшота — ЗАПРЕЩЁН (ломает `repin.go:72`); (е) `address_pair` хранится по стабильному ключу (src+sense), не по autoincrement `glossary.id`; (ж) sticky-carry, отклонённый окном, добавляется в `Selection.Rejected` (`memory.go:495-497` — сейчас молчаливый дроп); (з) ВКЛЮЧЕНИЕ инъекции = полный `--resnapshot` книги через consent-гейт, bank-only-класс на самом флипе не ожидается (omitempty защищает только добавление поля, не флип 0→300); (и) v1 переиспользует `GlossaryTokenBudget` в сигнатуре отбора — отдельный voice-бюджет потребовал бы зеркала в `repin.go:186`. Опционально фазе 2: линт «gap в окнах одного src» (сид грузится молча с дырой). Отчёт: `archive/reports/PACK19_DESIGN_2026-07-30.md` (ревью-шапка). ## D39.56 — СТРОЙКА ПАКА-19 ПРИНЯТА И ЗАЛЕНДЕНА ($0, +672/−71, 16+7 файлов; ПАК-19 ЗАКРЫТ ЦЕЛИКОМ): голос/обращения = таблицы v13/v14 с УСЛОВНЫМ фолдом в `memory_version` (при выключенной инъекции не пишется НИ БАЙТА — golden байт-идентичен, ни одна книга не двигается) · ты/вы-флаггер осей A–C + D-индикатор в `gates.voice` (версия не фолдится, едет с прогоном) · флаггер спойлер-утечки поверх `Selection.Rejected` (вне гейта — стоячий механизм C1) · девять «ровно так» D39.55 исполнены, запреты (д)/(и) держатся (`repin.go`/`snapshot.go` не тронуты ни строкой) · ратифицированное отклонение: атрибуция ЦЕЛЕВАЯ, не исходная (выравнивания src↔tgt в движке нет; целевой хвост атрибуции матчится банком через `speech_verb`+`decl`) · `speech-cue.txt` zh НЕ шипнут (байты двигают `LangpackVersion` = перекупка обеих волн всех zh-книг — решение владельца, бэклог 13б) (31.07, оркестратор №9). ✅ Приёмка короткая (норма 30.07): сьют `-race` перегнан оркестратором — зелёный; vet/gofmt чисто; диффы repin/snapshot/testdata пусты; записка D21.10 сверена (переписана в «BUILT», стабильный ключ и заморозка в ней). ## D39.57 — ToS-РЕ-ЧЕК ПО ПЕРВОМУ КАЛЕНДАРНОМУ ТРИГГЕРУ ИСПОЛНЕН ($0, полигон, 31.07): головной Google ToS реально сменил ревизию (Effective July 30, 2026), но по оси `violence`/`sexually-explicit` дельта ПУСТА — все пять пере-проверенных вендоров (gemini/mistral/xai/deepseek/zai) на прежних ревизиях, вердикты не двигаются, `accepts_labels` не трогаются · ПРЕДМЕТ Google-мониторИНГА ПЕРЕВЕШЕН на цепочку договора (PUP · Gemini API Additional ToS · Google APIs ToS — потребительский ToS цепляется лишь косвенно и по нашей оси пуст) · в запись добавлен пропущенный головной Google APIs ToS (по оси пуст) · рассинхрон quirks-клетки `gemini`×`sexually-explicit` с D39.32 п.2 закрыт (FORBIDDEN → UNCLEAR, прозрачной правкой) · правило «двух путей» пакета-5 амендировано (r.jina.ai мёртв — 403; замена: Wayback ×2 снимка + прямой curl с cookie-jar; проверка цитат — по копии без пробелов, старая форма давала ложные нули) (31.07, оркестратор №9). ✅ Существенное для судьи Ф2: Additional ToS прямо запрещает обход фильтра (`You may not attempt to bypass these protective measures`) — смыкается с D22.6 (фильтр неконфигурируем) ⇒ подпись под строкой 6 дала бы ПРАВО отправки, но НЕ работающего судью эротики; судья 18+ остаётся grok, строка 6 аннотирована и понижена в приоритете (возвращаться при собственном вопросе, требующем именно права). Следующие триггеры: квартал 25.10.2026 · первая лейблованная книга · любая правка `accepts_labels`. Отчёт: `archive/reports/TOS_RECHECK_2026-07-31.md` (ревью-шапка). ## D39.58 — ХОЛОДНЫЙ МИНИ-ПРОГОН ПРИНЯТ И ЗАЛЕНДЕН ($0.126068 из $0.50; закрыт владельцем после банк-стопа, Р7 «замер достаточен»): ГЛАВНОЕ — совместный recall холодного банка майнер∪банкнота = **0.918/0.980** против 0.069–0.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.59 — КУРС АМЕНДИРОВАН ВЛАДЕЛЬЦЕМ (31.07): (1) ОБЩНОСТЬ ВПЕРЁД — бэкенду выдан ресёрч «инвентаризация языковой привязки» (read-only, $0; полный скан → пять вёдер → пересборка входа пака-21 → план rewrite-пакетов с критерием «вторая пара без правки Go»); ПАК-21 «чекеры» ОТЛОЖЕН до его карты, вопросы разметки Р1–Р4 заморожены вместе с ним (пере-оцениваются генерализацией); (2) БАНК — КУРС НА АВТОНОМНОСТЬ: подпись владельца ОПЦИОНАЛЬНА (авто-режим уже дефолт D39.44), премиса «решение о переводе = подпись» (D39.42/47) амендирована — банк обязан приходить с максимально качественными АВТОНОМНЫМИ переводами; веб-фетч-вопрос владельца признан НЕ ОТВЕЧЕННЫМ пакетом-7 (мерился аддитив к KWIC-контекстам ПРОТИВ ПОДПИСИ — узкий вопрос; автономное качество с интернет-знанием термина не мерилось) — пере-замер в арке автономности после Р6; механизмы арки: 36а валидация типа · 36в серии · 36б рецензент второй моделью; (3) полигону выдан спаренный пакет: Р6 «язык промптов» + fidelity-хвост P4 анти-эхо — открытая петля D21 п.6, стоявшая с 09.07 (митигации 0/29 против базы 30–67% измерены, wiring в боевой драфт-промпт ждёт fidelity-вердикта) (31.07, оркестратор №9). ✅ Промты выданы: `BACKEND_GENERALITY_RESEARCH_SESSION_PROMPT.md` · `POLYGON_PROMPTLANG_ANTIECHO_SESSION_PROMPT.md` (потолок $0.15). Эхо-причина (сводка по первоисточникам для владельца): свойство КЛАССА reasoning-моделей на плотном CJK-входе, не конкретного вендора (grok-off 40% + луп / grok-ON 0/10 — exp10; deepseek non-thinking эхает, thinking СНИЖАЕТ но не исключает: P4-эха при reasoning_tokens>0, живой прогон 2/20 — D39.58); регистр усиливает (архаика: даже ON эхает 4/6 — exp11); промпт-положение решает (инструкция ПОСЛЕ текста + микро-few-shot = 0/29), а языковой констрейнт ИНВЕРТИРУЕТ (9/10); язык промпта (ru/en) как фактор эха НЕ исследован и на малых выборках недоказуем. Прочее прогона: язык при пустом якоре — `off_language` 0/149 (экран-прибор работает) · утечка алфавита 0/150, но `甲等 → класс Цзя` при `乙等 → ранг И` вскрыла два механизма: НЕПРОВЕРЕННОЕ поле `type` решает ветку транскрипции (`元石`=name ⇒ «юаньши» — механизм «слишком китаизированно») и роль не видит СЕРИЙ (батчи режут) · `蛊` не приходит НИ ОДНИМ каналом (строка 18 переформулирована: структурная дыра эмиссии на голове частотного понятия; механизм доставки подписанной короткой строки проверен $0-пином) · эхо-метрика закрыта живым фактом (2 recovered) · стоп-режим ×4; авто-режим, edit-волна, полная цена (16), P1/веса (21/22 — сырьё снято, метод полигонский), оси голоса (профили не подписаны; черновик в `coldrun-a/SIGN-PACKAGE.md` §3; 13б открыта) — со следующим живым прогоном/полигон-пакетом. **Принятые нормы (в промт-нормы оркестратора):** итерации промптов — на проекте-пробе 1–2 главы (≈$0.005), полный срез после; правка-«терпимость» движка к собственным данным = воркэраунд (правило владельца 31.07); канон конкретной книги в пар-промпте = утечка §0 (поймано владельцем). Новые строки бэклога: 36а валидация `type` (Р3, приоритет) · 36б второе мнение-рецензент (Р4; условие строки 5 наступило) · 36в серии · 36г формат каналов в шаблон движка (Р5) · квадратичность src-правила → строка 37. Эксперимент «язык промптов» (Р6, гипотеза владельца, ≈$0.02–0.05, детерминированные счётчики) — к выдаче полигону по слову владельца. Отчёты: `archive/reports/COLDRUN_REPORT_2026-07-31.md` (пре-регистрация §0 до трат · критик полноты §9 · ревью-шапка) + `COLDRUN_HANDOFF_2026-07-31.md`. Мутации сессии 23/23 красные (две выжившие первого круга = дыры тестов, закрыты с премис-проверками). Критик полноты честен: оси до холодного прогона дают 0 срабатываний («не измерено», не «чисто») · ось A может ловить цитату · ось B precision-over-recall · качество осей = функция полноты `decl` сида · SourceReplies без выравнивания не сопоставим с Replies. Хвосты: бэклог 13б (`speech-cue.txt` — владельцу) · 49а (ALTER-миграции v8–v14 не идемпотентны вопреки шапке `migrate.go:9-11`) · golden-счётчики голоса — кандидат следующего ратифицированного пере-капчера. Первое измерение = `gates.voice` ON на холодном мини-прогоне (бэклог 24). Отчёт: `archive/reports/PACK19_BUILD_2026-07-30.md` (ревью-шапка). ## D39.60 — РЕСЁРЧ ОБЩНОСТИ ФАЗА 1 ПРИНЯТ ($0, read-only, кода не тронуто; спот-чеки оркестратора 8/8, вкл. побайтный повтор хеша пака `a28ed743c99c` и счёт 27 строк/12 файлов живых CJK-литералов): долг = **149 сайтов в 45 файлах** (111 не забуканы; вёдра A=27 вынести-в-данные · B=6 пар-модуль-без-гейта · C=104 общий-алгоритм+параметр-из-данных · D=12 удалить · E=106 легитимно) · **ось долга: источник/пара 63% · ЦЕЛЬ (ru) 30% · книга 3%** — по оси «НИКОГДА» владельца движок чист (4 сайта поимённо) · ja→ru проходит БЕЗОПАСНО без правки Go (деградируют майнер и калибровка), en→ru — НЕБЕЗОПАСНО (молча спят эхо-детектор `cjkShare`=0 и майнер `hanRuns`=0; устойчиво разделяют пары G2/G3) · строка 32 бэклога долг ЗАВЫШАЛА (боевых call-site: `isRuTarget` 6, `TokenizeCyrillic` 2 — остальное греп по комментариям/определениям). РАТИФИЦИРУЮ КАК КАРТУ И РАБОЧУЮ ИСТИНУ: пять вёдер с якорями · заморозки З1–З9 (синк с ратификациями подтверждён) · актуальные якоря пака-21 (ВСЕ ссылки D39.39 устарели после пака-19 — брать из §8 отчёта) · правило условного фолда §6.2 (фолдить ⟺ выход входит в оплаченный запрос/вердикт/final_hash; новый фолд обязан быть условным по присутствию) · находка «майненая сторона не пишет `Decl` ⇒ 149 авто-строк холодного банка не пройдут пост-чек» — уезжает в арку автономности банка (D39.59), не в пак-21 · живой баг ko/Hangul (`isCJKLang` числит ko, три вердикт-детектора Hangul не содержат — корейское эхо невидимо; строка 75, носитель П2) · дыра эмбед-плоскости (`internal/lang/data/*.txt` не хешируются ничем при `injection.txt` на проводе и `target-ru.txt` в вердиктах санитайзера ⇒ канал тихой пере-оплаты вне контура Р6, `rebill.go:137-139`; строка 76, П0 первым). СТОП: пять вопросов §12 — у владельца, рекомендации оркестратора: (1) П1 цель-шов ВКЛЮЧИТЬ в арку — D39.24 морозил «не ЭТИМ паком», сам код называет цель-шов назначенным носителем (`repair.go:182-189`), слой 7 целевой архитектуры держит «target-aware гейты — ОТКРЫТО» с 26.07; (2) фигуру «ОДИН общий resnapshot» ратифицировать (сегодня центы — корпус два мини-прогона по $0.13–0.23, после МАСШТАБА порядки; ре-пинуема 1 ось из 20), НО исполнение — ПОСЛЕ развилки DeepSeek-0731 (D39.61, строка 74: перепокупка сегодня купит пустые ответы; при выборе флора-16000 его сдвиг `request_hash` едет В ТОМ ЖЕ resnapshot); (3) П6-расщепление хеша пака — НЕ сейчас (посылка «наблюдаемость — не вердикт» противоречит записанной позиции `snapshot.go:397-402`; сессия сама отказалась подавать как решение); (4) Р1–Р4 сократить до ДВУХ: Р2-расширенный («детекторы единиц/шкал судят ЗНАЧЕНИЕ рендера или ФОРМУ?» — один ответ на семейство) + Р4-норма (потолок recall by construction пишется в контракт правила); Р3 закрыт D39.44 Q4 (остаток-работа сливается с Decl-швом в арке банка), Р1 расщеплён (данные→пар-пак · политика→Р2 · книжный остаток снят); (5) пак-21 РАСТВОРИТЬ: ~6 дешёвых пунктов (#11 U+0301 · #2 атрибуция-спан · #4 inner_marker · гомоглиф-детектор · строгий OffLanguage с оговоркой 36а · строка 26) батчем в общий resnapshot, 6 дефектов — в П1/П2/П3, #9 — в арку банка, #12/K4a — сняты как не-дефекты кода. Фаза 2 НЕ начинается до ответов (31.07, оркестратор №9). ✅ ## D39.61 — ПОЛИГОН Р6+P4 ПРИНЯТ И ЗАЛЕНДЕН (итог $0.433062 = $0.147527 в потолке промта $0.15 + $0.285535 судейского хвоста по прямой санкции владельца; два пути счёта сходятся до 2.9e-06, независимый ре-ран spend.py оркестратором совпал; ⚠ леджер движка = НИЖНЯЯ граница — 4 вызова «2xx body decode failed (call IS billed)» не заледжерены, ≤$0.009, строка 78): отчёт трёхслойный — §1–§9 хроника · §10–§11 errata/саморевью по вопросам владельца · **§12 = единственная действующая редакция** (15-агентное адверсариальное ревью + исполнение пропущенного деливерабла); три ложных вывода сессия поймала и отозвала САМА (эхо-атрибуция few-shot · «пропуск» постинструкции · псевдо-репликация «митигации вернее», кластерный p=1.0) — механизм «вывод на агрегате до вскрытия единиц» забран в промт-нормы. **ГЛАВНОЕ — вендор-катовер: DeepSeek 31.07 сменил веса под слагом** (`DeepSeek-V4-Flash-0731`, «only re-post-trained»; `/models` молчит; **v4-pro НЕ тронут**) ⇒ **боевая черновая форма ПОКУПАЕТ ПУСТОЕ** (cap 8000 → `finish=length`, reasoning 8000, `content`=""; несущая улика — пробы ОДНОГО чанка: cap 8000 пусто / cap 16000 перевод); механизм — многословная обдумка с тяжёлым хвостом (разброс reasoning ×163 на побайтно одном входе; упор и в 16000 в 2/5), привязана к ПЛОТНОМУ ХАНЬСКОМУ входу (×7.8 против en при сопоставимом входе; ja не проверялся), вендор для high/max рекомендует потолок 384K — наш флор на два порядка ниже ⇒ сместился ДЕФОЛТНЫЙ эффорт, а не «модель сломалась» ⇒ **развилка владельца (строка 74): (а) флор 16000 + resnapshot · (б) слать `reasoning_effort` явно (= приведение к вендорской модели; амендмент `echoMineViolation`; `low` дешевле прежних весов ~22%, но эхо возвращается ~6% и литературное качество черновика при low НЕ судилось) · (в) ждать бету; до развилки платные прогоны и resnapshot СТОП.** **Эхо на 0731 стохастично ПО ВЫЗОВУ** (побайтно идентичные запросы → эхо/не-эхо) ⇒ посылка «retry just re-produces them» (`disposition.go:138-148`) опровергнута — ре-ген N=1 перед эскалацией ≈7.6× дешевле ремонта ($0.00096 против $0.007335 за эхо; строка 77). **Р6 закрыт отрицательно:** ru против en-перевода промпта строка-в-строку — различий НЕТ ни по одной детерминированной оси (эхо 0/0 · срыв языка 0/0 · коридор 12/12 · преамбулы 0/0); даже «en дороже +9.4%» снято ревью (кэш-эффект; без кэша +6.0%, знаковый p=0.39) — **боевые промпты остаются русскими**; язык промпта как фактор эха не подтверждён и не закрыт окончательно (N=12, роль одна). **Петля D21 п.6: гейт верности ПРОЙДЕН в ослабленной форме — «ЦЕНЫ ВЕРНОСТИ У МИТИГАЦИЙ НЕ ОБНАРУЖЕНО»** (риг на 16 из 24 готовых пар research15-probes, генерация оплачена 09.07; floor 4/4 tie у ОБОИХ судей; маршрутизация автор≠ревьюер: grok-пары судит dspro, deepseek-пары — grok-4.3; «митигации ВЕРНЕЕ» НЕ установлено — 16 пар из 6 базовых текстов, 5/6 кластеров смешанные, конфаунд длины). **Wiring-вердикт (пере-выведен §12.3):** few-shot — оснований ни на «вносить», ни на «вредно» (против — один полностью АНГЛИЙСКИЙ выход из 48; «×1.9/+28.5%» ОТОЗВАНО как артефакт средних на бимодальном распределении) · постинструкция — возражений по существу нет, но на 0731 покупать ей нечего (эхо в боевой форме НЕ измерено — канал мёртв), байты двигают PromptSHA256 ⇒ не вносить до предмета · **префилл «Перевод:\n» — сильнейший кандидат** (0/6 эха в P4, верность 3:0, контрдовод «обходит thinking» на 0731 перевернулся в довод ЗА; не проверен на новых весах, проба ≈$0.005) · языковые констрейнты — НИКОГДА без per-model замера (инверсия 9/10 подтверждена репликой побайтно). Эмпирика P4 09.07 = superseded (весов Preview больше нет); квирки синхронизированы сессией с §12 (один хвост докорректирован при лендинге); остаток с ценами — §12.7 (8 несудимых пар ≈$0.10 · префилл $0.005 · effort-high $0.01 · ja-вход $0.005 · echo-rate боевой формы невозможен до развилки). Лендинг: отчёт с ревью-шапкой · quirks · харнесс `eval/promptlang/` (01.08, оркестратор №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.3–0.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.65 — ПОЛИГОН «$0-СЫРЬЁ АРКИ БАНКА» + ПЛАТНЫЕ ПРОБЫ ФИКСОВ ПРИНЯТЫ (по слову владельца без пере-прогона оркестратора — «всё уже прогнано»; внутренняя верификация отчётов: пре-регистрация до вскрытия · каждый агрегат двумя независимыми путями CONFIRM до цифры · два слепых грейдера · критик полноты с 11 вправленными пере-натяжками): отчёты `POLYGON_BANK_RAWMATERIAL_2026-08-01.md` (часть 1, $0; якорь целостности `spend ≡ Σ checkpoints = $0.126068` сошёлся с D39.58) и `POLYGON_BANK_PROBES_2026-08-01.md` (**$0.027831 / 31 вызовов, два пути до 1e-6; ⚠ куплены СВЕРХ буквы промта** — часть 2 §12.7 корректно пропущена без слова, но этот проб-пакет самоназначен с потолком $0.10; статус слова владельца зафиксирован при релее). **РАТИФИЦИРОВАННЫЕ ФАКТЫ (вход дизайн-пака арки автономности банка, строка 73):** (1) **строка 21 ЗАКРЫТА** — консистентность P1 терминолога: нестабильность **43.3%** (n≥2=127; 12 из 55 = ОДИН сдвиг конвенции 古月 «Гуюэ»→«Гу Юэ»); проходы ВЛОЖЕНЫ (75⊆127⊆150, 0 отсева) ⇒ чистая ре-выборка при фиксированном входе этим сырьём НЕ изолируема; смена батча — умеренная ассоциация (OR 2.56, p=0.041), НЕ драйвер; ЧИЩЕ и без мульти-проходности: ФИНАЛЬНЫЙ банк серийно несогласован — 甲等→«класс» (батч 5) vs 乙丙丁等→«ранг» (батч 0), причинно на границе батча ⇒ механизм 36в; (2) **строка 22 ЗАКРЫТА** — §C2-3 ведёт себя ТОЧНО как ратифицирована (term-топ==частота 43/43, 0 нулевых score), НО НИЗКИЙ РЫЧАГ НА ХОЛОДНОМ (neighbour структурно мёртв на пустом каноне, conform N/A для term-тяжёлого банка; сработал 2/23 и только на ничьих): фактический консолидатор = ТЕРМИНОЛОГ ПО KWIC — финал ≠ §C2-3-топ в **50/75 (66.7%)**, сочинено вне drafts 10–15/75 (образец: 转-серия «оборот»→«ранг» ×7 единообразно); COLD-START-скоуп оговорён, на тёплом каноне не переносится; ⇒ **весá §C2-3 для холодного/автономного банка НЕ тюнить** — рычаг в контекстах и серия-осознанности роли; «эффективный консолидатор» ≠ «верный» (качество переопределений не судилось); (3) **36а промерен**: `type` ненадёжен **12–22%** (place ~61% — самый шумный; term 0/95 — не путается никогда; направление = нарицательное→ошибочно имя), **2 строгих branch-harm** «слишком китаизированно» (元石→юаньши, 元海→Юаньхай — реалии мис-типированы name→транслит; до 9 широких), защита сегодня = ХРУПКОЕ контекст-переопределение роли; проба фикса: **сфокусированный классификатор той же моделью чинит 6/6 harm-направления** (+~10 п.п. к базлайну «верить draft-типу» 68.4%); (4) **36в подтверждён живьём**: со-батчинг серии в ОДИН вызов даёт согласованное + ДЕТЕРМИНИРОВАННОЕ родовое слово (等: 3 варианта порознь → 1 вместе; экстраполяция 丁=«четвёртый» вне всех drafts) и серий-зависим (转 no-op); реализация без пар-литералов — кластер по общей исходной морфеме; (5) **Decl: 142/142 null** — холодный банк без единой формы склонения, E1/E2 без входа (шов в 73); (6) утечка алфавита 0/150 и «слишком китаизированно» — РАЗНЫЕ поверхности отказа: закрытие первой не закрывает вторую; (7) ⚠ **ИНФРА-МИНА: cap 8000 бьёт и СТАДИЮ ТЕРМИНОЛОГА на 0731** (reasoning 8063 на батч при finish=stop на cap 16000) — резолюция развилки 74 ОБЯЗАНА накрыть терминолога (внесено в строку 74); (8) кандидат следующего $0-захода — first-occurrence-тест KWIC-консолидатора (позитивное обоснование вместо вывода-по-исключению; в заметки 73). Харнесс `eval/bank_autonomy/` заленден; строки 21/22 закрыты; 36а/36в переведены со статуса «замерить» на «дизайн с проверенными кандидатами» (01.08, оркестратор №9). ✅ ## D39.66 — СВИП ПОЛНОТЫ «ПОТЕРЯННЫХ ТЕХ-РАБОТ» ИСПОЛНЕН (вопрос владельца «не потеряли ли мы запланированное на виражах»; $0, 10-агентный аудит-воркфлоу класса D39.34: 951 обязательство из D-лога D1–D39.65 · генеалогии пака-21 · ресёрчей 01–22 + START_PROMT · 04-unhappy/06-реестра/02-mvp · хвостов 40 архив-отчётов · обратной проверки бэклога — 77 находок, ВЛАДЕЛЕЦ БЫЛ ПРАВ): **(1) ГЛАВНАЯ ПОТЕРЯ — корзина II пака-21 ЦЕЛИКОМ (5 дефектов #3/#5/#6/#7/#10 + #1 K5c/Р2-имплементация + #8 两)**: D39.62 послал её «в П1/П2/П3», но промт фазы-2 её НЕ включил и фаза-2 её не строила — возвращена явным перечнем в строку 25 (пакет-чекеров с labels/), туда же резидуал R4 пака-11 (DC7 · omission-бэкстоп · DC2) и alignment-защита рефренов; **(2) новые строки 80–86**: резюме-слой памяти + fact-gate (R9/Q6 D25 п.8–9, «вторая половина банка» — вопросом в дизайн-пак 73) · ja-преп B6-ja (Поливанов/kana-омографы/чек-лист сида — гейт второй пары) · морфо-гейт РОДА C3 («жалоба №1», спойлер-канал глагола) · F4 бэкап/integrity SQLite · канон D39.21 «generic гу = средний род» без носителя · пилот-преп добор (Bertalign GOLD-пары D29.2в · R2-каскад D25.2 · exp08 v3 D21.8) · мелкие открытые решения владельца (echo-семантика c-lite D39.18 · magnitude-кап D38.3-4в · feed_cap D39.45); **(3) дописки носителей** в строки 10/11/12/24/33/41/49/52/53/55/58/59/65/67/71/73/74/79 (вкл.: этап В D29.1 + протокол гендер-твиста D5.1 → 49; GLM-overflow гард → 59; annex-ре-чеки D39.29 + «версия исходника» → 67; остаток §12.7 + prefill-continuation → 74; слот инъекции голоса D39.55 + until_ch 白凝冰 → 24; ranked-set/STITCH/A7-D2/tmctl-замена-с-главы → 73); **(4) ЗАКРЫТО ЯВНО (без строк):** uniformity-пасс D12 (покрыт edit-волной + петлёй ремонта D39.38; пере-открыть на МАСШТАБЕ при видимом смешении моделей) · эвфемизм-словарь D7 (класс жанрового словаря D39.47 — регистр решает банк книги + подпись; вернуться строками 7/8 перед первой erotica-книгой) · синтетическая эвал-база IWSLT/mSynthSTEL D21.9 (superseded размеченным корпусом пакета-6, D39.39) · ретирование Gates.Banknote.Enabled (гейт остаётся по дизайну — канал per-book) · «судья-над-судьёй» из 02-mvp:62 (самоотменён владельцем START_PROMT V4 п.2; вычеркнуть при док-пассе 30а) · echo-калибровка D25.7 НЕ потеряна (residual PACKAGE4); **(5) STALE-фиксы:** строка 30б закрыта (ИНТЕРИМ-шапка терминолога снята рерайтом D39.52/53) · клауза «язык промптов к выдаче» вычищена из 30в (закрыт D39.61) · источник строки 74 уточнён · вес строки 12 перевязан на пакет-чекеров · битая ссылка 02-mvp:6 починена; **(6) строка 30 (свип стартового промта + ресёрчей) ЗАКРЫТА КАК ИСПОЛНЕННАЯ этим свипом** — остаток (контрастивный сьют) переехал в строку 58. Мета-вывод свипа: дисциплина трекинга в целом высокая (из 951 позиции ~92% BUILT/TRACKED/CLOSED с доказательствами), паттерн потерь один — хвосты, жившие в ТЕЛАХ ратификаций и отчётов, а не в едином бэклоге; норма впредь: каждое «отложено/в Ф2/вернуться» в D-ноте обязано в ТОМ ЖЕ лендинге получить строку бэклога или явное закрытие (01.08, оркестратор №9). ✅ ## D39.66-пост-сверка — НАХОДКИ СВИПА ПЕРЕПРОВЕРЕНЫ АДВЕРСАРИАЛЬНО ПРОТИВ КОДА (вопрос владельца «а это точно потеряно, а не сделано/передумано?»; 4 верификатора, $0): **23 пункта — 20 CONFIRMED (file:line-доказательства ОТСУТСТВИЯ в коде и отсутствия закрытий) · 0 «передумали» · 3 RESCOPE вправлены:** (1) строка 81 СУЖЕНА — чек-лист kana-алиасов сида уже построен (`AttachRubyAliasesToManual`, seeding.go:43-50 + backend/README §ja), остаются Поливанов-валидатор («Phase 2»-заглушка migrate.go:186/194) и kana-омограф гейтинг (memory.go:1048); (2) кандидат «ranked-set» в 73 переформулирован — инъективность dst УЖЕ построена (`InjectivityCollisions` memory.go:1101-1126, warning-only на seeding.go:157), не хватает типа ranked-set + проверки ПОРЯДКА ступеней; (3) дописка 49 сведена к операторскому протоколу — механизм релиза твиста ПОСТРОЕН (until_ch-правка → `repin.go` $0-пере-пин + `rebill.go` смета-согласие, D39.42 п.5/D39.45), «селективного redrive» не существует и не нужно; довесок: `gender: neuter` в сиде сегодня = ТИХИЙ no-op без линта (строка 84 уточнена). Подтверждены кодом в т.ч.: chevron-детектор пропускает «X!»/безатрибуционные (cheapgates.go:248-275) · 数-магнитуды гасятся digit-требованием (508-519; узкий DC2-проб покрывает ровно 数十万) · заглавная латиница отбрасывается (checkers.go:527) · K5c-супрессор по всему юниту + Р2 не имплементирован (411-435; cheapgates.go:84-89 «a design, not a patch») · 两 нет в cheng_re (dc-checkers.txt:65) · пост-чек считает подстрочные вхождения 转 (memory.go:1048/144) · GLM-overflow проходит RAW и падает в ложно-retryable FlagEmpty (provider_openai.go:166-171, disposition.go:230-233) · внутрифайловый дубль pair-ключа тихо last-wins (langpack.go:824) · feed_cap-гейт режет лексикографический хвост (terminologist.go:256-264, сорт :191). Рабочая бумага с полными якорями: `docs/architecture/13-tech-debt-anchors.md` (перенесена из архива решением владельца, D39.67) (01.08, оркестратор №9). ✅ ## D39.67 — ПЕРЕИМЕНОВАНИЕ КУРСА + ХИРУРГИЯ ОЧЕРЕДИ (решения владельца 01.08): **(1) термин «автономность банка» ЗАМЕНЁН на «КАЧЕСТВО БАНКА»** (формула владельца: «какая разница, автономен ли банк — не подсовывать же плохой банк на подпись, чтобы владелец всё исправлял»; существо прежнее: банк обязан приходить ВЕРНЫМ без ручной правки, подпись опциональна — D39.59; исторические D-ноты не переписываются, живые доки переведены); **(2) отдельный шаг «свежий мини-прогон» РАСТВОРЁН в ДОБОР ИДЕАЛА** (предложение владельца, рекомендация оркестратора совпала: его оси — голос 24 · авто-режим · итерация №2 редакторов 65 · полная цена редактуры 16 — и есть первая фаза добора идеала; собственного merit у отдельного прогона не было); носители строк 16/24/13б/65 перевязаны на «первый прогон добора идеала»; **(3) бэкенд-очередь после дизайн-пака КАЧЕСТВА БАНКА: СТРОЙКА банка ∥ ПАКЕТ-ЧЕКЕРОВ (строка 25 — вес поднят до «скоро»)** — обе кучки $0-код и исполняются, пока платные прогоны стоят на развилке 74; свежий прогон пакету-чекеров НЕ нужен: labels/-корпус статичен, харнесс пересобрать по README в `~/books/gu-zhenren/labels/` (урок scratch); **(4) рабочая бумага пост-сверки ПЕРЕЕХАЛА** из `archive/reports/` в **`docs/architecture/13-tech-debt-anchors.md`** — живой СПРАВОЧНИК якорей к строкам бэклога (НЕ трекер: единственный трекер — таблица PROGRESS; вопрос владельца «архив = неактуально?» резолвлен разделением: архив-отчёты = фактура приёмок, справочник долга = architecture/) (01.08, оркестратор №9). ✅ ## D39.68 — ХЕНДОФФ КАЧЕСТВА БАНКА И ПАКЕТА-ЧЕКЕРОВ БЭКЕНД-СЕССИЯМ (решение владельца 01.08: «дизайна от оркестратора не жду — передать бэкендерам ресёрч → алгоритмы → реализацию → ревью; главное — правильные промты»): выданы ДВА промта — **`BACKEND_BANK_QUALITY_SESSION_PROMPT.md`** (двухфазный: этап 1 = ресёрч+дизайн $0 read-only с деливераблом-отчётом и СТОП на ратификацию — серия-батчинг по морфеме · тип-пере-вывод · Decl-шов+строка 27+84 · честное оспаривание 36б · рекомендация по резюме-слою 80 · дыра 蛊 18 · быстрые вердикты кандидатов вкл. first-occurrence-тест $0; этап 2 = стройка ТОЛЬКО по релею ратификации и после лендинга чекеров — общее дерево) и **`BACKEND_CHECKER_PACKAGE_SESSION_PROMPT.md`** (стройка сразу: полный перечень строки 25 + строка 79; харнесс labels пересобрать В GIT по образцу майнер-парити; Р2/Р4-контракты D39.63 обязательны — hard=значение/soft=форма, потолки в контракт правила; вердикт-двиги голдена для чекер-класса ратифицированы промтом — пере-захват один раз с маскированным диффом и вскрытыми единицами). **ОБА промта несут два новых обязательных блока (нормы владельца 01.08): (1) «Глобальный критерий» дословно — чистый архитектурный бэкенд, который легко писать и поддерживать и который качественно выполняет задачу; общность; механизм только где несёт качество/деньги; (2) «МАНДАТ РЕВИЗИИ ПОСЫЛОК» — свип D39.66 собрал долг по критерию «забыли», НЕ по критерию «надо ли»: каждый пункт перед кодом получает вердикт-тройку (посылка: источник и актуальность · нужность: что даёт на данных, иначе «закрыть» · форма: лучшая из ≥2 альтернатив по критерию), допустимый исход = «не строить», замер против посылки = СТОП и пинг.** Обе кучки $0 — исполняются, пока платные прогоны стоят на развилке 74 (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 Q1–Q7 + Q8 — строка 88. Платный порог «6/6 harm» — добрать при ре-пробе 74 (02.08, оркестратор №9). ✅ ## D39.70 — ОТВЕТЫ ВЛАДЕЛЬЦА ПО §9 БАНК-ПАКА + КАНОН ЦЕЛЕЙ (02.08): **(Q8) книжные примеры в `classifier.md` САНКЦИОНИРОВАНЫ** с восстановленной нормой: языко-/книго-специфичное ДЕЛАТЬ МОЖНО — но выносить в данные/отдельные модули, встраиваемые архитектурно чисто (пар-промпт = легитимный модуль); **(Q1–Q7) делегированы инженерному «как лучше по исследованию, соблюдая цели»** — диспозиции: 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.71 — ФИКС-ПАК БАНКА ВЫДАН (владелец 02.08 «самое время передать записку тем же бэкендерам»): промт `BACKEND_BANK_FIXPACK_SESSION_PROMPT.md` — вся бэкенд-часть ответов §9 + фикс-лист приёмки D39.69 одной короткой сессией: (а) «ь»/палладиевский класс в `decl_suffix` + тест именно на «Фан Юаню» (б) `series`/`head_final` из Go-константы в `lang-script.txt`-данные (в) правка лживого комментария Batch + решение оверсайз-серии (мина cap-8000) (г) classify_types-гигиена + config-тесты (д) мутационный тест neuter-фолда (е) вердикт по voice×стеммер (ж) дистилл-фикстура BANK-FULL (з) Q5-промпт-инструкция реалий (и) консолидация дубля токенизации. Очерёдность ЯВНО: фикс-пак ПЕРВЫМ, пакет-чекеров — после его лендинга (общие файлы membank/prompts). Раскладка остальных ответов: Q6/Q8 закрыты без работ · Q1/Q4 «не строить» · Q3 гейт Ф2.5 by construction · Q2/Q7 полигон-слоты при ре-пробе 74. Строка 87 переведена в работу (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.64–71 прогнаны механически против живых строк/дописок/закрытий. **Вердикт по решениям СЕССИЙ: целы** — их держал 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.74 — АУДИТ РЕСЁРЧЕЙ СОСЕДНИХ ХАРНЕССОВ (research/21 транспорт · research/22 домен; вопрос владельца 02.08 «есть ли утерянное из /home/ubuntu/projects/tmp?»): **утерянного НЕТ** — из 15 клонов оба ресёрча покрыли корпус, взятое ПОСТРОЕНО (research/21: 9 транспорт-пунктов паками 12/13 — quota-429/Retry-After/keepalive/джиттер/xAI-гард/GLM-finish/retryable-пин/billed-decode-кап/models-валидация + CostSource и луп-гард; вердикт «наш транспорт опережает/вровень со всеми 11, не трогаем» ратифицирован; research/22: разрыв Q6 gating+repair закрыт паком-16 по прецеденту AiNiee ProofreadTask, Problem-классы №5 → строка 25, планы → строка 71), отклонённое отклонено ЗАПИСЬЮ, кандидаты Q7-квирков ждут вендор-сверки по правилу 10.07 (не абсорбированы — так и задумано). Два хвоста, уроненные МОИМ триажем внутри пучковых находок (класс D39.73), добиты: **(1) Mistral-strip гейт message-builder** (research/21 §1.1: extra_forbidden на reasoning-поля; ЛАТЕНТЕН — наш wire single-shot без reasoning-полей; станет несущим при multi-turn/continuation или прод-пути mistral в канале B) → дописка в строку 59 (транспорт-гигиена); **(2) halve-chunk-on-retry** (research/22 §2 №7) → ОТКЛОНЁН ЯВНО: волновая архитектура с чекпойнтами + флор max_tokens + ре-ген-ручка 77 делают полу-чанк малоценным; реопен — при живых max_tokens-упорах (строка 45, дописка) (02.08, оркестратор №9). ✅ ## D39.75 — ФИКС-ПАК БАНКА ПРИНЯТ И ЗАЛЕНДЕН (все 9 пунктов строки 87 отработаны; приёмка исполнением + 3-агентное адверсариальное ревью: 14/15 CONFIRMED · 1 PARTIAL · 0 REFUTED; голден независимо: маскированный дифф ПУСТ, двинулся только `embedded_version`): **СДЕЛАНО** — (б) head-finality В ДАННЫХ (`script-series.txt` + `SeriesHeadFinal`; zh/ja/ko функционально идентичны — пин-тест; синтетический head-initial скрипт заводится данными) · (в) лживый комментарий Batch переписан на правду (ChunkIdx фолдится в RequestHash) + `BatchRunes`-WARN на оверсайз-серию (НЕ режет — резка убила бы со-батч) · (г) `classify_types` при выключенном гейте = fail-loud + 5 config-тестов · (д) мутационные тесты neuter-фолда (версия двигается; mined-scope: BASE байт-идентичен — draft-волна не перепокупает) · (ж) дистилл-фикстура BANK-FULL (150 поверхностей побайтно = боевому TSV; тест требует ТОЧНОГО членства 4 серий и id=0 для 方源/元石/元海) · (и) `TokenizeWords`→`text.TokenizeLetters` — консолидация чистая (слои однонаправленны) И ПОБОЧНО ЗАКРЫЛА РЕАЛЬНУЮ ЩЕЛЬ: старый токенизатор рвал слово на mid-word U+0301 («сло́во»→[сло во] — воспроизведено на копии старого кода), decl-пост-чек промахивался на ударениях. **НЕ ДЕЛАТЬ с контрактом в код** — (е) стеммер НЕ заводится в voice (направления несимметричны: SelfRef-стемминг безопасен, NG-стемминг = шум; контракт-блок voice.go:368-378, фактура сверена) · (з) Q5-инструкция реалий УЖЕ в `terminologist.md`/`classifier.md` — причём с D39.45 (мисатрибуция отчёта «D39.58» только усиливает клейм), PromptSHA256 не двигался. **(а) ОТКАЧЕН — МАНДАТ САМОПРОВЕРКИ СРАБОТАЛ ПО НАЗНАЧЕНИЮ:** «ь» в `decl_suffix` закрыл бы «Фан Юаню», но неотличим по форме от коллизии мягкознаковых имён с лексикой («Синь»↔«синий/синим» — контрфактика воспроизведена: SameStem=true с «ь»); адверсариальный ревьюер сессии поймал ДО лендинга, откат + два регресс-гвоздя (SameStem + dstFormPresent; пара Линь/линию инертна — заменить на Линь/линий при касании) + NB-комментарий в данных. **Finding-1 ОСТАЁТСЯ ОТКРЫТЫМ → строка 91 (выбор владельца):** приёмка склонений мягкознаковых имён стеммером НЕВОЗМОЖНА — (а) сид/терминолог перечисляет `decl.forms[]` для -нь/-ль имён (естественно ложится на Decl-эмиссию) или (б) anchor-gated матч; + прямой тест-гвоздь на дизайн-кейс добавить при решении. Граница плотности (`enabled` серий через Go-константу `cjkScriptNames`) — пре-существующая, дописана в строку 79. Строка 87 ЗАКРЫТА (02.08, оркестратор №9). ✅ ## D39.76 — SOFTSIGN-DECL ЗАМЕР ПРИНЯТ, ОБА ВОПРОСА РЕШЕНЫ (строка 91; замер исполнен бэкенд-сессией по слову владельца «замеры → решать вместе с оркестратором»; eval-конвенция `eval/softsign-decl/`, пин-харнесс на боевом стеммере, $0, два адверсариал-прогона author≠reviewer): **факты** — (1) разрыв реален, но МАЛ и локализован: пер-чанковый честный промах ~4–7 на 25 глав, почти весь = «Винный червь»; «Фан Юань» = 0 (номинатив всегда рядом); раннее «~26» снято вторым путём (артефакт мелкого блока, свип 800→12000); (2) наивное «ь» (A1) отвергнуто ОКОНЧАТЕЛЬНО — вред глобальный, книго-независимый (SameStem → Postcheck И SpoilerLeaks везде); (3) **anchor-gated (C) СЛОМАН адверсариал-прогоном самой сессии**: коллизию ПЕРЕНОСИТ на класс «[титул]+[ь-фамилия]», числовой класс не защищает («пятого ранга»×13 — якорь общий), ноль коллизий этой книги = ТРАНСЛИТ-ВЕЗЕНИЕ ⇒ в ядро на одно-парном свидетельстве нельзя; (4) сид-перечень честно назван ручным трудом, но для 1–2 имён = ~10 строк YAML ВНЕ ядра (generic containsWholeWord, ноль строк Go). **РЕШЕНИЯ (оркестратор + владелец): (Q1) стопгэп A — ДА**: сид-формы «Винный червь» И «Фан Юань»; формы пишет бэкенд-сессия, подпись владельца обычным сид-циклом; тем же касанием гвоздь Линь/линию→Линь/линий + прямой позитивный тест «Фан Юаню» через forms[] (закрывает PARTIAL D39.75); memory_version → штатный repin, перекупок нет; **(Q2) finding-1 ЗАКРЫТ на A; C снят в ЗАГЕЙЧЕННЫЙ ТРИГГЕР** — реопен только при второй паре живьём, где кросс-парный полигон-замер (перенос + числовой класс, ≥2 пары) — ГЕЙТ любой правки ядра. Общность: путь A = ноль строк Go, grep ядра на пара/книго-литералы пуст. Строка 91 → «стопгэп в работе, закрытие по его лендингу» (02.08, оркестратор №9). ✅ ## D39.77 — СТОПГЭП A ЗАЛЕНДЕН, СТРОКА 91 ЗАКРЫТА (+ УТОЧНЕНИЕ ПОЛИТИКИ ПОДПИСИ по вопросу владельца 02.08): бэкенд-сессия исполнила мини-касание — (1) сид стенд-книги (`guzhenren-seed-v2.yaml`, вне git): дописана ТОЛЬКО мн. парадигма «Винного червя» (5 форм полной детерминированной парадигмы; ⚠ честное уточнение сессии: все 4 формы «Фан Юань» и ед. обликы «Винного червя» УЖЕ стояли в сиде с 24.07 — нетто-новьё только мн. число); (2) гвозди (2 тест-файла): Линь/линию→Линь/линий (эмпир-проба: Stem(линий)=лин — дискриминирует, старая пара инертна — диагноз приёмки D39.75 подтверждён) + позитив-гвоздь «Фан Юаню» через forms[] (PARTIAL D39.75 закрыт); ядро Go не тронуто, голден не тронут, seed-lint 0/0. **(3) ЧЕСТНАЯ НАХОДКА СЕССИИ, бьющая по цифрам замера D39.76: coldrun-a был СИДЛЕСС-прогоном** (банк рождался майнером без сида) ⇒ харнесс мерил чистый стеммер-путь, слепой к forms[]; в подписанном сид-прогоне обликы «Фан Юань» уже ловились ⇒ реальный прод-разрыв ЕЩЁ МЕНЬШЕ отчётных чисел — решение «стопгэп вне ядра» только укрепляется. **(4) ПОЛИТИКА ПОДПИСИ (вопрос владельца «мы же не подписываем старые банки?»):** договорённость В СИЛЕ — подпись БАНКА (майнер→терминолог) опциональна, банк обязан приходить верным автономно (D39.59/67); СИД — другой артефакт (ручной входной канон книги: вкусовые dst/гендеры/спойлер-окна), НО **детерминированная морфология сида (падежные формы) владельческой подписи НЕ требует** — это не вкус; забирается приёмкой оркестратора; подпись владельца остаётся только за ВКУСОВЫМИ полями сида. Стратегическая нота: стопгэп = временная механика стенд-книги; автономная Decl-эмиссия — открытый шов арки (реопен с C-триггером строки 91 на второй паре) (02.08, оркестратор №9). ✅ ## D39.78 — ПАКЕТ-ЧЕКЕРОВ ПРИНЯТ И ЗАЛЕНДЕН (строка 25 ЦЕЛИКОМ + первые два компонента строки 79; $0 — только фейк-провайдер; двухраундовая приёмка: 10-агентный адверсариал-воркфлоу → 5 CONFIRMED major → постфикс той же сессией ДО коммита → 3-агентный дельта-раунд: 0 major; `CheapGateVersion` v7 бампнут ОДИН раз): **харнесс labels пересобран В GIT** (env-гейт `TM_CHECKER_LABELS=1`, checks+membank+candidates; `metrics.json` пакета-6 воспроизведён ПОБАЙТНО 12/12 классов — k4a добавлен маркер-онли постфиксом; 2 независимых пути счёта; манифактуренной сходимости НЕТ — джойн-конвенции независимо пересчитаны ревью-агентом из сохранённых эра-вердиктов). **ПОСТРОЕНО:** #10 демоция одно-руновых Han-миссов в Unverified + `PostcheckMiss.Demoted` (K6 fp 14→6, fn=0 — ⚠ КЛАСС-ВАКУУМЕН: в labels ноль одно-Han-позитивов, recall-цена демоции НЕ измерена — hard-gate строки 12 на «fn=0» не опираться; репэйр-гард №5 ослеп на одно-Han-дифференциал — оговорка в строке 13; кана-класс открыт до B6, строка 81) · #3 атрибуция ёлочки «X!»/«X?»/«X…» с отказом плоской цитате sentence-final-гейтом (K4b recall 0.109→0.217; Р4-потолок ~0.22 inline в контракте) · #6 caps-латиница + case-insensitive allowlist (K2 recall 0.75→0.85, честная precision 0.971) + синк репэйр-твина (caps-утечки адресуемы актуатору) · k4_inverse маркер-в-атрибуции (3/0/1/71; сегмент режется с ДВУХ сторон, маркеры whole-word) · #8 两/兩 данными (0 эффекта — generality) · Р2 hard/soft split (`UnitScaleHard`={DC1, NumberMagnitude} / `Soft`={DC2, PercentScale}; `Total` не тронут) · строка-79: `isCyrLetter`→`isTargetWordLetter` + DC1-трим + magnitude `SourceScripts`-гейт через единый `lang.IsDenseScript` (закрыто и ведро C-2) · рефрен-исключение editor.md/mono (PromptSHA256 двигается, перекупок нет D39.63). **ЗАКРЫТО с обоснованием:** #5 (единственный дефект магнитуды DC2-покрыт) · #7 (THRESHOLD=2 = 0 изменений; 3 = Р4-потолок inline; гомоглиф = `tk.mixed`, приёмка пройдена) · DC2 word↔word (ноль размеченных дефектов — сперва разметить 分之-срез) · research/22 §2№5 (не подтверждены labels) · omission-бэкстоп (уже стеммером D39.75) · строгий OffLanguage (36а deferred) · fix-8 скоуп verb-гейта (ЗАГЕЙЧЕН контрактом checkers.go: ёлочный экстрактор атрибуции + корпус-замер ПРЕЖДЕ стройки). **Приёмка оркестратора исполнением:** labels-ячейки перепрогнаны лично, фрозен-ДО #3 5/1/41/99 воспроизводится из дерева · голден: независимый маскированный дифф ПУСТ дважды (двинулся только `style_check_version` v6→v7 + хеш-каскад; постфикс-перезахват = байт-идентичный no-op) · build/vet/-race/майнер-парити зелёные · общность: ноль пар/книго-ветвлений, Han-предикат #10 скрипт-структурен. Раунд-1-находки (скоуп k4_inverse = весь хвост строки · 2 ложных «вскрытых» примера #3 в отчёте · BASE==EXT кандидат-теста · рассинхрон репэйр-твина · Р4-потолки не в контракте) ВСЕ закрыты постфиксом §8. Остаточные минорки раунда-2 → строка 93; вопросы владельцу (§6 + жанр-ось register_neg «xianxia» в пар-шаблоне + асимметрия 兩-батча) → строка 92. Лендинг-штамп: «D39.76» постфикса → фактический D39.78 (отчёт + 2 код-коммента; механическая нумерация — сессия номера не знала). Строка 25 ЗАКРЫТА · 79 сужена до cjkScriptNames-границы · 89 сужена (checkers-срез ведра D исполнен). Незаявленные в дерево-списке отчёта файлы (langpack.go — коммент-указатели ведра D; memdecl_test.go — gofmt) тривиальны, проверены (02.08.2026, оркестратор №9). ✅ ## D39.79 — МЕЛКАЯ ПАЧКА ХВОСТОВ САНКЦИОНИРОВАНА + РЕШЕНИЯ §6 ПАКЕТА-ЧЕКЕРОВ ПРИНЯТЫ ДЕЛЕГИРОВАНИЕМ (владелец 02.08: «давай сделаем» по пачке 89+93+53+83; по строке 92 — «подумай как это сделать и реши за меня; интересует качество подходов и работающего решения»): **(1) Пачка** = строка 89 (остаток ведра D + сверка ведра B) + 93 (хвосты чекер-ревью) + 53 (мелкие хвосты качества) + **83/F4 ПОДТЯНУТА** с «до МАСШТАБА» на «до платных прогонов добора идеала» (SPOF: тихая потеря банка и подписей владельца; VACUUM INTO дёшев) — один промт `BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md`, $0, голден-ожидание = НЕ движется. **(2) Q1 канон грейда = «класс X»** (approved-ряд банка побеждает draft «разряд X»; демоция draft-рядов = операция над стенд-данными, приёмка оркестратора — выбор среди уже-подписанного, не новый вкус); **DC7-чекер вслепую НЕ строить**: сперва $0-замер нужности на боевых финалах labels-корпуса; ≥1 реальный дефект → минимальный data-driven чекер по образцу DC1; 0 → закрыть с обоснованием и gated-триггером «первая книга с живой грейд-серией». **(3) Q2: 兩 ПОДТВЕРЖДЁН в numeral-классах** (консистентность: cjk-section уже нёс 兩 — ровно класс дефекта #8) и ДОВЕРШАЕТСЯ в числовой группе `shichen_re`; **probe-ЛИТЕРАЛЫ (时辰/千万/数十万) остаются simplified-only** до первой traditional-книги — тогда цельным дата-батчем (спекулятивные варианты паттернов без книги = инерция, норма 13б); NB-граница в файл данных. **(4) Q3: PercentScale остаётся SOFT, HARD-value-детектор 成/万 НЕ строить** — нужность = 1 инстанс на корпус, механизм без носителя качества/денег; реопен ДВУМЯ триггерами: перевод `postcheck_gate` в hard-gate (строка 12 — честный HARD потребует value-чека) ЛИБО ненулевой поток value-дефектов с добора идеала. **(5) Q4: register_neg ПЕРЕЕЗЖАЕТ из пар-пака в КНИЖНЫЙ слой** — дом `StyleAllowlist` (book-config → `CheapGateConfig`), DC6-алгоритм не меняется, «терем»-список → стенд-конфиг gu-zhenren, пар-файл zh-ru остаётся чисто пар-фактами, жанро-литералов в Go НЕТ; **жанровый shared-слой НЕ строим** — gated-триггер «≥2 книги одного жанра» (зеркало C-триггера D39.76). Ревью-вопрос общности расширен: к «пара без правки Go» добавлен «ВТОРАЯ КНИГА той же пары — без ложных флагов и без правки Go». **(6) Q7 (эмиссия головы, 18) и 36б-замер (5) подтверждены полигон-слотами при ре-пробе 74** — стройка только по эффекту, без изменений. Строка 92 ЗАКРЫТА (решения здесь); 28 вес актуализирован (носитель «свежий мини-прогон» растворён D39.67 → добор идеала) (02.08.2026, оркестратор №9, по делегированию владельца). ✅ ## D39.80 — Онбординг-оверхол доков по фидбеку новой сессии: один носитель состояния, реестр продуктовых требований, глоссарий, зонный сдвиг диаграмм (02.08) Триггер: две записки фронт-сессии 02.08; все проверяемые утверждения подтверждены исполнением (README застрял на D39.77 с мёртвой ссылкой на заархивированный промт — обновление README не входило в процедуру лендинга; статус-абзац README дублировал и обгонял CURRENT-STATE; битые относительные ссылки в архиве; «три слайса» при четырёх; SEO-требование V5 не всплыло за день фронт-дизайна — реестра требований не существовало). Диагноз записки принят: доки писались под роль с непрерывностью памяти и враждебны холодной сессии. Ратифицировано: **(1) Один носитель состояния** — PROGRESS CURRENT-STATE; `docs/README.md` не несёт ни головы, ни статуса, ни дублей целей — только карту «что где лежит» (дубль числа = гарантированное расхождение). **(2) Норма лендинга:** лендинг, двигающий файлы или состав активных промтов, обновляет README тем же коммитом (вписано в ORCHESTRATOR_SESSION_PROMPT §Лендинг). **(3) `docs/product-requirements.md`** — производный реестр «что продукт обязан уметь»: ПТ-1..ПТ-32 (+25а) из START_PROMT V0–V5 (живой бриф) + владельческих находок H6–H18, статусы сверены кодом; новые V-идеи владельца разбираются туда при первом касании; при конфликте D-лог выше. Требования без носителя получили его: НОВАЯ строка 94 (абьюз-прескрин H8 · лимит входа H7 · продукт-кнопки стоп/продолжить H10 поверх построенных graceful stop/redrive) · дописка 71 (V5 веб-первый/SEO — в Ф3-дизайн ДО выбора фреймворка, SSR-вопрос) · дописка 90 (H16 самоулучшение при пилот-препе). Строка 30в ЗАКРЫТА (разбор START_PROMT исполнен реестром). **(4) `docs/glossary.md`** — жаргон и сокращения одним экраном, в онбординг-пути. **(5) Бэклог:** ID строки стабилен навсегда (не перенумеровывается, не переиспользуется — внешние ссылки «строка N» остаются валидными, включая backend/README), длинные строки получили жирные лиды (43 строки, механический скрипт). **(6) Зонный сдвиг:** `components.puml`/`pipeline.puml` → `backend/docs/` — диаграмма и код правятся одним коммитом бэкендом (строка 30а перевешена; гардрейл «PUML не рендерить» в силе); how-it-works доки подсистем строятся ПО ТРЕБОВАНИЮ фазы (дом `backend/docs/`, образец — backend/README §Инварианты), впрок не строить. **(7) Архив:** норма глубины относительных ссылок в archive/README; починены все битые ссылки (слайс 04–10: 12 промт-ссылок · отчёты PACK20_DELTA/POLYGON_TERM_RESEARCH_A: `../../backend` → `../../../backend` · PACK20_BANKNOTE_DESIGN: repo-root пути · STRATEGIC_REVIEW-промт); заявленные новичком «44» были подстрочным овер-каунтом (греп ловил `../../backend` внутри корректных `../../../`) — реальный список установлен экзистенс-чеком, содержимое записей не менялось, только пути. **(8) Роль «Фронт»** (зона `frontend/`) в CLAUDE.md; онбординг дополнен глоссарием и реестром; счётчик ролей канонизирован — «оркестратор №N», номера эстафеты промт-файла историчны (02.08.2026, оркестратор №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.82 — Мелкая пачка хвостов принята и залендена; DC7 пере-гейчен сид-покрытием с домом канона в book.yaml (02.08) Отчёт: `archive/reports/SMALLPACK_TAILS_2026-08-02.md` (ревью-шапка). Исполнено строками 93/89/53/83 + решения D39.79: **A** — 8 хвостов ревью чекеров (whole-word inner-marker вето + гвоздь · recall-потолок в контракт · негатив-ассерт Demoted=false, мутант убит · честные комменты); **B** — ведро D добито (isHeaderSeparator = !isHeaderContentRune, комплементарность доказана приёмкой полным перебором 1 114 112 рун · мёртвый freqStratum удалён, парити EXACT), ведро B — все 6 на носителях (строки 35/81); **C** — gofmt чист · editor-mono.md DORMANT hash-нейтрально · дубль-ключ пар-файла fail-loud (`putUniqueDC`) · архео D39.4/D23.4/D28.3(б) диспозициями; **D/F4** — `tmctl backup` (integrity_check + VACUUM INTO `~/books/<книга>/backups/`) + боевой pre-flight в `run()`-диспетчере (ноль магических строк провайдеров; гвоздь «fake-путь бэкапов не создаёт»); **E** — Q1 канон «класс X» подтверждён read-only (живые носители чисты); Q2 兩 в `shichen_re`; Q4 register_neg+жанр-msg → книжный слой (`book.yaml register_blocklist` → union в DC6; BriefHash с omitempty — голден `c2021b1b…` неизменен, приёмка пере-вывела hash из фикстуры независимо; пар-файл без register легален; «вторая книга другого жанра — 0 ложных DC6, 0 правок Go» запинено тестом). Приёмка: батарея пере-прогнана независимо (build/vet/race · парити EXACT · голден-фикстура не тронута ни байтом · labels 6/6 фрозен-ячеек · DC7-замер пере-выведен 25/93/150) + 5-осевой refute-воркфлоу: **0 блокеров, 0 major против пакета**. **DC7: стоп сессии ПОДТВЕРЖДЁН, рекомендация ИСПРАВЛЕНА вторым рубежом** — класс в значительной мере уже покрыт mempostcheck+сид-v2 (грейды = approved-записи с decl-формами; «разряд» в сидовом прогоне = промах dst), а labels-финалы — прогоны до/вне сид-канона; ратифицировано: дом канона грейда = КНИЖНЫЙ конфиг (посылка D39.79 «данные в dc-checkers.txt» исправлена — пар-паковый DC7 ложно флагнул бы вторую книгу), стройка — ТОЛЬКО по остатку девиаций на первом сидовом прогоне добора идеала (строка 98). Минор приёмки: `redrive --dry-run` обходит pre-flight при мутирующем store.Open (миграции+recover) → хвост в суженную строку 93. `CheapGateVersion` НЕ бампнут; `LangpackVersion` двинут байтами пар-пака (ок, D39.63). Строки 89/53/83 ЗАКРЫТЫ; 93 сужена до остатков; НОВАЯ 98. Стенд-данные вне git: `coldrun-a/book.yaml` (register_blocklist) · `dc7-measure/` замер. Промт — в архив с баннером (02.08.2026, оркестратор №9). ✅ ## D39.83 — Ре-проба flash и отладочный холодный прогон с автобанком санкционированы; промт выдан с потолками и двухфазным контролем (02.08) По слову владельца («бэкенд готов? надо идти и делать холодный прогон с контролем бэкенда; цель — отладка; никаких хаков и ворэраундов — только поддерживаемые мультиязычные решения»). Выдан `docs/BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md`, три фазы со СТОП-точками: **A** — верификация готовности САМОЙ сессией ($0; батарея с фрозен-числами · сквозной fake-путь · чек-лист наблюдаемости как приоры с правом чинить дыры — вердикт готовности за сессией, по предпочтению владельца); **B** — ре-проба DeepSeek-V4-Flash-0731 (строка 74; ≤$0.15; боевая форма через расширение live-рига, N≈8–12 + терминолог-батчи на cap 8000 + классификатор 6/6; критерии бинарны, пограничное = НЕ здоров → развилка (а) флор 16000 / (б) reasoning_effort / (в) ждать — РЕШЕНИЕ ВЛАДЕЛЬЦА; ручка #77 сессией не включается); **C** — холодный прогон coldrun-b с автобанком (≤$5 через `ceilings.book_usd/day_usd`; ступени 2+8 глав в ОДНОЙ БД; банк-пауза `--verify-bank` = инспекционная точка сессии, продолжение неподписанным банком по D39.77; намеренный стоп+резюм посреди волны; наблюдения per-узел: эхо · упоры · банкнота→банк · инъекция байт-диффом (не injected_ids) · flag_reason · голос-оси (для 13б) · wall-clock (первые данные ПТ-19) · деньги двумя путями · F4-бэкапы). Дебаг-дисциплина: фикс = мультиязычный + тест + батарея до resume; архитектурная дыра = СТОП+пинг с вариантами, заморозка чекпойнтом — легитимный исход. Прогон закроет замер цены холодного старта ЦЕЛИКОМ (строка 16). Вне скоупа: Q2/Q7 (полигон), судья Ф2, DC7-остаток (строка 98 — нужен СИДОВЫЙ прогон). Промт холодно аудирован агентом ДО выдачи: 3 major вправлены (`budget_usd` не существует — реальные потолки `ceilings.book_usd`/`day_usd`, мина day_usd 0.25 эталона · носитель боевой формы ре-пробы назван · механика смока/добора одной БД + легитимный re-pin/подпороговая перекупка против ложного СТОПа) + 4 minor; факты аудита вложены в промт приорами (голос-счётчики есть в read-model, но не печатаются; риг 6/6 исполним из бэкенда). Строка 74 → «в работе». Владельцу при запуске: стартовать в долину DeepSeek (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` — фронт режется на этапы S0–S7, первая кодовая сессия кончается витриной токенов). Приёмка оркестратора: 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) Работы движка → строки 99–102** (каждая проверена кодом): 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.42–1.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 фронт/платформа-строк НЕ принимает — остаётся трекером движка/полигона/доков; движковые стыки фронта (зона «бэкенд») живут в едином (строки 99–102); строки 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-связность со схемой v1–v14+ · индустрия единодушна: 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.86 — coldrun-b ПРИНЯТ: блокер 0731 вскрыт до корня на боевой форме, флор-16000 фальсифицирован, эхо-мина пере-подтверждена на живых весах; развилка 74 — на владельце (02.08) Отчёт: `archive/reports/COLDRUN_B_DEBUG_2026-08-02.md` (ревю-шапка с поправками). Промт D39.83 отработан: фазы A и B исполнены за **$0.114378 из $0.15**, фаза C **заморожена чекпойнтом** — по букве промта («здоров по ВСЕМ критериям → C без ожидания») это ЛЕГИТИМНЫЙ исход, не провал: критерий «0 пустых» нарушен 8 из 9. **Приёмка исполнением, не чтением:** батарея пере-прогнана независимо (build/vet/`vet -tags live` exit 0 · `-race -count=1` все пакеты ok · парити EXACT `n=13618 catastrophe{方源:0 蛊:1 蛊师:2 古月:22} recall 0.9655` · labels 5/5 фрозен · голден PASS · 5 новых тестов PASS); **деньги пере-выведены оркестратором из СЫРЬЯ** (`sqlite3` read-only по 4 БД, пересчёт провайдерских `usage`-колонок по вендор-ценам мимо `ledger.CostUSD`): леджер $0.114378 ≡ Σ чекпойнтов **во всех четырёх** проектах до 6-го знака, независимый путь $0.099267, разница $0.015111 = 3 `estimated`-строки декод-фейлов; все несущие счётчики пере-выведены из `chunk_status`/`request_log` и сошлись. Плюс 9-осевой refute-воркфлоу (скептик + независимый арбитр на ось): 6 CONFIRMED, 2 PARTIALLY_CONFIRMED, 0 REFUTED. **(1) Вариант (а) «флор 16000» ФАЛЬСИФИЦИРОВАН замером боевой формы** — при `max_tokens=8496` 0 из 9 вызовов пригодны, при 16992 пустых 4 из 5; сырые тела показывают 15 424→21 528 симв. `reasoning_content` ⇒ добавка потолка уходит в думание, сходиться некуда (вендорская норма вывода для `high` = 384K, ×45 к флору). Строка 44 сужена до «какое число ставить ПОСЛЕ развилки». **(2) Посылка строки 74 об амендменте `echoMineViolation` — НЕВЕРНА ДЛЯ СТАДИЙНОЙ РУЧКИ и ЖИВА ДЛЯ БЭНК-РОЛЕЙ** (поправка приёмки к §3.3): гейт (`models.go:485-501`) инспектирует МЕХАНИЗМ `capabilities.reasoning.control`, а не значение `stage.reasoning`; у deepseek `ReasoningNone`, где `off`/`""` — no-op, а `low` уходит на провод (`capability.go:167-171`) ⇒ `stages[draft].reasoning: "low"` легален и thinking НЕ выключается (доказано проводом: 22 тела с `reasoning_effort:"low"`, ноль ключей `thinking`, 24/24 ответов с непустым `reasoning_content`). НО у бэнк-ролей ручки нет вовсе, а единственный дата-путь `model.extra_body` гейт банит (`thinkingControlExtraKeys` содержит сам ключ `reasoning_effort` при любом значении) ⇒ **вариант (б) — правка Go, а не строка конфига**. Тем же решением о (б) обязаны быть приведены в соответствие доккомменты гейта (`models.go:440-448`, `capability.go:52-58`), которые утверждают инвариант «echo-prone провайдер держит thinking на дефолте провайдера»: иначе защита читается как полная, а боевой конфиг обходит её по неохраняемому каналу. **(3) Вендор-факты (пере-сняты оркестратором, HTTP 200, внесены в `experiments/00-provider-quirks.md` п.3а/п.10):** *«Thinking mode is enabled by default, with the default effort being high»* — вот почему боевая форма упирается в стену; маппинг per-модельный: у flash `low→low`, **у `deepseek-v4-pro` `low→high`** ⇒ на pro рычага эффорта НЕТ; сноска *«We will update the actual mapped effort of `deepseek-v4-pro` in early August 2026»* — то есть сейчас, поэтому «pro вендором не тронут» имеет срок годности. Changelog новее 31.07 записей не имеет. **(4) Эхо-мина при выключенном thinking ПЕРЕ-ПОДТВЕРЖДЕНА НА ЖИВЫХ ВЕСАХ** (проба C, 4/20) — вся прежняя эмпирика флага `echoes_when_thinking_off` была снята на весах Preview, которых больше нет; флаг сохраняет основание. **Норма прецедента (ратифицируется этим блоком):** ратифицированный гардрейл ПРОБОВАТЬ можно — но только карантином: копия конфига ВНЕ git с громкой шапкой, боевой файл и гейт не тронуты (проверено: sha боевого `models.yaml` = `git show HEAD:`), вопрос пришёл релеем владельца, результат = ЗАМЕР, а не разрешение шипить. Разворот гардрейла требует читки КАЧЕСТВА (D19.1/D21.9 стоят не только на эхе), которой не было ни в одной из трёх проб. ⚠ Остаточный артефакт: проект `optNoThink` стоит на банк-паузе и его `book.yaml:28` указывает на ungated копию — помечен СПЕНТ-пробой, не резюмить. **(5) Поправки приёмки к несущим клеймам** (тело отчёта не переписано — дисциплина «отчёт = артефакт сессии»; всё в ревю-шапке): §3.1 «нет автоматического пути восстановления ВООБЩЕ» слишком сильно — `regenerate_before_escalate: 1` (`stagerun.go:177`) вылечил гл.3/чанк 1, отдача 1/5; **но арбитраж усилил вторую половину клейма: вылечил НЕ бюджет** — победивший вызов уложился в 8285 токенов при базовом потолке 8496 и выданных 16992, то есть добавка не тратилась и причиной быть не могла ⇒ **лечит стохастика вызова** (то же свойство, что квирки п.6), а значит `regenerate_before_escalate: 2` бессмыслен, и рычаг того же класса — N ре-роллов на БАЗОВОМ потолке (ручка #77), при отдаче 1/5 ожидание ≈$0.0125/чанк, дороже (б) и (г) ⇒ понят, не рекомендован; закрытость эскалации доказана СИЛЬНЕЕ, чем в отчёте (хоп настроен и профинансирован, `escalated=0` на всех восьми юнитах ⇒ блокировал КЛАСС ФЛАГА, не потолок); из 7 терминальных флагов 3 — `decode_error`, третий класс; «14 оплаченных вызовов» занижает счёт на три (оплачено 17). **Деньги волны (б) = $0.028195**, а не $0.0257 (не воспроизводится ни из одного среза; ledger ≡ Σ чекпойнтов ≡ независимый пересчёт), flash-only $0.019489, проба C $0.012287. **Вариант (г) ≈×8.9, а не ×3.1**: «×3.1» — отношение цен за токен, а pro на том же чанке выдал 9059 выходных токенов против медианы 2330 у flash-low ⇒ ≈$0.174 на волну 20 чанков (n=1, прогноз, не замер). **Д1 понижен в отчёте несправедливо:** «не тихая порча» верно лишь там, где санитайзер включён И цель = ru — условие тройное (`chunkrun.go:52`), а отчёт назвал одно. ⚠ **Мой первый черновик этой ноты утверждал, что контрпример — «легальный шиппинг-скелет `configs/pipeline-c2.yaml` без секции sanitizer»; арбитраж это ОПРОВЕРГ, и запись исправлена ДО коммита:** c2 неисполняем (`CheckRunnable` рубит и `core: C2`, и стадию `role: judge` — `config/pipeline.go:469-486`), его отсутствующий санитайзер уже забукован условием оживления (строка 33 / `13-tech-debt-anchors.md:45-47`). **Настоящая дыра — на оси ЦЕЛИ, и она ДВУСТОРОННЯЯ:** (i) без данных цели весь слой 7 инертен ПО ОТСУТСТВИЮ (`disposition.go:302-305` объявляет это осознанным дизайном) ⇒ для не-русской цели рубежа нет вовсе; (ii) а как только будущая ЛАТИНОПИСЬМЕННАЯ цель поедет задокументированным путём расширения (`data/target-.txt` в go:embed), `detectLatinInsertion` (`checks/sanitizer.go:228`) сработает на ЧИСТОЙ целевой прозе и дропнет 100% чанков — потому что внутри санитайзера он НЕ обусловлен `TargetScriptNonLatin()`, хотя доккоммент `disposition.go:302-305` объявляет именно эту защиту; сам гард существует и стоит только на репэйр-пути (`quality.go:215`, `repair.go:208`), а частичный файл цели невозможен (`CompileCheckers` паникует) ⇒ новая цель ОБЯЗАНА включить санитайзер. Ревью-вопрос владельца «заработает ли пара, которой в репо нет, без правки Go?» для →en/→de сегодня отвечается **НЕТ**; кандидат фикса — тот же шов, что уже применён к репэйру. Худший исход даже на сегодняшнем ru-пути — не потеря юнита, а тихо отгруженный релейный перевод zh→en→ru. **Д2 назван на 2/3:** третий такой же синтетический `config.Stage` — `repair.go:384`, чей доккоммент декларирует ровно фальсифицированную посылку; проводной шов ровно ОДИН (`:515`, общий для обеих ролей), `:568` до провайдера не доезжает. **Строка `VOICE`: `rules=` говорит «сконфигурирован», а не «отработал»** (`quality.go:436` читает конфиг ВРЕМЕНИ ОТЧЁТА — воспроизведено: включение гейта после прогона печатает «измерено, чисто» для неизмеренной книги); живое чтение coldrun-a `flags=0 over attributed=0 of replies=0` означает «не считалось ни разу» (флаггер живёт на финальной волне, редакторская не гонялась) ⇒ **строка 13б по-прежнему без данных**. **(6) Принято как построенное:** две дыры наблюдаемости закрыты $0 (строки `BANKNOTE` и `VOICE` + 5 тестов, включая тесты молчания; голден/`CheapGateVersion` не тронуты; живая проверка на БД coldrun-a воспроизвела `lines=182 over 18/20 · parse-fail 3`, sha256 БД до/после идентичен) · **live-риг не собирался с D39.64** (`undefined: cjkShare` — per-adapter live conformance физически не запускался; слом бисектнут до коммита D39.64) — починен передачей `SourceScripts` по языку пробы · порог классификатора **6/6 ВЗЯТ** ($0.000390, `finish=stop`), оговорка честна и проверена: `元石`/`灵泉` стоят в `prompts/zh-ru/classifier.md` дословно, остальных четырёх там 0 ⇒ дискриминирующие 4/4 настоящие · девиация «носитель ре-пробы = сам боевой путь вместо расширения live-рига» ПРИНЯТА с аргументом сессии (риг мог бы разойтись с боевой формой по любой оси — ровно класс ошибки D37). **Живыми деньгами доказаны:** нарезка · волна на 4 воркерах · classify/disposition · эскалация одним хопом с ре-гейтом · банкнота · майнер+банк · банк-пауза exit 3 · потолок физически выстрелил на 98.7% и отказал в хопах, не уронив прогон · F4-pre-flight (первый боевой клиент) · graceful SIGINT · **$0-резюм** (20 юнитов из `chunk_status`, 5 чекпойнтов, 0 вызовов, леджер байт-в-байт). **(7) Строки:** НОВЫЕ **104** (ручки `reasoning`/`temperature` у синтетических стадий — блокер-очереди при выборе (б)/(в′), с пятью констрейнтами дизайна, включая ловушку расхождения хеш-оси `bankCheckpointExists` ↔ `runAttempt`) и **105** (мис-вердикт классификатора + честность двух новых поверхностей). **46** получила живой носитель, повышена до «скоро» и пере-сформулирована как «экран целевого языка на выходе ЛЮБОЙ не-последней стадии». **44** сужена, **78** получила живое число ($0.015111 = 13% захода), **13б** уточнена («не считалось», не «пусто»), **74** переписана числами и остаётся НА ВЛАДЕЛЬЦЕ — **платных прогонов до его слова нет**. **16 НЕ закрыта** (полная цена холодного старта требует фазы C с редактурой). Промт `BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md` — в архив с баннером: фазы A/B исполнены, фаза C переиздаётся после развилки (стенд coldrun-b собран, $0-проверен и стоит нетронутым — прогон стартует одной командой) (02.08.2026, оркестратор №10). ✅ ## D39.87 — Развилка строки 74 РЕШЕНА владельцем: вариант (б) плюс ручка эффорта для ролей без неё; мандат «элегантно и чисто» ратифицирован как приёмочный критерий (02.08) Решение владельца по итогам приёмки D39.86 (числа и четыре варианта поданы ему таблицей): **берём (б) — явный `reasoning_effort: "low"` черновой стадии — ВМЕСТЕ с правкой Go, дающей ручку эффорта ролям, у которых её нет (строка 104), и с экраном целевого языка (строка 46) как условием безопасности.** Отклонены: **(а)** — фальсифицирована замером (D39.86); **(в′) thinking OFF** — дешевле всех и терминолог на ней здоров, но это разворот ратифицированного гардрейла `echoes_when_thinking_off`, эхо-мина на 0731 жива (4/20), а качество прозы не судил никто ⇒ принимать нельзя без читки качества; **(г) pro** — ≈×8.9 по цене, и вендор-маппинг `low→high` означает, что на pro рычага эффорта нет вовсе, при объявленной вендором смене маппинга pro на начало августа; **(в) ждать** — вендор молчит. **Мандат исполнения — слово владельца дословно: «элегантно встроить в текущее решение по коду. Чтоб было чисто».** Ратифицирую его как ПРИЁМОЧНЫЙ КРИТЕРИЙ, а не пожелание, в четырёх проверяемых вопросах: **(1)** правка обязана быть использованием СУЩЕСТВУЮЩЕГО механизма — поле `Stage.Reasoning` (`config/pipeline.go:208`) и проброс `stagerun.go` → `llm/capability.go` уже есть, новый механизм не строится; **(2)** корень дефекта — не «забыли ключ», а **рукописные литералы `config.Stage`, молча теряющие поля родителя** (в шиппинг-коде их ровно три — `terminologist.go:515` для ОБЕИХ бэнк-ролей, `terminologist.go:568` не-проводная, `repair.go:384`; плюс четвёртый в live-риге), поэтому правка, чинящая три места копипастой, дефект тиражирует: приёмочный вопрос — «появится ЧЕТВЁРТАЯ такая стадия — она унаследует ручку сама или её опять забудут?»; **(3)** оба стоячих вопроса общности на каждый фикс; **(4)** «не появилось ли второго способа сказать то же самое». Ручка — ран-скоупная и из ДАННЫХ; в пар-пак и в `book.yaml` не заходит. **Обязанность, унаследованная от D39.86 п.2:** санкция (б) тем же диффом приводит в соответствие доккомменты эхо-гейта (`config/models.go:440-448`, `llm/capability.go:52-58`), которые утверждают инвариант «echo-prone провайдер держит thinking на дефолте провайдера» — после (б) тот же провод легален через `stages[].reasoning` и запрещён через `model.extra_body`, и защита перестаёт быть полной. Гардрейл «thinking у DeepSeek не выключать» при этом НЕ ослабляется и остаётся в силе: (б) — уровень эффорта, а не тумблер. **Выдан промт** `docs/BACKEND_EFFORT_HANDLE_SESSION_PROMPT.md`: работа A (ручка, $0 + проба банка на `low` ≤$0.10 — этот замер не делал НИКТО, `low` у бэнк-ролей открытый вопрос) · работа B (экран целевого языка, $0, вердикт-двигающая ⇒ дизайн и пинг ДО кода) · работа C (добивка холодного прогона ≤$5 — закрывает строку 16 «полная цена холодного старта включая редактуру» и ВПЕРВЫЕ даёт данные по осям голоса для строки 13б, потому что редакторская волна не гонялась ни разу). **Промт холодно аудирован 4-линзовым воркфлоу с независимым арбитражем ДО выдачи** (норма D39.83): **3 блокера и 15 major вправлены** — несуществующая на момент написания ссылка на этот самый блок · платная проба, буквально уводившая прогон в ЗАМОРОЖЕННЫЙ эталон coldrun-a (он держит денежный базлайн строки 16) · та же ловушка хеш-оси на пути repair (`repairCheckpointExists`, `repair.go:350`, чей доккоммент декларирует зеркальность) · область работы B, буквально накрывавшая бэнк-роли и repair, чьи ответы законно НЕ в целевой письменности (100% ложных флагов) · негодный носитель данных для экрана · молчащие суб-бюджеты (`gates.terminology.budget_usd: 0.05`, `escalation.budget_usd: 0.10`), которые связывают РАНЬШЕ потолка $5 · незапрещённая правка вердикт-несущих `capabilities` в `models.yaml` · порядок «B заморожена ДО первого платного вызова C» (иначе сдвиг `classifierVersion` осиротит чекпойнты C1) · пропущенная в промте обязанность про доккомменты гейта · отсутствие явной инструкции переставить ручку ЧЕРНОВИКА в стенде (буквальное прочтение оставляло draft на `"off"` и воспроизвело бы стену 0/9 за $5). Строка 74 → «в работе»; закрывается приёмкой этого пака (02.08.2026, оркестратор №10). ✅ ## D39.88 — Git-протокол мультисессий переведён в механику: pathspec-коммит, чужую зону не трогает никто (02.08) Ратифицировано: **коммитит оркестратор**; сессии зон — бэкенд, полигон, фронт, платформа — не коммитят, своё дерево готовят и передают на лендинг (исключение прежнее — пре-рег фризы полигона). Чужую зону не трогает НИКТО. **Повод — два живых инцидента 02.08, и они вскрыли, что декларативной нормы мало.** Коммиты фронт-сессии `e9a6bb2` и `b98afb5` дважды унесли под своим сообщением застейдженную работу оркестратора (архивный `git mv` промта coldrun-b; затем все четыре дока лендинга D39.86/D39.87). Содержимое цело — проверено `git show HEAD:` по каждому файлу — потеряна только атрибуция; история НЕ переписывалась (запрет при живых параллельных сессиях, урок 09.07; владелец санкционировал рерайт постфактум, оркестратор от него отказался — переписывать общий `main` под активно коммитящей сессией дороже выигранной косметики, оба хеша названы в PROGRESS, археология не рвётся). **Корень инцидента — не дисциплина, а механика: голый `git commit` уносит ВЕСЬ индекс.** Обе стороны виноваты симметрично: сессия коммитила без pathspec, оркестратор держал файлы застейдженными между операциями. **Поэтому норма записана как ПРОТОКОЛ, а не как призыв** (канон — `CLAUDE.md` §Гардрейлы, «Git-координация мультисессий»): коммит ТОЛЬКО с явным списком путей `git commit -- <пути>` (pathspec-форма чужой индекс не трогает) · **никогда** `git add -A` / `git add .` / `git commit -a` · перед каждым коммитом `git status` + `git diff --cached --name-only`, и чужой путь в индексе не «прибирать», а обойти pathspec-формой · свои файлы не держать застейдженными между шагами (стейдж и коммит одной командой) · `reset --hard`/amend/rebase несвежих коммитов/checkout поверх грязного дерева — запрещены · чужое уехало в твой коммит → историю НЕ переписывать, сообщить владельцу · не коммитить `START_PROMT.MD` и `.claude/settings.local.json`. **Носители (правило обязано доехать до сессии, а не только до канона):** `CLAUDE.md` — таблица зон + протокол в гардрейлах · `frontend/docs/FRONTEND_SESSION_PROMPT.md` §«Зона и git» · `platform/README.md` — то же плюс ревью-гард модулей D39.85, потому что отдельного промта платформы ещё нет, а правило нужно ДО первой строки кода (02.08.2026, оркестратор №10). ✅ ## D39.89 — БАНК КАК ЦЕНТРАЛЬНАЯ ЦЕННОСТЬ: ГИПОТЕЗА ВЛАДЕЛЬЦА О КОНСИЛИУМЕ И УВЕРЕННОСТИ МОДЕЛЕЙ ПРИНЯТА К ПРОВЕРКЕ, ТРЕК = РАСШИРЕНИЕ Q2 (строка 5/36б), НЕ НОВЫЙ; ПРОМТ ВЫДАН (02.08, оркестратор №10). ✅ **Вход владельца (02.08, дословные опоры):** «банк памяти сейчас центральная ценность при переводе… туда нужен как грамотный инжект так и фетч по книге, прям очень грамотно алгоритмически продуманный»; перевод банка требует **«консилиума без голоса»** (равноправные модели; при неравноправии — склонять вес); открытый вопрос — **могут ли модели вообще устанавливать уверенность** (числами или словами) и можно ли на скоре строить выбор перевода терма; оговорка — выбор по-терминно может **разбить стиль/систему** соседних решений. Отдельно владелец потребовал в промте секцию **рекомендованных дальнейших алгоритмов/доработок и критики текущего решения в коде**. **Диспозиция: это НЕ новый трек.** Маршрут «второе мнение по банку» уже ратифицирован — **D39.69** закрыл бэкенд-стройку 36б по нужности и оставил ПОЛИГОН-ЗАМЕР нужности рецензента другого семейства поверх §1 (серия-батчинг) + §2 (тип-классификатор); **D39.70 (Q2)** санкционировал замер «ДО любой стройки», слотом при ре-пробе 74 (строка 5). **Новое в входе владельца, чего в Q2 не было:** (i) калибровка САМООЦЕНКИ моделей как сигнала; (ii) взвешенный арбитраж вместо равноправного; (iii) **связность системы термов как ограничение арбитража**; (iv) инжект/фетч как отдельная ось. Поэтому Q2 РАСШИРЕН этими вопросами, а не продублирован новой строкой. **Разбор оркестратора, вошедший в промт как приоры (грунтованы, не мнение):** **(1) экономическая асимметрия** — арбитраж платится раз на книгу и по числу РАЗЛИЧНЫХ термов (насыщается: замер строки 16 — терминолог $0.006–0.013/проход), инжект платится на каждом чанке каждой волны каждой роли (`membank/memory.go:523`, `Select(chunk, chapter, sticky, budgetTokens)`) ⇒ на книге оси расходятся на порядки, и «покупать качество расточительно» законно именно в арбитраже; **(2) три наших замера уже бьют по наивной форме гипотезы** — слепой судья = катастроф-ЭКРАН, а НЕ ранжировщик (D39.46); канал отказа роли нестабилен (⟦TM-NO-DST⟧ размах 0.375, выдумывание dst 77–82% на хвосте — D39.50); согласие прогонов само по себе слабое (Жаккар банкноты 0.077–0.40 между прогонами одних глав, D39.50); **(3) единица арбитража** — сегодня `ScoreVariants` ранжирует варианты ОДНОГО кандидата, единственный межстрочный сигнал `Neighbours` работает лишь при уже существующей подписи, а автономный банк подписи не имеет ⇒ связность системы термов на холодном старте держится ТОЛЬКО со-батчингом серий (`series.go`), и это ровно тот дефект, который был измерен и вылечен со-батчингом (D39.65 строка 21: 甲等→«класс» против 乙丙丁等→«ранг» через границу батча) ⇒ по-терминный argmax вернул бы его классом ⇒ **дизайн обязан оперировать КЛАСТЕРОМ (семья корня · серия · регистр · алиас-граф), а не строкой**; **(4) инвариант эмиссии** (терминолог не может утвердить — `draft`/`auto`, D39.42 §C2-7) размывать запрещено: «три модели согласились ⇒ канон» — запрещённая форма; **(5) D39.47** запрещает арбитражу превратиться в пар-словарь, форсящий один регистр. **Промт выдан — `docs/BANK_ARBITRATION_RESEARCH_SESSION_PROMPT.md`** (ресёрч+полигон сессия; зона: `docs/research/24-bank-arbitration.md` + `eval/bank_arbitration/` + секция PROGRESS; НЕ коммитит). Четыре работы: **A** критика текущего алгоритма в коде ($0, вердикт-тройки, дефекты классами сломано/хрупко/дорого/слепо) · **B** арбитраж (B1 голд — гейт остального; ядро уже есть: `guzhenren-seed-v2.yaml` 58 записей / 53 `approved` + дистилл-фикстура BANK-FULL 150 поверхностей + банк coldrun-a, смещение выборки назвать честно; B2 калибровка уверенности ≤$0.60 — разделяющая способность, числа против слов, устойчивость к повтору, **сравнимость МЕЖДУ моделями**, канал отказа, и обязательный БАР против бесплатного базиса §C2-3; B3 формы консилиума ≤$0.80 с контролем «одна модель N раз» — ответ на Q2) · **C** инжект/фетч ≤$0.60 (мерить ПОСЛУШАНИЕ и ВРЕД, не recall) · **D** рекомендованные алгоритмы тремя корзинами (строить сейчас · измерить · закрыть по нужности; последняя обязана быть непустой). Потолок **$2.00** с суб-потолками и пре-регистрацией критерия до каждой пробы. **Легитимные исходы, объявленные заранее:** «консилиум не бьёт базис — закрыть» · «уверенность не разделяет — закрыть» · «голда мало, вот точный запрос владельцу» · «рычаг в инжекте, а не в арбитраже». Мандат ревизии посылок (D39.68) и правило №4 (D39.47) вшиты. **Гигиена выдачи:** промт холодно аудирован автором перед выдачей по `file:line`/D-номерам; исправлена одна мис-атрибуция (фактура премеров — **D39.50**, отчёт `archive/reports/POLYGON_PREMEASURE_2026-07-26.md`, а не D39.71). ⚠ **Коллизия зон названа в промте:** `backend/` ЖИВАЯ (сессия строк 104/46/16), `coldrun-a` — замороженный эталон только на чтение, `coldrun-b` — стенд живой сессии; пробы гонять СВОИМ харнессом против API, не через движок. Валидный базлайн качества банка — **coldrun-a**, НЕ coldrun-b (там терминолог сломан транспортом: 1 терм из 81, D39.86) — сравнение с поломкой даст фальшивую победу консилиума и будет отклонено приёмкой. ## D39.90 — ЗАКРЫТИЕ СЕССИИ ОРКЕСТРАТОРА №10: пак ручки эффорта отработан и ЖДЁТ ПРИЁМКИ преемника, банк-ресёрч подрезан, дыры трекера заведены строками, форма архитектурных гардов и конвенции Go-репо подняты владельцем в решение (02.08). ✅ **Повод — слово владельца: «эту сессию мы завершаем, дела передаёшь; главное важную инфу не потерять».** Нота собирает состояние на момент передачи; вода и хроника опущены намеренно. **1. Бэкенд-пак строк 104/46/16 ОТРАБОТАН, НЕ ПРИНЯТ, НЕ ЗАЛЕНДЕН.** Отчёт `archive/reports/EFFORT_HANDLE_2026-08-02.md` закоммичен с ⚠-баннером «коммит ≠ ратификация» — только чтобы артефакт пережил смену сессий. **Код лежит в дереве НЕЗАКОММИЧЕННЫМ** (новые `internal/config/internal_call.go`, `internal_call_test.go`, `pipeline/synthetic_stage_seam_test.go`; правлены `models.go`/`pipeline.go`/`capability.go`/`escalation.go`/`repair.go`/`runner.go`/`stagerun.go`/`terminologist.go`/`live_reprobe_test.go`/`capability_test.go`) — **дерево не чистить, history-rewrite и `checkout` поверх него запрещены.** Заявления сессии, которые приёмка обязана пере-проверить исполнением: работа A = ДВА шва (`config.InternalCall{…}.Stage()` + `Runner.attemptRequest`), рукописных `config.Stage{}` не осталось ни одного, все четыре сборки `RequestHash(Request{…})` схлопнуты в одну, ловушка хеш-оси закрыта в обе стороны на обоих путях; **перекупки нет** (`gates.terminology` не фолдится в снапшот, кортеж воспроизведён побайтно — `8e4495006b978ed4` в обе стороны, голден PASS без пере-захвата); гранулярность решена ЗАМЕРОМ (парная выборка N=5: `low` 4/5 против `high` 5/5 неразличимо при цене `high` ×2.30 ⇒ вторая ручка `classify_reasoning`, построенная на n=1, СНЯТА самой сессией); `Temperature` зафиксирована нулём осознанно. **2. Проба банка на `low` ЗЕЛЁНАЯ и это главный технический результат дня** (строка 104, §3.4 промта; хост — свой проект `reprobe/bank-low/`, эталон `coldrun-a` только на чтение): терминолог **4/5 батчей `stop`, consolidated 72, unanswered 18, $0.005750**; классификатор 5/5, reclassified 14, $0.004286; черновая волна 20/20 ok ($0.031639 flash + $0.010350 pro, 2 эскалации вылечили эхо); **весь заход $0.045095 из $0.10, леджер ≡ независимому пересчёту `usage`×цены до нуля** (строки 78 в этом заходе не было). Против вендор-дефолта `high` — 1/5 батчей и 1 терм из 81. **Оба молчащих пути исключены предъявлением** (терминолог 11.5% суб-бюджета, классификатор 21.4%, книга 45.1%, ноль WARN-строк). **Провод вскрыт: 35 тел, `reasoning_effort:"low"` во всех 35, ключей `thinking` ноль, `reasoning_content` непустой везде ⇒ гардрейл «thinking у DeepSeek не выключать» доказан ПРОВОДОМ, а не рассуждением.** ⚠ Несущий нюанс для будущего: `low` стену НЕ убирает, а разрежает — упавший батч вскрыт сырьём (`content=""`, `finish=length`, `completion=7999`, `reasoning=7999`), то есть тот же тяжёлый хвост, 1/5 вместо 4/5, и это стохастика вызова, а не размер входа. ⚠ На стенде пробы `escalation.budget_usd` сознательно понижен 0.10→0.015 ⇒ наблюдение эскалаций НЕПОЛНОЕ. ⚠ Боевой `coldrun-b/pipeline.yaml` НЕ тронут — там по-прежнему no-op `reasoning: "off"` на черновике. **3. Работа B (строка 46) — ДИЗАЙН ПОДАН, КОДА НЕТ, стоит на решении владельца.** Сессия исполнила букву промта («вердикт-двигающее ⇒ сначала дизайн и пинг»). Три поправки к посылке, все замером, и они МЕНЯЮТ масштаб проблемы: **боевой гейт уже ловит 18 из 20** off-target событий (`sourceScriptShare > 0.15`, 0 ложных на 1055 здоровых, запас 13×) ⇒ остаточная дыра **0.18%** (2 чанка из ~1100, оба английские; японский ловится долей ханьцзы); **второй рубеж существует, но стоит не там** — санитайзер поймал бы те байты, однако `chunkrun.go:52` требует `isFinal`, а в шиппинговой двухстадийной топологии черновик НИКОГДА не финальный, и тот же `isFinal` глушит на черновике латинный линт, флаггер голоса и глоссарный пост-чек; здоровый минимум на тексте, который РЕАЛЬНО видит гейт (после среза банкноты), = 0.9767 при n=1055, а не 0.9510 при 1306 (сессия поправила собственное число). **Развилка владельцу: (а)** предикат в `classify()` + бамп `classifierVersion` — двигает снапшот у всех книг, голден пере-захват один раз, на свежем стенде $0; **(б)** отдельный опциональный гейт — снапшот не двигает, но это второй способ сказать то же самое и он выключен по умолчанию; **(в)** языковой детектор. Выбор сессии — **(а)**. Носитель — `lang.LangScripts(Book.TargetLang)`, НОВЫЙ go:embed-файл не заводить (`EmbeddedVersion` фолдится безусловно = перекупка всех книг всех пар). Три мины наивной реализации названы (новый флаг провалился бы мимо `escalatable()`/`retryable()` ⇒ переиспользовать `FlagCJKArtifact`; классификатор флагался бы ложно 16/16; экран слеп к ПОДМНОЖЕСТВАМ письменности — чисто китайский выход для →ja наберёт 1.000). **4. Работа C (строка 16) НЕ НАЧАТА, закрыта владельцем как неуспешная на этом этапе; деньги фазы C не тронуты.** Редакторская волна по-прежнему не гонялась НИ РАЗУ ⇒ оси голоса (13б/24) без данных, полная цена холодного старта невыведена. **5. Банк-ресёрч (строка 5): заход запущен и ДОСРОЧНО ЗАКРЫТ владельцем — «требуются фиксы в бэкенд». Артефакта в дереве НЕТ** (ни `docs/research/24-*`, ни `eval/bank_arbitration/`, ни свежих файлов в `~/books` — проверено) ⇒ **находки не сохранены; если они ценны, их надо вынуть из истории той сессии, иначе работа повторяется с нуля.** Диспозиция пере-запуска — ПОДРЕЗАТЬ: держать §3-A (критика кода, $0 — она и вскрывает нужные бэкенд-фиксы), B1 голд (гейт всего) и B3 формы консилиума с контролем «одна модель N раз»; свернуть B2 (калибровка уверенности) до под-пробы внутри B3 — как отдельная работа она дорога, а приоры D39.46 (судья = катастроф-экран, не ранжировщик) и D39.50 (канал отказа нестабилен, размах 0.375) уже сильно против неё; отложить §5-C (инжект/фетч) до бэкенд-доработок — мерить послушание инъекции без движка нечем. Потолок $2.00 → $1.20. **Да, после ресёрча последуют бэкенд-работы** — их предмет и есть деливерабл §3-A и §6-D промта. **6. Дыры трекера закрыты строками (сверка по репозиторию, не по памяти).** Заведены: **106** слой 3 — контракт редактора остаётся full-regen при целевом diff-контракте (`09:121-126`), строки не было вовсе · **107** конвенции Go-репо (см. п.7) · **108** реестр загейченных триггеров — шесть реопенов жили только в телах D-нот, и триггер «появление Go-кода платформы» УЖЕ наступил (`platform/go.mod` заведён) · **109** требования без носителя (ПТ-6 · ПТ-7 · ПТ-22-интейк · ПТ-10-механизм) + гигиена перекрёстных ссылок реестра · **110** детектор повторов лемм / защита авторских рефренов · **111** `parseCategoryRows` молча last-wins (фикс дубль-ключа накрыл только `parseDCCheckers`). **Снято расхождение трекера:** строка 74 объявляла строку 44 закрытой — верно лишь для половины «поднять флор»; живой остаток обратный (число флора влияет на цену ретрая, не на проходимость). Уточнён гейт строки 93 (`分之`-часть гейчена полигон-разметкой, F4-хвост свободен). **Четыре пункта, поданные черновиком свода как долг, СНЯТЫ как уже закрытые решениями:** резолвер слоя 7 построен (`chunkrun.go:30-35`, D39.2 T3) · «санитайзер = чистый детектор» исполнен (D39.2 T2; остаточная мутация `StripCosmetic` — сама ратифицированная диспозиция D38.3 п.2а) · 36б — не бэкенд-стройка, а замер (D39.69) · полярность/ранг отменены D38.4, строка 2 и есть их загейченный носитель. **7. Вопрос владельца, поднятый в решение (строка 107): форма архитектурных гардов и конвенции репозитория.** Предмет — `backend/internal/pipeline/synthetic_stage_seam_test.go` (395 строк): гард ходит по дереву через `go/parser` из обычного `_test.go`, резолвит пакет по ПУТИ импорта, несёт пол на число разобранных файлов. **Намерение верное и уже окупилось** (поймано 7 обходов: байтовая версия пробивалась пятью способами, AST-версия — ещё двумя, алиасом импорта и `[]config.Stage{{…}}`; сессия честно записала, что первая версия говорила `ok` на посаженном пятом сайте). **Дом неверный:** без типовой информации (`go/packages`+`types.Info` вместо эвристики по путям), в тестовом пакете, и каждый следующий инвариант породит ещё один такой обход. Индустриальная форма — analyzer на `golang.org/x/tools/go/analysis` (+`multichecker`, `go vet -vettool=`, CI), где алиас и дот-импорт закрываются ПО ПОСТРОЕНИЮ. Вторая половина вопроса: **в репозитории нет ни `.golangci.yml`, ни `Makefile`, ни CI-воркфлоу** (проверено) — батарея гоняется руками каждой сессией. Опасение владельца про хвост техдолга обоснованно ⇒ **первый шаг обязан быть $0-ЗАМЕРОМ** (набор в report-only, находки по правилам), и только потом состав + режим внедрения (baseline «только новый код» против big-bang). Решение — за владельцем, исполнение — следующей сессией оркестратора. **8. Состояние зон на момент передачи.** `backend/` — незакоммиченный пак (п.1), сессия отработала и закрыта. `frontend/` — сессия ЖИВАЯ (за день ушли `d8437d6`, `8d6b3f7`, `804dbc9`, `8be1e41`). `platform/` — кода нет, `go.mod` заведён. `eval/` — пусто по новому. **Очередь на момент передачи (пересчитано скриптом после добора п.9: 95 строк · зона бэкенд 46 строго / 61 широко · блокеров очереди 0 (104 → «на приёмке») · «скоро» 13 (2·4·5·18·46·49·55·95·107·108·109·112·113).** **9. ДОБОР ПОСЛЕ НЕЗАВИСИМОГО РЕВЬЮ ЛЕНДИНГА (author≠reviewer, тот же день).** Ревьюер подтвердил числовую часть (все числа пробы и строки 46 сошлись с отчётом, все `file:line` живые, счёт очереди воспроизведён скриптом, все четыре снятия «ложных долгов» обоснованы) и нашёл, что дефект передачи — **в НЕзаписанном**: просели предупреждения и адресованные наверх вопросы, у которых нет числа. Исправлено тем же лендингом: - **Мой над-клейм СНЯТ:** «дом гарда неверный» (строка 107). Отчёт §5.5 замерил обратное: форма «архитектурное правило обычным тестом» — стандарт stdlib (`go/build/deps_test.go`, `go/types/errorcalls_test.go`), а индустриальная альтернатива **не проходит наше ограничение «падать на обычной батарее»** (`go test -vet=<свой>` не поддерживается, `GOFLAGS=-vettool` при `go test` игнорируется), и переход на `x/tools/go/analysis` тянет `x/net` 0.26.0 → 0.54.0, **где `x/net/http2` — наш транспорт к провайдерам**. Тестовый дом был осознанным следствием замера. Владельцу вопрос переформулирован честно: принять ли бамп `x/net` ради типовой информации · заводить ли CI · остаётся ли гард тестом. - **Второй мой над-клейм СНЯТ** (строка 44): «число флора влияет на цену ретрая, а не на проходимость» — незамеренная экстраполяция. При `low` флор не варьировался ни разу, упавший батч умер ровно на потолке 8000. - **Заведены строки на потери:** **112** — пять ШИППИНГ-конфигов (`pipeline-c1.yaml:49` · `c2:26,39` · `arm-mistral:30` · `arm-glm:34` · `arm-deepseek-pro:34`) до сих пор несут no-op `reasoning: "off"` на ЧЕРНОВОЙ стадии, то есть ратифицированное решение (б) в проде НЕ действует, а правка двигает снапшот их пользователям ⇒ вопрос владельцу, и он был бесхозным; **113** — числа «18/20 · 0 FP на 1055 · запас 13×» получены ВРЕМЕННЫМ тестом, который сессия удалила, то есть контрактное число невоспроизводимо ⇒ корпус-фикстура + регресс-тест на запас ДО любой правки по строке 46. - **Дописано в строку 104 то, что приёмка обязана смотреть отдельно:** наследование эффорта у repair СНЯТО против буквы промта и D39.87 (девиация, не ратифицирована) · починка `ThinksOnWire` на `extra_body_disable` (предикат врал «думает» при пустом эффорте ⇒ бэнк-роль на glm молча уезжала в thinking-off; область правки — ровно случай «ключ отсутствует», явный `off` в армах предупреждался и до, и после, оставлено специально чтобы приёмка не искала регресса) · вывод «одна ручка» опирается на N=5, где 2 из 6 термов стоят дословно в промпте классификатора, и падение `low` было ровно по дискриминирующему подмножеству (1/4 против 4/4) · **качество прозы не судил никто ни в одной пробе**. - **Дописано в строку 46:** порог abstain 200 букв · база off-target на ЧЕРНОВОЙ вызов **3.02%**, а не опубликованные ~1.5% (знаменатель пулил редакторские выходы — третья самопоправка сессии) · **не проверено, что редактор делает с английским черновиком** — от этого зависит, чем являются остаточные 0.18%: потерей юнита или тихо отгруженным релейным zh→en→ru · `cultivation` (86 из 1055 здоровых) чинить в СИДЕ, а не порогом · Hunspell/GlotScript-эмбед не строить. - **Строка 108 получила первого жильца:** сиблинг-угроза (выход на языке, близком к целевому) с дискриминатором «плотность ы/э/ё НИЖЕ ожидания, а не замыкание алфавита». **Строка 36б приведена в соответствие** собственному снятию (зона → полигон-замер через строку 5; прежняя форма «отдельный дизайн (Р4)» завышала счёт бэкенд-очереди). - **Норма, нарушенная этим же лендингом и потому названная вслух:** сжимая отчёт, я сохранил всё, у чего есть число, и потерял часть того, у чего числа нет. Для отчётов с секцией «пошаговый план следующей сессии» правило сверки — идти по ней ПУНКТАМИ, а не по сводке. ## D39.91 — ПРИЁМКА бэкенд-пака строк 104/46/16 (оркестратор №11): пак ПРИНЯТ и заленден `553f1a3`, обе девиации РАТИФИЦИРОВАНЫ, две находки приёмки, все отложки Д4–Д9 получили носителей, строка 104 ЗАКРЫТА (02.08). ✅ **Мандат — D39.90 п.1 и задача №1 хендоффа. Всё ниже — исполнением, не чтением отчёта.** **1. Батарея с фрозен-числами: 5/5 совпали.** `build`/`vet`/`vet -tags live`/`gofmt` чисты, `go test -race -count=1 ./...` — все 14 пакетов ok (pipeline 82.2s). Голден PASS **без пере-захвата** · парити EXACT `n=13618 catastrophe{方源:0 蛊:1 蛊师:2 古月:22} recall@proposed=0.9655 (56/58)` · labels-фриз `k4b 10/1/36/99 · k4_inverse 3/0/1/71 · k2 34/1/6/51 · k4a 0/0/0/348` · K6 `tp=1 fp=6 fn=0 tn=251`. **2. Деньги вторым путём: сошлись до нуля тремя маршрутами.** Леджер Σ чекпойнтов $0.045095 ≡ мой независимый пересчёт usage×цены `models.yaml` (flash $0.034745 + pro $0.010350) ≡ Σ `request_log.cost_usd`; `decode_error` 0, `estimated` 0 (расхождения строки 78 не было). Разбивка по ролям сверена с логом: терминолог $0.005750 (5 вызовов, 4 stop/1 length) · классификатор $0.007706 = осн. $0.004286 + риг $0.003420 · черновик flash $0.021289 (23 вызова: 20 stop + 3 length-ретрая) + pro $0.010350 (2 эскалации). **НАХОДКА-1 приёмки:** §2.1 отчёта и D39.90 п.2 маркируют «$0.031639 (flash)» — на деле это **flash+pro черновой волны** ($0.021289+$0.010350); суммы и леджер верны, врёт метка. Поправлено ревью-шапкой отчёта; при цитировании черновая волна flash-only = $0.021289. **3. Адверсариал по несущим клеймам — все выдержали.** (а) Рукописных `config.Stage{}` в не-тестовом коде НОЛЬ (grep), единственный `Request{}`-литерал — внутри самого `attemptRequest` (`stagerun.go:407`); все четыре `RequestHash`-сайта едут через шов (`escalation.go:109`, `stagerun.go:420`, `terminologist.go:505`, `repair.go:353`). (б) Перекупки нет: `snapshot.go` паком не тронут (diff пуст), `Gates.Terminology` в снапшоте отсутствует, `repairSnap` нового ключа не фолдит; обратная сторона проверена и признана штатной — СМЕНА `gates.*.reasoning` потом двигает request-hash без resnapshot-гейта, но это тот же контракт, что у смены `gates.*.model` (перекупка ограничена классом вызовов гейта, видима леджером; доккоммент `TerminologyGate` это аргументирует). (в) Гарды: **пять НЕЗАВИСИМЫХ посадок приёмки** (алиас-импорт-литерал · `[]cfg.Stage{{…}}` · hoisted `Request` · `var`-форма · `new()`) — все CAUGHT с позициями, после удаления посадок гарды зелёные; рефлексионный гард полноты верифицирован чтением (XOR карт carried/deliberatelyZero корректен в обе стороны). (г) ⚠ Клейм «`8e4495006b978ed4` в обе стороны» НЕВОСПРОИЗВОДИМ как таковой (старая форма удалена из дерева, хеш не запинен тестом) — принят ПО ЭКВИВАЛЕНТНОСТИ: `RequestHash` длина-префиксует `req.Reasoning`, опущенное поле композитного литерала = `""` побайтно, плюс `TestBankProbeAndAttemptAddressOneCheckpoint` (боевой путь `Reserve`→`SettleWithCheckpoint`, 3 уровня эффорта) и голден без пере-захвата. (д) N=5 сверен с сырьём `classifier-6of6-{low,high}.json`: low 4/5 · $0.001016 · completion 91–1278 · промах run3=91 ток. с 1/4 по дискриминирующему подмножеству; high 5/5 · $0.002335 · 920–3104; цена ×2.298. (е) Провод: 35 тел `reasoning_effort:"low"`, ключей `thinking` 0, бюджетных WARN 0; `terminology finished`: consolidated=72 · unanswered=18 · reclassified=14 · bad_lines=0 · off_language=0. **4. Девиации строки 104 — обе РАТИФИЦИРОВАНЫ этой нотой.** (а) **Repair: ключ СВОЙ, наследование снято** (против буквы промта и D39.87) — деньги и семантика подтверждены исполнением: `reasoning: "off"` стоит на финальной стадии всех пяти шиппинг-конфигов (`c1:77` · `c2:51` · `arm-glm:43` · `arm-deepseek-pro:43`, + стенд `coldrun-b:44`) ⇒ наследование двигало хеш всех оплаченных repair-вызовов; и то же слово «off» на другой модели меняет СМЫСЛ (no-op deepseek → живой `thinking:{type:disabled}` на glm). Запинено `TestRepairStageTakesItsEffortFromItsOwnGate`. (б) **`ThinksOnWire`**: область правки ровно случай «ключ отсутствует» на `extra_body_disable` — провод (`applyToBody`: `""`→disable) существовал ДО пака и не менялся, менялся врущий предикат; явный `off` в армах предупреждался и до, и после (Д11); 8 кейсов теста на три control. (в) Вывод «одна ручка» принят с оговоркой Д8 (2/6 термов — припоминание; носитель Д8 — строка 116). (г) Качество прозы не судилось — остаётся на строках 16/13б, в контракт этой приёмки не входит. **5. НАХОДКА-2 приёмки: стейл-доккоммент `capability.go:78`.** Комментарий константы `ReasoningExtraBodyDisable` до сих пор говорит «effort "" leaves the provider default», противореча и проводу (`applyToBody` мержит disable на `""`), и inline-коменту самого arm, и новому предикату. Пак чинил ровно эту путаницу (D39.86-обязанность доккомментов) и хвост в 30 строках выше собственной правки не заметил. Однострочный фикс — носитель: строка 114 (тем же касанием, что Д4). **6. Носители отложек — гигиена D39.90 исполнена ТЕМ ЖЕ лендингом.** **114** = Д4 (`gates.terminology.target_script` не сверяется с `book.target_lang` — мисконфиг тихо ИНВЕРТИРУЕТ банковский экран) + находка-2 (оба — конфиго-слой ручки, вне снапшота, дёшево). **115** = Д6 (`//go:embed` в `lang/embedded.go:22` — ЯВНЫЙ список файлов: новая ЦЕЛЬ требует правки Go, `CompileCheckers` паникует на неполном файле цели ⇒ на ревью-вопрос общности ответ сегодня НЕТ — дыра в ратифицированной «ФАЗЕ 2 ОБЩНОСТИ ✅» D39.64, и она не про язык, а про строку эмбеда). **116** = Д8 (ратифицированный порог классификатора «6/6» определён для ОДНОГО вызова; на рекомендованном `low` риг N=5 красный — порог обязан стать выборочным контрактом ДО применения (б) где-либо; решается вместе со строкой 112). **Реестр 108** получил двух жильцов: Д5 (enum эффорта провайдер-слеп; решение оркестратора этой нотой — пер-модельную таблицу НЕ строить: новый механизм без носителя качества/денег, misconfig ограничен бюджетами и назван в доккомменте `ValidReasoningEffort`; триггер реопена — первый живой инцидент кривого поведения уровня на проводе) и Д9 (аддитивные провайдеры отказываются бэнк/repair-гейтам — блок не несёт `reasoning_max_tokens`; лоадер fail-closed; триггер — первая потребность гейта в аддитивной модели). **107** дописан Д7 (свести давний байтовый `TestProviderEgressSeamIsSingle` с AST-обходом в один — тем же решением формы гардов). Д1→46 · Д2→46 · Д3→105 · Д10→112 · Д11 закрыт — носители существовали до приёмки, сверено. **7. Сверка §5.4 отчёта ПУНКТАМИ (правило D39.90 п.9 — по плану, не по сводке): потерь сжатия НЕТ.** Шаги 1–2 (корпус-фикстура + регресс-тест запаса) → строка 113 ✓ · шаг 3 (два дока-дефекта: 0.9510→0.9767 на 1055, база 1.5%→3.02%) — УЖЕ исполнен №10 в теле строки 46, других публикаций неверных чисел grep не нашёл ✓ · шаги 4–6 (чистая функция → офлайн-дифф → бамп `classifierVersion` с подписью) → тело строки 46 ✓ · шаг 7 (`cultivation` в сиде, не порогом) → хвост 46 ✓ · шаг 8 (сиблинг строкой с триггером) → первый жилец 108 ✓. **8. Лендинг и очередь.** Пак закоммичен pathspec-формой: `553f1a3`, ровно 13 файлов backend/, чужие файлы (фронт-сессия ЖИВАЯ, её правки в дереве) и `START_PROMT.MD` не тронуты. Отчёту дана ревью-шапка ПРИНЯТ. Очередь скриптом по таблице: **97 строк (95 − закрытая 104 + новые 114/115/116) · «скоро» 15 (2·4·5·18·46·49·55·95·107·108·109·112·113·114·116) · блокеров 0 · «на приёмке» 0**; гейт строки 44 «при приёмке 104» наступил — строка пере-диспозиционирована (вариационный замер флора при `low` не проводился, вопрос числа жив). **На владельце без изменений три решения:** развилка (а)/(б)/(в) строки 46 — выбор сессии И приёмки: **(а)**; строка 107 (форма гардов + линтер/CI; первым шагом $0-замер); строка 112 (применять ли (б) к пяти шиппинг-конфигам и когда платить перекупку — теперь в связке со 116). ## D39.92 — РЕШЕНИЯ ВЛАДЕЛЬЦА 02.08 (вечер): строка 46 пере-поставлена как closed-set «не тот язык, что просили», строка 107 САНКЦИОНИРОВАНА целиком (CI+линтер+бампы, промт выдан), строка 112 САНКЦИОНИРОВАНА, вендор-сверка DeepSeek исполнена. ✅ **1. Строка 46 — переформулировка владельца ратифицирована как ПОСТАНОВКА задачи.** Слово владельца: нужен не языковой детектор, а детектор «вернуло НЕ на том языке, что просили» (closed-set, нулевая гипотеза «текст на N», аттракторы: en · язык источника · сиблинги N); полноценный LID — максимум запасной флаггер ВНЕ пути вердикта; «сбой» — четыре режима (эхо · уход в другой язык · дрейф в середине · мета/деградация), гнать всё через один детектор — ошибка проектирования; в коде проверку изолировать отдельным слоем. **Констатация приёмки: ресёрч бэкендеров ЗАПИСАН и отвечает этой постановке почти пункт-в-пункт** (`EFFORT_HANDLE_2026-08-02.md` §5.1–5.3, живые носители — строки 46/113/108): four-modes = Guerreiro (разные детекторы на режим, §5.1); closed-set и аттракторы подтверждены (en — доминирующий аттрактор, наши 2/20 английские); эхо у нас ловится БЕЗ LID и лучше Левенштейна — `sourceScriptShare` 18/20 при 0 FP и запасе 13× (для zh→ru письменности далёкие); слой «скрипт детерминированно» = и есть предлагаемый экран `targetScriptShare` на `lang.LangScripts` (шаг 4 плана §5.4 — ЧИСТОЙ изолированной функцией, ровно «изолировать отдельно»); abstain-вердикт есть (пол 200 букв); срез терминов/латиницы = `cultivation` в сиде. **Расхождения с текстом владельца — ДВА, оба замером на нашем корпусе:** (а) гарантия Неймана–Пирсона FPR ≤ 0.1% на этом корпусе не покупается — независимых позиций 114, правило трёх даёт ≤ 2.594% (в 26 раз слабее), а калибровка порога на той же выборке двоит данные ⇒ порог ставится консервативной КОНСТАНТОЙ в пустом интервале [0.0000; 0.9767] и версионируется как контракт (не как тюнинг); (б) замыкание алфавита (L2) и посегментный worst-of LR (L4) на СЕГОДНЯШНЕМ корпусе отвергнуты числами (болгарский алфавит ⊂ русского — L2 нулевой; у L4 ноль положительных примеров и умножение FPR на число сегментов; lingua-go недетерминистична 6/23 на 20k повторов даже в closed-set режиме — в путь вердикта нельзя, как ЗАПАСНОЙ офлайн-флаггер вне вердикта допустима) — это отказ ПО ДАННЫМ ОДНОЙ КНИГИ, при сиблинг-инциденте реестр 108 возвращает вопрос (дискриминатор уже назван: плотность ы/э/ё ниже ожидания). Слой 0 владельца (отношение длин len(out)/len(in) вне полосы пары) в ресёрче НЕ рассматривался — добавить ЗАМЕРОМ на корпус-фикстуре строки 113 (дёшево, решит фикстура). **Исполнение:** форма (а) из D39.90 п.3 + изолированный модуль; порядок §5.4 в силе (фикстура 113 → чистая функция → офлайн-дифф → бамп `classifierVersion`); ⚠ денежный шаг 6 (бамп версии = снапшот всех книг) — ПО-ПРЕЖНЕМУ под отдельную подпись владельца, сегодня не санкционирован. **2. Строка 107 — САНКЦИЯ ЦЕЛИКОМ: «делаем по стандартам индустрии».** CI + линтер + бамп `x/net` и библиотек; подход «осторожный, затем полный»; самописные AST-тест-гарды заменить штатной формой, «спилив лишний мусор»; ограничение равной силы: **стандарты не должны мешать разрабатывать, тормозить и приводить модели к хакам** (в промте — анти-хак-правило: спорное правило линтера ВЫКЛЮЧАЕТСЯ с причиной, а не обходится в коде; голый nolint запрещён). Промт выдан: `docs/BACKEND_REPO_STANDARDS_SESSION_PROMPT.md` — этапы: 0) строка 112 · A) $0-замер report-only · B) состав+режим по числам · C) Makefile/`make battery`+CI · D) бамп с живой пробой провода ≤$0.50 (x/net/http2 = транспорт) · E) гарды→analyzer с паритетом 12 посадок, снос тест-гардов только после 12/12 (Д7 исполняется там же). Три СТОП-пинга: >1000 находок · >30 файлов правок разом · любое изменение поведения провода. **3. Строка 112 — САНКЦИЯ: править все пять шиппинг-конфигов сейчас** (`reasoning: "low"` на черновике), перекупка снапшотов старых книг при их следующем прогоне принята, новые книги $0. Внесено этапом 0 промта п.2; редакторские/финальные `off` не трогаются (Д11). **4. Строка 116 — рекомендация оркестратора подана владельцу:** порог классификатора пере-ратифицировать выборочным — **«≥4/5 прогонов N=5 достигают 6/6»** (пер-прогонный критерий 6/6 сохраняется, контракт становится выборочным; совпадает с замеренным `low` и дефолтом рига). Ждёт слова владельца; альтернатива, если хочет жёстче: порог по дискриминирующему подмножеству 4/4 без двух термов-припоминаний. **5. Вендор-сверка DeepSeek исполнена по правилу 10.07 (веб, не гадание).** Вопрос владельца: «полного лечения эха нет? модель хуже прежней? мигрировать?» Ответ тремя фактами: (а) наши замеры — `low` стену НЕ убирает, а разрежает (1/5 батчей всё ещё умирает на потолке с `reasoning=7999`), эхо лечится эскалацией (2/20 в пробе), т.е. РЕЖИМ УПРАВЛЯЕМ, но не вылечен; (б) интернет ДЕГРАДАЦИЮ НЕ подтверждает: 0731 = официальный релиз flash (re-post-train, бенчи ВВЕРХ, вкл. agentic) — наш отказ это не «модель хуже», а СМЕНА ПОЛИТИКИ ДЕФОЛТА (thinking по умолчанию `high`) на плотном хане, и ключ `reasoning_effort` — штатный вендорский рычаг, который мы теперь и используем; (в) ⚠ вендор анонсировал смену МАППИНГА эффорта `deepseek-v4-pro` «early August 2026» ⇒ квирк 3а («у pro эффорт не настраивается, low→high») может устареть со дня на день — **вахта заведена в реестр 108** (триггер: аномалия редакторского арма / дата > 05.08 ⇒ пере-проба маппинга + сверка changelog; абсорбция в 00-provider-quirks — полигоном по его зоне). Миграция черновика с deepseek — вопрос ЗАМЕРА, не решения сейчас: при работающем `low` приоритет низкий; кандидаты (glm-5, mistral, qwen) меряются той же пробой формы bank-low, когда/если владелец даст добро — строкой не заводится до его слова. **6. Строка 5 (банк-ресёрч) — статус подтверждён владельцу:** промт `BANK_ARBITRATION_RESEARCH_SESSION_PROMPT.md` жив, но заход по нему прерван владельцем досрочно, артефактов в дереве НЕТ (проверено №10) — находки существуют только в истории той закрытой сессии. Диспозиция пере-запуска ратифицирована (D39.90 п.5: §3-A+B1+B3, B2 → под-проба, §5-C отложен, потолок $1.20); промт будет подрезан оркестратором ПЕРЕД пере-выдачей. Вопрос владельцу открыт: вытащит ли он находки из истории прерванной сессии (тогда они входом в подрезанный заход), или пере-запуск с нуля. ## 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.94 — ЗАКРЫТИЕ СЕССИИ ОРКЕСТРАТОРА №11 (02.08): состояние передачи. ✅ **1. Сделано:** приёмка бэкенд-пака 104/46/16 исполнением — ПРИНЯТ, код `553f1a3`, строка 104 закрыта (D39.91) · решения владельца ратифицированы: 46 пере-поставлена closed-set, 107 санкционирована целиком, 112 санкционирована (D39.92) · дизайн-ввод по 46: изолированный пакет детекторов, именованные причины отказа, именованный флаг вместо реюза `FlagCJKArtifact` (D39.93) · выдан `BACKEND_REPO_STANDARDS_SESSION_PROMPT.md` (линтер/CI/бампы/гарды→analyzer; этап 0 = пять шиппинг-конфигов на `low`). **2. Ждёт исполнения:** бэкенд-сессия по промту стандартов; её приёмка — преемником по образцу D39.91 (батарея + фрозен-числа + посадки-паритет 12 обходов этапа E + предъявление живой пробы этапа D ≤$0.50). **3. Ждёт выдачи (преемник):** промт пака экрана 46. Порядок жёсткий: фикстура+регресс (113) → изолированный модуль с именованными вердиктами → офлайн-дифф по всем чекпойнтам (ожидание: ровно 2 строки меняются, СТОП при любой здоровой) → денежный шаг (бамп `classifierVersion`) ТОЛЬКО с подписью владельца. Ограничения: D39.92 п.1 (порог константой-контрактом · abstain 200 букв · слой-0 длин добавить замером · Hunspell/GlotScript/LID в путь вердикта НЕ строить) + D39.93 (именованный флаг + `escalatable()`; скрипт-НАБОРЫ цели в данных — ja/ko). Тем же диффом: Д2 (`detectLatinInsertion` под `TargetScriptNonLatin`) и Д3 (`SourceEchoExpected` для classifier) — строки 46/105. **4. Открыто на владельце (ответа при закрытии НЕТ):** 116 — форма порога классификатора (подано «≥4/5 прогонов N=5 дают 6/6»; альтернатива — 4/4 по дискриминирующему подмножеству) · строка 5 — вытащить находки прерванного банк-ресёрч-захода из истории той сессии ИЛИ пере-запуск с нуля; в обоих случаях промт ПОДРЕЗАТЬ перед выдачей по D39.90 п.5 (§3-A+B1+B3 · B2 → под-проба · §5-C отложен · потолок $1.20) · мини-проба строки 44 «low + потолок 16k на упавшем классе батчей» (~$0.05) — идея владельца, санкции нет · подпись денежного шага по 46 (когда дойдёт). **5. Вахты и грабли преемнику:** вендор-анонс смены маппинга эффорта `deepseek-v4-pro` «early August 2026» — реестр 108, триггер: дата >05.08 или аномалия редакторского арма; `medium` на DeepSeek не ставить (вендор документирует low/high/max — Д5, реестр 108); фронт-сессия ЖИВАЯ; дерево на закрытии чисто от бэкенд/докс-зон, незакоммиченное в дереве — фронта и `START_PROMT.MD`. **6. Очередь скриптом:** 97 строк · «скоро» 15 (2·4·5·18·46·49·55·95·107·108·109·112·113·114·116) · блокеров 0. ## D39.95 — Пост-клоуз гигиена по речеку владельца: онбординг-хвосты добиты (02.08, ночь). ✅ Речек владельца «перечитай онбординг» вскрыл хвосты, пропущенные лендингами №11: (1) **строка 74 ЗАКРЫТА** — её собственная буква «закрывается приёмкой этого пака» исполнилась в D39.91, а строка осталась в таблице; развилка решена (б) ещё D39.87, обе половины замера исполнены (флор-фальсификация · low-оживление), остатки давно живут в именованных строках: конфиги → 112 · экран → 46 · холодный прогон → 16 · число флора → 44; очередь после закрытия — **96 строк** (счёт D39.94 «97» устарел этой нотой). (2) Промт `BACKEND_EFFORT_HANDLE` заархивирован с баннером приёмки, карта промтов README обновлена (текущий бэкендный — `BACKEND_REPO_STANDARDS`, банк-ресёрч помечен прерванным с диспозицией подрезки). (3) Буллеты CURRENT-STATE «Курс»/«Горизонт»/«Стек» освежены: ре-проба 74 — исполнена, не будущее; стоячее ограничение перед платными прогонами теперь — строка 112 (шиппинг-конфиги до лендинга покупают пустые ответы); «editor v4-pro вендором НЕ тронут» дополнено анонсом смены маппинга (вахта 108). (4) Шапка-диапазон этого файла и счётчик ролей в промте оркестратора доведены до D39.95. Урок в копилку №12: закрытие строки обязано триггерить греп по её НОМЕРУ во всех живых доках — буквы «закрывается X» в чужих строках и буллетах не закрываются сами. ## D39.96 — ПРИЁМКА пака «стандарты репо» (строки 107 · 112 · Д7, оркестратор №12), ДВА ПАССА: пак принят по качеству кода УСЛОВНО, лендинг ГЕЙЧЕН тремя решениями владельца; найдена регрессия egress-паритета, запрещающая снос байт-гарда по букве промта (03.08). ⏳ **Мандат — D39.92 п.2–3, задача №1 хендоффа D39.94. Отчёт: `archive/reports/REPO_STANDARDS_2026-08-03.md` (ревью-шапка).** Приёмка шла ДВУМЯ пассами: пасс-1 (шесть верификаторов по клеймам отчёта) и — после вмешательства владельца, вскрывшего «след отчёта» как метод-дефект — пасс-2 из пяти АНТИ-СЛЕДОВЫХ линз (мнение до чтения отчёта · поиск дефектов вне его карты · реконструкция снесённых гардов из HEAD · аудит исключений линтера по коду · независимая репликация экспериментальных клеймов). Всё ниже — итог обоих пассов; расхождения пасс-1 ↔ пасс-2 названы явно как урок. **1. Ядро подтверждено исполнением (оба пасса, $0).** Батарея: `make tools-check` + `make battery` EXIT=0 (real 1m25s на тёплом кэше) · golangci-lint 2.12.2 **0 issues** (сырой uncapped errcheck воспроизведён точно: 413; ⚠ методологическая грабля — без `--max-issues-per-linter=0 --max-same-issues=0` no-config-режим молча режет к 50) · vet оба тег-набора с `-vettool` · 15 пакетов ok `-race` · скип ровно один. Конфиги: ровно 5 флипов черновиков; находка-1 (адрес c2:39 из промта = judge на glm-5) подтверждена кодом `models.yaml:191–194` + `capability.go:155–168`; редакторские/судейские `off` целы. Бамп: версии и lockstep-пины сверены; голден-дифф пере-выведен независимо — двигаются ТОЛЬКО хеш-поля, атрибуция установлена форензикой пасса-2: **голден сдвинут исключительно пином x/text (`norm.go:69`), не флипом конфигов и не x/net** (голден живёт на fake-model). Код-дифф: все 9 дефект-фиксов §2 подтверждены, посторонних правок нет, `//nolint` в дереве 0, зеленения-хаков нет. **2. Экспериментальные клеймы — РЕПЛИЦИРОВАНЫ независимо (пасс-2; пасс-1 принял их со слов отчёта — это была ошибка приёмки, вскрытая владельцем).** (а) Эквивалентность x/text 0.38↔0.40 ПОДТВЕРЖДЕНА с нуля и шире спецификации: все скаляры Unicode × {NFC, NFKC, width.Fold} + битый UTF-8 + меж-рунные пары/хангыль + энкодеры GB18030/GBK/UTF-16 (наш `ingest.go`) — три независимых SHA-256 идентичны под обеими версиями. (б) h2-фингерпринт: появление `SETTINGS_MAX_FRAME_SIZE=16384` ПОДТВЕРЖДЕНО на байтах фреймов (свой TLS+ALPN стенд, копия `keepAliveHTTPClient`); набор/значения заголовков и тело байт-идентичны. ⚠ **Поправка принятого клейма: «порядок HPACK-заголовков изменился» — МИСХАРАКТЕРИЗАЦИЯ** (отчёта И пасса-1): порядок обычных заголовков рандомен per-request под ОБЕИМИ версиями (map-итерация в net/http), стабильного «до/после» не существует — опираться на него не мог никто; стабильны псевдо-заголовки и хвост. Дельта фингерпринта = только SETTINGS-раскладка. Непроверенным осталось (честная граница редукции): прокси-туннель CONNECT, CONTINUATION/PING, TLS-слой — закрывается живой пробой (п.5). **3. Посадки приёмки в гарды: пасс-1 — 7 своих (6/7 CAUGHT); пасс-2 добавил реконструкцию старых гардов из HEAD и НОВЫЕ посадки вне карты отчёта. Итог по осям:** (а) **Stage-сеам — прирост без регрессий:** двойная цепь алиасов: старый гард ловил только ПЕРВОЕ звено (одна точка отказа), новый — все три узла; конверсия из 17-полевого близнеца ловится; негативные контроли чисты. (б) **Request-сеам — дыра ОБЩАЯ с предшественником, подтверждено исполнением на реконструкции:** `var r pipeline.Request`+присваивание и `new(pipeline.Request)` проходят ОБА поколения (контроль чувствительности: hoisted-литерал старый гард ловит) — клейм пасса-1 «не регрессия» оказался верен, но был записан ДО проверки, это второй урок; дыра нигде не задокументирована на Request-стороне (`runRequestSeam` — один узел CompositeLit, `archguard.go:197`, против четырёх у Stage) — носитель 121. (в) ⚠ **Egress-сеам — РЕГРЕССИЯ против снесённого байт-гарда, две исполнимые формы (посадки пасса-2, обе exit=0 у tmvet):** пакетная функция `llm.Complete(...)` (у qualified identifier `Selections[sel]` = nil → анализатор молча выходит, `archguard.go:240-242`; пакет llm исключён целиком) и потребительский интерфейс, прячущий llm-типы ВНУТРИ композита (`Complete(ctx, []llm.LLMRequest) ([]*llm.LLMResponse, error)` — `touchesPkg` не рекурсивен, `archguard.go:79-82`). Старый регекс `.Complete(` ловил ОБЕ формы. Несущий коммент «that is what cannot be hidden» (`archguard.go:250-253`) и клейм фикстуры ФАЛЬСИФИЦИРОВАНЫ. Сегодня таких форм в дереве нет (латентно), но **промт разрешал снос гардов «ТОЛЬКО после доказанного паритета» — по egress-оси паритет неполон ⇒ снос байт-гарда в текущем виде букве промта НЕ соответствует.** Развилка владельцу — п.7. **4. Направление и решения (линза пасса-2, мнение сформировано ДО чтения отчёта).** Состав линтера обоснован числами и анти-хак-правило соблюдено буквально; аудит исключений по коду: все классы подтверждены для СЕГОДНЯШНЕГО дерева (единственный контрпример фразе «все 33 прод-Close — читатели»: `chunktest/epub.go:51`, файл на запись в тест-фикстуре; потерю данных не прячет — zip.Writer.Close проверяется). Точностные хвосты → 122: Fprint-исключение на весь модуль вместо `cmd/` · `w\.Write`-исключение ключуется именем receiver-а вопреки собственному принципу конфига · miningstop-исключение глушит текстом весь файл · комменты-обоснования конфига — снимки настоящего времени, ничто не пере-проверяет их посылку · дрейф provenance-чисел (293/31/93 против записанных 294/33/91) · `.skips.log` не в gitignore · GO_MIN_VERSION без патч-уровня · коммент c1 «echo mine unarmed» противоречит quirks §4 («low ПЕРЕ-ВООРУЖАЕТ эхо-мину», 1/16) — сам флип ратифицирован, вреда нет, коммент поправить. Батарея против «не тормозить»: двойной прогон сьюта ради имён скипов ≈6.4s из 1m25s (~8%) — приемлемо; главный расход — архитектурные инварианты исполняются трижды (vet ×2 тег-сета + archguard-тест 17.7s LoadAllSyntax под -race) — осознанно, резать при росте модуля здесь. **5. Живая проба провода — единственный пункт промта, не закрытый никем; после п.2(б) её предмет сузился до реального: примут ли WAF/фронты провайдеров новую SETTINGS-раскладку и 31 минорку семантики ретраев.** Сессия пробу не провела (довод «не было санкции» неверен — потолок $0.50 ратифицирован D39.92 п.2), приёмке запуск заблокирован пермишен-слоем на `. ./.env`. Линза направления независимо назвала это главным долгом пака: «осторожный, затем полный» требовал осторожную половину именно здесь. Команда владельцу — строка 117. До пробы (или явного слова владельца) транспортный бамп НЕ лендится. **6. Пять mid-flight решений владельца 03.08 — НЕ ратифицированы (пасс-1 ошибочно ратифицировал «с вето-окном» — снято): известны только со слов сессии, владельцу выдан список confirm/deny.** (i) CI-воркфлоу не писать (Forgejo 10.0.3, раннер не подтверждён) → жилец 108. (ii) Охват eval/ анализатором снять (замер: три программы, ни одна не строит Stage/Request). (iii) **Бамп `@latest` вместо минимального — НЕСУЩЕЕ:** при confirm лендится текущий go.mod (x/net 0.57 + sqlite 1.55 + пере-захват голдена), при deny — минимальный бамп (x/tools@v0.45 → x/net 0.54, x/text НЕ двигается, голден БЕЗ пере-захвата; жизнеспособность доказана ревьюером сессии) и состав bump-коммита другой. (iv) Пере-захват голдена — следствие (iii). (v) Адверсариальное ревью §9 по требованию владельца — информационно. **7. ВЕРДИКТ И РАЗВИЛКА ЭТАПА E.** Пак **ПРИНЯТ по качеству кода** (ядро п.1, репликации п.2, аудиты п.4 — уровень высокий, самопроверка сессии реальная: 18 своих дефектов починены до сдачи). **Лендинг ГЕЙЧЕН тремя решениями владельца:** (1) проба 117 — или явная санкция лендить до пробы; (2) confirm/deny пяти решений п.6 (несущее — @latest); (3) **этап E: рекомендация оркестратора — МИКРО-ДОФИКС бэкенд-сессией ДО лендинга сноса** (~30 строк + посадки: requestseam ValueSpec/new-симметрия [п.3б] · egressseam fallback на Uses при nil-Selections [п.3в-1] · рекурсивный touchesPkg [п.3в-2] · честные комменты вместо «cannot be hidden»); альтернатива — лендить как есть с ЗАДОКУМЕНТИРОВАННОЙ регрессией по двум egress-формам и строкой 121 «скоро». **План лендинга — семь pathspec-коммитов с само-атрибуцией** (рекомендация линзы направления, форензика голдена бесплатна в истории): конфиги 112 → дефект-фиксы §2 (поведенческие, именованные) → механические линт-фиксы → бамп+пины+голден (гейт 117 в сообщении) → анализаторы+снос гардов+README → .golangci.yml+Makefile → док-лендинг. Строки 107/112 закрываются док-коммитом лендинга; носители 117–123 и жильцы 108 подготовлены в PROGRESS тем же касанием. **8. УРОК ПРИЁМКИ (слово владельца 03.08, оплачено этой нотой; норма — в промте оркестратора).** Пасс-1 попался на шести ловушках: след отчёта (план верификации структурирован его секциями) · связность вместо истинности (два несущих клейма приняты со слов с записью «исполнением») · соглашательство (пять «решений владельца» ратифицированы со слов сессии; оценочные эпитеты в ноте) · догадка фактом («не регрессия» до проверки) · слепой участок одной модели · экономия усилия на неудобном (направление/решения не ревьюились). Пасс-2 (анти-следовые линзы) на тех же токенах нашёл: регрессию egress-паритета, запрещающую снос по букве промта; мисхарактеризацию принятого клейма; двух исполнимых обходов вне карты отчёта. Механика-минимум закреплена нормой в `ORCHESTRATOR_SESSION_PROMPT.md` (03.08). ## D39.97 — ПРИЁМКА дофикса archguard + живой пробы (оркестратор №12): ПРИНЯТ, весь пак стандартов ЗАЛЕНДЕН семью pathspec-коммитами, строки 107/112/117 ЗАКРЫТЫ; решение по tools/go.mod — строить; вопрос владельца о снапшоте разобран (04.08). ✅ **Мандат — D39.96 п.7 (дофикс до сноса — выбор владельца) + промт `BACKEND_ARCHGUARD_DOFIX`. Отчёт: `archive/reports/ARCHGUARD_DOFIX_2026-08-03.md` (ревью-шапка ПРИНЯТ).** **1. Приёмка исполнением (короткая, по пропорциональности; свои посадки — вне карты отчёта).** Батарея на реальном дереве EXIT=0 (1m29s, скип один). Деньги вторым путём: usage×цены `models.yaml` ≡ заявленным по всем трём вызовам и сумме, дельта $0.000000 ($0.005269 ≈ заявленным $0.0053). Свои посадки в свежей копии: значение метода `f := c.Complete` CAUGHT (клейм таблицы подтверждён независимо) · **method expression `llm.LLMClient.Complete` CAUGHT — формы нет ни в таблице отчёта, ни в списке пропусков** (SHAPE-половина берёт её по типам аргументов — гард сильнее собственной документации) · негативный контроль шва чист. Вход приёмки на месте: **CONFIRM владельца по `@latest` записан отчётом** (D39.96 п.6-iii закрыт) — проба шла на текущем go.mod. **2. Что принято.** Этап 1: шесть дыр закрыто (3 из промта + 3 сверх, включая блокер «вызов через параметр типа» — невидимый ОБОИМ прежним поколениям; ось имени `llm.Do`; ложное срабатывание `var s *config.Stage` снято); оба сеама на общем обходчике `seamRule`; исключения переведены с path-суффиксов на import-path (`//line`-идентичность отрезана `PositionFor(…, false)`); 9/9 мутаций ловятся, мутация M7 нашла мёртвую ветку TypeParam в самом фиксе — образец, зачем мутационная проверка обязательна; `assertGuardVocabularyIsLive` против молчаливого гниения строковых ключей; 38 want-посадок + 8 негативных контролей; ноль диагностик на боевом дереве. Этап 2: проба PASS 3/3 (`finish=stop`, новых отказов/фреймингов нет); **прямой клейм по проводу: `reasoning_content` 965 симв., `reasoning_tokens:234` ⊂ `completion:280` ⇒ `ReasoningSubset` подтверждён на проводе; механика 112 подтверждена телом запроса** (`reasoning_effort` отсутствует на `ReasoningNone`); h2-ALPN подтверждён на всех трёх эндпоинтах за $0 ⇒ новая SETTINGS-раскладка не отвергнута. Граница честная (три эндпоинта · по вызову · одна сеть) — принята. Семь осознанных пропусков — фикстурами без want (покраснеют в день, когда начнут ловиться) — носитель 121(д). Оговорка сессии о 20/43 умерших ревью-агентах — компенсирована её пере-проверкой и моими посадками. Остаток: инвариант-коммент `httpllm.go:77` («zero wire bytes» — верен для полей пинга, неверен для бампа, который их привёз) дофикс не тронул → хвост в 122. **3. ЛЕНДИНГ: весь пак стандартов + дофикс — семь pathspec-коммитов с само-атрибуцией** (план D39.96 п.7): `e8d4ac0` конфиги 112 · `5a97020` девять поведенческих дефект-фиксов · `b155da3` механика линта · `cb368c0` бамп+пины+голден (движутся только хеш-поля) · `6356471` анализаторы+снос старых гардов · `5a81bff` .golangci.yml+Makefile+README · `0e64efe` opt-in лога тел в live-пробе. Фронт-сессия закоммитила своё (`ece94ef`) ПАРАЛЛЕЛЬНО лендингу — pathspec-дисциплина коллизию исключила by construction. **Строки 107, 112, 117 ЗАКРЫТЫ.** Оба промта архивированы. Оставшиеся не-несущие mid-flight решения 03.08 (CI-воркфлоу не писать · охват eval/ снят) ратифицированы этой нотой — порог нормы «confirm только для несущих» соблюдён, триггеры реопена в реестре 108. **4. Решение по tools/go.mod (владелец 04.08: «вам решать») — СТРОИТЬ, отдельным малым паком, НЕ гейт ничему.** Форма: отдельный модуль (например `backend/tools/` со своим go.mod), куда переезжают `cmd/tmvet` + `internal/archguard` — ⚠ `tool`-директива Go 1.24 НЕ решает задачу (тулы в главном go.mod участвуют в MVS так же). Следствия, которые пак обязан удержать: `make battery` гоняет тесты ОБОИХ модулей (инвариант «падать на обычной батарее» переезжает в Makefile — он и так единственная точка входа); `shippingtree_test` живёт в tools-модуле и грузит главный. Выигрыш: бамп инструментов ФИЗИЧЕСКИ не может двинуть x/net/x/text главного модуля ⇒ класс «линтер тронул денежную ось» закрывается по построению. Туда же — решение по sqlite: оставить 1.55 (уже заленден, прогонов не было, откат = отдельное движение без выгоды). Строка 118 переформулирована под это решение. **5. Вопрос владельца «не слишком ли агрессивен снапшот, можно ли безопасно ослабить» — разбор.** Короткий ответ: механизм НЕ слишком агрессивен — он неточно НАЦЕЛЕН, причём в обе стороны сразу, и лечится калибровкой осей + дешёвой перекупкой, а не ослаблением. Три факта: (а) **есть недо-чувствительность** (строка 119: `SanitizerVersion` НЕ сворачивает `width.Fold` — смена x/text перевернула бы вердикт БЕЗ движения снапшота; это аргумент ПРОТИВ ослабления вслепую); (б) **есть пере-чувствительность по охвату**: `EmbeddedVersion` фолдится безусловно по ВСЕМ файлам всех пар (D39.90 п.3) — добавление ja-данных перекупает zh-книги; лечится пер-парным хешом (только файлы своей пары) — заодно шаг к мандату общности (родня 115/120); (в) **версия-строка ≠ поведение**: бамп x/text доказан поведенчески пустым на 17M+ входов, но снапшот сдвинулся, потому что фолдится СТРОКА версии. Направление фикса (в): не «фолдить меньше», а **сделать перекупку дешёвой, когда поведение не менялось** — `tmctl resnapshot --dry-run`, который по чекпойнтам сверяет БАЙТЫ тел (`msgsContentHash` уже в голдене): байт-идентичные юниты пере-привязываются к новому снапшоту без пере-вызова, платятся только реально изменившиеся; детерминизм цел (каждая пере-привязка аудируема), деньги видимы (канон §5), «тихих перепокупок» не появляется — наоборот, исчезают громкие ПУСТЫЕ перекупки. Опция «фолдить поведенческий отпечаток вместо строки версии» рассмотрена и отложена: probe-корпус = пол, не доказательство; риск тихого изменения поведения хуже цены ложной перекупки. **Заведена строка 124** (дизайн-вход: (а)+(б)+(в) одним паком, приоритет — перед МАСШТАБОМ, когда перекупки начнут стоить реальных денег; сегодня боль теоретическая — книг в работе нет). ## D39.98 — Ревью и лендинг фронта S2 + дофикса; git-канон v2 (коммитит только оркестратор) разнесён по носителям (04.08). ✅ **1. Приёмка S2 (`ece94ef`) — адверсариальный воркфлоу, 5 линз × независимые скептики с ре-раном (12 агентов), плюс сверка оркестратора глазами по цитируемым строкам.** Подтверждено исполнением: `npm run check` зелёный · виртуализация реальна (31–43 DOM-строки на 2293 узлах, live-проба) · три новые зависимости ратифицированы ДО коммита (STACK_DECISIONS при D39.84, `fbebe33` — дрифта стека нет) · правки макета владельца соблюдены · 11/11 терминов фикстур сошлись с боевой БД по read-only SQL · noindex стоит · `eslint-disable` в коде 0. **Три подтверждённых дефекта:** (а) токен `--font-cjk` пиновал SC-гарнитуры пар-слепо (`tokens.css:66` + безусловное применение к колонке оригинала) — нарушение пина D39.84 «системный стек + lang из данных» и канона общности: ja→ru отрисовал бы кандзи китайскими начертаниями молча, en→ru получил бы CJK-латиницу; generality-тест TSX-only к CSS слеп; (б) `org` в `BankTerm.kind` — тип, которого в движке НЕТ (закрытый словарь `classify.go:15` + `banknote.go:74` = name·place·title·term·nickname), и журнал фронта приписывал `migrate.go:176` перечень, которого в файле нет — изобретённое API, поданное как прочитанное; (в) ключ рядов банка `term.source` ломается на полисемии — движок уникален по (`src`,`sense`,`since_ch`,`until_ch`), `migrate.go:202`. Три находки ревьюеров ОПРОВЕРГНУТЫ скептиками и НЕ предъявлены (RunState-Record «уронит апп» — data-router даёт error boundary, триггер недостижим до S3; sync-сим «дефект» — ратифицированный план, S3 гейчен контрактом; претензия к pre-commit-хуку судила по ещё не залендженному правилу). **2. Дофикс фронта принят и заленден `02872b6`** (батарея пере-гнана оркестратором: 77/77; лендинг-коммит прошёл их pre-commit-хук живьём). Лечения верные: токен снят ЦЕЛИКОМ — подбор гарнитуры делает браузер по `lang` из данных пары (чище предложенного `:lang()`: языковая ветка в CSS — та же пар-специфика); `org` выпилен из типа и скейл-фикстуры, журнальная строка исправлена с грунтом по реальным гейтам; ключ составной (`src·dst·type`) с честной пометкой «заплата» и записью недостающих полей в Ф-14. Гейты укреплены: динамический `import()` закрыт по всем трём швам во всех зонных оверрайдах · тернарник/шаблон-носители литерала в CSS-var-гейте · `generality.test.ts` получил CSS-половину (`:lang()` падает тестом) с явно названной границей «значений стилей тест не видит». Мелочь: ранг `content_filter`=0 (`status.go:152`), фантомный промах фикстуры r2-2 сделан реальным в тексте, дубль счёта тестов снят. Остаточное (info, зона фронта, не гейт): в `main.tsx` статический `no-restricted-imports` выключен целиком (динамо-швы стоят) · `scroll-padding` вне регексов спейсинг-гейта · клеймы, требующие build/browser (`check:full`, axe, медианы скролла), приняты «со слов» — в дереве им ничего не противоречит. **3. Git-канон v2 заленден по носителям (решение владельца 04.08, правка `CLAUDE.md` его рукой): коммитит ТОЛЬКО оркестратор; право самокоммита фронта/платформы (D39.88) ОТОЗВАНО — supersede-запись = этот блок.** Носители: `CLAUDE.md` (таблица зон + гардрейлы) · промты фронта (переписаны фронт-сессией в своей зоне) · `platform/README.md` · подчистки D-лога/PROGRESS. ⚠ **Процедурная нота (D23.3):** синхронизация переписала тела D39.84 п.8 и D39.88 НА МЕСТЕ — снято в т.ч. дословное решение владельца 02.08; это против правила «исторические записи не переписываются». История цела в git (`2b166b7`, pre-rewrite HEAD); авторство подчистки — на подтверждении владельца; впредь supersede — только пометкой в карте + новым блоком. **4. Открыто на владельце (+2 к списку D39.97):** confirm/deny двух «решений владельца 04.08» из журнала фронта («+» в левой панели закрывает половину Ф-7 · референсы возвращены на диск) · авторство подчистки D-лога (п.3). **В дереве появились нетрекнутые артефакты банк-арбитража** (`docs/research/24-bank-arbitration.md` · `eval/bank_arbitration/`) — заход строки 5, судя по всему, пере-исполнен; НЕ залендены, ждут отдельной приёмки. (04.08.2026, оркестратор №12). ✅ ## 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.101 — ЗАКРЫТИЕ СЕССИИ №12 И ПЕРЕДАЧА №13: доки актуализированы и подрезаны, банк-промт заархивирован; первая задача №13 — приёмка банк-арбитража (04.08). ✅ **1. Итог №12 одной строкой:** пак стандартов + дофикс archguard приняты и залендены (D39.96/97) · фронт S2 + дофикс (D39.98) · контракт API v0 в форме OpenAPI, строка 95 закрыта (D39.99) · решения владельца + платформа открыта промтом P0 (D39.100); 16 лендинг-коммитов (`e8d4ac0`…`0e64efe` — 7, бэкенд; 8-й в диапазоне `ece94ef` — коммит самой фронт-сессии по старому канону · `02872b6`…`94a24b7` — 9, фронт/контракт/платформа/доки); методологический урок сессии — анти-паттерны приёмки (владелец 03.08) — вписан в промт оркестратора и отработан: три контрактных пасса дали 19/19 подтверждённых находок при нуле опровергнутых. **2. Актуализация закрытия:** CURRENT-STATE сжат (4 сессионных буллета → передача + сводка; «Курс» → дайджест с указателями — числа закрытых паков живут в D-логе, дублирование снято) · `BANK_ARBITRATION_RESEARCH_SESSION_PROMPT.md` исполнен и заархивирован с баннером (`archive/prompts/`) · README: карта (контракт 14, платформа с промтом и журналом), активные промты (бэкендного НЕТ; фронт S3 — замок открыт; платформа P0), стейл-хвост о прерванном заходе банка снят · ПТ-реестр актуализирован (D39.100 п.4). Хроника PROGRESS НЕ слайсилась — резать эру D39.59+ рано, она живая. Счёт очереди пере-снят с ЯВНЫМИ определениями (строго = ячейка ровно «бэкенд» → 54; широко = содержит «бэкенд» → 67); прежние 58/66 в D39.99 считались префикс-матчем — историческая нота не переписывается, определения отныне в строке счёта. **3. Очередь №13 (по слову владельца):** (i) **приёмка банк-арбитража** — артефакты в дереве не залендены (`research/24` · `eval/bank_arbitration/` · черновик в `archive/reports/`; итог **$0.1073**, ⚠ арифметика пинга внутренне бита — сверить; потолок ратифицирован $1.20 против $1.00 в пинге; при лендинге поправить путь промта в шапке `research/24`); норма — адверсариальная приёмка, экспериментальные клеймы с репликацией (хотя бы редуцированной), лендинг одним атомарным заходом отчёт+харнесс+пинг с ревью-шапкой; (ii) **бэкенд-доработки по бэклогу**: выдать промт пака экрана 46 (дизайн заморожен D39.92 п.1+D39.93; фикстура 113 ПЕРВОЙ; денежный шаг ТОЛЬКО с подписью) · малый пак tools/go.mod (D39.97 п.4) · блокеры контракта 99/100/101/103/125 — промтом(ами) по готовности; (iii) вахта deepseek-v4-pro (триггер >05.08 НАСТУПАЕТ; реестр 108); (iv) **приёмка P0** — сессия успела ОТРАБОТАТЬ в ходе закрытия №12: отчёт и дизайн-ответы К-4/К-7/К-12/П-5 (предложениями, ратификация — оркестратор) в `platform/docs/platform-PROGRESS.md`; клеймы журнала («make check зелёный», healthz против живого Postgres 18.4) — СО СЛОВ, перепроверить исполнением; дерево `platform/*` целиком, включая модифицированный `go.mod`, не заленжено — не трогать до приёмки; свип трёх открытых вопросов (один — владельцу: авто-резюме после сброса лимитов) · лендинг S3 при её запуске (свип зонных журналов на «решения владельца» — норма D39.99 п.4). **4. Грабли преемнику (проверено на себе):** пермишен-классифаер блокирует сорсинг `.env` — живые пробы промтом бэкенд-сессии или `!`-командой владельца · счёт очереди ТОЛЬКО скриптом по таблице (ручной список «скоро» недосчитывает жирные веса) · cwd в Bash-вызовах липнет между командами — пути абсолютные или с `cd` в начале · чужое незакоммиченное в дереве (артефакты арбитража) не трогать и не «прибирать» · голову D-лога и шапку PROGRESS сверять грепом перед закрытием (отставание головы — известный класс дефекта). **5. ДОБОР (тот же день): владелец поймал «актуализацию» на частичности — исполнен ПОЛНЫЙ док-свип** (6 сканеров по кластерам, 89 находок: 17 operative-wrong · 42 stale-pointer · 2 архив-кандидата · 28 nice-to-have; 11 файлов чисты). Применено ~60 правок по 15 файлам: CLAUDE.md (координация зонных журналов · контракт в источниках · онбординг платформы) · глоссарий +7 терминов (Платформа · S/P-нумерация · зонные журналы · контракт 14 · провенанс · ПТ-N · paused) · PROGRESS (два ПОТЕРЯННЫХ хроникальных заголовка D39.97/98 восстановлены — мои же правки их съели; пять 95-указателей → контракт 14; штампы; амендмент-маркеры «короткой приёмки»; разрыв таблицы склеен) · голова D-лога: два supersede-указателя (D39.88 · норма 30.07) · 09-target (стейл isRuTarget → D39.64; баннер пост-D39.101; ссылка на архив) · 10-prompt (пар-пути; язык промпта = Р6 отрицателен; Q4a/Q4c измерены; снапшот-фолд построен) · 13-tech-debt (9 закрытий стрелками «→ Dxx») · полигон-промт (P4-хвост ЗАКРЫТ ×2 · пре-рег-исключение · указатели) · ПТ-реестр (6 + квалификация STACK-путей) · ревью-шапки research/16 и /23 (контракт ратифицирован) · фронт-промты (S3: замок открыт, строка 95 снята; стоящий: 5 датированных поправок D39.99/100) · **S2-промт заархивирован** (`archive/prompts/FRONTEND_S2_SESSION_PROMPT.md`). **Отложено до приёмки P0 (зона живая): 2 правки `platform/README.md`** (стейл «промта ещё нет»; «живая стоимость» против D39.84) и архивация P0-промта — №13 при лендинге платформы. Урок — в памяти оркестратора (`doc-actualization-means-full-sweep`). (04.08.2026, оркестратор №12). ✅ ## D39.102 — ПРИЁМКА БАНК-АРБИТРАЖА (оркестратор №13): research/24 ПРИНЯТ — все числа чисты пере-раном; консилиум закрыт классом, бэкенд-доработки спланированы строками 128–132, 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.77–0.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** — кап инъекции не считает маркер/гендер-ноты: авто-книга превышает бюджет ~на 40–60% (биллинг компенсирован резервацией по рендеру); фикс двигает 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.103 — РЕШЕНИЯ ВЛАДЕЛЬЦА 04.08 (приёмка №13): фикс-пак 128 санкционирован, проба редакторского провода санкционирована, фронтир-«go» дан, алиасы отложены; ДВА ПРОМТА ВЫДАНЫ (04.08). ✅ **1. Фикс-пак банка (строка 128) САНКЦИОНИРОВАН** — гейт вопроса №4 D39.102 п.4 снят. Промт `docs/BACKEND_BANK_CLUSTER_FIXPACK_SESSION_PROMPT.md` ($0-пак; холодный аудит перед выдачей: 34 опоры подтверждены, 8 дефектов вправлено). Эффект верифицируется следующим холодным прогоном — план верификации обязателен в отчёте пака. **2. Проба редакторского провода САНКЦИОНИРОВАНА** — промт `docs/POLYGON_EDITOR_WIRE_PROBE_SESSION_PROMPT.md` (≤$0.30; аудит перед выдачей: 17 опор, 9 дефектов вправлено). Армы: изолированный контроль без блока (его не было никогда) · закон · цена неверного закона · метаязыковое окно (оговорка области + leakage) · посаженные дефекты черновика «исправлено X из Y» + межоконная консистентность. Уточнение к экспам: rerun2/мини-прогон гоняли edit-волну с ЖИВЫМ канон-блоком; не было изолированного контроля и двухсекционки в платной волне. **3. Фронтир-пасс: «go» ДАН** (data-sharing на ключе OpenAI отключён — слово владельца; ≤$0.50). Кандидаты: deepseek-v4-pro + свежие OpenAI, названные владельцем как «терра»/«луна» — слаги/цены ТОЛЬКО live-фактчеком, цены в отчёт и пинг. **4. Мини-голд алиасов (§E-1): ОТЛОЖЕН до первого длинного прогона** (на 10-глав стенде фарм тощий) — вопрос (i) D39.102 п.4 закрыт. **5. Находка диалога:** противоречие инструкций редактора — `editor.md:7` «СТРОГО по приведённому глоссарию» против `editor_unverified_header` «вправе перевести иначе». Снято доктриной D39.104. ## 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.105 — ЗАКРЫТИЕ СЕССИИ ОРКЕСТРАТОРА №13 И ПЕРЕДАЧА №14: приёмка банка исполнена, доктрина инжекта ратифицирована, два промта выданы, полный док-свип (04.08). ✅ **1. Итог №13:** приёмка research/24 — ПРИНЯТ, все числа чисты пере-раном тремя контурами (D39.102, `271f8b0`) · решения владельца: фикс-пак 128 и проба редакторского провода санкционированы, промты выданы с двойным аудитом (факты file:line + понятность холодным исполнителем), фронтир-«go» дан, алиасы §E-1 отложены (D39.103) · **доктрина инжекта ратифицирована** (D39.104) · строки 128–132/134 заведены, строка 5 пере-скоуплена. Лендинги: `271f8b0` · `d653aa1` · закрывающий. **2. Док-свип закрытия (норма «актуализация = полный свип»):** 5 сканеров по кластерам (корень · PROGRESS · architecture · research · experiments), ~40 находок применено: передача №13→№14 и счёт очереди скриптом (**109** строк · бэкенд **60** строго / **72** широко · «скоро» **24**) · supersede-указатель доктрины D39.104 в шапку этого файла и баннеры 09-target/10-prompt/06-registry/12-style/research 15·20·24/experiments README·09-pilot · глоссарий +«доктрина инжекта» · норма «без саги» вписана в промт оркестратора · **хроника №9/№10 и закрытые бэкенд-записи срезаны в `archive/PROGRESS-2026-08-01-02.md`** (PROGRESS ~356 → ~230 строк). Отложено до приёмки/лендинга P0 (зона живая, №14): 2 правки `platform/README.md` · правка «кода нет» в `14-api-contract/README` · архивация P0-промта. **3. Очередь №14 — CURRENT-STATE (первым — приёмка P0 платформы). Грабли преемнику:** перед запуском любого полигон-скрипта читать код на сетевые вызовы (`--score`/`score_f1` офлайн; голые запуски ПЛАТНЫЕ; `load_dotenv` на импорте — стабить при офлайн-ре-ранах) · перед пере-ранами — sha256-манифест сырья и бэкап харнесса (gold.jsonl пере-собирается байт-в-байт, детерминизм подтверждён) · пинг полигона может врать арифметикой при чистом леджере — сверять из сырья · счёт очереди ТОЛЬКО скриптом · git — только pathspec-форма · чужое незакоммиченное (`platform/*`) не трогать. ## 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) · контроль без блока ломает 5–12/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. Строки **135–144** заведены (денежный пакет шва 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 новых, миграции 00004–00008) ПРИНЯТО и заленжено. ⚠ **Факт, который доки завышали:** журнал зоны объявлял «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.91–105, всё закрытое) — НЕ сделан, потому что файл держит живая полигон-сессия, а срез это перекладывание сотни строк в контендящемся файле. Режет тот, кто лендит полигон. Туда же: архивация отработанного `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:08–00: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 §16–17 (HTTP/1.1-escape как диагностика тихого усечения · assistant-prefill continuation вместо ре-рана) · **восстановление Приложения А контракта после инцидента** — решение владельца. Счёт очереди пере-выставлен скриптом: **123** строки · бэкенд 64 строго / 82 широко · «скоро» 33. **6. Норма изоляции панелей перенесена из D-лога в промт оркестратора** — она жила только в ноте, а читают промт. Там же пустой заголовок «Текущее состояние и очередь — НЕ здесь» получил тело: где именно они живут и что числа берутся скриптом. **7. Что НЕ сделано и почему.** Срез хроники PROGRESS в архивный слайс (живой хвост несёт №11–№13, эра D39.91–105) — не делал: файл прямо сейчас держит полигон-сессия, а срез это перекладывание сотни строк в контендящемся файле, то есть способ потерять чужую работу второй раз за сутки. Режет тот, кто лендит полигон. Из 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. Хвосты в трекер:** строки **149–153** заведены (эксп-22 · Sol-арбитраж · отказной режим связки · слипание абзацев · чистый контраст мандата); строки **12 и 82** получили $0-прототипы эксп-21 (`battery.check_numbers` — синтетика 16/16 · `battery.check_gender` по карточкам сида, 86–112 сверок/арм) — указатели внесены в их тела, сами строки живы (движковые гейты не построены); кредиты 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 со второго прогона) · **заведены 154–159** (одноруновая голова семьи · скрипт-слепой резолв к 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 не снимается — оценочные вердикты по-прежнему калибруются внешним семейством, первичны пере-ран и исполнение; (г) каждый кодовый промт несёт 1–3 ПРЕДМЕТНЫЕ оси самопроверки по характеру работы (бэкенд — общность §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.40–1.46→0.05–0.07 c — таблица §2.4 воспроизведена); (б) фикс-лист F1–F6 (несущее: **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.08–0.16 c против 1.42–1.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 = ::`, манифест `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. Строки 160–162 (структура глав по research/27) заведены до лендинга тем же днём. **4. research/27 «Определение глав» принят ФАКТУРОЙ** (веб-ресёрч · панель двух моделей · карта по коду · жизненный цикл дерева §3а · развилка парсинг-стадии закрыта словом владельца: оригинальные названия, платный перевод со старта прогона; мини-сессия названий §5а — редакторский слот · инъекция банка · двухфазность вокруг подписи). **Дизайн стройки НЕ ратифицирован** — отдельное решение при постановке строк 160–162 в очередь. **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 закрыт ложным клеймом**, дедлок books↔run_attempts 258/300 через реальные API + транзиентный 40P01 карантинил проекцию навсегда · F3/F4 — два незапиненных денежных свойства (мутации пережили полную батарею) · **F5 — settle по устаревшему снапшоту свипа возвращал холд целиком потратившему прогону** (исполнением). (б) Дофикс F1–F8 + селф-ревью сессии нашло **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 +15–25% → вверх; сверен). (д) Формы: MaxAttempts:1 · холд+прогон+попытка+очередь в одной транзакции · ExecStopPost-маркер вместо D-Bus · ceiling-шаблон из конфига. (е) **Решения по вопросам зоны (владелец делегировал 09.08)**: `default_chapters` = верх шкалы ОСТАЁТСЯ (дробный дефолт непонятен; компромисс «весь баланс под одну книгу» принят осознанно) · **503 внесён в контракт** (0.2.0→0.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). ✅