textmachine/docs/PROGRESS.md

264 KiB
Raw Blame History

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

⟶ ТЕКУЩЕЕ СОСТОЯНИЕ (на 2026-09-16, голова D39.259 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). ОЧЕРЕДЬ №23 (единственный носитель — здесь; роль передана 06.09, №22 закрыт нотой передачи D39.217; ⚠ испр. 06.09: коммит передачи c992ee5 бампнул голову и НЕ тронул номер — гейта на номер очереди нет вовсе, counts.py сверяет только голову, поэтому носитель разошёлся молча). ⚠ ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ИСПОЛНЕН, испр. 08.09 (висел как «первым» неделю после исполнения): (0а) ревизия документации на протухшее ОТРАБОТАНА 01.09 воркфлоу docs-staleness-revision-A (15 срезов), провенанс находок — D39.185; (0б) планы доработок в бэкенд и платформу — исполняются ПАКАМИ, за 0708.09 закрыты два движковых (D39.225, D39.226); (0в) вынос неактуального в архив идёт батчами DOC_CLEANUP_PLAN.md (Б14/Б15/Б17 живы). ⇒ строка ниже — не заказ, а история: (0а) ревизия документации на ПРОТУХШЕЕ — по всем зонам; (0б) планы доработок в БЭКЕНД и ПЛАТФОРМУ; (0в) вынос неактуального в АРХИВ (docs/archive/, platform/docs/archive/) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): 98 живых дока в docs/ (пере-счёт 17.09 после выноса каталога консилиума; прежние 97 разошлись с фактом 144 и это заметил ревизор, а не гейт) (пере-счёт 04.09: find docs -name '*.md' -not -path 'docs/archive/*' | wc -l), 8 в platform/docs, 12 в backend/docs, 7 в frontend/docs (испр. 17.09: стояло 9) — ⚠ ⚠ испр. 11.09: из 97 ВРЕМЕННЫХ три (DOC_CLEANUP_PLAN, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в archive/reports/ 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 110 (major 1) (major 1), всего рядов 468 (пере-счёт python3 docs/scripts/counts.py; с 04.09 оба числа под гардом --check, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды 154 и 157 переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков counts.py НЕ сторожит — при переносе файлов пере-считывать руками командой find docs -name '*.md' -not -path 'docs/archive/*' | wc -l. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря 15-money-path.md в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ ОЧЕРЕДЬ, унаследованная от №21 (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): (1) РАЗРЫВ ЦИКЛА ЗАМКНУТ ЖИВЬЁМ 04.09 — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, epubcheck 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга bk_SS5VES2JELESJSTR, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: 202+Location, поллинг с Retry-After, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · 409 run_not_resumable/ceiling_reached и лечение новым прогоном). ПЯТЬ ПОТОКОВ РАБОТЫ — состояние на 07.09 (пере-снято лендингами смены №23). (1) ПОЛИГОН — «ремонт прибора» (docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md, строки 319 · 300 · 265 · 143): ⚠ ЕДИНСТВЕННЫЙ ПОТОК, НЕ СДВИНУВШИЙСЯ ЗА СМЕНУ — сессия по промту так и не стартовала. Блокирующая линза слепого чтения меряет верность ЧЕРНОВИКУ, а судимой руке предписано отходить от него по исходнику (D39.215 п.3) ⇒ фаза Д ПРИОСТАНОВЛЕНА до его лендинга: иначе покупаем числа, которые ничего не значат. (2) БЭКЕНД — «закон банка честно»: ЗАЛЕНДЕН 07.09, акт D39.222 (5092ae3 + 0ae9e8a + bc03fc0). Строки 267 и 318 закрыты, у 320 исполнена половина (а). Шесть кругов самопроверки, 43 находки в собственной работе. Живой остаток зоны — строки 333339 (шов-близнец и пять описаний, лгущих оператору) и 320(б). (3) ПЛАТФОРМА — «деньги и правда»: ЗАЛЕНДЕНА 07.09, акт D39.221, контрактный минор 0.13.0 (fda0679 + 3d90943). Строки 285 · 305 · 325 закрыты. ⚠ Синхронный разрез приёма принят ПОСТРОЕННЫМ, НО НЕ ГОТОВЫМ — сработало правило остановки (9 major из 11 в одном механизме), десять пунктов несёт строка 332; ложный инвариант бюджета заландён осознанно (окно лжи 8 секунд при дефолте в 16 минутах, ломается идемпотентность). (26) ДВА ПАКА 16.09 ПРИНЯТЫ, БАНК ПЕРЕЕЗЖАЕТ В КНИГУ-ПРОДОЛЖЕНИЕ — акты D39.253D39.257. D39.253 — консилиум банка памяти закрыт, итог research/35-bank-memory-consilium.md; D39.254 — пять решений владельца по нему. D39.255 — движковый пак «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО» принят (29 путей, $0): три опубликованных ключа качества уехали смыслом (ProcessedUnits, черновиковый и эдит-числитель эха), и пере-классификация cancelled меняет счёт слотов на книгах, которые УЖЕ в поле — оба названы остатком, не умолчаны. D39.257 — пак «БАНК ЗА $0» принят: громкий отказ, когда цель есть, а инъекционных текстов нет, — ДО первой траты; отказ роли перестал ехать в банк законом и разведён с мусором; два предиката «спорный» построены без платного потребителя. Судилось ПЯТЬЮ приборами (батарея 24/24, мой собственный мутационный прогон, три оси аудита вне сдачи, пере-снятие чужих чисел, денежная ось: 0 платных путей при контроле 192 прочитанных файла). D39.256 — решение владельца: банк переезжает в КНИГУ-ПРОДОЛЖЕНИЕ ПОДПИСАННЫМ ПЛЮС РЕШЁННЫМ ДВИЖКОМ, стройка двухзонная — ряд 461. ⚠ Две эрраты того же дня, обе к моим собственным утверждениям: 16.09-а — число «48 конфигов книг» я взял из чужого отчёта, не пере-мерив (верно 24), и каталожный прогон закрыт числом 267/267; 16.09-б — ноты D39.256 и D39.257 утверждают ПРИЧИНУ, которой замер не давал («причина смен передачи — якорь»), измерено лишь отсутствие новой улики во ВХОДЕ ⇒ причина остаётся ГИПОТЕЗОЙ, гейченной рядом 466. Ряды: закрыты 291 · 379 · 441 · 460; заведены 457468; 445 сужен наполовину. (25) ПЛАТФОРМЕННЫЙ ПАК «ОТВЕТ ДВЕРИ НЕ ЗАВИСИТ НИ ОТ ПОРЯДКА, НИ ОТ ВЕЗЕНИЯ» ПРИНЯТ С ДВУМЯ ДОФИКСАМИ, акт D39.250, контрактный минор 0.15.0 (27 путей, 24 новых теста, $0). Предмет ПЕРЕ-ОПРЕДЕЛЁН замером зоны ДО первой правки: не редкая гонка под нагрузкой, а ОРДИНАРНЫЙ путь — любой резюм живого прогона отвечает 409 детерминированно. Оба денежных предохранителя оказались проверены не тем прибором (гард судил шаблон, а проба рендерит свой $0-пайплайн строкой выше; рецепт проверен текстовым сканом вместо загрузчика — EXIT=10), и ответ лежал в дереве комментарием того же хелпера. Лечение — СНОС рецепта, а не починка: П-22 и П-23 схлопнулись, мина стережётся по умолчанию. Закрыты PD-448 · PD-466 · PD-162 · PD-139 · П-22 · П-23; живое — эскроу П-18 и одно названное слепое пятно (24) БЭКЕНД-ПАК «КОНСИСТЕНТНОСТЬ, КОТОРУЮ МОЖНО ПРЕДЪЯВИТЬ» ПРИНЯТ С ДОФИКСОМ, акт D39.249 (26 путей, $0). Приоритет №1 владельца впервые ИЗМЕРИМ по тексту, который читает человек: два инварианта по ОТГРУЖЕННОМУ тексту с печатаемыми знаменателями, секция BOOK CONSISTENCY в отчёте сборки. Первый круг приёмки дал ШЕСТЬ выживших посадок из шести — худшая оставляла прибор без провода к прогону. Порядок колонок ратифицирован и отменён в тот же день; правило и два триггера пере-открытия — ряд 406. Каталог 169/169 RED, выживших 0 (прогон оркестратора: зону убивал потолок cgroup, 26 убийств CONSTRAINT_MEMCG). Ряды: закрыты 406 · 418; наполовину 407 · 417 · 419; не закрыт 408 (мотив опровергнут замером). Новые — 425427 · 428 · 431 · 432 (23) РЕШЕНИЯ ВЛАДЕЛЬЦА 11.09 РАТИФИЦИРОВАНЫ, акт D39.248. Голос ВХОДИТ в приоритет №1 (проектирует Fable 5, исполняет опус — пак обязан нести пункт «обсудить с Fable») · потолок 12 агента Fable на сессию, прежняя «рекомендация» ОТОЗВАНА · автономия смены с мерилом «ценности продукта → архитектура → необходимый рефакторинг → без велосипедов» · полигон выведен из скоупа целиком, четыре его промта в archive/prompts/ с баннерами. Рабочий скоуп — платформа и бэкенд. Прежде решения жили в рабочей записке, которая удаляется при исполнении плана. (22) ХОЛОДНЫЙ ПРОГОН A ПРИНЯТ БЕЗ СХОДИМОСТИ, акт D39.247. Строка 16 закрыта замером: книга доведена от интейка до ФАЙЛА, прочитанного человеком, за $0.419424. Четверть денег купила пустоту (25.4 %; из них ноль знаков — 22.6 %) · пин цены flash протух на 13 % · консистентность впервые замерена по тексту читателя. Ряды 413417, 419. (21) ПЛАТФОРМЕННЫЙ ПАК «ПРАВДА У ДВЕРИ» ПРИНЯТ С ДОФИКСОМ, акт D39.246, контрактный минор 0.14.0. PD-455 закрыт через точку роста Blocked.code; PD-162 наполовину у ОБЕИХ денежных дверей; PD-448 разобран и НЕ построен — его четвёртый путь строит следующий пак зоны. Приёмка нашла два дефекта вне карты автора: выживший мутант на единственной проводке BooksDir и тихо-зелёное в самом новом гейте. (20) ДИЗАЙН-ПАК «СТРУКТУРА ГЛАВ» ПРИНЯТ БЕЗ СХОДИМОСТИ, акт D39.245. Глава становится ИДЕНТИЧНОСТЬЮ; backend/docs/CHAPTER_STRUCTURE_DESIGN.md — статус ПРЕДЛОЖЕНИЕ до пака стройки. Предметная часть устояла в четырёх кругах, механика исполнения — нет. Пять вопросов владельцу с ценой каждого варианта — в NEAR_TERM_PLAN.md. (19) АУДИТ БАНКА ПАМЯТИ ПРОТИВ ПРИОРИТЕТА №1, акт D39.243. Ряды 406412; носитель разбора — research/34. Главное: книжного вопроса о консистентности не задавал ни один прибор — мера построена, но считалась по ЧЕРНОВИКУ до редакторской волны. (18) ДОРАБОТКА ПО ИНВАРИАНТУ D39.240 ПРИНЯТА, акт D39.242. Семь предметов в двух зонах; батарея движка вернулась к входной строке, мутации RED 151 · SURVIVED 0, сверка 373 якорей — протухших 0. Почти всё дорогое нашли САМИ сессии и у себя: выживший мутант вскрыл дефект в собственном пине, непримени́вшаяся собственная правка, знаменатель из восьми против моих двух. ⚠ Пять МОИХ ошибок сняты сессиями и названы в акте; куплены четыре нормы о провенансе утверждений и чисел. Бэкендовый слот СВОБОДЕН — следующим идёт дизайн-пак структуры глав (ок владельца получен). (17) ОБЕ СЕССИИ ЗАКРЫТЫ, акт D39.241. Движок откачен полностью — батарея вернулась к входной строке смены (19 ok · 0 FAIL · 4 скипа), пере-снято моим прибором. Платформа сдала --no-block С ПИНОМ — единственное, что владелец взял из отменённого пака; куплен пин на ЧУЖОЕ поведение (systemd), на котором молча держалось утверждение в коде свипа. Откат не смогла выполнить ни одна сессия, включая мою: запрет сработал одинаково, обходить не стала ни одна, дерево снял владелец. Живой журнал похудел на 19 % — закрытая хроника вынесена срезом (7af35da), три её одиноких утверждения получили дом строкой 402. (16) ПАК «ДВЕ ОСТАНОВКИ» ОТМЕНЁН ВЛАДЕЛЬЦЕМ до лендинга — акт D39.240. Причина — размах (18 файлов движка), не риск: работа была почти целиком добавочной (+633/84, 61 удалённая не-тестовая строка, сборка чистая). Предмет заменён и сужен: остановка остаётся ЖЁСТКОЙ, деньги терять ДОПУСТИМО, но она обязана быть КОРРЕКТНОЙ — без гонок, без половинчатых состояний, с верным возобновлением. Обе сессии откатывают свои зоны; знание снято с них ДО отката. Пак оставил после себя пять нот (D39.236D39.240) и две строки (384, 385). (15) ДВА SIGTERM ПОДРЯД GO-ПРОЦЕСС ВИДИТ КАК ОДИН — акт D39.238, замерено дважды независимо (gap 0 → 0 из 20, gap 1 мс → 20 из 20, контроль 5 из 5). Ратифицированная форма двух остановок стояла на посылке «послать два = получить два», которой нет: «останови сейчас» первым нажатием давало бы МЯГКУЮ остановку молча, а пере-выпуск жёсткого сигнала свипом — третий SIGTERM, то есть смерть без кадра и сеттла. Форма остаётся, добавлен контракт: сигналы упорядочены НАБЛЮДЕНИЕМ, факт доставки долговечен. Первая серия замера была неверна ПРИБОРОМ и дала противоположный ответ — сессия починила прибор и назвала это сама. (14) ОБЕ СЕССИИ ПАКА «ДВЕ ОСТАНОВКИ» ПРИНЯЛИ РАБОТУ И ОТВЕТИЛИ ЭХО-ПРОТОКОЛОМ; шесть возражений, шесть приняты — акт D39.236. Три из них — ошибки В МОИХ ПАКАХ (счётчик оценки копился бы с нуля и пин равенства был бы вакуумен · «опора готова» для строки оператору · неверный механизм следствия у блокирующего stop), одно — правило версий, которое я нарушил бы молча. Все шесть пришли ПОСЛЕ двух кругов ревью: эхо-протокол оказался третьим рубежом, а не формальностью входа. (13) ДВА ПАРНЫХ ПРОМТА «ДВЕ ОСТАНОВКИ» ВЫДАНЫ, акт D39.235 — движковый и платформенный, порознь не лендятся. Форма кадра остановки ЗАФИКСИРОВАНА нотой ДО старта работ (две зоны, один шов). Эррата к D39.234 п.1б: мой механизм «отказ на гейте» ратифицированных ~20 минут не даёт — резервация держит всю цепочку ретраев. Замером исполнением найдено, что платформенный Stop без --no-block блокируется на весь грейс и сломал бы 202 контракта. Сплошной инвентарь живых доков по слову владельца: 19 мест починено, контракт исправлен минором 0.13.1 (схема требовала отставленный член ⇒ каждый ответ Run был невалиден). (12) СЛОВО ВЛАДЕЛЬЦА ПО ОСТАНОВКАМ ПОЛУЧЕНО И РАТИФИЦИРОВАНО, акт D39.234: первое нажатие — мягкая, второе — жёсткая; ждём одну летящую попытку (~20 мин), не цепочку; пак мягкой остановки и строку 377 делаем ОДНИМ заходом; коды выхода не трогаем. Пак движка ПАРНЫЙ платформенному. Тем же актом сверены носители, которых D39.232 не тронул: закрыты и убраны строки 78 · 331 · 360 · 369; блокеров очереди в трекере теперь 0. Инвентарь живых доков прогнан (94 файла): 15-money-path.md чинен в трёх местах. (11) ДВА СТОПА — СЛОВО ВЛАДЕЛЬЦА НАКОНЕЦ ЗАПИСАНО, акт D39.233. У человека одна кнопка, и она рвёт всё в полёте; мягкий глагол в движке построен, но дёрнуть его может только денежный потолок. Контракт и платформа УЖЕ обещают мягкий стоп, которого нет, а платформенный грейс (600 с) меньше законного ожидания вызова (1240 с). Пометка «это оценка» — условие слова владельца — по шву НЕ едет и потребителя не имеет (строка 382). Замером закрыты строки 374 (вердикт главы остановка уже не портит) и 371. Пак не заказан: ждёт слова владельца по форме (рекомендация — «повтор ужесточает», коды выхода не трогать). (10) ПАК «ВЫЗОВ, КОТОРЫЙ ОБОРВАЛИ МЫ» — ПРИНЯТ И ЗАЛЕНДЕН 10.09, акт D39.232 (3f05fab, 28 путей, $0). Движок перестал платить дважды за одну генерацию. Числа пере-сняты оркестратором: батарея 19 ok · 0 FAIL · 4 скипа; каталог 276 → 360, батарея 65 → 149; тесты +67 / 0; снапшот не двинулся. Приёмка ДО ратификации нашла пять выживших мутаций, все на носителях ВИДИМОСТИ денег — то есть на условии слова владельца. Куплены четыре нормы об измерении и три класса вырожденных пинов. Остатки — строки 375377 (374 закрыта замером, акт D39.233 п.2). (9) ТРАНСПОРТ: КОНСИЛИУМ СОШЁЛСЯ, БИТ ВЛАДЕЛЬЦА ЗАКРЫТ — акт D39.230. Оборванный НАМИ вызов: списывается по оценке с читателя, пометка — УСЛОВИЕ решения; платная проба отклонена (вопрос к вендору осознанно открыт); ожидание до 20 мин разрешено ⇒ дедлайн от бюджета. Попутно вскрыто: наш research/21 §Q6 неверен ДВАЖДЫ и обе половины держали неверный дедлайн полтора месяца (эррата в его шапке); ось эскалации D2 фиктивна (строка 369); нулевая ветвь не пишет чекпойнт ⇒ резюм ПЕРЕКУПАЕТ вызов. ⇒ следующий движковый пак — строка 360, пишется целиком. (8) ПЛАТФОРМЕННЫЙ ПАК «РАЗРЕЗ ПРИЁМА И ПРАВДА О СЕБЕ» — ПРИНЯТ И ЗАЛЕНДЕН 08.09, акт D39.229 (ddcbf0c, 26 путей, $0). Синхронный вход разреза под потолком (x/sync/semaphore, число из jobs.DefaultWorkers); граница хвоста выведена из кода; регистр приведён к правде — открытых 112 → 109, major 3 → 1. Потолок сам назвал, чего НЕ ограничивает: материализатор и рекoнсайлер порождают процессы мимо него — строка 364. Адверсариальный проход: 8 находок, 6 — дефекты этого же пака на ЗЕЛЁНОЙ батарее. (7) ДВИЖКОВЫЙ ПАК «ДВИЖОК УЖЕ ЗНАЕТ» — ПРИНЯТ С ДВУМЯ ДОФИКСАМИ И ЗАЛЕНДЕН 08.09, акт D39.228 (2b6f1f4, 21 путь). Закрыты строки 355 · 357 · 358; у 253 и 312 закрыта только ДВИЖКОВАЯ половина — платформенная жива и ждёт читателя (испр. 08.09 по кросс-модельному ревью ратификаций). Ратифицировано: аддитивное поле манифеста ключ НЕ двигает, но обязано быть отличимо от своего нуля. Третья смена поведения заказана приёмкой — лог и экран перестали спорить о полноте банка. Не взятое получило носители: 362 (ремонт против ремонта, 77 % денег чанка) и 363 (текстовый сайдкар молчит о неполноте). Батарея 19 ok · 0 FAIL · EXIT=0, каталог мутаций 259 → 276, тесты +17 / 0 — все числа пере-сняты оркестратором. (6) ВЫДАНЫ ДВА ПАКА 08.09, акт D39.227, оба $0. Движковый «ДВИЖОК УЖЕ ЗНАЕТ» (BACKEND_ENGINE_KNOWS_SESSION_PROMPT.md: строки 253 · 357 · 358 · 355, попутно 312) и платформенный «РАЗРЕЗ ПРИЁМА И ПРАВДА О СЕБЕ» (PLATFORM_INTAKE_TRUTH_SESSION_PROMPT.md: строка 332, семь пунктов из десяти). Оба прошли опровергателя и разбор Fable 5. Заведена строка 360 — самый дорогой движковый класс (2334 % цены редакторской руки), носителя у него не было; её ДЕНЕЖНАЯ половина ждёт слова владельца (платит ли пользователь за вызов, оборванный нами) и сцеплена со строкой 331. До ответа пак по 360 не пишется. (4) ДИЗАЙН-ПАК 161 — НАПИСАН 07.09 (docs/CHAPTER_STRUCTURE_DESIGN_SESSION_PROMPT.md, 7f84c8d), прошёл оба рубежа. ⚠ НЕ ВЫДАН: новый пак идёт НОВОЙ сессии, обе ночные отработали — запуск за владельцем. (5) ТЕХДОЛГ БЭКЕНДА — разбор research/33 в трекер: ЗАЛЕНДЕН 07.09, акт D39.224. Заведены строки 344350, дописки в 86/114/119/182/224; «переписать» не получил ни один из одиннадцати долгов. Ратифицированы ПОРЯДОК (шаг 0 параллельно дизайну 161 → шаги 2+3 ОДНИМ окном перенарезки, wire-очередь 182 ложится в него же → шаг 4 аддитивно) и ФОРМА запретов (жёсткие — только под ратифицированной базой, прочее — условия с механизмом, чтобы не спорить с дизайн-паком). Пак шага 0 ЗАЛЕНДЕН 07.09, акт D39.225 (две смены поведения названы, вторая денежная: прогон по арму теперь покупает банковый контур). Промт был — docs/BACKEND_GATES_NOT_PROSE_SESSION_PROMPT.md, $0 и снапшот-нейтрально: строки 344 · 345 · 346(а) · 348 · 224, попутно 349/350. Прошёл оба рубежа; вход зоны зелёный (go test ./... -count=1 → 19 ok, 0 FAIL, 4 пакета без тестов). ⚠ Единственная заказанная смена поведения — экспорт банка на стопе, и её форма ЗАДАНА аддитивной: перенос засева в ветку стопа запрещён явно (уводит НЕПОДПИСАННЫЕ строки в глоссарий, а те инъектируются законом ⇒ двигают memory_version). Снапшот-нейтральность требуется доказать байт-равенством снапшотов. ⚠ Пак шага 0 закрыт ТРЕМЯ дофиксами, и каждый нашёл дыру ВНУТРИ предыдущей починки (акт D39.225 п.910): семь полей листа подписи без утверждений → Freq и своп списков → ранжирование и класс пустого рендеринга. Правило остановки применено НА ТРЕТЬЕМ и объявлено сессии заранее; остаток адресован строкой 353 и ждёт первого читателя секции (платформенная половина 224). Оба верификатора дали явный ок на закрытие, каждый пере-посадив свои мутации. (6) ТЕХДОЛГ БЭКЕНДА, ВТОРОЙ ПАК — «ПРАВДА ОПЕРАТОРУ И ДЕНЬГИ»: ЗАЛЕНДЕН 08.09, акт D39.226. Закрыты строки 333338; живое — 354358 и остаток 353. ⚠ Смета движка опровергнута прогоном: tmctl manifest есть НИЖНЯЯ граница ($1.259217 против $0.350075, 64.6 % «купило ничего»), потолок держал машинным гейтом. Три ошибки ЗАКАЗЧИКА названы в акте п.8. Прежде: docs/BACKEND_OPERATOR_TRUTH_SESSION_PROMPT.md, строки 333338: движок говорит оператору не то, что делает, и платит за поверхности, которые банк уже держит. ⚠ Первый пак смены, который тратит ДЕНЬГИ: холодный прогон на нескольких главах разрешён владельцем лично, потолок $3 ставится МАШИННЫМ гейтом движка (ceilings.book_usd + --max-units), а не обещанием сессии. Прошёл оба рубежа, и оба нашли существенное: (1) первая редакция §4.1 заказывала фильтр, который снял бы пометки спора, которые §4.3 того же пака просит довезти владельцу; (2) заказанное доказательство «банк тот же» ВАКУУМНО — предложение на сид-поверхность в банк не попадает и сегодня; (3) удаление кандидатов неизбежно двигает RequestHash батча, и на РЕЗЮМЕ оплаченный чекпойнт перестанет матчиться ⇒ переплата; (4) одно утверждение строки 334 было ложным с момента её заведения — снято и в паке, и в носителе. ЧТО ЖДЁТ СЛОВА ВЛАДЕЛЬЦА, поимённо: строка 340 — сужение входа действует только на синхронной ветви, при деплойном классе книга одним полотном попадает в библиотеку МОЛЧА, и закрыть нечем без пятой причины отказа (source_unreadable терминален и УДАЛЯЕТ исходник) · строка 326 — критерия впуска в дереве нет, консьерж против самообслуживания · обязательный ВТОРОЙ круг селф-ревью (первая половина того же слова подтверждена как РЕКОМЕНДАЦИЯ, D39.220; вторая не подтверждена, улика в её пользу — ниже в этом же листе). ⚠ Зоны параллельны по норме проекта; ограничение — пропускная способность ПРИЁМКИ оркестратора: сериализуй ЛЕНДИНГИ, не старты. ⚠ Зеркало фронта — 0.2.3 против канона 0.13.1 (одиннадцать миноров плюс корректирующий, D39.235 п.6), зона заморожена. ПОЧИНЕНО 05.09 ЛЕНДИНГОМ 616a8e4 (пак «денежный стоп», акт приёмки D39.206; ⚠ испр.: раньше здесь стояла D39.203 — это нота ВЛАДЕЛЬЦА про «сколько добавить», а не акт) — ниже до-паковая археология, читать как историю. Отказ резервации больше не роняет волну: он ЗАЩЁЛКИВАЕТ её (новое не стартует, допущенное дорабатывается), а обязательный вызов ЖДЁТ settle, когда settle может помочь. ⇒ порог «книга короче десяти глав не переводится» СНЯТ; остаточный пол — одна резервация ($0.07 ≈ 3 главы), и он ВЫВЕДЕН, а не замерен (замер — $0.15-прогон пятиглавой книги, передан полигону). ⚠ Разбор эрратой — architecture/15-money-path.md, греп ЭРРАТА 05.09. ⚠ Эта строка сутки стояла непоправленной ПОСЛЕ лендинга и по ней оркестратор предупредил владельца о снятой стене как о действующей — канон, не обновлённый лендингом, врёт громче отсутствующего. НО КНИГУ ЧЕРЕЗ API НЕЛЬЗЯ БЫЛО ДОВЕСТИ ДО КОНЦА — найдено прогоном 04.09 и воспроизведено дважды. Прирост потолка на прогон = chaptersLeft × $0.03 (ставка DefaultPerChapter, занижена ×4.47 — D39.179 п.1), и после первой готовой главы это $0.27, тогда как движок при waves.workers: 4 резервирует под редакторский шаг ~$0.28 ⇒ отказ резервации, прогон встаёт, книга не двигается. Два прогона подряд дали одно и то же: committed не сдвинулся, холд вернулся. ⇒ занижение ставки — не «шкала короче», а СТОП ПРОДУКТА: с какого-то момента каждая следующая покупка не покупает ничего. Лечить придётся согласованно двумя сторонами (ставка платформы + резерв движка под шаг с параллельными воркерами), носитель — ряд регистра зоны, вес major за недостижимость продукта, а не за деньги: сам стоп НЕ ЖЖЁТ ничего — замер платформы 04.09 показал отмену ДО ухода запроса (латентность 2031 мс, model_actual пуст, токенов ноль), и вся книга сходится до микро-доллара по трём источникам (request_log 0.278319 · spend.committed_usd 0.278318752 · платформенный committed 278319 микро). ЗАТО HALT НА ПРОГОНЕ, КОТОРЫЙ ПРОДВИНУЛСЯ, ЖЖЁТ — отдельная находка того же прогона и свежая датированная точка строки 78 («леджер = НИЖНЯЯ граница»). Четыре редакторских вызова ушли параллельно; один дошёл ($0.063404) и своим коммитом сорвал потолок, три других отменены в тот же миг, отработав 120756, 156469 и 156470 мс — и легли в леджер нулём. Незаписанное ≈ $0.050.19 на ОДИН halt против $0.278 за всю книгу, то есть механизм, защищающий от перерасхода, сам создаёт неучтённый расход. ⚠ Списание провайдером НЕ доказано (биллинга у нас нет) — утверждается ровно наблюдаемое: вызовы шли 22.6 минуты, их цены в леджере нет. ⇒ Дыра НЕ в принципе, а в покрытии, и это делает её заказом, а не наблюдением (разбор оркестратора 04.09 по коду): консервативная оценка уже построена и ратифицирована — backend/internal/pipeline/stagerun.go, греп settling the reservation estimate to keep the ceiling honest (pack-13 point-9), — но её условие требует ОТВЕТА провайдера (resp.Usage), а отменённый в полёте вызов ответа не получает и уходит другим путём. Направление лечения: сеттлить оценку при отмене вызова, который успел уйти; различитель — факт ухода (латентность кандидат, порог обязан быть обоснован замером, а не назначен). Половина ДВИЖКОВАЯ. ⚠ Прежняя формулировка пункта — ниже, она о состоянии ДО 04.09. Движок пишет файл с 30.08 (tmctl build — EPUB 3 + чистый txt, D39.175), и холодный прогон 31.08 предъявил это живьём: собранный EPUB настоящего перевода прошёл epubcheck 0/0/0/0 и передан владельцу. ⚠ ЭТОТ АБЗАЦ ЗАКРЫТ 04.09 и оставлен как история: дверь выдачи ПОСТРОЕНА и заленджена (adf5e53, D39.194), смонтировано 18 операций из 21 (три адреса двери: createExport/getExport/downloadExport), долг П-17 зона пере-сняла. Прежняя проверка «grep -rn 'createExport\|getExport' platform/internal/ — пусто» БОЛЬШЕ НЕ ПУСТА и как гейт не работает. Не смонтированы по-прежнему getRun, updateBook, deleteBookupdateBook несёт продуктовое следствие, строка бэклога 274 (имя книги в выданном файле не чинится ничем). Слово «отдаёт результат» ложно по букве ТОЛЬКО платформенной половиной (п.4) · (2) холодный прогон движка ОТРАБОТАЛ 31.08, закрыт РЕШЕНИЕМ ВЛАДЕЛЬЦА «не доводить» (отчёт — archive/reports/COLDRUN_V16_REPORT_2026-08-31.md, числа относятся к 065d8ac). Потрачено $0.436110 из санкции $0.80. ПРЕДЪЯВЛЕНО живьём: объёмный потолок · D39.158 ОБЕИМИ половинами (стоп и не-стоп) · exit 16 · строки 154/198/239/240. ⚠ Причина большой доли редактора НЕ УСТАНОВЛЕНАУСТАНОВЛЕНА пробой полигона 02.09 по четырём осям: РЕДАКТОР ДУМАЕТ, А НЕ ПИШЕТ. Размышление — 77.9% цены редактора без ручки и 45.7% с low; у glm-5 с выключенным thinking — 0.0%. Замер куплен и закончен ($6.17 из $9.50). ⚠ research/30 §2.4 того же полигона повторяет «причина не установлена» — это про ДРУГОЙ вопрос (доля роли в прогоне против доли размышления в цене роли), и различение обязано попасть в ревью-шапку 30. Доля редактора идёт с ДВУМЯ знаменателями: 49.3% от всего прогона ($0.214865 из $0.436110) и 81.3% внутри порции П1 (⚠ ходившее «73%» — фантом, в отчёте его нет ни разу). Следующий шаг — контролируемая проба по ЧЕТЫРЁМ осям (роли осей и три требования, купленные ошибками этого прогона, — §14 отчёта; ось stale НЕДОСТИЖИМА — §10 там же). ⚠ Цена: слово владельца 31.08 — ≈$0.60, потолок $0.80, ДЕСЯТЬ глав ПОЛНОЙ цепью включая редакторскую волну.КЛЮЧИ: гейт снят словом владельца 30.08, разбор двух путей — D39.176 п.6. Живое отсюда: конвенционного .env НЕТ НИ У ОДНОЙ книги корпуса (заполнены только projects/textmachine/backend/.env и .../eval/.env), поэтому прогон движка обязан передавать --keys-file абсолютным путём и только на translate; для п.3 нужен ДРУГОЙ файл — TM_PLATFORM_ENGINE_KEYS_PATH, тоже АБСОЛЮТНЫМ путём (platform/internal/config/config.go, греп must be an absolute path). Лечение операционное и $0 — направить переменную на уже заполненный файл; проверять ПРОГОНОМ, не чтением (гардрейл .env) · (3) живой сквозной прогон через API платформы — форма манифеста, сайдкара банка и карта причин флагов сочинены платформой САМОСТОЯТЕЛЬНО. ⚠ Уточнено 01.09: гейт СНЯТ холодным прогоном, и настоящие артефакты движка теперь ЕСТЬ (каталог books/gu-zhenren/coldrun-v16/), но сверка вышла ТОНКОЙ: на шов реально вышло одно значение flag_reason из пятнадцати (sanitizer_stripped), остальные четырнадцать по-прежнему только чтением кода, а манифест против platform/internal/ingest/manifest.go не сверялся вовсе · (4) дверь выдачи — строго ПОСЛЕ (3) (⚠ слово владельца 30.08: дверь ВСЕГДА строит файл — отказ юзеру не отдаётся, неполная книга уходит с пометкой, т.е. дверь зовёт tmctl build --partial; отказ по умолчанию остаётся операторской ручкой CLI; D29.1(б) «fail-closed» читать как «никогда молча» — честность несут пометки) · (5) проводка --max-units — снятие гейта, а не стройка: механизм в движке стоит (D39.170), живое основание гейта — PD-422 · (6) разморозка фронта — ПОСЛЕ (4): зеркало отстало на ВОСЕМЬ миноров (frontend/docs/api-contract/openapi.yaml0.2.3 против канона 0.10.0, и первый из них — ЛОМАЮЩИЙ 0.3.0), 16 операций против 21; зеркало последний раз двигали 15.08 — ⚠ ходившее «30.08» было взято из текста коммита, а не из git log (испр. 05.09), то есть расхождение старше на две недели; отставание ратифицировано D39.142 п.5 на время фриза и две ручки разъехались, размораживать раньше значит перегенерировать типы дважды. ⚠ ДВА ЗАГЕЙЧЕННЫХ ТРИГГЕРА НАЖАТЫ И НЕ ОТРАБОТАНЫ — строка бэклога 237 (go.work · вендор-сверка эффорта deepseek-v4-pro; реестр 13-tech-debt-anchors.md §Б-108). ⚠ Состояние git — снимать КОМАНДАМИ, не чтением (ветка polygon ушла вперёд, коммит здесь не цитирую): работа полигона лежит на ней и в main НЕ влита, а git status -- eval/ в main-дереве пуст ПО ПОСТРОЕНИЮ и уводит в ложный вывод «работы нет»; ⚠ «развязка git с origin» — арбитр ПЕРЕ-СНЯТ 04.09 и прежний вердикт БОЛЬШЕ НЕ ВЕРЕН: git merge-base --is-ancestor origin/main mainrc 1, git log main..origin/mainafa7700 temp (коммит владельца 04.09, которым он передавал работу зон). Локальная линия ушла вперёд на семнадцать коммитов и содержит ВСЁ содержимое afa7700 — оно снято reset --soft и заленджено раздельными зонными коммитами, — но формально ветки разошлись. Лечение — force-push рукой владельца; не пуллить (его же правило). ⚠ Пункт «развязка git с origin» в листе владельца ниже держится ТОЛЬКО как вопрос про force-push его рукой; утверждением о расхождении дерева он не является — арбитр этой пары именно здесь.

  • Норма приёмки, купленная аудитом D39.167 п.1: акт лендинга, объявивший закрытие строки регистра или бэклога, обязан быть СВЕРЕН СТАТУСОМ в тот же заход — иначе следующий пак собирается ПО РЕГИСТРУ и едет чинить построенное. Машинная половина — строка бэклога 225.
  • ЛЕНТА КОНТРАКТНЫХ МИНОРОВ (что принёс каждый — телом ноты): 0.5.0 — D39.161 · 0.6.0 — D39.162/D39.163 · 0.7.0 — D39.166 · 0.8.0 — D39.169 · 0.9.0 — D39.180 · 0.10.0 — D39.194 (дверь выдачи: downloadExport, failure_code словарём, Export.url относительный; ⚠ читать с эрратой 04.09-в — минор был ратифицирован без своей кодовой половины и сутки жил ложным на проводе). Прожитые дампы приёмок P9/P10 — archive/PROGRESS-2026-08-backend.md и тела нот.
  • ЖИВОЕ: полигон — фаза Д ИДЁТ (заказ 10.08; деньги санкционированы 15.08 напрямую полигону — ⚠ числа потолка в носителях расходятся, фактическую цепь сверить при лендинге петель; ja-книга enkan_no_hate_ja; при ратификации фазы Д в D-ноту: декой-правило + обязательный кросс-семейный опровергатель приёмки — одобрены 10.08; свежие фриз-коммиты полигона в дереве — НЕ трогать) · платформа и контракт — статус в строке выше, здесь НЕ дублируется (один носитель на факт) · фронт ЗАМОРОЖЕН (D39.136 п.2 + D39.147: морозится ДАЛЬШЕ лендинга P7 — слово владельца 17.08; P7 зону НЕ размораживает, S5-промт не выдаётся, разморозка отдельным словом по достижении сквозного пути; перечень первого касания зоны — синк зеркала на ТЕКУЩИЙ канон (отставание и его цена — п.6 очереди выше и строка бэклога 183(б)) + перегенерация типов + моки + гейт утечки конвейера + ФС-1..12 + Ф-63/Ф-28 + фразы В-11 по словарю кодов — не отменён, ждёт разморозки) · закрытые стройки эры — реестром нот architecture/05-decisions-index.md (D39.130137, одна строка на ноту).
  • Открыто на владельце:НОВОЕ 06.09: второй круг селф-ревью — бэкенд-сессия передала слово владельца «после сдачи обязателен селф-ревью, и если он дал исправления — НОВЫЙ круг, проверяющий исполнением и исходный заказ, и закрытие находок предыдущего круга». Первую половину того же слова (комментарии) он подтвердил как РЕКОМЕНДАЦИЮ, про вторую не сказал ничего; в мандате самопроверки CLAUDE.md сегодня описан ОДИН круг. Сессии исполняют добровольно, каноном не стало. УЛИКА В ПОЛЬЗУ ПРАВИЛА, снятая в ту же ночь 07.09: круг 2 бэкенд-сессии опроверг ЕЁ ЖЕ правку круга 1 — свёртка сравнения через NormalizeSourceKey вводила ЛОЖНООТРИЦАНИЕ (замер зоны: ReplaceGlossary(族長 + 族长)rows stored=2, контроль на байт-равном srcUNIQUE constraint failed, то есть UNIQUE стоит на СЫРОМ src и обе строки инжектятся), и мутация «свернуть сравнение» до круга 2 ПЕРЕЖИВАЛА весь пакет. Один круг сдал бы тихо-зелёное. · Развилка строки 291 ЗАКРЫТА владельцем 05.09 — D39.204: отказ резервации на ретрае деградирует во ФЛАГ («пусть флагает просто как-то»); вариант «минимальная покупка ≥ step_max_usd» снят. ⚠ Это оказалось НЕ сменой канона: D2 уже кончается флагом, денежная ветка до него не доходит. · Лестница D25.1 ЗАКРЫТА владельцем 05.09 — D39.205: копия БЕЗ пометки = книга БЕЗ ЕДИНОГО ПРОПУСКА; любой пропуск ⇒ пометка в файле, гранулярность — ЮНИТ (пропущенный кусок главы критичен). Имя файла решено паком 7e2226a (вычисляется при скачивании). ⚠ Прежняя редакция держала это открытым на владельце — по ней он и получил вопрос, который сам уже закрыл · лейбл главы без заголовка (сейчас цифры; словесный шаблон = одна строка reader.txt после ратификации К-3) (⚠ три вопроса пака ЗАКРЫТЫ словом владельца 30.08: экспорт юзеру — всегда строить, см. п.4 очереди · модель пометок подтверждена как построена — надпись о пропуске в файле, отдельный варнинг-слой в интерфейсе НЕ строим, машинный отчёт сборки остаётся внутренним носителем (дрейф) · RTL — снят до появления право-налевой целевой пары) · ⚠ ПЛАТФОРМЕННЫЙ ЛИСТ ЗАКРЫТ СЛОВОМ ВЛАДЕЛЬЦА 30.08 — четыре ответа и их следствия ЦЕЛИКОМ телом D39.176 (квот нет · продажа не в бете · продолжение после пополнения — руками · фразы пользователя делегированы проекту с требованием интернациональности). ⚠ Лист ПУСТ: последний его пункт (PD-421, «держит ли открытый поток сессию живой») СНЯТ замером 30.08 — окно бездействия сессии 14 суток, абсолютный срок 30 (platform/internal/config/config.go:346=defaultSessionIdle), скольжение окна идёт на любом аутентифицированном запросе, а поток теряется лишь после того, как подметён протухший ряд, то есть после ДВУХ НЕДЕЛЬ без единого действия пользователя. ⚠ Часовой интервал в этой теме — периодичность УБОРКИ, а не срок сессии (эррата 30.08-а к D39.176 п.5) · ⚠ Гейт словаря фраз — строка 204 (D39.176 п.4). ⚠ Прежний указатель «строка 148» мёртв — строку удалил a023e39 решением владельца, восстанавливать Приложение А по ней НЕ надо · развязка git с origin (локальная линия ИСТИННА, force-push его рукой; не пуллить) · В-4/Ф-30 (глава без заголовка — движковая половина строка 160) · мини-проба флора 44 (одобрена, промт не выдан; число — после ре-пробы 188) · подпись денежного шага 46 (ратифицирована D39.190 п.4: пере-снапшот батча — единым актом, цена сегодня $0) · схема time-based DeepSeek — рекомендация и её доводы строкой 172(а) · вход ратификации фазы Д: посылка «dspro дешевле glm» в пике ПЕРЕВЁРНУТА (×1.26 дороже, D39.137 п.4) · возражение Sol по проходу tier эксп-23 (довод дословно — слайс archive/PROGRESS-2026-08-10-15.md: Sol судил СВОЁ семейство, что запрещено D13.3; подтвердить или снять — при лендинге петель фазы Д) · фронт-вопросы зонного журнала: В-7 (плотность; держит Ф-54) · В-8 (слово состояния в дереве) · В-9 (языки интерфейса — механизм готов, ПТ-36) · Ф-38 (вкладка «Замечания»). Закрытые пункты листа — в нотах D39.136145, здесь не держатся.
  • Сделано (сводно) — снимок ленты закрытых эр в archive/PROGRESS-2026-08-04-09.md; детали — D-лог и слайсы.
  • КУРС НА 04.09 — ПОРЯДОК РАБОТ, СОБРАННЫЙ ВЕЕРОМ ПО ВСЕМУ БЭКЛОГУ (31 агент, 46 кандидатов, шесть срезов + опровергатели + критик полноты). ⚠ Главный результат метода, а не списка: из 46 кандидатов бэклога опровержение пережили ДВА — остальное трекерная инерция; а то, чего в трекере не было ВОВСЕ, оказалось тяжелее всего, что в нём есть (строки 269275, заведены этим же заходом). Порядок: (1) ЭКСПЛУАТАЦИЯ — ЗАКРЫТА ЛЕНДИНГОМ 05.09 (7e2226a + 3e84716, акт D39.201): бэкапы с ПРЕДЪЯВЛЕННЫМ восстановлением, дверь для не-браузерного клиента, имя книги. Строки 269 · 270 · 274 закрыты и сняты из таблицы; ниже — история заказа. Строка 269 бэкапов нет ни у оплаченной работы, ни у денежного реестра — ЕДИНСТВЕННАЯ находка дня без частичного исхода: одна потеря диска необратима и недоказуема · строка 270 у продукта НОЛЬ дверей: bearerToken объявлен и не выдаётся, живой цикл 04.09 прошёл через dev-вход, который прод отказывается запускать, фронт заморожен · строка 274 имя книги в выданном файле исходноязычное и не чинится ничем (дёшево, а ломается первое, что видит человек). (2) ДЕНЬГИ И ЕДИНИЦА ЗАКАЗА — РЕШЕНО 04.09 во ВТОРОЙ редакции, строки 276283: заказ это ОБЪЁМ, объём меряется ЗНАКАМИ ИСХОДНИКА ПО ЮНИТУ (движок публикует в манифесте), «страница» — их отображение и её размер это ДАННЫЕ ЛОКАЛИ; вердикт ДО клика, сумму человек не выбирает. ⚠ Первая редакция мерила ГЛАВАМИ и пала: глава надёжна в одном случае из трёх, дыру нашёл владелец. ⚠ Тем же вопросом вскрыта ВТОРАЯ ненадёжная единица — character_count считает байты файла (для EPUB — zip) и подписан у пользователя «Знаков», строка 282. ⚠ ФОРМА ЗАКРЫТА РЕШЕНИЕМ ВЛАДЕЛЬЦА 05.09 (D39.196): баланс — ДЕНЬГАМИ и виден, ползунок потолка — деньгами, второй ползунок объёмом (главы если распозналось, знаки если нет), старт = холд. Запрет «денег в UI» ОТОЗВАН владельцем; ждать от него больше нечего. Разбор трёх независимых чтений в architecture/15-money-path.md §«ОТКРЫТАЯ РАЗВИЛКА 04.09»; PD-440/PD-441. Смена единицы — амендмент D39.84, объявленный требующим отдельного слова ещё при вписании глав (D39.110 п.2а, «добор оркестратора»); сам владелец 28.08 назвал нынешнюю ручку «денежной ручкой с подписью главы» (D39.165 §1). ⚠ Смена единицы БЕЗ «сказать, когда кончилось» ухудшает продукт: стена перестаёт быть свойством книги и становится свойством ввода, то есть встречается ПЕРВЫМ действием, а не в конце. (3) ДЫРА ЧЕРЕЗ ПОЛЬЗОВАТЕЛЬСКУЮ ДВЕРЬ — ЗАКРЫТА ЛЕНДИНГОМ 05.09 (81a89e9, акт D39.206): граница internal/membank/wirefence.go, три точки исполнения, инвариант снова выполняется КОНСТРУКЦИЕЙ. Строка 271 закрыта и снята; ниже — история заказа. Строка 271: правки банка едут в system-сообщение дословно, а ратифицированный инвариант «untrusted DATA, никогда инструкции… выполняется КОНСТРУКЦИЕЙ» конструкцией больше не выполняется. Дёшево, и обязано быть закрыто ДО первого внешнего пользователя. (4) КАЧЕСТВО — ЦЕЛЬ №1. ⚠ ФОРМУЛИРОВКА «НЕ МОЖЕТ СТАРТОВАТЬ» БЫЛА НЕВЕРНА И СНЯТА ВЛАДЕЛЬЦЕМ (D39.198 п.5, испр. 05.09): из четырёх названных гейтов (24 · 13а · 55 · 149) ТРИ сняты его словом, четвёртый гейтом не был. Живое здесь другое и оно в строке 275: приоритет назван — (1) 100% консистентность · (2) отсутствие выдумок · (3) художественность, и он говорит не о весах рубрики, а о том, ЧЕЙ ОТКАЗ ОСТАНАВЛИВАЕТ ВЫПУСК. Классы дефектов привязываются к УЗЛАМ (банк · редактор · черновик), а не сливаются в одно взвешенное число: оно не диагностирует. ⚠ Дорогое расхождение здесь остаётся, но НЕ то: приоритет №1 сегодня кодом НЕ исполняется — доки держат порог 98%, glossary_miss отгружается флагом ранга 5, а приоритет №2 носителя не имеет вовсе (строка 286). (5) ВТОРАЯ ПАРА ЛОМАЕТСЯ МОЛЧА — после (1)(4), пока пара одна, цена ошибки нулевая. Строка 272 шаблон книги один на все пары и раздаёт КАЖДОЙ книге transcription: palladius · строка 273 пар-шов асимметричен: нет промптов — падает громко, нет целевых ДАННЫХ — выключается молча ВМЕСТЕ С БАНКОМ, то есть книга переводится целиком за полные деньги без механизма консистентности · строки 258/259 через раннер нет ни одной фикстуры с не-ru целью, латинописьменной цели в репо нет вовсе. ⚠ Что веер НЕ менял: горизонт (ДОБОР ИДЕАЛА → вторая пара → МАСШТАБ → пилот → ридер-IDE) остаётся тем же; переставлен ПОРЯДОК ВХОДА в него, и вход теперь эксплуатационный, а не качественный — потому что пускать пользователя некуда и нечем страховать.
  • Курс: этапы ОБЩНОСТЬ · КАЧЕСТВО БАНКА · ПАКЕТ-ЧЕКЕРОВ · ФРОНТ-ЭРА · шов/платформа/движковые блокеры — ПРОЙДЕНЫ (D39.59123). Хвосты курса живут строками: 16 (полная цена холодного старта; edit-волна на малых прогонах отработала и оплачена — 58 вызовов волновым драйвером 2325.07 плюс 648 до драйвера, счёт по леджерам ~/books/gu-zhenren/**/*.db) · coldrun-b фаза C заморожена чекпойнтом легитимно (D39.86; эталон денег/поведения — coldrun-a, read-only); развилка 0731 решена и исполнена (D39.87/91, код 553f1a3).
  • Горизонт (D39.62/67, освежён D39.95): ДОБОР ИДЕАЛА (первым прогоном: оси голоса 24 · авто-режим · цена 16; остаток арбитража банка = рецензент спорных кластеров при ре-пробе — D39.102). ⚠ Испр. 05.09 (D39.198 п.5): прежняя редакция держала здесь ТРИ предусловия, снятых владельцем, — жильцы ролей (149: разморозка ничего не разблокирует, пока идут доработки) · веса K1K12 (13а: веса не нужны, мерить по узлам) · вне-претрейн чекпоинт (55: прогоняем на тех же текстах, оговорка — ограничение ВЫВОДА, а не требование новой книги) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 6268, 85) → Ф3 ридер-IDE (6971). Стоячие: ToS-триггер 25.10 · Ш-2 до go1.27 (⚠ + x/text Unicode 17 тем же тулчейном — строка 119, реестр §Б-108 справочника якорей) · платные прогоны разблокированы (проба провода — D39.97, конфиги 112 залендены).
  • Стек (полная карта роль→модель→конфиг→квирки — STACK.md, D39.126): draft deepseek-v4-flash thinking-ON low ⚠0731 → терминолог (та же модель) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (топология ПОДТВЕРЖДЕНА при неразличимости жильцов — D39.117; закон-блок ОБЯЗАТЕЛЕН и ВНЕСЁН — D39.104 п.2, вайр-батч принят D39.199; glm-5 резерв; вахта маппинга эффорта pro — §Б-108) → судья gemini (Ф2, в движке НЕ построен — строка 33); канал B Mistral+grok; ~$0.85/ранобэ (D30.4) — ⚠ ТРИГГЕР ПЕРЕ-КАЛИБРОВКИ СРАБОТАЛ 31.08 (испр. 02.09): платный прогон отработал и дал собственную оценку движка projected_book_usd = 1.1377277707 на десяти главах при куплённых $0.436110; число D30.4 держать как июльское. ⚠ Вендор-факты 1315.08 (пере-пин ИСПОЛНЕН и ПРИНЯТ, D39.137): таблица цен запинена ПИКОМ (flash 0.44/1.32 · pro 1.32/3.96/кэш-хит 0.044 за 1M; счёт шиппинг-c1 = 100% DeepSeek ⇒ ×4.24.4 в пике / ×2.12.2 в долине — замер по трём прогонам); ⚠ испр. 05.09: носители про эффорт pro БОЛЬШЕ НЕ ПРОТИВОРЕЧАТ — и квирки (§3г), и STACK.md говорят одно: ручка ДОХОДИТ до модели с вендор-апдейта 13.08. Живой остаток один — вендор-сверка маппинга и ВЕЛИЧИНА эффекта, строка 237(б); ⚠ ВЕСА pro сменились под тем же слагом (V4-Pro-0813, класс D39.61) — вахта-риг готов (остаток 172); покупки фазы Д на deepseek до 16.08 16:00 UTC — по старым ценам. ⚠ ВЕСЬ банковый контур (банкнота+терминолог+классификатор) ВКЛЮЧЁН в shipping-c1 с b8154cdenabled: true у обоих гейтов и classify_types: true, бюджеты по $1.00 (прежде жил только ран-локальным конфигом книги; строка 140 — его единственный вход mining.contrast_path в git ОТСУТСТВУЕТ, развёртывание обязано положить артефакт, иначе контур не исполняется вовсе, носитель — строка 251; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping за budget_usd: 0 (STACK.md §примечания).
  • ЕДИНЫЙ БЭКЛОГ — отдельный файл BACKLOG.md (одна таблица, единственный трекер проекта, ID строк прежние; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). ⚠ Счёт очереди — бюллетень в ШАПКЕ ТОГО ФАЙЛА, здесь копии НЕТ (python3 docs/scripts/counts.py; переезд 06.09 — D39.218).
  • Архивы хроники: archive/PROGRESS-2026-07-04-10.md (D31) · -10-13 (D39.6-гигиена) · -13-25 (стройка паков 1116, rerun2) · -25-31 (паки 1720 · мини-прогон · полигон-пакеты 58 · ToS · холодный прогон; D39.2658) · -08-01-02 (сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.5990, срез D39.105) · -08-02-04 (сессии №11№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91105 + снимок шапки эры №15) · -08-04-09 (пинги закрытых паков эры №15) · -08-14-15 (закрытые бэкенд-записи №1617: эмиттер шва · migrate · пере-пин DeepSeek; вынесено D39.139). Записи ниже — живой хвост (№16+, эра D39.124+; подрезка D39.139).

📌 СОСТОЯНИЕ ПАКОВ

Залендены и ратифицированы, приёмочные дампы — телами нот: платформенный P11 — D39.169 · движковый пак «деньги» — D39.170 · платформенный P12 — D39.180 (вместе с контрактным минором 0.9.0; PD-425 закрыт им же) · бэкенд-пак «деньги и честность выдачи» — D39.182 (тестов 1045→1083, удалённых ноль) · закон раскрытия движка — D39.181, ратифицирован владельцем и применён к одиннадцати экземплярам.

ПАКИ 05.09 ОТРАБОТАНЫ И ПРИНЯТЫ ОБА С ДОФИКСОМ, промты в archive/prompts/ с баннерами исхода, зоны свободны: движковый «денежный стоп» — 81a89e9 + 616a8e4, акт D39.206 (18 находок приёмки, 6 снято, 12 устояло, 4 major — все четыре оказались УТВЕРЖДЕНИЯМИ, а не поведением); платформенный «пустить внутрь можно» — 7e2226a + 3e84716, акт D39.201 (20 находок, 5 снято, 15 устояло, 5 major — ТРИ в самом механизме бэкапа). Ниже — история паков 04.09. ПАКИ 04.09 ОТРАБОТАНЫ И ПРИНЯТЫ ОБА (испр. 05.09). Платформенный «закрыть цикл» — adf5e53, D39.194, контрактный минор 0.10.0 тем же актом (⚠ эррата 04.09-в: минор ратифицирован БЕЗ своей кодовой половины и сутки жил ложным на проводе; починено 7e204db). Движковый вайр-батч — приёмочный коммит 74ffe4f, D39.199, принят С ДОФИКСОМ; строки заказа 210·113·46·134·140·184·232 ЗАКРЫТЫ и сняты из таблицы, найденное вне карты отчёта заведено строками 287290. ⚠ Эррата 04.09-д («пак НЕ принят») ИСЧЕРПАНА этим актом. ПАКИ 05.09 ВЫДАНЫ И ИДУТ: движковый «денежный стоп перестаёт быть аварией» (archive/prompts/BACKEND_MONEYSTOP_SESSION_PROMPT_2026-09-05.md — строки 271 · 277 · 278 · защёлка отказа) и платформенный «пустить внутрь можно» (archive/prompts/PLATFORM_OPERATIONS_SESSION_PROMPT_2026-09-05.md — строки 269 бэкапы с предъявленным восстановлением · 270 дверь для не-браузерного клиента · 274 updateBook · рантбук деплоя). ПАКИ 04.09 РАБОТАЛИ ПАРАЛЛЕЛЬНО (зоны независимы по коду; сцеплений ДВА, и второе найдено 04.09 уже после выдачи промтов — оба про то, чтобы не сорвать платный прогон платформы:

(1) форма манифеста ЗАМОРОЖЕНА на окно (D39.190 п.5): гейт интейка — строгое равенство одной константе, бамп отправил бы каждую книгу в parser_unavailable. (2) ⚠ ДАННЫЕ ЯЗЫКОВОГО ПАКЕТА — ТОЖЕ. Правка backend/internal/lang/data/*.txt двигает EmbeddedVersioncutTag (докстринг backend/internal/pipeline/manifest.go: «the embedded data feeds the CJK numerals and sentence terminators that place boundaries») → ключ валидности манифеста → на платформе recut := storedKey != in.ManifestKey (platform/internal/pgstore/readmodel.go) → delete from unit_resolutions where book_id. То есть у книги, за которую заплачено, исчезают замечания читателя и счётчики глав — это строка бэклога 198. ⇒ Лендинг правки данных не кладётся, пока книга платного прогона живая; порядок лендинга — обязанность оркестратора, зоны об этом предупреждены пингами 04.09. Рычаг у бэкенда есть и он объявлен предпочтительным: снять рендер в Go, данные не трогать): бэкенд — вайр-батч docs/BACKEND_WIREBATCH_SESSION_PROMPT.md; платформа — «закрыть цикл» docs/PLATFORM_EXPORT_SESSION_PROMPT.md. ⚠ Строка 160 взята, но идёт СВОИМ паком ПОСЛЕ двери: она бампает manifestVersion, у которого безопасного порядка деплоя нет (D39.190 п.2). Строка 142 — после шагов 01 полигона (D39.190 п.3). Предыдущие паки ОТРАБОТАНЫ 03.09, ПРИНЯТЫ С ДОФИКСОМ и залендженыD39.187 движок, D39.188 платформа; составы и приёмочные дампы ТЕЛАМИ НОТ, промты в archive/prompts/ с баннерами исхода, план паков — archive/reports/NEXT_PACKS_PLAN_2026-09-03.md, решения — D39.190. ⚠ Живое отсюда одно и оно уже вылечено паком P13: у формы манифеста БЕЗОПАСНОГО ПОРЯДКА ДЕПЛОЯ НЕТ — гейт интейка сравнивает версию со строгим равенством одной константе (platform/internal/ingest/manifest.go, греп KnownManifestVersion), окна двух версий нет, поэтому порядок «сначала платформа, потом движок» из рантбука разворачивается на обратный.

СНЯТО ЛЕНДИНГОМ 06.09 (D39.208): гейта БОЛЬШЕ НЕТ. Флаг едет в argv на КАЖДОМ спавне и пересчитывается, а названное ниже «живое основание» вылечено расширением условия — --resnapshot теперь едет на ЛЮБОМ продолжении, не только после правки банка (PD-422). Ниже — прежняя редакция, историей: Проводка --max-units в платформу остаётся ГЕЙЧЕНОЙ. Живое основание одно и оно механическое: единственный писатель bank_moved_at — дверь правок банка (platform/internal/runs/bank.go:211=one statement sets it), а рост АВТО-банка от майнинга этого флага не ставит, поэтому майнящая книга на второй покупке идёт без --resnapshot и умирает на снапшот-гарде движка — холд взят, попытка сожжена (PD-422). ⚠ Сюда же переехал остаток закрытой строки 234 (испр. 05.09): проводка полей rebill_* через шов — часть ЭТОГО гейта, а не отдельная работа; ревизия справедливо заметила, что после закрытия 234 её остаток остался без видимого носителя. Это чинится проводкой признака движения банка от майнинга, а не решением владельца.

ОТКРЫТО НА ОРКЕСТРАТОРЕ №22: Ресёрч-сессия textmachine-36 — лендинг research/29 ЗАКРЫТО 04.09. Оба отчёта топологии заленджены полигоном на СВОЕЙ ветке по прямому указанию владельца (a7951a7) и приехали в main мержем ветки — то есть маршрутом, который и был назван правильным. Файлы на месте: docs/research/29-harness-topology-survey.md и …-codex.md.

ЖИВОЙ ОСТАТОК — РЕВЬЮ-ШАПКИ, и он на оркестраторе. У research/30 шапка НАПИСАНА 05.09 — долг по нему закрыт (попутно исполнена эррата, которую он сам требовал пять недель: research/22 «LinguaGacha явно НЕ в мульти-агент/редактор» помечено протухшим; и снято его же требование к 29-codex — якорь :368 протух, реальный носитель :108 говорит слабее и о другом). У 29-codex шапка НАПИСАНА 05.09 — и она подтвердила снятое выше независимо: его же §4 п.12 говорит, что пробел в long-form детекторе машинности — в held-out точности и доле ложных срабатываний, а не в русском языке. У research/29 шапка НАПИСАНА 05.09 — ДОЛГ ЗАКРЫТ ПО ВСЕМ ТРЁМ ОТЧЁТАМ. Первым в ней стоит §5.6: сфабрикованный sha256 (совпали 52 знака из 64, хвост дописан по памяти, потому что хеш ни разу не был виден целиком из-за cut в конвейере) — и норма, из него следующая: идентификатор, не виденный ЦЕЛИКОМ в выводе команды, нельзя воспроизводить по памяти. Тот же класс, что D39.207 п.5, пришедший с другой стороны. ⚠ И граница, которую обязан знать всякий, кто цитирует оттуда числа: из 113 находок автор лично пере-открыла ШЕСТЬ. ⚠ Расхождения 29 и 29-codex между собой НЕ разрешены никем — автор 29 не читала параллельный отчёт дальше его §1, (⚠ испр. 05.09: сама шапка 29 уже поправлена — «НЕ закоммичено» помечено протухшим, файл в main с a7951a7; здесь остаётся долг ШАПКИ, а не факта о коммите). До шапок читать оба отчёта как ФАКТУРУ, не как ратифицированное. ⚠ Формулировка, которую шапка обязана нести, иначе следующая сессия выбросит замеры топологии: судья как СТАДИЯ ДВИЖКА не построен и не вызывался (0 вызовов), но судьи в ПОЛИГОНЕ были и есть. Маршрут закрыт словом владельца 02.09: «не трогай соседнюю git tree ветку вообще» — файл принадлежит ветке polygon, в main приезжает мержем ветки, копированием из соседнего worktree — никогда (№22 так сделал, был поправлен, лендинг откачен).

НОРМЫ, ЗАРАБОТАННЫЕ ЭТИМИ ПРИЁМКАМИ:

  • Зелёная батарея — это ПОЛНЫЙ список пакетов ПЛЮС отсутствие FAIL, а не отсутствие FAIL: обёртка подавала exit 0 при падении в хвосте (поймала сама движковая сессия).
  • Линтер якорей гоняется ПОСЛЕДНИМ шагом, после того как код замер. Он судит доки трёх зон, но зоны его не зовут; в этот заход нашёл 21 указатель на исчезнувший код, и правки сдвигали цели дважды подряд — включая мои собственные, уже после починки.
  • Якорь разрешается тем, ЧТО он утверждает, а не номером строки, на которой лежал (движковая сессия записала переезд по совпавшему номеру и промахнулась предметом).
  • Колонка «подтверждено» отчёта, пойманного на ложных подтверждениях, снимается с доверия ЦЕЛИКОМ — критерий, отличавший ошибочные строки от верных, назвать нельзя.
  • pkill по имени процесса на машине с параллельными сессиями бьёт по чужим.
  • Число или «доказано» уходит владельцу только после СВОЕГО прогона.

⚠ ПИНГ ЗОНЕ БЭКЕНДА (оркестратор №22, 04.09, вечер) — РЕВИЗИЯ ДОКУМЕНТАЦИИ ЗОНЫ ЦЕЛИКОМ

Внешний ревизор прочитал backend/README.md, все 11 файлов backend/docs/ (включая оба PUML текстом) и арх-доки движка от первой строки до последней. Правит ЗОНА. Порядок — по цене ошибки.

1. README.md:36 описывает инвариант через ключи, которые загрузка ОТВЕРГАЕТ. «Канал adult — только permissive (fail-closed)»: permissive: и channel: — RETIRED и валят конфиг (internal/config/models.go, греп LegacyPermissive; internal/config/pipeline.go, греп LegacyChannel). Настоящий механизм — content_labels книги × accepts_labels модели — в README не назван ВООБЩЕ. Сессия, строящая маршрутизацию контента по README, получит неподнимающийся конфиг. Ту же ложь несут оба PUML.

2. ОБА PUML БЕЗ ⚠-БАННЕРА рисуют снесённое, при том что docs/README.md подаёт их как канонические диаграммы, правящиеся «одним коммитом с кодом»: exit-контракт из ЧЕТЫРЁХ кодов (в cmd/tmctl/main.go — коды 4, 5 и полоса 1019), глаголов 6 против 11, mined_delta/mined_rejects как ключи book.yaml (RETIRED, валят загрузку), машинная .bank-stop.json (снесена D39.158), Adult bool. В заголовке обоих — «синхронизировано с D1D39.25» при живой голове D39.195.

3. README.md:95 называет боевой редакторский промпт v3 (⚠ испр. 05.09: второй адрес этого пинга — 10-prompt-architecture.md:23 — снят, потому что этот файл ЗОНА ОРКЕСТРАТОРА и бэкенд его не правит; поправлено своей рукой) — в configs/pipeline-c1.yaml метка v4-discourse-reflow-nogenre, и с D39.182 она НЕСУЩАЯ (TestPromptLabelsPinTheirBytes). Поверивший README либо бампнет v3→v4 в уже-v4 файле, либо получит красный гейт.

4. README.md:3 обещает автоматику, которой нет: «подсистемы не импортируют друг друга (проверяется go list -deps)». Сама изоляция ДЕРЖИТСЯ — проверено, — но проверки нет: grep -rn 'go list' backend --include=*_test.go --include=Makefile → 0, а internal/archguard несёт три анализатора, границы импортов среди них нет. 13-tech-debt-anchors.md это констатирует, README нет.

5. ⚠ ОБЩНОСТЬ ПЕРЕОЦЕНЕНА, и долг без носителя. README.md:23 («гейты по данным, Go-веток по паре нет») и README.md:16internal/text — script-agnostic, без языковой политики») — сверх-утверждения: internal/text/norm.go встраивает китайскую таблицу трад→упр, складывает катакану в хирагану и БЕЗУСЛОВНО сливает ё→е для ЛЮБОЙ цели (белорусская цель ломается тихо); санитайзер считает только latinLetters/cyrLetters, поэтому греческая/арабская/хинди цель получает «латинскую вставку» на каждом слове; граница слова в банке проверяется только для Latin/Cyrillic. ⇒ Ревью-вопрос «пара, которой в репо нет, без правки Go» для не-кириллической цели отвечается НЕТ, а README это скрывает.

6. Ратифицированная норма зоны держится на СНЯТОЙ строке. DISCLOSURE_LAW_DESIGN.md:219-221: «Пока строка бэклога 246 открыта, новый класс вводится в полосу ТОЛЬКО вместе со сверкой… Закроется 246 — оговорка снимается». 246 ЗАКРЫТА 04.09 (D39.194) ⇒ оговорка снялась молча, и это надо подтвердить или переписать сознательно, а не по факту исчезновения строки.

7. ⚠ СЕМЬ ПРОТУХШИХ ТОКЕН-ЯКОРЕЙ В backend/docs/ — и до сегодня их не видел никто. Корень backend/docs в линтере ОТСУТСТВОВАЛ с самого его заведения; добавлен 04.09 (docs/scripts/counts.py, греп backend/docs в lint_anchors). ЗАКРЫТО 05.09: все семь пере-навешены (616a8e4 два мёртвых + e7d6b3f пять съехавших), --lint → 0. Ниже — состояние на середине дня, читать как историю. ⚠ Прежняя редакция: «починены ДВА из семи, пять живы» (DISCLOSURE_LAW_DESIGN.md:40-44 целят в quality.go · status.go ×3 · bookbuild.go — зона бэкенда, пинг в её секции). ⚠ Прежняя редакция этой строки говорила «семь пере-навешены» — ложь, выведенная из ожидания, а не из прогона линта; поймана внешним ревьюером. Починенные два не съехали, а УМЕРЛИ: целили в (DISCLOSURE_LAW_DESIGN.md:264 и MONEY_HONESTY_REPORT.md:285) не съехали, а УМЕРЛИ: целили в chunkrun.go=SourceEchoExpected: role == roleTerminologist, подстроки которой на HEAD нет вовсе — её съел переход на isBankRole. Прежняя редакция этой строки перечисляла краснеющие цели и была верна ровно до починки. Прежде краснели: DISCLOSURE_LAW_DESIGN.md:40-44 (пять целей подряд — quality.go, status.go ×3, bookbuild.go), :264 и MONEY_HONESTY_REPORT.md:285 (chunkrun.go:40). ⚠ Эррата D15.2 от 02.09 УЖЕ указывала мимо — гейт не мог этого увидеть по построению. Команда: python3 docs/scripts/counts.py --lint.

8. Ссылки «строка N» на строки, ВЫПАВШИЕ из таблицы при закрытии: README.md:26 (103 — фантом, снят 31.08), pipeline.puml (99 · 100 · 101 · 125 · 145), DISCLOSURE_LAW_DESIGN (246 · 238 · 239 · 194), internal/membank/decisions.go:84 (210 — закрыта 04.09). Бэклог закрытые строки НЕ хранит, а доки зоны адресуют их как живые.

9. Мелочи с адресом: README.md:5 «актуализировано 01.08», тело цитирует ноты 2328.08 · 13-tech-debt-anchors.md:174 цитирует STACK.md в состоянии, которого там уже нет (ручка эффорта proоба носителя датированы 04.09 и противоречат) · SEAM_PACK_FINDINGS.md:130 «у bank-apply ноль вызывающих на платформе» — platform/internal/runner/bankapply.go строит вызов · :1133 «два хита» → четыре · MONEY_HONESTY_PLAN-NOTE.md:35 «22 поля» → 21 на её же HEAD.

10. НЕ ОПИСАНО, А НАДО: пакет internal/langscreen (новый, на денежном пути вердиктов) в README не упомянут вовсе · карта пакетов не называет ~20 несущих файлов internal/pipeline (volume.go, rebill.go, reprice.go, refusal.go, terminologist.go, bookbuild.go…) и пять в internal/store · cmd/tmmutate (каталог посадок, объявленный ГЕЙТОМ; ⚠ число из этой строки снято 06.09 — стояло «141», в дереве 211: литерал в рабочей строке живёт дольше предмета, поэтому здесь его больше нет — счёт берётся из cmd/tmmutate/mutations.json) и cmd/tmvet не названы · цена закона раскрытия («загейчен на 40 %», Г1/Г2 не построены) в статус-борде 09 не оговорена.

Что оркестратор поправил СВОЕЙ рукой в свою зону тем же заходом: статус-борд 09-target-architecture.md говорил «цикл РАЗОМКНУТ» и «канон 0.9.0» в день своего же «освежения» — оба ложны с adf5e53/58bca19; висячая ссылка на закрытую 246 в шапке секции «Бэкенд»; корень backend/docs в линтере.

Бэклог

ПЕРЕЕХАЛ 06.09 в BACKLOG.md (ратификация — D39.218). Таблица вынесена дословно, номера строк не менялись: «строка N» ищется там же, чем и здесь — grep -n '^| N |' docs/BACKLOG.md. Заголовок оставлен НАМЕРЕННО, чтобы прежние ссылки «секция „Бэклог“ в PROGRESS» доезжали в один хоп. Счёт очереди — бюллетенем в шапке того файла; здесь копии НЕТ (один носитель на факт, D39.112).

(Указатели на архив-слайсы хроники — бюллетенем «Архивы хроники» в CURRENT-STATE; здесь копий нет.)

Бэкенд

⚠ ПИНГ ОРКЕСТРАТОРА №23 (17.09) — ТРИ ЯКОРЯ backend/docs/ УЕХАЛИ ИЗ-ЗА МОЕГО ВЫНОСА; ЧИНИТЬ ВАМ, В ВАШУ ЗОНУ Я НЕ ЛЕЗУ

17.09 по заказу владельца я срезал этот журнал с 5178 строк до 634: отчёты десяти ПРИНЯТЫХ паков уехали в archive/PROGRESS-2026-09-07-16-backend-packs.md. Вместе с ними уехали цели трёх ваших якорей в backend/docs/CHAPTER_STRUCTURE_DESIGN.md (строки 1774, 1783, 1785): они целятся в строки 2880 и 1874 ПРЕЖНЕГО журнала (адреса намеренно НЕ в якорной форме: якорь на уехавшую цель — это битый якорь, а не описание битого). Новые адреса — строки 2482 и 1476 файла archive/PROGRESS-2026-09-07-16-backend-packs.md (сдвиг ровно 398 строк: рез с 415-й плюс 16 строк шапки среза). ⚠ Я их ПОПРАВИЛ И ОТКАТИЛ ОБРАТНО, когда увидел, что лезу в чужую зону — файл сейчас побайтно равен HEAD, правка ваша. ⚠ Ниже точки реза якорей не было ни одного (пере-снято прибором перед выносом), так что больше у вас ничего не сдвинулось.

ЗАПИСКА-ПЛАН пака «ЛЕСТНИЦА ПОПЫТКИ ДЛЯ БАНК-РОЛЕЙ» (17.09, сессия textmachine-main-12). До первой правки движка. НЕ КОММИЧУ

Предмет, пере-снятый по дереву, а не по промту. Банк-роли зовут runAttempt напрямую (terminologist.go:861, попытка 0, фиксированный потолок) и читают из результата ТОЛЬКО текст (terminologist.go:1055). Вердикт att.cls, который classifyOutput уже посчитал внутри runAttempt, не читает ни одна ветка. Лестницы нет: один вызов, один потолок, тишина.

Почему лекарство именно «больше потолок». По прогону B (docs/experiments/25-door-to-file-b.md §7): batch=0 asked=22 answered=4 (length) и batch=2 asked=24 answered=0 (empty), оба оплачены. Причина названа там же и в configs/models.yaml: у DeepSeek размышление считается ВНУТРИ completion_tokens, и у всех семи выброшенных вызовов оно съело ПОЛНЫЙ потолок (8496/8496 ×3, 8000/8000, …). Хоп на другую модель такого не лечит; лечит удвоение бюджета — на черновой стадии того же прогона оно вылечило 5 из 5. Там же ратифицирована экономика: перебор бюджета бесплатен (резервация транзитна, списание по факту), недобор стоит ЦЕЛОЙ генерации. Бюджет фазы при этом не был ограничителем: лимит $1.00, потрачено $0.029749.

Разрез

Цикл попытки из runStage (stagerun.go:197268) переезжает в отдельную функцию с ДВУМЯ вызывающими. runStage = резюм по chunk_status + лестница + эскалация + диспозиция; банк-роль = лестница + разбор таблицы. runStage из терминолога НЕ зовётся: у банк-батча нет ни чанка, ни строки статуса, ни шаблона.

Три параметра, и все три несущие:

параметр у стадии у банк-роли
ключ ступени число УДВОЕНИЙ (maxTokensForAttempt(base, escalations)) то же самое, один перечислитель
допуск ступени счётчик регенераций (regenerate_before_escalate); книжный потолок живёт в резервации счётчик + ролевой суб-бюджет, иначе §4.2
судья ступени classifyOutput внутри попытки он же ПЛЮС вердикт после разбора таблицы

Ступень ключуется числом удвоений, а НЕ номером попытки. attempt считает КЛЮЧИ и перешагивает сожжённые (walk по burnedByCut), escalations считает деньги; в RequestHash они входят РАЗНЫМИ полями (Attempt и MaxTokens). Подмена одного другим — смена ключа покупки.

Прибор построен ПЕРВЫМ, до выноса

backend/internal/pipeline/bankkeygolden_test.go — голден ЗНАЧЕНИЯ хеша банк-батча. Привязан к ФИКСТУРЕ (книга, снапшот, модель, усилие, сообщения, пол min_max_tokens заданы самим тестом), а не к боевому конфигу: голден на боевом краснел бы от пере-пина цены или правки промта, то есть от вещей, к ключу отношения не имеющих, и его начали бы обновлять не глядя. Два слоя: чистая деривация через продакшн-шов и исполнение — реальный проход runBankRoleBatches покупает, и хеш читается из хранилища.

Первая редакция голдена была ложно-зелёной, и это найдено посадкой, а не глазом. Сообщения были короткими, потолок упирался в MinMaxTokens=512, и вся арифметическая ветвь формулы est/2 + floor в ключ не входила: сдвиг terminologyReplyFloor 256→257 оставлял файл ЗЕЛЁНЫМ. Чинится тем, что батч 0 сидит В полу, а батч 1 его перерастает, и посылка утверждается внутри теста — иначе фикстура тихо съедет обратно в один режим. Посадки после починки: attempt 0→1 RED · ординал i→i+1 RED · пол 256→257 RED · формула est/2→est/3 RED · роль выпала из bankStage RED · температура в InternalCall RED (по посылке). Копия для посадок — /home/ubuntu/tm-bankladder-mut, вне скретчпада; после каждой цели проверено, что ЦЕЛЬ на месте, и diff -rq против живого дерева даёт 0 расхождений.

Эскалация банк-ролей (§4.3) — НЕ строю, и вот что защищает нулевой хоп

Прочитал internal_call.go и escalation.go. Комментарий защищает не одну вещь, а пять, и они разного рода:

  1. Чужой пул. escalationBudgetRemains читает Pipeline.Escal.BudgetUSD и EscalationSpentUSD(книга) — пул КНИГО-ШИРОКИЙ и принадлежит волне. Банк-хоп ел бы его молча.
  2. Способ деградации. «these calls degrade by leaving their work unchanged rather than by paying a second model»: неотвеченный терм остаётся auto и ничего не портит, в отличие от чанка, который отгрузил бы брак.
  3. Предварительная сборка клиентов. gateModels() кладёт в достижимые модели только модели ВКЛЮЧЁННЫХ гейтов; модель хопа туда не попадает — и buildClients/CheckKeys пропустят её, а прогон умрёт на банк-стопе «no pre-built client» ПОСЛЕ оплаченной волны. Это уже случалось (комментарий gateModels).
  4. Аддитивный буфер. InternalCall держит ReasoningMaxTokens: 0, и это безопасно лишь потому, что загрузчик ОТКАЗЫВАЕТ аддитивному провайдеру для моделей гейтов. Модель хопа потребовала бы того же отказа.
  5. Имя отказа в стоп-марке. ceilingStopDetail (cutcall.go) утверждает, что отказ потолка называет РЕ-АТАКУ, и это верно, пока каждый прочий платный шаг ловит errReserveCeiling и деградирует.

Хоп не строю, и довод не «дорого», а «не то лекарство»: измеренная болезнь — размышление, съевшее потолок; другая модель потолка не лечит. Лестница (мой предмет) лечит ровно её. Класс, для которого хоп осмыслен, — refusal (тот же вызов на той же модели пере-откажет, D2.2) — на банк-ролях имеет замеренную популяцию ноль. Если владелец захочет хоп, пять пунктов выше — его спецификация, и они уходят в отчёт.

Тождество банк-батча (§4.4) — развилку НЕ беру, потому что ПОСЫЛКА РЯДА 478 НЕ ПОДТВЕРЖДАЕТСЯ

Ряд 478 утверждает: «снимет фильтр одну решённую строку — номера всех последующих батчей сдвигаются, и они покупаются заново при неизменном тексте». Пере-мерил на настоящем terminology.Batch.

Механика. Упаковка жадная. Снятие кандидата из батча k либо ПОДТЯГИВАЕТ содержимое из k+1 (тогда у всех последующих меняется ТЕКСТ, и ординал ни при чём), либо не подтягивает (тогда у них не меняется ничего — ни текст, ни номер). Сдвиг номера при неизменном тексте требует, чтобы батч исчез ЦЕЛИКОМ из середины.

Числа. Снятие ОДНОГО кандидата, 246 снятий в четырёх режимах: сдвинутых-с-тем-же-текстом 0 (при живых content-changed 239…630 — прибор различает классы). Снятие БЛОКА (как и работает dropBankSettled — он снимает множество), по 200 случайных блоков на режим:

режим батчей сдвинуто с тем же текстом
batch_runes=400, 60 кандидатов 19 475
batch_runes=6000, 66 кандидатов (боевой) 2 0
batch_runes=6000, 300 кандидатов (боевой) 6 0

Положительный контроль: убрать батч 1 целиком — прибор показывает 18 сдвигов из 19, то есть ноль выше не слепота прибора.

Боевой режим — это вторая и третья строки: batch_runes не задан ни в одном из трёх боевых конфигов, значит работает движковый умолчательный 6000; на прогоне B это дало 3 батча на 66 термов (22 · 19 · 24).

Ключ не трогаю. Не потому, что дорого, а потому, что механизм ряда 478 в боевом режиме имеет популяцию ноль, а обе ветви стоят одноразовой пере-чеканки ВСЕХ банк-чекпойнтов. ⚠ Условие, при котором вывод перестаёт держаться, называю сразу: мелкий batch_runes (сотни рун) делает класс живым — 475 на 200 снятий. Ряд 478 остаётся открытым с этим замером и этим условием; доминирующий драйвер пере-покупки — пере-упаковка СОДЕРЖИМОГО — ни одной из двух ветвей не лечится и назван ограничением в самом dropBankSettled («a checkpoint identity that survives a change of batch composition … belongs in its own decision»).

Что ещё в заказе
  • §4.2 — допуск и проба обязаны говорить об одних ступенях: сегодня проба bankCheckpointExists спрашивает только попытку 0 (terminologist.go:840), а суб-бюджет считается только по неоплаченным батчам. Ступени лестницы уйдут мимо бюджета фазы — это чиню вместе с лестницей.
  • §4.5 — доля ответов: поднимаю СУЩЕСТВУЮЩИЙ построчный счётчик до итога и развожу его с числом батчей, выброшенных бюджетом; третьего счётчика не завожу.

ОТЧЁТ пака «БАНК — ЧТО МОЖНО УЗНАТЬ И ПОЧИНИТЬ ЗА $0» (16.09, сессия textmachine-main-11). НЕ КОММИЧУ — дерево передаю оркестратору №23

Деньги пака: $0. Платных вызовов моделей не было ни одного. Все числа сняты по уже купленному сырью прогонов A и B, открытому только на чтение и только с КОПИЙ в скретчпаде.

Что построено — по пунктам заказа
пункт исход чем предъявлено
§4.1 громкий отказ, когда у ЦЕЛИ нет строк инъекции сделано, и ШИРЕ заказа: арм пять, а не три backend/internal/pipeline/injectionpreflight.go:96=func (r *Runner) checkInjectionTexts + вызов backend/internal/pipeline/runner.go:389=if err := r.checkInjectionTexts(logger); err != nil { рядом с соседним отказом :364=if forWrite && r.Pipeline.Gates.Terminology.Enabled && r.pack == nil {; пин TestABankItsTargetCannotStateRefusesBeforeItIsBought (6 подтестов)
§4.1 предикат ПОЛНОТЫ, а не заголовка сделано lang.InjectionTexts.MissingKeys / Authored / GenderKeyGaps + реестр roleInjectionKeys (chunkrun.go); пины TestTheInjectionKeysAreOneVocabulary, TestAPartialInjectionSetIsVisibleToTheGuard
§4.2 отказ роли перестаёт быть передачей (путь а) сделано; сентинел НЕ тронут terminology.go — ветвь declined рядом с isNoDst; пин TestAProseDeclineLandsInTheDeclineBucketAndNotInTheBank
§4.2 мусор разведён с отказом по корзинам сделано ветвь hasLetter + счётчики NoLetters/DeclinedByPhrase; пины TestARenderingWithNoLettersReadsAsUnansweredNotAsCanon (парсер) и TestADeclineAndGarbageLandInDifferentBuckets (сквозной, все три исхода в одном ответе)
§4.2 реестр фраз — ДАННЫЕ, лендится пустым и запинен пустым сделано, плоскость выбрана иначе — см. «Отклонения» backend/internal/lang/bankdata/decline-phrases.txt + declinephrases.go; пины TestTheDeclineRegistryShipsEmpty, TestTheDeclineMatchIsTheWholeFieldAndFoldsTheShapesAModelWrites, TestAProseDeclineNeverBecomesTheBooksCanon (проводка)
§4.3 ДВА предиката сделано pre-call terminology.Candidate.Contest (contested.go), post-call pipeline.BankStopRow.Contest (stopcontest.go)
§4.3 $0-харнесс реплея сделано backend/cmd/tmbankprobe/ + движковый ридер таблицы стопа pipeline.ParseBankStopTable с раунд-трип пином
§4.3 таблица чувствительности на обоих источниках с обоими знаменателями сделано числа ниже; знаменатели напечатаны с компонентами
§4.4 носитель для «новой улики не было» ответилось ЧИСЛОМ, а не «данных нет» режим -passes того же харнесса
мутации новых мест 37 записей, каталог 441 → 478, все помечены battery cmd/tmmutate/mutations.json
§4.1 — что именно стережёт отказ, и почему условие ШИРЕ промта

Предмет: у цели без строк инъекции оба банк-блока рендерятся в НОЛЬ БАЙТ без ошибки (membank.RenderGlossaryBlock/RenderEditorConstraintBlock гейтятся на HasData(), а lang.InjectionTextsFor возвращает нулевое значение для незнакомой цели молча). Отказ стоит в openRunner, формой RefusalBadConfig, до открытия волн и до первого платного вызова, и только на пути записи — $0-чтение книги остаётся возможным (D20.4, запинено отдельной веткой).

Арм, по которым строки попадают в банк, ПЯТЬ, а промт называл три. Инъекция строится при r.baseMemory != nil, то есть мимо гейтов:

  1. gates.terminology — роль консолидирует строки на этом прогоне;
  2. gates.banknote — черновик спрашивается о таблице терминов;
  3. book.yaml glossary_seed — сид;
  4. <book_id>.mined-delta.yaml — подписанные владельцем строки. ⚠ Путь ДЕРИВИРУЕТСЯ (backend/internal/config/book.go:210=b.MinedDelta = filepath.Join(dir, b.BookID+MinedDeltaSuffix)), поэтому book.MinedDelta != "" истинно ВСЕГДА и как арм негоден — проверяется НАЛИЧИЕ файла (decisionFilePresent);
  5. авто-банк, оставленный в сторе предыдущим прогоном (backend/internal/pipeline/mining.go:723=func (r *Runner) loadAutoBank). Гейт — ран-локальный конфиг книги (D39.126 п.2а), а строки в сторе — нет: книга с выключенными гейтами, без сида и с банком от прошлого прогона инжектит так же молча.

Армы спрашиваются в порядке цены (backend/internal/pipeline/injectionpreflight.go:40=func (r *Runner) bankRowsReachTheWire): два поля конфига → один stat → чтение стора, и стор трогается только когда всё дешёвое сказало «нет». Ошибка чтения дверью не считается — WARN и «строк нет», по норме «предупреждение о деньгах не выдумывается из ошибки».

Полнота набора текстов — только по РЕНДЕРЯЩИМСЯ ключам, и вот какие вошли: glossary_header (блок переводчика) и editor_header (блок редактора) — по одному на роль, через реестр roleInjectionKeys, стоящий рядом с реестром рендереров. Не вошли: editor_unverified_header и unverified_marker — ОТСТАВЛЕНЫ (D39.104 п.2, ряд 134), их никто не рендерит, и требовать их значило бы заставлять новую пару заполнять мёртвый текст (ключи сделаны неэкспортируемыми, чтобы гард снаружи не смог их назвать). Гендерные директивы не требуются — цель без грамматического рода законно не пишет ни одной, и её строки обязаны рендериться без директивы; но ПОЛОВИНЧАТЫЙ набор (есть gender_male, нет gender_hidden) — это ошибка авторства, и на неё стоит WARN с перечнем недостающих ключей: механизм работает, теряется только формулировка владельца (D39.254 п.3).

Пин краснеет на ДАННЫХ, а не на отказе соседа: фикстура строит синтетическую пару zh→xx (реальный zh-источник langpack-а, каталог пары — копия zh-ru, промты пары на месте), и ПЕРЕД мутацией та же книга открывается на запись — то есть загрузчик и соседний отказ :356 пройдены. Четыре двери, доступные фикстуре (гейт терминологии · гейт банкноты · сид · мината-дельта · строки в сторе — пять подтестов, в каждом открыта ровно ОДНА); плюс негатив «книга без банка вовсе НЕ отказывается» (иначе условие выродилось бы в «у цели нет текстов») и ветка $0-чтения.

§4.2 — разбор ужесточён, корзины разведены
  • Отказ прозой → та же корзина, что у сентинела: ключ присутствует с ПУСТОЙ передачей ⇒ Declined (плюс счётчик DeclinedByPhrase, потому что «роль отказалась словами» — это про ПРОМТ пары, и об этом иначе не узнать).
  • Мусорdst без букв ВООБЩЕ («90», ——) → плохая строка, ключа в ответе нет ⇒ Unanswered (плюс счётчик NoLetters и до восьми строк ОБРАЗЦАМИ). ⚠ Критерий — отсутствие БУКВ, а не наличие цифр: «Отряд 731» остаётся (контроль в пине). Направление ошибки объявлено в коде.
  • Порядок проверок несущий, и фикстура это утверждает: односимвольный мусор («…») отбивается РАНЬШЕ, минимальной длиной wellFormedLemma, поэтому пин использует ДВУхсимвольный — иначе он краснел бы и с удалённой веткой, то есть удовлетворялся бы чужой уликой.
  • Реестр отказных фраз лендится ПУСТЫМ: в боевом файле 0 строк данных при 26 строках файла (прибор — grep -vc '^#\|^$', знаменатель напечатан), и пустоту стережёт пин TestTheDeclineRegistryShipsEmpty (internal/lang/declinephrases_test.go). Он утверждает три вещи разом: реестр парсится, в нём ноль языков, и файл ПРОЧИТАН (контроль по длине и по опорной строке) — «ноль строк» и «нет файла» здесь не путаются. Условие, при котором вывод перестаёт держаться, названо в самом пине: реестр пуст, пока популяция отказов прозой не ИЗМЕРЕНА на купленном сырье (сегодня она ноль: 0 из 69 и 0 из 66 при контроле 69/69 и 66/66); появится замер — строка реестра и этот пин меняются ОДНОЙ правкой, и правка цитирует замер. Мутация BANK-decline-registry-ships-a-phrase сажает ru-фразу В ДАННЫЕ (не в Go — предмет пина тот же слой, что предмет посадки) и краснеет именно этим пином. Совпадение — СТРОГОЕ, по всему полю после свёртки (пробелы, кавычки любой формы, хвостовая пунктуация, регистр), и «клан, а не термин родства» остаётся передачей. Довод денежный: ложный отказ выбрасывает из банка строку, за которую книга ЗАПЛАТИЛА, а ретрая у банк-ролей нет вовсе (ряд 438).
  • Проводка запинена отдельно: открытый раннер обязан нести предикат (r.declinedByPhrase != nil), потому что «реестр пуст» и «роль не получила реестра» на пустом реестре ведут себя ОДИНАКОВО, а состояния это разные — одно решение, другое незаметный баг.
  • Перекупки правка не вызывает: парсер в тождество запроса (attemptRequest) не входит. Меняется СОДЕРЖИМОЕ банка ⇒ memory_version ⇒ пере-редактура под обычным согласием. Это записано в комментарии у самого файла данных.
§4.3 — два предиката и таблица чувствительности

Пороги в Go не зашиты ни одним значением. У обоих предикатов — структуры входов без умолчаний; единственный сегодняшний вызывающий — $0-харнесс, который варьирует их по сетке. Платного потребителя нет НАМЕРЕННО: маршрутизировать по неизмеренному признаку запрещает сам пак.

Знаменатели (заданы промтом, напечатаны с компонентами): pre-call — кандидаты на входе роли; post-call — строки, на которые роль ОТВЕТИЛА. На этом сырье они СОВПАДАЮТ, и видно почему: settled 0 · unresolved 0.

Расхождение 67/66 и 70/69 объяснено, и оно не про кандидатов: лишняя строка в bank_stop_presented — АЛИАС 方源的. Таблица пишется presentedSurfaces = src + ВСЕ алиасы кластера (mining.go), то есть это множество ПОВЕРХНОСТЕЙ, а не кандидатов, и знаменателем кандидатов быть не может. Одна и та же лишняя строка на обоих прогонах.

порог (pre-call, знаменатель — кандидаты на входе роли) A-покупка 1 A-покупка 2 B-покупка 1 B-покупка 2
conventions ≥ 2 9/69 = 13.0 % 9/68 = 13.2 % 8/66 = 12.1 % 8/65 = 12.3 %
conventions ≥ 2, доля лидера ≤ 0.50 8/69 = 11.6 % 8/68 = 11.8 % 8/66 = 12.1 % 8/65 = 12.3 %
conventions ≥ 3 3/69 = 4.3 % 3/68 = 4.4 % 4/66 = 6.1 % 4/65 = 6.2 %
conventions ≥ 4 0/69 = 0 % 0/68 = 0 % 1/66 = 1.5 % 1/65 = 1.5 %
«не поддержан» (черновики не дали НИ ОДНОЙ передачи) 0 0 0 0

Знаменатель второй покупки на единицу меньше первой, и это не опечатка: строка, которую банк РЕШИЛ (NOT ASKED), до роли не доходит — фильтр решённых стоит перед первым платным вызовом, — поэтому она не входит НИ в pre-call, ни в post-call знаменатель. Первая версия моего харнесса держала её в pre-call и выбрасывала из post-call: два знаменателя расходились на строку, не дошедшую ни туда, ни сюда, и каждая доля слева была тихо разбавлена. Исправлено, числа выше — после исправления.

Арм доминирования на этом сырье почти инертен, и это свойство СЫРЬЯ: у мульти-конвенционных строк почти везде по одному чанку на вариант, то есть ничья; порог 0.50 двигает A с 9 на 8 и B не двигает вовсе. Значит на этой книге «спорный» определяется ОДНИМ числом — количеством конвенций.

сигнал (post-call, знаменатель — строки, на которые роль ОТВЕТИЛА) A-1 A-2 B-1 B-2
нет передачи (unresolved) 0/69 0/68 0/66 0/65
конфликты (CONTRADICTS / банк уже держит) 0/69 0/68 0/66 0/65
invented (передачи не было среди черновиков) 11/69 = 15.9 % 14/68 = 20.6 % 17/66 = 25.8 % 16/65 = 24.6 %
conf ≤ 60 12/69 = 17.4 % 11/68 = 16.2 % 14/66 = 21.2 % 14/65 = 21.5 %
conf ≤ 70 27/69 = 39.1 % 28/68 = 41.2 % 25/66 = 37.9 % 27/65 = 41.5 %
conf ≤ 70 + invented 28/69 = 40.6 % 30/68 = 44.1 % 28/66 = 42.4 % 29/65 = 44.6 %
conf ≤ 70 + invented + конфликты + unresolved 28/69 = 40.6 % 30/68 = 44.1 % 28/66 = 42.4 % 29/65 = 44.6 %

Выбранное число И ЕСТЬ ответ на «сколько строк ушло бы на второй вызов». Предикат, построенный на конфликтах, на этом сырье проверить НЕЛЬЗЯ — их популяция ноль, и это сказано прямо, а не выдано за замер. Контроль напечатан: invented виден в 11 и 17 записях, значит прибор omitempty-поля ВИДИТ.

Граница числа уверенности соблюдена и названа в коде: D39.102 п.2 ратифицирует conf как ordinal-очередь ревью ВНУТРИ одной модели. Порог здесь решает, КОГО посмотреть ещё раз, и ничего не весит; выбирать им передачу или сравнивать двух моделей код не может и не делает.

§4.4 — посылка «новой улики не было» получила носитель, и число сошлось с ратифицированным

Прибор: разбор ДВУХ таблиц стопа одной книги (project.db.bank-stop.txt первой и второй покупки) движковым ридером, соединение по поверхности, сравнение ВХОДА строки (тип, канал, частота, предложения черновиков с числом чанков, улики миньера, окна KWIC) — и никогда ответа.

  • A: сменили передачу 12; из них вход был байт-идентичен у 11.
  • B: сменили передачу 14; из них вход был байт-идентичен у 14.
  • ПОПРАВКА 16.09 (нашла приёмка, я подтверждаю): знаменатель у этих долей был НЕ ТОТ. Прибор печатал «12 из 69» и «14 из 66», а из ЧИСЛИТЕЛЯ строка, решённая банком, исключена — значит и в знаменателе её быть не должно: верно 12 из 68 и 14 из 65. Класс тот же, что у арма unresolved в пост-колл-сетке (ряд 462): доля считается по популяции, из которой её же предмет вычтен. Сами числа смен и совпадений (12 · 11 · 14 · 14, итог 25 из 26) от этого не двигаются — двигается только доля.
  • Итого 25 из 26 — ровно число research/35 §П1, снятое НЕЗАВИСИМЫМ методом, который вдобавок видит окна KWIC (метод K1 по note их не видел вовсе).
  • Единственное исключение названо: 宗祖祠堂 у A — сменился ТИП (placeterm), то есть уехал классификатор, а не улика черновиков.
  • Из счёта смен исключены строки, которых вторая покупка НЕ СПРАШИВАЛА (NOT ASKED): в обоих прогонах это 方源. Его «смена» — артефакт того, что банк его решил, а не пере-решение; засчитав его, я бы раздула ровно то число, из которого считается экономика.
  • Что сменилось на самом деле, проверено: между покупками в обоих прогонах подписаны РОВНО ДВЕ строки (方源, 古月山寨), то есть уехали якорь подписи и состав батчей — при неизменном блоке каждой строки.

Чего в сырье нет и почему вопрос закрыт не полностью: тела запросов не хранятся нигде (LOG_LLM_BODIES=1 пишет их ТОЛЬКО в лог и только на LOG_LEVEL=debug, обрезая до 32 КБ), а СОСТАВ батча и содержимое ЯКОРЯ не сохраняются вообще. Значит «якорь против стохастики модели» по-прежнему не разделено — ровно как и говорил research/35.

Дизайн персистенции (предложение, $0 в производстве): хранить не тела, а состав батча — упорядоченный список ключей кандидатов — и строки якоря, которые для этого батча собрал CanonFor, ключом на (book_id, snapshot_id, batch_idx, request_hash), рядом с request_log. Это байты на покупку, строится в момент terminologyMessages, тождество запроса не трогает и отвечает на оставшийся вопрос ТОЧНО: если состав и якорь совпали, а ответ другой — это стохастика модели, и больше ничего.

Чем проверено — команды, которые можно повторить
  • Пины и гейт зоны: cd backend && make battery (цель battery = build vet fmt lint test, -race).
  • Мутации: go run ./cmd/tmmutate -root <КОПИЯ> -id <список> — 37 новых записей, по одному прогону на запись; полное подмножество — -battery.
  • Замеры: go run ./cmd/tmbankprobe -sheet A-pass1=<...bank-stop.txt> … -db … -passes A=<первая>,<вторая>.
  • Базы читались ТОЛЬКО с копий, mode=ro&immutable=1; оригиналы не тронуты (mtime всех трёх файлов — 15.09, прежний).
Отклонения от буквы промта — три, каждое с доводом
  1. Реестр отказных фраз — в bankdata-плоскости движка, а не в langpack. Langpack резолвится ПО КНИГЕ из langpack_root, и книга вправе не иметь его вовсе (золотой ja→ru гоняется без пака) — тогда один и тот же ответ модели читался бы двумя способами в зависимости от пути в book.yaml. Тем же доводом в дереве обоснован эмбеддед-блэклист провайдерских отказов (internal/lang/data/refusal.txt). Плоскость bankdata, а не data/, потому что data/ складывается в EmbeddedVersion, который едет внутри каждого unit id: правка реестра пере-чеканила бы id всех книг, а разбор ответа не меняет ни байта ни одного запроса.
  2. Условие §4.1 расширено с трёх дверей до пяти арм (гейты ×2, сид, мината-дельта, строки в сторе) — см. выше.
  3. §4.1 судит полноту набора, а не заголовок — по прямому ответу оркестратора, и только по рендерящимся ключам.
§10 — что НЕ удалось и чего я не проверяла
  1. Отказ прозой на настоящем сырье проверить НЕЛЬЗЯ, и это цена пустого реестра. Сквозной пин работает на подменённом предикате; на боевых данных механизм инертен до первой авторской фразы. Пока фразы нет, ряд 445 закрыт ПОЛОВИНОЙ: мусор ловится всегда, отказ прозой — нет.
  2. Популяция мусора на купленном сырье — НОЛЬ (0 из 69 и 0 из 66; контроль: буквы есть у 69/69 и 66/66). Пин по необходимости синтетический, и это назвать обязательно: замером на сырье он не является.
  3. Половинчатый набор текстов инъекции сквозным пином не покрыт. В эмбеддед-данных ровно одна цель (ru); синтетическая вторая пере-чеканила бы unit id каждой книги. Предикат запинен на байтах в internal/lang, проводка — на цели БЕЗ строк вовсе.
  4. Я не пере-майнила книгу. Кандидаты §4.3 восстановлены из проекции стопа — собственной записи движка о том моменте; настоящий реплей потребовал бы книги, langpack-а версии фриза и базы, которую движок открыть не может (см. п. 5).
  5. База прогона A стоит на схеме 16 при голове 18. Следствие проверено чтением: store.OpenReadOnly при current != len(migrations) ОТКАЗЫВАЕТ, а store.Open при current < len(migrations) МИГРИРУЕТ. То есть реплей через движковый стор по этой улике не «рискован», а невозможен без переписывания схемы купленного прогона. ⚠ И отдельно, почему immutable=1 ОБЯЗАТЕЛЕН, а не желателен: обычный mode=ro НЕ бесследен — он создаёт/обновляет рядом с уликой файл -shm. Замерено на себе: первый мой зонд по A-after оставил project.db-shm с сегодняшним временем при БД, чьё mtime осталось 15.09. Байты базы не изменились ни у одной из трёх, но каталог улики был тронут, и только immutable=1 этого не делает. Дисциплина (утверждена оркестратором как норма зоны): улики платных прогонов копируются в скретчпад, читаются своим ридером на mode=ro&immutable=1, хеши копий печатаются.
  6. Пост-колл предикат на конфликтах непроверяем на этом сырье (популяция ноль на обоих прогонах, при непустых листах 660 и 648 строк).
  7. Денег второго вызова я не считала — харнесс даёт число СТРОК, а не сумму: цена зависит от модели и упаковки батчей, а это решение следующего пака.
  8. Режим -compare (A↔B, два РАЗНЫХ прогона) даёт числа о другом предмете — там черновики покупаются заново, поэтому улика меняется по причинам, не имеющим отношения к пере-спросу решённого. Оставлен в инструменте, но в выводы §4.4 не входит.
  9. Мой собственный дефект метода, найденный и исправленный по ходу. Первая версия §4.4-инструмента читала mined-signature.yaml и складывала в «улику» ВЫБРАННУЮ передачу — а note называет только ЧИСЛО чанков у топ-предложения, но не его текст. Выходило «улика двигалась» у 100 % смен (0 из 12 и 0 из 14 «одинаковых») — число правдоподобное и целиком ложное. Переписано на таблицы стопа; прежний метод описан в комментарии файла, чтобы следующий не повторил.
  10. И дефект пина, найденный мутацией, а не глазом. Утверждение «ридер обязан отказать на незнакомой строке» я сперва проверяла строкой, ДОПИСАННОЙ в конец файла — а её ловит ДРУГОЙ гард («поле вне блока»). Мутация «default → continue» выжила; фикстура пере-построена так, чтобы строка стояла ВНУТРИ блока до первого контекста, и теперь пин краснеет именно на ней.
Адверсариальный проход по СВОЕЙ готовой работе (§5 промта) — восемь находок, все починены

Проход вёлся двумя руками: мой собственный разбор и ОДИН советчик-фабл (разрешённый промтом), которому было велено атаковать и грунтовать каждую находку адресом. Каждую его посылку я пере-проверила деревом сама; ниже — то, что подтвердилось, и что с этим сделано.

  1. Ридер таблицы стопа ПАДАЛ на контексте, который движок пишет сам. Окно KWIC через границу абзацев несёт \n\n (чанкер склеивает абзацы именно так, AttachKWIC режет только края), то есть в листе появляется ПУСТАЯ СТРОКА ВНУТРИ контекста — а я читала пустую строку как конец блока терма. Один такой терм делал НЕЧИТАЕМЫМ весь лист и замер невозможным. Воспроизведено моим собственным тестом до починки (a field line outside any term block), починено лукэхедом (пустая строка — граница, только если следующая непустая ОТКРЫВАЕТ ряд), фикстура раунд-трипа теперь несёт ровно такой контекст, посадка BANK-stop-table-reader-breaks-on-a-paragraph-break.
  2. Разбор списка ФАБРИКОВАЛ элементы. Писатель склеивает evidence через ", ", а майнер пишет одним элементом «related to mined 青山, 白山» — то есть с запятой ВНУТРИ. Мой splitList возвращал три элемента там, где в прогоне было два, молча, при сходящемся числе рядов. Починено правилом «строка списка сохраняется ЦЕЛИКОМ»: сепараторы этого формата не экранируются, поэтому ридер не изобретает элементов, а раунд-трип утверждает асимметрию явно (whole), посадка BANK-stop-table-reader-splits-a-list-item-in-two. Тот же класс у CONTRADICTS/THE BANK ALREADY HOLDS закрыт тем же правилом.
  3. Реестр roleInjectionKeys был НЕПОЛОН для редактора. RenderEditorConstraintBlock открывается тем же гейтом HasData(), а HasData читает ГЛОССАРНЫЙ заголовок — значит цель с editor_header и без glossary_header проходила бы гард и рендерила ноль байт. Сегодня это скрыто объединением ключей (во всех четырёх боевых пайплайнах есть обе роли), но реестр обязан быть верен ПО РОЛИ, а не по совпадению. Ключи редактора теперь {glossary_header, editor_header}, посадка перенаведена.
  4. Комментарий у файла данных называл пин, которого НЕ СУЩЕСТВУЕТ (TestTheShippingConfigsDeclineNothingByProse; grep даёт единственный хит — сам комментарий). Это ровно «якорь на несуществующую цель», который у нас класс ошибки. Заменён на два настоящих имени.
  5. Нулевое значение StopContestOpts было АКТИВНЫМ армом. Сентинел «-1 выключает» означал, что структура, которую никто не заполнял, выбирала все строки с conf=0 — самые срочные строки листа. Файл, объявляющий «умолчаний здесь нет», не вправе иметь нулевое значение с поведением. Арм получил свой флаг UseConf, посадка BANK-stop-contest-zero-value-is-an-active-arm.
  6. JSON-сайдкар не несёт метки «не спрашивали» (bankexport.go такого поля не пишет), поэтому на ВТОРОЙ покупке решённая банком строка выглядела бы как «ответа не было», портя оба знаменателя. Харнесс теперь печатает это предупреждение для JSON-источников и велит брать ТАБЛИЦУ стопа; все итоговые числа сняты с таблиц.
  7. В «строках, которые спасло бы правило не-переспрашивать», сидели строки, которых никто не спрашивал. Решённые банком и неотвеченные в ОБЕИХ покупках теперь считаются отдельными классами и из этого числа исключены.
  8. Неточность доккомментария: одиночный до счётчика NoLetters не доходит — его отбивает минимальная длина wellFormedLemma на проверку раньше. Формулировки в коде и в WARN поправлены (в этом отчёте порядок был назван верно с самого начала).

Проверено и дефекта НЕ найдено (называю, чтобы был виден охват): путь подписи банка bank-apply новым отказом НЕ задет — он открывает стор напрямую (internal/pipeline/bankdecisions.go:179=lock, err := store.LockProject(book.ProjectDB)), мимо openRunner; в cmd/tmctl/main.go на запись раннер открывают только translate (:280) и redrive (:484), все прочие — NewReadOnlyRunner. ⚠ Следствие, которое я всё же НАЗЫВАЮ: redrive --dry-run идёт через тот же NewRunner, поэтому книга с уже оплаченным банком и целью без текстов не получит даже $0-проекцию плана — это тот же класс, что у соседних отказов (ключи, роутинг), но на УЖЕ оплаченной книге он режет и бесплатный путь. Также проверено и чисто: порядок ветвей ParseReply (сентинел → фраза → форма → буквы → эхо → язык), симметрия свёртки фраз, отсутствие кириллицы и CJK в строковых литералах новых файлов вне тестов и комментариев, и то, что ни одна книга дерева не имеет цели, отличной от ru. ПОПРАВКА 16.09, и она про мой метод, а не про вывод: число «16 книг» я взяла из отчёта советчика и НЕ пере-снимала — ровно то заимствование чужого числа, которое этот же отчёт запрещает в другом месте. Пере-снято моей рукой: command grep -rl '^target_lang:' по корню даёт 24 файла, command grep -rh '^target_lang:'30 строк, все ru, не-ru ноль (command grep, а не обёртка, иначе каталог books/ не читается). Вывод держится; число было не моё.

Ось денег (§6 промта): что каждый механизм делает с ЧУЖИМИ деньгами, если сработает ошибочно
механизм ошибка в сторону «сработал зря» ошибка в сторону «не сработал» почему выбран такой перекос
отказ §4.1 прогон, который сегодня работает, не стартует. Денег НЕ теряется — отказ стоит ДО первого платного вызова, — теряется время оператора книга покупает банк-роли и стоп подписи, а в модель не уходит ни байта банка: заплачено за то, чего никто не увидит перекос в сторону отказа выбран сознательно: цена ложного отказа — сообщение с рецептом, цена молчания — оплаченная волна. Ложный отказ при этом сужен пятью армами: книга БЕЗ банка любой цели проходит свободно (отдельный негативный подтест)
корзина «мусор» §4.2 законная передача без букв (чистый символ) теряется — одна строка предложения, владелец подпишет рукой «90» становится каноном книги на всю книгу и едет редактору законом направление объявлено в коде тем же доводом, что у соседнего экрана языка ответа (OffLanguage)
реестр отказных фраз §4.2 оплаченная ВЕРНАЯ передача выбрасывается из банка, строка пере-спрашивается на следующей покупке — а ретрая у банк-ролей нет вовсе (ряд 438) отказ прозой остаётся каноном именно поэтому реестр лендится ПУСТЫМ и совпадение строгое: цена ложного срабатывания здесь выше цены пропуска
предикаты §4.3 сегодня — ничего: платного потребителя нет ни одного, предикат никем не читается то же маршрутизировать по неизмеренному признаку запрещает сам пак; сначала популяция, потом маршрутизатор
харнесс §4.34.4 денег не тратит и не может: читает только файлы, immutable=1 но ЧИСЛО, снятое неверно, обоснует неверное денежное решение следующего пака, и поэтому у двух его методических правил стоят собственные пины (cmd/tmbankprobe/main_test.go)
Что передаётся на лендинг

29 путей в backend/ (14 изменённых + 15 новых) плюс docs/PROGRESS.md; счёт снят git status --short --untracked-files=all backend/. Новые файлы (15): internal/pipeline/injectionpreflight.go · internal/pipeline/stopcontest.go · internal/pipeline/stopcontest_test.go · internal/pipeline/bankstopparse.go · internal/pipeline/bankstopparse_test.go · internal/pipeline/bankreplyparse_test.go · internal/terminology/contested.go · internal/terminology/contested_test.go · internal/terminology/decline_test.go · internal/lang/declinephrases.go · internal/lang/declinephrases_test.go · internal/lang/bankdata/decline-phrases.txt · cmd/tmbankprobe/main.go · cmd/tmbankprobe/passes.go · cmd/tmbankprobe/main_test.go. Изменённые (14): internal/pipeline/runner.go · chunkrun.go · mining.go · terminologist.go · contourpreflight_test.go · testdata/operator-messages.txt (+3 строки моих сообщений, +2 восстановленные — см. ниже) · internal/lang/embedded.go · bankdata.go · embedded_test.go · internal/terminology/terminology.go и три его тест-файла (механическая правка 13 мест вызова ParseReply под новый параметр) · cmd/tmmutate/mutations.json.

Одна правка в operator-messages.txt требует взгляда при лендинге: каталог держит ОДНУ строку на КАЖДЫЙ ВЫЗОВ, поэтому две его строки законно повторяются дважды (quality.go QualityReport и terminologist.go runBankRoleBatches <dynamic>). Мой первый скрипт вставки применил set() и обе дубли съел; замечено сразу по красному гейту, восстановлено, итоговый диф — +5 строк и ни одного удаления (git diff --stat это и показывает).

Как повторить замеры

Улики (оригиналы НЕ трогать, копировать): ~/tm-coldrun-a/evidence/bankstop-paid/project.db.bank-stop.txt (A, покупка 1) · ~/tm-coldrun-a/stand/books/bk_ROEHZBD46ALFI43E/project.db.bank-stop.txt (A, покупка 2) · ~/tm-coldrun-b/evidence/paid-bankstop/project.db.bank-stop.txt (B, покупка 1) · ~/tm-coldrun-b/stand/books/bk_NH6275ZIRFFTLZHG/project.db.bank-stop.txt (B, покупка 2) — последние два адреса промт не называл, я их нашла: у B есть СВОЙ каталог книги в стенде, а в нём вторая таблица стопа и БД после прогона.

cd backend
go run ./cmd/tmbankprobe   -sheet A-pass1=<A1> -sheet A-pass2=<A2> -sheet B-pass1=<B1> -sheet B-pass2=<B2>   -db A-after=<копия A project.db> -db B-at-stop=<копия B project.db>   -passes A=<A1>,<A2> -passes B=<B1>,<B2>
Гейт зоны и мутации — числа

make battery (цель зоны, а не go test): MAKE_EXIT=0 — и это прогон ПОСЛЕ починок адверсариального прохода, на том дереве, которое я передаю. Линтер — 0 issues. (прогонов было три: первый красный на errcheck в моём же новом тесте — runToSignatureStop возвращает значение, реализующее error, лечится _ =, как у соседей; второй зелёный; третий — итоговый, после правок адверсариального прохода. Цель lint стоит ДО test, поэтому «тесты зелёные» до первой починки не значило ничего). Полнота сверена СПИСКОМ, а не хвостом: go list ./... = 24 пакета, вердиктов в логе 24, comm -23 пуст — и контрольный перевёрнутый comm -13 тоже пуст. FAIL0. ⚠ Пакетов стало 24, а не 23 как в акте D39.255: прибавился cmd/tmbankprobe.

SKIP — 4, названы поимённо: TestHelperEventsRun и TestHelperKillLoop (хелперы подпроцессов, скипаются по построению); TestMinerFullBookParity (нет стенд-данных: eval/exp16/data/jieba_dict_general_zh.txt отсутствует — проверено ls); TestCorpusBankKeyConflicts (нужен TM_CORPUS). Последний я всё-таки прогнала — на своих КОПИЯХ улик, чтобы не трогать оригиналы: TM_CORPUS=<копии> go test ./internal/pipeline/ -run '^TestCorpusBankKeyConflicts$' → PASS, и он печатает свою популяцию с контролем: .db walked=3 · with a glossary table=3 · rows read=135 · approved=4 draft=131 · books with ANY conflict=0 · CONTROL: a planted contradicting unsigned row is reported on 2 of 2 books.

Мутации: каталог 441 → 478 (+37), помеченных battery 230 → 267. Прогнаны ВСЕ 37, по одному прогону на запись, на отдельных копиях дерева (одна копия — один мутатор; когда на первой шёл полный прогон подмножества, одиночные шли на ВТОРОЙ). Итог: 37 RED, но не с первого раза, и обе осечки записаны, потому что они про метод:

  • 1 НЕИЗМЕРЕННАЯ (BANK-silent-target-delta-door-closed): посадка не собиралась — present становился неиспользуемой переменной. «Не собралось» инструмент честно отдал отдельным исходом (nothing ran), а не зачёл как поимку; посадка пере-сделана на возврат false и пере-прогнана — RED.
  • 1 ВЫЖИВШАЯ (BANK-stop-table-reader-skips-what-it-cannot-read), и она нашла настоящую дыру В ПИНЕ: моё утверждение «ридер обязан отказать на незнакомой строке» проверялось строкой, дописанной в КОНЕЦ файла, а её ловит ДРУГОЙ гард («поле вне блока»). Фикстура пере-построена — строка стоит ВНУТРИ блока до первого контекста, — и пин стал краснеть именно на том гарде, о котором говорит. Пере-прогон — RED.
  • anchors swept: 0 of 478 — ни одна запись каталога не протухла от моих правок. Сверх того я прогнала СОБСТВЕННЫЙ контроль по ВСЕМ 478 записям: строка-цель каждой найдена в дереве РОВНО один раз (прибор — python3, печатает число несовпавших; после правок адверсариального прохода две записи пришлось перенаводить, и контроль их нашёл). Тот же контроль — способ убедиться, что мутация не осталась в НАСТОЯЩЕМ дереве: пропавшая цель означала бы применённую правку; несовпавших 0 из 478.
  • Две последние записи стерегут не движок, а МОЙ ПРИБОР (cmd/tmbankprobe/main_test.go): «строка, решённая банком, не попадает ни в один знаменатель» и «сравниваемый вход НЕ несёт ответа». Оба правила я сперва нарушила, оба давали правдоподобные числа, и оба теперь краснеют посадкой.
Пере-снято вторым прибором

Каждое число сетки снято ДВАЖДЫ и разными приборами: Go-харнессом (tmbankprobe, движковые типы и движковый ридер) и независимым разбором на python3 тех же файлов. Сошлись: conventions ≥ 2 — 9 (A) и 8 (B); распределение конвенций B {1:58, 2:4, 3:3, 4:1}; conf ≤ 70 на B — 25 (сумма гистограммы {50:2, 55:8, 60:4, 65:1, 68:1, 70:9}); invented — 11 и 17; конфликты — 0 и 0 при непустых листах 660 и 648 строк. Сверх того JSON-сайдкар и ТАБЛИЦА стопа одной и той же покупки прочитаны двумя разными загрузчиками и сведены строка к строке: расхождений 0 из 66.

На чём судилась зелень

Гейт зоны прогнан на МОЁМ дереве (cd backend && make battery), не на чистом HEAD: предмет приёмки — дерево сдачи, а на HEAD ни одного из новых пинов нет. Полнота прогона сверялась СПИСКОМ (go list ./... против вердиктов лога), а не чтением хвоста. ⚠ Линтер якорей доков на грязном дереве даёт ложные красные (оркестратор видел 31 против восьми) — я на нём ничего не судила и его не чинила: он читает пути, которых в моей зоне нет.

Остаток, названный на момент сдачи
  1. ЗАКРЫТО ПОСЛЕ СДАЧИ: полное батарейное подмножество каталога прогнано целиком — 267 mutation(s) run, 0 unexpected outcome(s), выживших 0, anchors swept: 0 of 478, TMMUTATE_EXIT=0 (20:22:48 → 21:15:39, отдельная копия ~/tm-mut-11/tree). И контроль, без которого это утверждение было бы о другом дереве: diff -rq backend ~/tm-mut-11/tree — ноль расхождений, то есть измеренная копия байт-идентична тому бэкенду, который залендили. На момент самой сдачи прогон ещё шёл, и в акт он входит этим числом, а не молчанием. ⚠ Первый запуск я ОСТАНОВИЛА на 165 записях из 267 (выживших 0) и перезапустила с нуля: посреди него легли починки адверсариального прохода, а прогон шёл по ЗАМОРОЖЕННОЙ копии — его вердикт был бы о дереве, которого уже нет. Частичный лог сохранён отдельно (mutfull-prefix-tree.log), и выдавать его за прогон сдачи нельзя.
  2. Каталог копий не переживает смену, и это НЕ гипотеза: мой ~/tm-mut-11 снёс оркестратор (rm -rf в окне 19:3619:43 по слову владельца о сносе мусора; он назвал это сам). Мой первый запуск полного прогона упал на cp: cannot create directory … No such file or directory в 19:45:42, хотя я удаляла только подкаталог tree. И вот разбор, который тут важнее признания: прогон, дошедший до 165 записей, в это окно НЕ попадал — он стартовал в 19:47:15 на каталоге, который я пере-создала, шёл до 20:21:54 и остановлен МНОЮ; в его логе ноль ошибок чтения (единственное совпадение грепа по «cannot» — имя мутации STOP-the-spend-line-closure-cannot-reach-the-emitter). То есть его числа недействительны по МОЕЙ причине (дерево до починок), а не по чужому вмешательству, и путать две причины нельзя: у вмешательства вердикт был бы «файла нет», прочитанный как «мутация не поймана». Нынешний прогон начат в 20:22:48, уже после всего. ⇒ норма, которую стоит держать обеим сторонам: перед сносом чужого каталога спрашивают ps, а рабочий каталог живой сессии в репозитории не упоминается ПО ПОСТРОЕНИЮ, поэтому греп по репо его не находит.
Вопросы оркестратору (работу не блокируют) — ответы получены 16.09, решения его

Все три закрыты словом оркестратора при сдаче: (1) реестр ru-фраз — отдельной строкой бэклога с критерием «популяция измерена на сырье», строку заводит он; (2) дизайн персистенции §4.4 — строкой с весом «скоро», формой «состав батча + строки якоря ключом на request_hash»; (3) ряд 445 не снимается, а СУЖАЕТСЯ: половина про мусор закрыта, остаток — отказ прозой, инертный до первой фразы. Ниже — как вопросы были поставлены.

  1. Заполнение реестра ru-фразами — отдельной строкой бэклога с критерием «популяция измерена на сырье», как договорились. Моё предложение по критерию: фраза заводится, когда встречена в ОТВЕТЕ роли на купленном прогоне, а не когда звучит правдоподобно.
  2. Дизайн персистенции §4.4 (состав батча + якорь ключом на request_hash) — заводить ли строкой бэклога и в чей пак.
  3. Ряд 445 закрыт наполовину — мусор стережётся всегда, отказ прозой инертен до первой фразы. Как отмечать в реестре требований.

ЗАПИСКА-ПЛАН пака «БАНК — ЧТО МОЖНО УЗНАТЬ И ПОЧИНИТЬ ЗА $0» (16.09, сессия textmachine-main-11, промт docs/BACKEND_BANK_ZERO_LAYER_SESSION_PROMPT.md, ряды 441 · 445 · 459 + замер под 449). НЕ КОММИЧУ — дерево передаю оркестратору №23

Записка стоит ДО первой правки (§7 промта). Пак $0: платных вызовов моделей нет ни одного, всё — либо детерминированный код, либо замер по уже купленному сырью прогонов A и B, открываемому только на чтение.

Что беру и в каком порядке.

  1. §4.1 — громкий отказ, когда у ЦЕЛИ нет строк инъекции. Гейт в openRunner рядом с соседним отказом того же рода (backend/internal/pipeline/runner.go:356), форма RefusalBadConfig, условие шире гейта терминологии (терминология ИЛИ банкнота ИЛИ непустой glossary_seed — инъекция строится при r.baseMemory != nil мимо гейтов, backend/internal/pipeline/waverun.go:592). Текст отказа называет лечение: строки живут в backend/internal/lang/data/injection.txt, их добавление двигает lang.EmbeddedVersion() ⇒ снапшот. Пин краснеет на ДАННЫХ: фикстура проходит загрузчик и соседний отказ и сверяет СВОЙ текст и класс.
  2. §4.2 — отказ роли перестаёт быть передачей. Путь (а): сентинел ⟦TM-NO-DST⟧ НЕ трогаю (снятие = отмена ратифицированного D39.42 п.1), ужесточаю разбор ответа и развожу ДВЕ корзины — отказ (сентинел + отказ прозой) → Declined, мусор (dst без букв вообще) → Unanswered. Реестр отказных фраз — ЯЗЫКОВЫЕ ДАННЫЕ, не литералы в Go.
  3. §4.3 — предикат «спорный» как ДВА предиката (pre-call на кандидатах до первой траты · post-call на строках стопа) + $0-харнесс реплея по купленным базам + таблица чувствительности по нескольким порогам, на обоих источниках, с обоими ЗАДАННЫМИ промтом знаменателями.
  4. §4.4 — носитель для посылки «новой улики не было»: что реально менялось во входе между двумя покупками одной строки, либо честный дизайн персистенции, если тел запросов нет.
  5. Мутации новых мест — в каталог, не разовым прогоном; гейт зоны make battery целиком; адверсариальный проход по своей же готовой работе.

Чем меряю. Базы прогонов — python3 + sqlite3.connect('file:<путь>?mode=ro', uri=True) (CLI sqlite3 на машине нет); ключи сайдкаров считаю по ВСЕМ записям, а не по первой; рядом с каждым нулём печатаю контрольную величину. Пины — прогоняю и показываю вывод. Полнота батареи — сверкой СПИСКА go list ./... против вердиктов лога, а не чтением хвоста.

Что уже пере-снял своим прибором на входе (числа промта сошлись): B (/home/ubuntu/tm-coldrun-b/evidence/paid-bankstop/project.db) — glossary 0, bank_stop_presented 67, request_log 18, checkpoints 24, сайдкар 66 записей, поле conventions у 66 из 66, invented 17; A (/home/ubuntu/tm-coldrun-a/stand/books/bk_ROEHZBD46ALFI43E/project.db) — glossary 69, bank_stop_presented 70, request_log 33, сайдкар 69 записей, conventions 0 из 69 (поля нет вовсе), invented 11. Девятнадцать якорей промта прогнаны построчно — все 19 указывают туда, куда говорит проза.

Опасности, названные ДО работы (полный список — в эхо-протоколе оркестратору):

  • Схемы двух баз РАЗНЫЕ, а не только состояния: у B 17 таблиц, у A 16 (в A нет wave_selection). ⇒ движковый стор этих баз не открываю НИКОГДА: он применит миграции и испортит улику. Go, если понадобится, работает на копии в скретчпаде.
  • Знаменатель pre-call расходится с таблицей стопа на единицу с каждой стороны: bank_stop_presented 67 против 66 записей сайдкара (B) и 70 против 69 (A). Пока единица не объяснена, «доля спорных» будет утверждением о моём прочтении знаменателя, а не о предмете.
  • Живая популяция §4.2 — ноль (research/35 §2.0, строка Б-5: 0 из 69 и 0 из 66 при контроле 69/69 и 66/66; пере-сниму сам) ⇒ пин по необходимости синтетический, и это называется, а не выдаётся за замер на сырье.
  • Денежный риск пака — отказные ФРАЗЫ, а не мусор: ложное срабатывание превращает оплаченную верную передачу в отказ, книга теряет строку канона, а пере-спрос стоит денег на следующей покупке (ретрая у банк-ролей сегодня нет вовсе, ряд 438). ⇒ совпадение строгое, по всему полю, а не по вхождению подстроки.
  • HasData() — предикат ЧАСТИЧНЫЙ: он спрашивает только glossary_header; цель с заголовком глоссария, но без editor_header, гейт пройдёт, а редакторский блок отрендерится с пустым заголовком.
  • У предиката §4.3 в этом паке нет потребителя (маршрутизация — следующий пак) ⇒ лендится чистой функцией с $0-харнессом, ни один платный путь на него не смотрит; пороги в Go не зашиваю.

Отчёты бэкенд-паков 0716.09 — ВЫНЕСЕНЫ В АРХИВ 17.09

Отчёты десяти паков, ВСЕ закрытые актами (D39.225 · D39.226 · D39.228 · D39.232 · D39.240 · D39.242 · D39.245 · D39.249 · D39.251 · D39.255), уехали в archive/PROGRESS-2026-09-07-16-backend-packs.md4552 строк. Вынесено по заказу владельца 17.09 на снос устаревшего. Живое из этих отчётов живёт нотами и строками трекера, а не здесь. ⚠ Отчёт пака «БАНК ЗА $0» (D39.257) ОСТАВЛЕН выше: он вход следующего банк-пака.

Отчёты пака «закон банка честно» и петли D39.191 — ВЫНЕСЕНЫ В АРХИВ 11.09

Хроника закрытых пунктов — строки 210 · 113→46 · 134 · 140 · 184(а) и дофикс чужого пака (номера названы здесь намеренно: греп по номеру строки обязан приземляться на указатель, а не мимо), разметка свободы, самопроверка, «что не удалось», дофикс приёмки 04.09, круги 2 и 3 петли D39.191) уехала в archive/PROGRESS-2026-09-04-07-bank-law.md — 196 КБ, 14 секций. Вынесено по мандату владельца на снос протухшей прозы (D39.239 п.4); ссылок извне на блок было 0. Живое из этих отчётов живёт нотами и строками трекера, а не здесь.

Полигон

ХОЛОДНЫЙ ПРОГОН A — КНИГА ДОШЛА ДО КОНЦА (11.09, полигон-сессия, пак POLYGON_COLD_RUN_A_SESSION_PROMPT.md)

Строка бэклога 16 закрыта замером: доведённая до конца книга стоит $0.419424. 蛊真人, главы 13, zh→ru, от интейка до файла, прочитанного человеком. Отчёт (пре-рег + результаты + три прохода критиков) — docs/experiments/24-door-to-file.md, инструменты — eval/door_to_file/, фризы be53cc8 (пре-рег и инструменты) и 44b33d9 (драйвер); бинари собраны из кода b0f5d89. Сырые платные выходы — books/gu-zhenren/door-to-file/ (33 файла, не коммичены: репозиторий книг отдельный).

  • Прогон: 25 мин 31 с, две попытки (банк-стоп exit 3 → резюм exit 0), status: ready, paused_reason пусто, 4 юнита из 4 translated, exports.complete = t у txt (54 151 Б) и epub (20 187 Б). Сборка: семь полей чисты. Стоп-правила не срабатывали ни разу.
  • Деньги сошлись СЕМЬЮ путями на 419 424 µUSD; ⚠ независимый среди семи — ОДИН: движок считает, движок пишет, платформа материализует из его же потока. Открытых резерваций 0.
  • ВПЕРВЫЕ КОНСИСТЕНТНОСТЬ ТЕРМИНОВ ЗАМЕРЕНА ПО ТЕКСТУ ЧИТАТЕЛЯ, а не по черновику. Движок сам называет две популяции вопроса (spread≥2 — 9 термов, INVENTED(no draft proposed it) — 11, из них 7 вне первой): 16 из 69. Исход: 9 доехали формой банка · 6 отданы НЕ банковской формой (高脚吊楼: банк «дом на сваях», в файле «свайный дом» ×4, главы 1 и 3) · 1 отдан двумя формами («церемония открытия апертуры» ×9 и «великая церемония…» ×1, обе в главе 1). Механизм работает и работает не везде — и теперь у этого есть числа. Это прямой ответ на приоритет владельца №1.
  • Четверть денег купила пустоту: 4 вызова из 27 вернулись на потолке max_tokens ($0.106472 = 25.4 %), три из них — РОВНО 0 символов ($0.094835 = 22.6 %), включая самый дорогой вызов книги ($0.071009, edit/deepseek-v4-pro, 16 000 оплаченных выходных токенов). Движок лечит перевыпуском с удвоенным потолком — 4 раза из 4 успешно: путь не рвётся, а дорожает вдвое. Вторая точка того же явления (08.09 было 32 %).
  • Пин цены deepseek-v4-flash протух: вендорская страница сегодня даёт вход 0.30 / cache-hit 0.006 / выход 1.20 против наших 0.44 / 0.014 / 1.32 (у pro совпадает точно). Прогон по живым числам стоил бы $0.397246 — наш прайс завышает на 5.6 %. Прогон шёл 01:2901:54 UTC в пятницу, внутри вендорского пикового окна 01:0004:00 UTC ⇒ пиковое основание было верным.
  • model_actual = deepseek-flash на 28 строках из 33, а шлём deepseek-v4-flash: нас считают под именем, которого в нашем реестре нет. Алиас это или другая модель — НЕ установлено.
  • Терминологический контур оплачен дважды (до стопа и после резюма): 15.6 % книги, из них 6.9 % — второй заход. Разделения этих денег раньше не было.
  • Три ловушки для того, кто станет считать деньги по этим таблицам: run_attempts.spend_micro_usd — величина НАКОПЛЕННАЯ (сумма по попыткам завышает цену на 38 %); err пуст на ВСЕХ 33 строках, включая четыре провальные (отказ виден только в degraded); Σ chunk_status.cost_usd недобирает ровно терминологию ($0.354127 против $0.419423).
  • Строка бэклога 224 воспроизведена живьём: на банк-стопе .bank.json несёт terms: [] и proposed[] из 69 термов; проекция платформы — 0 до закрытия прогона и 69 строк после.
  • Две находки про развёртывание: книга, которую пайплайн переводит бесплатно, НЕ ПРОДАЁТСЯ (step_max_usd = 0409 not_priced); шаблон книги по рецепту стенда роняет каждый старт c1 без langpack_root (exit 10). Ряды 411 и 412 завёл оркестратор.
  • Фриз-процедура пака была вырожденной: бинарь из линкованного git-воркри не несёт vcs.* вообще, и правило «отказать при vcs.modified=true» на нём выполняется всегда. Заменено клоном.
  • Круги НЕ сошлись: три прохода критиков дали 13 → 4 содержательных находок, и третий нашёл, что мой заказ следующей сессии чинил не ту функцию прибора, а знаменатель был не один. Всё внесено; сходимость не объявляю. Слабое место прогона названо в §11 отчёта — прибор расхождения форм и то, что защиты (стоп-правила, потолки) на боевой руке ни разу не выстрелили.

⚠ ПИНГ ОРКЕСТРАТОРА №23 (10.09) — ПЯТЬ ЯКОРЕЙ В ВАШИХ ДОКАХ УКАЗЫВАЮТ НЕ ТУДА

docs/experiments/ — ваша зона, рукой не трогаю. Адреса пере-снял своим прибором по тому же токену:

  • 00-provider-quirks.md:163backend/internal/llm/httpllm.go:517-522739751, токен SystemMessagesSingle;
  • 00-provider-quirks.md:164backend/configs/models.yaml:137173 (system_messages: single) и backend/internal/llm/httpllm.go:528750 (func toOpenAIMessages);
  • 23-editor-tier.md:5274 → тот же models.yaml173; :5276 → тот же httpllm.go750.

Все пять сдвинул мой лендинг 3f05fab (пак оборванных вызовов правил httpllm.go и models.yaml). Ещё два якоря 23-editor-tier.md:7739-7740 (pipeline-c1.yaml:95, pipeline-arm-glm.yaml:6) уехали РАНЬШЕ и не от меня — цели я не трогал, токенов по прежним адресам там нет.

📌 02.09 · ПИНГ ОРКЕСТРАТОРУ (два входа в бэкенд) + ИТОГ СЛЕПОГО ЧТЕНИЯ. Решения владельца от 02.09 внутри. Носители: пре-реги и результаты — eval/dovodka/blind-read/ (PREREG-BLIND-READ.md + RESULT-BLIND-READ.md с семью эрратами, PREREG-2-BLIND-READ.md + RESULT-2-BLIND-READ.md), прибор дрейфа — eval/dovodka/dreif.py.

  • РЕШЕНИЯ ВЛАДЕЛЬЦА 02.09 (ратификация за оркестратором). (1) Дефолт редактора — low, бремя доказательства на том, кто включает дорогой режим. (2) Вопрос «off против low по качеству» закрыт как неизмеримый этим прибором — судейских реплик не покупать. (3) Питон-прибор дрейфа пишет полигон (сделано), настоящий прибор — в движок, это пинг ниже. (4) Покупка 50 глав на длину отложена до прогона в бэкенде (слово владельца).

  • ⚠ ВХОД 1 — офлайн-пересчёт по уже оплаченному тексту (tmctl recheck или равное). Проверки движка исполняются ТОЛЬКО в момент генерации; готовый текст в базе перепроверить нечем, и потому частота ложных тревог пост-чека не измерима без покупки. Полигон закрыл дыру питон-двойником (dreif.py), но это не тот же прибор: у движка стеммер целевого языка и сохранённые формы, у двойника — сопоставление по началу слова. Два «детерминированных» прибора с разными ответами — тихий дрейф нормы; строку в бэклог просит полигон, решение за оркестратором.

  • ⚠ ПОПРАВКА К ЭТОМУ ПИНГУ (02.09, позже в тот же день): входов НЕ ДВА, А ЧЕТЫРЕ, и «включить гейт» из них самый мелкий. Разбор начат вопросом владельца («в бэкенде нет майнинга term — „мастер гу“ не замайнится»). Проверено исполнением: майнинг term РАБОТАЕТ (68 записей класса term, 蛊师 → гу-мастер в банке есть), но владелец прав по сути — цепочка «намайнил → классифицировал → подписал → инжектнул как закон → проверил» рвётся в ЧЕТЫРЁХ местах, и замеренный дрейф (30 ключей из 102 несут >1 передачу, максимум 7 форм) — их следствие.

    • (1) term — класс-умолчание, а не решение. backend/internal/pipeline/banknote.go:79 дословно: «bankTypeOK is the accepted type set; anything else falls back to "term" (a benign default)». Две трети банка пробы (68 из 102) сидят в этом умолчании.
    • (2) Классификатор умеет различать term, но в пробе НЕ ДОБЕЖАЛ. Определение в backend/prompts/zh-ru/classifier.md:20-23 точное («реалия, понятие, предмет, материал, вещество, класс существ — всё, что переводится ПО СМЫСЛУ», пример 元石 term). Однако лог пробы: batches_planned=8 · batches_running=6 · classify_batches_dropped=4 при budget_usd=0.05 против estimate_usd=0.0978; итог unanswered=7, reclassified=5. Движок сам предупредил: «this bank is PARTIALLY consolidated — a budget cut a pass, so some terms were never offered to the role at all». ⇒ типы выставила банкнота или умолчание кода, а не тот механизм, который умеет.
    • (3) Промпт банкноты недоспецифицирует класс term. backend/prompts/zh-ru/translator-banknote.md: просит «новых имён собственных и терминов», список типов даёт, но определения term нет, а единственный пример — 师父 наставник title, то есть образец уводит в титулы; лимит «не более 20 строк» на фрагмент вытесняет понятия в пользу имён (имена заметнее). Правка промта — не Go и пары не касается.
    • (4) Инжект фильтрует по ПОДПИСИ, а не по классу. backend/internal/membank/memory.go:663: status == "approved"Confirmed, иначе Ambiguous; priorityRank (там же, ниже) вытесняет неподписанное первым при token-бюджете (glossary_token_budget: 800 на 102 записи). При approved=0 весь банк едет «неуверенным кандидатом» — форма не объявлена законом, и удерживать её нечему. Это и есть механизм дрейфа 蛊师 («гу-мастер» / «мастер гу») и 元石 (семь форм).
    • ⚠ (5) НАБЛЮДАЕМОСТИ НЕТ на редакторской стадии. retrieval_state в базах пробы держит 35 строк, все под DRAFT-снапшотом (8d5721f65596), под edit-снапшотом (b76ab168d95b) — НОЛЬ строк. Доехал ли банк до редактора и сколько записей вытеснено бюджетом, из артефактов узнать НЕЧЕМ. Все счётчики на черновой стадии нулевые закономерно: банк рождается ИЗ черновика, на нём его ещё нет.
    • Порядок, который из этого следует (предлагается, решение за оркестратором): наблюдаемость инжекта на edit-стадии → бюджет классификатора (пять центов режут половину работы) → определение и пример term в промте банкноты → подпись банка и заполнение форм → и только потом жёсткий режим гейтов.
    • ⚠ ТРИ ПОПРАВКИ К МОИМ ЖЕ УТВЕРЖДЕНИЯМ ВЫШЕ, найдены консилиумом 02.09 и пере-проверены мной исполнением. · (5) сформулирован неверно в ПРИЧИНЕ. «Ноль строк под edit-снапшотом» — не разрыв, а схема: PRIMARY KEY (book_id, chapter, chunk_idx) без snapshot_id (store/migrate.go), редактор мержит в ту же строку, и snapshot_id в ней — просто последнее записанное. Вывод «наблюдаемости нет» ОСТАЁТСЯ верным, но дыра в другом: счётчики инжекта редакторской волны не пишутся никуда (pipeline/chunkrun.go:202). · «ни один $0-гейт не поймал латиницу» — неточно. Детектор латиницы ЕСТЬ и вызывается всегда (checks/cheapgates.go:192, lintLatinResidue), но по построению он наблюдатель, а не вердикт: дословно cheapgates.go:22-27 — «They are OBSERVABILITY, never hard gates… never changes a chunk disposition». Гейт видел и молчал, потому что так устроен. · Источник «cultivation» — НЕ glm-5. Пере-проверено по стадиям: слово рождается в ЧЕРНОВИКЕ (deepseek-v4-flash, 7 клеток) во ВСЕХ руках, потому что черновик общий; редакторы DeepSeek его вычищают (0 в финальных текстах p9-low/p7-off), а glm-5 — нет (3 клетки на edit, 2 доживают до финала). Значит это дефект не породителя, а фильтра, и прежняя формулировка «glm-5 опознаётся по латинице» верна по факту, но неверна по причине.
    • Улика к строке 46, а НЕ находка: полный провал языка цели. books/dovodka/dv-i-z8-fb9ed5709e.json — глава пары zh→ru переведена целиком на английский: пере-считано мной, 7104 латинских знака, 0 кириллицы, finish=stop. ⚠ Прежняя формулировка «главного, чего в пинге не было» СНЯТА 03.09: это уже заказанная работа. Строка бэклога 46 называет ровно этот случай дословно — «Экран целевого языка: „полный связный перевод на английский" проходит»; дизайн пака заморожен владельцем (D39.92 п.1 closed-set + D39.93 изолированный модуль), предгейт — строка 113 (фикстура ~20 off-target). ⇒ ценность вычитки здесь — не гейт придумать, а дать строке 46 живую улику с боевого прогона.
  • 📌 03.09 · ВЫЧИТКА 17 ГЛАВ БОЕВОГО ПЕРЕВОДА ($0, 17 агентов Opus, по агенту на главу с исходником). Материал — p9-low (дефолт редактора по решению владельца 02.09), экспорт tmctl export --pairs. Инструкция вычитчику разделяла ДВА уровня: «читатель споткнётся» (против них меряется планка владельца ≤2 на главу, D39.20) и «мелочь корректора».

    • Планка НЕ взята: 59 блокирующих претензий на 17 глав = 3.5 на главу. В планку уложилась 1 глава из 17. При этом все 17 вычитчиков независимо ответили «читается как книга» = ДА.
    • Классы (всего / из них ловится детерминированно): смысл-искажён 12/0 · имя-термин-непоследователен 10/10 · translationese-грубый 9/2 · род-гу 7/6 · логика-действия 6/1 · иное 5/3 · язык-не-тот 4/4 · пропуск 3/3 · меры 3/3. ⇒ механизируемо 32 из 59 (54%) ПО ОЦЕНКЕ ВЫЧИТЧИКОВ; ⚠ оценка завышена: прогон существующих RunCheapGates по 11 цитатам дал 1 срабатывание из 11 (сегодняшний код берёт заметно меньше).
    • Остаток, который не берёт ни один детерминизм: 12 искажений смысла + 6 сломанных мизансцен = 1.1 на главу — то есть НИЖЕ планки владельца. Образец (гл.1): «перекрыл им путь, сделав шаг в сторону» — по-русски «посторонился», фраза противоречит себе; в оригинале 横跨一步 = шагнул НАПЕРЕРЕЗ.
    • Найдено проверкой самих вычитчиков (системнее, чем они доложили): заголовки глав теряются. Исходник даёт 第二十六节:一切组织的本质 — номер И название; движок кладёт в заголовок только номер (chunk/chunker.go stripHeading/ApplyHeading), название сваливается в тело как обычная строка. Дальше как повезёт: название уцелело у 11 глав из 17, потеряно у 6 ⇒ на 2283 главах это ~800 глав без названия вперемешку с озаглавленными. Ловится тривиально: заголовок состоит только из номера. Улика к строкам бэклога 160/161/162 и 201.
    • Сырьё вычитки: /tmp-экспорт не сохранён (волатилен), воспроизводится командой tmctl export --config arms/p9-low.book.yaml --pairs; вердикты 17 агентов — в задаче воркфлоу wfofkln2i.
  • 📌 03.09 · КАНОН СУЩЕСТВУЕТ, ПОДПИСАН И НЕ ПОДАН В СТЕНД (проверено исполнением). ~/books/gu-zhenren/guzhenren-seed-v2.yaml58 записей, из них 53 status: approved, 16 с полем gender. В нём ровно те термины, на которых спотыкались вычитчики: 资质 → талант (канон владельца D39.21), 元石 → первобытный камень (а в пробе намайнилось 7 форм), 甲等/乙等/丙等 → класс А/Б/В (а в переводе «категория C» ЛАТИНИЦЕЙ), 蛊师 → гу-мастер. В ~/books/gu-zhenren/probe-4axes/book.yaml ключа glossary_seed НЕТ — 0 вхождений, и шапка стенда объявляет это сознательно: «Сид НЕ подключается — банк рождается майнером + банкнотой, как в холодном прогоне». ⇒ Прежняя формулировка «банк не подписан» (запись 02.09) НЕТОЧНА и настоящим уточняется: не подписан МАЙНЕНЫЙ банк, а подписанный канон просто НЕ ПОДКЛЮЧЁН. Весь измеренный дрейф (30 ключей из 102 с >1 передачей) — дрейф конвейера с отключённым каноном. Контр-факт на той же книге: с подписанным банком эффективная консистентность 99.3100% (Д50.2, 375548 пар). ⚠ Записи в сиде НЕ ХВАТАЕТ поля gender (средний род прописан прозой в note) и стоит allow_short: false при minKeyLenHan=2 ⇒ односимвольный ключ структурно вне автомата. Это две строки ДАННЫХ, не код.

  • 📌 03.09 · СВЕРКА С ПЛАНОМ ПОСЛЕ ЗАМЕЧАНИЯ ВЛАДЕЛЬЦА — 10 «предложений» из 11 оказались уже заказанной работой. Владелец: «вы рассуждаете без оглядки на ту архитектуру и код, что уже построена или ЗАПЛАНИРОВАНА». Замечание верное: консилиуму давали код и данные вычитки, но НЕ давали целевую архитектуру, ЕДИНЫЙ БЭКЛОГ и журнал решений. Тот же консилиум, подняв прежний контекст, прочитал план и снял свои же предложения. Сверено мной по носителям.

    • Уже в плане: вынести вердикт-поля из хеша = строка 49 (спека backend/docs/D15.2-content-addressed-resume-spec.md) · экран языка цели = строка 46 · заголовки глав = строки 160/161/162 и 201 (гейт пал словом владельца 15.08, D39.136 п.3) · петля ремонта = построена за enabled:false, включение — строка 13 (владелец) · морфо-гейт рода = строка 82 · числа и меры = строка 12 через триггер D39.79 п.4 · критик = строка 2 (владелец).
    • Уже ПОСТРОЕНО: род neuter end-to-end — D39.69 §3 (13-tech-debt-anchors.md: «носитель ПОСТРОЕН»). Остаток по роду «гу» — две строки ДАННЫХ в сиде стенда (guzhenren-seed-v2.yaml:291-300: allow_short: false, поля gender нет) плюс ключ glossary_seed.
    • Противоречит ратифицированному: патч-протокол редактора ↔ D39.108 п.1 «диффы откладываются» · критик как стадия движка ↔ D38.4 п.2 «семантический span-судья — ОТКАЗ» · подпись ~30 ключей поимённо ↔ D39.144 «подписывается ВЕСЬ банк ОДНИМ ОК; пер-термная масс-подпись = инерция» · канал идиом врезкой dst ↔ D38.4 п.1 «глоссарий-сидинг чэнъюй НЕ делаем» · таблица мер ↔ D39.79 п.4 «HARD-value-детектор НЕ строить».
    • Что вычитка дала по-настоящему: улики к уже открытым строкам — 46 (глава на английском), 82 (7 дефектов рода), 142/13 (классы для точечной починки), 160 (6 глав из 17 без названия ⇒ ~800 на книгу), 12 (триггер реопена по числам НАЖАТ: #46/#13/#11). Это подтверждение заказанного, а не новый список.
    • Метод-урок, дороже находок: сутки ушли на переоткрытие бэклога, потому что план не был подан консилиуму. Любой панели, обсуждающей ЧТО СТРОИТЬ, план подаётся вместе с кодом — иначе она уверенно переизобретает заказанное. ⚠ Для полигона отсюда следует и граница: строки 46/49/82/142/160/12 — зона бэкенда, полигон в них не лезет; его законная часть — улики и замер (см. ниже).
  • ⚠ ВХОД 2 — пост-чек банка не имел ВХОДА, а не только был выключен. В пробе gates.coverage.enabled: false и блока gates.glossary нет — это известно; но сверх того: из 102 записей банка ни одна не доведена до approved, и decl пуст у ВСЕХ. Пост-чек проверяет подписанные термины (membank/mempostcheck.go), значит молчал он по двум причинам сразу. Условие включения жёсткого режима записано в самом коде — «после того, как владелец подтвердит точность», а точность мерить не на чем, пока банк не подписан. Порядок для бэкенда: подписать банк → заполнить формы → замер ложных тревог → решение владельца.

  • ИТОГ СЛЕПОГО ЧТЕНИЯ (две редакции, 219 судей Opus, $0.66 на реплику low₂). Редакция 1 дала 18:6 «дешёвая рука лучше» — вывод СНЯТ: судьям показывали усечённый черновик (стадия edit склеивает несколько draft-чанков; в 10 юнитах из 15 опора покрывала 5579%). Редакция 2 на склеенном по манифесту черновике (покрытие 99100%) плюс активные нули (low₁ против low₂): судьи назвали победителя в 29 голосах из 30 на чистом шуме, перекос на шуме (80%) БОЛЬШЕ боевого (70%). Первичные исходы: точность 12:10:8 (p=0.842), художественность 19:8:3 (p=0.070, Холм 0.141) ⇒ различие НЕ ПРЕДЪЯВЛЕНО. Механика вскрыта: в 73 голосах из 74 побеждал вариант с меньшим числом претензий, а счётчик упирался в потолок в половине голосов. Текстовый шум одной руки (0.799) больше межрежимного (0.820).

  • ПРИБОР ДРЕЙФА, первые числа ($0, на уже купленном). Терминов с более чем одной передачей в тексте — 1316% от измеренных; сменивших форму между главами — 68%. Независимым путём (поле spread, считает сам движок): 30 записей из 102 несут >1 передачу, максимум 7 форм у одного ключа (元石: «юаньши · камень юань · изначальный камень · первородный камень…»). ⚠ Разброс МЕЖДУ режимами (0.31.9%) не превышает шум-пола (2.4%, снят по паре реплик одной руки) ⇒ дрейф на этом отрезке — свойство черновика и банка, не редактора; экономия на редакторе к нему отношения не имеет.

  • ⚠ Мои ошибки этого пака, названные вслух: первая редакция пре-рега имела невалидный первичный тест (ничьи в знаменателе против H₀=50% дают ошибку I рода 17.8%) и правило решения с непокрытым пространством исходов; гейт слепоты искал [A-Za-z]{2,} и пропускал одиночные латинские буквы (2325 на руку, слепота при этом не пробита — асимметрия 8%); первый гейт покрытия мерил долю совпавших слов и срезал 14 юнитов из 15, потому что смешивал «нет опоры» с «сильно правил»; первый парсер банка искал src: вместо формата «ключ⇥передача» и печатал «дрейф 0%» на пустых вариантах — отказ пойман гейтом парсера, который теперь в приборе. Сверка с нормами оркестратора post-hoc: риг нарушил «оба порядка» (обе редакции), «полно-evidence окна» (редакция 1), «шум-полы измерены» (редакция 1), «детерминированный скорер > судьи» и D39.61 «вывод на агрегате до вскрытия единиц».

📌 02.09 · ПРОБА РЕДАКТОРА ПО ЧЕТЫРЁМ ОСЯМ КУПЛЕНА И ЗАКОНЧЕНА. Ответ на вопрос владельца «почему редактор дорог» получен: ОН ДУМАЕТ, А НЕ ПИШЕТ. Отчёт — docs/experiments/23-editor-tier.md Д54. Пре-рег стенда — eval/dovodka/prereg-4axes/PREREG.md (фризы c08b547 и 590256a), журнал исполнения со всеми находками — eval/dovodka/prereg-4axes/ISPOLNENIE.md. Стенд — ~/books/gu-zhenren/probe-4axes/. Израсходовано $5.524817 из санкции $9.50; остаток $3.98 НЕ добирался.

  • E0 — ответ на вопрос. Размышление = 77.9% цены редактора без ручки (p7-off) и 76.6% (p9-off); с low — 45.7% и 46.7%; у glm-5 с выключенным thinking — 0.0%. Ретраи: 39.3% и 26.3% цены руки против 1.8% и 6.0% у low.
  • E1 (главный) — эффект ЕСТЬ. Вилкоксон-Пратт, n=17, p=7.6e-05, Ходжес-Леман ×0.283, ДИ [0.175; 0.431]. 19 пар из 40 цензурированы ⇒ величина — нижняя граница: low режет размышление минимум втрое.
  • E2 — цена доставленного знака падает в 2.5 раза (боевая ×0.407 [0.326; 0.605]). Все ЧЕТЫРЕ заранее объявленных варианта, включая строгое delivered и кэш-независимую цену, согласны по знаку и величине.
  • E3 (ось промпта) — НИЖЕ РАЗРЕШЕНИЯ (p=0.487). E4 (взаимодействие) — ниже разрешения (p=0.854), описательный по построению.
  • E5 — опасение плана ОПРОВЕРГНУТО: low БЕЗОПАСНЕЕ. Эхо-клеток у 2, у low 0; обрывов по длине 10 и 9 против 1 и 1. Критерий риска не предъявлен. ⚠ Эхо считается по СЫРОМУ ответу: санитайзер его вырезает, и по отгружаемому тексту эхо не видно вовсе.
  • ИЗ ЭТОГО НЕ СЛЕДУЕТ РЕКОМЕНДАЦИЯ СТАВИТЬ low В БОЙ. Качество не судилось — прямо вне скоупа. Проба даёт цену рычага и снимает подозрение по эху; следующий шаг — судейство качества low против , и теперь его стоит купить.

ГЛАВНАЯ НАХОДКА О ДВИЖКЕ, КОТОРОЙ ПЛАН НЕ ЗНАЛ: АВТО-БАНК РАСТЁТ МЕЖДУ ПОКУПКАМИ. Терминолог перезапускается в каждой руке и, пока у него есть бюджет, доращивает банк — а банк есть ВХОД РЕДАКТОРА. В базе consolidated=51, в первой же руке 81, memory_version уехал, edit-снапшот сдвинулся, движок потребовал --resnapshot. Без гарда это проявилось бы на втором юните уже с оплаченными клетками, а хуже — банк мог вырасти ПО-РАЗНОМУ в разных руках, дав редактору разный вход при внешне исправном кресте. Лечение: гонять базу конфигом БЕЗ стадии edit до неподвижной точки, где терминальное условие — ноль свежих платных строк И ни одного отказа по деньгам (одного «memory_version не изменился» НЕДОСТАТОЧНО). Стоило $0.0352.

И ещё три находки, полезные любому следующему замеру. (1) Проводная улика СУЩЕСТВУЕТ вопреки §3 плана: LOG_LLM_BODIES=1 + LOG_LEVEL=debug пишет сырое тело запроса (obs/logging.go:72llm/httpllm.go:415), только тела, без URL и заголовков — снято, что у low-рук в теле стоит reasoning_effort:"low", у -рук ключа НЕТ, у glm-5thinking:{type:disabled}. (2) Ось креста можно доказать ЗА $0: потолок «база + малая сумма» отказывает первой edit-резервации, но снапшот и джоб к этому моменту уже вычислены; ⚠ потолок обязан лежать НИЖЕ редакторской резервации, но ВЫШЕ батча терминолога, иначе ложная точка выглядит тишиной. (3) tmctl manifest бесплатен и даёт units_total ДО покупкиn пинится числом, а не «сколько получится» (здесь 17 глав → 20 юнитов, а не ожидавшиеся 24).

Самопроверка исполнением (мандат промта §7): агент-контролёр на fable вёл всю сессию по распоряжению владельца и поймал у меня шесть ошибок, из них четыре — одного класса «показания собственного инструмента приняты за факт о мире»: слепой к эху E5, ковариата по первому чанку вместо суммы (15 юнитов из 20), ложная неподвижная точка банка, дефект регулярки, выданный за находку о проводе. Все пойманы ДО того, как повлияли на результат; реестр с классами — Д54.5. Я, в свою очередь, опровергла исполнением одну его находку и одну свою.

⚠ ЧТО ПРЕДЪЯВЛЕНО, А НЕ СПРЯТАНО: гард «зелень на пустоте» прошёл ВПРИТЫК — у p7-off пустых ровно 4/20 = 20% при правиле «>20% ⇒ отказ», а по строгому определению доставки было бы 25% и прибор отказал бы; четыре оплаченных decode_error в p7-off на $0.689 (34.5% цены руки), все на ретраях после обрыва, при нуле в трёх других руках; три юнита выброшены из E1 по R̂ ≤ 0, и два из них — low-клетки с почти нулевым размышлением, то есть выброс делает вывод КОНСЕРВАТИВНЕЕ. Полный список — Д54.4.

📌 29.08 · ФАЗА Д — НА ОБА ГЛАВНЫХ ВОПРОСА ВЛАДЕЛЬЦА ОТВЕЧЕНО, ВОПРОС 0 ОСТАЁТСЯ ОТКРЫТЫМ. Сессия $0, ни одного платного вызова.«Отвечено», а не «закрыто», и разница существенная: на Вопрос 2 ответ дан в форме СЛАБЕЕ, чем звучит сам вопрос — минимакс не проверен (худший ВОЗМОЖНЫЙ жилец не искался), вендоро-независимость архитектуры НЕ проверена (буфер двухвендорен: черновик делает DeepSeek). Первая редакция этой шапки писала «ЗАКРЫТЫ», хотя буллеты под ней несли оговорки — поправлено адверсариальной приёмкой. Отчёт — docs/experiments/23-editor-tier.md, секции Д35Д38. Агент-сессий 154 → 186 из 200. Деньги не тронуты: резерв пака $1.2634 из $18.30 как был.

  • Шаг 4 плана 22.08 ЗАКРЫТ (Д36) — последнее незакрытое условие §7, которое можно было закрыть бесплатно. Дуэль «ролевой промт против его отсутствия» на 16 уже купленных карантинных клетках, панель из 5 армов с ГРУБЫМ ДЕКОЕМ (ZD), 16 читателей fable-5. Промт различим: +1.50 места при пороге 1.13, знаковый p=0.0213, 13 глав из 16 в одну сторону — ровно порог, объявленный пре-регом ДО чисел. ⇒ у прибора ЕСТЬ разрешение на промт-инженерном материале, и всё, что фаза назвала неразличимым, меньше, чем ВЕСЬ ролевой промт.

  • И промт покупает ПРОЗУ, а не БРАК: детерминированный счётчик дефект-классов разницы между «с промтом» и «без промта» НЕ находит (p=0.6875) при том, что грубый декой на той же панели ловит (p=0.0156). Класс Б: текст без промта читатель называет машинным в 9 главах из 16, с промтом — ни разу (p=0.0039). ⇒ минимакс владельца получает третий член: по браку несут гейты, по прозе — ростер И ПРОМТ, и вес промта того же порядка, что вес целой дорогой стадии.

  • Закрыт долг Д34.5, который фаза назвала сама: третий круг панели-0 тем же fable-5 дал первую в фазе оценку СОБСТВЕННОГО шума прибора. Доля чисто читательского шума в пороге = 0.34; смена семейства стоит столько же (0.320.43) ⇒ подмена судьи по средним оправдана. Но хвост разошёлся и воспроизвёлся: полный переворот порядка не случается внутри семейства ни на одной из 16 глав и случается между семействами на той единственной, где сталкиваются брак и проза — обеими межсемейными парами. Вердикт о буфере при этом устоял ТРЕТИЙ раз (p=0.0042 · 0.0213 · 0.0042).

  • 📌 ПИНГ ОРКЕСТРАТОРУ №19 — твой вопрос по Gemini (D39.164) ЗАКРЫТ, и без новых покупок. Выживает ПОСЛЕДНЕЕ системное сообщение, выбрасывается ПЕРВОЕ: разность RE.prompt_tokens RQ.prompt_tokens = 2436 РОВНО на всех 16 главах, sd=0, а постоянного размера из двух системных только первое. Улика исполняемая — eval/dovodka/sysmsg.py, EXIT=0. Твои три поправки (переоценка «физически не может», повторяемость Content.parts[], форум как не-источник) внесены в 00-provider-quirks.md моей рукой, как ты и просил. И следствие для движка правится в ХУДШУЮ сторону, хотя дефект уже закрыт твоим же лендингом 7d0c6f2: до 28.08 хоп в Gemini терял не глоссарий, а ВЕСЬ ПРОМТ СТАДИИrender.go кладёт промт первым, инъекцию второй. Любой исторический результат на Gemini-хопе до 28.08 читать как «стадия работала без своего промта».

  • СВЕРКА --final СДАНА КРАСНОЙ: ТРИ ПРОВАЛА, И НИ ОДИН НЕ ПРО РАБОТУ (диагноз на каждый — Д39.2; гейты я НЕ чинил под зелень). ⚠ Первая редакция этого пинга называла ДВА и недосчитывала R37 — поймано адверсариальной приёмкой исполнением. (1) Переезд обнулил mtime всего сырья — 335 клеток Ф2 имеют ОДИН mtime, поэтому eval/tenant_panel/verify22.py считает границу двойной оплаты как $0.000000 и роняет R71. Клетки времени покупки в себе не хранят ⇒ улика утрачена безвозвратно, результат — нет. (2) Улика R77 («пинг в PROGRESS») ищет заголовок хроники за 15 августа со словами «ФАЗА Д», который вынесение хроники увезло в docs/archive/PROGRESS-2026-08-10-15.md:73=сырьё снято, выводы ПОНИЖЕНЫ. ⚠ Точную строку здесь НЕ цитирую намеренно: первая редакция этого пинга процитировала её — и гейт позеленел от того, что я НАПИСАЛ ПРО ГЕЙТ, а не от того, что исполнил обязательство. Это ровно та подмена, против которой реестр и заведён; поймано собственной сверкой --final ⇒ протух ГЕЙТ, а не обязательство. Норма впредь: время покупки и время ответа писать ПОЛЕМ В АРТЕФАКТ, а не полагаться на файловую систему. (3) R37 — ложный КРАСНЫЙ от нотации, а не от переезда: улика записана как material_ja.py \| grep -q "СТОП\|OK ", разборщик реестра восстанавливает \| в | ОБЕИМ чертам — и трубе оболочки, и альтернации внутри grep, — а без -E черта в grep литеральна. Сам замер зелёный: [OK ] срабатываний нет: 0 из 48 чанков, EXIT=0. ⚠ У этой же строки в прошлом был ложный ЗЕЛЁНЫЙ по той же причине — нотация ломает улику в обе стороны. Реестр я не правил: чинить улики в момент сдачи — это и есть «дописать таблицу под результат».И отдельная находка приёмки, НЕ моя: в журнале агент-сессий есть доисторические дубли токенов внутри прогона d4 (15 токенов заявлены дважды) — они стояли в HEAD до этой сессии, а runs.py --selftest такой класс не ловит.

  • Зона не запускалась на этой машине вовсе: книги переехали в <репозиторий>/books, а риги ходят по Path.home()/"books"65 вхождений в 31 файле (бэклог, строка 217). Поднято симлинком + пере-собран eval/.venv (CPython 3.14.7 против пина 3.14.4 — расхождение названо, риги dovodka/ чистый stdlib). Оба шага записаны в eval/README.md; там же теперь карта зоны dovodka/ — она описывалась ОДНИМ файлом при сорока скриптах.

  • ДЕНЬГИ — свод на ОДНОМ прайсе и в главах Гу, которого у фазы не было (Д41). Боевая связка «черновик flash → редактор pro» = $127 за книгу в 1500 глав Гу, и 90% этих денег — РЕДАКТОР ($114 из $127). Редактор заменяем: тот же черновик с редактором glm-5 = $20, в 6.3 раза дешевле, качество НЕРАЗЛИЧИМО (3 круга чтения, 2 семейства, второй прибор). Однопроходка на той же дорогой модели — $62 (вдвое дешевле связки), на gpt-5.6-luna$7.6, но в прод не идёт: цензур-ось не мерена, китайских клеток нет. ⚠ Сведено расхождение, лежавшее не разобранным: research/04 давал книгу за $715, фаза — за $4168. Оба верны — (а) «книга 1500 глав» в Д29.1 это 1500 НАШИХ единиц ≈ 735 глав Гу, (б) ресёрч считал ВИДИМЫЙ вывод, а у deepseek-v4-pro 46% токенов — размышление, и это ЧЕРНОВИК, а не проверка (96% предложений финала дословно есть в трейсе): модель пишет перевод дважды и обе копии тарифицируются по выходу. Правило для сметы: цену роли считать по total_tokens, а не по длине перевода.

  • ЧТО ОСТАЛОСЬ И СКОЛЬКО СТОИТ (Д38.6, ранжировано): Шаг 7 — 15 глав Гу ПОДРЯД боевым профилем с ЗАСЕЯННЫМИ характер-листами, ~$2 + движковый прогон. Это единственный замер, дающий прибор под Вопрос 0 («консистентность на всю книгу»), и он же готовая in-loop телеметрия прода. Без засева характер-листов результат ложно-отрицателен ПО ПОСТРОЕНИЮ: полей пола в банке нет вовсе, механизма не существовало ни в одном прогоне. Дальше — цензур-ось дешёвой линии $0.20.6 · китайские клетки ~$0.3 · З-2 $0.35 (перед ним $0-долг К-3) · пере-покупка ZP ~$0.4. В резерв $1.26 пункт 1 НЕ влезает — нужна новая фаза и слово владельца ДО начала. Потолки сессией не поднимались.

  • 📌 ОРКЕСТРАТОРУ, мелочь чужой зоны: строка бэклога 217 цитирует якорь eval/conformance.py:48 с ожиданием REPO = Path(...); я добавил в этот файл один импорт, и цель уехала на строку 49. Хук поймал, но правка — в таблице бэклога, то есть в твоей зоне: по правилу самого хука сообщаю, а не чиню. Сама строка 217 в силе и подтверждена этой сессией: 65 вхождений Path.home()/"books" в 31 файле, лечение — одна разрешающая функция корня книг, а не симлинк.

  • 30.08, ПО ЗАМЕЧАНИЮ ВЛАДЕЛЬЦА ПРОЧИТАН ВЕСЬ КОРПУС ФАЗЫ — И ОН ПОПРАВИЛ МОЙ ЖЕ ОТВЕТ В ЧЕТЫРЁХ МЕСТАХ (Д42, Д43). (1) «$11 за книгу» — реальная таблица эксп-22, но по ИЮЛЬСКОМУ прайсу. Пере-счёт тех же клеток по текущему: связка $4043 вместо $1314. (2) Развилка владельца ПОТЕРЯНА всеми планами: PLAN-17-08.md:105-119=РЕШЕНИЕ ВЛАДЕЛЬЦА, КОТОРОЕ ЖДЁТ ЕГО САМОГО — «черновая роль по НАШЕМУ ЖЕ правилу должна уйти с DeepSeek», luna $0.00357 против flash $0.00544. Ни в 21.08, ни в консилиуме, ни в 22.08, ни в моих Д38/Д41 этого пункта нет. ⚠ Приз развилки — 6%, а не разы: редактор съедает 85% связки, и строка плана «$40 против $23» смешивала смену ЧЕРНОВИКА со сменой РЕДАКТОРА. (3) «Однопроходка дешевле связки» снято прибором, который читает ОДНУ главуа по находке владельца (журнал §11) без черновика терминологу не из чего собирать банк, и «на одной главе банк не нужен, на книге в 1500 глав имена разъедутся». Кандидат K7 (однопроходка → майнинг банка из её выхода → фиксер) не мерен ни разу. (4) Конфликт приборов по замене редактора напечатан: Д41 даёт glm-5 неразличимым от dspro по слепому чтению, а счёт ошибок эксп-22 даёт R2 против R0 2.12, Холм 0.0188 — значимо хуже на zh. Кто прав — вопрос приёмке.

  • 30.08, ЖИВАЯ ВАХТА D39.92 ПЕРЕ-СНЯТА — ВЕНДОР-СТРАНИЦА DeepSeek ИЗМЕНИЛАСЬ, И ЭТО БЬЁТ ПО ВСЕЙ АРИФМЕТИКЕ РАЗМЫШЛЕНИЯ (Д44). curl HTTP 200, guides/thinking_mode, 108 336 байт, sha256 f28c4324…. Было (наша запись 10.08): две колонки, у deepseek-v4-pro low маппится в high, «рычаг бюджета размышления существует ТОЛЬКО у flash». Стало дословно: «identical for deepseek-v4-flash and deepseek-v4-pro», таблица одна, low → low; тумблер {"thinking":{"type":"disabled"}} подан как общий. ⇒ у якоря письма ПОЯВИЛСЯ рабочий рычаг размышления, которого не было при всех покупках фазы. ⚠ Это ДОКА, не поведенческая проба — по норме «слаг ≠ модель» перед деньгами нужна живая проба (единицы центов); сессия её НЕ делает без слова владельца. ⚠ Побочно с той же страницы, чего у нас не записано нигде: «Thinking mode does not support the temperature… will have no effect»наш temperature: 0.3 на deepseek-v4-pro молча игнорируется. ⚠ И: effort:"low" у DeepSeek пере-вооружает эхо-мину — рычаг есть, бесплатным не будет.

  • ЧИСЛА ПО ЛУНЕ ПЕРЕ-СНЯТЫ ПОКЛЕТОЧНО ПО ЗАПРОСУ ВЛАДЕЛЬЦА (Д44.6), И ОНИ БОЛЬШЕ, ЧЕМ Я ПЕЧАТАЛ. Однопроходка, те же 16 английских глав, тот же промт, finish=stop 16/16 у обоих: RN (deepseek-v4-pro) медиана $0.02011/клетка, сумма $0.4938 · RL (gpt-5.6-luna) медиана $0.00248, сумма $0.0392 ⇒ 8.1× по медиане, 12.6× по сумме, при качестве, которого прибор не разрешил. Вся разница — размышление: у якоря оно БИМОДАЛЬНО (466 … 19 559 токенов на главу), у луны прибито к ~1 000 явным low. НО ЭТО СРАВНЕНИЕ КОНФИГУРАЦИЙ, А НЕ МОДЕЛЕЙ, и ни одна прежняя строка этого не говорила: якорю ручку не слали вовсе (= high), испытуемому слали low. По собственной норме фазы (Д28) это РАЗНЫЕ армы. ⇒ Замер, который это разводит, стал возможен ровно сегодня (см. пункт выше): те же 16 глав, тот же промт, deepseek-v4-pro с reasoning_effort:"low", смета $0.050.10. Либо снимает с луны восьмикратное преимущество, либо подтверждает его при уравненных ступенях. Самая дешёвая и самая информативная покупка, какую фаза может назвать; ждёт слова владельца.

  • ТРЕТЬЯ ТИХАЯ ПОЛОМКА ОТ ПЕРЕЕЗДА МАШИНЫ, найдена исполнением 30.08: в eval/.env у ВСЕХ СЕМИ ключей пропали подчёркиванияDEEPSEEKAPIKEY вместо DEEPSEEK_API_KEY (и так же GEMINI/OPENAI/XAI/ZAI/KIMI/MISTRAL). Код читает os.environ["DEEPSEEK_API_KEY"] (eval/tenant_panel/roster.py:41=DEEPSEEK_API_KEY), load_dotenv отрабатывает, имени нет ⇒ любая покупка полигона падает KeyError. ⚠ Значения ключей не читались — снят только список ИМЁН и признак непустоты. Файл владельца не тронут, обёртка-переименовалка не написана (это запрещённый молчаливый обход). Чинится одной правкой на стороне владельца. ⇒ Класс назван: переезд ломает окружение МОЛЧА, и каждая поломка вскрывается только исполнением — до этого были пути ~/books (65 вхождений в 31 файле) и обнулённые mtime (Д35.2). Санкционированная владельцем покупка (Д45) стоит готовой и ждёт ровно этого: пре-рег заморожен, арм заведён, провод прочитан, промт сверен побайтно, смета $0.16 при свободных $0.285.

  • РЕЕСТР ПОТЕРЯННОГО (Д43) — прямой ответ на «не хотелось бы расти по энтропии». При каждой смене носителя курса часть намерений не переезжала, и никто этого не печатал. Собрано ~25 позиций: семь развилок на владельце · десять объявленных $0-замеров, которые не сделаны · три долга ЧУЖИМ зонам, где полигон обещал пинг и не пингнул · шесть выпавших из очереди покупок. 📌 Первое, что прошу оркестратора взять: экстрактор epub сносит границы абзацев (HANDOFF-21-08.md:152, консилиум поднял до «починка ДО любого нового en-замера»): пинг обещан 21.08 и так и не сделан, а весь английский материал фазы снят с испорченной подачей. Плюс: английский пар-пакет не заленджен в backend/prompts/. Норма, которую предлагаю завести: новый носитель курса обязан явно перечислить, что из старого НЕ переехало и почему.

  • Незакрываемое панелями, названо прямо: абсолютная база класса Б (Шаг 5.1). Читателя просят назвать худших ВНУТРИ панели — метка сравнительная, норма абсолютная. До отдельной абсолютной рубрики или человека норму «≤1 машинная глава на 25 глав Гу» печатать нельзя.

  • 30.08, ПОСЛЕ КОМПАКТА: КЛЮЧИ ПОЧИНЕНЫ ВЛАДЕЛЬЦЕМ, ПРОБНАЯ КЛЕТКА КУПЛЕНА ($0.038276) — И ГЛАВНОЕ ОНА ОТДАЛА БЕСПЛАТНО (Д45.5, Д46). Несущая улика — не размер размышления, а входные токены: при побайтно одинаковых messages (sha256 сверен исполнением) вызов без параметра дал prompt_tokens 3270, вызов с reasoning_effort:"low"3191, то есть 79. Два контроля детерминизма: замер 05.08 (дефолт и low вернули ОДИНАКОВЫЕ 2124) и пред-полётные пробы самого рига (84 · 84 · 84 · 84 на одном тривиальном запросе, четвёртая куплена 30.08 — то есть дефолтный счёт входа не сдвинулся через смену вендорского сервинга). ⇒ параметр low на deepseek-v4-pro ТЕПЕРЬ ДОХОДИТ ДО МОДЕЛИ, статус квирк-бюллетеня «НЕ УСТАНОВЛЕНО» закрыт в части «доходит ли» (новая запись 3г). ВЕЛИЧИНА среза — НЕТ, и это находка против моего же пре-рега: RN куплен 21.08, RNL — 30.08, а между блоками лежит документированная смена вендорского сервинга (её же зафиксировала вахта Д44) — сравнение приписывает ручке всё, что вендор поменял за девять дней; дрейф из §3б — второй конфаунд и слабее (у него есть знак, и он работает против нуля). Раздел Д45.3 «чего замер не закроет» не назвал НИ ОДНОГО — дефект найден пере-чтением ПОСЛЕ фриза 87dd124, печатаю против себя. ⇒ Лечение одно: оба арма в ОДНОМ блоке вперемежку — и такой замер КУПИТЬ МОЖНО, вчетверо дешевле замороженного: дизайн Д (интерливинг RN2 против RNL на восьми дешёвых главах) стоит $0.0780.133 при свободных $0.2472, n=8 пар, минимальный двусторонний p = 0.0078; гард кассы его пропускает (проверено по коду, гард не тронут). Пре-регистрация — Д47, заморожена коммитом, НЕ КУПЛЕНО: санкция владельца была на ДРУГОЙ дизайн, переносить её я не вправе. Рекомендация: пятнадцать клеток по фризу Д45 (дизайн А) не покупать ни при каком ответе; Д47 — по его слову. ⚠ Первая редакция Д46 утверждала обратное — «ни один неконфаундированный дизайн не влезает» — и это было НЕВЕРНО (пропущена дешёвая восьмёрка, при том что бимодальность нашла та же секция); сломал адверсариальный проход, разбор и цена ошибки — Д46.6, там же единственная находка прохода, которую я ОТКЛОНИЛ (корреляция по порядку вызовов: у всех 16 клеток RN один mtime, порядка не существует). Боевая ступень редактора не тронута (eval/tenant_panel/roster.py — правлен только комментарий, который до сегодня объяснял выбор снятой посылкой; гейт пака пере-снят, расхождение то же единственное mtime-шное).

  • 30.08, Д47 ЗАПУЩЕН ПО САНКЦИИ ВЛАДЕЛЬЦА И ОСТАНОВЛЕН ГАРДОМ ПОСЛЕ ПЕРВОЙ ПАРЫ — А КУПЛЕННОЕ ОКАЗАЛОСЬ ЦЕННЕЕ ЭНДПОЙНТА (Д47.6). Списано $0.134804, ФД-N 3.187585 из 3.30, потолок НЕ поднимался. Побайтно один промт, одна глава b065a92dc0, reasoning_effort не слался НИ РАЗУ: 21.08 модель думала 466 токенов, 30.08 — 17 757. ×38. ⚠⚠ ПОПРАВЛЕНО В ТОТ ЖЕ ДЕНЬ ПО ВОПРОСУ ВЛАДЕЛЬЦА (Д47.7): подавать ×38 как ЗАМЕРЕННЫЙ СДВИГ ВО ВРЕМЕНИ было нельзя — это разность двух ОДИНОЧНЫХ розыгрышей у модели с большим разбросом. По лучшей имеющейся оценке (sd логарифма 0.82 ⇒ одно sd = ×2.3, шесть групп «тот же тег, разные розыгрыши», 18 вызовов, судейская роль) ×38 — это ≈3.1 sd: редко, но возможно ⇒ причина НЕ УСТАНОВЛЕНА, обе гипотезы живы, а чистых повторов одного промта на роли onepass в корпусе НЕТ ни одного. И первый заход к этой оценке был бы десятой ошибкой дня: я сгруппировал вызовы по «модель·глава·роль», получил 100 групп и «разброс ×11» — а группы смешивают армы RN/RC/RB с РАЗНЫМИ промтами (на 27cb3a7e69: 7 061 · 498 · 18 043), то есть мерили разницу инструкций, а не розыгрыша. ⇒ Устояло то, что важнее причины: сравнивать одиночные розыгрыши нельзя ни при какой гипотезе — это осуждает и дизайн А, и МОЙ дизайн Д. Побочно Клейм 1 подтверждён на БОЕВОМ промте: prompt_tokens = 3256 и 21.08, и 30.08 (через девять дней и смену сервинга), а low двигает их ровно на 79; гейт провенанса пройден (Δpt=79, кириллица 1.000, латиница 0). Эндпойнт по правилу: внутри блока ручка дала ×1.40 (меньше ×2.52, полученных через девять дней — конфаунд эффект РАЗДУВАЛ), годных пар 1 из 8, знаковый тест p=1.0 ⇒ «НЕ УСТАНОВЛЕНО», добор глав после чисел запрещён. Носитель — eval/dovodka/stupen.py, написан ДО прихода клеток, селфтест стережёт, что порог достижим только единогласием. Смета ошиблась на порядок, и это моя восьмая ошибка того же класса: $0.0780.133 объявлялись ценой ВОСЬМИ пар, одна пара стоила $0.1348 — я оценил опыт по той самой базе, нестабильность которой опыт и должен был показать. Цена ответов теперь СЧИТАЕТСЯ, а не угадывается (Д47.8): при sd логарифма 0.82 парный дизайн ловит эффект ×2.5 за 13 пар (≈$1.1), ×2.0 за 22 (≈$1.8), ×1.4 за 93 (≈$7.6); отдельный дешёвый вопрос «модель сдвинулась или это кости» — четыре повтора без ручки на той же главе, ≈$0.31. Но приоритет не здесь: ручка даёт ×1.42.5, а рядом стоит рычаг ×711 — смена модели на gpt-5.6-luna (поглавно медиана ×7.1, по сумме ×11.4) — и он упирается НЕ в деньги, а в кап агент-сессий (нужно 16, свободно 14). Тратить доллары на ручку прежде, чем порядковый рычаг прочитан по КАЧЕСТВУ, — плохая экономика. ⚠ Операционное для чужих циклов: отказ гарда возвращает код 1, но в ФОНОВОМ shell set -e цикл не остановил — семь итераций вхолостую, $0.

  • 30.08, ПАНЕЛЬ luna1 ПРОЧИТАНА ВСЛЕПУЮ ПО САНКЦИИ ВЛАДЕЛЬЦА («Да, давай подниму кап»), $0 (Д48). Кап 200 → 215, израсходовано 201. Читались ЧЕТЫРЕ арма на 15 главах (16-я выпала: клетка RN не прошла гейт годности, пропуск напечатан): однопроходка на deepseek-v4-pro · та же однопроходка на gpt-5.6-luna · боевая связка · её вторая генерация как собственный шум прибора. Сначала поправка к моему же предложению: развилка владельца от 17.08 — про ЧЕРНОВУЮ роль, а её приз пере-считан в Д42.1 как 6%, а не разы (редактор съедает 85% связки) ⇒ читать «луну как черновик» значило бы потратить кап на шестипроцентный рычаг; читался порядковый (×711). Результат: средние места Z0 2.33 · ZF 2.33 · RN 2.53 · RL 2.80; близнецы расходятся на +0.00 при пороге 1.06 (прибор без смещения), якорь↔RN +0.20 при пороге 1.30 (p=0.79), якорь↔RL +0.47 при пороге 1.26 (p=0.58), очно RL против Z0 — 6:9. дешёвая луна НЕ ОТЛИЧИМА по качеству ни от дорогого дипсика, ни от связки.Но: разрешение прибора грубое — два прогона ОДНОГО конвейера расходятся на 1.33 места из 4, то есть разрыв луны это треть собственного шума; направление, хоть и незначимое, против луны; панель не трогает банк/консистентность на всю книгу, цензур-ось жанра и перенос на zh. Это ПЕРВЫЙ круг, вердикта ещё нет — правило конъюнкции требует повтора. Дисциплина: ключ закоммичен ДО ответов, обёртка — замороженный 15cfac60, модель читателей сверена ИСПОЛНЕНИЕМ (во всех 15 транскриптах claude-fable-5). Второй круг упирался в ОДНУ сессию — моя арифметическая ошибка при подъёме капа (осталось 14, нужно 15); резать панель до 14 глав решением сессии запрещено. ВТОРОЙ КРУГ ПРОЙДЕН (кап 215 → 220 по слову владельца, Д48.5): вывод ПОВТОРИЛСЯ, конъюнкция закрыта. Средние места круг 1 → круг 2: Z0 2.33 → 2.20 · ZF 2.33 → 2.53 · RN 2.53 → 2.60 · RL 2.80 → 2.67; якорь↔RL +0.47 (порог 1.26, p=0.58) → +0.30 (порог 1.11, p=0.77), то есть отставание луны во втором круге даже СОКРАТИЛОСЬ. Круги разведены по норме рига (ответы первого унесены в krug1/, второй писал по ТЕМ ЖЕ пакетам; свод первого из подкаталога воспроизвёл прежние числа до сотой); модель всех 30 читателей сверена по транскриптам. ⚠ Регистратор отработал как сторож: пере-заявить те же главы отказался, пока сессии первого круга не закрыты (ГОНКА СЕССИЙ). ⇒ однопроходка на gpt-5.6-luna неотличима по качеству от однопроходки на deepseek-v4-pro и от боевой связки на 30 слепых чтениях, при цене ниже — ⚠ но число «7.1× по медиане» я подавал НЕВЕРНО, поправка в Д48.6 по вопросу владельца. (1) В знаменатель попала ПУСТАЯ клетка дипсика (100b088f71, ноль знаков, та самая, что не прошла гейт годности): на 15 годных пар медиана 10.5×, по сумме 12.0×; побочно — непригодную клетку выдал дипсик, 1 из 16, у луны 0 из 16. (2) Тяжелее: медиану тут вообще нельзя приводить — распределение ДВУГОРБОЕ (восемь глав ≈2×, восемь ≈20×, посередине пусто), и она скачет 7.1 → 10.5 от выброса одной клетки. Честно: от 1.3× до 34×, и величина следует за тем, сколько дипсик надумал. (3) Разложение: 87% цены дипсика — размышление (разброс по главам ×42: 46619 559), у луны 49% и ×3 (5111 535); контрфакт «дипсик думает как луна» даёт всего ×2.9 — это чистый прайс и накладные, остальное объём размышления. (4) ⚠ Конфаунд в силе: дипсик ехал без ручки (дефолт high), луна на явном low; ручка стоит ×1.40 (Д47.6) — сузит, но не закроет. (5) ⚠ Воспроизводимость самой луны не мерена ни разу (0 групп повторов на 749 вызовов), а её reasoning_tokens подозрительно кратны 512 — возможен блочный учёт, проверить до смет. Переключение — решение владельца, и перед ним стоит незакрытый гейт, названный им самим 16.08: у однопроходки нет черновика, из которого терминолог добывает свидетельства для банка (Д42.3).

  • 30.08, ЖИВАЯ СВЕРКА ПРАЙСА GEMINI ПО ВОПРОСУ ВЛАДЕЛЬЦА — ОДИН ПИН ВДВОЕ ЗАВЫШЕН (квирк-бюллетень, раздел прайса; источник ai.google.dev/gemini-api/docs/pricing). gemini-3.1-flash-lite — пин верен ($0.25/$0.025/$1.50). gemini-3.6-flash: у нас $1.50/$0.15/$7.50, у вендора дословно «$0.75 through December 31, 2026», то есть выход сегодня $3.75 — наш пин это ПОСЛЕ-промо цена, сметы на этой модели завышены ×2.Пин я НЕ правил сознательно: roster.cost() считает клетки ИЗ ПИНА, и правка переписала бы стоимость 8 уже купленных клеток (Д32.11 — леджер есть оценка) ⇒ решение за владельцем. gemini-3.1-pro-preview верен для ≤200k, но у вендора есть не записанный у нас тир >200k ($4/$0.40/$18). И на странице есть gemini-2.5-flash-lite — $0.10/$0.01/$0.40 выход, втрое дешевле самой дешёвой нашей модели; в смету брать НЕЛЬЗЯ: 2.5-серия имеет shutdown 16.10.2026 и интермиттентный 404 при живом слаге, качество и эхо не мерены. Урок для всех пинов: промо-цена с датой окончания попадает в ростер как постоянная и тихо врёт — у пина обязана быть дата и оговорка о промо.

📌 ПИНГ ПОЛИГОНУ от оркестратора №19 (28.08, D39.164) — вендор-вердикт по Gemini для docs/experiments/00-provider-quirks.md. Материал добыт бэкенд-сессией (curl по вендор-доке, не пересказ), но файл — ВАША зона, вписываете вы. ⚠ Вендор-основание ДОСЛОВНО, со ссылкой и датами снятия, уже лежит в backend/configs/models.yaml у провайдера gemini (греп ВЕНДОР-ОСНОВАНИЕ) — сюда не переписываю. Строка 157 квирков несёт ТРИ утверждения сильнее источника: (1) «слой ФИЗИЧЕСКИ не может пронести больше одного системного» — вендор говорит про НАТИВНЫЙ systemInstruction, а что делает с двумя системными OpenAI-совместимый ШИМ, не документирует нигде; (2) «уход на нативный API проблемы не решает» — верно по сути, не по причине: Content.parts[] ПОВТОРЯЕМОЕ, и нативный API МОЖЕТ нести N системных текстов как N частей ОДНОГО Content; (3) «форум Google» — НЕ вендорский источник: тред discuss.ai.google.dev/t/86097 — два поста, оба от НЕ-сотрудников (staff=false), 30.05.2025, ответа Google нет, а читается наравне с нашим замером. Открыто честно: «выживает ровно одно» против «не выживает ни одного» не разрешено — маркер пробы приписан к msgs[0], и его отсутствие совместимо с обоими чтениями, а зеро-системного контроля в скрипте нет. Твёрдо: НЕ склеиваются (prompt_tokens 2994 → 535) и first-wins ложно. Дешёвое решающее доизмерение: тот же скрипт, маркер на ПОСЛЕДНЕЕ системное плюс user-only базовая клетка. ⚠ Граница: проба гонялась на gemini-3.1-flash-lite, а в цепочке эскалации стоит gemini-3.1-pro-preview — слой тот же, слаг другой. Для движка безразлично: склейка на нашей стороне заленджена (D39.164).

ИТОГ ПОЛИГОН-СЕССИИ 23.08 — ШАГ 1 ПЛАНА 22.08 ЗАКРЫТ (панель-0, $0). Отчёт целиком — секция Д32 docs/experiments/23-editor-tier.md; фризы bedc39a, 9e33a1b; денег не потрачено (панель собрана на уже купленных клетках). Вердикт (интеракция «архитектура × жилец на ИСПЫТАННЫХ жильцах», не минимакс): слабый жилец glm-5 РЕДАКТОРОМ над боевым черновиком неотличим от боевого deepseek-v4-pro в той же роли (разрыв средних мест +0.00, p=0.80), а ОДНОПРОХОДКОЙ различимо хуже (+1.12 места при пороге 0.99, знаковый p=0.0042, +13 фаталов p=0.0312) ⇒ буфер архитектуры существует и замерен — ⚠ на 16 главах. ДЛЯ БЭКЕНДА: в 2 окнах из 8 с первым лицом пол рассказчика по главе НЕ УСТАНАВЛИВАЕТСЯ вовсе (эталон снят вслепую тремя независимыми чтениями на главу), а полей пола в банке НЕТ (~/books/role-topology/bank-en.json, 25 терминов) ⇒ закрыть эти ~25% может ТОЛЬКО книжная память; смыкается со строкой бэклога 210. ⚠ ОТКРЫТО НА ВЛАДЕЛЬЦЕ: сверить $17.04 с реальным счётом DeepSeek может только он. Долг В21 (сверка кассы двумя путями) ИСПОЛНЕН, результат отрицательный: сверка на диске НЕВОЗМОЖНА в принципе — cost_usd вычисляется нашим же roster.cost (buy.py:93-95), а не приходит от вендора; на 213 клетках у четырёх вендоров из шести арифметика сходится до последнего знака, а «офф-пик = ½» в ЗАПИСАННЫХ ценах НЕ наблюдается.

⚠ Пинг оркестратора №18 — 20.08 (протухшие цены в квирках, чинить вашей рукой). docs/experiments/00-provider-quirks.md до сих пор утверждает, что цены после катовера НЕ изменились («flash $0.14/$0.28»). Это опровергнуто пере-пином 1315.08 (D39.137): таблица запинена ПИКОМ — flash 0.44/1.32 при кэш-хите 0.014, pro 1.32/3.96 при кэш-хите 0.044 за 1M (сверено с backend/configs/models.yaml:231,247=cached_per_m и телом D39.137 §2а), и счёт шиппинга = 100% DeepSeek ⇒ ×4.24.4 в пике. Квирки — ваша зона, рукой не трогаю; поправьте при ближайшем касании, потому что по ним считают деньги проб. ⚠ ВТОРОЙ пункт этого пинга СНЯТ 05.09 как ЛОЖНОЕ ОТРИЦАНИЕ оркестратора. Он утверждал, что факт про пиковые окна цен «в квирках ОТСУТСТВУЕТ (греп = 0)». Факт ТАМ ЕСТЬ (docs/experiments/00-provider-quirks.md, греп ПИК DEEPSEEK) — и несёт поправку, которой не было в моей копии: пик только ПО БУДНЯМ, выходные целиком идут по офф-пику. То есть оркестратор, живший по своей копии, отодвигал платное на вдвое дороже по выходным. Копия снята, единственный носитель — квирки. Отрицание было получено грепом, который не мог сработать; урок общий: команда, на которой стоит отрицание, приводится в тексте, чтобы её мог воспроизвести другой. ⚠ Третий пункт того же аудита (eval/README.md держит мёртвый СТОП на платные прогоны) сведён ниже, в пинг №20 — один носитель на факт.

ВТОРОЙ пункт этого пинга ПЕРЕ-СНЯТ 05.09: спора нет и не было. Он утверждал, что квирки и docs/STACK.md говорят «ручки эффорта у deepseek-v4-pro НЕТ» — оба говорят ОБРАТНОЕ (квирки §3г: «параметр low на pro ТЕПЕРЬ ДОХОДИТ ДО МОДЕЛИ», $0.038276, 79 prompt_tokens; STACK.md:11 — то же). ⚠ Это был ЧЕТВЁРТЫЙ носитель фантомного противоречия, снесённого D39.200 п.4(а), и он пережил первую зачистку. Живой остаток один и он не спор: вендор-сверка САМОГО МАППИНГА (low → что именно) и ВЕЛИЧИНА эффекта — замера поведением после 13.08 нет ни у кого. Это боевой РЕДАКТОР и апекс эскалации. Закрывается вендор-сверкой, а не выбором стороны (гардрейл владельца) — и вы это только что делали по Gemini, то есть заход дешёвый. Носитель в трекере — строка 237(б).

ПИНГ ОРКЕСТРАТОРА №20 ЗОНЕ — ТРИ ПРОТУХШИХ МЕСТА, все три ЖИВЫ на 02.09 (правки зонные, рукой не трогаю).

  1. eval/README.md первой врезкой держит СТОП на платные прогоны — «Платные прогоны/докупки СТОП до ре-пробы (бэклог-строка 74)». Строка 74 закрыта (D39.95), ограничение пало лендингом 112 (D39.97), pipeline-c1.yaml несёт reasoning: "low" с объяснением, а зона всё это время платно гоняет фазу Д: врезка объявляет запрещённым то, что делается ежедневно, и этим обесценивает все прочие ⚠ в файле. Живым из неё остаётся только ⚠0731 (смена весов под слагом) и стохастичность эха. ⚠ Пункты 2 и 3 СНЯТЫ 05.09 — зона их закрыла, пинг об этом не знал. (2) eval/README.md:40 уже говорит «не один скрипт, а зона из ~40», а docs/experiments/README.md несёт строки и 22, и 23 (:40, :41). (3) naklon.py в main ВЛИТ: git ls-tree -r HEAD --name-only -- eval/ | grep -c naklon → 1, и в eval/dovodka/ у HEAD 90 отслеженных файлов, а не 42. Живым остаётся только пункт 1.

ФАЗА Д «ДОВОДКА ЭКСП-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), живая до приёмки фазы Д: просьба хендоффа «эррата zh-канона: пере-сборка = правка закрытой оси, ратифицирует оркестратор» (docs/POLYGON_PHASE_D_HANDOFF.md, греп Пере-сборка = правка закрытой оси — файл дирти, номер строки не ставим по норме D39.179 п.4; завышение +0.0039, вердикты не двигает) — к ПАРАЛЛЕЛЬНОМУ оркестратору при приёмке, не к движковому (приёмка фазы Д — его зона, №17 полигон не трогает по слову владельца). Прожитое из записи (вторая передача и мелочи аудита корпуса) — archive/reports/CORPUS_AUDIT_2026-08-15.md; санкции владельца по деньгам фазы и замене ja-книги — D39.136 п.1.

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