textmachine/docs/PROGRESS.md

229 KiB
Raw Blame History

Журнал прогресса

⟶ ТЕКУЩЕЕ СОСТОЯНИЕ (на 2026-08-23, голова D39.156 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). ОЧЕРЕДЬ №19 (единственный носитель — здесь; роль передана 22.08, №18 закрыт D39.155): (а) P7 платформы ПРИНЯТ С ФИКС-ЛИСТОМ и ЗАЛЕНДЕН, сессия закрыта владельцем 20.08 (D39.153; зонный фикс-лист из тринадцати пунктов плюс врезанный первым блокер свипа — пинг №18 в platform/docs/platform-PROGRESS.md; ⚠ прежний врезанный пример «первым ContractVersion 0.3.0 при формах 0.4.0» СНЯТ — константа поднята и запинена гейтом против канона лендингом 31f1f82) · (а1) контракт API v0 0.4.0 РАТИФИЦИРОВАН (D39.152; PD-327 закрыт; зеркало фронта отстаёт ратифицированно, при разморозке cmp) · (б) лендинг петель полигона (фаза Д) — ОТКРЫТ: приёмка ФАЗЫ у параллельного оркестратора, лендинг за этим; ⚠ в дереве живая НЕЗАКОММИЧЕННАЯ работа полигона: 13 изменённых файлов (+2166/79) и 6 новых, состав — пинг №20 в секции «Полигон». Индекс на 22.08 ЧИСТ (git diff-index --cached HEAD → 0; прежняя редакция писала «частично ЗАСТЕЙДЖЕННАЯ» — испр. аудитом доков). Не трогать и не «прибирать»; сессия жива, стейдж может появиться в любой момент, поэтому форма коммита остаётся строго pathspec · (в) дофикс-пак P8-FIX ПРИНЯТ И ЗАЛЕНДЕН 22.08 (D39.154, лендинг 31f1f82): блокер свипа закрыт четырьмя механизмами и пере-проверен живой пробой оркестратора, деньги сошлись двумя путями из сырого леджера; мои четыре строки регистра — PD-371PD-374. ⚠ Порядок вышел ОБРАТНЫМ этой очереди: промт дофикса требовал запуска ПОСЛЕ читающего пака, запущен был раньше. Цена перестановки, названная мной вслух 21.08 («блокер живёт всё время читающего пака»), тем самым НЕ заплачена — это лучший исход, чем планировалось; в минус — §4.7 (аддендум релеем) пуст и читающий пак пойдёт по только что переписанному коду. ЧТО ДАЛЬШЕ С ПЛАТФОРМОЙ — решено 22.08 при актуализации доков, порядок такой. (1) Читающий пак P8-REVIEW (platform/docs/PLATFORM_P8_REVIEW_SESSION_PROMPT.md) — следующая работа зоны, запуск по слову владельца. Промт ЖИВ и переписан 22.08 в трёх местах, которые дофикс сделал ложными: «два денежных дефекта не заведены» (заведены и закрыты — PD-333/PD-334, вместо них дан их КЛАСС и живой образец PD-372) · приор оси 4 «наблюдаемость без ручки» (ручка построена ⇒ вопрос стал «достаточна ли она») · абсолют «оси ни в один дифф не входили» (сужен: системного разбора не было, кусками входили). Довод ЗА пак — базовая ставка, а не вера: первый же серьёзный взгляд на ОДНУ из четырёх осей (очередь, 21.08) дал пред-продовый блокер, проживший два пака под статусом fixed. Осей осталось три, и на двух из них лежат деньги и вход. (2) ПОРЯДОК РАБОТ ПО ШВУ — ратифицирован D39.156 (23.08), исполняется строго так. (2а) Движковый пак — АКТИВНЫЙ ПРОМТ ЗОНЫ (BACKEND_SEAM_PACK_SESSION_PROMPT.md, выдан 23.08, запуск по слову владельца): конвенционные дефолты mined_delta/mined_rejects · $0-глагол приёма правок банка · путь к файлу ключей аргументом (снимает блокер 211) · строгость сид-загрузчика · путь артефакта и версия документа в status --json (снимает движковую половину 213). (2б) Контрактный минор — ПОСЛЕ него и ОДНИМ куском: снос отменённой пер-термной модели + новая дверь, тело которой выводится из словаря глагола, а не сочиняется до него; сюда же строки 200, 203 и хвосты компаньона. ⚠ Гигиена держится сознательно: снести дверь сейчас и завести в следующем миноре — две перегенерации фронта вместо одной; фолбэк объявлен — если пак застрянет надолго, гигиену шипить отдельно. (2в) Платформенный пак — последним: воркер решений → глагол перед возобновлением · путь ключей из конфига · снятие дубля вывода пути · дев-супервизор на тот же механизм ключей. (3) sqlc отдельной сессией (решение владельца 22.08, BACKLOG.md П-19, граница 41 запрос в пяти файлах) — механическая работа, не мешать её с содержательной. (4) Живой прогон книги насквозь — строка 202, гейт прежний: ПОСЛЕ холодного прогона движка. ⚠ На владельце и блокирует пункт своей темы: развилка владения book.yaml (строка 199а, зона сдала четырьмя вариантами с ценой, рекомендация зоны C или D+B) — без неё труба доставки правок банка не строится, а верхнего края у неё теперь нет вовсе · (г) контракт: сквозная полоса прогресса (строка 200, слово владельца 20.08) и хвосты релеев (203) едут тем же минором, что и дверь приёма правок банка — состав собирается ПОСЛЕ ратификации нормы шва, см. пункт (2) · (д) свободные бэкенд: 160 Этап 0, фикс-лист ФЧ строкой 197 (носителя-сессии нет по слову владельца); ⚠ строки 176/181/187 СНЯТЫ с таблицы при лендинге 20.08 — они закрыты ещё D39.149, а очередь всё это время звала 181 свободной работой (поймано ревью доков; остатки живут строками 194/196/197) · (е) фронтовый фрагмент pre-commit хука получает норму «жалуйся владельцу» — решение владельца 21.08: ДА, исполняется первым касанием зоны (пинг в её журнале). Открытые обязательства, которых нет больше нигде: веса pro — строка 172-г НЕ закрыта, прогон мерил классификатор на flash; дешёвый вход — спросить полигон, говорят ли что-то данные фазы Д (там pro гоняется редактором), отдельный замер не покупать без этого · docs/experiments/00-provider-quirks.md несёт протухшие цены DeepSeek («не изменились, flash $0.14/$0.28») — зона полигона, чинить пингом · санкция на платный прогон в архивном промте пака честности была РАЗОВОЙ · норма плотности комментариев — ОТВЕЧЕНА владельцем 21.08: режем ВОДУ, а не длину — счёт строк «пиши одну-две» негодный гейт и снят; уходит пересказ решений, провенанс и изложение исследования вместо ссылки, остаётся всё, что из одной функции не выводится, сколько бы строк ни заняло (норма переписана — 12-go-style-notes §1; PD-255 платформы этим закрывается). ⚠ Метод-урок: её хендофф объявил «вопросов на владельце нет», а строка регистра просила именно решения — вопрос был закрыт ОБЪЯВЛЕНИЕМ, поймано ревьюером полноты выгрузки. Оркестраторов ДВА (решение владельца 07.08): этот — движок/платформа/фронт/доки; параллельный (РОЛЬЮ, без номера — счётчик один, D39.112 п.6) — приёмка полигона. Одновременно не запускаются; CURRENT-STATE ведут оба, чужие строки не трогают. Норма изоляции панелей — D39.113, гардрейлы в CLAUDE.md.)

  • Эра №15 закрыта — семь приёмок, все ПРИНЯТЫ и залендены; лента, коммиты и разборы — D39.109123 (D-лог) и реестр нот architecture/05-decisions-index.md; снимок прежних бюллетеней этой шапки — архив-слайс -08-02-04.
  • ЖИВОЕ: полигон — фаза Д ИДЁТ (заказ 10.08; деньги санкционированы 15.08 напрямую полигону — ⚠ числа потолка в носителях расходятся, фактическую цепь сверить при лендинге петель; ja-книга enkan_no_hate_ja; при ратификации фазы Д в D-ноту: декой-правило + обязательный кросс-семейный опровергатель приёмки — одобрены 10.08; свежие фриз-коммиты полигона в дереве — НЕ трогать) · платформа и контракт — статус в строке выше, здесь НЕ дублируется (один носитель на факт) · фронт ЗАМОРОЖЕН (D39.136 п.2 + D39.147: морозится ДАЛЬШЕ лендинга P7 — слово владельца 17.08; P7 зону НЕ размораживает, S5-промт не выдаётся, разморозка отдельным словом по достижении сквозного пути; перечень первого касания зоны — синк зеркала на ТЕКУЩИЙ канон (не на «0.3.0»: канон с тех пор ушёл на 0.4.0 и уйдёт дальше строкой 200; оба минора уедут в ОДНУ перегенерацию — D39.152 п.7) + перегенерация типов + моки + гейт утечки конвейера + ФС-1..12 + Ф-63/Ф-28 + фразы В-11 по словарю кодов — не отменён, ждёт разморозки) · закрытые стройки эры — лентой нот: эмиттер D39.131 · P5/P6 D39.130/132 · migrate D39.134 · S4+0.2.3 D39.135 · DeepSeek-репин D39.137 (тела — D-лог и слайсы).
  • Открыто на владельце: развязка git с origin (локальная линия ИСТИННА, force-push его рукой; не пуллить) · Приложение А контракта (148: фразы — по словарю кодов 0.3.0, структура готова) · продуктовое слово «остановлена: лимиты» (В-3) · В-4/Ф-30 (глава без заголовка — движковая половина строка 160) · мини-проба флора 44 (одобрена, промт не выдан; число — после ре-пробы 188) · подпись денежного шага 46 · лист В-3+К-6 · авто-резюм paused (вопрос платформы) · схема time-based DeepSeek (доклад — архив-слайс PROGRESS-2026-08-14-15; рекомендация: пик оставить + операционное правило «прогоны в долины», scheduler не начинать без ответа вендора об отметке тарификации) · вход ратификации фазы Д: посылка «dspro дешевле glm» в пике ПЕРЕВЁРНУТА (×1.26 дороже, D39.137 п.4) · возражение Sol по проходу tier эксп-23 (⚠ расхождение носителей СНЯТО 22.08 срезкой: второй носитель — фраза «возражение снято, и владелец назвал причину» — уехал в слайс archive/PROGRESS-2026-08-10-15.md вместе с хроникой, и её довод там читается целиком: Sol судил СВОЁ семейство, что запрещено D13.3. Живым остаётся ровно этот пункт на владельце; подтвердить или снять — при лендинге петель фазы Д) · фронт-вопросы зонного журнала: В-7 (плотность; держит Ф-54) · В-8 (слово состояния в дереве) · В-9 (языки интерфейса — механизм готов, ПТ-36) · Ф-38 (вкладка «Замечания»). Закрытые пункты листа (PD-104 · В-10 · В-11-форма · Ф-56/57/61/62/63 · Ф-28 · ПТ-33-граница · 116 · 126 · 172-пин · PD-203 · санкции фазы Д · дизайн 160/161 · title) — в нотах D39.136145, здесь не держатся.
  • Сделано (сводно) — снимок ленты закрытых эр в archive/PROGRESS-2026-08-04-09.md; детали — D-лог и слайсы.
  • Курс: ОБЩНОСТЬ → КАЧЕСТВО БАНКА → ПАКЕТ-ЧЕКЕРОВ (D39.5978) → ФРОНТ-ЭРА (D39.81100: зоны живые, контракт API ратифицирован) → шов/платформа/движковые блокеры построены (D39.106123). Хвосты курса живут строками: 16 (полная цена холодного старта не измерена: у coldrun-a/coldrun-b нет НИ ОДНОГО редакторского вызова, хотя сама edit-волна отработала и оплачена — 58 вызовов волновым драйвером 2325.07 на малых прогонах, плюс 648 до драйвера; ⚠ прежняя редакция писала «не гонялась НИ РАЗУ» — абсолют ложен, испр. оркестратором №19 по леджерам ~/books/gu-zhenren/**/*.db; держит и оси голоса 13б/24) · 46 (дизайн заморожен D39.92/93, промт ждёт выдачи) · coldrun-b фаза C заморожена чекпойнтом легитимно (D39.86; эталон денег/поведения — coldrun-a, read-only); развилка 0731 решена и исполнена (D39.87/91, код 553f1a3).
  • Горизонт (D39.62/67, освежён D39.95): ДОБОР ИДЕАЛА (первым прогоном: оси голоса 24 · авто-режим · цена 16; жильцы ролей решаются ДО прогона эксп-22 — строка 149 · веса K1K12 13а · вне-претрейн чекпоинт 55; остаток арбитража банка = рецензент спорных кластеров при ре-пробе 74 — D39.102) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 6268, 85) → Ф3 ридер-IDE (6971). Стоячие: ToS-триггер 25.10 · Ш-2 до go1.27 (⚠ + x/text Unicode 17 тем же тулчейном — строка 119, реестр §Б-108 справочника якорей) · платные прогоны разблокированы (проба провода — D39.97, конфиги 112 залендены).
  • Стек (полная карта роль→модель→конфиг→квирки — STACK.md, D39.126): draft deepseek-v4-flash thinking-ON low ⚠0731 → терминолог (та же модель) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (топология ПОДТВЕРЖДЕНА при неразличимости жильцов — D39.117; закон-блок ОБЯЗАТЕЛЕН — строка 134; glm-5 резерв; вахта маппинга эффорта pro — §Б-108) → судья gemini (Ф2, в движке НЕ построен — строка 33); канал B Mistral+grok; ~$0.85/ранобэ (D30.4, пере-калибровка при следующем платном прогоне). ⚠ Вендор-факты 1315.08 (пере-пин ИСПОЛНЕН и ПРИНЯТ, D39.137): таблица цен запинена ПИКОМ (flash 0.44/1.32 · pro 1.32/3.96/кэш-хит 0.044 за 1M; счёт шиппинг-c1 = 100% DeepSeek ⇒ ×4.24.4 в пике / ×2.12.2 в долине — замер по трём прогонам); ⚠ про эффорт pro НОСИТЕЛИ ПРОТИВОРЕЧАТ и это НЕ РЕШЕНО (испр. 23.08 №19: прежняя редакция утверждала здесь одну сторону — «эффорт стал настраиваемым low/high/max, квирк 3а устарел»): квирк-канон и STACK.md говорят «ручки у pro НЕТ», замера поведением после 13.08 нет ни у одной стороны, и по гардрейлу владельца такое закрывается ВЕНДОР-СВЕРКОЙ, а не выбором стороны; до неё в силе канон, разбор — STACK.md строка редактора; ⚠ ВЕСА pro сменились под тем же слагом (V4-Pro-0813, класс D39.61) — вахта-риг готов (остаток 172); ⚠ посылка интерим-редактора «dspro дешевле glm» в пике ПЕРЕВЁРНУТА (×1.26 дороже — вход ратификации фазы Д, D39.137 п.4); покупки фазы Д на deepseek до 16.08 16:00 UTC — по старым ценам. ⚠ ВЕСЬ банковый контур (банкнота+терминолог+классификатор) в shipping-c1 НЕ включён — жив ран-локальным конфигом книги (строка 140; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping за budget_usd: 0 (STACK.md §примечания).
  • ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). СЧЁТ ОЧЕРЕДИ на 22.08 (скриптом по таблице — python3 docs/scripts/counts.py; обновлять при каждом лендинге): всего 169 строк · зона бэкенд 78 строго / 118 широко (175 пере-скоуплена D39.134; 176/177 заведены 15.08; 178 — D39.136; 179 ЗАКРЫТА D39.138; 180/181 — D39.137; 182 — wire-батч, аудит 15.08; 183187 — контракт-ревью 28, D39.138; 188190 — аудит бэклога, D39.140; 191/192 — модель подписи банка и пост-ридинговый цикл, D39.144; 193 — молчащие дыры выдачи, D39.147; 194196 — приёмка пака честности, D39.149; 197 — фикс-лист ФЧ, D39.150; **198204 — приёмка P7 и слова владельца 20.08, D39.153; 205 — слепота гейта якорей, аудит 21.08; 206207 — приёмка P8-FIX, D39.154; 208209 — аудит доков 22.08 (потеря глоссария на Gemini, риг живых проб); 210 — трассировка цепи банка 22.08 (род не производится авто-путём); 211213 — консилиум шва 2223.08: ключи провайдеров не доезжают до движка на SaaS (блокер 202), нестрогий загрузчик сида, дубль конвенции пути у платформы; 214216 — разбор журнала трассировки банка: подпись не оставляет следа, $0-репин недостижим с платформы, три несущих сценария не проверены живым движком) (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · блокеров очереди 0, платные прогоны разблокированы · «скоро» 46 (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
  • Архивы хроники: archive/PROGRESS-2026-07-04-10.md (D31) · -10-13 (D39.6-гигиена) · -13-25 (стройка паков 1116, rerun2) · -25-31 (паки 1720 · мини-прогон · полигон-пакеты 58 · ToS · холодный прогон; D39.2658) · -08-01-02 (сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.5990, срез D39.105) · -08-02-04 (сессии №11№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91105 + снимок шапки эры №15) · -08-04-09 (пинги закрытых паков эры №15) · -08-14-15 (закрытые бэкенд-записи №1617: эмиттер шва · migrate · пере-пин DeepSeek; вынесено D39.139). Записи ниже — живой хвост (№16+, эра D39.124+; подрезка D39.139).

Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора)

Закрытые строки здесь НЕ хранятся — они уходят в D-лог с номером решения. ID строки стабилен навсегда (не перенумеровывается и не переиспользуется — на «строку N» ссылаются доки и промты, D39.80). Вес: «блокер-очереди» = мешает текущему шагу · «скоро» = ближайшие 12 касания · «когда-нибудь» = записано, не потеряно. Длинная строка начинается жирным лидом — таблица сканируется по лидам; «диспозиция сверху, археология вниз», ячейка >800 байт — кандидат на выселение в architecture/13-tech-debt-anchors.md (D39.125 п.3/D39.126). ⚠ Счёт очереди — НИЖНЯЯ граница долга, а не потолок: трекер содержит только замеченное, и 02.08 дважды за $0 свежие глаза вытащили из кода дефекты, которых в нём не было (релей фронта → строки 99/100/102; приёмочное ревью → третий шов в 104 и честность в 105); ленту шапки читать как «долга нет» неверно (D39.89). Зонные бэклоги (решение владельца 02.08, D39.84): фронт и платформа ведут СВОИ бэклоги (frontend/docs/BACKLOG.md · platform/BACKLOG.md) — их строки сюда НЕ заходят; здесь движок/полигон/доки, включая движковые стыки фронта (зона «бэкенд», как 99102); строки 96/97 переехали в платформенный (П-1/П-2), надгробия-указатели сохранены.

ID Хвост (одной фразой) Зона Вес Чем закрывается Источник
— ВИСИТ НА ВЛАДЕЛЬЦЕ —
2 Четыре вопроса границы «алгоритмического идеала» (Annotator · семантический судья · ja→ru §B5 · ru-target до/после) владелец скоро (гейт «добора идеала» перед МАСШТАБОМ) отдельное решение D39.33, D39.38
4 Ре-чек ToS по триггерам — первый ИСПОЛНЕН 31.07, дельт вердиктов нет (D39.57); предмет Google-мониторинга перевешен на цепочку договора (PUP · Additional ToS · Google APIs ToS); следующие: квартал 25.10.2026 · первая лейблованная книга · любая правка accepts_labels владелец/полигон скоро (следующий триггер 25.10.2026) отдельное решение (правило) D39.32, D39.57
5 Арбитраж банка: замер ИСПОЛНЕН и ПРИНЯТ (research/24, D39.102). Закрыто классом: равноправный совет · кросс-модельные веса уверенности · self-consistency · селекция из вариантов · отказ-сигнал ⟦TM-NO-DST⟧; Q2 отвечен — семейства не окупаются (C3SC=+3 и все три добычи = один кластер; glm-соло 25/45 > совет 23/45). ОСТАТОК СТРОКИ: рецензент-другого-семейства ТОЛЬКО на спорных КЛАСТЕРАХ (слот при ре-пробе 74), роутинг целыми family/series-юнитами (G4), эмиссия рецензента — та же draft/⟨проверить⟩. История захода — D39.89/90/101/102 полигон/ресёрч ОСТАТОК ГЕЙЧЕН ре-пробой 74 (D39.102 п.2) замер (остаток) → решение D39.89, D39.102
6 Строка Gemini в accepts_labels — ждёт слова владельца о подписи интерпретации сужения как разрешения; ре-чек 31.07 понизил приоритет: подпись даёт ПРАВО, но не судью 18+ (фильтр неконфигурируем D22.6 + обход запрещён договором) — возвращаться при вопросе, требующем именно права владелец когда-нибудь отдельное решение D39.32, D39.57
7 Q2 «редактор под sexually-explicit» (grok-4.3 интерим · glm-5 после сверки ToS Z.AI · mistral вон) владелец когда-нибудь (перед первой explicit-книгой) отдельное решение D39.27 п.7
8 D22.7 пер-чанковый L3-скрин — несня­тое предусловие первой erotica-книги в проде, отдельный гейт владелец когда-нибудь отдельное решение D22.7, CURRENT-STATE (оркестратор)
9 Промпт-слой под лейблом: лейбл не доезжает до промпта — должны ли переводчик/редактор знать о свойстве контента владелец когда-нибудь отдельное решение CURRENT-STATE (владелец, из пака-17)
10 Дата создания аккаунта OpenAI (низкий приоритет, OpenAI вне цепочки) + применимость OpenAI Sharing & publication policy 2022 (quirks:128) владелец когда-нибудь отдельное решение D39.32
11 Флип coverage-гейта (enabled:false, D12-Q4) — за подписью владельца ; при флипе решить судьбу v1.1 quote-absorption (D12-Q1, Python-first лок-степ) владелец когда-нибудь отдельное решение D39.34(2)
12 postcheck_gate в hard-gate — требует пере-замера recall (recall чекеров измерен и низок); ⚠ «fn=0» демоции #10 класс-вакуумен на labels (ноль одно-Han-позитивов, D39.78) — пере-замер обязан добрать одно-Han-позитивы, на «fn=0» не опираться; одно-Han-класс при gate-on вне гейта (Unverified+Demoted); тем же решением строится HARD-value-детектор 成/万 (Q3 §6 — честный hard-gate требует value-чека; либо раньше при ненулевом потоке value-дефектов добора, D39.79; $0-прототип получен эксп-21: battery.check_numbers, симметричный разбор, синтетика 16/16 — D39.117) · recall существующих гейтов печатал арм C эксп-21 на контаминированном срезе (D39.108/D39.117) владелец когда-нибудь (после фазы 2) отдельное решение D39.34(2), D24.4+D28.1, D39.39, D39.78, D39.79
13 Включение платной петли ремонта + per-class исходы ремонта (схемное решение принимается вместе) — вернуться при расширении классов детекторов и ненулевом остатке; ⚠ при включении: репэйр-гард №5 после #10 слеп на одно-Han-дифференциал (демоция в обоих прогонах ⇒ 0>0 — репэйр, стёрший верно отрендеренный одно-Han-термин, не ветируется; D39.78-ревью) владелец когда-нибудь отдельное решение D39.38, D39.39(а), D39.78, CURRENT-STATE
13а Веса рубрики K1K12 не выбраны (Q1: «по данным фазы B»; фаза B прошла на BWS без весов — выбор нужен к агрегатной приёмке качества книги) владелец когда-нибудь (к пилоту) Ф2.5 / отдельное решение D39.44 Q1, D39.46
13б speech-cue.txt zh НЕ шипить до замера голос-флаггера; замера НЕТ (D39.86): флаггер живёт на ФИНАЛЬНОЙ волне, редакторская волна не гонялась ⇒ оси не считались НИ РАЗУ. Гейт: первый прогон добора идеала С редакторской волной (строка 24) → решение владельца о шипе. ⚠ ФАКТ 22.08, делающий строку жёстче: флаггер выключен НЕ только тем, что волна не гонялась — gates.voice не встречается НИ В ОДНОМ шиппинг-конфиге (grep -c voice backend/configs/pipeline-c1.yaml = 0, то же в арм-конфигах), при том что сам гейт в схеме есть (internal/config/pipeline.go VoiceGate, пак-19/D39.55). То есть даже прогон С редактурой осей голоса НЕ посчитает, пока гейт не включён конфигом — отдельное касание, и его надо сделать ПЕРЕД покупкой прогона, иначе замер куплен впустую. ⚠ rules= в отчёте = «гейт СКОНФИГУРИРОВАН», не «отработал» — до фикса 105 читать по знаменателям replies=. Археология дословно — architecture/13-tech-debt-anchors.md §Б-13б. ⚠ ПОПРАВКА 23.08 (№19): блокер — ПУСТОЙ РЕЕСТР профилей, а не выключенный гейт: заполнить voices:/addresses: может только подпись владельца (internal/seed/seed.go:20-21=Voices and Addresses are the two D21 record types — «no miner emits them»), а при пустом реестре RunVoiceChecks выходит на !reg.HasData() ДО ВСЕХ осей, поэтому нулями отдаются и оси, и знаменатели — «ноль флагов» неотличим от «оси не считались». ⚠ Отдельно: gates.voice отсутствует в backend/configs/, НО в конфигах реальных прогонов (вне git) он ВКЛЮЧЁН — ~/books/gu-zhenren/coldrun-a/pipeline.yaml:68 и coldrun-b:71, enabled: true; дыра не «оператор забыл включить», а «шаблоны репозитория гейт не несут» владелец отложено-до-замера первый прогон добора идеала С РЕДАКТОРСКОЙ ВОЛНОЙ (оси голоса, строка 24) → отдельное решение D39.56, PACK19_BUILD §7.2, чат 31.07, D39.86
14 Четыре data-инженерных флага фазы-2 общности, каждый с рекомендованным дизайном (§5 отчёта): ё-фолд → target-данные (char_fold; смена сигнатуры core-примитива через вердикт-несущий банк, сдвиг memory_version) · segmentation-фолбэк громким (ломает контракт corridor-фолбэка pipeline.go:839-848 + голден-фикстура на нём; лечение — объявить блок в голден-yaml) · Fertility per-script map (калибровка ждёт боевого токенизатора) · source-encoding.txt + Go-реестр декодеров владелец когда-нибудь (следующий пак общности) отдельное решение D39.64, GENERALITY_PHASE2 §5.15.4
86 Мелкие открытые решения одним списком (свип D39.66): echo-семантика дропнутого c-lite-члена (D39.18 — оставить pre-c-lite?) · magnitude-кап тяжёлой CJK-утечки (D38.3 п.4в; сейчас strip+flag) владелец когда-нибудь отдельные решения D39.66, D39.69(feed_cap закрыт §1)
— ХВОСТЫ ХОЛОДНОГО ПРОГОНА (исполнен достаточно, D39.58; Р7 владельца) —
16 Полная цена холодного старта: edit-волна не гонялась НА НЁМ (Р7; на малых прогонах гонялась и оплачена); цена холодного старта измерена ДО редактуры (драфт+банкнота $0.0247/волна · терминолог $0.0060.013/проход). ⚠ Прогон НЕ НАЧАТ и закрыт владельцем как неуспешный на этом этапе (02.08, D39.90) — деньги фазы C не тронуты ($0). Свежие числа с пробы bank-low (10 глав, low на черновике И на бэнк-ролях): черновая волна 20/20 ok. ⚠ АРИФМЕТИКА ИСПРАВЛЕНА 23.08 (№19) по базе прогона ~/books/gu-zhenren/coldrun-b/reprobe/bank-low/guzhenren-bank-low.db, прежняя редакция не сходилась: вся ДРАФТ-стадия $0.031639 (из них flash $0.021289 + pro $0.010350 — прежняя редакция звала «$0.031639 flash» и потом ПРИБАВЛЯЛА pro вторым слагаемым, то есть считала его дважды) · терминолог $0.005750 · классификатор $0.007706 (было «$0.004286» — расходится с базой) · весь заход $0.045095, и теперь слагаемые дают именно его (прежние давали $0.052025). Редакторская волна на ЭТОМ прогоне не гонялась (coldrun-a/b: ноль редакторских вызовов) ⇒ строка жива, и она же держит оси голоса (13б/24) бэкенд когда-нибудь (первый прогон добора идеала — после решения по 46) добор идеала D39.58, D39.90
18 Эмиссия головы 蛊: сид-половина = чек-лист (определяющий терм книги сидится allow_short, D39.50); эмиссия-КАНАЛ демотирован до ИЗМЕР-ГЕЙТА (Q7): полигон-замер «меняет ли эмиссия головы рендер композитов» — строить ТОЛЬКО по эффекту и ПОСЛЕ #10 (однознаковый пост-чек чинится чекер-паком); перед стройкой резолвить K-гейт и KWIC-грязь одиночной головы полигон → бэкенд скоро (санкция Q7 D39.70 — после #10, очередью с ре-пробой) полигон-замер → решение D39.58, D39.60, D39.69
24 Остаток: авто-режим флага (проект Б не гонялся) · оси голоса AD (профили не подписаны; черновик готов — coldrun-a/SIGN-PACKAGE.md §3) ; + слот инъекции голоса и решение gates.voice при ненулевых осях (D39.55/D21 п.2) · слой-2 voice не строим до доказательства слоя-1 · сверить until_ch 白凝冰 при курации сида (D19.3в) бэкенд когда-нибудь (первый прогон добора идеала) добор идеала D39.40, D39.58
— ТЕКУЩАЯ ОЧЕРЕДЬ (D39.59) —
78 Леджер денег = НИЖНЯЯ граница: «2xx body decode failed (call IS billed)» — провайдер списал, исходная попытка в request_log НЕ попадает (≤$0.009/сессия); дизайн фикса ГОТОВ (GENERALITY_PHASE2 §5.6: BilledDecodeFails + per-billed-attempt settle с Estimated=true), но это money/ledger-путь — не $0-хастл. Живое число (D39.86): на ре-пробе 74 — 3 таких вызова на 14, неизвестность $0.015111 при леджере $0.114378 (13% захода); движок засеттлил оценку и честно напечатал estimated-cost rows: 3 ⇒ канал ВИДЕН, но decode_error при этом ещё и терминален (не retryable, не escalatable) — 3 из 7 терминальных флагов пробы A бэкенд когда-нибудь (money-паком) отдельное решение (дизайн §5.6) D39.61, D39.64, D39.86
79 Граница ПЛОТНОСТИ письма для серий: enabled через Go-константу cjkScriptNames — новый плотный скрипт требует правки Go (head-finality уже в данных script-series.txt; пре-существующая граница, D39.75). Первые два компонента строки (isCyrLetter→isTargetWordLetter · magnitude SourceScripts-гейт) исполнены пакетом-чекеров, D39.78 бэкенд когда-нибудь следующий пак общности / касание чекеров D39.64, D39.78
90 Ф2-кандидаты 02-mvp-плана без носителя (свип-хвост, D39.73): CometKiwi/T-index метрики судьи · Batch API судьи (экономия) · llama-server-интеграция локали · стриминг — взять/закрыть при пилот-препе; + H16 самоулучшение (V3-п.2, ПТ-26): дизайн петли по данным судьи — тем же препом полигон/бэкенд когда-нибудь (Ф2.5) пилот-преп-промт (с 85) 02-mvp-plan, D39.66, D39.73, D39.80
— НАХОДКИ СВИПА ПОЛНОТЫ (D39.66: 951 обязательство проверено, потери возвращены в трекер) —
80 Резюме-слой памяти — проза-суммарайзер ЗАКРЫТ (D39.69); строка = ГЕЙТ ПИЛОТА Ф2.5: первый деливерабл пилота — «допускает ли автономная нарратив-состояние-строка ДЕТЕРМИНИРОВАННЫЙ верификатор (source-anchored) — или это D1-компаундинг со схемой»; не-покрытые классы (source-anchored reveal · арк-колбэки без ключа) реальны, но не измерены как дефект Ф2.5 (Q3 подтверждён D39.70) когда-нибудь (пилот) Ф2.5 пре-рег D25 п.89, D39.66, D39.69
81 ja-преп B6-ja (сужено пост-сверкой D39.66): Поливанов-валидатор (translit_policy = «Phase 2»-заглушка, migrate.go:187/194) + kana-омограф POS/known-word гейтинг / B6-токенизатор (memory.go:1048); чек-лист kana-алиасов сида УЖЕ построен (backend/README §ja + AttachRubyAliasesToManual) — остаток в нём только дизамбигуация двойных чтений (тот же B6) бэкенд когда-нибудь (перед ja→ru) ja→ru-пак (рядом 35) D16.4, D17.1, D18, D39.66
82 Морфо-гейт РОДА (C3: русский глагол прош. вр. при gender=hidden = механический спойлер-канал; «жалоба №1 читателей MTL»; python-сайдкар/pymorphy, связка с морфопроходом Decl из 73). $0-прототип получен эксп-21 (battery.check_gender: карточки из подписанного сида, фильтр по именительному падежу, 86112 сверок/арм — D39.117); движковый гейт не построен бэкенд когда-нибудь (Ф2-гейты) отдельный пак (с 52) 06-реестр C3, research/12, D39.66, D39.117
85 Пилот-преп добор (к переупаковке PACKAGE4): Bertalign GOLD-пары + zh→ru spot-check (D29.2в; GPL-тулинг отдельно) · fidelity-каскад R2 shadow с корпус-подготовкой (D25.2) · exp08 v3 пере-съём COGS до фиксации budget_usd (D21.8) полигон когда-нибудь (Ф2.5) пилот-преп-промт D25, D29, D21.8, D39.66
— ПАК-21 «чекеры»: РАСТВОРЁН (D39.62); шестёрка исполнена 2/6 фазой 2 (D39.64: #11 · строка 26), остаток — ниже —
93 Остатки строки 93 после пачки (D39.82): строгий OffLanguage (36а, deferred D39.78) · 分之-разметка прежде стройки DC2 word↔word (полигон) · F4-хвост: redrive --dry-run обходит pre-flight, а store.Open мутирует SPOF-файл (миграции + recoverReservations; коммент «mutates nothing» неверен) — pre-flight и на dry-run при существующей БД либо read-only план; заодно stat-скип точной формой fs.ErrNotExist; обострение приёмкой D39.134: на устаревшей БД --dry-run выполняет ПОЛНУЮ миграцию схемы БЕЗ restore point (write-open без шва migrate) — воспроизведено исполнением. ⚠ Остаток НЕ однороден по гейту (сверка 02.08): F4-хвост и строгий OffLanguage свободны, а 分之-часть ГЕЙЧЕНА полигон-разметкой среза («строить вслепую против мандата» — якорь техдолга) ⇒ не подавать строку как «малое касание без гейта» бэкенд/полигон когда-нибудь малое касание / полигон-слот D39.78, D39.82
98 DC7 грейд-консистентность — пере-гейчен по сид-покрытию (D39.82): замер пачки реален (25 юнитов/93 «разряд» ≠ канон «класс» на labels-финалах), НО финалы — прогоны до/вне сид-v2-канона, а грейды 甲/乙/丙/丁等 теперь approved-записи сида с decl-формами: mempostcheck флагнёт «разряд» промахом dst; строить DC7 только если ОСТАТОК девиаций переживёт сид-покрытие — замер на первом СИДОВОМ прогоне добора идеала; дом канона при стройке = book.yaml (как register_blocklist; ратифицировано D39.82 — НЕ dc-checkers.txt, посылка D39.79 исправлена) бэкенд когда-нибудь (гейт: первый сидовый прогон добора идеала) замер остатка → решение D39.79, D39.82, SMALLPACK §5-E1
28 Банк-линт латиницы в dst или строгая форма языкового предиката (7 строк утечки алфавита проходят экран); сюда же хвост закрытой 128 (D39.102: NoDst-почти-сентинел, латиница-target — дословно не переехал при закрытии, восстановлен аудитом D39.140) бэкенд когда-нибудь (добор идеала — носитель «свежий мини-прогон» растворён D39.67, актуализация D39.79) касание чекеров при данных добора (помнить оговорку 36а: «甲等 → класс Цзя» строгой формой не ловится) D39.52, D39.62, D39.64, D39.79
28а Prompt-injection-проба входного текста ($0): сепаратор ⟦TM-BANK-v1⟧ и якорь-подобные маркеры В ТЕКСТЕ КНИГИ — поведение среза/парсера/инъекции (книга = недоверенные данные; инструментов у моделей нет, но канал банкноты читает вывод по маркеру) бэкенд/полигон когда-нибудь малая проба сводка-ревью 26.07
— СВИП ГИПОТЕЗ —
30а Перерисовка puml-диаграмм под пост-пак-20 пайплайн (терминолог, банкнота отдельным файлом); дом диаграмм теперь backend/docs/ — правятся одним коммитом с кодом (D39.80); PUML НЕ рендерить (гардрейл); ловушки activity-синтаксиса, стоившие реального бага 25.07, — 12-go-style-notes §1 (дом на онбординг-пути бэкенда; строка держит указатель, а не сам факт — носитель с запланированной смертью для долговечного факта не годится) бэкенд когда-нибудь ближайший пак, касающийся pipeline аудит доков 26.07, D39.80
— ОТДЕЛЬНЫЕ ПАКИ/РЕШЕНИЯ (бэкенд, добор идеала) —
31 Слой-2: извлечение дискурс-норм/few-shot из ТЕЛ промтов (форсинг = ja→ru) бэкенд когда-нибудь отдельный пак (идеал D39.33) CURRENT-STATE, D39.33
33 native-Gemini судья (Ф2-механизм) ; до прод-заводки: $0.01-проба thinking⊆max_tokens на боевом слаге (D22.3) + включить sanitizer в pipeline-c2 при оживлении (D33.4б) бэкенд когда-нибудь отдельный пак (идеал) CURRENT-STATE, D39.33
34 Генеральность нарезкиОСТАТОК после фазы 2: сами per-script коэффициенты (est_out ja завышен ~1.7× МОЛЧА · EstimateTokens недосчитывает кириллицу); консолидация класса письма СДЕЛАНА (один дом DenseScript, D39.64) — лечение = Fertility-map (строка 14) + офлайн-калибровка при боевом токенизаторе бэкенд когда-нибудь строка 14 + отдельный пак (с ja→ru) D39.37(5), D39.64
34а Экран кодировки не видит <meta charset> без XML-объявления (епаб с gb18030-метой прочтётся как UTF-8) — до-паковая дыра, сознательно не тронута пачкой 14а (паритет со старым ридером) бэкенд когда-нибудь отдельное решение D39.54, SMALLPACK §8
35 Не-CJK майнер/банк: en-детектора не существует (hanRuns=0), ja с zh-таблицами активно неверен (0/10); нужен второй ДЕТЕКТОР (прототип mine_nonhan.py) + G1G10 требования generic-майнера (вкл. квадратичность G9 ≈4.6 ч) бэкенд когда-нибудь отдельный пак generic-майнера (с ja→ru) D39.37(8), D39.43, D39.50 п.8, POLYGON_PREMEASURE §6
36 Кластеризация майнера глотает родовые титулы (族长/学堂家老 в кластере 葛家) — закрыто на границе сборки входа, сама кластеризация не чинилась бэкенд когда-нибудь отдельное решение D39.43, D39.45
36б Второе мнение по банку: рецензент ДРУГОЙ моделью, несогласия — отдельной колонкой подписной таблицы (судья-с-декоем в роли рецензента; решает владелец, D39.46-ограничение не бьёт). ⚠ Бэкенд-стройки НЕТ (D39.69 закрыл по нужности); замер ИСПОЛНЕН (research/24, D39.102) — остаток = строка 5: рецензент спорных КЛАСТЕРОВ при ре-пробе 74, роутинг family/series-юнитами; переживёт замер → тонкая колонка наблюдаемости, не гейт полигон (замер) → бэкенд (только если переживёт) когда-нибудь (слот при ре-пробе 74, остаток строки 5) замер остатка → решение D39.69, D39.90, D39.102
36г Проводной формат каналов пересказан прозой в каждом пар-промпте, парсер в Go, связи нет — формат в шаблон движка ({{banknote_format}}); линты держат класс, дублирование остаётся бэкенд когда-нибудь (со следующей правкой промптов) отдельное решение (Р5) D39.58
37 Квадратичности: AttachKWIC (16.8 с / 2000 кандидатов; фикс — многошаблонный поиск; ⚠ опция фикс-пака 128 НЕ взята — «чисто не ложится»: автомат в membank неэкспортирован, вынос в общий пакет = рефакторинг слоя, terminology PURE не может импортировать банк-стор — отчёт пака §4 п.5, D39.118) + src-правило банкноты при промахе чанк-пути (строка × длина книги; на 10 главах не видна) бэкенд когда-нибудь отдельное решение D39.45, PACK20_BANK_BUILD §8.5.1, D39.58, D39.118
38 Смета не видит пере-покупку прохода терминолога на каждой итерации подписи (роль не пишет chunk_status, не видна projectRebill) · хвост приёмки №13: адрес чекпойнта батча = ординал при частотной сортировке ⇒ реюз чекпойнтов прохода ~0 на инкрементальной книге — механика ПОДТВЕРЖДЕНА КОДОМ фикс-паком (§2 отчёта, D39.118): G1 двигает состав юнитов и те же ординалы, на первом прогоне после пака перекупаются все бэнк-батчи (центы) бэкенд когда-нибудь отдельное решение D39.45, PACK20_BANK_BUILD §8.5.2, D39.102, D39.118
39 S12 частичен: malformedSeparatorAt не ловит подмену слова разделителя и обрыв токена (комментарий обещает) бэкенд когда-нибудь отдельное решение D39.45, PACK20_BANK_BUILD §8.5.3
40 bankTokenBudget: worst-case зашит zh→ru (признанная утечка §0; CJK-цель недобирает вдвое) бэкенд когда-нибудь отдельное решение D39.45, PACK20_BANK_BUILD §8.5.4
41 golden: вторая фикстура С langpack (сейчас пинится только фолбэк-путь) ; + golden-счётчики голоса (хвост D39.58) бэкенд когда-нибудь отдельное решение D39.37(6)
42 prompt_override — легальный обход гарантии слоя-2, сформулировать честно бэкенд когда-нибудь отдельное решение D39.37(7)
43 request_log без скоупа/ретеншена + first_flag_reason = третье представление истории попыток (корень — неразведённые скоупы) бэкенд когда-нибудь отдельное решение D39.37(9)
44 Флор — выбор числа ПОСЛЕ ре-пробы 74; модель «thinking в completion» ПОЛУЧЕНА замером (D39.86): рычаг против неограниченного думания = reasoning_effort, флор не рычаг. Мини-проба флора одобрена владельцем, промт не выдан; у dspro эффорт не настраивается (quirks 3а). Расхождение трекера с 74 снято D39.90. Археология дословно — architecture/13-tech-debt-anchors.md §Б-44. ⚠ Вводная сменилась 13.08 (вахта §Б-108 СРАБОТАЛА): вендор дал pro/flash настраиваемые уровни low/high/max — квирк 3а («у dspro эффорт не настраивается») устарел, пере-проба маппинга ПОВЕДЕНИЕМ + абсорбция в quirks — полигоном бэкенд когда-нибудь (триггер «приёмка 104» НАСТУПИЛ — D39.91, ручка заленжена; «сколько ставить» остаётся НЕзамеренным — нужен вариационный замер флора при low) отдельное решение D39.37(10), D39.86, D39.90, вендор 13.08
45 max_tokens-упоры (две единицы) — вернутся на en-книге ; halve-chunk-on-retry (research/22 §2 №7) ОТКЛОНЁН D39.74 — вернуться сюда же при живых упорах бэкенд когда-нибудь отдельное решение (с en) D39.37(11)
46 Экран целевого языка: «полный связный перевод на английский» проходит classify как ok — живой носитель класса (D39.86); дизайн пака ЗАМОРОЖЕН (D39.92 п.1 closed-set + D39.93: изолированный модуль, именованные причины), промт ждёт выдачи. Гейт-связка: мини-проба флора (44). Археология дословно (двусторонняя дыра оси цели · константы · мины реализации) — architecture/13-tech-debt-anchors.md §Б-46 владелец → бэкенд скоро (порядок §5.4: сначала 113, шаг 6 — под подпись) правка Go по плану §5.4 D39.39(д), D39.86, D39.90
47 M2-кэш / доктрина Д2 — кандидат на отдельную ратификацию оркестратор/бэкенд когда-нибудь отдельное решение D39.42
48 Направленная банкнота — вернуться по замеру покрытия терминолога бэкенд когда-нибудь отдельное решение D39.42
48а Серийный шаринг банка — РЕАЛИЗАЦИЯ (экспорт подписанного глоссария как сид-YAML следующей книги серии; спойлер-окна плющатся в since_ch=0); контракт round-trip держится тестом, самой фичи нет бэкенд когда-нибудь (перед второй книгой серии) отдельное решение D39.42 задел (а), PACK20_BANK_BUILD З-а
48б Импорт «оригинал + чужой перевод» как режим данных терминолога (target-агностичный вход есть контрактом; сам режим + провенанс источника + юр-сторона в юр-пакете) бэкенд/владелец когда-нибудь отдельное решение + Ф2.5 (юр) D39.42 задел (б), PACK20_BANK_BUILD З-б
130 emitRankCap × writeAutoBank — ОСТАТОК после фикс-пака (D39.118): $0-минимум ИСПОЛНЕН (дифф старого/нового авто-файла + WARN с именами выпавших; само-исключение сырого seed закрыто unsignedEngineSurfaces дофиксом приёмки); остаток = накопительный мердж авто-банка / освобождение слотов seed-rejects — СТОП-решение владельца (двигает банк → memory_version); материал для решения даст WARN со ВТОРОГО прогона (§6 п.8 отчёта пака) владелец → бэкенд когда-нибудь (гейт: WARN второго прогона) СТОП-решение D39.102 п.3, D39.118
131 Кап инъекции не считает маркер и гендер-ноты: glossaryLineTokens бюджетирует только «src → dst» (memory.go:512-515 против рендера :698-708) — авто-книга (все строки Ambiguous с ⟨проверить⟩) превышает glossary_token_budget ~на 4060% при budget 800; биллинг/потолки компенсированы (резервация по фактическому рендеру, stagerun.go:469-477), сам кап не исполняется. Фикс двигает состав инъекций → RequestHash → перекупка волн ⇒ СТОП-решение с названной ценой. ⚠ После строки 134 (единый блок, маркер снят с провода — D39.104) превышение пере-замерить: состав рендера сменится бэкенд когда-нибудь СТОП-решение D39.102 п.3
132 Стойкий (пост-ретрайный) аутедж ТОЛЬКО банк-провайдера валит весь ран вопреки коммент-контракту «optional step never aborts» (terminologist.go:630-634 — деградация только на ceiling; транспортные ретраи гасят transient, httpllm.go:126-160; потерь нет — чекпойнты реплеятся за $0): решить — деградировать в «термы неконсолидированы»+WARN либо честно переписать коммент бэкенд когда-нибудь малое касание через СТОП-решение D39.102 п.3
134 Дата-правка инжект-заголовков под доктрину D39.105 (единый закон-блок редактора вместо двухсекционки · оговорка ОБЛАСТИ употребления · снятие маркера ⟨проверить⟩ с провода; статусы строк и подписная таблица НЕ меняются): кандидат-тексты — §B промта пробы 18; ГЕЙТ ПАЛ (D39.108): текст = ОТПРАВЛЕННАЯ строка пробы 18 БЕЗ оговорки области (девиация №1; оговорка опровергнута §A.4 — НЕ вносить); двигает рендер → RequestHash → перекупка, цену назвать при внесении бэкенд скоро малое касание D39.104 п.2, D39.108
— ШОВ ДВИЖОК↔ПЛАТФОРМА: деньги и механизмы (D39.106/107 п.2) —
136 Write-ahead intent + состояние uncertain-эскроу + closing: холд НЕ освобождается по выходу юнита (сигнал обгоняет денежные события); spend не постится без свидетельства провайдера; расход сверх холда — полной суммой, превышение явной строкой убытка платформа/бэкенд скоро (промты по команде владельца) стройка по research/25 D39.106
137 Ночная сверка расходов с данными провайдера (в движок цены входят float64 по ручной таблице ledger/pricing.go — систематика процентная; сверка приоритетнее споров об округлении) платформа когда-нибудь (до первого платного пользователя) стройка по research/25 D39.106
— НАХОДКИ ПРИЁМКИ ЭКСПОВ 1820 (D39.108) —
140 Банковый контур в shipping-c1 НЕ включён — и это ШИРЕ прежней постановки про одну банкноту (сверка STACK.md, D39.126 п.2а): терминолог и классификатор тоже живут только ран-локальным конфигом книги (ратифицированный путь D39.42 п.4; coldrun 56/128; gates.terminology/gates.banknote в c1 = 0 вхождений); решить: включить в c1 (двигает промпт драфта → RequestHash — цену назвать) либо поправить декларацию; родня 36г владелец → бэкенд скоро СТОП-решение D39.108, exp20 §6, D39.126
141 Дыра детектора примечаний: сноска «[1] …» без слова-заголовка проходит мимо (sanitizer.go:273-278 требует «Примечание:/прим. перев.») — после StripCosmetic уезжает в экспорт с дырой на месте вырезанного ханьцзы бэкенд когда-нибудь малое касание + тест D39.108 (приёмка 20)
142 Механизм «гейты флагают → точечная починка по флагу» как прод-путь: exp20 §3.3 — $0.0002/дефект, 12/12 (при ИДЕАЛЬНОЙ детекции); механизм конкурентов (research/22:179), у нас петля пака-16 за enabled:false (строка 13); детекторы «выдуманное слово»/«инверсия» прототипированы эксп-21. ДИСПОЗИЦИЯ D39.117: ОТКЛОНЁН как замена редактора (C2/A_law 3.75 Holm 0.0006; «$0.0002 чинит всё» мерилось при идеальных флагах и при реальной детекции пало), ПРИНЯТ формой «механический ПРЕ-ГЕЙТ перед редактором» — брак 5 клеток против 10/23 при половинной цене ($0.00298/$0.00602); ремонт ТОЛЬКО с банком (без банка ломает канон 0.917→0.895) владелец → бэкенд скоро (форма решена D39.117; стройка — бэкенд-промтом по команде владельца) бэкенд-промт D39.108, D39.117
143 Абсорбция норматива судейства в 09-pilot-protocol.md: разброс инструмента ДО замера · объявленный порог различимости · MQM-lite/error-span первичен, pairwise только для стиля · декой обязателен · запрет судьи семейства жильца арма полигон/оркестратор скоро ($0) правка дока D39.108, exp20 §7
144 Вахта: grok reasoning_tokens ВНЕ completion_tokens — формула цены харнессов может недосчитывать (до $0.0325 на exp20); вендор-сверка биллинга xAI при следующем прогоне с grok полигон когда-нибудь (следующий xAI-прогон) вендор-чек D39.108 (приёмка)
146 Два техдолга движка без строки трекера (свип 08.08): prices_checked (120 д) гейтит read-only report и $0-resume — свежесть цен проверять только на ПЛАТНОМ пути (03-implementation-notes:244) · cache_ttlcache_write_per_m: цена записи в кэш задана под ОДИН TTL (5 м), при другом TTL расчёт врёт (:246). Оба жили только в справочнике якорей, то есть вне единственного трекера · приёмка D39.134: ценовой гейт держит и ДЕТЕКТОР самолечения деплоя — на стенде с протухшими ценами status даёт 10, а не 13, и цикл «поймал 13 → migrate → повтор» не наступает бэкенд когда-нибудь малое касание свип доков 08.08, D39.134
147 Транспортные частичные из research/21 без носителя (свип 08.08): п.16 HTTP/1.1-escape на последней попытке как ДИАГНОСТИКА тихого усечения 28k [PARTIAL, GATED] · п.17 assistant-prefill continuation на finish=length вместо ре-рана всего вызова [PARTIAL, DEFER]. Оба помечены в ресёрче как отложенные и ни в одной строке трекера не появились бэкенд/полигон когда-нибудь замер → решение свип доков 08.08, research/21 §1617
149 Эксп-22 «панель жильцов»: профиль-скрин (pass/fail пороги ДО замера; урок эксп-21 — скрин, убивший 2 из 12, скрином не был) → панель черновиков (слот несёт ~70% эффекта финала, мерился ТОЛЬКО flash за всю историю) → панель редакторов поверх замороженных черновиков (обязательный кандидат gemini-3.1-pro — аутлаер-гипотеза эксп-04) + шумовой пол + прямой D_/A довесками; агент-судейство под капом ≤60; невиданный zh-срез — повторный жёсткий заказ полигон ИСПОЛНЕН и заленден 10.08 (приёмка №16; промт — archive/prompts/POLYGON_TENANT_PANEL_SESSION_PROMPT_2026-08-08.md); выводы заморожены до фазы Д — закрыть строку при ратификации прогон по промту → ратификация D39.117, приёмка №16
150 Sol-арбитраж — внешний контур вместо слепого чтения владельца: пере-суд расходящихся контрастов эксп-21 (A/F: luna +0.84 против gemini +3.03 — расхождение 14 sd шума судьи-замены) и слепых пар эксп-22 руками владельца через подписку (третье семейство, high reasoning); пакеты готовит эксп-22 Ф0.4 (слепые метки · оба порядка · декой), транскрипты персистятся как голоса внешнего судьи; luna-клетки Sol не судит (своё семейство) владелец + полигон скоро (пакет арбитража — из существующего сырья) эксп-22 Ф0.4 + руки владельца D39.117
151 Отказной режим связки: эхо-мина черновика воспроизводима на материале (глава 11 — 3/3 попыток; частота 31% на zh), связка покрыла 9/10 подряд идущих глав против 10/10 у однопроходки — единственный довод ПРОТИВ связки во всём эксп-21; движку нужен fallback при невозможности годного черновика (вариация ре-гена · эскалация модели черновика · деградация в однопроходку) владелец → бэкенд когда-нибудь (до МАСШТАБА) СТОП-решение D39.117, exp21 §14
152 Слипание абзацев — слепое пятно детерминированного контура: батарея на тех же текстах даёт ДРУГОЙ порядок армов (D — худший по судье — лучший по правилам), расхождение локализовано в слипании, которого не проверяет ни одно правило; правило в батарею полигона + кандидат в гейты движка бэкенд/полигон когда-нибудь малое касание + тест D39.117, exp21 §13
153 Чистый контраст мандата перевёрстки: D/D_ загрязнён (объём промта ×1.92 + вёрсточная строка + правило чэнъюй); уравненные промты и пере-гон ≈$0.35; по грязному контрасту мандат ВРЕДИТ по оси ФОРМА (1.09 из 3.31 D/A) полигон когда-нибудь (опция эксп-22 Ф3 — реши сессия) замер D39.117, exp21 §16.3
— ХВОСТЫ ФИКС-ПАКА БАНКА (D39.118) —
154 Одноруновая голова семьи (// едет в отдельном вызове от 12 своих поверхностей — якорь семьи обязан быть ≥2 рун) — включается ОДНОЙ строкой данных family_containment_runes han 1, Go не трогается; не включена: цена в размере юнитов не замерена бэкенд скоро (гейт: замер размеров юнитов на первом холодном прогоне, вместе со 157) строка данных по замеру D39.118, отчёт §5
155 Скрипт-слепой резолв семей/серий: han-правила режут кану и хангыль (синтетика: 24 катаканных имени с общим アリ → батч 8036 рун при бюджете 6000); живого вреда нет — пары в репо нет; та же слепота у серий уже в HEAD бэкенд когда-нибудь (преп ja→ru, с 81/120) ja-пак D39.118, отчёт §5
156 banknote_truncated — ПОЛ, а не счёт: обрыв, срезавший сам разделитель, флага не даёт; буквальный фикс зажёг бы колонку на каждом обрыве в прогонах без канала — нужен гейт по Gates.Banknote.Enabled бэкенд когда-нибудь малое касание D39.118, отчёт §5
157 Пере-подтвердить family_max_members=24 и families_held на длинной книге (24 калиброван на дистилляции в 150 поверхностей; кап эмиссии 200 + реверс-секция дают другой список); если families_held велик — ослабить гард до «родство по любому члену юнита» вместо «по корню серии» бэкенд скоро (гейт: первый холодный прогон, §6 отчёта) замер → решение D39.118, отчёт §7 п.7
158 Уверенность не гейтится данными пары: канал снимает третью колонку у любой пары, чей промпт её попросит; у пары с ДВУХпольным промптом узкий риск «Пик␣␣99» (число ≤100 за двойным пробелом уедет в conf); при нужде — дата-декларация пары бэкенд когда-нибудь дата-декларация D39.118, отчёт §4 п.6/§7 п.8
159 Durable-имена эвиктнутых (retrieval_state.evicted_detail = миграция; сегодня лог, и приёмка ратифицировала «этого достаточно») — заводить только при доказанной потребности, одним касанием с идемпотентностью миграций 49а бэкенд когда-нибудь (гейт: доказанная потребность) миграция с 49а D39.118, отчёт §7 п.2
160 Структура глав, Этап 0 ($0, wire-нейтрально): titleRaw в манифест (subtitle добывается matchHeaderLine и ПОНИЖАЕТСЯ в тело прозы (испр. D39.125), а не выбрасывается) + provenance у heading + тип chapter/fragment + вердикт структуры (бамп manifestVersion) · дыра Р6: projectRebill слеп к контент/позиционной оси (rebill.go:32-35) — ревизия структуры перекупила бы хвост МОЛЧА, закрыть read-path-расширением · слой пользовательских правок отдельным сайдкаром · зонная половинка темы: Ф-30 фронта / В-4 владельца (глава без заголовка на экране — метка из ДАННЫХ, К-3) ждут ровно эту строку; heading манифеста до неё = ВРЕМЕННЫЙ рендер движка (D39.122 п.2д) бэкенд скоро (ГЕЙТ ПАЛ словом владельца 15.08, D39.136 п.3: ставится ближайшим бэкенд-паком с мандатом максимального качества; тесты структуры глав — узлом будущего холодного прогона) пак research/27 §6 Этап 0, D39.122 п.4, D39.136
161 Структура глав, Этап 1 «большой перекрой» (единственное дешёвое resnapshot-окно — пока платная книга одна, ДО интейка): IR + формато-адаптеры (epub nav/NCX, fb2) + индуктор с валидаторами и вердиктами + третий версионный план паттернов (не в снапшот волн) + развязка чанкера от глав + банк-окна на chapter-ID + контент-адресуемый resume (долг D15.2) + формула Chapter.ID «окно» + роль title (мини-сессия названий: редакторский слот · инъекция банка · двухфазно вокруг подписи) + аддитивное расширение контракта 14; жизненный цикл дерева — research/27 §3а (решение владельца 09.08) бэкенд (+фронт/платформа аддитивно) скоро (постановка санкционирована D39.136 п.3: СНАЧАЛА дизайн-пак с мандатом максимального качества, стройка после ратификации дизайна; ⚠ дешёвое окно закрывается первой книгой внешнего пользователя) дизайн-пак → ратификация → пак(и) research/27 §3/§5/§6, D39.136
162 Структура глав, Этап 2: in-band метки глав в потоке перевода (третий эшелон детекта + коррекция структуры по ходу черновой волны, §3а п.3) + канон-гейт названий ($0) + миграционные карты якорей (same/moved/split/merged/gone/new) + калибровочный корпус детекта в CI бэкенд + полигон когда-нибудь (после Этапа 1) пак + корпус research/27 §5/§6 Этап 2
163 **Версии модулей x/text x/net двигают нарезку МИМО всех ключей** (NFC в NormalizeSource — таблицы модуля, не тулчейна; epub-токенайзер): бамп go get -u тихо меняет нарезку при свежих на вид манифесте/чекпойнтах/снапшоте — класс всей чекпойнт-плоскости, унаследован манифестом; вплести версии модулей (debug.ReadBuildInfo) в NormVersion/chunkerVersion либо явный запрет бампа без --resnapshot бэкенд когда-нибудь (до второго прогона книги) малое касание
164 Rebill-проекция status с nil baseMemory завышает RebillUSD: read-путь не материализует base-банк → renderedContentHashes даёт пустую инъекцию → repin недоопознан, строка считается re-pay (консервативная сторона, но противоречит комменту «status can never quote a different number than translate»); материализовать base-банк на read-пути либо смягчить клейм бэкенд когда-нибудь малое касание D39.122, приёмка (охотник №1); preexisting
166 Движковая поверхность оценки $/глава (ставка-константа платформы $0.03 из exp08 v2 — временная мера беты, П-10 зоны платформы; честная оценка по книге/паре — движковая) бэкенд когда-нибудь отдельный пак D39.123
167 Докс-пак по аудиту D39.125 — ЯДРО ИСПОЛНЕНО (D39.126): реестр всех нот architecture/05-decisions-index.md · counts.py --check полнота реестра + --lint якорей · разгрузка топ-10 строк · входы 15-money-path/16-events-emitter/STACK.md · К-статусы сведены · 09-target/product-requirements освежены. Остаток строки: статус-баннеры экспов + шапка эндпоинтов quirks (передано полигону промтом фазы Д, §Д8 п.12) (⚠ пункт «DEFECT_REGISTER секциями» СНЯТ 22.08 — исполнено зоной ещё в P5: файл секционирован по весу и по эрам, форма проверена аудитом доков) доки/полигон/платформа скоро (остаток — фаза Д полигона) пинги зонам D39.125, D39.126
168 Состав волн пайплайна = пар-конфиг (данные), не общий хардкод: вопрос владельца 10.08 «нормально ли под китайский строить весь бэкенд и конфиги?» — жильцы ролей и промпты уже конфиг/langpacks, но ТОПОЛОГИЯ волн (перепис · точечный edit-контур · без второго прохода) одна на всех пар; если фаза Д покажет разных победителей по парам (H-3/H-4: en-черновик+edit против zh-связки), состав волн уезжает в пар-конфиг данными; ревью-вопрос общности §0 12-go-style-notes.md бэкенд когда-нибудь (после данных фазы Д) замер (фаза Д) → решение владельца → малое касание слово владельца 10.08, промт фазы Д
169 Экспорт банка для чтения фронтом — ДВИЖКОВАЯ половина ПОСТРОЕНА, строка заводилась слепой к ней (испр. оркестратором 14.08): сайдкар <project_db>.bank.json — весь банк тремя статусами, стабильные id, атомарная запись — существует с D39.122 (internal/pipeline/bankexport.go; рядом bank-stop.json — полная таблица подписи для S5); прежний текст строки («артефакта экспорта нет») повторял жалобу Ф-43, снятую тем паком. ОСТАТОК: платформенная проекция сайдкаров в GET /books/{id}/bank + канал решений подписи — пак читающей поверхности платформы; без неё витрина банка фронта стоит на моке, подписной экран S5 строить не на чем ⚠ ПЛАТФОРМЕННАЯ ПОЛОВИНА: ЧТЕНИЕ ПОСТРОЕНО P7, ЗАПИСЬ СНЯТА 22.08 (D39.153, затем D39.154). Живо: проекция банка listBankTerms с агрегатами. ⚠ Приём решений submitBankDecisions удалён вместе со всей пер-термной моделью подписи (PD-370, ратификация D39.144) — прежняя редакция строки называла его существующим. Остаток строки стал ШИРЕ, а не уже: нет ни доставки решений до движка, ни самой ручки, куда их вводить; носитель — строка 199(а) плюс контрактная 206 платформа скоро (остаток = доставка, строка 199а) строка 199(а) Ф-43 фронта, D39.122, D39.127, испр. 14.08
170 tmctl init — движок сам заводит книгу (форма В развилки интейка): платформа зовёт $0-команду, движок пишет СВОЙ book.yaml — требования к полям живут там же, где проверяются (config/book.go); до неё бета живёт формой Б (рендер из деплой-шаблона платформой при создании книги, ратификация D39.130) бэкенд когда-нибудь (после беты формы Б) малый пак приёмка P5, D39.130
172 Остаток после пере-пина DeepSeek (пин ИСПОЛНЕН и ПРИНЯТ — D39.137, 76049bb): (а) схемное решение владельца по time-based — доклад §5 отчёта вендор-сессии (рекомендация: пик оставить; scheduler-вариант строки 60 не начинать до ответа вендора «по какой отметке времени тарифицируется вызов» — вендором НЕ задокументировано — и замера доли пика; дешёвый рычаг: операционное правило «прогоны не стартуют в 0104/0610 UTC» — почти всё ×2 без строчки Go; гибрид «резерв пиком, сеттл по окну факта» назван) · (б) пере-калибровка ставки $0.03/глава (166/П-10; множитель счёта замерен) · (в) exp08 v3 (85) обязателен до budget_usd · (г) вахта весов V4-Pro-0813 (класс D39.61): риг готов, порог ратифицированной ВЫБОРОЧНОЙ формы («≥4/5 прогонов N=5 достигают 6/6», D39.136 п.6б) в риге ИСПОЛНЕН паком честности — арифметика вынесена в live_reprobe_threshold_test.go, сам риг применяет её же. ⚠ Прежняя редакция строки требовала «внести порог ПЕРЕД прогоном вахты» и объявляла риг ложно-падающим — это протухло 17.08 и снято аудитом доков 22.08: работа уже сделана и предусловием платного прогона больше не является. ⚠ ИМЯ СТРОКИ ВВОДИТ В ЗАБЛУЖДЕНИЕ (испр. №18 17.08, сверено кодом): названный риг меряет роль КЛАССИФИКАТОРА, а она ходит на flash (стендовый pipeline.yaml:64 + артефакт прошлого прогона model = deepseek-v4-flash), тогда как сменившиеся веса — у pro, а pro у нас = РЕДАКТОР (configs/pipeline-c1.yaml:62,76). Владелец 17.08 санкционировал ТОЛЬКО вариант (а) — пере-съём классификаторного гейта, потолок $0.20, исполняется п.5 пака честности. По этому прогону строку НЕ закрывать: вопрос «сменились ли веса редактора» остаётся открытым, дешёвый вход к нему — данные фазы Д, где pro гоняется именно редактором (спросить полигон прежде, чем покупать новый замер) владелец → бэкенд/полигон скоро (схема — на владельце; вахта — после 16.08) СТОП-решение (схема) + замер (вахта) вендор 13.08, D39.137, строка 60, D30.4
180 prices_checked — одно поле на ВСЮ таблицу цен (находка вендор-сессии, D39.137): бамп по факт-чеку одного вендора сдвинул 120-дневный гейт свежести остальным семи моделям (дедлайн уехал ~07.11→~13.12); лечение — пер-модельная дата проверки (правка схемы) ЛИБО ре-чек остальных вендоров отдельным заходом до исходного дедлайна бэкенд когда-нибудь (ре-чек вендоров — до ~07.11) малое касание / вендор-заход D39.137, отчёт §7.1
182 Wire-батч перед добором идеала — КОПИТЬ и вносить ОДНИМ касанием (каждая правка двигает RequestHash / memory_version / снапшот = перекупка волн; дриблить по одной = платить пере-снапшот несколько раз): 46 экран цели (+предпосылка 113 фикстура) · 134 инжект-заголовки (гейт пал D39.108) · 131 кап инъекции · 140 банковый контур в shipping (СТОП-решение) · 105(а) вердикт-половина классификатора · 130-остаток (мердж авто-банка, гейт WARN второго прогона) · 14 ё-фолд (носитель «следующий пак общности») · 119+124(+115 пер-парный хеш EmbeddedVersion) — ОДНИМ дизайн-паком (строка 124 требует принимать целиком; сверено кодом: cutTag фолдит chunkerVersion/EmbeddedVersion/NormVersionmanifest.go:160-169); вне батча свободен только 118 (tools/go.mod). Состав — аудит корпуса 15.08 (archive/reports/CORPUS_AUDIT_2026-08-15.md §В.г) оркестратор → бэкенд скоро (собрать к ратификации фазы Д; вносить перед первым платным прогоном добора идеала) координационная строка → промт(ы) батча аудит 15.08, D39.134/136/137
171 Число символов книги — от движка (PD-177 платформы: character_count интейка точен только для UTF-8; GB18030/UTF-16 движок декодирует сам — цифра платформы на них неверна, для UTF-16 занижена ~вдвое): счёт символов в манифест (рядом source_bytes/encoding) либо перерасчёт платформой после разбора бэкенд когда-нибудь малое касание (манифест) П-13 платформы, PD-177, приёмка P5
173 backupStamp секундной точности: два translate в одну секунду дают коллизию имени бэкапа и exit 1, маскируя класс «проект занят» (12) — метка до наносекунд/uniquify либо распознавать коллизию явно; преexisting, вскрыт ревью эмиттер-пака бэкенд когда-нибудь малое касание приёмка D39.131
175 Деплой движка «в полёте» — ДАЛЬНИЙ ОСТАТОК (ближняя половина — типизированный version-mismatch у status + money-тест — ИСПОЛНЕНА паком migrate, принята D39.134; правило свипа «мигрировать только книги БЕЗ открытых попыток» + settle ЗАПИНЕННЫМ бинарём попытки — аддендум P6, D39.132). Остаток: (а) при СЛЕДУЮЩЕМ бампе схемы проставить в файл книги application_id + min_reader_version — данные-задел под окно совместимости, ~0 логики; (б) GC бинарей: удалять не пиненные ни одной незакрытой попыткой, последние 23 релиза держать для отката; (в) окно совместимости читателей / пин уровня книги — строить ТОЛЬКО по триггерам: много тенантов · бампы схемы еженедельно+ · потребители status кроме платформы. Археология захода — ресёрч 14.08 (вывод: exact-match читателей на деньгах = осознанный fail-closed, корень не выдёргивать, приделать дверь) платформа/бэкенд когда-нибудь (по названным триггерам; (а) — попутно первым бампом схемы) данные-задел + малые касания владелец 14.08, ресёрч 14.08, строка 139, D39.134
177 Гигиена restore point tmctl migrate (находки приёмки ВНЕ карты отчёта; фикс-лист ФМ — запись приёмки 15.08, слайс archive/PROGRESS-2026-08-14-15.md): ретрай в ту же секунду после сорванного шага = exit 1 «backup already exists» вне полосы — ровно на цикле самолечения платформы · kill -9 посреди шва оставляет РВАНУЮ копию под легитимным именем (ручной откат по ней = потеря данных; лечение — temp+rename) · копии restore point не подчищаются (повтор после срыва копит их) · SIGINT/SIGTERM в migrate не прерывают (ctx не доезжает) · комментарий migrate.go «no money touched» на no-op неверен (recovery зануляет leftover reserved) бэкенд когда-нибудь (следующее касание migrate/бэкапа) малое касание + тесты D39.134, приёмка №17
178 Калибровка sense банка — слово владельца 15.08 (D39.136 п.4б): смысл должен быть «ёмкий и достаточный на всю книгу, но не слишком подробный» (образец: «спутница главного героя»); сейчас возможно КОРОТКОВАТ; замер длины/достаточности на подписанном банке → правка промптов банкноты/терминолога (двигает провод — цену назвать при внесении) бэкенд/полигон когда-нибудь (касание банка) замер → правка промптов D39.136 п.4б
183 Батч 0.3.0 — ОТРАБОТАН ЦЕЛИКОМ (батч D39.142 + дофикс D39.143, 86720cf); ⚠ «канон 0.3.0 финален» ПРОТУХЛО — канон стоит на 0.4.0, ратифицирован D39.152 (испр. 20.08). Промт в архиве. ОСТАТОК-указатель: (а) P7 разблокированпрожито: P7 исполнен, принят и заленден 20.08 (D39.153), промт в архиве зоны; (б) зеркало frontend/docs/api-contract/ + типы + моки + гейт утечки — первое касание фронта при разморозке (расхождение канона и зеркала ВРЕМЕННО ратифицировано D39.142 п.5); (в) вопрос владельцу — BankTerm.decision — СНЯТ ОРКЕСТРАТОРОМ ещё 16.08 как стоящий на ложной посылке (D39.144 п.4), в остатке строки его быть не должно; прежний текст (D39.142 п.4, рекомендация заводить; при «да» — 4 строки схемы + 1 строка P7) оркестратор скоро (остаток = только (б) зеркало фронта при разморозке) P7 → фронт при разморозке D39.138, D39.142, D39.143
184 Жанр книги — ВЫКИНУТЬ (слово владельца 16.08). ⚠ ДВЕ ПОЛОВИНЫ ИЗ ЧЕТЫРЁХ УЖЕ ИСПОЛНЕНЫ (сверено кодом при аудите доков 22.08): поле ушло из контракта и из формы интейка батчем 0.3.0, и платформа жанра больше НЕ ЗНАЕТplatform/internal/books/render.go несёт genre шаблона нечитаемым насквозь и говорит об этом прямо. ЖИВЫМИ остаются две: (а) движковая — снять {{genre}} из промптов пары (сегодня он ещё в terminologist.md, editor-mono.md, translator-banknote.md) + поле из канона брифа: двигает BriefHash ⇒ ТОЛЬКО в общее resnapshot-окно, координировать со 161/182, дешёвое окно пока платная книга одна; (б) фронтовая — форма при разморозке; влияние жанр-строки на качество не измерено и уже не будет бэкенд (+платформа/контракт/фронт) скоро (движковая половина — resnapshot-окном) касание в окне 161/182 + батч 183 research/28 Б-23/§8 п.6, D39.138 п.2в
185 Дописывание глав в ТЕКУЩУЮ книгу («костылей не будет»): форма POST /books/{id}/parts + ответ «сколько глав добавится, что сдвинется и почём» ДО подтверждения; экономика уже позволяет В КОНЕЦ за ~$0.02 (ключ вызова позиционный, исходник вне снапшота), вставка в середину = МОЛЧАЛИВАЯ перекупка хвоста ~$911/500 глав — движковый гейт против молчания ОБЯЗАТЕЛЕН (родня дыры Р6 строки 160); платформа второй файл принять не может (re-parse нет); ja-мина: новый ruby-алиас двигает memory_version → снапшот (громкий --resnapshot, уточнение приёмки); полный $0-резюм хвоста — предусловие D15.2 (строка 49) бэкенд+платформа+контракт когда-нибудь (вместе со строками 160162 — дизайн в паке 161) дизайн-пак 161 → стройка research/28 Б-19а/§8 п.7, D39.138 п.2г
186 Сеть: перечитывания ничем не удешевлены (замер 16.08: дерево 2283 глав = 250 КБ на каждый кадр status, фокус-рефетч 12 вкладок = 562 КБ — самый частый трафик порождает переключение вкладок, не пайплайн; гипотетический кадр банка на главу = 372 МБ/прогон; сжатия/ETag/304 нет НИГДЕ): план по эффекту — (1) gzip на текстовых ответах, НЕ на SSE (2) ETag/If-None-Match→304 на списочных GET (3) скоуп в кадре (id+версия, БЕЗ текста) (4) дельта-чтение банка/замечаний ?after_version= (5) staleTime у клиента; шаги 12 — платформа (её же PLATFORM_DIRECTION.md:202-205), семантика — в спеку батчем 183; транспорт НЕ менять (решение владельца по §5б) ⚠ ШАГИ 12 ПОСТРОЕНЫ И ЗАЛЕНДЕНЫ P7 (D39.153): gzip на JSON и НЕ на SSE + ETag/If-None-Match304 на коллекциях, карточке книги и /capabilities; валидатор считается от БАЙТ ответа, поэтому страница 2 и дельта той же ревизии различаются по построению. Остаток — шаги 35 платформа (+контракт/фронт) скоро (остаток: шаги 35) мидлварь/edge платформы + батч 183 + разморозка фронта research/28 §5б/Б-11а, D39.138 п.2д
188 Носитель события «ре-проба 74» (аудит D39.140: событие ждали строки 5 · 36б · 44 и шапка CURRENT-STATE, а владельца у него не было — строка 74 закрыта D39.91): дешёвая ре-проба flash при ПЕРВОМ платном прогоне добора идеала (D39.63 п.4) + слоты, подвешенные на неё: рецензент спорных кластеров банка (остаток 5) · замер второго мнения (36б) · выбор числа флора (44, после одобренной мини-пробы) · итерация №2 редакторов (D39.22/63) · выборочный порог 116 в риге (дописка 172-г) · решение о включении ре-гена перед эскалацией (экс-77, D39.64: «включение — решением при ре-пробе 74»; ручка построена, мертва во всех конфигах, ре-ген ≈7.6× дешевле эскалации) полигон/бэкенд скоро (гейт добора идеала — первый платный прогон) проб-пакет при первом платном прогоне → решения по слотам D39.63 п.4, D39.91, аудит D39.140
189 Мультиязычность фраз ЛОГОВ и АРТЕФАКТОВ движка — вторая половина слова владельца 15.08 (D39.136 п.4а «фразы ВСЕХ зон»; первая половина — юзерский провод — решена ревью 28 Б-1/батчем 183): фразы в bank-stop/статусных артефактах и логи движка вне контракта, носителя не было (research/28 §6, строка Ф-61: «носителя назвать отдельно» — аудит D39.140 подтвердил: не назван); разобрать, что из этого читает ПОЛЬЗОВАТЕЛЬ (артефакты банка — да, через проекцию платформы) и что оператор (логи — легитимно английские) бэкенд когда-нибудь (до второй локали интерфейса) разбор → точечная правка research/28 §6, D39.136 п.4а, аудит D39.140
190 Кросс-СЕМЕЙНЫЙ проход контракт-ревью (не-Claude опровергатели; буква заказа владельца D39.136 п.5 «кросс-модели», исполненная в ревью только кросс-тирами Claude — ограничение честно заявлено research/28 §7/§10): проверка вердиктов доклада моделью другого семейства полигонным контуром; жила только колонкой «ЖИВОЕ» реестра нот — аудит D39.140 дал строку полигон когда-нибудь (после фазы Д; перед лендингом батча 183 — если владелец захочет второй рубеж) полигон-слот с внешним провайдером research/28 §10, аудит D39.140
191 Подпись банка = ОДИН ОК всему банку (модель владельца 16.08, D39.144) — пер-термный полный набор решений НЕ гейт нигде: (а) контракт поправлен (409-полноты снят с resume, pending_decisions информационный — исполнено D39.144); (б) движок: verify_bank-пауза снимается командой resume с решениями «как есть», нерешённое едет авто-строками с пометкой — авто-провод D39.42 п.3 УЖЕ так работает, проверить/ослабить только границу самой паузы; (в) платформа: канал решений P7 строится накопительным БЕЗ гейта полноты + проводка «resume = снятие стопа» до движка; (г) пост-ридинговый цикл правок — выселен строкой 192 (носитель думания) ⚠ ДИСПОЗИЦИЯ ЛЕНДИНГА P7 (D39.153): (в) проводка «resume = снятие стопа» до движка ИСПОЛНЕНА платформой (флаг --verify-bank на resume не передаётся, пин есть); (б) граница паузы движка СВЕРЕНА чтением его кода — зависания нет, движок уходит по авто-ветке при снятом флаге. ⚠ ОСТАТКА-РАТИФИКАЦИИ НЕТ — снято 22.08 сквозной трассировкой (разбор в 203(з)). Прежняя редакция объявляла остатком «движковую половину»: пер-термный гейт полноты жив и лишь обойдён, развилка «одно из двух уступает». Опровергнуто кодом: гейт проверяет полноту ФАЙЛА решений, а не подписей, и ОДИН файл со всем банком его снимает — конфликта с моделью владельца нет. Живой остаток другой и он не решение, а работа: снять обход в платформе, когда появится доставка (строка 199(а)), эррата к атрибуции — карта шапки D-лога, запись 20.08 бэкенд+платформа скоро (остаток — движковая половина, 203з; (б) сверка границы паузы движка — внутри P7 чтением кода, правка движка при расхождении = пинг №18) (б) малое касание движка · (в) внутри P7 слово владельца 16.08, D39.144, D39.42 п.3
192 Пост-ридинговый цикл правок банка — «наше подумать» владельца 16.08 (записано, чтобы не потерялось; точную механику «не продумал ещё никто и нигде» — его слово). UX-модель целиком: юзер нажал перевод → черновая волна + майнинг вместе → на фронте появляются ЧЕРНОВОЙ перевод и ЧЕРНОВОЙ банк · подписывается ВЕСЬ банк одним ОК (D39.144) → перевод уходит в доработку · дальше юзер ЧИТАЕТ, и его опции: поправить термин в банке ЛИБО добавить свой → кнопка «поправить» → пере-генерация, которая по ВХОЖДЕНИЯМ правит запрошенное. Открытые вопросы дизайна: что именно перегенерируется (вхождения ключа · затронутые юниты · со сметой и согласием?) · нужен ли движковый ТОЧЕЧНЫЙ РЕДАКТОР (полигон над этим работает — фаза Д) · форма в контракте (ручки нет) и на экране. Уже лежит под ногами: движковый re-edit по ключу банка со сметой и $0-пере-пином ПОСТРОЕН (строка 49: repin.go/rebill.go, D39.42 п.5/D39.45) · пометка неподписанных строк · дельта-чтение банка (0.3.0). НЕ проектировать до полигонных итогов; затем дизайн-пак на их результатах → слово владельца → стройка владелец+полигон → бэкенд/контракт/фронт когда-нибудь (триггер: итоги фазы Д по точечному редактору) дизайн-пак после полигона → слово владельца → стройка слово владельца 16.08, D39.144 п.1
193 Дыры выдачи МОЛЧАТ в самом тексте книги (инвентарь №18, всё грунтовано кодом): выпавший c-lite-член юнита исчезает из отгруженного текста БЕЗ маркера — читатель получает склейку без пропущенного куска и признака в тексте нет (internal/pipeline/export.go:211-223) · флагнутый юнит отдаётся пустым final_text (:324-329) · платформа поверх сознательно срезает flag_reason/detail до трёх значений (platform/internal/ingest/export.go:21-24) ⇒ на читательской поверхности дыра есть, а причины нет · и ни один гейт не отказывается выдать дырявую книгу: export возвращает успех даже при 100% pending (cmd/tmctl/render.go:474-475 — «export is an audit projection, not a run verdict»), лестницы run_complete/structurally_complete/publishable в коде 0 вхождений. Родня: 141 (сноска без слова-заголовка уезжает дырой) и «политика красных» строки 49 — брать ОДНИМ касанием с ассемблером, врозь не имеет смысла бэкенд (+платформа) скоро (вместе с 49) маркер дыры в тексте + причина на провод + отказ отдавать дырявое как готовое инвентарь №18, D39.147 п.2б
194 Деньги банковых ролей вне контура согласия (приёмка №18, клейм сессии подтверждён двумя линзами и признан ПРЕЕXISTING): UpsertChunkStatus зовётся только волновыми путями, а терминолог и классификатор чекпоинтятся под стадией terminology в главе 0 и строк chunk_status НЕ пишут ⇒ их деньги не входят НИ в число согласия, НИ в projected_book_usd, при этом на сдвиге снапшота они реально пере-покупаются. Дыра ровно того же класса, что чинила строка 181, и это вторая половина дыры Р6 (родня 160/185, 38). Паком не введено и в его заказ не входило бэкенд скоро (следующее касание денежного пути) расширение проекции на банковые роли + тест приёмка №18, отчёт сессии 17.08
195 ОСЬ «идентичность оплаченной работы» — переселена в дизайн-пак 124 (решение владельца 17.08, вариант А; D39.151). Как САМОСТОЯТЕЛЬНАЯ стройка ЗАКРЫТА: маркер snapshot_id/run_id на checkpoints отдельной колонкой НЕ строится. Причина — внешний разбор опроверг посылку «колонка = тождество»: $0-пере-пин законно переносит строку на новый снапшот со СТАРОЙ ценой (stagerun.go:96-105, сверено оркестратором), у старых чекпоинтов бэкфилла нет вовсе (jobs.snapshot_id перезаписывается каждым ре-снапшотом) ⇒ вывод-обход остаётся в коде навсегда как legacy-ветка, а колонка лишь добавляет рядом второй путь. Настоящий корень глубже: в сторе нет первоклассной связи «строка диспозиции ↔ вызовы, которые её оплатили»; снапшот на чекпоинте — прокси, а не примитив. ⚠ Границы семьи сужены тем же разбором: 49 и 195 — про РАЗНОЕ (49 = когда переиспользование законно, 195 = как честно посчитать будущую покупку), общий у них субстрат, не задача; из 124 родня только ось (в). Срочности нет: под контрактом D39.150 («направление ошибки, не точность») ни один исход не занижает молча — недостача несётся историческими деньгами С РАСКРЫТИЕМ, пойманный откат называется вслух. Остаточные нарушения контракта чинятся БЕЗ схемы: 197 и 194 бэкенд когда-нибудь (гейт — триггеры пака 124: дописывание глав 185 · МАСШТАБ · первый внешний потребитель числа) ось дизайн-пака 124 D39.151, внешний разбор 17.08
196 Остаточный класс строки 176: неперехватываемые fatal error Go (конкурентная запись в map, OOM, стек-оверфлоу) по-прежнему дают exit 2, то есть читаются платформой как «завершено с флагами» — recover их не ловит по устройству языка (подтверждено линзой шва исполнением). Строка 176 закрыта для ПАНИК, не для fatal. Лечение — вне exit-контракта: сторож процесса у платформы либо маркер живости в артефакте прогона бэкенд/платформа когда-нибудь отдельное решение приёмка №18, линза шва
197 Фикс-лист приёмки пака честности ФЧ-1…ФЧ-8 (D39.149; тело — archive/PROGRESS-2026-08-17.md, запись приёмки №18): три НЕПРИБИТЫЕ гарантии (снятие фильтра по книге в CheckpointUsageForBook не валит ни один тест — воспроизведено оркестратором · ключ ячейки без chunk_idx съедает деньги соседнего чанка · ветка «строка не пере-оценена» не ловится на продовом пути) · два докстринга reprice.go описывают НЕ то, что делает код · 187 исполнен наполовину (тот же снятый закон в докстринге теста и backend/docs/D15.2-*.md:317) · HistoricalRows не доезжает до status/--json, второй операторский текст (--accept-rebill) без basis · ФЧ-5 РЕШЁН владельцем 17.08 (D39.150): прайсить по модели, которую стадия резолвит СЕЙЧАС, + округление вверх и оговорка в тексте согласия · Status() жёстко падает при ошибке репрайсера против соседней политики деградации · паника поверх ceiling-стопа даёт failed вместо paused (PD-113) · три стейл-докстринга. Носителя-сессии НЕТ — по слову владельца 17.08 пока только записано бэкенд скоро (следующее касание денежного пути; ФЧ-5 обязателен до первого пере-прогона со сменой модели) дофикс-промт ЛИБО попутно ближайшим паком D39.149, D39.150
198 Апгрейд движка стирает замечания и счётчики книги БЕЗВОЗВРАТНО — композиция двух половин, каждая известна по отдельности (приёмка P7, линза «вне карты», обе половины пере-прочитаны оркестратором). Платформа при смене manifest_key сносит ВСЕ unit_resolutions книги (platform/internal/pgstore/readmodel.go:164-165), рассчитывая, что поток их пере-наполнит; движок анонсирует юнит РОВНО ОДИН РАЗ за жизнь книги — ключ unit:<bookID>:<wave>:<chapter>:<unit> БЕЗ метки нарезки (backend/internal/pipeline/events.go:399-400), а леджер анонсов переживает прогоны (backend/internal/store/outbox.go:96 «already announced… by one that ran before it») ⇒ совпавшие координаты не переанонсируются НИКОГДА. Обостряется порядком: долг на материализацию ставится только на ГРАНИЦАХ работы, поэтому первая зачистка после апгрейда случается в КОНЦЕ первого пост-апгрейдного прогона и сносит замечания ТОГО ЖЕ прогона, за который заплачено. Следствия на проводе: «0 из N» на переведённой книге навсегда · шкала снова предлагает купить переведённое · замечания читателя исчезают. Лечится с обеих сторон: движковая половина — метка нарезки в ключе анонса (решение зоны движка), платформенная — не сносить вслепую либо восстанавливать из экспорта. ⚠ Гейт холодного прогона: смысл упражнения — гонять книгу против МЕНЯЮЩЕГОСЯ движка, то есть первый же апгрейд обнулит библиотеку бэкенд + платформа скоро (до первого реального пользователя И до холодного прогона с апгрейдами) связка: решение по ключу анонса в движке → правка платформы приёмка P7 (D39.153)
199 Канал доставки правок банка в движок НЕ построен — цепь «поправить/добавить термин → перегенерация» рвётся на шве платформа→движок (расследование 20.08 по слову владельца; грепы пере-проверены оркестратором). ⚠ ВЕРХНЕГО КРАЯ У ЦЕПИ БОЛЬШЕ НЕТ (испр. 22.08 при лендинге P8-FIX, D39.154). Прежняя редакция строки опиралась на ручку submitBankDecisions с полем dst, куда пользователь мог впечатать исправленный перевод, — она СНЯТА вместе со всей пер-термной моделью подписи (PD-370, ратификация D39.144). То есть сегодня разорван не один конец, а оба: снизу движок умеет точечную ре-редактуру по вхождениям за $0 на незатронутых юнитах со сметой и порогом согласия (stagerun.go:88-107, repin.go/rebill.go), а сверху ручки «поправить/добавить термин» нет НИ В ЗОНЕ, НИ В КАНОНЕ — на 17 путей канона запись в банк была ровно одна, и она ушла. Это ужесточает строку, а не смягчает: раньше не хватало трубы посередине, теперь не хватает ещё и входа. ⚠ И третья половина, вскрытая сквозной трассировкой 22.08 — «снизу движок готов» верно ЛИШЬ НАПОЛОВИНУ, сверено кодом: (а) правка существующего термина доедет до РЕДАКТОРА, но не до ЧЕРНОВИКА — loadMinedDelta принудительно ставит Source:"mined" (backend/internal/pipeline/mining.go), а базовый банк черновой волны mined-строки ИСКЛЮЧАЕТ (seeding.go:143-153, if row.Source == "mined" { continue }). Чтобы правка формировала сам черновик, она должна ехать через glossary_seed, а это сдвиг БАЗОВОГО снапшота ⇒ пере-оплата всей черновой волны. То есть «дёшево» работает только для редакторского слоя; (б) вход в пере-генерацию после прочтения закрыт двумя флагами, которых платформа не передаёт: --resnapshot и --accept-rebill сверх порога. platform/internal/runner/engine.go TranslateArgs собирает РОВНО translate --config <...> [--verify-bank] [ceiling] и больше ничего; (в) команды, превращающей карту подписи в подписанный mined_delta, у движка НЕТ — в tmctl девять подкоманд, среди них ни sign, ни promote, а банк-экспорт объявлен «проекция, никогда не источник». Писателя файла надо НАЗВАТЬ, и это ровно развилка (а) выше. ⚠⚠ И ТРИ МИНЫ В САМОМ ФОРМАТЕ ФАЙЛА, которые обязана знать сессия, которая его напишет (сверено кодом 22.08): (1) копи-паст карты подписи НЕ РАБОТАЕТ. Карта пишется вся со Status: "auto" (internal/miner/miner_emit.go, док прямо: «Every term stays status:auto — that is the load-bearing line», и это запинено). А unsignedEngineSurfaces выбрасывает Source=="mined" && Status!="approved" (mining.go:710-719) ⇒ механически скопированные строки отфильтруются как неподписанные и стоп НЕ снимется — бесконечная петля. Писать надо ЯВНЫЙ status: approved. ⚠ Тонкость в другую сторону: ОПУЩЕННЫЙ статус в сид-загрузчике дефолтится в approved (membank/memseed.go:71-74=status = "approved"), то есть файл БЕЗ поля статуса работает, а файл со скопированным auto — нет. (2) терм БЕЗ dst промотить нельзя вообще: approved/draft с пустым dst — ПАДЕНИЕ загрузки сида, то есть срыв всего прогона (memseed.go:83-86). А dst есть не у всех — часть термов WHICH-only (mining.go считает withDst именно поэтому). Для них единственный очищающий глагол — ОТКАЗ (mined_rejects, берёт только src). (3) хвост реверс-секции ломает «один ОК» на больших книгах: reverseSectionTerms режет кап 200 ПОСЛЕ фильтров, и движок сам предупреждает — «the tail is NOT in this signature map and re-proposes on the next run». При >200 banknote-only поверхностей подпись всей карты стоп НЕ снимет: приедет свежая двухсотка, и актов подписи понадобится ceil(N/200). Носителя между ними нет: колонки action/dst не читает НИ ОДИН SELECT (единственная выборка readmodel.go:336 проверяет лишь факт наличия строки) · `mined_delta mined_rejects по Go платформы = **0** вхождений · воркер, который должен переносить решения в эти файлы перед resume, описан в комментарии её же миграции (00002_readmodel.sql:172-174) и НЕ построен. **Делится надвое:** (а) **труба** — платформа пишет решения в два файла, которые движок читает. ⚠ **«Контракт файлов существует, проектировать нечего» — ОПРОВЕРГНУТО КОДОМ 21.08** (опровергатель промта, пере-проверено оркестратором построчно): движок читает mined_delta/mined_rejects, ТОЛЬКО если их путь объявлен в book.yaml (backend/internal/pipeline/mining.go:855-858=if r.Book.MinedDelta == ""), а объявленный ключ с НЕсуществующим файлом валит загрузку конфига целиком (backend/internal/config/book.go:199-207=is not readable). Ключей нет ни в шаблоне оператора, ни в дев-стенде (backend/example/book.yaml— ноль вхождений), и добавить их платформа не может молча: она пишетbook.yamlОДИН раз подO_EXCL и «никогда не перезаписывает» (platform/internal/books/render.go:106-109=writes the file once and never again), а схему движка знать не должна — это ратифицированная форма Б (D39.110 §2б). **Значит развилка есть и она упирается в ратифицированную границу владения book.yaml:** объявляет ли ключи платформа при рождении книги (и создаёт ли два пустых файла сразу, иначе движок не стартует) · несёт ли их шаблон оператора · двигается ли граница владения. Решать её — ратификацией, не паком. Закрывает и честность decline(PD-277 — его текст сегодня относит работу к отложенной 192, пере-диспозиция нужна тем же решением); (б) **отложенное владельцем** — правки ПОСЛЕ прочтения уже переведённой книги: там правка банка двигает снапшот, движок падает громко без явного согласия на пере-оплату, аresnapshot accept-rebill по Go платформы = 0 ⇒ прогон не перегенерирует, а УПАДЁТ (сегодня не кусает только потому, что до движка не доезжает ничего). Половина (б) — территория строки **192**. ⚠ **ПОПРАВКИ 23.08 (№19, консилиум шва):** (1) формулировка «ни на одном конце» СНЯТА — принимающий конец ДВИЖКА построен (pipeline/mining.go:830,856=if r.Book.MinedRejects == ""), не построен ПЛАТФОРМЕННЫЙ путь целиком; (2) тело развилки с четырьмя вариантами и ценой лежит ТОЛЬКО в platform/docs/archive/platform-PROGRESS-P8.md:176-205=Двигается ратифицированная граница владения; (3) есть СЕДЬМОЙ вариант, которым развилка не решается, а РАСТВОРЯЕТСЯ: движок дефолтит mined_delta/mined_rejectsпо конвенции каталога (как уже делает сproject_dbconfig/book.go:163-167=b.ProjectDB = filepath.Join(dir, b.BookID+".db")— и как уже читает.auto-bank.yaml, mining.go:644), писателем становится движковый $0-глагол ⇒ ключей никто не объявляет, файлов заранее никто не создаёт; (4) зона дополнена ВЛАДЕЛЬЦЕМ: канон зовёт половину (а) блокером на нём; (5) ⚠ **ГРАНИЦА, которую труба НЕ снимает и которая до 23.08 жила только внутри чужого списка ошибок:** правка, доставленная через mined_delta, доезжает до РЕДАКТОРСКОЙ волны, но НЕ формирует черновик — черновая волна выбирает по банку БЕЗ mined-строк (backend/internal/pipeline/seeding.go:140=The DRAFT wave selects over a BASE-scoped bank). Для читателя это не дефект: отгружается выход редактора, а юниты с термином пере-редактируются, незатронутые пере-пиниваются за $0 (backend/internal/pipeline/stagerun.go:88-107=POINTWISE RE-EDIT). Настоящая цена тоньше и НЕ ИЗМЕРЕНА: редактор латает черновик, построенный вокруг старого термина (согласование, род, игра слов). Правка, формирующая сам черновик, — это glossary_seed`, то есть сдвиг базового снапшота с пере-оплатой; территория строки 192, глубину решает владелец ПОСЛЕ фазы Д владелец + платформа + бэкенд (а) РАСТВОРЕНА D39.156 · (б) гейчена 192
200 Сквозная полоса прогресса вместо пофазной — требование владельца 20.08, сформулировано и ждёт исполнения. Сегодня прогресс считается ПО ОТРЕЗКАМ и при снятии стопа начинается с нуля (канон §Progress: «When a stop is cleared the counter starts again from zero») ⇒ пользователь видит 100% после черновика и обнуление — владелец назвал это дефектом подписанного, не вкусовщиной. Форма решения: ОДНА доля на всю работу прогона, считает СЕРВЕР (иначе клиент снова начнёт знать про фазы), плюс подпись «что делается сейчас» и неопределённый индикатор там, где доли в главах нет. ⚠ Веса «условно 10/40/40» НЕ нужны для переводческой части: движок объявляет знаменатель каждого прохода и ноль для прохода, которого на деплое нет (backend/internal/pipeline/events.go:297-323) ⇒ доля = сделано по всем проходам ÷ запланировано, без подобранных констант, и на деплое без редактора честно доходит до 100%. Догадка остаётся только у банка: поток прогресса несёт лишь два переводческих прохода, майнинг знаменателя не объявляет — вопрос движку: может ли майнинг объявлять знаменатель (он идёт по главам). Цена: правит канон §Progress + Book.chapters_done, то есть новый минор; пока фронт заморожен, минор бесплатен контракт → платформа + бэкенд скоро (следующий минор контракта) контрактная сессия + платформенная половина; вопрос движку о знаменателе майнинга слово владельца 20.08, D39.153
201 Движковое «Глава N» доезжает читателю ВНУТРИ текста, обходя дисциплину heading: null (линза шва P7, пере-прочитано оркестратором): backend/internal/pipeline/export.go:230 приклеивает детерминированный порядковый к экспортному тексту первой юнит-главы (ce.FinalText = chunk.ApplyHeading(...)), колонка Source при этом остаётся heading-stripped. Платформа переносит обе как есть и честно отдаёт heading: null — то есть клиент нарисует СВОЙ порядковый на языке своего интерфейса над абзацем, который уже начинается с русского «Глава N», а исходная колонка соответствующего маркера не несёт: пара визуально рассинхронизирована на каждой первой главе. Конкретное следствие открытого К-2 контракта; родня движковой строки 160 (глава без заголовка) бэкенд когда-нибудь (с 160) отдельное решение приёмка P7 (D39.153)
202 Живой перевод книги НАСКВОЗЬ через API платформы не гонялся НИ РАЗУ (obstacle сессии P7, подтверждён приёмкой): всё после «прогон стартовал и остановился» — подпись банка, halt на потолке, резюм после пополнения — покрыто батареей против живого Postgres, но с движком-заглушкой; настоящий манифест, сайдкар банка и причины флагов будут ПЕРВЫМИ данными, форму которых платформа не сочинила сама. Форма проверки (решена): только через API, как ходил бы клиент — интейк → старт → живой движок с ключами провайдера → поток событий → подпись и продолжение → чтение глав/юнитов/замечаний/банка и сверка с тем, что движок реально произвёл; качество перевода НЕ предмет (полигон). Цена ≈ $0.05 на десятиглавую книгу. Решение владельца 20.08: ПОСЛЕ холодного прогона движка — гонять одну неготовую систему против другой смысла нет платформа скоро (гейт: холодный прогон движка) короткая сессия по промту оркестратора слово владельца 20.08, D39.153
203 Хвосты контракта после синка 0.4.0 — ОТКРЫТА ЧЕТВЕРТЬ, остальное исполнено (тела релеев — platform/docs/archive/P7_ACCEPTANCE_HANDOFF_2026-08-17.md §7; сюда переписаны НЕ тела, а статус — один носитель на факт). ⚠ Сверено грепом при лендинге, потому что первая редакция этой строки уже разошлась с деревом: (б) ИСПОЛНЕН — срезанная фраза компаньона §2.14 стоит на месте (14-api-contract/README.md:510=различать причины отказа клиент не может по замыслу) · (д) ИСПОЛНЕН — клетка приложения А заполнена unspecified (README.md:1376 — ⚠ первая редакция писала :1391, это строка ДРУГОГО приложения; испр. 20.08) · (г) наполовинуunspecified ратифицирован в каноне (openapi.yaml:1784-1787), открыта только ГРАНИЦА ступеней замечаний (две ступени при девяти рангах движка) → это строка 148 · (и) закрыт полем stop_requested (D39.152) · (л)(м)(н)(о) закрыты контрактной сессией. ОТКРЫТО РЕАЛЬНО: (а) канон-половина про /auth — компаньон поверхность описывает (§2.14), а канон говорит только «Signing in is not part of this surface» (openapi.yaml:35-36) и НЕ предупреждает, что конверт вне /v0 может прийти БЕЗ обязательного code; сгенерированный по канону клиент об это спотыкается · (з) ⚠ СНЯТО КАК РАТИФИКАЦИЯ 22.08 — конфликта моделей НЕТ, я нёс причину и следствие наоборот. Прежняя редакция писала: «D39.144 ратифицировал подпись = ОДИН акт, движок держит пер-термный гейт полноты, одно из двух должно уступить». Сквозная трассировка это опровергла КОДОМ: гейт проверяет полноту не ПОДПИСЕЙ, а ФАЙЛА решений, и ОДИН акт его снимает — loadMinedDelta штампует только Source, статус не трогает (mining.go:855-867) → опущенный статус дефолтится в approved (membank/memseed.go:71-74=status = "approved") → unsignedEngineSurfaces выбрасывает лишь Source=="mined" && Status!="approved" (mining.go:710-719) ⇒ промоутнутые строки остаются сид-поверхностями, дельта пустеет, стоп снимается. Шапка файла говорит это прямым текстом. Один файл со всем банком = один ОК. Обход в платформе (--verify-bank не передаётся на resume) — костыль под ОТСУТСТВУЮЩУЮ ДОСТАВКУ, а не под расхождение моделей: как только доставка появится, флаг можно просто оставить включённым. Настоящий и единственный блокер темы — владение book.yaml, строка 199(а). Ратификации здесь НЕ нужно; остаётся снять обход одной боевой строкой (platform/internal/runs/spawn.go) и семью строками ставшего ложным обоснования — работа платформенного пака, не решение владельца · (к) ключ project_db в book.yaml: договорить, кто им владеет — шаблон оператора его не содержит, движок делает необязательным. ⚠ Следствие «на штатном деплое банк не читается» ОПРОВЕРГНУТО живым кодом (проверено при лендинге): акт 5 внёс фолбэк <book_id>.db и назвал прежний отказ багом (platform/internal/runner/artifacts.go:82-90=The key is OPTIONAL to the engine); первая редакция этой строки повторила клейм хендоффа зоны, не сверив с деревом — остаток чисто договорной · (л) остаток закрытой строки 148 — Приложение А компаньона. ⚠ Сама 148 СНЯТА 21.08 по слову владельца: она держала мир, которого больше нет — «карта потеряна инцидентом 08.08, реконструкция у оркестратора №15, решить, брать ли черновиком». Реконструкция брать нечего: прежняя карта вела «причина движка → ФРАЗА», то есть предполагала, что фразу рисует СЕРВЕР, а батч 0.3.0 эту политику ОТМЕНИЛ — Note несёт машинный code, фразу рисует клиент, Note.message с провода снят (14-api-contract/README.md:1332=Карта «причина → КОД контракта). Реально пуста другая клетка: соответствие причин движка кодам замечаний, и правила её заполнения в компаньоне уже написаны (фраза по ДОККОММЕНТУ disposition.go, а не по имени константы — инверсия уже стоила двух фраз; класс 2 схлопывается в ОДИН код). Исполнитель — контрактная сессия, не оркестратор контракт/доки скоро (следующее касание контракта, вместе с 200) контрактная сессия приёмка P7 (D39.153)
204 Движок не публикует причины флагов ДАННЫМИ — карта причин у платформы рукописная и расходится молча (релей §7(в) хендоффа P7; зона платформы в чужой бэклог не пишет и просила строку сюда — platform/docs/archive/platform-PROGRESS-P7.md:206). Сегодня platform/internal/ingest/notes.go держит рукописную копию закрытого словаря ЧУЖОЙ зоны: 15 причин движка → коды замечаний контракта, сверено побайтно на 20.08 и верно СЕЙЧАС. Импортировать движок платформе нельзя (D39.85 — разные модули), поэтому расхождение появится молча в тот день, когда движок добавит причину: платформа отдаст unspecified и напишет ERROR в лог, то есть деградация честная, но карта протухнет незаметно. Лечение: движок публикует свой словарь причин артефактом-данными (тем же классом, что манифест и сайдкары банка), платформа читает его вместо копии. ⚠ Носителем был ТОЛЬКО регистр платформы (PD-246) — то есть обязательство к зоне движка жило внутри зоны автора; поймано ревьюером полноты выгрузки при лендинге бэкенд когда-нибудь (со следующим касанием эмиссии флагов) отдельное решение приёмка P7 (D39.153), релей §7(в)
205 Гейт якорей: ИСПОЛНЕН 21.08 — сверка по содержимому, двусторонняя дельта, объявленная слепота. Был: проверял только существование файла и переполнение номера, поэтому дал ЗЕЛЁНЫЙ на четыре якоря, сломанных архивацией — а оркестратор на эту зелень опёрся вместо ручной сверки. Стало (docs/scripts/counts.py): якорь может нести ОПТ-ИН токен ожидания `путь:12-14`=`подстрока`, и такой якорь сверяется по содержимому; область расширена с docs/ на platform/docs и frontend/docs (98 доков); из хука убран быстрый выход по «коммит не трогает docs/» — он ампутировал ЦЕЛЕВУЮ сторону, а цели у нас в основном КОД, то есть главный двигатель протухания приезжал ровно тем коммитом, на котором хук молчал (проверено ТЕСТ-КОММИТОМ, не ручным прогоном — норма D39.148). ⚠ Разбор с внешним ревьюером снял три моих ошибки дизайна: (1) у дельты ДВЕ роли, и путать их нельзя — ТРЕБОВАТЬ токен можно только на затронутых строках (иначе долг блокирует всех), а ПРОВЕРЯТЬ уже написанные токены дельта ограничивать не должна вовсе: токен был истинным при записи, значит упавший — гниль по построению; corpus-wide проверка схлопывает «пропущенное окно» (коммит без хука, --no-verify, свежий клон, проигнорированный warn) из «навсегда» в «до следующего прогона»; (2) окно диапазона 80-82,243 считалось как min..max — 164 строки, и токен, случайно живущий внутри, красил зелёным; теперь ОБЪЕДИНЕНИЕ отрезков; (3) литеральная сверка токена была машиной ложных тревог — фраза, разорванная переносом строки в цели, непроверяема в принципе, а будущая пере-вёрстка абзаца кричала бы «цель уехала» на невиновного; теперь ПРОБЕЛЬНАЯ нормализация (детерминированная и симметричная), разметка остаётся литеральной. ⚠ Мой довод «неудобство и есть механизм» был неверен: мой собственный случай был FALSE POSITIVE самого гейта — токен был истинным, цель не двигалась. ОБЪЯВЛЕННАЯ СЛЕПОТА (печатается гейтом каждый прогон): якорь БЕЗ токена — только существование и длина · подмена цели файлом с тем же путём ловится только токеном · цели читаются из ДЕРЕВА, поэтому чужой незакоммиченный WIP может транзиентно и уронить токен, и спасти · токен доказывает ссылочную свежесть, НЕ истинность фразы дока о цели · в ручном прогоне «дельта» = всё незакоммиченное кем угодно, поэтому ТРЕБОВАНИЕ токена живёт только под --from-index. ОСТАТОК: миграция корпуса на токен-форму органическая — токен требуется на ЗАТРОНУТЫХ строках, поэтому счёт растёт сам с каждым касанием. Числа здесь НЕ держим (первая редакция держала «4 из ~580» и протухла за сутки): текущий счёт токенов, якорей и доков гейт печатает КАЖДЫЙ прогон — python3 docs/scripts/counts.py --lint оркестратор/доки сделано 21.08, миграция органическая исполнено; остаток гасится касаниями аудит работы №18 + разбор с внешним ревьюером, 21.08
206 Канон 0.4.0 объявляет ручку, которой зона больше не отдаёт — ломающий минор 0.4.0 → 0.5.0 (контрактная половина PD-370, лендинг P8-FIX D39.154). D39.144 отменил пер-термную подпись 16.08, зона сняла write-путь 22.08, а словарь канона его держит: путь POST /books/{bookId}/bank/decisions, глагол и три схемы — ~17 мест в openapi.yaml + ~8 в компаньоне, поимённый разбор (6 мест прямой лжи, 3 самопротиворечия) — platform/docs/archive/platform-PROGRESS-P8.md, раздел «Насколько страдает контракт». ⚠ ОБЪЁМ ШИРЕ ОДНОЙ РУЧКИ — сверено аудитом доков 22.08 против кода платформы, и это меняет форму работы: (1) пер-термный механизм решений живёт ещё в ПЯТИ местах ЖИВЫХ, обслуживаемых схем — после удаления пути канон продолжит учить механизму, которого нет; (2) §2.9 компаньона («Подпись — набор решений») стоит на отменённой модели ЦЕЛИКОМ и просит поле под таблицу, в которую больше ничего не пишется; (3) таблица §3 компаньона — единственное место, где ведётся статус построенного, — объявляет НЕ ПОСТРОЕННЫМИ шесть поверхностей, которые P7 построил, а P8 сохранил, и держит снятую ручку строкой «НЕ ПОСТРОЕНО, вход P7», то есть как отложенную работу; (4) провенанс-якоря компаньона на httpapi/v0.go сдвинулись примерно на +200 строк и указывают в посторонний код. И дыра, которую спил вскрыл: approve+dst был ЕДИНСТВЕННЫМ живым носителем того, что D39.144 оставила пер-термным — «поправить термин», — а «добавить свой термин» модель называет, и в контракте его нет вовсе. То есть у собственной фразы канона «correct what they care to, then release it with ONE resume» ручки не осталось. До правки деплой обслуживает на одну ручку меньше, чем объявляет — цена, названная заранее, а не найденная приёмкой. ⚠ БАТЧ РАЗДЕЛЁН 22.08 по итогам сквозной трассировки — и довод, которым я его склеивал, снят. Прежняя редакция строки везла 206 ОДНИМ минором со строкой 200 и хвостами 203 «ради одной перегенерации фронта вместо трёх» (D39.152 п.7). Довод сегодня почти ничего не весит: зеркало фронта ратифицированно стоит на 0.2.3 и при разморозке платит переход ОДНИМ куском в любом случае. А блокеры у этих работ РАЗНЫЕ, и склейка подчиняла незаблокированное заблокированному: 206 не заблокирована ничем; ручка правки термина заблокирована ратификацией 199(а); строка 200 заблокирована ответом ДВИЖКА на вопрос «может ли майнинг объявлять знаменатель»; из хвостов 203 в минор едет одна текстовая правка (а), а (з) и (к) — ратификации, а не правки. Порядок: 0.5.0 СЕЙЧАС и только гигиена — она снимает живую ложь (деплой обслуживает на одну ручку меньше, чем объявляет) и не ждёт ничьих решений; новая ручка, сквозной прогресс и хвосты — 0.6.0 после ратификаций. Объём гигиены назван: ~14 мест в openapi.yaml (4 блока / ~105 строк на снос плюс проза в 10 живых схемах) + ~7 живых мест в компаньоне + таблица §3 (уже пере-снята 22.08) + одна строка в платформе (ContractVersion, иначе краснеет гейт gates/contract_test.go). ⚠ ДОБОР СОСТАВА аудитом 2223.08 — с ЧЕСТНОЙ атрибуцией, потому что это находки оркестратора №19, а не ратифицированные факты. Пере-проверено мной лично: (а) строки :672/:673 таблицы §3 компаньона объявляют отсутствующей платформенную проекцию банка и замечаний, а она ПОСТРОЕНА — маршруты platform/internal/httpapi/v0.go:79-80=GET", path: "/books/{bookId}/bank и хендлеры platform/internal/httpapi/reading.go:193=func (h *v0) listBank; (б) зеркало фронта стоит на 0.2.3 против канона 0.4.0, и сверка канон↔зеркало существует ТОЛЬКО прозой. СО СЛОВ панели, мной НЕ пере-проверено — исполняющая сессия проверяет сама: баннер таблицы §3 объявляет её пере-снятой при трёх строках против кода · ≈19 голых провенанс-якорей компаньона на код платформы протухли. ⚠ ВОЗВРАЩЕНО В СОСТАВ 23.08 — моё прежнее опровержение стояло на ЛОЖНОМ основании. Я написал «слова „пять“ в строке нет вовсе» — оно есть, тремя предложениями выше: «пер-термный механизм решений живёт ещё в ПЯТИ местах ЖИВЫХ, обслуживаемых схем», и рядом стоит «проза в 10 живых схемах». Две цифры об одном множестве сосуществуют и противоречат друг другу; клейм панели «ярлыки перепутаны» я НЕ разрешил и снимать его было нельзя. Машинный ПОЛ для исполняющей сессии, с командой и с явной границей пола: `grep -cE 'BankDecision bank/decisions' docs/architecture/14-api-contract/openapi.yaml→ **9**, и раскладка их такая — **восемь внутри четырёх сносимых тел** (путьdocs/architecture/14-api-contract/openapi.yaml:469=/books/{bookId}/bank/decisions:плюс три схемы на строках 1939, 1980, 1992) **и одно прозаическое** в живой схемеBankTerm` (строка 1830). ⚠ Граница пола названа честно: СЕМАНТИЧЕСКАЯ проза о пер-термной модели этим токеном НЕ ловится — пример на строках 442446, и её свип, как и разъятие «пять мест» против «десяти схем», остаётся работой минора: пол даёт нижнюю границу, а не ответ оркестратор/контракт скоро (следующим минором) ратифицировано D39.154 п.8
207 Пол самосогласованности манифеста стоит только у материализатора, интейк тот же документ ПРИНИМАЕТ — и по такой книге можно ОПЛАТИТЬ прогон (PD-367, вторая волна ревью P8-FIX). Манифест {ChaptersTotal: 120, UnitsTotal: 400} с пустым списком глав Whole() отвергает, а books.Parse заводит книгу not_started с chapter_count=120 и пустым деревом; потолок считается ОТ chapter_count. Очевидное лекарство опровергнуто исполнением самой зоной: применить Whole() на интейке нельзя — вся батарея интейка ездит на манифестах без списка глав, контракт интейка это только счётчики. Значит решение не зонное: либо контракт интейка меняется, либо пол ставится в другом месте цепи оркестратор → платформа скоро нужно решение (лекарство ломает запиненный контракт интейка) D39.154 п.10, PD-367
208 Эскалационный хоп на Gemini ТИХО ТЕРЯЕТ инъекцию банка памяти — книга едет без канона имён (живая проба полигона 22.08, подтверждена вендор-докой и пере-проверена оркестратором по коду). OpenAI-совместимый слой Gemini принимает РОВНО ОДНО системное сообщение, лишние выбрасывает МОЛЧА — без ошибки, при finish=stop и внешне правильном переводе. Замер полигона на одном и том же системном тексте 7970 знаков: одним сообщением → prompt_tokens 2994 и маркерная инструкция ИСПОЛНЕНА, двумя → 535 токенов и инструкция НЕ исполнена. Механизм вендорский, поэтому уход на нативный API НЕ лечит: systemInstruction там — один объект Content. Наша сторона: backend/internal/pipeline/render.go штатно строит ВТОРОЕ системное сообщение (инъекция глоссария/STM), backend/internal/llm/httpllm.go toOpenAIMessages копирует сообщения дословно, склейки под Gemini нет нигде — а gemini-3.1-pro-preview стоит в ратифицированной цепочке эскалации ВО ВСЕХ четырёх арм-конфигах. ⇒ любой хоп на Gemini при непустой инъекции теряет глоссарий, и это невидимо гейтам годности. ⚠ Класс в проекте УЖЕ решён рядом и не обобщён: provider_anthropic.go сворачивает ведущий system-префикс в одно поле и падает громко на system посреди диалога. Оговорка D22.3 «экспозиция Ф1 нулевая» держится на МАРШРУТЕ (до Gemini в дефолте не доходят), а не на коде — то есть на одном включённом budget_usd от дефекта в проде. Полигон у себя починил склейкой по вендору (eval/dovodka/rol.py), в движок не лез; квирк записан в 00-provider-quirks.md бэкенд скоро (до первого платного прогона с ненулевым budget_usd эскалации) склейка системных сообщений для Gemini в транспорте + пин пинг полигона №19 (22.08), вендор-дока ai.google.dev/api/generate-content
209 Риг живых проб не может залогировать тела запросов ни при каких env (находка бэкенд-пака честности 17.08, оставшаяся без носителя до аудита доков 22.08): LOG_LLM_BODIES=1+LOG_LEVEL=debug объявлены носителем тел, но ключ читается из obs.ReqInfo контекста, а live_reprobe_test.go строит ctx БЕЗ WithReqInfo — гейт obs/logging.go не пропускает. Обход, которым пользовались: ручной дамп сообщений в файл. Цена — каждая живая проба, которой нужно прочитать провод глазами, платит за обход заново бэкенд когда-нибудь (следующее касание рига живых проб) малое касание (WithReqInfo в риге) + пин пак честности 17.08, вынесено аудитом доков 22.08
210 Род НЕ ПРОИЗВОДИТСЯ авто-путём вовсе — механизм доставки построен, а данных для него нет (найдено трассировкой цепи банка 22.08, сверено кодом оркестратором; полигон вскрыл то же независимо: «в банке НЕТ ПОЛЕЙ ПОЛА»). Доставка рода на провод ПОСТРОЕНА и работает: membank/memory.go кладёт genderConstraintNote в черновую инъекцию — но ТОЛЬКО для строк со статусом Confirmed, по прямой директиве владельца D39.21 «род должен доезжать». Данных ей никто не даёт: промпт терминолога возвращает РОВНО ТРИ поля (backend/prompts/zh-ru/terminologist.md: термин · перевод · уверенность 0100) — поля рода в ответе НЕТ; майнер берёт gender исключительно из СИДА (internal/miner/miner_emit.go seedMeta, meta.gender = e.Gender), эмитируемые кандидаты его не несут. ⇒ на любой книге без ручного сида ось рода мертва по построению, и «плывущий род» — это не дефект рендера, а отсутствие входных данных. Прямо бьёт по цели №1: реестр памяти C3 называет русский глагол прош. вр. при скрытом роде «механическим спойлер-каналом» и «жалобой №1 читателей MTL» (строка 82). Развилка, которую надо назвать до стройки: добавлять ли поле рода в ответ терминолога (двигает провод ⇒ ТОЛЬКО в вайр-батч 182) ЛИБО выводить род отдельным дешёвым проходом, ЛИБО признать род сид-только свойством и гейтить им качество явно. Родня 82 (морфо-гейт рода) и 178 (калибровка sense). ⚠ ДОПОЛНЕНО 23.08 (№19): замка ДВА и они независимы — род рендерится только при Disp == Confirmed (membank/memory.go:705-713,823-827=Mirrors the editor block's confirmed-only gender), а mining.go:676 запрещает авто-банку статус approved. Род НЕ единственное осиротевшее поле: Sense/Speech/Decl тоже приходят только из сида, авто-продюсер есть лишь у Dst (терминолог) и Type (классификатор). ⚠ Поле Gender в схеме сида УЖЕ ЕСТЬ (internal/seed/seed.go:68=Gender string) — ось мертва в ПИСАТЕЛЯХ, не в формате. ⚠ И тесты слепы ПО ПОСТРОЕНИЮ (пере-проверено 23.08): все gender-кейсы конструируют род РУКАМИ, то есть зелёная батарея не отличает «производитель работает» от «производителя нет»; гейта на дрейф рода в движке нет бэкенд (+полигон на замер) скоро (цель №1; правка провода — вайр-батчем 182) развилка → решение → правка промпта/прохода + замер на прогоне с редактурой трассировка цепи банка 22.08, D39.21, C3 реестра памяти
211 Движок на SaaS НЕ ПОЛУЧАЕТ провайдерских ключей — блокер живого прогона (202). Прод-путь systemd-run --user (platform/internal/runner/runner.go:136,149="systemd-run", args...), окружение юнита = окружение systemd-менеджера + --setenv из s.Env, а платформа кладёт туда РОВНО TM_TRACE_ID (runs/spawn.go:168=Env: engineEnv(engineStreamID(, engineEnv :268). Замысел записан комментарием :265-267 («движок читает ключи из .env рядом со своим book.yaml»), движок так и делает (backend/cmd/tmctl/main.go:184-185=loadDotEnv(filepath.Join(filepath.Dir(inv.cfgPath), ".env"); cmd.Dir = workdirrunner/engine.go:176=cmd.Dir = workdir, оба пути в ОДИН файл), а кладёт туда .env НИКТО: в каталоге книги платформа создаёт только book.yaml (books/render.go:109=`os.O_CREATE os.O_EXCL, O_EXCL) и исходник (books/books.go:259-264=os.O_CREATE os.O_EXCL); писателя .envвplatform/internal/ноль. ⚠ **Почему пережило все батареи — ловушка паритета dev/prod:** дев-супервизор запускает движок обычным процессом сEnv=nil и наследует окружение ПЛАТФОРМЫ, что обещает его же докстринг (ingest/supervisor.go:35-36,65-67=Provider keys reach the engine through it) — стенд работает, прод голодает, гейты гоняют дев-путь. **Форма фикса (консилиум 22.08):** путь к файлу ключей аргументом у translate(читающим $0-глаголам ключи запрещены —dotenv.go:53-55`), деплой-файл ПЕРВЫМ в цепочке без перекрытия, дев-супервизор на тот же механизм. Довод формы: ключи обязаны покинуть каталог пользовательского контента — сегодня бэкап/экспорт каталога книги несёт секреты. ⚠ Ключи ОБЩИЕ на всех пользователей (слово владельца 22.08); BYOK не исключён позже и ложится в ту же форму пер-книжным путём бэкенд + платформа блокер строки 202
212 Загрузчик сида НЕстрогий — опечатка в имени поля теряется молча. backend/internal/membank/memseed.go:41=yaml.Unmarshal(raw, &sf) — голый yaml.Unmarshal без KnownFields; gendr: вместо gender: выбрасывается ДО валидации, а seed-lint этого не видит (валидирует значения, не ключи). Тот же класс тихой подмены, против которого пак-16 покупал строгость book.yaml (config/book.go:143=dec.KnownFields(true)) — и живёт он в файлах, которые владелец правит РУКАМИ чаще всего. Ратификации послабления не найдено: пак-16 покупал строгость только для book.yaml бэкенд скоро (в движковый пак) одна строка + тест на unknown-key консилиум шва 22.08
213 Платформа дублирует движковую конвенцию пути и знает суффикс чужого артефакта. platform/internal/runner/artifacts.go:65-95=neither project_db nor book_id парсит book.yaml нестрогим декодером ради двух ключей и при пустом project_db САМА вычисляет filepath.Join(workdir, book_id+".db"), повторяя backend/internal/config/book.go:163-167=b.ProjectDB = filepath.Join(dir, b.BookID+".db"); суффикс .bank.json зашит на :37. Смена дефолта в движке тихо уводит чтение банка платформой на несуществующий путь. ⚠ Свип ВСЕЙ границы движок↔платформа (консилиум 22.08) дал ровно ОДНО такое место плюс тривиальность: дев-супервизор хардкодит "book.yaml" мимо константы ConfigFile (ingest/supervisor.go:140="status", "--config"). Прочее знание платформы о движке — ратифицированные каналы, не гниль. Фикс: движок отдаёт путь артефакта аддитивно (status --json либо ответ нового глагола), платформа выкидывает свой projectDB(). ⚠ Пере-именование банк-экспорта в фикс-имя рядом с events.jsonl — ЛОМАЮЩЕЕ, его место в окне строки 161, НЕ здесь бэкенд + платформа скоро (в те же паки) движковый + платформенный пак консилиум шва 22.08
214 Подпись банка не оставляет на банке НИ ОДНОГО следа. Единственная долговечная запись акта подписи — булев bank_released на прогоне (platform/internal/pgstore/runs.go:844=bank_released = bank_released or $2): кто и когда подписал, что именно вошло в подписанный набор — не хранится нигде. Следствие: пост-фактум ответить «почему в книге этот перевод термина» нельзя, а при пере-нарезке или пере-прогоне восстановить намерение человека не из чего. Всплыло трассировкой цепи банка 22.08, подтверждено пере-проверкой платформа + бэкенд когда-нибудь (с трубой доставки правок, D39.156) отдельное решение о провенансе подписи трассировка цепи банка 22.08, пере-проверено №19
215 $0-точечный репин движка работает ТОЛЬКО под --resnapshot, а платформа этого флага не передаёт. Механизм пере-привязки незатронутых юнитов при сдвиге банка построен (backend/internal/pipeline/stagerun.go:88-107=POINTWISE RE-EDIT) и он и делает подпись термина доступной по цене; но с платформы он недостижим — она зовёт translate без флагов сверх потолка и --verify-bank. ⇒ на SaaS правка термина сегодня стоила бы полной пере-редактуры, а не дельты. Родня строки 199(б) (нулевой набор consent-флагов) платформа + бэкенд когда-нибудь (с платформенным паком шва) отдельное решение трассировка цепи банка 22.08, пере-проверено №19
216 Подпись банка, halt на потолке и резюм после пополнения не проверялись против ЖИВОГО движка ни разу. Проверки этих путей в батарее платформы стоят на фейках; единственный живой прогон движка в батарее — не по этим маршрутам. То есть три несущих сценария продукта держатся на договорённости о поведении чужой стороны, а не на замере. ⚠ Гейтится тем же, чем и живой прогон книги (строка 202): холодный прогон движка платформа когда-нибудь (с 202) живой прогон по трём маршрутам трассировка цепи банка 22.08, пере-проверено №19
49 Этапы Б+В спеки D15.2 (content-addressed resume / guard_hash — D39.31 сознательно не строил) ; этап В = tmctl export-контракт D29.1 (annot-v1 · цвет-мап+rollup · политика красных fail-closed) + операторский протокол-документ релиза гендер-твиста (D5.1): сам механизм УЖЕ построен — until_ch-правка → точечный re-edit со сметой и $0-пере-пином (repin.go/rebill.go, D39.42 п.5/D39.45) бэкенд скоро (ПОДТЯНУТА D39.81: annot-v1 = источник замечаний для фронта — критический путь подключения) отдельное решение (annot-половина — по контракту 14, D39.99) D39.34(4), D33 п.5, D39.81
49а ALTER-шаги миграций v8v14 не идемпотентны вопреки шапке migrate.go:9-11 (полу-применённая БД не сходится; счётчик версий скрывает) — находка критика полноты пака-19 бэкенд когда-нибудь отдельное решение D39.56, PACK19_BUILD §6.9
50 F3-остаток идемпотентности бэкенд когда-нибудь отдельное решение D39.34(4)
51 human_override LOCK (D29 п.1г, в коде 0 вхождений) бэкенд когда-нибудь отдельное решение D39.34(4)
52 Ф2-гейты вне идеала: морфо-гейты канцелярита + L1-лемматизация (python-сайдкар) · полный OpenCC · опциональный пре-перевод гейт ; состав явно: канцелярит + РОД (строка 82) + класс Ф2-гейтов карты 04-unhappy (обсцен-гейт/феминитивы/время сцены — состав решить паком) ; + класс идиоматики (свип-хвост, D39.73): сехоуюй-словарь · вэньянь-классификатор (zh) · васэй-эйго ложные друзья (к ja-паку 81) — данные пары или закрытие «банк книги покрывает» тем же паком бэкенд когда-нибудь отдельное решение D39.34(4)
54 Масштаб целой книги: волны/каденс/потолки/ETA на сотнях глав (гоняли максимум 10; книга 7,78 млн симв., ~2284 раздела). ⚠ Дописка инвентаря №18 (D39.147 п.2г): жёстких потолков размера в коде НЕТ, но исходник читается в память целиком (chunk/ingest.go:98), чтения стора беспагинационны под opTimeout = 10s (store/store.go:39) и бюджеты нарезки калиброваны на 25 главах (config/pipeline.go:126-138) — ни одно из трёх на 2283 главах не проверено ничем бэкенд когда-нибудь (последним по курсу) МАСШТАБ D39.33, CURRENT-STATE
— ПОЛИГОН (кандидаты пакетов) —
55 dialogue_dash мерить только на невиданном тексте (подогнан под 蛊真人; цифры мини-прогона аргументом не считаются) ; расширено до вне-претрейн чекпоинта целиком: r-коэффициенты exp01/08 · precision чекеров · частота эха · чистовик exp15-выводов ; + arity-полоса паспорта (D29.2г): решить — dialogue_dash покрывает диалоговую половину или мерить (D39.73). Частично закрыта эксп-21 (D39.117): направление главного вывода воспроизведено на чистом en-материале (узнавание 1/5), $0-довесок исполнен частично; срез эксп-21 НЕ купил (главный zh-замер на книге 4/5, без пинга) — остаток = неконтаминированный zh-срез полигон скоро (эксп-22 Ф0 — повторный ЖЁСТКИЙ заказ, стоп при неисполнимости) эксп-22 D39.37(4), D39.40, D39.46, D39.108, D39.117
56 Ёфикатор/санитайзер-классы не размечены (§6.5 отчёта пакета-6) полигон когда-нибудь полигон-пакет D39.46, CURRENT-STATE
57 Пере-замер «контексты — главный рычаг» на трудной выборке пакета-7 с боевой сборкой (до него kwic-веса/семантику не трогать; перф-хвост AttachKWIC — строка 37: фикс-пак 128 закрыт D39.118, опция в нём не взята, семантика не менялась) — напряжение с D39.46 названо, не отменено полигон когда-нибудь полигон-пакет D39.50, D39.118
58 Не покрыто пакетом-8: вторая книга/пара/модель · строка drafts: · ось batch_runes · разметчики-модели (не люди) · precision роли на «расширенном, но осмысленном» материале ; + контрастивный регрессионный сьют по каталогам режимов отказа (12-*) · чистовик exp15-выводов полигон когда-нибудь полигон-пакет POLYGON_PREMEASURE §1.8/§2.5/§3.5/§7.6
59 Вендор-чек префикс-кэша ZAI/GLM (на нём стоит вся кэш-экономика W1/Q2c) ; + GLM context-overflow гард (finish=model_context_window_exceeded — NOT-do пака-12 без решения) ; + Mistral-strip гейт message-builder (research/21 §1.1: extra_forbidden на reasoning-поля; ЛАТЕНТЕН при нашем single-shot wire — гейт перед прод-путём mistral в канале B / любым multi-turn; D39.74) полигон когда-нибудь (до МАСШТАБА) полигон-пакет D39.34(6)
60 Scheduler-aware волны под peak-valley DeepSeek (прямой COGS-рычаг) полигон/бэкенд когда-нибудь (до МАСШТАБА) отдельное решение D39.34(6)
61 Прайс/wire-гигиена: продление prices_checked без правки чисел · гейтнутые платные армы (edit-единица >3200 и др.) · wire-probe temperature в thinking-канале DeepSeek полигон когда-нибудь полигон-пакет D39.34(6)
— Ф2.5 / ПИЛОТ / ПРОД —
62 Билингв-якорь (D25 п.9 Q1) владелец когда-нибудь Ф2.5 D25 п.9, CURRENT-STATE
63 Контаминация корпуса (D27 п.4) владелец/полигон когда-нибудь Ф2.5 D27 п.4, CURRENT-STATE
64 Судья-дублёр (D22.6) бэкенд когда-нибудь Ф2.5 D22.6, CURRENT-STATE
66 Пилотные D25-гейты: publishable/waiver (п.1) · FN-bound L3 (п.4) владелец когда-нибудь Ф2.5 D25, CURRENT-STATE
67 Прод-гигиена: юр-пакет · провенанс 12-*-доков · xAI-ключ off перед продом (D27) ; + юрисдикционные annex-ре-чеки при новых рынках (D39.29) + поле «версия исходника» book.yaml на интейке (04-unhappy §5) владелец когда-нибудь Ф2.5 D27, CURRENT-STATE
68 Residual-тачпойнты exp16, не влитые в сид-дельту: мини-голд алиасов (ОТЛОЖЕН до первого длинного прогона — D39.103) · precision@30 (books/gu-zhenren/exp16/) полигон когда-нибудь Ф2.5 / полигон-пакет CURRENT-STATE
— Ф3 / ПРОДУКТ —
69 Gemini API «под-18» обязательство на конечный продукт (независимо от лейблов) владелец когда-нибудь Ф3 / отдельное решение D39.32, D39.34(7)
70 Action-security gate перед выдачей tools/webfetch (D25 п.5) бэкенд когда-нибудь Ф3 D39.34(7)
71 Планы research/22: epub-tag-rewrite · Q7-леджер ; + F3-brief из D29 п.3 (chat-edit · Not-useful-петля · cost-of-fix) + Ф3-скоуп 02-mvp-plan (TMX/TBX · Bertalign · дистилляция 714B); + V5: фронт ВЕБ-ПЕРВЫЙ, SEO/ранжирование (куки · страницы-сироты · актуальные алгоритмы Google) — определяет выбор фреймворка (SSR vs SPA), в Ф3-дизайн ДО выбора стека (ПТ-23) бэкенд когда-нибудь Ф3 D39.34(7), START_PROMT V5, D39.80
94 Продукт-механика входа и прогона (V2, ПТ-16..18): абьюз/misuse-прескрин дёшево и точно ДО трат токенов (H8) + UI-контракт отказа (проект-решение D39.80) · лимит размера входа настройкой (H7) · продукт-кнопки «стоп/продолжить» поверх построенных graceful stop и redrive, абьюзивный прогон НЕ продолжать (H10); API-форма — по контракту 0.3.0 (отказ прескрина РЕШЁН: rejected + грубый content_refused, К-9 закрыт D39.138 п.2б) бэкенд к подключению фронта (ПОДТЯНУТА D39.81; лимит можно раньше, к пилоту) отдельный пак при Ф3-препе (контракт 14 ратифицирован) START_PROMT V2, H7/H8/H10, D39.80, D39.81
96 → переехала в platform/BACKLOG.md П-1 (зонные бэклоги, D39.84: HTTP/SSE-слой, обвязка, аутентификация, порядок деплоя); здесь остаётся ратифицированным сам ИНВАРИАНТ D39.81 — движок = процесс-на-прогон (EXCLUSIVE flock store.go:43), сервер в backend НЕ пишется платформа зонный бэклог D39.81, D39.84
97 → переехала в platform/BACKLOG.md П-2 (глобальный брокер рейт-лимитов; гейт «до второго параллельного пользователя» зафиксирован там же) платформа зонный бэклог D39.81, D39.84
127 Устаревший DDL-коммент glossary.source (migrate.go:194: «seed ruby auto», фактические пути записи — seed/ruby/mined, auto не пишет никто; фантом уже утёк во фронт-доки дважды) — поправить коммент бэкенд когда-нибудь (попутно любым паком store)
105 Роль classifier мис-вердиктится как эхо (verdict=cjk_artifact при bad_lines=0); ЛАТЕНТНО — classify_types выключен во всех шиппинг-конфигах. Цена фикса, знать заранее: бамп classifierVersion → перекупка чекпойнтов классификатора (центы). Поля rules=/VOICE читать по знаменателям (13б). Разбор дословно — architecture/13-tech-debt-anchors.md §Б-105 бэкенд когда-нибудь (ближайшее касание банка/наблюдаемости; (б) — дешёвая часть, вердиктов не двигает) малое касание + вердикт-двигающая половина (а) через СТОП-решение D39.86
106 Слой 3: целевой контракт «узкие мандаты + ДИФФЫ» против текущего full-regen — гейт «перепроверить до стройки» в силе, приоритет ПОНИЖЕН (D39.117: full-regen выигрывает у ремонта; оговорка полигона — чинил дешёвый фиксер по предложению, не сильный редактор узким мандатом). Реактивация — только через эту строку. Археология дословно (эмпирика D39.108 · история дыры учёта) — architecture/13-tech-debt-anchors.md §Б-106 владелец → бэкенд когда-нибудь (пере-проверка «сильный редактор × узкий мандат» — перед стройкой слоя 3) замер → решение владельца 09 §Слой 3, D39.90, D39.108, D39.117
113 Запас боевого гейта не зафиксирован тестом, а харнесс, давший число, УДАЛЁН (Д-хвост D39.90). Числа «18 из 20 · 0 ложных на 1055 · запас 13× (0.0117 против 0.15)» и «санитайзер поймал бы английский черновик» получены ВРЕМЕННЫМ тестом в пакете pipeline (splitBanknote+StripThink+sourceScriptShare), который сессия удалила после снятия. Число ушло в контракт (строка 46), воспроизвести его нечем. Делать: корпус-фикстура в репо (~20 off-target + ~40 здоровых, с движковой предобработкой; снапшот НЕ двигает) + регресс-тест на реальный запас — это база, которую обязано побить любое предложение по 46. СТОП, если фикстура не воспроизводит 18/20 при 0 FP, или если запас меньше 3× бэкенд скоро (перед любой правкой по строке 46) $0 фикстура + регресс-тест D39.90, EFFORT_HANDLE §5.4 шаги 12, §7
114 Конфиго-слой ручки эффорта: два дешёвых хвоста приёмки (вне снапшота, $0 прогонов). (а) Д4 отчёта: gates.terminology.target_script НЕ сверяется с book.target_langtarget_lang: ru + target_script: Latin грузится чисто и ИНВЕРТИРУЕТ банковский экран (ловит целевой, пропускает чужой); сверка при загрузке против lang.LangScripts(TargetLang) — тот же дата-план, что у экрана строки 46, громкий отказ на несовпадении. (б) Находка-2 приёмки: стейл-доккоммент capability.go:78у константы ReasoningExtraBodyDisable до сих пор «effort "" leaves the provider default», противореча проводу (applyToBody мержит disable на "", комментарий в теле arm это прямо объясняет) и починенному ThinksOnWire; однострочник тем же касанием бэкенд скоро (мелкий пак или попутно со строкой 46) правка Go, снапшот не двигает D39.91, EFFORT_HANDLE Д4
115 //go:embed целевых данных — ЯВНЫЙ список файлов: новая ЦЕЛЬ требует правки Go (Д6 отчёта). internal/lang/embedded.go:22 перечисляет файлы поимённо, CompileCheckers паникует при неполном файле цели ⇒ на канон-вопрос «заработает ли пара, которой в репо НЕТ, без правки Go» ответ сегодня НЕТ — дыра в ратифицированной «ФАЗЕ 2 ОБЩНОСТИ » (D39.64), и она не про язык, а про строку эмбеда. Решить форму: embed data/* (и как манифест фолдится в EmbeddedVersion, чтобы НЕ перекупать чужие пары) против явного списка как осознанного гейта полноты данных цели оркестратор → бэкенд когда-нибудь (триггер: первая новая целевая пара; учтён в реестре 108) отдельное решение D39.91, EFFORT_HANDLE Д6, D39.64
108 Реестр ЗАГЕЙЧЕННЫХ ТРИГГЕРОВ (триггер → что вернётся → источник) — ВЫСЕЛЕН ДОСЛОВНО в architecture/13-tech-debt-anchors.md §Б-108; сверять на каждом переходе горизонта (норма D39.66 «каждое отложено получает носитель» в силе). ⚠ Живое оттуда: go.work-триггер УЖЕ наступил (platform/go.mod заведён) · вахта маппинга эффорта dspro «early August 2026» · движение тулчейна к go1.27 ⇒ строка 119 ПЕРВОЙ оркестратор скоро ($0, гигиена трекера) завести реестр + сверку в норму лендинга D39.66, D39.90
109 Продуктовые требования без строки-носителя: ПТ-6 (структура абзацев) · ПТ-7 (слабый оригинал — вопрос владельца) · ПТ-22 (продуктовый интейк настроек) · ПТ-10 (механизм веб-фетча). Носители заводить при первом касании тем; реестр product-requirements.md первичен. Разбор дословно — architecture/13-tech-debt-anchors.md §Б-109 оркестратор/владелец скоро ($0 — расписать носители) завести строки/вопросы → диспозиции D39.90, product-requirements
110 Детектор повторов лемм / защита авторских рефренов (04-unhappy-paths.md:97,130 п.5): $0-минимум исполнен промптом (editor.md, пакет-чекеров 02.08), механизм явно не строился — «нет размеченного класса; связка с alignment/Bertalign». Строки-носителя не было; предмет живой, потому что отличить дефектный повтор от авторского рефрена без выравнивания нельзя бэкенд/полигон когда-нибудь (с корпусом пилота, строка 85) размеченный класс → решение 04-unhappy §5, D39.90
111 Дубль ключа пар-файла: фикс накрыл половину. D39.82 закрыл строку 53 через putUniqueDC в parseDCCheckers, но генерик-парсер категорий parseCategoryRows (internal/lang/langpack.go:806-826, строка cats[f[0]][f[1]] = val) по-прежнему МОЛЧА last-wins — а якорь техдолга указывал именно на него. Пар-данные с опечаткой-дублем тихо теряют первую строку бэкенд когда-нибудь (малое касание, с любой правкой langpack) fail-loud + тест 13-tech-debt-anchors, D39.82, D39.90
118 tools/go.mod — РЕШЕНИЕ ПРИНЯТО (D39.97 п.4): строить отдельным малым паком. cmd/tmvet+internal/archguard → отдельный модуль (backend/tools/); make battery гоняет оба модуля; tool-директива Go 1.24 НЕ решает (MVS общий). Выигрыш: бамп инструментов физически не двигает x/net/x/text. Sqlite 1.55 остаётся (D39.97 п.4) бэкенд скоро (до следующего бампа зависимостей) малый пак по D39.97 п.4 D39.96 п.6, D39.97
119 x/text-детерминизм: вердикт-несущие вызовы НЕ свёрнуты в версии (находки-5/6 приёмки). SanitizerVersion не сворачивает ничего x/text-ного, а detectCJKLeak зависит от width.Fold (sanitizer.go:211,687) — смена x/text перевернула бы вердикт БЕЗ смены снапшота; ExportNormalize меняет экспортные байты вне хешей (sanitizer.go:709); xTextVersion пинит строку go.mod, НЕ скомпилированные таблицы — тулчейн go1.27 переключит x/text на Unicode 17.0.0 МОЛЧА (tables17.0.0.go //go:build go1.27; жилец реестра 108). Делать: явные версии-свёртки + механическую сверку «таблицы↔константа» вместо совпадения бэкенд скоро правка версий-свёрток + тест D39.96 п.6, отчёт §5 находки-5/6
120 buildCheckers жёстко берёт lang.Load(root,"zh","ru"), бейзлайны ключуются по классу, не по паре (§7-8) — приезд ja-ru требует правки Go, против мандата общности §0.1. Родня строки 115 (явный embed-список целей) — брать одним касанием бэкенд скоро правка Go + тест на паре-которой-нет D39.96 п.6, отчёт §7-8
121 archguard v2 — остаток (б)/(в)/(г)/(д); (0а)/(0б)/(а) ЗАКРЫТЫ дофиксом D39.97. Полный фикс-лист посадок приёмки D39.96 с file:line — дословно в architecture/13-tech-debt-anchors.md §Б-121 бэкенд скоро (остаток: (б) тип вместо свитча · (в) build-теги · (г) 4-й анализатор · (д) семь пропусков) правка анализатора + посадки D39.96 п.2/п.6, отчёт §7-9/12/13
122 Гигиена пака стандартов — 11 микро-пунктов, не-блокеры приёмки (D39.96/97). Полный список дословно — architecture/13-tech-debt-anchors.md §Б-122 бэкенд когда-нибудь мелкие правки D39.96 п.6, отчёт §7-6/7, §9 хвост
123 Полигон: jieba==0.42.1 — build-time зависимость артефакта контраста eval/exp16/data/jieba_dict_general_zh.txt (пере-собран бэкенд-сессией 03.08, полный sha256 сошёлся с пином 16-bank-mining.md); дописать в манифест окружения полигона с пометкой «build-time, не runtime» полигон когда-нибудь строка манифеста D39.96 п.6, отчёт §7-4/§6
124 Калибровка снапшота (вопрос владельца 04.08, разбор D39.97 п.5): нацеленность, не агрессивность.Осей теперь ЧЕТЫРЕ — дописка D39.151: (г) идентичность оплаченной работы («строка диспозиции ↔ вызовы, которые её оплатили») — переселена сюда из строки 195 решением владельца 17.08; родня оси (в), потому что массовое кросс-снапшотное переиспользование подрывает наивную атрибуцию по равенству снапшота; смежный носитель — §7 спеки D15.2. Прежние три оси одним дизайн-паком: (а) недо-чувствительность — вердикт-несущие вызовы x/text не свёрнуты (вход: строка 119); (б) пере-охват — EmbeddedVersion фолдит все пары разом → пер-парный хеш (родня 115/120); (в) дешёвая перекупка: tmctl resnapshot --dry-run — байт-сверка тел по чекпойнтам (msgsContentHash), идентичные юниты пере-привязываются без пере-вызова, платятся только изменившиеся. «Поведенческий отпечаток вместо строки версии» отложен (пол ≠ доказательство) бэкенд когда-нибудь (перед МАСШТАБОМ — когда перекупки станут реальными деньгами) дизайн-пак по D39.97 п.5 D39.97

(Хроника сессий №11№13, 0204.08 (D39.91105: ручки эффорта · стандарты репо · archguard · S2 · контракт API v0 · платформа P0 · банк-арбитраж research/24) — в archive/PROGRESS-2026-08-02-04.md.)

(Хроника сессий №9/№10, 31.0702.08 (D39.5990: курс «общность вперёд» · свип полноты · качество банка · фикс-пак · coldrun-b · фронт/платформа открыты · шов движок↔платформа · промт арбитража банка) — в archive/PROGRESS-2026-08-01-02.md.)

(Хроника 25.0731.07 до курса D39.59 — эры №7/№8 и начало №9: паки 1620, мини-прогон, полигон-пакеты 58, ToS-речеки, пак-19, холодный прогон (лендинги D39.2658) — в archive/PROGRESS-2026-07-25-31.md.)

Бэкенд

⟶ Состояние бэкенда — CURRENT-STATE (один носитель, D39.80); здесь только пинги живых сессий.

ПИНГ ОРКЕСТРАТОРА №19 — 23.08, ЗОНЕ БЭКЕНДА. Четыре движковых дефекта, все сверены моими командами.

  1. ОТВЕТ НА ПИНГ ПОЛИГОНА: дефект ПОДТВЕРЖДЁН, он ваш. Эскалация на Gemini теряет инъекцию банка памяти (строка 208). Механизм пере-проверен: pipeline/render.go:256-258=Role: "system", Content: injection, CacheBoundary: false штатно строит ВТОРОЕ системное сообщение, а llm/httpllm.go:517-523=func toOpenAIMessages(msgs []Message) []openAIMessage копирует сообщения дословно — склейки нет нигде. ⚠ Лекарство того же класса в проекте УЖЕ написано и работает для другого провайдера: llm/provider_anthropic.go:169-179=inSystemPrefix := true сворачивает ведущий system-префикс в одно поле. Не обобщено на Gemini — это и есть работа. Полигон ждёт ответа с 22.08 и починил у себя по вендор-доке; их находка верна.

  2. Род не производится авто-путём вовсе (строка 210, дополнена 23.08): замка ДВА и они независимы, а поле Gender в схеме сида УЖЕ есть — ось мертва в ПИСАТЕЛЯХ, не в формате.

  3. Выпавший член юнита исчезает из отгружаемых байт БЕЗ внутритекстового маркераpipeline/waverun.go:487-490=the flagged member is DROPPED from the edit. Родня строки 193; для читателя это молчаливая дыра в тексте.

  4. Загрузчик сида НЕстрогий (строка 212): голый разбор YAML без проверки имён ключей, и seed-lint этого не видит. Опечатка в имени поля молча теряется — в файлах, которые владелец правит руками чаще всего.

⚠ Плюс строки 211 (движок на SaaS не получает провайдерских ключей — блокер живого прогона) и 213 (платформа дублирует вашу конвенцию пути): обе половинные, движковая часть ваша.

ПИНГ ОРКЕСТРАТОРА №20 — 22.08, ЗОНЕ БЭКЕНДА: три ваших дока разошлись с деревом (аудит доков, сверено кодом; рукой не лезу — ваша зона).

  1. backend/README.md, карта пакетов объявлена сверенной по коду, а в ней НЕТ internal/runevents — эмиттера журнала прогона, то есть ВСЕГО шва движок↔платформа (D39.131), — и нет второго бинаря cmd/tmvet. Греп: runevents и tmvet в файле по нулю вхождений, при том что оба каталога в дереве.
  2. backend/README.md, «Известный техдолг» держит живыми Cyrillic-хардкоды DC-чекеров, которые сам код называет ПОГАШЕННЫМ долгом (фаза 2 общности, D39.64: isRuTarget удалён, TargetActive/TargetScriptNonLatin), и оба его file:line-якоря указывают мимо.
  3. backend/docs/components.puml — диаграмма, которую карта доков продаёт как правимую «одним коммитом с кодом», отстала примерно на месяц: старый exit-контракт (без 4/5 и полосы 1019), неполный список глаголов CLI, удалённый паком-17 failover.go и ни следа эмиттера. ⚠ Рендерить её в svg/png НЕ надо (гардрейл) — править исходник.

(Пак «честные числа и статусы» — ИСПОЛНЕН, ПРИНЯТ С ФИКС-ЛИСТОМ и ЗАЛЕНДЕН f840867 (17.08; D39.149, ФЧ-5 — D39.150). Отчёт, две волны адверсариального ревью, мутационная приёмка и тело фикс-листа ФЧ-1…ФЧ-8 — в archive/PROGRESS-2026-08-17.md; живой остаток — строка бэклога 197.)

(Пинги закрытых паков — фикс-пак банка D39.118, блокеры контракта D39.122 — в archive/PROGRESS-2026-08-04-09.md, D39.125.)

(Закрытые бэкенд-записи 0102.08 — общность фаза 2 · качество банка (оба этапа) · фикс-пак банка · finding-1 · пакет-чекеров · мелкая пачка · coldrun-b · ручка эффорта — в archive/PROGRESS-2026-08-01-02.md.)

(Закрытые бэкенд-записи 1415.08 — эмиттер шва (D39.131) · tmctl migrate (D39.134) · пере-пин цен DeepSeek (D39.137) — в archive/PROGRESS-2026-08-14-15.md; вынесено D39.139.)

(Закрытая хроника пакетов №0№4 (0410.07) перенесена в archive/PROGRESS-2026-07-04-10.md — ревизия D31.)

(Хроника пакетов 1112.07 (пакет-5, D15.2-этап-А, санитайзер-фикс D33) — в archive/PROGRESS-2026-07-10-13.md.) (Трек-A пак-1/1.5 (D39.2/D39.5) — см. записи оркестратора №6 выше.)

(Хроника бэкенд-паков 1116 (1925.07, вкл. отчёт-запись пака-15) — в archive/PROGRESS-2026-07-13-25.md; отчёты паков — archive/reports/.)

(Закрытые записи 2531.07 — пак-18 · мини-прогон · фикс-пак · сквозная проверка · хендофф 26.07 · ресёрч общности фаза 1 — в archive/PROGRESS-2026-07-25-31.md.)

Полигон

ИТОГ ПОЛИГОН-СЕССИИ 23.08 — ШАГ 1 ПЛАНА 22.08 ЗАКРЫТ (панель-0, $0). Отчёт — секция Д32 docs/experiments/23-editor-tier.md; фризы bedc39a, 9e33a1b. Кратко:

  • Снят блокер сборки: rol.py не знал арма E6 (клетки чужой фазы ФД-G, другая схема), и неизвестное имя молча возвращало ПУСТУЮ строку — панель собралась бы из скольких-то глав без единого слова в лог. Заведён реестр FOREIGN, гейт клетки по СОДЕРЖИМОМУ, неизвестный арм = СТОП; гейты проверены фальсификацией (обезвредил гейт — селфтест краснеет).
  • ЛАТЕНТНАЯ МИНА ДВУХ КОНТУРОВ ВЫСТРЕЛИЛА. Селфтест предупреждал с 22.08 («до данных не добралось»); 23.08 добралось: wire('en') настраивал один экземпляр, а free_text шёл в другой и вернул пустой текст английской главы. Починено в корне (rol._wire включает оба).
  • Вердикт Шага 1 (интеракция «архитектура × жилец на ИСПЫТАННЫХ жильцах», не минимакс): слабый жилец glm-5 РЕДАКТОРОМ над боевым черновиком неотличим от боевого deepseek-v4-pro в той же роли (разрыв средних мест +0.00, p=0.80; дефект-классы 0 различия; «машинных» глав 3/16 у обоих). Тот же жилец ОДНОПРОХОДКОЙ различимо хуже: +1.12 места при пороге 0.99, знаковый p=0.0042 (конъюнкция пройдена) и +13 фаталов, p=0.0312. Буфер существует и замерен.
  • Два независимых прибора сошлись на КАЖДОЙ главе: детерминированный счётчик дефект-классов (новый eval/dovodka/schet.py) и слепое чтение назвали одни и те же дефекты одними словами.
  • ДЛЯ БЭКЕНДА, находка под метавопрос: в 2 окнах из 8 с первым лицом пол рассказчика по главе НЕ УСТАНАВЛИВАЕТСЯ вовсе (эталон снят вслепую тремя независимыми чтениями на главу). Тот же голос ведёт другие главы, где пол очевиден ⇒ закрыть эти ~25% может ТОЛЬКО книжная память. А в ~/books/role-topology/bank-en.json полей пола НЕТ (25 терминов, поля dst/rx/manual/why — проверено файлом). Это смыкается с пингом №19 ниже и со строкой бэклога 210.
  • Долг В21 (сверка кассы двумя путями) ИСПОЛНЕН, результат отрицательный: сверка на диске НЕВОЗМОЖНА в принципе — cost_usd вычисляется нашим же roster.cost (buy.py:93-95), а не приходит от вендора. У четырёх вендоров из шести арифметика сходится до последнего знака (213 клеток); у DeepSeek расхождение объясняется пере-пином 16.08, а «офф-пик = ½» в записанных ценах НЕ НАБЛЮДАЕТСЯ. ⇒ вопрос владельцу: сверить $17.04 с реальным счётом DeepSeek может только он.
  • Агент-сессий: 114 из 200 (16 читателей панели-0, заняты runs.py --claim до запуска, закрыты после). Денег не потрачено: панель целиком на уже купленных клетках.

ПИНГ ОРКЕСТРАТОРА №19 — 22.08. ЖИВОЙ ДЕФЕКТ ДВИЖКА: эскалация на Gemini ТИХО ТЕРЯЕТ ГЛОССАРИЙ. Найдено полигоном живой пробой, подтверждено вендор-докой. OpenAI-совместимый слой Gemini принимает РОВНО ОДНО системное сообщение; лишние выбрасываются молча, без ошибки. Механизм назван вендором: в нативном API systemInstruction — один объект Content (ai.google.dev/api/generate-content), поэтому уход на нативный API проблемы НЕ решает — склеивать надо в любом случае. Замер (один и тот же системный текст 7970 знаков): одним сообщением → prompt_tokens 2994, маркерная инструкция ИСПОЛНЕНА; двумя → 535 токенов и инструкция НЕ исполнена, при finish=stop и внешне правильном переводе. Отказа нет — есть тихая потеря промта, невидимая гейтам годности.

Почему это ваша зона, а не наша. backend/internal/pipeline/render.go:256-258 штатно строит ВТОРОЕ системное сообщение — инъекцию банка памяти (глоссарий/STM); backend/internal/llm/httpllm.go:517-522 (toOpenAIMessages) копирует сообщения дословно; склейки под Gemini нет нигде. При этом gemini-3.1-pro-preview стоит в ратифицированной цепочке эскалации во ВСЕХ арм-конфигах (backend/configs/pipeline-c1.yaml:129, pipeline-arm-glm.yaml:61, pipeline-arm-deepseek-pro.yaml:62, pipeline-arm-mistral.yaml:61). ⇒ любой эскалационный хоп на Gemini при непустой инъекции теряет глоссарий, и книга едет без канона имён. Оговорка D22.3 «экспозиция Ф1 нулевая» держится только на том, что до Gemini в дефолте не доходят — то есть на маршруте, а не на коде. ⚠ Класс в проекте УЖЕ решён рядом: backend/internal/llm/provider_anthropic.go:169-179 сворачивает ведущий system-префикс в одно поле и падает громко на system посреди диалога. Не обобщено на Gemini. Полигон у себя починил склейкой по вендору (eval/dovodka/rol.py ONE_SYSTEM/fit_msgs); в бэкенд рукой не лезу. Квирк записан в 00-provider-quirks.md (наша зона) с механизмом и ссылками.

Тем же касанием — две поправки в квирках, обе наши прежние ошибки, уже внесены нами: (1) форма extra_body.google.thinking_config... в бюллетене НЕ доезжает через openai-SDK: вендорская форма несёт ключ extra_body на верхнем уровне тела (extra_body={'extra_body': {'google': …}}), а один уровень даёт HTTP 400 «Unknown name "google"». Из-за этой ошибки eval/providers.json:59 объявил рабочую форму багом, и проект три недели считал, что ручки размышления у Gemini нет. (2) reasoning_tokens=0 у Gemini — НОРМА слоя, а не измерение: вывод «размышление выключено» из этого поля недействителен, считать надо total prompt completion. У серии Gemini 3 размышление вообще невыключаемо (вендор, 17.08.2026).

⚠ Пинг оркестратора №18 — 20.08 (протухшие цены в квирках, чинить вашей рукой). docs/experiments/00-provider-quirks.md до сих пор утверждает, что цены после катовера НЕ изменились («flash $0.14/$0.28»). Это опровергнуто пере-пином 1315.08 (D39.137): таблица запинена ПИКОМ — flash 0.44/1.32 при кэш-хите 0.014, pro 1.32/3.96 при кэш-хите 0.044 за 1M (⚠ испр. 20.08: первая редакция пинга приписала flash кэш-хит pro — ошибка ×3.1 ровно в той клетке, ради которой пинг и писался; сверено с backend/configs/models.yaml:167,183 и телом D39.137 §2а), и счёт шиппинга = 100% DeepSeek ⇒ ×4.24.4 в пике. Квирки — ваша зона, рукой не трогаю; поправьте при ближайшем касании, потому что по ним считают деньги проб. ⚠ Третья, и она самая дорогая по цене ошибки: eval/README.md первой врезкой держит СТОП на платные прогоны — «Платные прогоны/докупки СТОП до ре-пробы (бэклог-строка 74)». Строка 74 закрыта (D39.95), ограничение пало лендингом 112 (D39.97), pipeline-c1.yaml несёт reasoning: "low" с объяснением, а зона всё это время платно гоняет фазу Д. Врезка объявляет запрещённым то, что зона делает ежедневно, — и этим обесценивает все прочие ⚠ в файле. Живым из неё остаётся только ⚠0731 (смена весов под слагом) и стохастичность эха.

Тем же касанием — вторая протухшая клетка справочника, найденная аудитом доков 22.08: квирки утверждают, что веса deepseek-v4-pro вендором не тронуты. Это боевой РЕДАКТОР и апекс эскалации, и по нему у нас прямое расхождение двух носителей, которое до сих пор не снято: docs/STACK.md говорит «ручки эффорта у pro НЕТ (lowhigh), так говорит квирк-канон», а CURRENT-STATE — «у pro эффорт стал настраиваемым low/high/max, квирк 3а устарел». Из репозитория правая сторона НЕ выводится: замера поведением после 13.08 нет ни у одной стороны. Закрывается вендор-сверкой, а не выбором стороны — и вы это только что делали по Gemini, то есть заход дешёвый.

⚠ Прежняя редакция этого пинга просила вас сверить расхождение по «возражению Sol» — расхождение снято 22.08 срезкой хроники, второй носитель уехал в archive/PROGRESS-2026-08-10-15.md; сверять больше нечего, пункт живёт один и висит на владельце.

ПИНГ ОРКЕСТРАТОРА №20 — 22.08, ФАКТЫ О СОСТОЯНИИ ДЕРЕВА ЗОНЫ (снято командами, не решение). Аудит доков спрашивал у дерева, а не у записей, и картина такая: 13 отслеженных файлов eval/ изменены и не закоммичены (+2166/79 строк), плюс 6 неотслеженных, из них в рабочем каталоге фазы eval/dovodka/ вне git — naklon.py · ja6.py · HANDOFF-21-08.md · PLAN-16-08.md · PLAN-17-08.md · КОНТЕКСТ-ДЛЯ-КОНСУЛЬТАЦИИ.md. Почему это пинг, а не правка. Диспозиция D39.135 п.4 («полигон работал 16.08 БЕЗ записи в журнале — PLAN-16-08.md, ja6.py, naklon.py; состав выяснять при лендинге») висит шестой день, а состав за это время вырос с трёх файлов до девятнадцати. Прямое следствие, названное без оценки: из чистого клона репозитория часть фазы сегодня не воспроизводится — в частности naklon.py, гейт позиционного наклона, вне git целиком. Зона живая, приёмка фазы — у ПАРАЛЛЕЛЬНОГО оркестратора, поэтому я ничего не коммитил, не переносил и не удалял: решает владелец или он. ⚠ Тем же аудитом: eval/README.md описывает каталог dovodka/ ОДНИМ файлом runs.py, тогда как там сорок скриптов и главный инструмент фазы; docs/experiments/README.md объявляет себя сведённой «до эксп-22», а строк для 22 и 23 в ней нет ни одной. Обе правки — зонные, рукой не трогаю.

ФАЗА Д «ДОВОДКА ЭКСП-22/23» — ИДЁТ.Живое состояние фазы живёт В ЗОНЕ, не здесь (eval/dovodka/ — планы, консилиум, ревью; свежий носитель курса зона называет сама), приёмка фазы — у ПАРАЛЛЕЛЬНОГО оркестратора, деньги и цепь потолков — eval/dovodka/money_d.py (PACK_CEILING/CEILINGS), а не литералом здесь: три поколения записей в одном месте и были причиной, по которой состояние фазы стало нечитаемым.

(Хроника фазы Д — записи 10.08 (сессия №1) и 15.08 (сессия №2, сквозной аудит дуги 19→23 и пере-судейство tier) — вынесена в archive/PROGRESS-2026-08-10-15.md с тремя поправками в шапке: потолок, закрытые пункты листа владельца, протухшие «долги». Открытым на владельце из неё остаётся ОДИН пункт — возражение Sol по проходу tier.) Запись оркестратора №17, 15.08 — две передачи ПАРАЛЛЕЛЬНОМУ оркестратору (приёмка фазы Д — его зона, №17 полигон не трогает по слову владельца). (1) Просьба хендоффа фазы Д «эррата zh-канона: пере-сборка = правка закрытой оси, ратифицирует оркестратор» (POLYGON_PHASE_D_HANDOFF.md:84-86, завышение +0.0039, вердикты не двигает) — диспозиция №17: к параллельному при приёмке, не к движковому. (2) Мелочь аудита корпуса 15.08: 23-editor-tier.md:2243 цитирует «PROGRESS.md:346» для потолка $4.50 — фактически строка была :348; учесть при приёмке тел. Санкции владельца по деньгам фазы и замене ja-книги уже записаны (D39.136 п.1, CURRENT-STATE).

(Память · Голос и состояние · Ридер-IDE — ЗАКРЫТЫЕ секции (D39.125): темы исполнены/переехали в зонные журналы; хроника — в архив-слайсах. Фронт пишет ТОЛЬКО в frontend-PROGRESS.md.)