279 KiB
Журнал прогресса
⟶ ТЕКУЩЕЕ СОСТОЯНИЕ (на 2026-08-27, голова D39.161 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). ОЧЕРЕДЬ №19 (единственный носитель — здесь; роль передана 22.08, №18 закрыт D39.155): (а) P7 платформы ПРИНЯТ С ФИКС-ЛИСТОМ и ЗАЛЕНДЕН, сессия закрыта владельцем 20.08 (D39.153; зонный фикс-лист из тринадцати пунктов плюс врезанный первым блокер свипа — пинг №18 в
platform/docs/platform-PROGRESS.md; ⚠ прежний врезанный пример «первымContractVersion0.3.0 при формах 0.4.0» СНЯТ — константа поднята и запинена гейтом против канона лендингом31f1f82) · (а1) контракт API v0 0.4.0 РАТИФИЦИРОВАН (D39.152; PD-327 закрыт; зеркало фронта отстаёт ратифицированно, при разморозкеcmp) · (б) лендинг петель полигона (фаза Д) — ОТКРЫТ: приёмка ФАЗЫ у параллельного оркестратора, лендинг за этим; ⚠ предупреждение в силе: работа полигона в дереве по-прежнему НЕЗАКОММИЧЕНА (20 позиций:START_PROMT.MD+ 14 правленых и 5 новых файловeval/). Владелец перевозил её на новую машину транспортным коммитомtemp, но 24.08 снял его словом владельца (reset --mixed, дерево не тронуто — сверено побайтно, бэкап~/tm-backup-2026-08-24/textmachine-HEAD.bundle+ reflog): транспортный коммит вдобавок уносилSTART_PROMT.MD, который канон коммитить запрещает. Состав читать командойgit status --short -- eval/, снимок здесь протухает. Не трогать и не «прибирать»; приёмка ФАЗЫ — за параллельным оркестратором, пинг №20 — в секции «Полигон». Форма коммита строго pathspec · (в) дофикс-пак P8-FIX ПРИНЯТ И ЗАЛЕНДЕН 22.08 (D39.154, лендинг31f1f82): блокер свипа закрыт четырьмя механизмами и пере-проверен живой пробой оркестратора, деньги сошлись двумя путями из сырого леджера; мои четыре строки регистра —PD-371…PD-374. ⚠ Порядок вышел ОБРАТНЫМ этой очереди: промт дофикса требовал запуска ПОСЛЕ читающего пака, запущен был раньше. Цена перестановки, названная мной вслух 21.08 («блокер живёт всё время читающего пака»), тем самым НЕ заплачена — это лучший исход, чем планировалось; в минус — §4.7 (аддендум релеем) пуст и читающий пак пойдёт по только что переписанному коду. ЧТО ДАЛЬШЕ С ПЛАТФОРМОЙ — решено 22.08 при актуализации доков, порядок такой. (1) Читающий пак P8-REVIEW — ОТРАБОТАН, ПРИНЯТ И ЗАЛЕНДЁН 27.08 (D39.159): четыре оси, 24 новые строки регистра (PD-375…PD-398), 17 дописок, каталог воспроизведенияplatform/docs/p8-review/. Единственный vuln —PD-379(major): открытый поток событий переживает отзыв сессии. Числа сдачи пере-мерены приёмкой на дереве С лендингом бэкенда. Промт архивируется. Следующая работа зоны — кодовый пак по этим строкам, запуск по слову владельца. Промт ЖИВ и переписан 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: ДА, исполняется первым касанием зоны (пинг в её журнале). · (ж) ПЕРЕЕЗД НА НОВУЮ МАШИНУ — стенд ПЕРЕСОБРАН 24.08 (№19), как поднимать — картаREADME.md, строки «Тулчейн» иcounts.py. Ubuntu 26.04 WSL2, пользовательubuntu-26; тулчейн стоял НУЛЕВОЙ. Поставлено: Go 1.26.7 · golangci-lint 2.12.2 · Node 22.23.2 — тарболами вендоров со сверкой sha256 в~/.local/opt(симлинки в~/.local/bin); PostgreSQL 18.4 — рецептом самой зоны (platform/docs/STACK_DECISIONS.md§«Postgres на стенде без root»);build-essential+python3-venv— руками владельца, они единственные требовали root. Обе батареи зелены под-race: бэкендmake batteryEXIT=0, линтер 0 issues, скипы только корпус-гейченные и хелперы; платформаmake checkEXIT=0, 18 пакетов, линтер 0 issues, скипов 0. Фронт:npm ci+npm run checkпроходит целиком (335 тестов),vite buildсобирается. Сквозняк проверен ЖИВЬЁМ: демон платформы → сид через настоящий интейк → движок распарсил книгу (3 главы) → дев-прокси фронта достучался до платформы. ⚠ Что НЕ проверено: ни одного платного вызова · браузеров Playwright нет ⇒check:fullне гонялся · локальной модели и GPU на машине нет вовсе (слово владельца 24.08: мерить нечем, ветка не закрыта) · OIDC не поднимался, вход только дев-логином. ⚠ Правка.gitignoreвладельца несла дефект — правилоbooks/без якоря глушило ЛЮБОЙ каталогbooks, включая живой пакетplatform/internal/books/(новый файл там уходил бы в игнор молча); заякорено в/books/, проверено пробой в обе стороны. Новые строки бэклога — 217 (пути полигона), 218 (дефолты корпуса в движке — ЗАКРЫТА и снята 27.08, D39.159 эррата-д), 219 (line-якоря D-лога съехали — ⚠ ОБЪЯВЛЕНА 24.08, а В ТАБЛИЦЕ ЗАВЕДЕНА только 27.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.)
- ⚠ 27.08: КОНТРАКТНЫЙ МИНОР 0.5.0 ПРИНЯТ И ЗАЛЕНДЖЕН (D39.161). Отменённая пер-термная модель снесена из канона и компаньона; дверь
POST /books/{bookId}/bank/correctionsОБЪЯВЛЕНА и выведена из словаряbank-applyполе в поле; отказы разложены (409 = класс 14, 503 = класс 15 «слать тот же документ», 413 = 1 МиБ); признак «не построено» машиночитаем (bank_corrections_enabled, false ⇒ 404). Константа платформы поднята тем же коммитом — батарея зоны 18 пакетов, EXIT=0, линтер 0. Дверь ждёт МОНТАЖА паком (2в), туда же прогресс (200) и снятие двух полей с провода (PD-399). ⚠ Промт содержал ошибку оркестратора («поля навсегда нули»), исполнитель принёс её пингом — эррата 27.08-ж.- ⚠ 27.08: ВЫДАН ПРОМТ КОНТРАКТНОГО МИНОРА (
CONTRACT_MINOR_SESSION_PROMPT.md, пункт 2б очереди D39.156). ВОПРОС ЗАКРЫТ СЛОВОМ ВЛАДЕЛЬЦА 27.08 (D39.160): сквозная полоса прогресса (строка 200) из минора ИСКЛЮЧЕНА и едет с паком (2в). Причина механическая: гейт платформы требует, чтобы объявленная деплоем версия равнялась канону, поэтому канон и деплой обязаны совпасть В МОМЕНТ ЛЕНДИНГА; снос двери этому не мешает (платформа свою половину снесла 22.08), а смена семантики прогресса мешает — сервер её не считает и не будет до пака (2в), и0.5.0у старого прогресса был бы ровно той ложью, против которой гейт стоит. Прежнее «одним куском» покупалось тем, что иначе фронт перегенерируется дважды, — но фронт ЗАМОРОЖЕН и перегенерируется один раз независимо от числа миноров. Промт ВЫДАН: прошёл оба рубежа роли, девять находок опровергателя применены.- ⚠ 27.08: ПАК P8-REVIEW ПЛАТФОРМЫ ПРИНЯТ (D39.159). Четыре оси прочитаны исполнением, кода не тронуто; регистр 374→398 строк, открытых 72→96 (major 1→3). Ратифицированы норма копии-с-каноном, эррата §13 и токен
ОСПОРЕНО(PD-N); статусы трёх спорных строк НЕ пере-открыты. Приёмка пере-мерила батарею на движке из HEAD — шов пережил лендинг бэкендаd1eb8a9— и подтвердилаPD-376своей посадкой. Правка гейта формы регистра ОТКЛОНЕНА замером: краснила бы семь законных строк. Новая строка бэклога 225.- ⚠ 27.08: ВХОДНАЯ ДВЕРЬ ШВА ЗАКОНЧЕНА И ЗАЛЕНДЖЕНА (D39.158). Четыре пака зоны бэкенда приняты одним деревом: $0-глагол приёма правок банка · стоп банка стал ФЛАЖКОМ в самом движке (память предъявленного, схема хранилища v16) · единая точка фиксации отчёта (шесть исходов, v2) · полоса отказов в два яруса с классом
write_incomplete/exit 15 · пути решений только конвенцией. Порядок деплоя обязателен: движок первым →tmctl migrateпо каждой книге до прогонов → и только потом платформа снимает свой обход (пинг в её журнале). Строки 211/212/213/218 закрыты, 191(б)/203(з) пере-диспозиционированы (устранено, не обойдено), заведены 221–224. Онтология банка записана —architecture/18-bank-ontology.md.- Эра №15 закрыта — семь приёмок, все ПРИНЯТЫ и залендены; лента, коммиты и разборы — D39.109–123 (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.136–145, здесь не держатся.- Сделано (сводно) — снимок ленты закрытых эр в archive/PROGRESS-2026-08-04-09.md; детали — D-лог и слайсы.
- Курс: ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.59–78) → ФРОНТ-ЭРА (D39.81–100: зоны живые, контракт API ратифицирован) → шов/платформа/движковые блокеры построены (D39.106–123). Хвосты курса живут строками: 16 (полная цена холодного старта не измерена: у
coldrun-a/coldrun-bнет НИ ОДНОГО редакторского вызова, хотя сама edit-волна отработала и оплачена — 58 вызовов волновым драйвером 23–25.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 · веса K1–K12 13а · вне-претрейн чекпоинт 55; остаток арбитража банка = рецензент спорных кластеров при ре-пробе 74 — D39.102) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 62–68, 85) → Ф3 ридер-IDE (69–71). Стоячие: ToS-триггер 25.10 · Ш-2 до go1.27 (⚠ + x/text Unicode 17 тем же тулчейном — строка 119, реестр §Б-108 справочника якорей) · платные прогоны разблокированы (проба провода — D39.97, конфиги 112 залендены).
- Стек (полная карта роль→модель→конфиг→квирки — STACK.md, 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, пере-калибровка при следующем платном прогоне). ⚠ Вендор-факты 13–15.08 (пере-пин ИСПОЛНЕН и ПРИНЯТ, D39.137): таблица цен запинена ПИКОМ (flash 0.44/1.32 · pro 1.32/3.96/кэш-хит 0.044 за 1M; счёт шиппинг-c1 = 100% DeepSeek ⇒ ×4.2–4.4 в пике / ×2.1–2.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 §примечания).- ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). СЧЁТ ОЧЕРЕДИ на 27.08 (скриптом по таблице —
python3 docs/scripts/counts.py; обновлять при каждом лендинге): всего 176 строк · зона бэкенд 81 строго / 122 широко (175 пере-скоуплена D39.134; 176/177 заведены 15.08; 178 — D39.136; 179 ЗАКРЫТА D39.138; 180/181 — D39.137; 182 — wire-батч, аудит 15.08; 183–187 — контракт-ревью 28, D39.138; 188–190 — аудит бэклога, D39.140; 191/192 — модель подписи банка и пост-ридинговый цикл, D39.144; 193 — молчащие дыры выдачи, D39.147; 194–196 — приёмка пака честности, D39.149; 197 — фикс-лист ФЧ, D39.150; **198–204 — приёмка P7 и слова владельца 20.08, D39.153; 205 — слепота гейта якорей, аудит 21.08; 206–207 — приёмка P8-FIX, D39.154; 208–209 — аудит доков 22.08 (потеря глоссария на Gemini, риг живых проб); 210 — трассировка цепи банка 22.08 (род не производится авто-путём); 211–213 — консилиум шва 22–23.08: ключи провайдеров не доезжают до движка на SaaS (блокер 202), нестрогий загрузчик сида, дубль конвенции пути у платформы; 214–216 — разбор журнала трассировки банка: подпись не оставляет следа, $0-репин недостижим с платформы, три несущих сценария не проверены живым движком; 217–218, 220 — аудит переезда машины 24.08: абсолютные пути полигона, дефолты корпуса в движке, бутстрап гейта доков чужой замороженной зоной; 219 (съехавшие line-якоря D-лога) ЗАКРЫТА тем же заходом — D39.157 п.6) (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · блокеров очереди 0, платные прогоны разблокированы · «скоро» 49 (перечень — грепом по таблице, рукописный список снят 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(стройка паков 11–16, rerun2) ·-25-31(паки 17–20 · мини-прогон · полигон-пакеты 5–8 · ToS · холодный прогон; D39.26–58) ·-08-01-02(сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.59–90, срез D39.105) ·-08-02-04(сессии №11–№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91–105 + снимок шапки эры №15) ·-08-04-09(пинги закрытых паков эры №15) ·-08-14-15(закрытые бэкенд-записи №16–17: эмиттер шва · migrate · пере-пин DeepSeek; вынесено D39.139). Записи ниже — живой хвост (№16+, эра D39.124+; подрезка D39.139).
Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора)
Закрытые строки здесь НЕ хранятся — они уходят в D-лог с номером решения. ID строки стабилен навсегда (не перенумеровывается и не переиспользуется — на «строку N» ссылаются доки и промты, D39.80). Вес: «блокер-очереди» = мешает текущему шагу · «скоро» = ближайшие 1–2 касания · «когда-нибудь» = записано, не потеряно. Длинная строка начинается жирным лидом — таблица сканируется по лидам; «диспозиция сверху, археология вниз», ячейка >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) — их строки сюда НЕ заходят; здесь движок/полигон/доки, включая движковые стыки фронта (зона «бэкенд», как 99–102); строки 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 отвечен — семейства не окупаются (C3−SC=+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а | Веса рубрики K1–K12 не выбраны (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:23=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.1–5.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.006–0.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 | Остаток: авто-режим флага (проект Б не гонялся) · оси голоса A–D (профили не подписаны; черновик готов — 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 п.8–9, 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: карточки из подписанного сида, фильтр по именительному падежу, 86–112 сверок/арм — 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) + G1–G10 требования 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 ~на 40–60% при 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 |
| — НАХОДКИ ПРИЁМКИ ЭКСПОВ 18–20 (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_ttl ↔ cache_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 на последней попытке как ДИАГНОСТИКА тихого усечения 2–8k [PARTIAL, GATED] · п.17 assistant-prefill continuation на finish=length вместо ре-рана всего вызова [PARTIAL, DEFER]. Оба помечены в ресёрче как отложенные и ни в одной строке трекера не появились |
бэкенд/полигон | когда-нибудь | замер → решение | свип доков 08.08, research/21 §16–17 |
| 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 не начинать до ответа вендора «по какой отметке времени тарифицируется вызов» — вендором НЕ задокументировано — и замера доли пика; дешёвый рычаг: операционное правило «прогоны не стартуют в 01–04/06–10 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/NormVersion — manifest.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 бинарей: удалять не пиненные ни одной незакрытой попыткой, последние 2–3 релиза держать для отката; (в) окно совместимости читателей / пин уровня книги — строить ТОЛЬКО по триггерам: много тенантов · бампы схемы еженедельно+ · потребители 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). Промт в архиве. ОСТАТОК-указатель: frontend/docs/api-contract/ + типы + моки + гейт утечки — первое касание фронта при разморозке (расхождение канона и зеркала ВРЕМЕННО ратифицировано D39.142 п.5); BankTerm.decision |
оркестратор | скоро (остаток = только (б) зеркало фронта при разморозке) | 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 (ключ вызова позиционный, исходник вне снапшота), вставка в середину = МОЛЧАЛИВАЯ перекупка хвоста ~$9–11/500 глав — движковый гейт против молчания ОБЯЗАТЕЛЕН (родня дыры Р6 строки 160); платформа второй файл принять не может (re-parse нет); ja-мина: новый ruby-алиас двигает memory_version → снапшот (громкий --resnapshot, уточнение приёмки); полный $0-резюм хвоста — предусловие D15.2 (строка 49) |
бэкенд+платформа+контракт | когда-нибудь (вместе со строками 160–162 — дизайн в паке 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 у клиента; шаги 1–2 — платформа (её же PLATFORM_DIRECTION.md:202-205), семантика — в спеку батчем 183; транспорт НЕ менять (решение владельца по §5б) ⚠ ШАГИ 1–2 ПОСТРОЕНЫ И ЗАЛЕНДЕНЫ P7 (D39.153): gzip на JSON и НЕ на SSE + ETag/If-None-Match→304 на коллекциях, карточке книги и /capabilities; валидатор считается от БАЙТ ответа, поэтому страница 2 и дельта той же ревизии различаются по построению. Остаток — шаги 3–5 |
платформа (+контракт/фронт) | скоро (остаток: шаги 3–5) | мидлварь/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 ⚠ ПЕРЕ-ДИСПОЗИЦИЯ 27.08 (D39.158 п.1/п.7): движковая половина УСТРАНЕНА, не обойдена. Отложенная половина пункта (б) — «ослабить границу самой паузы» — исполнена: стоп срабатывает только на кластере, которого ни один прежний стоп не предъявлял (память bank_stop_presented, схема v16), возобновление БЕЗ решений продолжает прогон. Прежняя диспозиция «остатка-ратификации нет» верифицировала СОСТАВНОЕ поведение с обходом платформы и на вопрос «работает ли флажок без обхода» не отвечала. Остаток строки — снятие обхода в платформе (её пак), и он ТОЛЬКО после лендинга движка. |
бэкенд+платформа | скоро (остаток — движковая половина, 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:96=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 ⚠ **СУЖЕНА 27.08 приёмкой (D39.159, свип по норме §3 п.8): движковая половина ЦЕПИ ПОСТРОЕНА.** tmctl bank-applyзалендженd1eb8a9` и ратифицирован D39.158 — писатель файлов решений существует, правку термина есть куда положить. Открытым остаётся ровно ПЛАТФОРМЕННЫЙ конец: воркер, который дёргает глагол перед возобновлением (пункт (2в) очереди). Формулировка «канал НЕ построен» с этого дня неверна и отправляла бы следующий пак строить построенное |
mined_rejects по Go платформы = **0** вхождений · воркер, который должен переносить решения в эти файлы перед resume, описан в комментарии её же миграции (00002_readmodel.sql:172-174) и НЕ построен. **Делится надвое:** (а) **труба** — платформа пишет решения в два файла, которые движок читает. ⚠ **«Контракт файлов существует, проектировать нечего» — ОПРОВЕРГНУТО КОДОМ 21.08** (опровергатель промта, пере-проверено оркестратором построчно): движок читает mined_delta/mined_rejects, ТОЛЬКО если их путь объявлен в book.yaml (backend/internal/pipeline/mining.go:822=if r.Book.MinedDelta == ""), а объявленный ключ с НЕсуществующим файлом валит загрузку конфига целиком (backend/internal/config/book.go:254=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:784=if r.Book.MinedRejects == ""), не построен ПЛАТФОРМЕННЫЙ путь целиком; (2) тело развилки с четырьмя вариантами и ценой лежит ТОЛЬКО в platform/docs/archive/platform-PROGRESS-P8.md:176-205=Двигается ратифицированная граница владения; (3) есть СЕДЬМОЙ вариант, которым развилка не решается, а РАСТВОРЯЕТСЯ: движок дефолтит mined_delta/mined_rejectsпо конвенции каталога (как уже делает сproject_db—config/book.go:189=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. ⚠ ДИСПОЗИЦИЯ 27.08 (D39.160, слово владельца): едет с ПЛАТФОРМЕННЫМ паком (2в), а НЕ с контрактным минором. Причина механическая: гейт версии требует совпадения канона и деплоя в момент лендинга, а сервер прогресс по-новому не считает и не будет до (2в) — канон, объявляющий новую семантику при старом сервере, лжёт ровно так, как гейт запрещает. Требование не ослаблено, перенесён только носитель. Сегодня прогресс считается ПО ОТРЕЗКАМ и при снятии стопа начинается с нуля (канон §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:536=различать причины отказа клиент не может по замыслу) · (д) ИСПОЛНЕН — клетка приложения А заполнена unspecified (README.md:1376 — ⚠ первая редакция писала :1391, это строка ДРУГОГО приложения; испр. 20.08) · (г) наполовину — unspecified ратифицирован в каноне (openapi.yaml:1784-1787), открыта только ГРАНИЦА ступеней замечаний (две ступени при девяти рангах движка) → это строка 148 · (и) закрыт полем stop_requested (D39.152) · (л)(м)(н)(о) закрыты контрактной сессией. ОТКРЫТО РЕАЛЬНО: ⚠ (а) ИСПОЛНЕН 27.08 минором 0.5.0 (D39.161) — канон получил предупреждение о конверте вне /v0; открытым по строке остаётся (к). Прежний текст пункта: (а) канон-половина про /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:96=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:1097=Карта «причина → КОД контракта). Реально пуста другая клетка: соответствие причин движка кодам замечаний, и правила её заполнения в компаньоне уже написаны (фраза по ДОККОММЕНТУ disposition.go, а не по имени константы — инверсия уже стоила двух фраз; класс 2 схлопывается в ОДИН код). Исполнитель — контрактная сессия, не оркестратор ⚠ ПЕРЕ-ДИСПОЗИЦИЯ 27.08 (D39.158 п.7): хвост (з) закрыт — «ратификации не нужно» отвечало на вопрос про один файл решений, не про флажок; движковый гейт полноты снят, не обойдён. |
контракт/доки | скоро (следующее касание контракта, вместе с 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 |
| 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: термин · перевод · уверенность 0–100) — поля рода в ответе НЕТ; майнер берёт 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:71=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:202=loadDotEnv(filepath.Join(filepath.Dir(inv.cfgPath), ".env"); cmd.Dir = workdir — runner/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 |
| 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:189=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 |
| 217 | Скрипты полигона захардкодили АБСОЛЮТНЫЕ пути двух корней и не работают на этой машине вовсе. ДВА РАЗНЫХ слома. Корень репо — смена пользователя: литерал в 121 файле, из них 104 дословно REPO = Path("/home/ubuntu/projects/textmachine"), портабельных форм всего 5. Корень книг — оба события порознь: литерал /home/ubuntu/books 86 файлов (пользователь), портабельный Path.home()/"books" 89 файлов (переезд каталога; на прежних машинах работал). Объединение 173 файла. Пользователь теперь ubuntu-26, книги переехали в <репозиторий>/books ⇒ ломается и то и другое, включая ЖИВОЙ гейт фазы Д eval/conformance.py:48=REPO = Path("/home/ubuntu/projects/textmachine"). Живых носителей 26 по корню книг (среди них портабельная форма преобладает 20:6) плюс корневые гейты и сборщики корпусов; остальное — скрипты закрытых эксп-12–16, их владелец велел ВЫБРОСИТЬ, а не чинить (D39.157 п.4а). Форма правки — за зоной; приор оркестратора: один модуль путей, корень резолвится МАРКЕРОМ вверх по дереву (движок так и делает — backend/internal/miner/miner_parity_test.go:29=finds the repository root by MARKER), книги от него, обе ручки перекрываются env |
полигон | скоро (блокирует любой прогон зоны) | пак путей полигона | переезд машины 24.08, №19 |
| 219 | Line-якоря в тела D-лога обречены съезжать, и механизм именно в дисциплине эррат. Эрраты вписываются в КАРТУ ШАПКИ (append-only, D23.3), то есть в начало файла, — значит каждая эррата сдвигает номера строк ВСЕХ тел ниже, и любой якорь вида 05-decisions-log.md:NNN умирает молча. ⚠ Замерено на себе 27.08: три эрраты за сессию убили якоря в 17-seam-inbound-law.md:120 и research/25-seam-cold-review.md:5 (оба целили в :232, тело уехало на :239). Лечение — не пере-нацеливание (оно повторится через эррату), а СМЕНА ФОРМЫ якоря: в тела D-лога целиться номером ноты (^## D39.106), который стабилен навсегда, а не строкой. ⚠ Строка ОБЪЯВЛЕНА в CURRENT-STATE 24.08 и до 27.08 в таблице НЕ СУЩЕСТВОВАЛА — очередь три дня ссылалась на носитель, которого нет; поймано свипом якорей при выдаче контрактного минора |
оркестратор | скоро (растёт с каждой эрратой) | --lint учит форму файл:^## D<номер>, живые якоря в D-лог переводятся на неё |
ревью доков 24.08, механизм и отсутствие носителя — 27.08, D39.160 |
| 220 | Репо-широкий гейт доков бутстрапится пакетным менеджером ОДНОЙ зоны, и та заморожена. Диспетчер .git/hooks/pre-commit зоно-нейтрален по построению (for hook in */scripts/githooks/pre-commit, #!/bin/sh, node не нужен) и судит CLAUDE.md + docs/** + platform/docs/** + frontend/docs/** (docs/scripts/counts.py:471=ROOT / "CLAUDE.md"), но единственный его УСТАНОВЩИК — frontend/scripts/githooks/install.mjs, вызываемый ключом prepare из frontend/package.json. Охват и бутстрап не совпадают ⇒ инструмент решает свою задачу не в полной мере. Проверено исполнением 24.08: на этой машине .git/hooks/ содержал только *.sample, гейт МОЛЧАЛ, ничего не проверив, и поймал первые четыре дефекта только после ручной установки; сессия бэкенда или доков npm install не делает никогда. Приор: зоно-нейтральный установщик в docs/scripts/githooks/ как ЕДИНСТВЕННЫЙ писатель диспетчера, prepare фронта зовёт его — фронтовая половина выписана пингом №19 в зонный журнал фронта. ⚠ Ручная установка — временная мера, пока строка открыта; записывать её как порядок работы ЗАПРЕЩЕНО (это ровно тот обход, цену которого называет шапка CLAUDE.md) |
доки + фронт | скоро | зоно-нейтральный бутстрап + правка prepare при разморозке |
аудит переезда 24.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-шаги миграций v8–v14 не идемпотентны вопреки шапке 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 · дистилляция 7–14B); + 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 шаги 1–2, §7 |
| 114 | Конфиго-слой ручки эффорта: два дешёвых хвоста приёмки (вне снапшота, $0 прогонов). (а) Д4 отчёта: gates.terminology.target_script НЕ сверяется с book.target_lang — target_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 |
| 221 | Джойн «предложено × решено × нерешено» живёт ТОЛЬКО в движке. Читаемый банк несёт итоги без предложений, карта подписи — предложения без решений; семантика «решено ли» (ownerHandled) существует в двух файлах движка и больше нигде (греп по трём зонам). Экран подписи при разморозке фронта заставит платформу пере-реализовать движковый закон у себя — дубль, запрещённый п.6 закона шва. Фикс: движок публикует нерешённость (секцией банк-экспорта или отдельной проекцией) — но ТОЛЬКО когда экран закажут: рефакторить под несуществующий экран не надо. Сейчас — ноль кода ⚠ КОНСИЛИУМ 27.08 (оркестратор №19 + автор движковой двери), итог записан, чтобы его не выводили заново. (1) Это ОДИН дефект, а не три: 221 и 224 — ось СОДЕРЖАНИЯ (проекция не несёт предложенное и не несёт джойн), остаток компаньона — ось СВЕЖЕСТИ (дверь пишет источники мгновенно, проекция ждёт границы прогона, которой при стоящем прогоне не наступает). Классический разрыв CQRS. Чинить порознь = три полу-лечения. (2) Поле BankTerm.decision МЕРТВО СТРУКТУРНО — довод сильнее прежнего «запрет владельца»: decline выражает себя ИСЧЕЗНОВЕНИЕМ строки, а не значением поля (writeAutoBank делает continue на ownerHandled, mining.go:709+), и негде показаться ни в одном из трёх окон; для approve поле избыточно — status: approved публикуется. Проверено двумя независимыми трассами. ⚠ Вопрос был СНЯТ ещё D39.144 вместе с ложной посылкой «марш к нулю, 17 из 300»; сегодняшняя потребность иная и уже — перезагруженный экран показывает СДЕЛАННЫЕ ПРАВКИ. (3) Форма-кандидат Д′: ДВЕ проекции, у каждой РОВНО ОДИН писатель — «решено на границе» пишет прогон рядом с картой, «решено после границы» пишет дверь при записи; экран склеивает по паре (поверхность, map_id), счёт приезжает ПОСЧИТАННЫМ. Правило единственного писателя остаётся буквально, поправка онтологии НЕ нужна. Конверт карты из дофикса-2 получает здесь первого потребителя. ⚠ Колонка undecided обязана ехать с тем же НЕ-гейтовым контрактом, что SignatureState, иначе пер-термная модель вернётся через новую проекцию. (4) Подпункт «история»: glossary_revisions построен наполовину — читатель вызывается только из тестов, графа reason заполняется литералом seed-replace, а ревизия пишется лишь для ОСТАВШИХСЯ строк, то есть журнал слеп к отклонениям; владельческий note доезжает до вида (glossary.go:41,161) и не публикуется ни одной проекцией. ⚠ Journal append-only: не заказать ревизии без исчезновений задним числом уже не выйдет. Пак не заказан — ждёт слова владельца |
бэкенд | гейчена разморозкой фронта | аддитивное поле проекции | приёмка двери 27.08, D39.158 |
| 222 | ВНУТРИкнижный остаток оси арбитра (заголовок исправлен 27.08 — прежний говорил «межкнижный» и инвертировал собственное тело: межкнижную гонку конвенция как раз сняла): второй конфиг ТОЙ ЖЕ книги с другим project_db пишет ту же пару файлов решений под ДРУГИМ локом, мимо флока живого прогона. Достижимо по построению: пути решений считаются от каталога book.yaml и book_id, лок — от project_db. Рукотворная конфигурация оператора (две базы одной книге), лечение трогает ратифицированный п.2 закона (второй арбитр на идентичности файлов решений либо отказ при загрузке). ⚠ Межкнижная версия ЗАКРЫТА снятием объявляемых ключей (D39.158 п.5) |
бэкенд | когда-нибудь (непропорционально: правка ратифицированного закона ради операторского футгана) | второй арбитр ЛИБО отказ при загрузке | приёмка двери 27.08, D39.158 |
| 223 | Майнерский хвост за потолком структурно недостижим. Потолок эмиссии (200) применяется ДО фильтров пригодности, сида и отказов, а детектор кандидатов сида и отказов не видит вовсе — репозиторий пишет это про себя дословно. Замер: 2110 ранжированных → 442 годных во всём алфавите → 117 внутри окна потолка → 325 невидимы постоянно; отклонение всех 117 не подняло ни одного. ⚠ Решения владельца слотов НЕ освобождают, и это верно СЕГОДНЯ, а не следствие флажка; цитата «пере-предлагается once these are signed or declined» относится только к ОБРАТНОЙ секции. Двигать потолок — трогать фрозен-паритет, отдельное решение. Якорь-пин: internal/miner/emissioncap_test.go |
бэкенд | когда-нибудь | решение о потолке, не правка | приёмка двери 27.08, D39.158 |
| 224 | Банк-экспорт на стопе ПУСТ — проекция, наиболее пустая ровно в момент, когда её читает экран подписи. Замерено: стоп с двумя предложенными термами даёт total=0, авто-банк на стопе отсутствует, потому что он пишется только в ветке авто-продолжения; при этом комментарий рядом называет стоп «границей, которую читает экран подписи», а платформа читает именно .bank.json. Член класса «проекция без контракта потребителя» (architecture/18-bank-ontology.md) |
бэкенд + платформа | скоро (держит экран подписи вместе с 221) | публиковать предложенное на стопе | приёмка двери 27.08, D39.158 |
| 225 | Гейт «строка open, а лекарство уже в дереве». При лендинге пересекать ПОЛНЫЕ пути застейдженных файлов с якорями открытых строк регистра и бэклога; совпадение — вопрос лендеру, а не находка следующего пака. Замерено прежде решения: по именам файлов 22 совпадения, почти все ложные; по полным путям 2, оба настоящие, и один из них (PD-157) убил мой же лендинг d1eb8a9. Норма-половина уже стоит в platform/docs/ENGINEERING_STANDARDS.md §3 п.8; здесь — машинная половина, режимом counts.py |
оркестратор | скоро (окупился до постройки) | режим counts.py, берущий список путей и печатающий открытые строки, чьи якоря в них целят |
приёмка пака P8-REVIEW 27.08, D39.159 п.7 |
| 226 | История ПРЕДЪЯВЛЕННОГО не ведётся — «почему меня не остановило на этом термине» ответить нечем. Карта и человеческая таблица стопа перезаписываются каждым прогоном, память флажка — плоское множество поверхностей без map_id и без времени. Это прямая расплата за то, что стоп срабатывает ОДИН раз (кластерная память, названный остаток дофикса-2), и единственная возможная диагностика спора. Кандидат в пак решённости, не заказ. ⚠ Шестое, названное консилиумом и оставленное владельцу: авторство и время решения — сегодня цена нуля (владелец один), станет нужным при мультипользовательской платформе, и тогда его захотят ЗАДНИМ ЧИСЛОМ |
бэкенд | скоро (диагностики нет вовсе) | движок метит предъявленное map_id и временем; оверлей отвечает «что предъявлялось на прошлом стопе» |
консилиум по читающей стороне банка 27.08 |
(Хроника сессий №11–№13, 02–04.08 (D39.91–105: ручки эффорта · стандарты репо · archguard · S2 · контракт API v0 · платформа P0 · банк-арбитраж research/24) — в archive/PROGRESS-2026-08-02-04.md.)
(Хроника сессий №9/№10, 31.07–02.08 (D39.59–90: курс «общность вперёд» · свип полноты · качество банка · фикс-пак · coldrun-b · фронт/платформа открыты · шов движок↔платформа · промт арбитража банка) — в archive/PROGRESS-2026-08-01-02.md.)
(Хроника 25.07–31.07 до курса D39.59 — эры №7/№8 и начало №9: паки 16–20, мини-прогон, полигон-пакеты 5–8, ToS-речеки, пак-19, холодный прогон (лендинги D39.26–58) — в archive/PROGRESS-2026-07-25-31.md.)
Бэкенд
⟶ Состояние бэкенда — CURRENT-STATE (один носитель, D39.80); здесь только пинги живых сессий.
✅ ИТОГ БЭКЕНД-СЕССИИ 27.08 (2) — ФИКС3 ПО ФИКС-ЛИСТУ ПРИЁМКИ (docs/BACKEND_SEAM_FIX3_SESSION_PROMPT.md), все 6 пунктов. Дерево готово, НЕ закоммичено; продолжает дерево трёх паков.
Четыре пина, один снос, ноль новых механизмов: пин порядка «карта → память» (мутация приёмки
воспроизведена в трёх пакетах ДО пина; занятый путь карты → ошибка прогона + пустая память) · пин
«отчёт класса 15 мерит подпись по ДИСКУ, не по намерению» (утверждение панели воспроизведено) · оба
носителя старого пола полосы приведены к двух-ярусной букве · отменённая формула «стоп гаснет, когда
решён каждый терм» зачищена ГРЕПОМ — восемь носителей, включая два файла самого пака · снесена
машинная таблица .bank-stop.json вместе с писателем и четырьмя тестами (читателя нет ни в одной
зоне — свой греп; человеческая .bank-stop.txt не тронута) · банк-экспорт получил якорь свежести
as_of+run_id (аддитивно на tm-bank-v1; «может быть устаревшим» больше не живёт только в логе).
Доказательная база — FINDINGS §46; каталог мутаций 58 → 60 (FX23, FX24).
⛔ Пинги:
- Платформе/оркестратору:
.bank-stop.jsonСНЕСЁН (мёртвая публикация упразднённого D39.144 пер-термного экрана) — платформенные журналы (platform-PROGRESS.md,STACK_DECISIONS.md) называют его атомарно-читаемым сайдкаром, упоминания устареют при лендинге. - Потребителям банк-экспорта: документ несёт
as_of(граница прогона) иrun_id(тот же id, что стримevents.jsonl); аддитивно, старые читатели не ломаются; пустойrun_id= «идентичности нет», не «текущий».
✅ ИТОГ БЭКЕНД-СЕССИИ 27.08 — ДОФИКС-2 «ФЛАЖОК СТАНОВИТСЯ ФЛАЖКОМ» (docs/BACKEND_SEAM_FIX2_SESSION_PROMPT.md). Дерево готово, НЕ закоммичено; продолжает дерево паков 24–25.08.
Все 13 пунктов §4 закрыты: движок сам реализует модель D39.144 — стоп банка срабатывает только на
кластер, которого ни один прежний стоп не предъявлял (персистентная память bank_stop_presented,
схема v16); авто-провод неподписанных строк работает и при ПОДНЯТОМ флаге; отчёт двери собирается
ОДНИМ конструктором по явному исходу (проекция · отказ · no-op · прерывание · записано · запись не
удалась), версия отчёта → v2 (written_delta/written_rejects, mode refused/write_incomplete);
полоса отказов получила два яруса и класс write_incomplete (exit 15); оба файла решений готовятся
целиком до первого rename + fsync каталога; ключи mined_delta/mined_rejects СНЯТЫ (пути только
конвенцией — МЕЖКНИЖНАЯ гонка недостижима, ⛔-пинг прошлого пака закрыт; воркфлоу-ревью нашло остаток
той же оси: второй конфиг ТОЙ ЖЕ книги с другим объявленным project_db пишет те же файлы под другим
локом, мимо flock живого прогона — пинг ниже, решение не паку); карта подписи
пишется атомарно и несёт конверт map_version+map_id; шесть слепых пятен гейта закрыты пинами,
проверенными посадкой. Поверх — воркфлоу-ревью (шесть полос × три скептика, FINDINGS §45): его две
кодовые находки закрыты правками с пинами — --dry-run теперь отказ для всех глаголов без проекции
(раньше translate --dry-run МОЛЧА запускал платный прогон), а повтор после отказа синка каталога
держит класс 15, пока долговечность не пере-доказана. Доказательная база —
backend/docs/SEAM_PACK_FINDINGS.md §§36–§45; каталог мутаций 36 → 58 записей, 0 неожиданных
исходов. Здесь — только требующее действия.
⛔ ПОРЯДОК ДЕПЛОЯ/ЛЕНДИНГА — зависимость НАПИСАНА, а не выведена (заказ §4.12):
- Движок первым, платформа второй. Сброс флага
--verify-bankплатформой (её персистентная колонка + особый случай в спавне,platform/internal/runs/spawn.go) может умереть ТОЛЬКО ПОСЛЕ лендинга этого пака: в обратном порядке каждая книга с поднятым флажком в день лендинга перестаёт писать авто-банк и пере-сидироваться ровно в режиме, ради которого флажок существует. tmctl migrateдо прогонов (голова схемы v15 → v16):OpenReadOnlyотказывает классом 13 всем непере-мигрированным книгам — ратифицированный порядок D39.134 п.3 это покрывает, но назван явно.- Миграционная нота: после апгрейда память пуста → ОДИН доброкачественный стоп на первом verify-прогоне каждой книги.
⛔ ПИНГИ ЧУЖИМ ЗОНАМ (правок не делал):
- Платформе: у неё умирает сброс флага при resume (после лендинга движка — п.1 выше) · отчёт двери
теперь v2 (
tm-bank-decisions-report-v2: moderefused/stopped/write_incomplete, пофайловыеwritten_*) — еёreadEngineвыбрасывает stdout при ненулевых кодах, прежний пинг об этом стал острее: класс 15 БЕЗ отчёта неотличим от «ничего не легло» · новый exit 15 в полосе 10–19 читается её ридером как refused по построению полосы — ратификация значения на оркестраторе при лендинге. - Полигону:
eval/bank_autonomy/parse_common.pyпарситmined-signature.yaml— карта теперь несёт верхние ключиmap_version/map_id(лежащие артефакты coldrun не тронуты; новые прогоны будут в новом жанре). - Фронту: экран подписи, читающий
signature.undecidedиз отчёта двери, обязан перестать трактовать его как «стоп не погаснет» — поле информационное (D39.144), контракт поля пере-описан в коде. - Майнерский хвост за потолком структурно недостижим (§4.4, НЕ чинилось по заказу): потолок эмиссии
(200) режет ранжированный пул ДО фильтров пригодности/сида/отказов (
miner_emit.go,ranked[:emitRankCap]доemissionEligible). Пере-замерено своей командой (числа прежнего сплошного читателя в дерево не попали): 2354 ранжированных · 209 годных во всём алфавите · 11 в окне потолка · 198 невидимы постоянно; отклонение всех годных окна не подняло ни одного из хвоста (FINDINGS§38). Первоисточник замера — постоянный якорь-пинinternal/miner/emissioncap_test.go: он утверждает ТЕКУЩЕЕ поведение и покраснеет в день сдвига потолка или порядка фильтров, приведя двигающего к этому пингу. Двигать потолок — трогать фрозен-паритет; отдельное решение. - Гипотеза «подписание промахивается мимо чекпоинтов терминолога и пере-оплачивает роль» механизмом НЕ подтверждена (§4.13): память предъявленного входов чекпоинта не трогает; если перерасход существует — он существовал и до пака, отдельный предмет.
- Остаток оси арбитра (нашло воркфлоу-ревью, воспроизведено живьём): второй конфиг ТОЙ ЖЕ книги
(один каталог, один book_id, другой объявленный
project_db) пишет ту же пару файлов решений под ДРУГИМ локом — в т.ч. мимо flock живого прогона. Межкнижная версия снята конвенцией; эта — второй конфиг одной книги, т.е. рукотворная конфигурация оператора. Выбор лечения (второй арбитр на идентичности файлов решений или отказ при загрузке) трогает закон п.2 — решение не паку, пинг. Довод в коде сужен честно (bankdecisions.go, THE ARBITER).
✅ ИТОГ БЭКЕНД-СЕССИИ 25.08 — ДОФИКС ТОЙ ЖЕ ДВЕРИ по приёмке (docs/BACKEND_SEAM_FIX_SESSION_PROMPT.md). Дерево готово, НЕ закоммичено; продолжает дерево пака 24.08, а не заменяет его.
Все 16 пунктов §4 закрыты: блокер формата (дверь писала байты, которых её же парсер не читает, и любой
следующий вызов по книге — включая проекцию — падал) · пред-существующие поломки чинятся по одной ·
два ключа на один путь · гарды флагов на ПРИСУТСТВИЕ (--decisions= уходил на ПЛАТНЫЙ путь) · кап
документа решений · конверт путей на manifest --json · алиасы судятся по НАБОРУ · перевёрнутое окно
глав · честность отчёта о стопе · SIGTERM · десять слепых пятен гейта · цепь целиком в репозитории.
Доказательная база, замеры, попунктный чек и обе итерации ревью — backend/docs/SEAM_PACK_FINDINGS.md
§§14–30; здесь только то, что требует ДЕЙСТВИЯ.
✅ ⛔-ЗАКАЗ ПРИЁМКЕ ИЗ ПАКА СНЯТ. Цепь «стоп → bank-apply → резюм → стоп ГАСНЕТ» теперь живёт в
репозитории как $0-тест на фейковом провайдере (internal/pipeline/bankchain_test.go), на ОДНОМ проекте
от стопа до погасшего стопа. Довод пака «своими силами невозможно, надо дойти оплаченной черновой волной»
был шире правды: харнесс для этого уже был в репозитории. Мина №1 строки 199 (ливлок на status: auto) закрыта исполнением, а не рассуждением.
⚠ РАТИФИКАЦИЯ КЛАССА 14 — прежнее требование в силе, объём немного шире. Класс decisions_rejected
теперь несёт и отказ по КАПУ (документ больше, чем движок применяет за один акт): это факт о ЗАПРОСЕ, а
не о деплое, поэтому 10 был бы неверен. Носители полосы поднимает оркестратор при лендинге, как и
планировалось.
⛔ ПИНГИ ДОФИКСА (правок не делал):
exit 2при OOM платформа читает как успех — общедвижковый класс; кап удерживаетbank-applyот того, чтобы стать первым, кто до него доедет, но самого класса не снимает.- Каталог книги без права записи даёт
exit 1(вне полосы). Класс движка корректен и одинаков у всех глаголов — чинить надо чтение кода 1 на платформе, которая списывает проблему прав ХОСТА в бюджет попыток КНИГИ. - Проекция отвечает «что применится», а не «почём». Рекомендация — НЕ строить: глагол $0 по построению, поле «$0» было бы шумом. Решать оркестратору.
- Карта подписи не удаляется после погасшего стопа — пред-существующее; зафиксировано тестом как
текущее поведение. Честный ответ на «есть ли что подписать» — новое поле отчёта
signature.undecided. - Цена глагола Θ(N²) по построению — каждый пер-решенческий помощник сканирует весь документ. Именно поэтому кап на КОЛИЧЕСТВЕ стоит на 5 000. Поднимать его без индексации этих сканов нельзя.
- Апстрим-дефект
gopkg.in/yaml.v3 v3.0.1(эмиттер пишет блочный скаляр, который его же парсер не читает) вылечивается по-настоящему только скаляр-типом схемы с явным стилем или переездом наgo.yaml.in/yaml/v4(релиз-кандидат, смена module path в ДВУХ зонах). Мой обход несёт ссылку на исходник библиотеки и характеризационный тест, который покраснеет в день починки апстрима. - Фолд поверхностей Go-резидентный:
internal/text/norm.goдержитtrad2simpи катакана→хирагана в Go, а не в langpack'е. Пара, которой в репо нет, деградирует до NFKC+lowercase — не блокирована, но это ровно тот класс, о котором ревью-вопрос общности. Шире двери, поэтому пингом.
⚠ ЧТО В ЗАПИСИ ПАКА 24.08 (ниже) УСТАРЕЛО — читать её через эту поправку.
- Пинг 2, «таймаут: 1.6с на 5 000 термов, 9.1с на 20 000» — ЧИСЛА НЕВЕРНЫ, и это ровно тот датум,
которым платформенный пак будет мерить свой таймаут. Мой замер той же командой: 5 000
approve→ 5.2 с, 20 000 → 50 с; на минимальныхdecline(самая дешёвая форма, и потому та, которой байтовый кап пускает больше всего) 5 000 → 11.3 с, 12 000 → 58 с, 28 900 → 308 с. Брать надоFINDINGS§18 и §29 п.1, не эти. - Пинг 6 «однострочник при лендинге: документ решений не капирован» — СДЕЛАН. Капов теперь два (1 МиБ на чтение + 5 000 решений на применение), потому что байтовый не ограничивает время.
- Пинг 3 про флейки пере-снят сильнее: изолированный A/B против дерева HEAD даёт побайтно
одинаковое падение с обеих сторон —
FINDINGS§31.
⛔ ПИНГИ, КОТОРЫЕ ЖИЛИ ТОЛЬКО В FINDINGS И НЕ ДОЕЗЖАЛИ ДО ЖУРНАЛА (найдено проверкой согласованности):
карта подписи пишется обычным os.WriteFile мимо атомарной конвенции сайдкаров того же пакета
(пред-существующее) · цена доказывающего рендера ≈5 % времени, плюс notCanonical теперь тоже разбирает
документ · опубликованные пути двух файлов решений не несут версионного конверта (пинг пака §10.5) ·
схема сида без omitempty (пинг пака §10.6).
⚠ Два пред-существующих -race-флейка в internal/store не тронуты (TestKillMinus9LosesAtMostOneCall,
TestTheSeamIsNotChargedToTheStoreOperationBudget). База ДО правок, снятая на нетронутом дереве пака,
уже была красной по первому — это моя собственная атрибуция, а не наследованная.
⛔ ПИНГ, КОТОРЫЙ ТРОГАЕТ РАТИФИЦИРОВАННЫЙ ЗАКОН (п.2) — решать не паку. Арбитр двери — flock на
<project_db>.lock, а пишутся mined_delta/mined_rejects, которые book.yaml может направить куда
угодно. Две книги с РАЗНЫМИ project_db и ОДНИМ delta друг друга не исключают: воркфлоу-ревью
продемонстрировало гонку на 1500 одобрений с каждой стороны — одна сторона потеряла всё, exit 0, отчёт
«применено». Внутрикнижную версию этого §4.3 уже запрещает; межкнижная законна сегодня. Выбор — второй
арбитр или отказ при загрузке на путь вне каталога книги. В корпусе нарушителей нет. В коде стоит явное
«арбитр покрывает проект, а не пути», а не молчаливое допущение.
🔧 В репозиторий добавлен инструмент: backend/cmd/tmmutate — харнесс мутаций с каталогом из 36
посадок, у каждой названо СВОЙСТВО, за которое она отвечает, и записан ожидаемый исход. Три сессии подряд
писали такой инструмент в скретчпад и теряли его; приёмка при этом нашла восемь мест, где гейт был слеп.
⚠ Он дважды подводил и оба раза был починен по следу: сначала подсадил мутацию и прошёл собственную
sha256-самопроверку (эталон второй правки снимался с уже пропатченного файла), затем считал КРАСНЫМ провал
СБОРКИ — из-за чего две записи каталога, сломанные рефакторингом, целую итерацию числились пойманными
тестами, которые не могли отработать. Теперь: одно чтение и запись на файл, отпечаток всего каталога перед
каждой посадкой, зелёная базовая линия пакета ДО первой посадки и третий вердикт NOTHING, роняющий гейт.
FINDINGS §25 и §34.
✅ ИТОГ БЭКЕНД-СЕССИИ 24.08 — ПАК «ВХОДНАЯ ДВЕРЬ ШВА», движковая половина D39.156. Дерево готово, НЕ закоммичено, передаётся на лендинг.
Заказ §4.1–§4.6 выполнен: конвенционные дефолты mined_delta/mined_rejects (ключей не объявляет и
файлов заранее не создаёт никто) · глагол tmctl bank-apply --config <book.yaml> --decisions <doc.json> [--dry-run] ($0, идемпотентен побайтово, всё-или-ничего, занятый flock — ровно 12 неблокирующе, ответ
несёт версию и явное depth: edit_wave) · --keys-file у translate (строка 211) · строгость
сид-загрузчика (212) · status_version + artifacts{} с абсолютными путями (213) · дефолт
стендового корпуса маркерным резолвом (218, критерий оркестратора выполнен буквально).
Вся доказательная база, замеры и попунктный чек промта — backend/docs/SEAM_PACK_FINDINGS.md;
здесь только то, что требует ДЕЙСТВИЯ.
⚠ ТРЕБУЕТ РАТИФИКАЦИИ: заведён класс полосы отказов 14 decisions_rejected. Отвергнутый по существу
набор решений ≠ сломанный деплой: platform/internal/ingest/exit.go DeploymentFault относит 10 к
«условию, общему для всех книг хоста», и по 10 набор решений одного пользователя списался бы на
оператора. Старый читатель деградирует безопасно (Refused(14) ⇒ OutcomeRefused). 10 сохранён для
документа, не прочитавшегося КАК документ решений. Гейт тотальности таблицы добавлен.
⛔ ЗАКАЗ ПРИЁМКЕ — единственный незакрытый замер (согласован со сторонним архитектором). Цепь целиком
не гонялась ни разу: стоп красный → bank-apply → резюм → стоп гаснет. Части доказаны порознь, но
мина №1 строки 199 — livelock уровня ЦЕПИ, которого частичные тесты по построению не видят. Снять не
могу, и это проверено: банк-стоп на машине не воспроизводится (contrast_path → отсутствующий
eval/exp16/data/jieba_dict_general_zh.txt, строка 123), а до стопа надо дойти оплаченной черновой
волной. Команда: на КОПИИ книги на exit 3 скормить bank-apply документ на всю карту подписи, затем
translate --verify-bank. ДЕФЕКТ — стоп снова с ТЕМИ ЖЕ поверхностями; не дефект — свежая пачка
≤200 термов реверс-секции (мина №3 строки 199). До этого прогона вердикт по циклу — PLAUSIBLE.
⛔ ПИНГИ ЗОНАМ И СЛЕДУЮЩИМ ПАКАМ:
rubyToCandidatesмёртв в проде — единственный вызов из теста (memseed_test.go:204);seeding.go:36-38строитmanualSrcsи никуда не передаёт (Go молчит: запись в map = использование). СтрокSource:"ruby"в банке не возникает, а платформа держит для них ветку словаря (ingest/bank.gotermOrigin→OriginAnnotated).- Платформенному паку: первый контакт с непере-мигрированной книгой даёт exit 13 — воркер решений
обязан планировать
13 → migrate → повтор· проекция берёт тот же лок, поэтому правка термина при живом прогоне даёт 12 даже на превью, на всю длину прогона · таймаут: 1.6с на 5 000 термов банка, 9.1с на 20 000, бюджет платформы на вызов движка — 60с (runs/reconcile.go:280) ·bank-applyсоздаёт<project_db>.lockпри первом касании никогда не запускавшегося проекта. - ⚠ БАТАРЕЯ НЕ ДЕТЕРМИНИРОВАННО ЗЕЛЕНА, и это НЕ пак — прочесть ДО пере-рана. Два
пред-существующих
-race-флейка вinternal/storeсрабатывают примерно раз на 2–4 полных прогона (go test ./... -race -count=1×4 → 1 чист, 2-й красный). Красное именно в этих двух тестах ожидаемо; любое другое красное — регрессия. Тесты НЕ трогал (D39.121).TestTheSeamIsNotChargedToTheStoreOperationBudget,TestKillMinus9LosesAtMostOneCall. Чередующийся A/B наgit worktreeHEAD: оба падают на HEAD не реже (kill92/30 против 0/30;seam2/30 против 1/30; без-race0/30). Покрытие:LockProject/Releaseэтими тестами не исполняются вовсе. ⚠ 0/30 против 2/30 НЕ значит «пак улучшает» — на таком числе это шум (Фишер p≈0.5); достаточно того, что флейк живёт на дереве, которого пак не касался. - Гейт
TestDispatchCommandsCoversTheSwitchслеп кcaseс константой (считает только*ast.BasicLit) — команда, объявленная константой, невидима гейту, чей смысл в дефекте строки 176. Я вернулся к литералу (конвенция файла), дыра не эксплуатируется. redrive— платный путь без канала ключей аргументом. Промт: «флаг только уtranslate», сделано ровно так; канал у него есть (конвенционный.env), платформа его не зовёт. Развилка следующему паку.- Однострочник при лендинге (не блокер): документ решений читается неограниченным
os.ReadFile, тогда как платформа свои чтения от движка капает. Документ на 10 000 решений ≈2МБ ⇒ кап 1–16МБ.
⚠ ПРАВИЛА, ВЫНЕСЕННЫЕ ИНЦИДЕНТАМИ — для следующих сессий, не про этот пак. Прогон харнесса мутаций
был убит таймаутом, finally не отработал, и посадка просидела в дереве ~40 минут, выглядя
продакшн-кодом; сторонний ревьюер снял с него замеры и доложил несуществующий дефект. Поймал посадку
собственный пин пака. Отсюда три правила: харнесс мутаций обязан фингерпринтить цели (починено) ·
снимай отпечаток дерева перед сборкой бинаря замера (на этом наступили обе стороны) · одиночный
прогон — не замер (атрибуцию флейков я дважды вывел неверно из одиночных прогонов).
Что НЕ доказано: рантайм-вердикт по платному пути — PLAUSIBLE. Доказано, что ключ из
--keys-file доезжает до заголовка и что без флага прогон отказывает конфигом; не доказано, что
реальный провайдер примет ключ и что SaaS положит файл по этому пути — платформенная половина строки
211, чужая зона. Живой translate не гонялся: санкции на платные вызовы у пака нет. (24.08)
⛔ ПИНГ ОРКЕСТРАТОРА №19 — 23.08, ЗОНЕ БЭКЕНДА. Четыре движковых дефекта, все сверены моими командами.
-
ОТВЕТ НА ПИНГ ПОЛИГОНА: дефект ПОДТВЕРЖДЁН, он ваш. Эскалация на 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 и починил у себя по вендор-доке; их находка верна. -
Род не производится авто-путём вовсе (строка 210, дополнена 23.08): замка ДВА и они независимы, а поле
Genderв схеме сида УЖЕ есть — ось мертва в ПИСАТЕЛЯХ, не в формате. -
Выпавший член юнита исчезает из отгружаемых байт БЕЗ внутритекстового маркера —
pipeline/waverun.go:487-490=the flagged member is DROPPED from the edit. Родня строки 193; для читателя это молчаливая дыра в тексте. -
Загрузчик сида НЕстрогий (строка 212): голый разбор YAML без проверки имён ключей, и
seed-lintэтого не видит. Опечатка в имени поля молча теряется — в файлах, которые владелец правит руками чаще всего.
⚠ Плюс строки 211 (движок на SaaS не получает провайдерских ключей — блокер живого прогона) и 213 (платформа дублирует вашу конвенцию пути): обе половинные, движковая часть ваша.
⛔ ПИНГ ОРКЕСТРАТОРА №20 — 22.08, ЗОНЕ БЭКЕНДА: три ваших дока разошлись с деревом (аудит доков, сверено кодом; рукой не лезу — ваша зона).
backend/README.md, карта пакетов объявлена сверенной по коду, а в ней НЕТinternal/runevents— эмиттера журнала прогона, то есть ВСЕГО шва движок↔платформа (D39.131), — и нет второго бинаряcmd/tmvet. Греп:runeventsиtmvetв файле по нулю вхождений, при том что оба каталога в дереве.backend/README.md, «Известный техдолг» держит живыми Cyrillic-хардкоды DC-чекеров, которые сам код называет ПОГАШЕННЫМ долгом (фаза 2 общности, D39.64:isRuTargetудалён,TargetActive/TargetScriptNonLatin), и оба егоfile:line-якоря указывают мимо.- (дописано 24.08)
backend/README.md:47=/home/ubuntu/books/gu-zhenren/зовёт книгу-стенд по МЁРТВОМУ пути/home/ubuntu/books/gu-zhenren/— каталога нет ни там, ни в$HOME: книги переехали в<репозиторий>/booksи версионируются своим git (D39.157 п.2). Там же фраза «тексты и производные ВНЕ git» стала неточной: вне ЭТОГО git. Тем же касанием — три тест-хелпера, резолвящие корпус от$HOME/books(строка 218); они уже в заказе движкового пака шва §4.6, так что дублировать правку не надо, но док обязан сойтись с ними. backend/docs/components.puml— диаграмма, которую карта доков продаёт как правимую «одним коммитом с кодом», отстала примерно на месяц: старый exit-контракт (без 4/5 и полосы 10–19), неполный список глаголов CLI, удалённый паком-17failover.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.)
(Закрытые бэкенд-записи 01–02.08 — общность фаза 2 · качество банка (оба этапа) · фикс-пак банка · finding-1 · пакет-чекеров · мелкая пачка · coldrun-b · ручка эффорта — в archive/PROGRESS-2026-08-01-02.md.)
(Закрытые бэкенд-записи 14–15.08 — эмиттер шва (D39.131) · tmctl migrate (D39.134) · пере-пин цен DeepSeek (D39.137) — в archive/PROGRESS-2026-08-14-15.md; вынесено D39.139.)
(Закрытая хроника пакетов №0–№4 (04–10.07) перенесена в archive/PROGRESS-2026-07-04-10.md — ревизия D31.)
(Хроника пакетов 11–12.07 (пакет-5, D15.2-этап-А, санитайзер-фикс D33) — в archive/PROGRESS-2026-07-10-13.md.) (Трек-A пак-1/1.5 (D39.2/D39.5) — см. записи оркестратора №6 выше.)
(Хроника бэкенд-паков 11–16 (19–25.07, вкл. отчёт-запись пака-15) — в archive/PROGRESS-2026-07-13-25.md; отчёты паков — archive/reports/.)
(Закрытые записи 25–31.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»). Это опровергнуто пере-пином 13–15.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=cached_per_m и телом D39.137 §2а), и счёт шиппинга = 100% DeepSeek ⇒ ×4.2–4.4 в пике. Квирки — ваша зона, рукой не трогаю; поправьте при ближайшем касании, потому что по ним считают деньги проб. ⚠ И ВТОРОЙ факт тем же касанием, он сейчас БЕЗДОМНЫЙ: у DeepSeek цена ходит окнами — пики UTC 01–04 и 06–10 вдвое дороже долин, платное планировать в долины. Факт куплен замером и жил в справочнике ролевого промта; я оттуда его убирал как вендор-специфику, а в квирках его НЕТ (греп по peak|долин|пики UTC = 0), то есть указатель вёл в дом, который факта не несёт. До вашего переноса держу копию в ролевом промте с явной пометкой. ⚠ Третья, и она самая дорогая по цене ошибки: 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 НЕТ (low→high), так говорит квирк-канон», а 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.)