377 KiB
Журнал прогресса
⟶ ТЕКУЩЕЕ СОСТОЯНИЕ (на 2026-09-04, голова D39.190 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). ОЧЕРЕДЬ №22 (единственный носитель — здесь; роль передана 01.09, №21 закрыт нотой передачи D39.184). ⚠ ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ПЕРВЫМ: (0а) ревизия документации на ПРОТУХШЕЕ — по всем зонам, не только тронутым; (0б) планы доработок в БЭКЕНД и ПЛАТФОРМУ по остатку бэклога и регистра; (0в) вынос неактуального в АРХИВ (
docs/archive/,platform/docs/archive/) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): 94 живых дока вdocs/(пере-счёт 04.09:find docs -name '*.md' -not -path 'docs/archive/*' | wc -l), 8 вplatform/docs, 9 вbackend/docs— ⚠ из 94 ВРЕМЕННЫЙ остался ОДИН (DOC_CLEANUP_PLAN, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали вarchive/reports/02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 95 (major 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) РАЗРЫВ ЦИКЛА: книга не отдаётся файлом ПОЛЬЗОВАТЕЛЮ — открыта ПЛАТФОРМЕННАЯ половина. Движок пишет файл с 30.08 (tmctl build— EPUB 3 + чистый txt, D39.175), и холодный прогон 31.08 предъявил это живьём: собранный EPUB настоящего перевода прошёлepubcheck0/0/0/0 и передан владельцу. Открыто ровно одно: канон обещаетcreateExport/getExport, а платформа их НЕ монтирует (смонтировано 15 операций из 20; нет такжеgetRun,updateBook,deleteBook). Долг числится с P8 (platform/BACKLOG.mdП-17), и НИ ОДИН пак платформы после P7 его не взял (проверка вместо ручного счёта, чтобы не гнило при каждом лендинге:grep -rn 'createExport\|getExport' platform/internal/ --include=*.go— пусто). Слово «отдаёт результат» ложно по букве ТОЛЬКО платформенной половиной (п.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.yaml—0.2.3против канона0.9.0, и первый из них — ЛОМАЮЩИЙ 0.3.0), 16 операций против 20; отставание ратифицировано 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 main→ rc 1,git log main..origin/main→afa7700 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. Прожитые дампы приёмок 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.130–137, одна строка на ноту).- Открыто на владельце: после пака «писатель книги» (D39.175): лестница D25.1 — какая ступень даёт читателю копию БЕЗ пометки и что печатать на титуле/в имени файла · лейбл главы без заголовка (сейчас цифры; словесный шаблон = одна строка
reader.txtпосле ратификации К-3) (⚠ три вопроса пака ЗАКРЫТЫ словом владельца 30.08: экспорт юзеру — всегда строить, см. п.4 очереди · модель пометок подтверждена как построена — надпись о пропуске в файле, отдельный варнинг-слой в интерфейсе НЕ строим, машинный отчёт сборки остаётся внутренним носителем (дрейф) · RTL — снят до появления право-налевой целевой пары) · ⚠ ПЛАТФОРМЕННЫЙ ЛИСТ ЗАКРЫТ СЛОВОМ ВЛАДЕЛЬЦА 30.08 — четыре ответа и их следствия ЦЕЛИКОМ телом D39.176 (квот нет · продажа не в бете · продолжение после пополнения — руками · фразы пользователя делегированы проекту с требованием интернациональности). ⚠ Лист ПУСТ: последний его пункт (PD-421, «держит ли открытый поток сессию живой») СНЯТ замером 30.08 — окно бездействия сессии 14 суток, абсолютный срок 30 (platform/internal/config/config.go:266=SessionIdleTTL), скольжение окна идёт на любом аутентифицированном запросе, а поток теряется лишь после того, как подметён протухший ряд, то есть после ДВУХ НЕДЕЛЬ без единого действия пользователя. ⚠ Часовой интервал в этой теме — периодичность УБОРКИ, а не срок сессии (эррата 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.136–145, здесь не держатся.- Сделано (сводно) — снимок ленты закрытых эр в archive/PROGRESS-2026-08-04-09.md; детали — D-лог и слайсы.
- Курс: этапы ОБЩНОСТЬ · КАЧЕСТВО БАНКА · ПАКЕТ-ЧЕКЕРОВ · ФРОНТ-ЭРА · шов/платформа/движковые блокеры — ПРОЙДЕНЫ (D39.59–123). Хвосты курса живут строками: 16 (полная цена холодного старта; edit-волна на малых прогонах отработала и оплачена — 58 вызовов волновым драйвером 23–25.07 плюс 648 до драйвера, счёт по леджерам
~/books/gu-zhenren/**/*.db) · 46 (дизайн заморожен D39.92/93, промт ждёт выдачи) · coldrun-b фаза C заморожена чекпойнтом легитимно (D39.86; эталон денег/поведения — coldrun-a, read-only); развилка 0731 решена и исполнена (D39.87/91, код553f1a3).- Горизонт (D39.62/67, освежён D39.95): ДОБОР ИДЕАЛА (первым прогоном: оси голоса 24 · авто-режим · цена 16; жильцы ролей решаются ДО прогона эксп-22 — строка 149 · веса K1–K12 13а · вне-претрейн чекпоинт 55; остаток арбитража банка = рецензент спорных кластеров при ре-пробе 74 — D39.102) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 62–68, 85) → Ф3 ридер-IDE (69–71). Стоячие: ToS-триггер 25.10 · Ш-2 до go1.27 (⚠ + x/text Unicode 17 тем же тулчейном — строка 119, реестр §Б-108 справочника якорей) · платные прогоны разблокированы (проба провода — D39.97, конфиги 112 залендены).
- Стек (полная карта роль→модель→конфиг→квирки — STACK.md, D39.126): draft deepseek-v4-flash thinking-ON
low⚠0731 → терминолог (та же модель) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (топология ПОДТВЕРЖДЕНА при неразличимости жильцов — D39.117; закон-блок ОБЯЗАТЕЛЕН — строка 134; glm-5 резерв; вахта маппинга эффорта pro — §Б-108) → судья gemini (Ф2, в движке НЕ построен — строка 33); канал B Mistral+grok; ~$0.85/ранобэ (D30.4) — ⚠ ТРИГГЕР ПЕРЕ-КАЛИБРОВКИ СРАБОТАЛ 31.08 (испр. 02.09): платный прогон отработал и дал собственную оценку движкаprojected_book_usd = 1.1377277707на десяти главах при куплённых $0.436110; число D30.4 держать как июльское. ⚠ Вендор-факты 13–15.08 (пере-пин ИСПОЛНЕН и ПРИНЯТ, D39.137): таблица цен запинена ПИКОМ (flash 0.44/1.32 · pro 1.32/3.96/кэш-хит 0.044 за 1M; счёт шиппинг-c1 = 100% DeepSeek ⇒ ×4.2–4.4 в пике / ×2.1–2.2 в долине — замер по трём прогонам); ⚠ про эффорт pro носители ПРОТИВОРЕЧАТ, до вендор-сверки в силе канон — разбор строкой 237(б); ⚠ ВЕСА pro сменились под тем же слагом (V4-Pro-0813, класс D39.61) — вахта-риг готов (остаток 172); покупки фазы Д на deepseek до 16.08 16:00 UTC — по старым ценам. ⚠ ВЕСЬ банковый контур (банкнота+терминолог+классификатор) в shipping-c1 НЕ включён — жив ран-локальным конфигом книги (строка 140; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping заbudget_usd: 0(STACK.md §примечания).- ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). СЧЁТ ОЧЕРЕДИ на 30.08 (скриптом по таблице —
python3 docs/scripts/counts.py; обновлять при каждом лендинге): всего 186 строк · зона бэкенд 85 строго / 121 широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · блокеров очереди 0 (236 закрыта D39.175), платные прогоны разблокированы · «скоро» 54 (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строки эксп-22: 55·153 (плюс 150 — руки владельца); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).- Архивы хроники:
archive/PROGRESS-2026-07-04-10.md(D31) ·-10-13(D39.6-гигиена) ·-13-25(стройка паков 11–16, rerun2) ·-25-31(паки 17–20 · мини-прогон · полигон-пакеты 5–8 · ToS · холодный прогон; D39.26–58) ·-08-01-02(сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.59–90, срез D39.105) ·-08-02-04(сессии №11–№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91–105 + снимок шапки эры №15) ·-08-04-09(пинги закрытых паков эры №15) ·-08-14-15(закрытые бэкенд-записи №16–17: эмиттер шва · migrate · пере-пин DeepSeek; вынесено D39.139). Записи ниже — живой хвост (№16+, эра D39.124+; подрезка D39.139).
📌 СОСТОЯНИЕ ПАКОВ
Залендены и ратифицированы, приёмочные дампы — телами нот: платформенный P11 — D39.169 · движковый пак «деньги» — D39.170 · платформенный P12 — D39.180 (вместе с контрактным минором 0.9.0; PD-425 закрыт им же) · бэкенд-пак «деньги и честность выдачи» — D39.182 (тестов 1045→1083, удалённых ноль) · закон раскрытия движка — D39.181, ратифицирован владельцем и применён к одиннадцати экземплярам.
ВЫДАНЫ 04.09 и РАБОТАЮТ ПАРАЛЛЕЛЬНО (зоны независимы по коду; сцепление одно — форма манифеста ЗАМОРОЖЕНА на время окна, чтобы бамп не сорвал платный прогон платформы, D39.190 п.5): бэкенд — вайр-батч docs/BACKEND_WIREBATCH_SESSION_PROMPT.md; платформа — «закрыть цикл» docs/PLATFORM_EXPORT_SESSION_PROMPT.md. ⚠ Строка 160 взята, но идёт СВОИМ паком ПОСЛЕ двери: она бампает manifestVersion, у которого безопасного порядка деплоя нет (D39.190 п.2). Строка 142 — после шагов 0–1 полигона (D39.190 п.3).
Предыдущие паки ОТРАБОТАНЫ 03.09, ПРИНЯТЫ С ДОФИКСОМ и заленджены (
D39.187движок,D39.188платформа; промты вarchive/prompts/с баннерами исхода; следующие паки ПЛАНИРУЮТСЯ —NEXT_PACKS_PLAN.md, промты не выданы до обоюдного «ок» оркестратора и контролёра, слово владельца 03.09): платформенный P13 «шов возврата оплаченного прогона» (docs/PLATFORM_P13_SESSION_PROMPT.md:PD-168бюджет из холда ·PD-89ключ на пути ошибки ·PD-426/PD-214чужая строка не карантинит проекцию ·PD-374гейт батареи · гейт против класса серьёзности · строка рантбука деплоя) и бэкендовый «число согласия на пути второй покупки» (docs/BACKEND_CONSENT_SESSION_PROMPT.md: ФЧ-5 ось модели · строка 232 остаток слота · ФЧ-4 обе половины · ФЧ-1 три гарантии). ⚠ Сцепление по деплою названо в обоих: у формы манифеста БЕЗОПАСНОГО ПОРЯДКА НЕТ — гейт интейкаplatform/internal/ingest/manifest.go:112=if m.Version != KnownManifestVersionсравнивает со строгим равенством одной константе, окна двух версий нет; рантбукplatform/deploy/README.md:217=сначала платформа, потом движоксоветует обратное и отдан на починку паку P13 пунктом 6.
⛔ Проводка --max-units в платформу остаётся ГЕЙЧЕНОЙ. Живое основание одно и оно механическое: единственный писатель bank_moved_at — дверь правок банка (platform/internal/runs/bank.go:182), а рост АВТО-банка от майнинга этого флага не ставит, поэтому майнящая книга на второй покупке идёт без --resnapshot и умирает на снапшот-гарде движка — холд взят, попытка сожжена (PD-422). Это чинится проводкой признака движения банка от майнинга, а не решением владельца.
ОТКРЫТО НА ОРКЕСТРАТОРЕ №22:
Ресёрч-сессия ЗАКРЫТО 04.09. Оба отчёта топологии заленджены полигоном на СВОЕЙ ветке по прямому указанию владельца (textmachine-36 — лендинг research/29a7951a7) и приехали в main мержем ветки — то есть маршрутом, который и был назван правильным. Файлы на месте: docs/research/29-harness-topology-survey.md и …-codex.md.
⚠ ЖИВОЙ ОСТАТОК — РЕВЬЮ-ШАПКИ. Условие лендинга, согласованное с сессией, требовало шапки «что доказано / что СНЯТО / что не проверено»; её нет ни у 29, ни у 30, а шапка самого 29 до сих пор говорит «НЕ закоммичено — лендинг за оркестратором». То есть доки приехали против собственных условий. Ставит шапки оркестратор; до них читать оба отчёта как ФАКТУРУ, а не как ратифицированное. ⛔ МАРШРУТ ЗАКРЫТ СЛОВОМ ВЛАДЕЛЬЦА 02.09: «не трогай соседнюю git tree ветку вообще». №22 внёс этот файл в
mainкопированием из соседнего worktree и был поправлен дважды: файл принадлежит веткеpolygon, вmainему делать нечего. Лендинг ОТКАЧЕН (git revert, файл в чужом дереве восстановлен байт-в-байт). ⚠ Следующей смене: не повторять — ниcp, ни чтением, ниgit -Cпо соседнему дереву. Открытый вопрос владельцу: файл лежит на ветке зоны, значит и коммитит его та зона своей рукой, а вmainон приезжает мержем ветки; подтверждения этого маршрута нет, поэтому обязательство висит. Состояние на 01.09: файл лежит в СОСЕДНЕМ worktree/home/ubuntu/projects/textmachine/docs/research/(незакоммиченное между worktree НЕ ВИДНО —git statusв main-дереве пуст по построению), вырос до ~302 КБ, сессия idle и «готово» не прислала. ⚠ Условия лендинга, согласованные с ней: ратифицировать НЕЧЕГО (ресёрч-фактура, не решение) · нужна ревью-шапка (что доказано / что СНЯТО / что не проверено) · её §4 и §5 остаются obstacle-секциями · её собственный адверсариальный проход дал 86 находок и 20 записей класса блокер, из которых 15 РАЗЛИЧНЫХ и все исправлены (5 были дублями разных рецензентов) · незакрытый долг назван ею самой: 49 находок класса ВАЖНОЕ и 17 мелочей. ⚠ Формулировка для шапки, точнее оркестраторской: судья как СТАДИЯ ДВИЖКА не построен и не вызывался (0 вызовов), но судьи в ПОЛИГОНЕ были и есть — без этого различения следующая сессия выбросит замеры топологии.
НОРМЫ, ЗАРАБОТАННЫЕ ЭТИМИ ПРИЁМКАМИ:
- Зелёная батарея — это ПОЛНЫЙ список пакетов ПЛЮС отсутствие FAIL, а не отсутствие FAIL: обёртка
подавала
exit 0при падении в хвосте (поймала сама движковая сессия). - Линтер якорей гоняется ПОСЛЕДНИМ шагом, после того как код замер. Он судит доки трёх зон, но зоны его не зовут; в этот заход нашёл 21 указатель на исчезнувший код, и правки сдвигали цели дважды подряд — включая мои собственные, уже после починки.
- Якорь разрешается тем, ЧТО он утверждает, а не номером строки, на которой лежал (движковая сессия записала переезд по совпавшему номеру и промахнулась предметом).
- Колонка «подтверждено» отчёта, пойманного на ложных подтверждениях, снимается с доверия ЦЕЛИКОМ — критерий, отличавший ошибочные строки от верных, назвать нельзя.
pkillпо имени процесса на машине с параллельными сессиями бьёт по чужим.- Число или «доказано» уходит владельцу только после СВОЕГО прогона.
Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора)
Закрытые строки здесь НЕ хранятся — они уходят в D-лог с номером решения. ID строки стабилен навсегда (не перенумеровывается и не переиспользуется — на «строку N» ссылаются доки и промты, D39.80). Вес: «блокер-очереди» = мешает текущему шагу · «скоро» = ближайшие 1–2 касания · «когда-нибудь» = записано, не потеряно. Длинная строка начинается жирным лидом — таблица сканируется по лидам; «диспозиция сверху, археология вниз», ячейка >800 байт — кандидат на выселение в architecture/13-tech-debt-anchors.md (D39.125 п.3/D39.126). ⚠ Счёт очереди — НИЖНЯЯ граница долга, а не потолок: трекер содержит только замеченное, и 02.08 дважды за $0 свежие глаза вытащили из кода дефекты, которых в нём не было (релей фронта → строки 99/100/102; приёмочное ревью → третий шов в 104 и честность в 105); ленту ✅ шапки читать как «долга нет» неверно (D39.89). Зонные бэклоги (решение владельца 02.08, D39.84): фронт и платформа ведут СВОИ бэклоги (frontend/docs/BACKLOG.md · platform/BACKLOG.md) — их строки сюда НЕ заходят; здесь движок/полигон/доки, включая движковые стыки фронта (зона «бэкенд», как 99–102); строки 96/97 переехали в платформенный (П-1/П-2), надгробия-указатели сохранены.
| ID | Хвост (одной фразой) | Зона | Вес | Чем закрывается | Источник |
|---|---|---|---|---|---|
| — ВИСИТ НА ВЛАДЕЛЬЦЕ — | |||||
| 2 | Четыре вопроса границы «алгоритмического идеала» (Annotator · семантический судья · ja→ru §B5 · ru-target до/после) | владелец | скоро (гейт «добора идеала» перед МАСШТАБОМ) | отдельное решение | D39.33, D39.38 |
| 4 | Ре-чек ToS по триггерам — первый ИСПОЛНЕН 31.07, дельт вердиктов нет (D39.57); предмет Google-мониторинга перевешен на цепочку договора (PUP · Additional ToS · Google APIs ToS); следующие: квартал 25.10.2026 · первая лейблованная книга · любая правка accepts_labels |
владелец/полигон | скоро (следующий триггер 25.10.2026) | отдельное решение (правило) | D39.32, D39.57 |
| 5 | Арбитраж банка: замер ИСПОЛНЕН и ПРИНЯТ (research/24, D39.102). Закрыто классом: равноправный совет · кросс-модельные веса уверенности · self-consistency · селекция из вариантов · отказ-сигнал ⟦TM-NO-DST⟧; Q2 отвечен — семейства не окупаются (C3−SC=+3 и все три добычи = один кластер; glm-соло 25/45 > совет 23/45). ОСТАТОК СТРОКИ: рецензент-другого-семейства ТОЛЬКО на спорных КЛАСТЕРАХ (слот при ре-пробе 74), роутинг целыми family/series-юнитами (G4), эмиссия рецензента — та же draft/⟨проверить⟩. История захода — D39.89/90/101/102 | полигон/ресёрч | ОСТАТОК ГЕЙЧЕН ре-пробой 74 (D39.102 п.2) | замер (остаток) → решение | D39.89, D39.102 |
| 6 | Строка Gemini в accepts_labels — ждёт слова владельца о подписи интерпретации сужения как разрешения; ре-чек 31.07 понизил приоритет: подпись даёт ПРАВО, но не судью 18+ (фильтр неконфигурируем D22.6 + обход запрещён договором) — возвращаться при вопросе, требующем именно права |
владелец | когда-нибудь | отдельное решение | D39.32, D39.57 |
| 7 | Q2 «редактор под sexually-explicit» (grok-4.3 интерим · glm-5 после сверки ToS Z.AI · mistral вон) |
владелец | когда-нибудь (перед первой explicit-книгой) | отдельное решение | D39.27 п.7 |
| 8 | D22.7 пер-чанковый L3-скрин — неснятое предусловие первой erotica-книги в проде, отдельный гейт | владелец | когда-нибудь | отдельное решение | D22.7, CURRENT-STATE (оркестратор) |
| 9 | Промпт-слой под лейблом: лейбл не доезжает до промпта — должны ли переводчик/редактор знать о свойстве контента | владелец | когда-нибудь | отдельное решение | CURRENT-STATE (владелец, из пака-17) |
| 10 | Дата создания аккаунта OpenAI (низкий приоритет, OpenAI вне цепочки) + применимость OpenAI Sharing & publication policy 2022 (quirks:128) | владелец | когда-нибудь | отдельное решение | D39.32 |
| 11 | Флип coverage-гейта (enabled:false, D12-Q4) — за подписью владельца ; при флипе решить судьбу v1.1 quote-absorption (D12-Q1, Python-first лок-степ) |
владелец | когда-нибудь | отдельное решение | D39.34(2) |
| 12 | postcheck_gate в hard-gate — требует пере-замера recall (recall чекеров измерен и низок); ⚠ «fn=0» демоции #10 класс-вакуумен на labels (ноль одно-Han-позитивов, D39.78) — пере-замер обязан добрать одно-Han-позитивы, на «fn=0» не опираться; одно-Han-класс при gate-on вне гейта (Unverified+Demoted); тем же решением строится HARD-value-детектор 成/万 (Q3 §6 — честный hard-gate требует value-чека; либо раньше при ненулевом потоке value-дефектов добора, D39.79; $0-прототип получен эксп-21: battery.check_numbers, симметричный разбор, синтетика 16/16 — D39.117) · recall существующих гейтов печатал арм C эксп-21 на контаминированном срезе (D39.108/D39.117) |
владелец | когда-нибудь (после фазы 2) | отдельное решение | D39.34(2), D24.4+D28.1, D39.39, D39.78, D39.79 |
| 13 | Включение платной петли ремонта + per-class исходы ремонта (схемное решение принимается вместе) — вернуться при расширении классов детекторов и ненулевом остатке; ⚠ при включении: репэйр-гард №5 после #10 слеп на одно-Han-дифференциал (демоция в обоих прогонах ⇒ 0>0 — репэйр, стёрший верно отрендеренный одно-Han-термин, не ветируется; D39.78-ревью) | владелец | когда-нибудь | отдельное решение | D39.38, D39.39(а), D39.78, CURRENT-STATE |
| 13а | Веса рубрики K1–K12 не выбраны (Q1: «по данным фазы B»; фаза B прошла на BWS без весов — выбор нужен к агрегатной приёмке качества книги) | владелец | когда-нибудь (к пилоту) | Ф2.5 / отдельное решение | D39.44 Q1, D39.46 |
| 13б | speech-cue.txt zh НЕ шипить до замера голос-флаггера; замера НЕТ (D39.86) — оси не считались НИ РАЗУ. ⚠ Причина ПЕРЕ-НАЗВАНА: прежний довод «редакторская волна не гонялась» ПРОТУХ 31.08 (холодный прогон coldrun-v16 её гонял и оплатил — строка 16); живой блокер — ПУСТОЙ РЕЕСТР профилей, см. ниже. Гейт: первый прогон добора идеала С редакторской волной И подписанными профилями (строка 24) → решение владельца о шипе. ⚠ Сам гейт в схеме ЕСТЬ (internal/config/pipeline.go VoiceGate, пак-19/D39.55). ⚠ rules= в отчёте = «гейт СКОНФИГУРИРОВАН», не «отработал» — до фикса 105 читать по знаменателям replies=. Археология дословно — architecture/13-tech-debt-anchors.md §Б-13б. ⚠ ПОПРАВКА 23.08 (№19): заполнить voices:/addresses: может только подпись владельца (internal/seed/seed.go:23=Voices and Addresses are the two D21 record types — «no miner emits them»), а при пустом реестре RunVoiceChecks выходит на !reg.HasData() ДО ВСЕХ осей, поэтому нулями отдаются и оси, и знаменатели — «ноль флагов» неотличим от «оси не считались». ⚠ Отдельно: gates.voice отсутствует в backend/configs/, НО в конфигах реальных прогонов (вне git) он ВКЛЮЧЁН — ~/books/gu-zhenren/coldrun-a/pipeline.yaml:68 и coldrun-b:71, enabled: true; дыра не «оператор забыл включить», а «шаблоны репозитория гейт не несут» |
владелец | отложено-до-замера | первый прогон добора идеала С РЕДАКТОРСКОЙ ВОЛНОЙ (оси голоса, строка 24) → отдельное решение | D39.56, PACK19_BUILD §7.2, чат 31.07, D39.86 |
| 14 | Четыре data-инженерных флага фазы-2 общности, каждый с рекомендованным дизайном (§5 отчёта): ё-фолд → target-данные (char_fold; смена сигнатуры core-примитива через вердикт-несущий банк, сдвиг memory_version) · segmentation-фолбэк громким (ломает контракт corridor-фолбэка pipeline.go:839-848 + голден-фикстура на нём; лечение — объявить блок в голден-yaml) · Fertility per-script map (калибровка ждёт боевого токенизатора) · source-encoding.txt + Go-реестр декодеров |
владелец | когда-нибудь (следующий пак общности) | отдельное решение | D39.64, GENERALITY_PHASE2 §5.1–5.4 |
| 86 | Мелкие открытые решения одним списком (свип D39.66): echo-семантика дропнутого c-lite-члена (D39.18 — оставить pre-c-lite?) · magnitude-кап тяжёлой CJK-утечки (D38.3 п.4в; сейчас strip+flag) | владелец | когда-нибудь | отдельные решения | D39.66, D39.69(feed_cap закрыт §1) |
| — ХВОСТЫ ХОЛОДНОГО ПРОГОНА (исполнен достаточно, D39.58; Р7 владельца) — | |||||
| 16 | Полная цена холодного старта — ЖИВОЙ ОСТАТОК ОДИН: цена ДОВЕДЁННОЙ ДО КОНЦА книги не измерена. Холодный прогон coldrun-v16 31.08 отдал 3 юнита из 14 и остановлен снапшот-гардом. ⚠ Довод «редакторская волна не гонялась» ПРОТУХ 31.08 (испр. 02.09): она гонялась и оплачена — 4 чекпойнта edit/editor/deepseek-v4-pro на $0.214865; не мерена именно ПОЛНАЯ цепь одним заходом до конца книги. Числа ДО редактуры — база прогона ~/books/gu-zhenren/coldrun-b/reprobe/bank-low/guzhenren-bank-low.db (10 глав, low на черновике И на бэнк-ролях; арифметика снята 23.08 №19): вся ДРАФТ-стадия $0.031639 (flash $0.021289 + pro $0.010350) · терминолог $0.005750 · классификатор $0.007706 · весь заход $0.045095, слагаемые дают именно его. ⚠ Числа в ИЮЛЬСКИХ деньгах — множитель пере-пина DeepSeek 4.47 (D39.179 п.1), сегодня тот же заход $0.2017. ⚠ Фаза C coldrun-b закрыта владельцем как неуспешная (02.08, D39.90), её деньги не тронуты ($0). Строка держит и оси голоса (13б/24) |
бэкенд | когда-нибудь (гейт: первый ЗАВЕРШЁННЫЙ прогон) | добор идеала | D39.58, D39.90 |
| 18 | Эмиссия головы 蛊: сид-половина = чек-лист (определяющий терм книги сидится allow_short, D39.50); эмиссия-КАНАЛ демотирован до ИЗМЕР-ГЕЙТА (Q7): полигон-замер «меняет ли эмиссия головы рендер композитов» — строить ТОЛЬКО по эффекту и ПОСЛЕ #10 (однознаковый пост-чек чинится чекер-паком); перед стройкой резолвить K-гейт и KWIC-грязь одиночной головы |
полигон → бэкенд | скоро (санкция Q7 D39.70 — после #10, очередью с ре-пробой) | полигон-замер → решение | D39.58, D39.60, D39.69 |
| 24 | Остаток: авто-режим флага (проект Б не гонялся) · оси голоса A–D (профили не подписаны; черновик готов — coldrun-a/SIGN-PACKAGE.md §3) ; + слот инъекции голоса и решение gates.voice при ненулевых осях (D39.55/D21 п.2) · слой-2 voice не строим до доказательства слоя-1 · сверить until_ch 白凝冰 при курации сида (D19.3в) |
бэкенд | когда-нибудь (первый прогон добора идеала) | добор идеала | D39.40, D39.58 |
| — ТЕКУЩАЯ ОЧЕРЕДЬ (D39.59) — | |||||
| 78 | Леджер денег = НИЖНЯЯ граница: «2xx body decode failed (call IS billed)» — провайдер списал, исходная попытка в request_log НЕ попадает (≤$0.009/сессия); дизайн фикса ГОТОВ (GENERALITY_PHASE2 §5.6: BilledDecodeFails + per-billed-attempt settle с Estimated=true), но это money/ledger-путь — не $0-хастл. Живое число (D39.86): на ре-пробе 74 — 3 таких вызова на 14, неизвестность $0.015111 при леджере $0.114378 (13% захода); движок засеттлил оценку и честно напечатал estimated-cost rows: 3 ⇒ канал ВИДЕН, но decode_error при этом ещё и терминален (не retryable, не escalatable) — 3 из 7 терминальных флагов пробы A |
бэкенд | когда-нибудь (money-паком) | отдельное решение (дизайн §5.6) | D39.61, D39.64, D39.86 |
| 79 | Граница ПЛОТНОСТИ письма для серий: enabled через Go-константу cjkScriptNames — новый плотный скрипт требует правки Go (head-finality уже в данных script-series.txt; пре-существующая граница, D39.75). Первые два компонента строки (isCyrLetter→isTargetWordLetter · magnitude SourceScripts-гейт) исполнены пакетом-чекеров, D39.78 |
бэкенд | когда-нибудь | следующий пак общности / касание чекеров | D39.64, D39.78 |
| 90 | Ф2-кандидаты 02-mvp-плана без носителя (свип-хвост, D39.73): CometKiwi/T-index метрики судьи · Batch API судьи (экономия) · llama-server-интеграция локали · стриминг — взять/закрыть при пилот-препе; + H16 самоулучшение (V3-п.2, ПТ-26): дизайн петли по данным судьи — тем же препом | полигон/бэкенд | когда-нибудь (Ф2.5) | пилот-преп-промт (с 85) | 02-mvp-plan, D39.66, D39.73, D39.80 |
| — НАХОДКИ СВИПА ПОЛНОТЫ (D39.66: 951 обязательство проверено, потери возвращены в трекер) — | |||||
| 80 | Резюме-слой памяти — проза-суммарайзер ЗАКРЫТ (D39.69); строка = ГЕЙТ ПИЛОТА Ф2.5: первый деливерабл пилота — «допускает ли автономная нарратив-состояние-строка ДЕТЕРМИНИРОВАННЫЙ верификатор (source-anchored) — или это D1-компаундинг со схемой»; не-покрытые классы (source-anchored reveal · арк-колбэки без ключа) реальны, но не измерены как дефект | Ф2.5 (Q3 подтверждён D39.70) | когда-нибудь (пилот) | Ф2.5 пре-рег | D25 п.8–9, D39.66, D39.69 |
| 81 | ja-преп B6-ja (сужено пост-сверкой D39.66): Поливанов-валидатор (translit_policy = «Phase 2»-заглушка, backend/internal/store/migrate.go:187=translit_policy TEXT и backend/internal/store/migrate.go:195=ruby_reading) + kana-омограф POS/known-word гейтинг / B6-токенизатор (backend/internal/membank/memory.go:1077=KANA and HAN are deliberately NOT boundary-checked); чек-лист kana-алиасов сида УЖЕ построен (backend/README §ja + AttachRubyAliasesToManual) — остаток в нём только дизамбигуация двойных чтений (тот же B6) |
бэкенд | когда-нибудь (перед ja→ru) | ja→ru-пак (рядом 35) | D16.4, D17.1, D18, D39.66 |
| 82 | Морфо-гейт РОДА (C3: русский глагол прош. вр. при gender=hidden = механический спойлер-канал; «жалоба №1 читателей MTL»; python-сайдкар/pymorphy, связка с морфопроходом Decl из 73). $0-прототип получен эксп-21 (battery.check_gender: карточки из подписанного сида, фильтр по именительному падежу, 86–112 сверок/арм — D39.117); движковый гейт не построен |
бэкенд | когда-нибудь (Ф2-гейты) | отдельный пак (с 52) | 06-реестр C3, research/12, D39.66, D39.117 |
| 85 | Пилот-преп добор (к переупаковке PACKAGE4): Bertalign GOLD-пары + zh→ru spot-check (D29.2в; GPL-тулинг отдельно) · fidelity-каскад R2 shadow с корпус-подготовкой (D25.2) · exp08 v3 пере-съём COGS до фиксации budget_usd (D21.8) | полигон | когда-нибудь (Ф2.5) | пилот-преп-промт | D25, D29, D21.8, D39.66 |
| — ПАК-21 «чекеры»: РАСТВОРЁН (D39.62); шестёрка исполнена 2/6 фазой 2 (D39.64: #11 · строка 26), остаток — ниже — | |||||
| 93 | Остатки строки 93 после пачки (D39.82): строгий OffLanguage (36а, deferred D39.78) · 分之-разметка прежде стройки DC2 word↔word (полигон) · F4-хвост: redrive --dry-run обходит pre-flight, а store.Open мутирует SPOF-файл (миграции + recoverReservations; коммент «mutates nothing» неверен) — pre-flight и на dry-run при существующей БД либо read-only план; заодно stat-скип точной формой fs.ErrNotExist; обострение приёмкой D39.134: на устаревшей БД --dry-run выполняет ПОЛНУЮ миграцию схемы БЕЗ restore point (write-open без шва migrate) — воспроизведено исполнением. ⚠ Остаток НЕ однороден по гейту (сверка 02.08): F4-хвост и строгий OffLanguage свободны, а 分之-часть ГЕЙЧЕНА полигон-разметкой среза («строить вслепую против мандата» — якорь техдолга) ⇒ не подавать строку как «малое касание без гейта» |
бэкенд/полигон | когда-нибудь | малое касание / полигон-слот | D39.78, D39.82 |
| 98 | DC7 грейд-консистентность — пере-гейчен по сид-покрытию (D39.82): замер пачки реален (25 юнитов/93 «разряд» ≠ канон «класс» на labels-финалах), НО финалы — прогоны до/вне сид-v2-канона, а грейды 甲/乙/丙/丁等 теперь approved-записи сида с decl-формами: mempostcheck флагнёт «разряд» промахом dst; строить DC7 только если ОСТАТОК девиаций переживёт сид-покрытие — замер на первом СИДОВОМ прогоне добора идеала; дом канона при стройке = book.yaml (как register_blocklist; ратифицировано D39.82 — НЕ dc-checkers.txt, посылка D39.79 исправлена) | бэкенд | когда-нибудь (гейт: первый сидовый прогон добора идеала) | замер остатка → решение | D39.79, D39.82, SMALLPACK §5-E1 |
| 28 | Банк-линт латиницы в dst или строгая форма языкового предиката (7 строк утечки алфавита проходят экран); сюда же хвост закрытой 128 (D39.102: NoDst-почти-сентинел, латиница-target — дословно не переехал при закрытии, восстановлен аудитом D39.140) | бэкенд | когда-нибудь (добор идеала — носитель «свежий мини-прогон» растворён D39.67, актуализация D39.79) | касание чекеров при данных добора (помнить оговорку 36а: «甲等 → класс Цзя» строгой формой не ловится) | D39.52, D39.62, D39.64, D39.79 |
| 28а | Prompt-injection-проба входного текста ($0): сепаратор ⟦TM-BANK-v1⟧ и якорь-подобные маркеры В ТЕКСТЕ КНИГИ — поведение среза/парсера/инъекции (книга = недоверенные данные; инструментов у моделей нет, но канал банкноты читает вывод по маркеру) | бэкенд/полигон | когда-нибудь | малая проба | сводка-ревью 26.07 |
| — СВИП ГИПОТЕЗ — | |||||
| 30а | Перерисовка puml-диаграмм под пост-пак-20 пайплайн (терминолог, банкнота отдельным файлом); дом диаграмм теперь backend/docs/ — правятся одним коммитом с кодом (D39.80); PUML НЕ рендерить (гардрейл); ловушки activity-синтаксиса, стоившие реального бага 25.07, — 12-go-style-notes §1 (дом на онбординг-пути бэкенда; строка держит указатель, а не сам факт — носитель с запланированной смертью для долговечного факта не годится) |
бэкенд | когда-нибудь | ближайший пак, касающийся pipeline | аудит доков 26.07, D39.80 |
| — ОТДЕЛЬНЫЕ ПАКИ/РЕШЕНИЯ (бэкенд, добор идеала) — | |||||
| 31 | Слой-2: извлечение дискурс-норм/few-shot из ТЕЛ промтов (форсинг = ja→ru) | бэкенд | когда-нибудь | отдельный пак (идеал D39.33) | CURRENT-STATE, D39.33 |
| 33 | native-Gemini судья (Ф2-механизм) ; до прод-заводки: $0.01-проба thinking⊆max_tokens на боевом слаге (D22.3) + включить sanitizer в pipeline-c2 при оживлении (D33.4б) | бэкенд | когда-нибудь | отдельный пак (идеал) | CURRENT-STATE, D39.33 |
| 34 | Генеральность нарезки — ОСТАТОК после фазы 2: сами per-script коэффициенты (est_out ja завышен ~1.7× МОЛЧА · EstimateTokens недосчитывает кириллицу); консолидация класса письма СДЕЛАНА (один дом DenseScript, D39.64) — лечение = Fertility-map (строка 14) + офлайн-калибровка при боевом токенизаторе |
бэкенд | когда-нибудь | строка 14 + отдельный пак (с ja→ru) | D39.37(5), D39.64 |
| 34а | Экран кодировки не видит <meta charset> без XML-объявления (епаб с gb18030-метой прочтётся как UTF-8) — до-паковая дыра, сознательно не тронута пачкой 14а (паритет со старым ридером) |
бэкенд | когда-нибудь | отдельное решение | D39.54, SMALLPACK §8 |
| 35 | Не-CJK майнер/банк: en-детектора не существует (hanRuns=0), ja с zh-таблицами активно неверен (0/10); нужен второй ДЕТЕКТОР (прототип mine_nonhan.py) + G1–G10 требования generic-майнера (вкл. квадратичность G9 ≈4.6 ч) |
бэкенд | когда-нибудь | отдельный пак generic-майнера (с ja→ru) | D39.37(8), D39.43, D39.50 п.8, POLYGON_PREMEASURE §6 |
| 36 | Кластеризация майнера глотает родовые титулы (族长/学堂家老 в кластере 葛家) — закрыто на границе сборки входа, сама кластеризация не чинилась | бэкенд | когда-нибудь | отдельное решение | D39.43, D39.45 |
| 36б | Второе мнение по банку: рецензент ДРУГОЙ моделью, несогласия — отдельной колонкой подписной таблицы (судья-с-декоем в роли рецензента; решает владелец, D39.46-ограничение не бьёт). ⚠ Бэкенд-стройки НЕТ (D39.69 закрыл по нужности); замер ИСПОЛНЕН (research/24, D39.102) — остаток = строка 5: рецензент спорных КЛАСТЕРОВ при ре-пробе 74, роутинг family/series-юнитами; переживёт замер → тонкая колонка наблюдаемости, не гейт | полигон (замер) → бэкенд (только если переживёт) | когда-нибудь (слот при ре-пробе 74, остаток строки 5) | замер остатка → решение | D39.69, D39.90, D39.102 |
| 36г | Проводной формат каналов пересказан прозой в каждом пар-промпте, парсер в Go, связи нет — формат в шаблон движка ({{banknote_format}}); линты держат класс, дублирование остаётся |
бэкенд | когда-нибудь (со следующей правкой промптов) | отдельное решение (Р5) | D39.58 |
| 37 | Квадратичности: AttachKWIC (16.8 с / 2000 кандидатов; фикс — многошаблонный поиск; ⚠ опция фикс-пака 128 НЕ взята — «чисто не ложится»: автомат в membank неэкспортирован, вынос в общий пакет = рефакторинг слоя, terminology PURE не может импортировать банк-стор — отчёт пака §4 п.5, D39.118) + src-правило банкноты при промахе чанк-пути (строка × длина книги; на 10 главах не видна) |
бэкенд | когда-нибудь | отдельное решение | D39.45, PACK20_BANK_BUILD §8.5.1, D39.58, D39.118 |
| 38 | Смета не видит пере-покупку прохода терминолога на каждой итерации подписи (роль не пишет chunk_status, не видна projectRebill) · хвост приёмки №13: адрес чекпойнта батча = ординал при частотной сортировке ⇒ реюз чекпойнтов прохода ~0 на инкрементальной книге — механика ПОДТВЕРЖДЕНА КОДОМ фикс-паком (§2 отчёта, D39.118): G1 двигает состав юнитов и те же ординалы, на первом прогоне после пака перекупаются все бэнк-батчи (центы) |
бэкенд | когда-нибудь | отдельное решение | D39.45, PACK20_BANK_BUILD §8.5.2, D39.102, D39.118 |
| 39 | S12 частичен: malformedSeparatorAt не ловит подмену слова разделителя и обрыв токена (комментарий обещает) |
бэкенд | когда-нибудь | отдельное решение | D39.45, PACK20_BANK_BUILD §8.5.3 |
| 40 | bankTokenBudget: worst-case зашит zh→ru (признанная утечка §0; CJK-цель недобирает вдвое) |
бэкенд | когда-нибудь | отдельное решение | D39.45, PACK20_BANK_BUILD §8.5.4 |
| 41 | golden: вторая фикстура С langpack (сейчас пинится только фолбэк-путь) ; + golden-счётчики голоса (хвост D39.58) | бэкенд | когда-нибудь | отдельное решение | D39.37(6) |
| 42 | prompt_override — легальный обход гарантии слоя-2, сформулировать честно |
бэкенд | когда-нибудь | отдельное решение | D39.37(7) |
| 43 | request_log без скоупа/ретеншена + first_flag_reason = третье представление истории попыток (корень — неразведённые скоупы) |
бэкенд | когда-нибудь | отдельное решение | D39.37(9) |
| 44 | Флор — выбор числа ПОСЛЕ ре-пробы 74; модель «thinking в completion» ПОЛУЧЕНА замером (D39.86): рычаг против неограниченного думания = reasoning_effort, флор не рычаг. Мини-проба флора одобрена владельцем, промт не выдан; у dspro эффорт не настраивается (quirks 3а). Расхождение трекера с 74 снято D39.90. Археология дословно — architecture/13-tech-debt-anchors.md §Б-44. ⚠ Вводная сменилась 13.08 (вахта §Б-108 СРАБОТАЛА): вендор дал pro/flash настраиваемые уровни low/high/max — квирк 3а («у dspro эффорт не настраивается») устарел, пере-проба маппинга ПОВЕДЕНИЕМ + абсорбция в quirks — полигоном |
бэкенд | когда-нибудь (триггер «приёмка 104» НАСТУПИЛ — D39.91, ручка заленжена; «сколько ставить» остаётся НЕзамеренным — нужен вариационный замер флора при low) |
отдельное решение | D39.37(10), D39.86, D39.90, вендор 13.08 |
| 45 | max_tokens-упоры (две единицы) — вернутся на en-книге ; halve-chunk-on-retry (research/22 §2 №7) ОТКЛОНЁН D39.74 — вернуться сюда же при живых упорах |
бэкенд | когда-нибудь | отдельное решение (с en) | D39.37(11) |
| 46 | Экран целевого языка: «полный связный перевод на английский» проходит classify как ok — живой носитель класса (D39.86); дизайн пака ЗАМОРОЖЕН (D39.92 п.1 closed-set + D39.93: изолированный модуль, именованные причины), промт ждёт выдачи. Гейт-связка: мини-проба флора (44). Археология дословно (двусторонняя дыра оси цели · константы · мины реализации) — architecture/13-tech-debt-anchors.md §Б-46 |
владелец → бэкенд | скоро (порядок §5.4: сначала 113, шаг 6 — под подпись) | правка Go по плану §5.4 | D39.39(д), D39.86, D39.90 |
| 47 | M2-кэш / доктрина Д2 — кандидат на отдельную ратификацию | оркестратор/бэкенд | когда-нибудь | отдельное решение | D39.42 |
| 48 | Направленная банкнота — вернуться по замеру покрытия терминолога | бэкенд | когда-нибудь | отдельное решение | D39.42 |
| 48а | Серийный шаринг банка — РЕАЛИЗАЦИЯ (экспорт подписанного глоссария как сид-YAML следующей книги серии; спойлер-окна плющатся в since_ch=0); контракт round-trip держится тестом, самой фичи нет | бэкенд | когда-нибудь (перед второй книгой серии) | отдельное решение | D39.42 задел (а), PACK20_BANK_BUILD З-а |
| 48б | Импорт «оригинал + чужой перевод» как режим данных терминолога (target-агностичный вход есть контрактом; сам режим + провенанс источника + юр-сторона в юр-пакете) | бэкенд/владелец | когда-нибудь | отдельное решение + Ф2.5 (юр) | D39.42 задел (б), PACK20_BANK_BUILD З-б |
| 130 | emitRankCap × writeAutoBank — ОСТАТОК после фикс-пака (D39.118): $0-минимум ИСПОЛНЕН (дифф старого/нового авто-файла + WARN с именами выпавших; само-исключение сырого seed закрыто unsignedEngineSurfaces дофиксом приёмки); остаток = накопительный мердж авто-банка / освобождение слотов seed-rejects — СТОП-решение владельца (двигает банк → memory_version); материал для решения даст WARN со ВТОРОГО прогона (§6 п.8 отчёта пака) |
владелец → бэкенд | когда-нибудь (гейт: WARN второго прогона) | СТОП-решение | D39.102 п.3, D39.118 |
| 131 | Кап инъекции не считает маркер и гендер-ноты: glossaryLineTokens бюджетирует только «src → dst» (memory.go:518-521 против рендера :698-708) — авто-книга (все строки Ambiguous с ⟨проверить⟩) превышает glossary_token_budget ~на 40–60% при budget 800; биллинг/потолки компенсированы (резервация по фактическому рендеру, stagerun.go:469-477), сам кап не исполняется. Фикс двигает состав инъекций → RequestHash → перекупка волн ⇒ СТОП-решение с названной ценой. ⚠ После строки 134 (единый блок, маркер снят с провода — D39.104) превышение пере-замерить: состав рендера сменится |
бэкенд | когда-нибудь | СТОП-решение | D39.102 п.3 |
| 132 | Стойкий (пост-ретрайный) аутедж ТОЛЬКО банк-провайдера валит весь ран вопреки коммент-контракту «optional step never aborts» (terminologist.go:630-634 — деградация только на ceiling; транспортные ретраи гасят transient, httpllm.go:126-160; потерь нет — чекпойнты реплеятся за $0): решить — деградировать в «термы неконсолидированы»+WARN либо честно переписать коммент |
бэкенд | когда-нибудь | малое касание через СТОП-решение | D39.102 п.3 |
| 134 | Дата-правка инжект-заголовков под доктрину D39.105 (единый закон-блок редактора вместо двухсекционки · оговорка ОБЛАСТИ употребления · снятие маркера ⟨проверить⟩ с провода; статусы строк и подписная таблица НЕ меняются): кандидат-тексты — §B промта пробы 18; ГЕЙТ ПАЛ (D39.108): текст = ОТПРАВЛЕННАЯ строка пробы 18 БЕЗ оговорки области (девиация №1; оговорка опровергнута §A.4 — НЕ вносить); двигает рендер → RequestHash → перекупка, цену назвать при внесении | бэкенд | скоро | малое касание | D39.104 п.2, D39.108 |
| — ШОВ ДВИЖОК↔ПЛАТФОРМА: деньги и механизмы (D39.106/107 п.2) — | |||||
| 136 | Write-ahead intent + состояние uncertain-эскроу + closing: холд НЕ освобождается по выходу юнита (сигнал обгоняет денежные события); spend не постится без свидетельства провайдера; расход сверх холда — полной суммой, превышение явной строкой убытка |
платформа/бэкенд | скоро (промты по команде владельца) | стройка по research/25 | D39.106 |
| 137 | Ночная сверка расходов с данными провайдера (в движок цены входят float64 по ручной таблице ledger/pricing.go — систематика процентная; сверка приоритетнее споров об округлении) |
платформа | когда-нибудь (до первого платного пользователя) | стройка по research/25 | D39.106 |
| — НАХОДКИ ПРИЁМКИ ЭКСПОВ 18–20 (D39.108) — | |||||
| 140 | Банковый контур в shipping-c1 НЕ включён — и это ШИРЕ прежней постановки про одну банкноту (сверка STACK.md, D39.126 п.2а): терминолог и классификатор тоже живут только ран-локальным конфигом книги (ратифицированный путь D39.42 п.4; coldrun 56/128; gates.terminology/gates.banknote в c1 = 0 вхождений); решить: включить в c1 (двигает промпт драфта → RequestHash — цену назвать) либо поправить декларацию; родня 36г |
владелец → бэкенд | скоро | СТОП-решение | D39.108, exp20 §6, D39.126 |
| 141 | ОСТАТОК — работа В ДЕТЕКТОРЕ, и она НЕ про потерю текста. ⚠ Дыра, которой строка была заведена, ЗАКРЫТА лендингом D39.164: сноска с ханьцзы («[1] 蛊真人 — название романа.») мимо детектора примечаний проходит по-прежнему, но поднимает класс CJKLeak, он CosmeticOnly (backend/internal/checks/sanitizer.go:161-163), юнит уходит sanitizer_stripped — и маркер дыры выдачи, заведённый паком «тихая порча», для НЕГО правдив. То есть читатель дыру ВИДИТ. Осталось: сноска БЕЗ ханьцзы («[1] Название романа.») не поднимает ни одного класса (замер сессии: total=0) и едет как есть — но текста при этом НЕ теряет, это лишняя добавка, а не дыра, и маркер на ней ДЕЗИНФОРМИРОВАЛ бы. Ловля таких сносок — правка самого детектора, отдельный предмет |
бэкенд | когда-нибудь | правка детектора + тест | D39.108 (приёмка 20); половина закрыта D39.164 |
| 142 | Механизм «гейты флагают → точечная починка по флагу» как прод-путь: exp20 §3.3 — $0.0002/дефект, 12/12 (при ИДЕАЛЬНОЙ детекции); механизм конкурентов (research/22:179), у нас петля пака-16 за enabled:false (строка 13); детекторы «выдуманное слово»/«инверсия» прототипированы эксп-21. ДИСПОЗИЦИЯ D39.117: ОТКЛОНЁН как замена редактора (C2/A_law −3.75 Holm 0.0006; «$0.0002 чинит всё» мерилось при идеальных флагах и при реальной детекции пало), ПРИНЯТ формой «механический ПРЕ-ГЕЙТ перед редактором» — брак 5 клеток против 10/23 при половинной цене ($0.00298/$0.00602); ремонт ТОЛЬКО с банком (без банка ломает канон 0.917→0.895) |
владелец → бэкенд | скоро (форма решена D39.117; стройка — бэкенд-промтом по команде владельца) | бэкенд-промт | D39.108, D39.117 |
| 143 | Абсорбция норматива судейства в 09-pilot-protocol.md: разброс инструмента ДО замера · объявленный порог различимости · MQM-lite/error-span первичен, pairwise только для стиля · декой обязателен · запрет судьи семейства жильца арма |
полигон/оркестратор | скоро ($0) | правка дока | D39.108, exp20 §7 |
| 144 | Вахта: grok reasoning_tokens ВНЕ completion_tokens — формула цены харнессов может недосчитывать (до $0.0325 на exp20); вендор-сверка биллинга xAI при следующем прогоне с grok |
полигон | когда-нибудь (следующий xAI-прогон) | вендор-чек | D39.108 (приёмка) |
| 146 | Два техдолга движка без строки трекера (свип 08.08): prices_checked (120 д) гейтит read-only report и $0-resume — свежесть цен проверять только на ПЛАТНОМ пути (03-implementation-notes:244) · cache_ttl ↔ cache_write_per_m: цена записи в кэш задана под ОДИН TTL (5 м), при другом TTL расчёт врёт (:246). Оба жили только в справочнике якорей, то есть вне единственного трекера · приёмка D39.134: ценовой гейт держит и ДЕТЕКТОР самолечения деплоя — на стенде с протухшими ценами status даёт 10, а не 13, и цикл «поймал 13 → migrate → повтор» не наступает |
бэкенд | когда-нибудь | малое касание | свип доков 08.08, D39.134 |
| 147 | Транспортные частичные из research/21 без носителя (свип 08.08): п.16 HTTP/1.1-escape на последней попытке как ДИАГНОСТИКА тихого усечения 2–8k [PARTIAL, GATED] · п.17 assistant-prefill continuation на finish=length вместо ре-рана всего вызова [PARTIAL, DEFER]. Оба помечены в ресёрче как отложенные и ни в одной строке трекера не появились |
бэкенд/полигон | когда-нибудь | замер → решение | свип доков 08.08, research/21 §16–17 |
| 149 | Эксп-22 «панель жильцов» — состав панели и её заказ ИСПОЛНЕНЫ; выводы заморожены до фазы Д, строка закрывается при её ратификации | полигон | ИСПОЛНЕН и заленден 10.08 (приёмка №16; заказ дословно — промт archive/prompts/POLYGON_TENANT_PANEL_SESSION_PROMPT_2026-08-08.md, выводы — телом D39.117) |
ратификация фазы Д | D39.117, приёмка №16 |
| 150 | Sol-арбитраж — внешний контур вместо слепого чтения владельца: пере-суд расходящихся контрастов эксп-21 (A/F: luna +0.84 против gemini +3.03 — расхождение 14 sd шума судьи-замены) и слепых пар эксп-22 руками владельца через подписку (третье семейство, high reasoning); пакеты готовит эксп-22 Ф0.4 (слепые метки · оба порядка · декой), транскрипты персистятся как голоса внешнего судьи; luna-клетки Sol не судит (своё семейство) |
владелец + полигон | скоро (пакет арбитража — из существующего сырья) | эксп-22 Ф0.4 + руки владельца | D39.117 |
| 151 | Отказной режим связки: эхо-мина черновика воспроизводима на материале (глава 11 — 3/3 попыток; частота 31% на zh), связка покрыла 9/10 подряд идущих глав против 10/10 у однопроходки — единственный довод ПРОТИВ связки во всём эксп-21; движку нужен fallback при невозможности годного черновика (вариация ре-гена · эскалация модели черновика · деградация в однопроходку) | владелец → бэкенд | когда-нибудь (до МАСШТАБА) | СТОП-решение | D39.117, exp21 §14 |
| 152 | Слипание абзацев — слепое пятно детерминированного контура: батарея на тех же текстах даёт ДРУГОЙ порядок армов (D — худший по судье — лучший по правилам), расхождение локализовано в слипании, которого не проверяет ни одно правило; правило в батарею полигона + кандидат в гейты движка |
бэкенд/полигон | когда-нибудь | малое касание + тест | D39.117, exp21 §13 |
| 153 | Чистый контраст мандата перевёрстки: D/D_ загрязнён (объём промта ×1.92 + вёрсточная строка + правило чэнъюй); уравненные промты и пере-гон ≈$0.35; по грязному контрасту мандат ВРЕДИТ по оси ФОРМА (−1.09 из −3.31 D/A) |
полигон | когда-нибудь (опция эксп-22 Ф3 — реши сессия) | замер | D39.117, exp21 §16.3 |
| — ХВОСТЫ ФИКС-ПАКА БАНКА (D39.118) — | |||||
| 154 | Одноруновая голова семьи (蛊/转/窍 едет в отдельном вызове от 12 своих поверхностей — якорь семьи обязан быть ≥2 рун) — включается ОДНОЙ строкой данных family_containment_runes han 1, Go не трогается; не включена: цена в размере юнитов не замерена |
бэкенд | когда-нибудь — ⚠ ГЕЙТ ПАЛ И ОКАЗАЛСЯ НЕДОСТИЖИМ (испр. 02.09, переведена из БЛИЖНЕГО веса): первый холодный прогон отработал 31.08, и он же показал, что назначенный замер этим путём НЕ БЕРЁТСЯ — манифест не публикует размеров юнитов В ЗНАКАХ вовсе (юнит несёт id/first_*, не длину). ⚠ Настоящее предусловие — новое поле контракта манифеста, то есть решение УРОВНЯ НОТЫ (manifest_version), а не строки бэклога: до него строка не гейчена ничем достижимым |
строка данных по замеру | D39.118, отчёт §5 |
| 155 | Скрипт-слепой резолв семей/серий: han-правила режут кану и хангыль (синтетика: 24 катаканных имени с общим アリ → батч 8036 рун при бюджете 6000); живого вреда нет — пары в репо нет; та же слепота у серий уже в HEAD | бэкенд | когда-нибудь (преп ja→ru, с 81/120) | ja-пак | D39.118, отчёт §5 |
| 156 | banknote_truncated — ПОЛ, а не счёт: обрыв, срезавший сам разделитель, флага не даёт; буквальный фикс зажёг бы колонку на каждом обрыве в прогонах без канала — нужен гейт по Gates.Banknote.Enabled |
бэкенд | когда-нибудь | малое касание | D39.118, отчёт §5 |
| 157 | Пере-подтвердить family_max_members=24 и families_held на длинной книге (24 калиброван на дистилляции в 150 поверхностей; кап эмиссии 200 + реверс-секция дают другой список); если families_held велик — ослабить гард до «родство по любому члену юнита» вместо «по корню серии» |
бэкенд | когда-нибудь — ⚠ ГЕЙТ ПАЛ 31.08, ответ ОТРИЦАТЕЛЬНЫЙ (испр. 02.09, переведена из БЛИЖНЕГО веса): прогон дал families_held=0, значит ослаблять гард не нужно. ⚠ Но замерено на ДЕСЯТИГЛАВНОЙ книге, а строка требует пере-подтверждения на ДЛИННОЙ — вывод действителен «на 10 главах» и протухнет на первой длинной книге. Указатель «§6 отчёта» заменён на греп-форму: archive/reports/COLDRUN_V16_REPORT_2026-08-31.md, греп families_held |
замер → решение | D39.118, отчёт §7 п.7 |
| 158 | Уверенность не гейтится данными пары: канал снимает третью колонку у любой пары, чей промпт её попросит; у пары с ДВУХпольным промптом узкий риск «Пик␣␣99» (число ≤100 за двойным пробелом уедет в conf); при нужде — дата-декларация пары | бэкенд | когда-нибудь | дата-декларация | D39.118, отчёт §4 п.6/§7 п.8 |
| 159 | Durable-имена эвиктнутых (retrieval_state.evicted_detail = миграция; сегодня лог, и приёмка ратифицировала «этого достаточно») — заводить только при доказанной потребности, одним касанием с идемпотентностью миграций 49а |
бэкенд | когда-нибудь (гейт: доказанная потребность) | миграция с 49а | D39.118, отчёт §7 п.2 |
| 160 | Структура глав, Этап 0 ($0, wire-нейтрально): titleRaw в манифест (subtitle добывается matchHeaderLine и ПОНИЖАЕТСЯ в тело прозы (испр. D39.125), а не выбрасывается) + provenance у heading + тип chapter/fragment + вердикт структуры (бамп manifestVersion) · дыра Р6: projectRebill слеп к контент/позиционной оси (rebill.go:32-35) — ревизия структуры перекупила бы хвост МОЛЧА, закрыть read-path-расширением · слой пользовательских правок отдельным сайдкаром · зонная половинка темы: Ф-30 фронта / В-4 владельца (глава без заголовка на экране — метка из ДАННЫХ, К-3) ждут ровно эту строку; heading манифеста до неё = ВРЕМЕННЫЙ рендер движка (D39.122 п.2д) |
бэкенд | скоро (ГЕЙТ ПАЛ словом владельца 15.08, D39.136 п.3: ставится ближайшим бэкенд-паком с мандатом максимального качества; ⚠ 30.08: впереди неё стоит блокер 236 — писатель книги, очередь №20 п.1, «ближайшим» читать как «следующим после него»; тесты структуры глав — узлом будущего холодного прогона) | пак | research/27 §6 Этап 0, D39.122 п.4, D39.136 |
| 161 | Структура глав, Этап 1 «большой перекрой» (единственное дешёвое resnapshot-окно — пока платная книга одна, ДО интейка): IR + формато-адаптеры (epub nav/NCX, fb2) + индуктор с валидаторами и вердиктами + третий версионный план паттернов (не в снапшот волн) + развязка чанкера от глав + банк-окна на chapter-ID + контент-адресуемый resume (долг D15.2) + формула Chapter.ID «окно» + роль title (мини-сессия названий: редакторский слот · инъекция банка · двухфазно вокруг подписи) + аддитивное расширение контракта 14; жизненный цикл дерева — research/27 §3а (решение владельца 09.08) | бэкенд (+фронт/платформа аддитивно) | скоро (постановка санкционирована D39.136 п.3: СНАЧАЛА дизайн-пак с мандатом максимального качества, стройка после ратификации дизайна; ⚠ дешёвое окно закрывается первой книгой внешнего пользователя) | дизайн-пак → ратификация → пак(и) | research/27 §3/§5/§6, D39.136 |
| 162 | Структура глав, Этап 2: in-band метки глав в потоке перевода (третий эшелон детекта + коррекция структуры по ходу черновой волны, §3а п.3) + канон-гейт названий ($0) + миграционные карты якорей (same/moved/split/merged/gone/new) + калибровочный корпус детекта в CI ⚠ Форма владельца 30.08: черновая модель отвечает МЕТАДАТОЙ в конец ответа, если посчитала строку фрагмента авторской разметкой главы — разметка едет попутно с черновиком без отдельного платного прохода; доверие — через фиксацию в манифесте и подтверждение спорных. | бэкенд + полигон | когда-нибудь (после Этапа 1) | пак + корпус | research/27 §5/§6 Этап 2 |
| 163 | **Версии модулей x/text | x/net двигают нарезку МИМО всех ключей** (NFC в NormalizeSource — таблицы модуля, не тулчейна; epub-токенайзер): бамп go get -u тихо меняет нарезку при свежих на вид манифесте/чекпойнтах/снапшоте — класс всей чекпойнт-плоскости, унаследован манифестом; вплести версии модулей (debug.ReadBuildInfo) в NormVersion/chunkerVersion либо явный запрет бампа без --resnapshot |
бэкенд | когда-нибудь (до второго прогона книги) | малое касание |
| 164 | Rebill-проекция status с nil baseMemory завышает RebillUSD: read-путь не материализует base-банк → renderedContentHashes даёт пустую инъекцию → repin недоопознан, строка считается re-pay (консервативная сторона, но противоречит комменту «status can never quote a different number than translate»); материализовать base-банк на read-пути либо смягчить клейм |
бэкенд | когда-нибудь | малое касание | D39.122, приёмка (охотник №1); preexisting |
| 166 | Движковая поверхность оценки $/глава (ставка-константа платформы $0.03 из exp08 v2 — временная мера беты, П-10 зоны платформы; честная оценка по книге/паре — движковая) | бэкенд | когда-нибудь | отдельный пак | D39.123 |
| 167 | Докс-пак по аудиту D39.125 — ЯДРО ИСПОЛНЕНО, состав — телом D39.126. Остаток строки: статус-баннеры экспов + шапка эндпоинтов quirks (передано полигону промтом фазы Д, §Д8 п.12) (пункт «DEFECT_REGISTER секциями» СНЯТ 22.08 — исполнено зоной ещё в P5) | доки/полигон/платформа | скоро (остаток — фаза Д полигона) | пинги зонам | D39.125, D39.126 |
| 168 | Состав волн пайплайна = пар-конфиг (данные), не общий хардкод: вопрос владельца 10.08 «нормально ли под китайский строить весь бэкенд и конфиги?» — жильцы ролей и промпты уже конфиг/langpacks, но ТОПОЛОГИЯ волн (перепис · точечный edit-контур · без второго прохода) одна на всех пар; если фаза Д покажет разных победителей по парам (H-3/H-4: en-черновик+edit против zh-связки), состав волн уезжает в пар-конфиг данными; ревью-вопрос общности §0 12-go-style-notes.md |
бэкенд | когда-нибудь (после данных фазы Д) | замер (фаза Д) → решение владельца → малое касание | слово владельца 10.08, промт фазы Д |
| 169 | Экспорт банка для чтения фронтом — ДВИЖКОВАЯ половина ПОСТРОЕНА: сайдкар <project_db>.bank.json — весь банк тремя статусами, стабильные id, атомарная запись (internal/pipeline/bankexport.go, с D39.122). ⚠ bank-stop.json НЕ существует — снесён вместе с писателем и четырьмя тестами при постройке входной двери шва (D39.158); в Go-коде движка ни одного вхождения, холодный прогон 31.08 подтвердил на диске. ⚠ Не путать с ЖИВЫМ текстовым сайдкаром таблицы стопа <project_db>.bank-stop.txt (backend/internal/pipeline/mining.go, греп bankStopTablePath) — он на месте и машинной проекцией банка не является. ПЛАТФОРМЕННАЯ половина: ЧТЕНИЕ ПОСТРОЕНО P7 — проекция банка listBankTerms с агрегатами; ЗАПИСЬ СНЯТА 22.08 — submitBankDecisions удалён вместе со всей пер-термной моделью подписи (PD-370, ратификация D39.144; D39.153, затем D39.154). ЖИВОЙ ОСТАТОК стал ШИРЕ, а не уже: нет ни доставки решений до движка, ни самой ручки, куда их вводить — без неё витрина банка фронта стоит на моке, а подписной экран S5 строить не на чем; носители — строка 199(а) [ЗАКРЫТА D39.166] плюс контрактная 206 |
платформа | скоро (остаток = доставка, строка 199а) | строка 199(а) [ЗАКРЫТА D39.166] | Ф-43 фронта, D39.122, D39.127, испр. 14.08 |
| 170 | tmctl init — движок сам заводит книгу (форма В развилки интейка): платформа зовёт $0-команду, движок пишет СВОЙ book.yaml — требования к полям живут там же, где проверяются (config/book.go); до неё бета живёт формой Б (рендер из деплой-шаблона платформой при создании книги, ратификация D39.130) |
бэкенд | когда-нибудь (после беты формы Б) | малый пак | приёмка P5, D39.130 |
| 172 | Остаток после пере-пина DeepSeek (пин ИСПОЛНЕН и ПРИНЯТ — D39.137, 76049bb): (а) схемное решение владельца по time-based — доклад §5 отчёта вендор-сессии (рекомендация: пик оставить; scheduler-вариант строки 60 не начинать до ответа вендора «по какой отметке времени тарифицируется вызов» — вендором НЕ задокументировано — и замера доли пика; дешёвый рычаг: операционное правило «прогоны не стартуют в 01–04/06–10 UTC» — почти всё ×2 без строчки Go; гибрид «резерв пиком, сеттл по окну факта» назван) · (б) пере-калибровка ставки $0.03/глава (166/П-10; множитель счёта замерен) · (в) exp08 v3 (85) обязателен до budget_usd · (г) вахта весов V4-Pro-0813 (класс D39.61): риг готов, порог ратифицированной ВЫБОРОЧНОЙ формы («≥4/5 прогонов N=5 достигают 6/6», D39.136 п.6б) в риге ИСПОЛНЕН паком честности — арифметика вынесена в live_reprobe_threshold_test.go, сам риг применяет её же. ⚠ ИМЯ СТРОКИ ВВОДИТ В ЗАБЛУЖДЕНИЕ (испр. №18 17.08, сверено кодом): названный риг меряет роль КЛАССИФИКАТОРА, а она ходит на flash (стендовый pipeline.yaml:64 + артефакт прошлого прогона model = deepseek-v4-flash), тогда как сменившиеся веса — у pro, а pro у нас = РЕДАКТОР (configs/pipeline-c1.yaml:62,76). Владелец 17.08 санкционировал ТОЛЬКО вариант (а) — пере-съём классификаторного гейта, потолок $0.20, исполняется п.5 пака честности. По этому прогону строку НЕ закрывать: вопрос «сменились ли веса редактора» остаётся открытым, дешёвый вход к нему — данные фазы Д, где pro гоняется именно редактором (спросить полигон прежде, чем покупать новый замер) |
владелец → бэкенд/полигон | скоро (схема — на владельце; вахта — после 16.08) | СТОП-решение (схема) + замер (вахта) | вендор 13.08, D39.137, строка 60, D30.4 |
| 180 | prices_checked — одно поле на ВСЮ таблицу цен (находка вендор-сессии, D39.137): бамп по факт-чеку одного вендора сдвинул 120-дневный гейт свежести остальным семи моделям (дедлайн уехал ~07.11→~13.12); лечение — пер-модельная дата проверки (правка схемы) ЛИБО ре-чек остальных вендоров отдельным заходом до исходного дедлайна |
бэкенд | когда-нибудь (ре-чек вендоров — до ~07.11) | малое касание / вендор-заход | D39.137, отчёт §7.1 |
| 182 | Wire-батч перед добором идеала — КОПИТЬ и вносить ОДНИМ касанием (каждая правка двигает RequestHash / memory_version / снапшот = перекупка волн; дриблить по одной = платить пере-снапшот несколько раз): 46 экран цели (+предпосылка 113 фикстура) · 134 инжект-заголовки (гейт пал D39.108) · 131 кап инъекции · 140 банковый контур в shipping (СТОП-решение) · 105(а) вердикт-половина классификатора · 130-остаток (мердж авто-банка, гейт WARN второго прогона) · 14 ё-фолд (носитель «следующий пак общности») · 119+124(+115 пер-парный хеш EmbeddedVersion) — ОДНИМ дизайн-паком (строка 124 требует принимать целиком; сверено кодом: cutTag фолдит chunkerVersion/EmbeddedVersion/NormVersion — manifest.go:160-169); вне батча свободен только 118 (tools/go.mod). Состав — аудит корпуса 15.08 (archive/reports/CORPUS_AUDIT_2026-08-15.md §В.г) |
оркестратор → бэкенд | скоро (собрать к ратификации фазы Д; вносить перед первым платным прогоном добора идеала) | координационная строка → промт(ы) батча | аудит 15.08, D39.134/136/137 |
| 171 | Число символов книги — от движка (PD-177 платформы: character_count интейка точен только для UTF-8; GB18030/UTF-16 движок декодирует сам — цифра платформы на них неверна, для UTF-16 занижена ~вдвое): счёт символов в манифест (рядом source_bytes/encoding) либо перерасчёт платформой после разбора |
бэкенд | когда-нибудь | малое касание (манифест) | П-13 платформы, PD-177, приёмка P5 |
| 173 | backupStamp секундной точности: два translate в одну секунду дают коллизию имени бэкапа и exit 1, маскируя класс «проект занят» (12) — метка до наносекунд/uniquify либо распознавать коллизию явно; преexisting, вскрыт ревью эмиттер-пака |
бэкенд | когда-нибудь | малое касание | приёмка D39.131 |
| 175 | Деплой движка «в полёте» — ДАЛЬНИЙ ОСТАТОК (ближняя половина ИСПОЛНЕНА паком migrate — D39.134; правило свипа и settle запиненным бинарём — аддендум P6, D39.132). Остаток: (а) при СЛЕДУЮЩЕМ бампе схемы проставить в файл книги application_id + min_reader_version — данные-задел под окно совместимости, ~0 логики; (б) GC бинарей: удалять не пиненные ни одной незакрытой попыткой, последние 2–3 релиза держать для отката; (в) окно совместимости читателей / пин уровня книги — строить ТОЛЬКО по триггерам: много тенантов · бампы схемы еженедельно+ · потребители status кроме платформы. Археология захода — ресёрч 14.08 (вывод: exact-match читателей на деньгах = осознанный fail-closed, корень не выдёргивать, приделать дверь) |
платформа/бэкенд | когда-нибудь (по названным триггерам; (а) — попутно первым бампом схемы) | данные-задел + малые касания | владелец 14.08, ресёрч 14.08, строка 139, D39.134 |
| 177 | Гигиена restore point tmctl migrate (находки приёмки ВНЕ карты отчёта; фикс-лист ФМ — запись приёмки 15.08, слайс archive/PROGRESS-2026-08-14-15.md): ретрай в ту же секунду после сорванного шага = exit 1 «backup already exists» вне полосы — ровно на цикле самолечения платформы · kill -9 посреди шва оставляет РВАНУЮ копию под легитимным именем (ручной откат по ней = потеря данных; лечение — temp+rename) · копии restore point не подчищаются (повтор после срыва копит их) · SIGINT/SIGTERM в migrate не прерывают (ctx не доезжает) · комментарий migrate.go «no money touched» на no-op неверен (recovery зануляет leftover reserved) |
бэкенд | когда-нибудь (следующее касание migrate/бэкапа) | малое касание + тесты | D39.134, приёмка №17 |
| 178 | Калибровка sense банка — слово владельца 15.08 (D39.136 п.4б): смысл должен быть «ёмкий и достаточный на всю книгу, но не слишком подробный» (образец: «спутница главного героя»); сейчас возможно КОРОТКОВАТ; замер длины/достаточности на подписанном банке → правка промптов банкноты/терминолога (двигает провод — цену назвать при внесении) |
бэкенд/полигон | когда-нибудь (касание банка) | замер → правка промптов | D39.136 п.4б |
| 183 | Батч 0.3.0 — ОТРАБОТАН ЦЕЛИКОМ (батч D39.142 + дофикс D39.143, 86720cf; промт в архиве). ⚠ Номер канона в этой строке НЕ держим — канон ушёл на 0.9.0 (D39.180), лента миноров — в шапке. ЖИВОЙ ОСТАТОК ОДИН — (б): зеркало frontend/docs/api-contract/ + типы + моки + гейт утечки, первое касание фронта при разморозке; расхождение канона и зеркала ВРЕМЕННО ратифицировано D39.142 п.5. Пункты (а) и (в) СНЯТЫ (D39.153; D39.144 п.4) |
оркестратор | скоро (остаток = только (б) зеркало фронта при разморозке) | P7 → фронт при разморозке | D39.138, D39.142, D39.143 |
| 184 | Жанр книги — ВЫКИНУТЬ (слово владельца 16.08). ⚠ ДВЕ ПОЛОВИНЫ ИЗ ЧЕТЫРЁХ УЖЕ ИСПОЛНЕНЫ (сверено кодом при аудите доков 22.08): поле ушло из контракта и из формы интейка батчем 0.3.0, и платформа жанра больше НЕ ЗНАЕТ — platform/internal/books/render.go несёт genre шаблона нечитаемым насквозь и говорит об этом прямо. ЖИВЫМИ остаются две: (а) движковая — снять {{genre}} из промптов пары (⚠ испр. 30.08: он в ШЕСТИ промптах пары, а не в трёх; состав здесь НЕ держим — снимать командой grep -rln "{{genre}}" backend/prompts/) + поле из канона брифа: двигает BriefHash ⇒ ТОЛЬКО в общее resnapshot-окно, координировать со 161/182, дешёвое окно пока платная книга одна; (б) фронтовая — форма при разморозке; влияние жанр-строки на качество не измерено и уже не будет |
бэкенд (+платформа/контракт/фронт) | скоро (движковая половина — resnapshot-окном) | касание в окне 161/182 + батч 183 | research/28 Б-23/§8 п.6, D39.138 п.2в |
| 185 | Дописывание глав в ТЕКУЩУЮ книгу («костылей не будет»): форма POST /books/{id}/parts + ответ «сколько глав добавится, что сдвинется и почём» ДО подтверждения; экономика уже позволяет В КОНЕЦ за ~$0.02 (ключ вызова позиционный, исходник вне снапшота), вставка в середину = МОЛЧАЛИВАЯ перекупка хвоста ~$9–11/500 глав — движковый гейт против молчания ОБЯЗАТЕЛЕН (родня дыры Р6 строки 160); платформа второй файл принять не может (re-parse нет); ja-мина: новый ruby-алиас двигает memory_version → снапшот (громкий --resnapshot, уточнение приёмки); полный $0-резюм хвоста — предусловие D15.2 (строка 49) |
бэкенд+платформа+контракт | когда-нибудь (вместе со строками 160–162 — дизайн в паке 161) | дизайн-пак 161 → стройка | research/28 Б-19а/§8 п.7, D39.138 п.2г |
| 186 | Сеть: перечитывания ничем не удешевлены (замер 16.08: дерево 2283 глав = 250 КБ на каждый кадр status, фокус-рефетч 12 вкладок = 562 КБ — самый частый трафик порождает переключение вкладок, не пайплайн; гипотетический кадр банка на главу = 372 МБ/прогон; сжатия/ETag/304 нет НИГДЕ): план по эффекту — (1) gzip на текстовых ответах, НЕ на SSE (2) ETag/If-None-Match→304 на списочных GET (3) скоуп в кадре (id+версия, БЕЗ текста) (4) дельта-чтение банка/замечаний ?after_version= (5) staleTime у клиента; шаги 1–2 — платформа (её же platform/docs/PLATFORM_DIRECTION.md, греп Условные запросы), семантика — в спеку батчем 183; транспорт НЕ менять (решение владельца по §5б) ⚠ ШАГИ 1–2 ПОСТРОЕНЫ И ЗАЛЕНДЕНЫ P7 (D39.153) — gzip на JSON и НЕ на SSE + ETag/If-None-Match→304 на коллекциях, карточке книги и /capabilities — и ПЕРЕ-ПРОВЕРЕНЫ ЗАМЕРОМ 28.08 (воркфлоу-ревью P9 на стенде, приёмка D39.162): банк 437 Б холодным → повтор с If-None-Match даёт 304 / 0 Б; юниты главы 3008 Б → 740 Б gzip (×4.1); ниже порога 1024 Б gzip честно НЕ применяется; SSE корректно не сжимается. Остаток — шаги 3–5 |
платформа (+контракт/фронт) | скоро (остаток: шаги 3–5) | мидлварь/edge платформы + батч 183 + разморозка фронта | research/28 §5б/Б-11а, D39.138 п.2д |
| 188 | Носитель события «ре-проба 74» (аудит D39.140: событие ждали строки 5 · 36б · 44 и шапка CURRENT-STATE, а владельца у него не было — строка 74 закрыта D39.91): дешёвая ре-проба flash при ПЕРВОМ платном прогоне добора идеала (D39.63 п.4) + слоты, подвешенные на неё: рецензент спорных кластеров банка (остаток 5) · замер второго мнения (36б) · выбор числа флора (44, после одобренной мини-пробы) · итерация №2 редакторов (D39.22/63) · выборочный порог 116 в риге (дописка 172-г) · решение о включении ре-гена перед эскалацией (экс-77, D39.64: «включение — решением при ре-пробе 74»; ручка построена, мертва во всех конфигах, ре-ген ≈7.6× дешевле эскалации) | полигон/бэкенд | скоро (гейт добора идеала — первый платный прогон) | проб-пакет при первом платном прогоне → решения по слотам | D39.63 п.4, D39.91, аудит D39.140 |
| 189 | Мультиязычность фраз ЛОГОВ и АРТЕФАКТОВ движка — вторая половина слова владельца 15.08 (D39.136 п.4а «фразы ВСЕХ зон»; первая половина — юзерский провод — решена ревью 28 Б-1/батчем 183): фразы в bank-stop/статусных артефактах и логи движка вне контракта, носителя не было (research/28 §6, строка Ф-61: «носителя назвать отдельно» — аудит D39.140 подтвердил: не назван); разобрать, что из этого читает ПОЛЬЗОВАТЕЛЬ (артефакты банка — да, через проекцию платформы) и что оператор (логи — легитимно английские) |
бэкенд | когда-нибудь (до второй локали интерфейса) | разбор → точечная правка | research/28 §6, D39.136 п.4а, аудит D39.140 |
| 190 | Кросс-СЕМЕЙНЫЙ проход контракт-ревью (не-Claude опровергатели; буква заказа владельца D39.136 п.5 «кросс-модели», исполненная в ревью только кросс-тирами Claude — ограничение честно заявлено research/28 §7/§10): проверка вердиктов доклада моделью другого семейства полигонным контуром; жила только колонкой «ЖИВОЕ» реестра нот — аудит D39.140 дал строку | полигон | когда-нибудь (после фазы Д; перед лендингом батча 183 — если владелец захочет второй рубеж) | полигон-слот с внешним провайдером | research/28 §10, аудит D39.140 |
| 191 | Подпись банка = ОДИН ОК всему банку (модель владельца 16.08, D39.144) — пер-термный полный набор решений НЕ гейт нигде: (а) контракт поправлен (409-полноты снят с resume, pending_decisions информационный — исполнено D39.144); (б) движок: verify_bank-пауза снимается командой resume с решениями «как есть», нерешённое едет авто-строками с пометкой; (в) платформа: канал решений строится накопительным БЕЗ гейта полноты + проводка «resume = снятие стопа» до движка; (г) пост-ридинговый цикл правок — выселен строкой 192 (носитель думания). ⚠ (в) и (б) ИСПОЛНЕНЫ: проводку сделала платформа лендингом P7 (D39.153, флаг --verify-bank на resume не передаётся, пин есть), а движковую половину УСТРАНИЛ, а не обошёл, пак входной двери (D39.158 п.1/п.7) — стоп срабатывает только на кластере, которого ни один прежний стоп не предъявлял (память bank_stop_presented, схема v16), возобновление БЕЗ решений продолжает прогон. ⚠ Остатка-РАТИФИКАЦИИ нет — снято 22.08 сквозной трассировкой, разбор строкой 203(з). ЖИВОЙ ОСТАТОК ОДИН: снять обход в платформе (её пак). |
бэкенд+платформа | скоро (остаток — платформенный, разбор 203з) | пак платформы | слово владельца 16.08, D39.144, D39.42 п.3 |
| 192 | Пост-ридинговый цикл правок банка — «наше подумать» владельца 16.08 (записано, чтобы не потерялось; точную механику «не продумал ещё никто и нигде» — его слово). UX-модель целиком: юзер нажал перевод → черновая волна + майнинг вместе → на фронте появляются ЧЕРНОВОЙ перевод и ЧЕРНОВОЙ банк · подписывается ВЕСЬ банк одним ОК (D39.144) → перевод уходит в доработку · дальше юзер ЧИТАЕТ, и его опции: поправить термин в банке ЛИБО добавить свой → кнопка «поправить» → пере-генерация, которая по ВХОЖДЕНИЯМ правит запрошенное. Открытые вопросы дизайна: что именно перегенерируется (вхождения ключа · затронутые юниты · со сметой и согласием?) · нужен ли движковый ТОЧЕЧНЫЙ РЕДАКТОР (полигон над этим работает — фаза Д) · форма в контракте (ручки нет) и на экране. Уже лежит под ногами: движковый re-edit по ключу банка со сметой и $0-пере-пином ПОСТРОЕН (строка 49: repin.go/rebill.go, D39.42 п.5/D39.45) · пометка неподписанных строк · дельта-чтение банка (0.3.0). НЕ проектировать до полигонных итогов; затем дизайн-пак на их результатах → слово владельца → стройка |
владелец+полигон → бэкенд/контракт/фронт | когда-нибудь (триггер: итоги фазы Д по точечному редактору) | дизайн-пак после полигона → слово владельца → стройка | слово владельца 16.08, D39.144 п.1 |
| 195 | ОСЬ «идентичность оплаченной работы» — переселена в дизайн-пак 124 (решение владельца 17.08, вариант А; D39.151). Как САМОСТОЯТЕЛЬНАЯ стройка ЗАКРЫТА: маркер snapshot_id/run_id на checkpoints отдельной колонкой НЕ строится. Причина — внешний разбор опроверг посылку «колонка = тождество»: $0-пере-пин законно переносит строку на новый снапшот со СТАРОЙ ценой (stagerun.go:96-105, сверено оркестратором), у старых чекпоинтов бэкфилла нет вовсе (jobs.snapshot_id перезаписывается каждым ре-снапшотом) ⇒ вывод-обход остаётся в коде навсегда как legacy-ветка, а колонка лишь добавляет рядом второй путь. Настоящий корень глубже: в сторе нет первоклассной связи «строка диспозиции ↔ вызовы, которые её оплатили»; снапшот на чекпоинте — прокси, а не примитив. ⚠ Границы семьи сужены тем же разбором: 49 и 195 — про РАЗНОЕ (49 = когда переиспользование законно, 195 = как честно посчитать будущую покупку), общий у них субстрат, не задача; из 124 родня только ось (в). Срочности нет: под контрактом D39.150 («направление ошибки, не точность») ни один исход не занижает молча — недостача несётся историческими деньгами С РАСКРЫТИЕМ, пойманный откат называется вслух. Остаточные нарушения контракта чинятся БЕЗ схемы: 197 и 194 |
бэкенд | когда-нибудь (гейт — триггеры пака 124: дописывание глав 185 · МАСШТАБ · первый внешний потребитель числа) | ось дизайн-пака 124 | D39.151, внешний разбор 17.08 |
| 196 | Остаточный класс строки 176: неперехватываемые fatal error Go (конкурентная запись в map, OOM, стек-оверфлоу) по-прежнему дают exit 2, то есть читаются платформой как «завершено с флагами» — recover их не ловит по устройству языка (подтверждено линзой шва исполнением). Строка 176 закрыта для ПАНИК, не для fatal. Лечение — вне exit-контракта: сторож процесса у платформы либо маркер живости в артефакте прогона |
бэкенд/платформа | когда-нибудь | отдельное решение | приёмка №18, линза шва |
| 197 | Фикс-лист приёмки пака честности ФЧ-1…ФЧ-8 — восемь пунктов класса «заявленное не прибито» и «текст обещает больше числа», ни один не блокировал лендинг. Тело списка дословно, с весами и с секцией «что НЕ проверено», — archive/PROGRESS-2026-08-17.md, запись приёмки №18 (D39.149). Здесь держим только ратифицированное: ФЧ-5 РЕШЁН владельцем 17.08 (D39.150): прайсить по модели, которую стадия резолвит СЕЙЧАС, + округление вверх и оговорка в тексте согласия. Носителя-сессии НЕТ — по слову владельца 17.08 пока только записано | бэкенд | скоро (следующее касание денежного пути; ФЧ-5 обязателен до первого пере-прогона со сменой модели) | дофикс-промт ЛИБО попутно ближайшим паком | D39.149, D39.150 |
| 198 | Апгрейд движка стирает замечания и счётчики книги БЕЗВОЗВРАТНО — композиция двух половин, каждая известна по отдельности (приёмка P7, линза «вне карты», обе половины пере-прочитаны оркестратором). Платформа при смене manifest_key сносит ВСЕ unit_resolutions книги (platform/internal/pgstore/readmodel.go:164-165), рассчитывая, что поток их пере-наполнит; движок анонсирует юнит РОВНО ОДИН РАЗ за жизнь книги — ключ unit:<bookID>:<wave>:<chapter>:<unit> БЕЗ метки нарезки (backend/internal/pipeline/events.go:399-400), а леджер анонсов переживает прогоны (backend/internal/store/outbox.go:96 «already announced… by one that ran before it») ⇒ совпавшие координаты не переанонсируются НИКОГДА. Обостряется порядком: долг на материализацию ставится только на ГРАНИЦАХ работы, поэтому первая зачистка после апгрейда случается в КОНЦЕ первого пост-апгрейдного прогона и сносит замечания ТОГО ЖЕ прогона, за который заплачено. Следствия на проводе: «0 из N» на переведённой книге навсегда · шкала снова предлагает купить переведённое · замечания читателя исчезают. Лечится с обеих сторон: движковая половина — метка нарезки в ключе анонса (решение зоны движка), платформенная — не сносить вслепую либо восстанавливать из экспорта. ⚠ Гейт холодного прогона: смысл упражнения — гонять книгу против МЕНЯЮЩЕГОСЯ движка, то есть первый же апгрейд обнулит библиотеку |
бэкенд + платформа | скоро (до первого реального пользователя И до холодного прогона с апгрейдами) | связка: решение по ключу анонса в движке → правка платформы | приёмка P7 (D39.153) |
| 201 | Движковое «Глава N» доезжает читателю ВНУТРИ текста, обходя дисциплину heading: null (линза шва P7, пере-прочитано оркестратором): backend/internal/pipeline/export.go:58=ApplyHeading (испр. оркестратором №20 30.08: якорь уезжал с :230 и с :266 — код растёт) приклеивает детерминированный порядковый к экспортному тексту первой юнит-главы (ce.FinalText = chunk.ApplyHeading(...)), колонка Source при этом остаётся heading-stripped. Платформа переносит обе как есть и честно отдаёт heading: null — то есть клиент нарисует СВОЙ порядковый на языке своего интерфейса над абзацем, который уже начинается с русского «Глава N», а исходная колонка соответствующего маркера не несёт: пара визуально рассинхронизирована на каждой первой главе. Конкретное следствие открытого К-2 контракта; родня движковой строки 160 (глава без заголовка) |
бэкенд | когда-нибудь (с 160) | отдельное решение | приёмка P7 (D39.153) |
| 202 | Живой перевод книги НАСКВОЗЬ через API платформы не гонялся НИ РАЗУ (obstacle сессии P7, подтверждён приёмкой): всё после «прогон стартовал и остановился» — подпись банка, halt на потолке, резюм после пополнения — покрыто батареей против живого Postgres, но с движком-заглушкой; настоящий манифест, сайдкар банка и причины флагов будут ПЕРВЫМИ данными, форму которых платформа не сочинила сама. Форма проверки (решена): только через API, как ходил бы клиент — интейк → старт → живой движок с ключами провайдера → поток событий → подпись и продолжение → чтение глав/юнитов/замечаний/банка и сверка с тем, что движок реально произвёл; качество перевода НЕ предмет (полигон). ⚠ Цена ≈$0.05 СНЯТА как протухшая (D39.179 п.1: пере-пин DeepSeek, множитель ×4.47; испр. 02.09). Замер 31.08 на ровно такой десятиглавой книге: куплено $0.436110 при собственной проекции движка projected_book_usd = 1.1377277707 и полном оттоке кассы ≈$1.44 (§4 отчёта). ⚠ Это цена НЕПОЛНОГО захода — доставлено 3 юнита из 14; как смету для покупателя брать нельзя. ⚠ Путь ключей платформы — переменная TM_PLATFORM_ENGINE_KEYS_PATH, требует АБСОЛЮТНОГО пути (греп по platform/internal/config/). Решение владельца 20.08: ПОСЛЕ холодного прогона движка — гонять одну неготовую систему против другой смысла нет |
платформа | скоро (⚠ прежний гейт «холодный прогон движка» ПАЛ 31.08; живой блокер теперь один — файл ключей платформы TM_PLATFORM_ENGINE_KEYS_PATH, лечение операционное и $0) |
короткая сессия по промту оркестратора | слово владельца 20.08, D39.153 |
| 203 | Хвосты контракта после синка 0.4.0 — ОТКРЫТ ОДИН ПУНКТ, остальное исполнено (тела релеев — platform/docs/archive/P7_ACCEPTANCE_HANDOFF_2026-08-17.md §7; сюда переписан НЕ текст, а статус — один носитель на факт). ИСПОЛНЕНЫ и сверены грепом при лендинге: (а) минором 0.5.0 (D39.161) · (б) · (д) · (и) поле stop_requested (D39.152) · (л)(м)(н)(о) контрактной сессией — остаток по фразам Приложения А несёт строка 204 и лист владельца. (г) наполовину — unspecified ратифицирован в каноне (docs/architecture/14-api-contract/openapi.yaml:1903=is reserved and is the server), открыта только ГРАНИЦА ступеней замечаний (две ступени при девяти рангах движка); ⚠ её прежний носитель — строка 148 — СНЯТ 21.08 по слову владельца. (з) СНЯТ как ратификация 22.08 сквозной трассировкой (разбор, на который ссылается строка 191): конфликта моделей НЕТ — гейт движка проверяет полноту не ПОДПИСЕЙ, а ФАЙЛА решений, и ОДИН файл со всем банком его снимает (loadMinedDelta штампует только Source, mining.go:855-867 → опущенный статус дефолтится в approved, membank/memseed.go:96=status = "approved" → unsignedEngineSurfaces выбрасывает лишь Source=="mined" && Status!="approved", mining.go:710-719). Пере-диспозиция 27.08 (D39.158 п.7): движковый гейт полноты УСТРАНЁН, не обойдён; остаётся снять обход в платформе — одна боевая строка (platform/internal/runs/spawn.go, --verify-bank не передаётся на resume) плюс семь строк ставшего ложным обоснования, работа платформенного пака. ОТКРЫТО РЕАЛЬНО — (к): ключ project_db в book.yaml, договорить, кто им владеет: шаблон оператора его не содержит, движок делает необязательным. ⚠ Следствие «на штатном деплое банк не читается» ОПРОВЕРГНУТО живым кодом: путь публикует ДВИЖОК конвертом артефактов, пустой путь — ГРОМКИЙ отказ (platform/internal/runner/artifacts.go:39=the engine published no bank read-out path); остаток (к) чисто договорной |
контракт/доки | скоро (следующее касание контракта) | контрактная сессия | приёмка P7 (D39.153) |
| 204 | Движок не публикует причины флагов ДАННЫМИ — карта причин у платформы рукописная и расходится молча (релей §7(в) хендоффа P7; зона платформы в чужой бэклог не пишет и просила строку сюда — platform/docs/archive/platform-PROGRESS-P7.md:206). Сегодня platform/internal/ingest/notes.go держит рукописную копию закрытого словаря ЧУЖОЙ зоны: 15 причин движка → коды замечаний контракта, сверено побайтно на 20.08 и верно СЕЙЧАС. Импортировать движок платформе нельзя (D39.85 — разные модули), поэтому расхождение появится молча в тот день, когда движок добавит причину: платформа отдаст unspecified и напишет ERROR в лог, то есть деградация честная, но карта протухнет незаметно. ⚠ Правила заполнения контрактных фраз по этим причинам УЖЕ НАПИСАНЫ и выводить их заново не надо — компаньон 14-api-contract/README.md, греп по ДОККОММЕНТУ (фраза пишется по доккомменту disposition.go, а не по имени константы; класс 2 схлопывается в ОДИН код). Лечение: движок публикует свой словарь причин артефактом-данными (тем же классом, что манифест и сайдкары банка), платформа читает его вместо копии. ⚠ Класс: носителем был ТОЛЬКО регистр платформы (PD-246) — обязательство к ЧУЖОЙ зоне жило внутри зоны автора |
бэкенд | когда-нибудь (со следующим касанием эмиссии флагов) | отдельное решение | приёмка P7 (D39.153), релей §7(в) |
| 205 | Гейт якорей ИСПОЛНЕН 21.08 — docs/scripts/counts.py --lint, область docs/ + platform/docs + frontend/docs, сверка по СОДЕРЖИМОМУ, двусторонняя дельта. ⚠ Быстрый выход по «коммит не трогает docs/» из хука убран НАМЕРЕННО: цели якорей — в основном КОД, и главный двигатель протухания приезжал ровно тем коммитом, на котором хук молчал. Форма якоря: ОПТ-ИН токен ожидания `путь:12-14`=`подстрока`, сверка ПРОБЕЛЬНО-нормализованная. ⚠ Слепота печатается САМИМ гейтом каждый прогон — читать оттуда, копии здесь нет. Одна её грань в вывод не попала: в ручном прогоне «дельта» = всё незакоммиченное кем угодно, поэтому ТРЕБОВАНИЕ токена живёт только под --from-index (ПРОВЕРКА уже написанных токенов дельтой не ограничивается вовсе — токен был истинным при записи, значит упавший есть гниль по построению). ОСТАТОК: миграция корпуса на токен-форму органическая — токен требуется на ЗАТРОНУТЫХ строках, счёт растёт сам с каждым касанием. ⚠ Числа здесь НЕ держим (прежняя редакция держала «4 из ~580» и протухла за сутки): текущий счёт токенов, якорей и доков гейт печатает КАЖДЫЙ прогон |
оркестратор/доки | сделано 21.08, миграция органическая | исполнено; остаток гасится касаниями | аудит работы №18 + разбор с внешним ревьюером, 21.08 |
| 207 | Пол самосогласованности манифеста стоит только у материализатора, интейк тот же документ ПРИНИМАЕТ — и по такой книге можно ОПЛАТИТЬ прогон (PD-367, вторая волна ревью P8-FIX). Манифест {ChaptersTotal: 120, UnitsTotal: 400} с пустым списком глав Whole() отвергает, а books.Parse заводит книгу not_started с chapter_count=120 и пустым деревом; потолок считается ОТ chapter_count. Очевидное лекарство опровергнуто исполнением самой зоной: применить Whole() на интейке нельзя — вся батарея интейка ездит на манифестах без списка глав, контракт интейка это только счётчики. Значит решение не зонное: либо контракт интейка меняется, либо пол ставится в другом месте цепи |
оркестратор → платформа | скоро | нужно решение (лекарство ломает запиненный контракт интейка) | D39.154 п.10, PD-367 |
| 209 | Риг живых проб не может залогировать тела запросов ни при каких env (находка бэкенд-пака честности 17.08, оставшаяся без носителя до аудита доков 22.08): LOG_LLM_BODIES=1+LOG_LEVEL=debug объявлены носителем тел, но ключ читается из obs.ReqInfo контекста, а live_reprobe_test.go строит ctx БЕЗ WithReqInfo — гейт obs/logging.go не пропускает. Обход, которым пользовались: ручной дамп сообщений в файл. Цена — каждая живая проба, которой нужно прочитать провод глазами, платит за обход заново |
бэкенд | когда-нибудь (следующее касание рига живых проб) | малое касание (WithReqInfo в риге) + пин |
пак честности 17.08, вынесено аудитом доков 22.08 |
| 210 | Род НЕ ПРОИЗВОДИТСЯ авто-путём вовсе — механизм доставки построен, а данных для него нет (найдено трассировкой цепи банка 22.08, сверено кодом оркестратором; полигон вскрыл то же независимо: «в банке НЕТ ПОЛЕЙ ПОЛА»). Доставка рода на провод ПОСТРОЕНА и работает: membank/memory.go кладёт genderConstraintNote в черновую инъекцию — но ТОЛЬКО для строк со статусом Confirmed, по прямой директиве владельца D39.21 «род должен доезжать». Данных ей никто не даёт: промпт терминолога возвращает РОВНО ТРИ поля (backend/prompts/zh-ru/terminologist.md: термин · перевод · уверенность 0–100) — поля рода в ответе НЕТ; майнер берёт gender исключительно из СИДА (internal/miner/miner_emit.go seedMeta, meta.gender = e.Gender), эмитируемые кандидаты его не несут. ⇒ на любой книге без ручного сида ось рода мертва по построению, и «плывущий род» — это не дефект рендера, а отсутствие входных данных. Прямо бьёт по цели №1: реестр памяти C3 называет русский глагол прош. вр. при скрытом роде «механическим спойлер-каналом» и «жалобой №1 читателей MTL» (строка 82). Развилка, которую надо назвать до стройки: добавлять ли поле рода в ответ терминолога (двигает провод ⇒ ТОЛЬКО в вайр-батч 182) ЛИБО выводить род отдельным дешёвым проходом, ЛИБО признать род сид-только свойством и гейтить им качество явно. Родня 82 (морфо-гейт рода) и 178 (калибровка sense). ⚠ Замка ДВА и они независимы — род рендерится только при Disp == Confirmed (membank/memory.go:705-713,823-827=Mirrors the editor block's confirmed-only gender), а mining.go:676 запрещает авто-банку статус approved. Род НЕ единственное осиротевшее поле: Sense/Speech/Decl тоже приходят только из сида, авто-продюсер есть лишь у Dst (терминолог) и Type (классификатор). ⚠ Поле Gender в схеме сида УЖЕ ЕСТЬ (internal/seed/seed.go:71=Gender string) — ось мертва в ПИСАТЕЛЯХ, не в формате. ⚠ И тесты слепы ПО ПОСТРОЕНИЮ (пере-проверено 23.08): все gender-кейсы конструируют род РУКАМИ, то есть зелёная батарея не отличает «производитель работает» от «производителя нет»; гейта на дрейф рода в движке нет |
бэкенд (+полигон на замер) | скоро (цель №1; правка провода — вайр-батчем 182) | развилка → решение → правка промпта/прохода + замер на прогоне с редактурой | трассировка цепи банка 22.08, D39.21, C3 реестра памяти |
| 213 | ОСТАТОК — одна строка в ДЕВ-пути: супервизор зашивает "book.yaml" мимо константы ConfigFile (platform/internal/ingest/supervisor.go:142="status", "--config"). ⚠ ГЛАВНАЯ половина ЗАКРЫТА лендингом P9 (D39.162): путь банк-экспорта берётся из конверта артефактов движка (platform/internal/runner/artifacts.go:28-35; пустой путь — ГРОМКИЙ отказ), нестрогий парс book.yaml и собственный projectDB() снесены. Осталась ровно та тривиальность, которую строка называла рядом с дефектом. ⚠ Пере-именование банк-экспорта в фикс-имя рядом с events.jsonl — ЛОМАЮЩЕЕ, его место в окне строки 161, НЕ здесь |
платформа | когда-нибудь (одна строка, следующим касанием зоны) | правка дев-супервизора | консилиум шва 22.08; главная половина — D39.162 |
| 214 | Подпись банка не оставляет на банке НИ ОДНОГО следа. Единственная долговечная запись акта подписи — булев bank_released на прогоне (platform/internal/pgstore/runs.go, греп bank_released (номер строки двигает живая сессия зоны)): кто и когда подписал, что именно вошло в подписанный набор — не хранится нигде. Следствие: пост-фактум ответить «почему в книге этот перевод термина» нельзя, а при пере-нарезке или пере-прогоне восстановить намерение человека не из чего. ⚠ ЧАСТИЧНЫЙ ответ появился с дверью правок (D39.162): её документы решений — долговечная запись того, ЧТО владелец решил, и они переживают прогон. Не отвечено по-прежнему: КТО и КОГДА подписал, и что именно вошло в подписанный набор. Всплыло трассировкой цепи банка 22.08, подтверждено пере-проверкой |
платформа + бэкенд | когда-нибудь (с трубой доставки правок, D39.156) | отдельное решение о провенансе подписи | трассировка цепи банка 22.08, пере-проверено №19 |
| 216 | Подпись банка, halt на потолке и резюм после пополнения не проверялись против ЖИВОГО движка ни разу. Проверки этих путей в батарее платформы стоят на фейках; единственный живой прогон движка в батарее — не по этим маршрутам. То есть три несущих сценария продукта держатся на договорённости о поведении чужой стороны, а не на замере. ⚠ Гейтится тем же, чем и живой прогон книги (строка 202): холодный прогон движка | платформа | когда-нибудь (с 202) | живой прогон по трём маршрутам | трассировка цепи банка 22.08, пере-проверено №19 |
| 227 | signature в квитанции двери правок считается от карты, которую переписывает ЛЮБАЯ граница майнинга (находка воркфлоу-ревью P9, 28.08): запись карты стоит ВЫШЕ решения о стопе (backend/internal/pipeline/mining.go:191=writeFileAtomic(r.signatureMapPath()), поэтому signature != null НЕ означает состоявшегося стопа подписи; surfaces/undecided дрейфуют между двумя вызовами владельца, а undecided: 0 достижим при НЕпредъявленных решениях (кап top-200 вытесняет). ⚠ Починка аддитивна и носитель для неё уже есть: карта несёт СВОЙ идентификатор (backend/internal/membank/decisions.go:955=id, err := seed.SignatureMapID(content)), а шов его не читает — отдать идентификатор в квитанцию и судить по нему. Цена сегодня мала (поле информационное, гейтом не служит) и растёт вместе с экраном подписи: именно он будет решать «что я подписываю» по этому числу |
бэкенд | когда-нибудь (гейт: заказ экрана подписи) | аддитивная правка квитанции | воркфлоу-ревью P9, D39.162 |
| 228 | Отклонённая поверхность возвращается АЛИАСОМ уцелевшей строки — движок не держит того, что канон уже обещает (находка воркфлоу-ревью P9 в форме Д1, УЗКО пере-сформулирована бэкенд-сессией 28.08 и принята приёмкой): канон говорит дословно «declining a surface removes EVERY window of that surface» (docs/architecture/14-api-contract/openapi.yaml:2079=declining a surface removes EVERY window; адрес пере-нацелен 02.09 — минор 0.9.0 сдвинул прежний 2051), а эмиссия майнера энтити-широка (backend/internal/pipeline/miner_emit.go, clusterTouches), тогда как фильтр авто-банка ключуется только по собственному src строки (backend/internal/pipeline/mining.go:662). ⚠ Правильная форма — снять АЛИАС со строки, а не снести строку: расширение decline до энтити противоречило бы ратифицированному контракту, и именно поэтому бэкенд-сессия применила право §9 и НЕ чинила это попутно. Предмет — банковая онтология (18-bank-ontology.md), не тихая порча |
бэкенд | скоро (гейт: заказ по читающей стороне банка) | отдельный заказ узкой формы | воркфлоу-ревью P9; форма — бэкенд-сессия 28.08, D39.164 |
| 229 | Снапшот не фолдит модель ВНУТРЕННИХ гейтов — флип провода под неизменным request_hash (самонаходка бэкенд-сессии 28.08, подтверждена приёмкой): снапшот фолдит Capability СТАДИЙНЫХ моделей и их эскалации (backend/internal/pipeline/snapshot.go:316-340), но модель gates.terminology.model / gates.repair.model (backend/internal/config/internal_call.go:72) не фолдится сознательно — а терминолог шлёт ДВА системных сообщения, так что смена оси capabilities.system_messages у провайдера, которым пользуется только гейт, меняет байты запроса при неизменном хеше: тихий false-hit класса D5.2. ⚠ Сегодня ЛАТЕНТНА и денег не стоит — проверено приёмкой: гейта terminology нет НИ В ОДНОМ конфиге репозитория (grep -c terminology configs/pipeline-c1.yaml = 0). Триггер починки — день, когда гейт включат с провайдером, объявляющим НЕдефолтную возможность. ⚠ Цена лечения — денежная: фолд гейт-моделей сдвигает хеши и обесценивает чекпойнты; дешёвая форма — фолдить ТОЛЬКО недефолтное (приём omitempty, прецедент MinMaxTokens), тогда сегодняшние снапшоты остаются байт-равными |
бэкенд | когда-нибудь (гейт: включение внутреннего гейта либо следующее касание снапшот-контракта) | правка снапшот-контракта | самонаходка бэкенд-сессии, D39.164 |
| 230 | Инертный decline подписанного сид-терма отвечает already_applied вместо единственной работающей инструкции (названный размен пака «тихая порча», D39.164): сузив отказ по поверхности ради СХОДИМОСТИ повтора, движок потерял поучение в одном углу — когда отказ и записан, и по-прежнему инертен против glossary_seed, пользователь получает «уже применено» вместо «убери терм из сида». Сходимость сочтена более тяжёлой обязанностью (на ней стоит вся раскладка класса 15 и синхронная дверь платформы), но размен РЕАЛЕН. Форма закрытия — поле отчёта со стоячим фактом, то есть аддитивная правка формы шва: платформенный BankReport — аллоулист, лишнее поле на провод не уедет само |
бэкенд + контракт | скоро (с ближайшим касанием отчёта двери) | аддитивное поле отчёта | размен пака «тихая порча», D39.164 |
| 232 | Ось «свежий/пере-делка» выведена из ПОЛНОТЫ СТРОК, а не из факта отгрузки (D39.170, находки охотника 3 и 4). Следствия ДЕНЕЖНЫЕ на слух покупателя: добавление стадии в пайплайн превращает ДОЧИТАННУЮ книгу в «3 unit(s) NEVER delivered» и приглашает купить её снова; юнит, прерванный между волнами (signature stop, денежный потолок, Ctrl-C), второй раз считается свежим и тратит слот гранта повторно — замерено 4 купленных юнита → 2 главы. Носитель у движка УЖЕ есть: реестр анонсов events_outbox.once_key (backend/internal/pipeline/events.go:396=unitOnceKey is the identity of one announcement), ключ unit:<книга>:<волна>:<глава>:<юнит>, монотонный на всю жизнь книги и переживающий и добавление стадии, и обрыв между волнами. ⚠ ПЕРВАЯ ПОЛОВИНА ИСПОЛНЕНА 31.08 (bb541a8, экземпляр A11; испр. 02.09): читающий метод store.AnnouncedOnceKeys() построен, его докстринг называет эту строку по номеру, предикат — delivered[key] && unitShipped(rows). ЖИВОЙ ОСТАТОК — ВТОРАЯ ПОЛОВИНА: юнит, прерванный МЕЖДУ ВОЛНАМИ, повторно тратит слот гранта (разбор — backend/docs/MONEY_HONESTY_REPORT.md §4.5). ⚠ РАЗВИЛКА, которую надо назвать в промте: ключ несёт ВОЛНУ, значит «юнит отгружен» — факт per-wave. Ответ есть и он не новый механизм: отгрузкой считается волна, владеющая ОТГРУЖАЮЩЕЙ (последней) стадией — backend/internal/pipeline/snapshot.go:243=finalStageWave is the wave that owns the SHIPPING (last) stage; на редакторском конвейере это edit, на черновом-только — draft. Проверять надо ИМ, иначе черновой-только конвейер получит ось, которая никогда ничего не считает отгруженным (предложено движковой сессией при сдаче, сверено мной по коду) |
бэкенд | скоро | Читающий метод стора + перевод оси на факт отгрузки; отдельный пак | приёмка D39.170 |
| 233 | Трата терминолога вне объёмного потолка масштабируется КНИГОЙ, а не грантом (D39.170). Замер: три последовательные покупки по одному юниту на четырёхглавной книге дали три полнокнижных консолидации по $0.005460 каждая — покупка одного юнита обходится в ~1.5× стоимости самого юнита. Книга на 500 юнитов, проданная по одному, оплатит 500 полнокнижных проходов. Место траты — в ЦЕНЕ, а не в потолке (решение подтверждено), но при мелкой нарезке продажи она перестаёт быть накладной и становится основной статьёй: это ВХОД В КАЛИБРОВКУ ЦЕНЫ, а не сноска | бэкенд | скоро | Учесть в модели цены при следующей калибровке; либо чекпойнт консолидации, переживающий покупку | приёмка D39.170 |
| 234 | Основание платформы «не брать rebill_* через шов» СНЯТО лендингом D39.170 — комментарий чужой зоны несёт мёртвый довод. Довод объяснял отказ ТАЙМИНГОМ («status проецирует СОХРАНЁННУЮ память, сразу после bank-apply честно читает ноль»); движковый пак это починил — foldMemoryForRead стал ПЕРВЫМ ответом читающего пути, projectStoredMemory понижена до фолбэка (backend/internal/pipeline/status.go:901=IT IS NO LONGER THE READ PATH'S FIRST ANSWER). ⚠ Первый носитель (platform/internal/ingest/resync.go) уже пере-написан 30.08 и сам объявляет посылку снятой — строка регистра PD-427. ЖИВОЙ ОСТАТОК: та же снятая посылка стоит ВТОРЫМ носителем в platform/internal/runs/bank.go (греп STORED memory) — пинг зоне, не своя правка. ⚠ Проводка полей при этом НЕ разблокирована: она гейчена вместе с --max-units. |
платформа | скоро | Пинг зоне платформы + строка её регистра; проводка — после снятия гейта --max-units |
приёмка D39.170 |
| 237 | Два загейченных триггера НАЖАТЫ и не отработаны (реестр 13-tech-debt-anchors.md §Б-108, сверено 30.08). (а) go.work: условие «появление Go-кода платформы» выполнено давно — platform/go.mod есть, ls go.work в корне даёт «No such file or directory». Ратифицировано D39.85 §8 п.4 (docs/research/23-engine-platform-seam.md:66 = go.work — коммитить, когда у платформы появится Go-код); цена — один файл, по тому же §6 он решает только dev-удобство и не меняет ни видимости, ни версий. (б) вендор-сверка маппинга эффорта deepseek-v4-pro: вахта D39.92 сработала 13.08 changelog'ом вендора, а носители до сих пор ПРОТИВОРЕЧАТ (квирк-канон и STACK.md говорят «ручки у pro НЕТ»), и по гардрейлу владельца это закрывается ТОЛЬКО вендор-докой, а не выбором стороны. Держит жильца Д5 и калибровку цены редакторского арма. ⚠ Класс важнее двух пунктов: спроектированный механизм без носителя события тихо становится долгом, и никто не проверяет, не нажат ли спусковой крючок. |
оркестратор | скоро | (а) один файл в корень; (б) заказ полигону на вендор-сверку | аудит очереди 30.08 |
| 241 | Канон противоречит сам себе на ДОЧИТАННОЙ книге, и принятая правка банка умирает молча (названо телом D39.165 §3 28.08, носителя не получило; заведено оркестратором №20 30.08 по находке сессии P12). Две фразы: правка банка «takes effect on the NEXT run» (docs/architecture/14-api-contract/openapi.yaml:504=takes effect on the NEXT run) против «finished work is not bought twice» + подъём потолка только у ПРИОСТАНОВЛЕННОЙ книги (:590=finished work is not bought twice). У дочитанной книги следующего прогона купить нечем: пользователь правит банк, получает квитанцию об успехе — и правка не доезжает ни до одной строки никогда. ⚠ Смежное лечение уже существует и не связано с этой дырой: пере-проход ПОКУПАЕТСЯ членом RunRequest.re_pass (канон 0.7.0, D39.166) — то есть механизм есть, а фраза канона его не признаёт для дочитанной книги. Решать формой: либо канон признаёт пере-проход входом для дочитанной книги, либо дверь правок отказывает такой книге ЧЕСТНО вместо ложной квитанции |
контракт (+платформа) | скоро (следующее касание контракта) | контрактный минор + пин на дочитанной книге | D39.165 §3, эррата 30.08-б, находка сессии P12 |
| 242 | Реестр D-нот: колонки «статус» и «тело» разъехались на 74 строках из 224 (замер аудита доков 30.08). У свежих нот в «статусе» стоит заметка «ЖИВОЕ: …», а слово жив уехало в «тело»; шапка таблицы описывает другой порядок. Гейт counts.py --check этот класс НЕ ловит по устройству (сверяет полноту номеров, не форму ячеек). Лечение — не ручная перекладка (дороже пользы и легко внести новую ложь), а машинное: правило формы в counts.py + разовый прогон приведения. Пока не сделано — в легенде реестра стоит правило чтения (испр. 30.08) |
оркестратор | когда-нибудь | правило в counts.py + разовое приведение |
аудит доков 30.08 |
| 243 | Остаток аудита доков 30–31.08: 19 удержанных находок НЕ применены (аудит — 5 линз + верификатор на каждую, 57 находок, 55 удержаны, 36 применены сменой №20). Перечень: reader.txt — третья) · arch-7 (§2 закона шва: дисциплина флока не описывает новый глагол-писатель) · arch-9 (реестр загейченных триггеров не знает нажатых 30.08) · 09-target сама зовёт себя неполной — строку под таблицей слоёв надо внести; ⚠ ЖИВ на 02.09: греп D39.181 по docs/architecture/09-target-architecture.md — 0 хитов, греп D39.182 — 0 хитов, то есть лендинги 31.08 в док слоёв не внесены) · contract-8 (эррата 15.08-в в шапке D-лога указывает на промт, уехавший в архив) · contract-10 (Export.failure_code «becomes an enum with the first built format» — формат построен, условие наступило) · progress-6/7/8/10/11/12/13/14/15 (мелочь CURRENT-STATE и строк бэклога: протухшие «запушена»/«строка 200»/якорь miner_emit.go/дубль 238 внутри 160 и пр.). ⚠ Отчёт аудита жил в песочнице сессии №20 и умирает с ней — здесь ЕДИНСТВЕННЫЙ носитель списка; воспроизведение = повторный аудит (5 агентов, ~2 часа) |
оркестратор | скоро | пройти списком | аудит доков 30–31.08, сдача смены №20 |
| 244 | Гейт якорей на пре-коммите ломается всякий раз, когда зона правит КОД и СВОЙ реестр одним незакоммиченным деревом — и врёт в обе стороны. Механика: хук судит ЗАКОММИЧЕННЫЙ док против РАБОЧЕГО кода, поэтому пере-нацеленные, но не залёнджённые якоря читаются как битые. Замерено на приёмке P12 31.08: у оркестратора хук напечатал 13 битых якорей platform/docs/DEFECT_REGISTER.md, у зоны counts.py --lint на том же дереве дал 0; права зона — в HEAD internal/runs/runs.go:323, в рабочем :347, и токен по новому адресу на месте. ⚠ Обратная сторона опаснее и не замерена: якорь, ставший битым ПО-НАСТОЯЩЕМУ, тем же механизмом может оказаться зелёным. Свойство общее, не про этот пак |
оркестратор | когда-нибудь | либо судить обе стороны из одного состояния (--from-index уже есть — проверить, покрывает ли он случай), либо печатать, что сравниваются РАЗНЫЕ состояния |
приёмка P12 оркестратором №21, 31.08, разрешено командой |
| 245 | Pathspec-форма коммита молча роняет UNTRACKED-файлы, и сломанный коммит выглядит нормальным до первого чужого прогона. git commit -- <пути> обходит ИНДЕКС и берёт рабочее дерево только для ОТСЛЕЖИВАЕМЫХ путей: предварительный git add нового файла она игнорирует. Поймано на лендинге P12 31.08 — коммит e1cb692 унёс migrations.sha256, уже ссылавшийся на три миграции, а сами миграции 00029/00030/00031 и три теста остались снаружи; починено амендом секундного неопубликованного коммита при пустом индексе (0a680a3). ⚠ Канон git-координации в CLAUDE.md объясняет про pathspec ТОЛЬКО то, что она не трогает чужой индекс — то есть учит половине правды и ровно этим создаёт ловушку. Норма, которую предлагаю вписать: новые файлы стейджить явно и проверять состав git show --name-only, а не доверять форме. ⚠ ПОЛОВИНА ПОСТРОЕНА 31.08 (94381bb, испр. 02.09): в docs/scripts/githooks/pre-commit стоит warn-блок, который перед каждым коммитом печатает неотслеживаемые файлы в каталогах коммита. Живой остаток — блок ПРЕДУПРЕЖДАЕТ, но не блокирует, и на свежем клоне хук вообще не установлен (строка 220) |
оркестратор | скоро (решение владельца — его канон) | одна строка в CLAUDE.md §«Git-координация мультисессий»; вписывает владелец или оркестратор по его слову |
лендинг P12 оркестратором №21, 31.08 |
| 246 | ⚠ ДВЕ КОПИИ ПОЛОСЫ ОТКАЗОВ 10–19 ОБЕЩАЮТ РАЗНОЕ — потребитель держит гарантию, которую производитель ОТОЗВАЛ. Движок (backend/cmd/tmctl/main.go:53=Nothing was written is NOT the band's promise any more): «„Nothing was written“ is NOT the band's promise any more … exit 15 legitimately answers with files on disk». Платформа (platform/internal/ingest/exit.go:38=nothing this process would have written was written): «… and nothing this process would have written was written». ⚠ Опасность не теоретическая: по PD-196 интейк действует по полосе РАЗРУШИТЕЛЬНО (отклоняет книгу и удаляет загрузку), а exit 15 теперь легитимно оставляет файлы на диске. Хвост: движковый exitBookIncomplete = 16 у платформы константы НЕ имеет вовсе (её словарь 10·11·12·13·14·15·19). ⚠ Денежная половина ЦЕЛА в обеих копиях (nothing was spent — по одному хиту в каждой), поэтому запрет отказывать классом полосы там, где деньги уже потрачены, в силе. Предсказано п.6 закона шва 17 |
платформа (правка) + оркестратор (маршрут) | СРОЧНО | зона платформы приводит свою копию к движковой ЛИБО обе стороны идут в ратификацию, если расхождение намеренное | пак «деньги и честность», находка A15 вне заказа, 31.08; пере-проверено оркестратором дословно обеими копиями |
| 247 | §2.2 закона раскрытия опровергает себя следующей же строкой — эррата зонного дока. Формальная фраза требует «держит ОБА операнда сравнения и обязано их НАПЕЧАТАТЬ», а её собственный пример тут же говорит обратное: честная форма — НАЗВАТЬ ОСЬ («снапшот разошёлся» честно, «конфиг/промпты изменились» ложно). ⚠ Ратифицированный текст D39.181 п.1 требования «напечатать» НЕ СОДЕРЖИТ ВОВСЕ — оно живёт только в backend/docs/DISCLOSURE_LAW_DESIGN.md, значит противоречия с ратификацией нет и решает ЗОНА, не владелец. ⚠ Довод «граница прячет имена моделей и хеши» ОПРОВЕРГНУТ исполнением: эти значения уже едут по тому же stderr штатным INFO-логом, включая memory_version=<12 hex> — значение того самого поля. Цена бездействия на живых данных = НОЛЬ (единственная сдвинувшаяся ось — хешевая, печать дала бы две несравнимые строки SHA) |
бэкенд | когда-нибудь | эррата к §2.2: операнды называются осью, а не значением | приёмка D39.182 + разведка оркестратора 31.08 |
| 248 | Полнота самообъявления о правках чужих тестов ничем не проверяется — и трижды оказалась неполной. P11 назвала файл, которого не трогала; P12 не назвала тест, у которого переписаны ОБА утверждения; сессия пака «деньги и честность» в первой редакции комментария утверждала неверное о силе собственной правки. ⚠ Мой метод проверки был слабее, чем я его подал: греп `^[-+].*t.(Error | Fatal)ловит строку СООБЩЕНИЯ, а утверждение — это строка СРАВНЕНИЯ, и она другая (замер: греп локализует утверждение в 1 случае из 475). Предложение разведки: warn-only гейт-детектор при лендинге — список пред-существующих тестов с изменёнными строками утвержденческой формы ВНУТРИ пред-существующих тел; прототип ~25 строк sh прогнан на двух лендингах и указал ровно наbankfixpack_test.go. Площадка есть — docs/scripts/githooks/pre-commitуже warn-only. ⚠ Ложняки измерены: целиком новыйt.Runвнутри старогоfunc` даёт срабатывание (1 из 6 на P12) |
оркестратор | скоро | гейт-детектор warn-only + пункт чек-листа приёмки |
| 249 | Девять рядов бэклога потеряли слово веса, и гейт на них НЕ краснеет. ⚠ Лечение ПОСТРОЕНО (сверено кодом 02.09): вес судится ПРЕФИКСОМ ячейки — docs/scripts/counts.py, греп BACKLOG_WEIGHTS (три слова: «блокер-очереди» · «скоро» · «когда-нибудь»), и «скоро» считается тем же префиксом. Этим убита ВТОРАЯ половина класса: подстрока ловила слово в ПРОЗЕ, и фраза «переведена из «скоро»» ре-добавляла ряд в счёт — число скакнуло 53 → 56 при одной новой строке (замер 02.09, пере-счёт скриптом). ⚠ Гейт рождён ЗЕЛЁНЫМ, а не красным: девять известных рядов внесены «дедовщиной» — греп WEIGHT_GRANDFATHERED там же, ряды 5 · 13б · 94 · 96 · 97 · 149 · 205 · 221 · 246. ЖИВОЙ ОСТАТОК — сами ячейки: у 96/97 прочерк ЗАКОНЕН (надгробия строк, уехавших в зонный бэклог, D39.84), остальные семь потеряли вес молча и чинятся оркестратором — каждая починенная выходит из списка дедовщины. ⚠ Два ряда шире класса: 149 («исполнен и заленден 10.08») и 205 («сделано 21.08») объявляют себя ИСПОЛНЕННЫМИ прямо в колонке веса, хотя по правилу таблицы закрытые строки в ней не живут — это либо живой остаток без веса, либо непойманный класс C; 246 несёт самодельное «СРОЧНО», которого в словаре нет. |
оркестратор | скоро ($0, гигиена трекера) | правка семи ячеек → выход из WEIGHT_GRANDFATHERED |
ревизия доков 02.09, приёмка контролёра |
| 217 | Скрипты полигона захардкодили АБСОЛЮТНЫЕ пути двух корней и не работают на этой машине вовсе. ДВА РАЗНЫХ слома. Корень репо — смена пользователя: литерал в 121 файле, из них 104 дословно REPO = Path("/home/ubuntu/projects/textmachine"), портабельных форм всего 5. Корень книг — оба события порознь: литерал /home/ubuntu/books 86 файлов (пользователь), портабельный Path.home()/"books" 89 файлов (переезд каталога; на прежних машинах работал). Объединение 173 файла. Пользователь теперь ubuntu-26, книги переехали в <репозиторий>/books ⇒ ломается и то и другое, включая ЖИВОЙ гейт фазы Д eval/conformance.py:49=REPO = Path("/home/ubuntu/projects/textmachine"). Живых носителей 26 по корню книг (среди них портабельная форма преобладает 20:6) плюс корневые гейты и сборщики корпусов; остальное — скрипты закрытых эксп-12–16, их владелец велел ВЫБРОСИТЬ, а не чинить (D39.157 п.4а). Форма правки — за зоной; приор оркестратора: один модуль путей, корень резолвится МАРКЕРОМ вверх по дереву (движок так и делает — backend/internal/miner/miner_parity_test.go:29=derived from the repository MARKER), книги от него, обе ручки перекрываются env |
полигон | скоро (блокирует любой прогон зоны) | пак путей полигона | переезд машины 24.08, №19 |
| 219 | Line-якоря в тела D-лога обречены съезжать, и механизм именно в дисциплине эррат. Эрраты вписываются в КАРТУ ШАПКИ (append-only, D23.3), то есть в начало файла, — значит каждая эррата сдвигает номера строк ВСЕХ тел ниже, и любой якорь вида 05-decisions-log.md:NNN умирает молча. ⚠ Замерено на себе 27.08: три эрраты за сессию убили якоря в docs/architecture/17-seam-inbound-law.md (греп Эррата, которую ратифицирующая нота обязана поставить) и docs/research/25-seam-cold-review.md:5=адресуем НОМЕРОМ, а не строкой (оба целили в :232, тело уехало на :239; ⚠ 02.09 обе площадки уже переведены на форму номера ноты — прежний голый указатель 17-seam-inbound-law.md:120 показывает пустую строку). Лечение — не пере-нацеливание (оно повторится через эррату), а СМЕНА ФОРМЫ якоря: в тела D-лога целиться номером ноты (^## D39.106), который стабилен навсегда, а не строкой. ⚠ Первая половина лекарства ПОСТРОЕНА: counts.py --lint сверяет якоря в тела D-лога СТРУКТУРНО и без токена — владелец целевой строки (ближайший ^## D<номер>) обязан совпасть с номером, названным рядом; остаётся перевести живые якоря на форму номера |
оркестратор | скоро (растёт с каждой эрратой) | --lint учит форму файл:^## D<номер>, живые якоря в D-лог переводятся на неё |
ревью доков 24.08, механизм и отсутствие носителя — 27.08, D39.160 |
| 220 | Репо-широкий гейт доков бутстрапится пакетным менеджером ОДНОЙ зоны, и та заморожена. Диспетчер .git/hooks/pre-commit зоно-нейтрален по построению (for hook in */scripts/githooks/pre-commit, #!/bin/sh, node не нужен) и судит CLAUDE.md + docs/** + platform/docs/** + frontend/docs/** (docs/scripts/counts.py:536=ROOT / "CLAUDE.md"), но единственный его УСТАНОВЩИК — frontend/scripts/githooks/install.mjs, вызываемый ключом prepare из frontend/package.json. Охват и бутстрап не совпадают ⇒ инструмент решает свою задачу не в полной мере. Проверено исполнением 24.08: на этой машине .git/hooks/ содержал только *.sample, гейт МОЛЧАЛ, ничего не проверив, и поймал первые четыре дефекта только после ручной установки; сессия бэкенда или доков npm install не делает никогда. Приор: зоно-нейтральный установщик в docs/scripts/githooks/ как ЕДИНСТВЕННЫЙ писатель диспетчера, prepare фронта зовёт его — фронтовая половина выписана пингом №19 в зонный журнал фронта. ⚠ Ручная установка — временная мера, пока строка открыта; записывать её как порядок работы ЗАПРЕЩЕНО (это ровно тот обход, цену которого называет шапка CLAUDE.md) |
доки + фронт | скоро | зоно-нейтральный бутстрап + правка prepare при разморозке |
аудит переезда 24.08, №19 |
| 49 | Этапы Б+В спеки D15.2 (content-addressed resume / guard_hash — D39.31 сознательно не строил) ; этап В = tmctl export-контракт D29.1 (annot-v1 · цвет-мап+rollup · политика красных fail-closed) + операторский протокол-документ релиза гендер-твиста (D5.1): сам механизм УЖЕ построен — until_ch-правка → точечный re-edit со сметой и $0-пере-пином (repin.go/rebill.go, D39.42 п.5/D39.45) |
бэкенд | скоро (ПОДТЯНУТА D39.81: annot-v1 = источник замечаний для фронта — критический путь подключения) | отдельное решение (annot-половина — по контракту 14, D39.99) | D39.34(4), D33 п.5, D39.81 |
| 49а | ALTER-шаги миграций v8–v14 не идемпотентны вопреки шапке migrate.go:9-11 (полу-применённая БД не сходится; счётчик версий скрывает) — находка критика полноты пака-19 |
бэкенд | когда-нибудь | отдельное решение | D39.56, PACK19_BUILD §6.9 |
| 50 | F3-остаток идемпотентности | бэкенд | когда-нибудь | отдельное решение | D39.34(4) |
| 51 | human_override LOCK (D29 п.1г, в коде 0 вхождений) |
бэкенд | когда-нибудь | отдельное решение | D39.34(4) |
| 52 | Ф2-гейты вне идеала: морфо-гейты канцелярита + L1-лемматизация (python-сайдкар) · полный OpenCC · опциональный пре-перевод гейт ; состав явно: канцелярит + РОД (строка 82) + класс Ф2-гейтов карты 04-unhappy (обсцен-гейт/феминитивы/время сцены — состав решить паком) ; + класс идиоматики (свип-хвост, D39.73): сехоуюй-словарь · вэньянь-классификатор (zh) · васэй-эйго ложные друзья (к ja-паку 81) — данные пары или закрытие «банк книги покрывает» тем же паком | бэкенд | когда-нибудь | отдельное решение | D39.34(4) |
| 54 | Масштаб целой книги: волны/каденс/потолки/ETA на сотнях глав (гоняли максимум 10; книга 7,78 млн симв., ~2284 раздела). ⚠ Дописка инвентаря №18 (D39.147 п.2г): жёстких потолков размера в коде НЕТ, но исходник читается в память целиком (chunk/ingest.go:98), чтения стора беспагинационны под opTimeout = 10s (store/store.go:39) и бюджеты нарезки калиброваны на 25 главах (config/pipeline.go:126-138) — ни одно из трёх на 2283 главах не проверено ничем |
бэкенд | когда-нибудь (последним по курсу) | МАСШТАБ | D39.33, CURRENT-STATE |
| — ПОЛИГОН (кандидаты пакетов) — | |||||
| 55 | dialogue_dash мерить только на невиданном тексте (подогнан под 蛊真人; цифры мини-прогона аргументом не считаются) ; расширено до вне-претрейн чекпоинта целиком: r-коэффициенты exp01/08 · precision чекеров · частота эха · чистовик exp15-выводов ; + arity-полоса паспорта (D29.2г): решить — dialogue_dash покрывает диалоговую половину или мерить (D39.73). Частично закрыта эксп-21 (D39.117): направление главного вывода воспроизведено на чистом en-материале (узнавание 1/5), $0-довесок исполнен частично; срез эксп-21 НЕ купил (главный zh-замер на книге 4/5, без пинга) — остаток = неконтаминированный zh-срез |
полигон | скоро (эксп-22 Ф0 — повторный ЖЁСТКИЙ заказ, стоп при неисполнимости) | эксп-22 | D39.37(4), D39.40, D39.46, D39.108, D39.117 |
| 56 | Ёфикатор/санитайзер-классы не размечены (§6.5 отчёта пакета-6) | полигон | когда-нибудь | полигон-пакет | D39.46, CURRENT-STATE |
| 57 | Пере-замер «контексты — главный рычаг» на трудной выборке пакета-7 с боевой сборкой (до него kwic-веса/семантику не трогать; перф-хвост AttachKWIC — строка 37: фикс-пак 128 закрыт D39.118, опция в нём не взята, семантика не менялась) — напряжение с D39.46 названо, не отменено | полигон | когда-нибудь | полигон-пакет | D39.50, D39.118 |
| 58 | Не покрыто пакетом-8: вторая книга/пара/модель · строка drafts: · ось batch_runes · разметчики-модели (не люди) · precision роли на «расширенном, но осмысленном» материале ; + контрастивный регрессионный сьют по каталогам режимов отказа (12-*) · чистовик exp15-выводов |
полигон | когда-нибудь | полигон-пакет | POLYGON_PREMEASURE §1.8/§2.5/§3.5/§7.6 |
| 59 | Вендор-чек префикс-кэша ZAI/GLM (на нём стоит вся кэш-экономика W1/Q2c) ; + GLM context-overflow гард (finish=model_context_window_exceeded — NOT-do пака-12 без решения) ; + Mistral-strip гейт message-builder (research/21 §1.1: extra_forbidden на reasoning-поля; ЛАТЕНТЕН при нашем single-shot wire — гейт перед прод-путём mistral в канале B / любым multi-turn; D39.74) | полигон | когда-нибудь (до МАСШТАБА) | полигон-пакет | D39.34(6) |
| 60 | Scheduler-aware волны под peak-valley DeepSeek (прямой COGS-рычаг) | полигон/бэкенд | когда-нибудь (до МАСШТАБА) | отдельное решение | D39.34(6) |
| 61 | Прайс/wire-гигиена: продление prices_checked без правки чисел · гейтнутые платные армы (edit-единица >3200 и др.) · wire-probe temperature в thinking-канале DeepSeek |
полигон | когда-нибудь | полигон-пакет | D39.34(6) |
| — Ф2.5 / ПИЛОТ / ПРОД — | |||||
| 62 | Билингв-якорь (D25 п.9 Q1) | владелец | когда-нибудь | Ф2.5 | D25 п.9, CURRENT-STATE |
| 63 | Контаминация корпуса (D27 п.4) | владелец/полигон | когда-нибудь | Ф2.5 | D27 п.4, CURRENT-STATE |
| 64 | Судья-дублёр (D22.6) | бэкенд | когда-нибудь | Ф2.5 | D22.6, CURRENT-STATE |
| 66 | Пилотные D25-гейты: publishable/waiver (п.1) · FN-bound L3 (п.4) | владелец | когда-нибудь | Ф2.5 | D25, CURRENT-STATE |
| 67 | Прод-гигиена: юр-пакет · провенанс 12-*-доков · xAI-ключ off перед продом (D27) ; + юрисдикционные annex-ре-чеки при новых рынках (D39.29) + поле «версия исходника» book.yaml на интейке (04-unhappy §5) | владелец | когда-нибудь | Ф2.5 | D27, CURRENT-STATE |
| 68 | Residual-тачпойнты exp16, не влитые в сид-дельту: мини-голд алиасов (ОТЛОЖЕН до первого длинного прогона — D39.103) · precision@30 (books/gu-zhenren/exp16/) |
полигон | когда-нибудь | Ф2.5 / полигон-пакет | CURRENT-STATE |
| — Ф3 / ПРОДУКТ — | |||||
| 69 | Gemini API «под-18» обязательство на конечный продукт (независимо от лейблов) | владелец | когда-нибудь | Ф3 / отдельное решение | D39.32, D39.34(7) |
| 70 | Action-security gate перед выдачей tools/webfetch (D25 п.5) | бэкенд | когда-нибудь | Ф3 | D39.34(7) |
| 71 | Планы research/22: epub-tag-rewrite · Q7-леджер ; + F3-brief из D29 п.3 (chat-edit · Not-useful-петля · cost-of-fix) + Ф3-скоуп 02-mvp-plan (TMX/TBX · Bertalign · дистилляция 7–14B); + V5: фронт ВЕБ-ПЕРВЫЙ, SEO/ранжирование (куки · страницы-сироты · актуальные алгоритмы Google) — определяет выбор фреймворка (SSR vs SPA), в Ф3-дизайн ДО выбора стека (ПТ-23) | бэкенд | когда-нибудь | Ф3 | D39.34(7), START_PROMT V5, D39.80 |
| 94 | Продукт-механика входа и прогона (V2, ПТ-16..18): абьюз/misuse-прескрин дёшево и точно ДО трат токенов (H8) + UI-контракт отказа (проект-решение D39.80) · лимит размера входа настройкой (H7) · продукт-кнопки «стоп/продолжить» поверх построенных graceful stop и redrive, абьюзивный прогон НЕ продолжать (H10); API-форма — по контракту 0.3.0 (отказ прескрина РЕШЁН: rejected + грубый content_refused, К-9 закрыт D39.138 п.2б) |
бэкенд | к подключению фронта (ПОДТЯНУТА D39.81; лимит можно раньше, к пилоту) | отдельный пак при Ф3-препе (контракт 14 ратифицирован) | START_PROMT V2, H7/H8/H10, D39.80, D39.81 |
| 96 | → переехала в platform/BACKLOG.md П-1 (зонные бэклоги, D39.84: HTTP/SSE-слой, обвязка, аутентификация, порядок деплоя); здесь остаётся ратифицированным сам ИНВАРИАНТ D39.81 — движок = процесс-на-прогон (EXCLUSIVE flock store.go:43), сервер в backend НЕ пишется |
платформа | — | зонный бэклог | D39.81, D39.84 |
| 97 | → переехала в platform/BACKLOG.md П-2 (глобальный брокер рейт-лимитов; гейт «до второго параллельного пользователя» зафиксирован там же) |
платформа | — | зонный бэклог | D39.81, D39.84 |
| 127 | Устаревший DDL-коммент glossary.source (migrate.go:194: «seed |
ruby | auto», фактические пути записи — seed/ruby/mined, auto не пишет никто; фантом уже утёк во фронт-доки дважды) — поправить коммент |
бэкенд | когда-нибудь (попутно любым паком store) |
| 105 | Роль classifier мис-вердиктится как эхо (verdict=cjk_artifact при bad_lines=0); ЛАТЕНТНО — classify_types выключен во всех шиппинг-конфигах. Цена фикса, знать заранее: бамп classifierVersion → перекупка чекпойнтов классификатора (центы). Поля rules=/VOICE читать по знаменателям (13б). Разбор дословно — architecture/13-tech-debt-anchors.md §Б-105 |
бэкенд | когда-нибудь (ближайшее касание банка/наблюдаемости; (б) — дешёвая часть, вердиктов не двигает) | малое касание + вердикт-двигающая половина (а) через СТОП-решение | D39.86 |
| 106 | Слой 3: целевой контракт «узкие мандаты + ДИФФЫ» против текущего full-regen — гейт «перепроверить до стройки» в силе, приоритет ПОНИЖЕН (D39.117: full-regen выигрывает у ремонта; оговорка полигона — чинил дешёвый фиксер по предложению, не сильный редактор узким мандатом). Реактивация — только через эту строку. Археология дословно (эмпирика D39.108 · история дыры учёта) — architecture/13-tech-debt-anchors.md §Б-106 |
владелец → бэкенд | когда-нибудь (пере-проверка «сильный редактор × узкий мандат» — перед стройкой слоя 3) | замер → решение владельца | 09 §Слой 3, D39.90, D39.108, D39.117 |
| 113 | Запас боевого гейта не зафиксирован тестом, а харнесс, давший число, УДАЛЁН (Д-хвост D39.90). Числа «18 из 20 · 0 ложных на 1055 · запас 13× (0.0117 против 0.15)» и «санитайзер поймал бы английский черновик» получены ВРЕМЕННЫМ тестом в пакете pipeline (splitBanknote+StripThink+sourceScriptShare), который сессия удалила после снятия. Число ушло в контракт (строка 46), воспроизвести его нечем. Делать: корпус-фикстура в репо (~20 off-target + ~40 здоровых, с движковой предобработкой; снапшот НЕ двигает) + регресс-тест на реальный запас — это база, которую обязано побить любое предложение по 46. СТОП, если фикстура не воспроизводит 18/20 при 0 FP, или если запас меньше 3× |
бэкенд | скоро (перед любой правкой по строке 46) | $0 фикстура + регресс-тест | D39.90, EFFORT_HANDLE §5.4 шаги 1–2, §7 |
| 114 | Конфиго-слой ручки эффорта: два дешёвых хвоста приёмки (вне снапшота, $0 прогонов). (а) Д4 отчёта: gates.terminology.target_script НЕ сверяется с book.target_lang — target_lang: ru + target_script: Latin грузится чисто и ИНВЕРТИРУЕТ банковский экран (ловит целевой, пропускает чужой); сверка при загрузке против lang.LangScripts(TargetLang) — тот же дата-план, что у экрана строки 46, громкий отказ на несовпадении. (б) Находка-2 приёмки: стейл-доккоммент capability.go:78 — у константы ReasoningExtraBodyDisable до сих пор «effort "" leaves the provider default», противореча проводу (applyToBody мержит disable на "", комментарий в теле arm это прямо объясняет) и починенному ThinksOnWire; однострочник тем же касанием |
бэкенд | скоро (мелкий пак или попутно со строкой 46) | правка Go, снапшот не двигает | D39.91, EFFORT_HANDLE Д4 |
| 115 | //go:embed целевых данных — ЯВНЫЙ список файлов: новая ЦЕЛЬ требует правки Go (Д6 отчёта). internal/lang/embedded.go:22 перечисляет файлы поимённо, CompileCheckers паникует при неполном файле цели ⇒ на канон-вопрос «заработает ли пара, которой в репо НЕТ, без правки Go» ответ сегодня НЕТ — дыра в ратифицированной «ФАЗЕ 2 ОБЩНОСТИ ✅» (D39.64), и она не про язык, а про строку эмбеда. Решить форму: embed data/* (и как манифест фолдится в EmbeddedVersion, чтобы НЕ перекупать чужие пары) против явного списка как осознанного гейта полноты данных цели |
оркестратор → бэкенд | когда-нибудь (триггер: первая новая целевая пара; учтён в реестре 108) | отдельное решение | D39.91, EFFORT_HANDLE Д6, D39.64 |
| 108 | Реестр ЗАГЕЙЧЕННЫХ ТРИГГЕРОВ (триггер → что вернётся → источник) — ВЫСЕЛЕН ДОСЛОВНО в architecture/13-tech-debt-anchors.md §Б-108; сверять на каждом переходе горизонта (норма D39.66 «каждое отложено получает носитель» в силе). ⚠ Живое оттуда: go.work-триггер УЖЕ наступил (platform/go.mod заведён) · вахта маппинга эффорта dspro «early August 2026» · движение тулчейна к go1.27 ⇒ строка 119 ПЕРВОЙ |
оркестратор | скоро ($0, гигиена трекера) | завести реестр + сверку в норму лендинга | D39.66, D39.90 |
| 109 | Продуктовые требования без строки-носителя: ПТ-6 (структура абзацев) · ПТ-7 (слабый оригинал — вопрос владельца) · ПТ-22 (продуктовый интейк настроек) · ПТ-10 (механизм веб-фетча). Носители заводить при первом касании тем; реестр product-requirements.md первичен. Разбор дословно — architecture/13-tech-debt-anchors.md §Б-109 |
оркестратор/владелец | скоро ($0 — расписать носители) | завести строки/вопросы → диспозиции | D39.90, product-requirements |
| 110 | Детектор повторов лемм / защита авторских рефренов (04-unhappy-paths.md:97,130 п.5): $0-минимум исполнен промптом (editor.md, пакет-чекеров 02.08), механизм явно не строился — «нет размеченного класса; связка с alignment/Bertalign». Строки-носителя не было; предмет живой, потому что отличить дефектный повтор от авторского рефрена без выравнивания нельзя |
бэкенд/полигон | когда-нибудь (с корпусом пилота, строка 85) | размеченный класс → решение | 04-unhappy §5, D39.90 |
| 111 | Дубль ключа пар-файла: фикс накрыл половину. D39.82 закрыл строку 53 через putUniqueDC в parseDCCheckers, но генерик-парсер категорий parseCategoryRows (internal/lang/langpack.go:806-826, строка cats[f[0]][f[1]] = val) по-прежнему МОЛЧА last-wins — а якорь техдолга указывал именно на него. Пар-данные с опечаткой-дублем тихо теряют первую строку |
бэкенд | когда-нибудь (малое касание, с любой правкой langpack) | fail-loud + тест | 13-tech-debt-anchors, D39.82, D39.90 |
| 118 | tools/go.mod — РЕШЕНИЕ ПРИНЯТО (D39.97 п.4): строить отдельным малым паком. cmd/tmvet+internal/archguard → отдельный модуль (backend/tools/); make battery гоняет оба модуля; tool-директива Go 1.24 НЕ решает (MVS общий). Выигрыш: бамп инструментов физически не двигает x/net/x/text. Sqlite 1.55 остаётся (D39.97 п.4) |
бэкенд | скоро (до следующего бампа зависимостей) | малый пак по D39.97 п.4 | D39.96 п.6, D39.97 |
| 119 | x/text-детерминизм: вердикт-несущие вызовы НЕ свёрнуты в версии (находки-5/6 приёмки). SanitizerVersion не сворачивает ничего x/text-ного, а detectCJKLeak зависит от width.Fold (sanitizer.go:211,687) — смена x/text перевернула бы вердикт БЕЗ смены снапшота; ExportNormalize меняет экспортные байты вне хешей (sanitizer.go:709); xTextVersion пинит строку go.mod, НЕ скомпилированные таблицы — тулчейн go1.27 переключит x/text на Unicode 17.0.0 МОЛЧА (tables17.0.0.go //go:build go1.27; жилец реестра 108). Делать: явные версии-свёртки + механическую сверку «таблицы↔константа» вместо совпадения |
бэкенд | скоро | правка версий-свёрток + тест | D39.96 п.6, отчёт §5 находки-5/6 |
| 120 | buildCheckers жёстко берёт lang.Load(root,"zh","ru"), бейзлайны ключуются по классу, не по паре (§7-8) — приезд ja-ru требует правки Go, против мандата общности §0.1. Родня строки 115 (явный embed-список целей) — брать одним касанием |
бэкенд | скоро | правка Go + тест на паре-которой-нет | D39.96 п.6, отчёт §7-8 |
| 121 | archguard v2 — остаток (б)/(в)/(г)/(д); (0а)/(0б)/(а) ЗАКРЫТЫ дофиксом D39.97. Полный фикс-лист посадок приёмки D39.96 с file:line — дословно в architecture/13-tech-debt-anchors.md §Б-121 |
бэкенд | скоро (остаток: (б) тип вместо свитча · (в) build-теги · (г) 4-й анализатор · (д) семь пропусков) | правка анализатора + посадки | D39.96 п.2/п.6, отчёт §7-9/12/13 |
| 122 | Гигиена пака стандартов — 11 микро-пунктов, не-блокеры приёмки (D39.96/97). Полный список дословно — architecture/13-tech-debt-anchors.md §Б-122 |
бэкенд | когда-нибудь | мелкие правки | D39.96 п.6, отчёт §7-6/7, §9 хвост |
| 123 | Полигон: jieba==0.42.1 — build-time зависимость артефакта контраста eval/exp16/data/jieba_dict_general_zh.txt (пере-собран бэкенд-сессией 03.08, полный sha256 сошёлся с пином 16-bank-mining.md); дописать в манифест окружения полигона с пометкой «build-time, не runtime» |
полигон | когда-нибудь | строка манифеста | D39.96 п.6, отчёт §7-4/§6 |
| 124 | Калибровка снапшота (вопрос владельца 04.08, разбор D39.97 п.5): нацеленность, не агрессивность. ⚠ Осей теперь ЧЕТЫРЕ — дописка D39.151: (г) идентичность оплаченной работы («строка диспозиции ↔ вызовы, которые её оплатили») — переселена сюда из строки 195 решением владельца 17.08; родня оси (в), потому что массовое кросс-снапшотное переиспользование подрывает наивную атрибуцию по равенству снапшота; смежный носитель — §7 спеки D15.2. Прежние три оси одним дизайн-паком: (а) недо-чувствительность — вердикт-несущие вызовы x/text не свёрнуты (вход: строка 119); (б) пере-охват — EmbeddedVersion фолдит все пары разом → пер-парный хеш (родня 115/120); (в) дешёвая перекупка: tmctl resnapshot --dry-run — байт-сверка тел по чекпойнтам (msgsContentHash), идентичные юниты пере-привязываются без пере-вызова, платятся только изменившиеся. «Поведенческий отпечаток вместо строки версии» отложен (пол ≠ доказательство) |
бэкенд | когда-нибудь (перед МАСШТАБОМ — когда перекупки станут реальными деньгами) | дизайн-пак по D39.97 п.5 | D39.97 |
| 221 | Джойн «предложено × решено × нерешено» живёт ТОЛЬКО в движке. Читаемый банк несёт итоги без предложений, карта подписи — предложения без решений; семантика «решено ли» (ownerHandled) существует в двух файлах движка и больше нигде (греп по трём зонам). Экран подписи при разморозке фронта заставит платформу пере-реализовать движковый закон у себя — дубль, запрещённый п.6 закона шва. Фикс: движок публикует нерешённость (секцией банк-экспорта или отдельной проекцией) — но ТОЛЬКО когда экран закажут: рефакторить под несуществующий экран не надо. Сейчас — ноль кода ⚠ КОНСИЛИУМ 27.08 (оркестратор №19 + автор движковой двери), итог записан, чтобы его не выводили заново. (1) Это ОДИН дефект, а не три: 221 и 224 — ось СОДЕРЖАНИЯ (проекция не несёт предложенное и не несёт джойн), остаток компаньона — ось СВЕЖЕСТИ (дверь пишет источники мгновенно, проекция ждёт границы прогона, которой при стоящем прогоне не наступает). Классический разрыв CQRS. Чинить порознь = три полу-лечения. (2) Поле BankTerm.decision МЕРТВО СТРУКТУРНО — довод сильнее прежнего «запрет владельца»: decline выражает себя ИСЧЕЗНОВЕНИЕМ строки, а не значением поля (writeAutoBank делает continue на ownerHandled, mining.go:709+), и негде показаться ни в одном из трёх окон; для approve поле избыточно — status: approved публикуется. Проверено двумя независимыми трассами. ⚠ Вопрос был СНЯТ ещё D39.144 вместе с ложной посылкой «марш к нулю, 17 из 300»; сегодняшняя потребность иная и уже — перезагруженный экран показывает СДЕЛАННЫЕ ПРАВКИ. (3) Форма-кандидат Д′: ДВЕ проекции, у каждой РОВНО ОДИН писатель — «решено на границе» пишет прогон рядом с картой, «решено после границы» пишет дверь при записи; экран склеивает по паре (поверхность, map_id), счёт приезжает ПОСЧИТАННЫМ. Правило единственного писателя остаётся буквально, поправка онтологии НЕ нужна. Конверт карты из дофикса-2 получает здесь первого потребителя. ⚠ Колонка undecided обязана ехать с тем же НЕ-гейтовым контрактом, что SignatureState, иначе пер-термная модель вернётся через новую проекцию. (4) Подпункт «история»: glossary_revisions построен наполовину — читатель вызывается только из тестов, графа reason заполняется литералом seed-replace, а ревизия пишется лишь для ОСТАВШИХСЯ строк, то есть журнал слеп к отклонениям; владельческий note доезжает до вида (glossary.go:41,161) и не публикуется ни одной проекцией. ⚠ Journal append-only: не заказать ревизии без исчезновений задним числом уже не выйдет. Пак не заказан — ждёт слова владельца |
бэкенд | гейчена разморозкой фронта | аддитивное поле проекции | приёмка двери 27.08, D39.158 |
| 222 | ВНУТРИкнижный остаток оси арбитра: второй конфиг ТОЙ ЖЕ книги с другим project_db пишет ту же пару файлов решений под ДРУГИМ локом, мимо флока живого прогона. Достижимо по построению: пути решений считаются от каталога book.yaml и book_id, лок — от project_db. Рукотворная конфигурация оператора (две базы одной книге), лечение трогает ратифицированный п.2 закона (второй арбитр на идентичности файлов решений либо отказ при загрузке). ⚠ Межкнижная версия ЗАКРЫТА снятием объявляемых ключей (D39.158 п.5) |
бэкенд | когда-нибудь (непропорционально: правка ратифицированного закона ради операторского футгана) | второй арбитр ЛИБО отказ при загрузке | приёмка двери 27.08, D39.158 |
| 223 | Майнерский хвост за потолком структурно недостижим. Потолок эмиссии (200) применяется ДО фильтров пригодности, сида и отказов, а детектор кандидатов сида и отказов не видит вовсе — репозиторий пишет это про себя дословно. Замер: 2110 ранжированных → 442 годных во всём алфавите → 117 внутри окна потолка → 325 невидимы постоянно; отклонение всех 117 не подняло ни одного. ⚠ Решения владельца слотов НЕ освобождают, и это верно СЕГОДНЯ, а не следствие флажка; цитата «пере-предлагается once these are signed or declined» относится только к ОБРАТНОЙ секции. Двигать потолок — трогать фрозен-паритет, отдельное решение. Якорь-пин: internal/miner/emissioncap_test.go |
бэкенд | когда-нибудь | решение о потолке, не правка | приёмка двери 27.08, D39.158 |
| 224 | Банк-экспорт на стопе ПУСТ — проекция, наиболее пустая ровно в момент, когда её читает экран подписи. Замерено: стоп с двумя предложенными термами даёт total=0, авто-банк на стопе отсутствует, потому что он пишется только в ветке авто-продолжения; при этом комментарий рядом называет стоп «границей, которую читает экран подписи», а платформа читает именно .bank.json. Член класса «проекция без контракта потребителя» (architecture/18-bank-ontology.md) |
бэкенд + платформа | скоро (держит экран подписи вместе с 221) | публиковать предложенное на стопе | приёмка двери 27.08, D39.158 |
| 225 | Гейт «строка open, а лекарство уже в дереве». При лендинге пересекать ПОЛНЫЕ пути застейдженных файлов с якорями открытых строк регистра и бэклога; совпадение — вопрос лендеру, а не находка следующего пака. Замерено прежде решения: по именам файлов 22 совпадения, почти все ложные; по полным путям 2, оба настоящие, и один из них (PD-157) убил мой же лендинг d1eb8a9. Норма-половина уже стоит в platform/docs/ENGINEERING_STANDARDS.md §3 п.8; здесь — машинная половина, режимом counts.py |
оркестратор | скоро (окупился до постройки) | режим counts.py, берущий список путей и печатающий открытые строки, чьи якоря в них целят |
приёмка пака P8-REVIEW 27.08, D39.159 п.7 |
| 226 | История ПРЕДЪЯВЛЕННОГО не ведётся — «почему меня не остановило на этом термине» ответить нечем. Карта и человеческая таблица стопа перезаписываются каждым прогоном, память флажка — плоское множество поверхностей без map_id и без времени. Это прямая расплата за то, что стоп срабатывает ОДИН раз (кластерная память, названный остаток дофикса-2), и единственная возможная диагностика спора. Кандидат в пак решённости, не заказ. ⚠ Шестое, названное консилиумом и оставленное владельцу: авторство и время решения — сегодня цена нуля (владелец один), станет нужным при мультипользовательской платформе, и тогда его захотят ЗАДНИМ ЧИСЛОМ |
бэкенд | скоро (диагностики нет вовсе) | движок метит предъявленное map_id и временем; оверлей отвечает «что предъявлялось на прошлом стопе» |
консилиум по читающей стороне банка 27.08 |
(Указатели на архив-слайсы хроники — бюллетенем «Архивы хроники» в CURRENT-STATE; здесь копий нет.)
Бэкенд
Состояние зоны на 31.08: активного промта НЕТ, дерево
backend/чисто. Ратифицированные лендинги зоны: входная дверь шва — D39.158 (d1eb8a9) · «тихая порча» — D39.164 (7d0c6f2) · «деньги» — D39.170 · гейт схемы — D39.173 · «писатель книги» — D39.175 (8adcb86) · «деньги и честность выдачи» — D39.182 (bb541a8) · ЗАКОН РАСКРЫТИЯ, ратифицирован владельцем — D39.181 · четыре строки бэклога закрыты тем же лендингом — D39.185. Диспозиция по D25.1 ратифицирована D39.175 п.2 (drift — не дыра файла; лестница — владельцу между паком и дверью).Свободная работа зоны — строками бэклога: 246 (СРОЧНО, две копии полосы отказов обещают РАЗНОЕ) · 247 · 232 · 233 · 197 (ресурс ушёл в фазу 1, строка не взята) · 228 · 229 · 230 · 141-остаток · 131. ⚠ Строк 231 и 236 в таблице БОЛЬШЕ НЕТ — 231 съел пак «деньги», 236 сужена D39.175.
⚠ Прожитая проза зоны за 24–31.08 СНЯТА отсюда — история живёт слайсом archive/PROGRESS-2026-08-backend.md и телами нот выше; читать её не надо. Доказательная база пака «деньги и честность» и ВСЕ его пинги — файлами зоны:
backend/docs/MONEY_HONESTY_REPORT.md(§7 — пинги оркестратору, §9 — экземпляры закона по одному, §0.1 — батарея ИСПОЛНЕНИЕМ, §5.1 — разложение покупок П1/П2/П3: ось пере-покупки терминолога = БАЙТЫ БАТЧА, а не сдвиг снапшота — это и есть «пинг №2», которым D39.185 п.1 адресует сюда; §6.2 — адверсариальный проход),backend/docs/DISCLOSURE_LAW_DESIGN.md,backend/docs/MONEY_HONESTY_PLAN-NOTE.md; промт —archive/prompts/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md.
02.09 — эхо-записка пака «число согласия на пути второй покупки» (промт BACKEND_CONSENT_SESSION_PROMPT.md, сессия textmachine-77)
Канала к оркестратору нет: адрес в
/tmp/textmachine-channel(textmachine-33) вListAgentsотсутствует, промт писан на другой машине — вопросы едут секцией отчёта ниже. Дерево на входе чисто, HEAD494c4ef; всеfile:line-якоря промта сверены грепом на этой машине и сходятся. Скоуп — четыре пункта в порядке промта: (1) ФЧ-5, ось МОДЕЛИ: строка прайсится по модели, которую её стадия резолвит СЕЙЧАС (Stage.ResolvedModel); округление вверх при незнании = максимум из цен по ответившей модели, по текущей и — для эскалационных вызовов — по текущему хопу; оговорка «оценка, ошибается вверх, вот чем» в ОБОИХ текстах согласия; обещание точности снимается вstatus.go(комментарий уRebillUSD) и в шапкеreprice.go. (2) Строка 232, остаток «слот»: юнит, который прежний прогон НАЧАЛ (есть строки текущих позиций) и не отгрузил по осиfinalStageWave, слота гранта повторно не тратит — дописывается вне гранта, считается отдельно. (3) ФЧ-4 обе половины:rebill_historical_rowsвstatus --jsonпод тем жеrebill_basis+ basis в тексте отказа--accept-rebill=<usd>; одна формулировка basis для CLI-статуса и текста отказа. (4) ФЧ-1: ровно три названные гарантии — сперва воспроизвести мутацию на копии и увидеть зелень, потом посадка тестом + запись вcmd/tmmutate/mutations.json. Инварианты: направление ошибки — никогда не занизить молча (D39.150) ·statusиtranslate— ОДИН вывод · фигура едет с базисом (D39.181 п.1) · ось отгрузки =finalStageWave, не draft и не «любая» · схема хранилища, форма манифеста, версия контракта НЕ трогаются · тесты не подгоняются, заказанная смена поведения объявляется (D39.183). Не делать: строки 160 · 221 · 224 · 226 · 228 · 230 · 246 · 247 · 233 · 229 · 141-остаток · 131 · платный замер · новое поле в кадреfinishedшва (класс «поле в опубликованном документе» — ратификация оркестратора; счётчик «дописан вне гранта» живёт в отчёте прогона и логе, вопрос — в отчёт) · коммиты. Самопроверка исполнением: дифф^func Test(база 1083, снимок имён снят) · собственные посадкиtmmutateна копии в scratchpad · свежий адверсариальный проход субагентами Fable 5 (число назову) ·make batteryна копии до и на дереве после.
03.09 — ОТЧЁТ пака «число согласия на пути второй покупки» (сессия textmachine-77, промт BACKEND_CONSENT_SESSION_PROMPT.md)
Итог: четыре пункта состава исполнены, дерево
backend/готово к лендингу, НЕ КОММИЧУ (git diff --cached --name-only→ пусто). HEAD на входе494c4ef; после согласованного с платформой (textmachine-37)git pull --ff-only—2a63c37. Входящее (72 файла) не пересекалось ни с одним моим файлом, кромеdocs/PROGRESS.md: свою записку сняла редактором, дала git пройти fast-forward, вернула. Индекс не трогала, stash не применяла. Канала к оркестратору нет:textmachine-33вListAgentsотсутствует, промт писан на другой машине — вопросы секцией ниже. Всеfile:line-якоря промта сверены грепом здесь и сошлись. Батарея на финальном дереве:cd backend && make battery→MAKE_EXIT=0,golangci-lint0 issues,okв 18 пакетах, SKIP:TestMinerFullBookParity,TestHelperEventsRun,TestHelperKillLoop. ⚠ Скипов ТРИ, а не шесть как в базовом прогоне, и это не ослабление:TestCheckerLabelsBaseline/TestCheckerLabelsCandidates/TestK6LabelsBaselineв реальном дереве корпус находят и ИДУТ —go test ./internal/checks/ -run TestCheckerLabelsBaseline -count=1 -v→--- PASS,go test ./... -run TestK6LabelsBaseline -count=1 -v→--- PASS. Базовый прогон гнался на копии в/tmp, где маркер корня репозитория не находится. Тесты^func Test:grep -rn '^func Test' backend --include=*_test.go | wc -l→ 1083 → 1105; пофамильный дифф двух снимков (comm -23) — удалённых 0, добавленных 19.
Комплектность против заказа — по четырём пунктам и по таблице разметки.
1. ФЧ-5 — ось МОДЕЛИ. Все ЧЕТЫРЕ обязательства D39.150 п.1.
- (1) прайс по модели, которую стадия резолвит СЕЙЧАС.
internal/pipeline/reprice.go,currentModelFor(stage, escalation): для эскалационного вызова — текущийResolvedHop, иначеResolvedModel. Именно РЕЗОЛВЕННЫЙ слот, а не конфигурационныйmodel:— на книге с лейблами это разные модели, и прайсить надо по той, которую прогон вызовет (пинTestTheModelAxisReadsTheRESOLVEDSlotNotTheConfiguredOne, каталожная записьFC5-model-axis-configured-slot). Признак эскалации взят из колонкиcheckpoints.escalationполемstore.CheckpointUsage.Escalation; схема НЕ тронута (git diff --stat -- backend/internal/store/migrate.go→ пусто), колонка живёт с v3. - (2) округление ВВЕРХ при незнании — формула моя.
now = max( cost(токены @ модель, которая ОТВЕТИЛА), cost(токены @ модель, которую стадия резолвит сейчас) ). Довод: количество токенов принадлежит ответившей модели, цена — той, которая ответит; ни одна не смеет опустить число ниже другой. Оба направления проверены исполнением: стадия ушла на модель ×10 — число ×10 (замер приёмки$0.003640против$0.036400воспроизведён тестом); стадия ушла на модель ÷10 — число НЕ падает. База порогаprojectBookUSDсчитается тем жеusd(), поэтому обе половины гейта в одной валюте. - (3) оговорка в тексте согласия.
projectionBasis(rebill.go): «…an ESTIMATE that errs upward, never below what the answering model would charge for the same tokens where their usage is on file; K of the N unit(s) were bought from a model their stage no longer resolves to…». Едет в ЧЕТЫРЁХ операторских местах: пороговый отказ, его scoped-клауза, отказ по названному потолку, иtmctl statusчерезStatusReport.RebillFigureBasis(). - (4) обещание точности СНЯТО в ОБОИХ живых местах, названных промтом.
git grep -n 'can never quote a different number' -- backend/→ пусто; на входном коммитеgit grep -n 'can never quote a different number' 2a63c37 -- backend/ | wc -l→ 1 ⚠ (в первой редакции отчёта стояло «3» — число было снято широким грепом на три разных шаблона и приписано этому, узкому; исправлено дофиксом);grep -rn 'NOT projected (like the content axis' backend/internal→ пусто. Заменено: шапкаreprice.go— «ROUTING IS PROJECTED, AND IT ROUNDS UP»; комментарийRebillUSDвstatus.go— «what neither of them promises is ACCURACY… an estimate that errs UPWARD where the tokens are known». Третья копия обещания (исторический комментарий уprojectStoredMemory) снята попутно. - Решила сама, сверх буквы заказа: счётчик
RebillProjection.ModelMovedRowsи полеrebill_model_moved_rowsвstatus --json. Довод: фигура, часть которой — верхняя оценка через смену модели, без этого числа неотличима от точного пере-прайса, а D39.181 §2.3 требует базиса у опубликованной фигуры. Это ВТОРОЕ новое поле сверх названного промтом одного — вопрос 3.
2. Строка 232, вторая половина — ЗАКРЫТА ТОЛЬКО ПО ОСТАТКУ «СЛОТ».
- Ось отгрузки —
finalStageWave, как велено; не draft и не «любая». Проверена исполнением и на редакторском, и на ЧЕРНОВОМ-ТОЛЬКО конвейере (TestDeliveryIsReadFromTheSHIPPINGWaveOnADraftOnlyPipeline,TestACarriedUnitOnADraftOnlyPipeline). - Механизм. Класс
unitCarriedвvolume.go: юнит, у которого есть строка ХОТЯ БЫ ОДНОЙ позиции, исполняемой этим конвейером, но не всех, и который не отгружен по оси. Он допускается ВНЕ гранта, но платит; в отчёте — внутриDeliveredи отдельно вCarried. Сравнение с потолком —granted() = Delivered − Carried + Reworked, заменилоPaid()в ОБОИХ местах (planVolume,rescopeEditWave). - ⚠ И сам перенос ОГРАНИЧЕН ГРАНТОМ — не больше
MaxUnitsперенесённых за прогон, в порядке книги. Без этой границы потолок переставал быть потолком: прогон без--max-units, начерновивший всю книгу и умерший до редакторской волны, отдавал следующей покупке ВСЕ свои юниты. Замерено на фикстуре: грант 1 оплачивал 5 юнитов и 5 вызовов провайдера, а поскольку в остатке не оставалось ничего, прогон не отчитывался вовсе. Найдено адверсариальным проходом по МОЕЙ ЖЕ работе. Принцип границы, а не число: покупка на N может дописать столько же прерванных юнитов, сколько начинает новых, — работа прогона остаётся пропорциональна гранту. Не влезшее держится какLeftFresh(«никогда не доставлено»), потому что это ровно оно. - ⚠
bound()теперь истинен и когдаCarried > 0, а не только когда что-то удержано: прогон, дописавший юниты вне гранта, обязан это СКАЗАТЬ, иначе молчание приходится ровно на случай с наибольшим расхождением. - Решила сама (промт отдал): где вычитается потраченный слот — нигде: он НЕ БЕРЁТСЯ. Как переживает рестарт — носитель «юнит начат» — его же строки
chunk_statusпо текущим позициям (unitStarted/unitPositionsOnFile, одно перечисление сunitFullyRecorded, чтобы они не разошлись в понимании «позиции»); схемы не нужно. Частично двинутый юнит — carried, дописываются только недостающие позиции. - Замер строки исправлен: было «4 купленных юнита → 2 главы», стало 4 → 4 (
TestAUnitInterruptedBetweenWavesTakesNoSecondSlot:Delivered=4 Carried=2 LeftFresh=1, ровно 6 вызовов во второй покупке). - Семантика
--max-unitsизменена и объявлена во всех трёх операторских местах (cmd/tmctl/invocation.go,Runner.MaxUnits,backend/README.md): грант считает юниты, которые прогон БЕРЁТ СЛОТОМ — новые и пере-делываемые; перенесённые названы в строке стопа и в логе (finished_from_an_earlier_grant). ⚠ Тексты НЕ утверждают, что «слот за юнит был взят прежним прогоном»: движок этого не знает (прежний прогон мог идти без потолка), и первая редакция текстов это утверждала — снято. - ⚠ ОСТАТКИ, которые пак НЕ закрывает — названы в докстринге
deliveredUnitsи здесь:- «первая редакторская стадия» (остаток, который промт велел назвать): конвейер, получающий ПЕРВУЮ редакторскую стадию, двигает отгружающую волну с draft на edit, и уже прочитанные юниты репортятся свежими. Закрытие требует записи о том, ЧЕМ БЫЛА отгружающая волна.
- Прерванная ПЕРЕ-ДЕЛКА — новый остаток, найденный этим паком. Отгруженный юнит, чья пере-делка оборвана между волнами, имеет строку в КАЖДОЙ позиции, снова классифицируется
unitReworkи снова берёт слот. Отличить его от обычного банк-онли сдвига (черновик free, редактор пере-оплачивается — определение rework) можно только записью «какой прогон купил какую строку». Строку 232 закрываю только по остатку «слот», как и велено.
3. ФЧ-4 — ОБЕ половины, фигура едет с базисом (D39.181 п.1).
- (а)
HistoricalRowsбольше не теряется на границеstatus.go:rebillOutcomeвозвращает проекцию ЦЕЛИКОМ (подnone/failed— нулевую структуру, так что новое поле не может пережить «неизвестный» ответ, забытое в одной ветке), вStatusReport—rebill_historical_rowsиrebill_model_moved_rowsпод тем жеrebill_basis. - (б) отказ по названному потолку
--accept-rebill=<usd>несётprojectionBasis(proj)— базис ТОЙ ЖЕ run-scoped проекции, чьё число печатает. - Сверх заказа, по тому же правилу «каждая цифра предложения — из его проекции»: scoped-клауза ПОРОГОВОГО отказа печатала число этого прогона рядом с книжным базисом; теперь несёт свой (
TestTheScopedClauseOfTheRefusalCarriesItsOwnBasis). Дефект был и до пака. - Один вывод на два канала:
StatusReport.RebillFigureBasis()→ строка RE-PAYMENT вtmctl status;TestABilledDecodeRowIsDisclosedAsOldMoneyEndToEndсверяет, что проекция,--json, CLI и ОБА текста отказа называют одну строку раскрытия. - Решила сама (промт отдал: имя поля · форма basis · что печатать при
HistoricalRows=0). Имя —rebill_historical_rows, в форме соседей по префиксуrebill_*. Форма basis — НЕ второе поле-строка рядом с числом, а одна формулировкаprojectionBasis, которую методRebillFigureBasis()переиспользует для CLI: существующийrebill_basisостаётся КАЧЕСТВЕННОЙ осью (pending/stored/none/failed), а новые счётчики — количественной, и словами их описывает один текст, чтобы гейт и статус не разошлись формулировкой. При нуле — печатается ноль, а не пропуск поля:omitemptyздесь тот же дефект, ради которого его сняли сrebill_units/rebill_usd— отсутствие поля неотличимо от «свободно». Ноль подpendingзначит «всё пере-оценено», подfailed— «не считалось»; различает ихrebill_basis. В операторском тексте при нуле клауза просто не печатается: предложение не должно нести оговорку, у которой нет предмета.
4. ФЧ-1 — ровно три названные гарантии, по каждой все ТРИ шага.
- Шаг 1 — воспроизвести на копии ДО пака.
cp -a backend /tmp/.../mut0/backend,go run ./cmd/tmmutate -root . -catalog prepack_mutations.json→ все пять посадок SURVIVED: фильтр по книге в ОБОИХ пакетах, ключ ячейки безchunk_idxв ОБЕИХ формах, снятие пометки «не пере-оценена». ⇒ гарантии (2) и (3), принятые приёмкой СО СЛОВ линзы, подтверждены исполнением; ни одна не оказалась уже прибитой. - Шаг 2 — посадки тестом. (1)
TestCheckpointUsageForBookIsScopedToTheBook(две книги в одной БД, ОДНА позиция) +TestAnotherBooksMoneyNeverEntersTheConsentNumber. (2)TestEveryChunkOfAChapterIsRePricedFromItsOwnCalls— глава из нескольких чанков РАЗНОЙ стоимости: единственная форма, в которой пул ячейки виден (во всех прежних фикстурах глава = один чанк, потому мутация и переживала). (3)TestABilledDecodeRowIsDisclosedAsOldMoneyEndToEnd— продовый путь до--json, CLI и обоих отказов. - Шаг 3 — каталог.
cmd/tmmutate/mutations.json: 73 → 92. Четыре записиFC1-*на три гарантии (фильтр по книге пинится в двух пакетах) плюс двеFC5-*на несущие свойства, которые пак СОЗДАЛ (граница переноса и резолвенный слот) — их я завела по той же логике, по которой каталог существует. Денежный путь в каталоге: греп промта считает СТРОКИ —git show 2a63c37:backend/cmd/tmmutate/mutations.json | grep -c 'reprice.go\|rebill.go\|volume.go\|ledger.go'→ 0, тот же греп по дереву → 17; различных ФАЙЛОВ денежного пути — 0 → 4 (reprice.go,rebill.go,volume.go,store/ledger.go). ⚠ В первой редакции стояло «стало 5 файлов» — такого числа не даёт ни одно прочтение; исправлено дофиксом. Прогон всех шести на свежей копии: 6 RED, «0 unexpected outcome(s)», exit 0. - Четвёртого одноразового харнесса не писала;
tmmutateгоняла только на копиях в scratchpad. - Решила сама (промт отдал: форма посадок · уровень теста · текст
why). Форма — ломать ровно то утверждение, которое гарантия держит, минимальной правкой, и обязательно КОМПИЛИРУЮЩЕЙСЯ: рецепт, оставляющий переменную неиспользованной, даётtmmutateвердикт «ничего не выполнялось», а не «красное», — на этом я поймала два своих же докстринга и переписала их. Уровень — по тому, где живёт защита, а не где живёт правка: фильтр по книге пинится и вstore, и вpipeline(мутация пережила обе батареи по отдельности, значит одной мало); ключ ячейки — толькоpipeline, дефект вnewRepricer; пометка «строка не пере-оценена» —pipeline, и именно ПРОДОВЫМ путём, потому что промт называл её не ловящейся на нём. Текстwhy— называет СВОЙСТВО и причину, по которой его не видно («во всех прежних фикстурах глава = один чанк»), а не описание правки:whyчитают в тот момент, когда мутация выжила и надо понять, что именно перестало охраняться.
Правки СУЩЕСТВУЮЩИХ тестов — объявляются (D39.183).
TestAFlaggedMemberWithNoEditRowIsNotFree(volume_test.go): описывал «юнит без edit-строки ОБЯЗАН потратить грант» — поведение, которое заказывает пункт 2. Гарантия «не FREE, платит и отчитывается как платящий» СОХРАНЕНА; гарантия «берёт слот» уехала в противоположную. Фикстура расширена до 4 глав; после введения границы переноса ожидание —Delivered=2 Carried=1 LeftFresh=2.TestAnAnnouncedButFLAGGEDUnitIsStillNewBook,TestAUnitWhoseEDITFlaggedIsStillNewBook(volumedelivery_test.go): флагнутый юнит после добавления стадии теперь carried. Гарантии «анонс ≠ текст» и «судить по ОТГРУЖАЮЩЕЙ строке» сохранены; фикстуры расширены до 3 глав, сигнатуры названных мутаций пере-выведены. ⚠ Рецепты мутаций в их докстрингах были НЕИСПОЛНИМЫ (правка на месте вызова оставлялаshipStagesнеиспользованным, пакет переставал собираться, иtmmutateдал бы NOTHING вместо RED) — переписаны на правку телаunitShipped.- Смена сигнатур (
repriceCheckpoint/usd— третий возвратmoved;rebillOutcome— проекция целиком):TestRepriceCheckpointFallsBackToTheBilledAmount(таблица расширена до 11 случаев),TestRepricerCountsOnlyTheCurrentGenerationOfCheckpoints(+4 строки),TestAFailedBasisNeverCarriesAFigure(сравнивает всю структуру с нулевой — стал строже),TestRebillConsentCapBelowProjectionRefuses(+утверждение про базис),TestCheckpointsOfOneGenerationSumToTheRowsCost(адаптирован под третий возвратusd(); ослабления нет, правка механическая — ⚠ в первой редакции отчёта имя пропущено, дописано дофиксом),reprice_model_test.goиrender_test.go(формулировка оговорки: «were answered by» → «were bought from», см. ниже). TestStatusPricesTheDriftWithTheGatesOwnNumber— тронут ТОЛЬКО комментарий, цитировавший снятое обещание. Тест не менялся.- Удалённых имён — 0.
Мандат самопроверки — три артефакта.
- Дифф
^func Testисполнением: 1083 → 1102, удалённых 0, добавленных 19. - Собственные адверсариальные посадки ВНЕ трёх гарантий: каталоги
own_mutations.json(26),round2_mut.json(5),round3_mut.json(2),draftonly_mut.json(2) — 35 посадок,tmmutateна копиях. Итог: все RED. ⚠ В первом круге ДВЕ пережили, и это находки: X21 (rescopeEditWaveсравнивал грант черезPaid(), то есть считал перенесённый юнит за слот и отказал бы в свободном) и X22 (строка стадии, которой конвейер больше не исполняет, засчитывалась как «юнит начат»). Обе прибиты (TestTheRePlanCountsSlotsNotCarriedUnits,TestRowsOfARetiredStageAreNotAStart) и во втором круге RED. - Проход по СВОЕЙ готовой работе свежим контекстом. Воркфлоу из семи линз (направление ошибки · раскрытие на новой границе · слот и черновой конвейер · вывод членства
usd()· правда текста · качество тестов · скоуп и заказ), каждая находка судится тремя независимыми опровергателями (корректность · воспроизведение · сверка с промтом), большинство решает. Модели: линза качества тестов — Fable 5, остальные — Opus 5 (ограничение владельца на число Fable-агентов соблюдено: один). Числа прохода: 7 линз, 27 находок (2 HIGH · 12 MED · 13 LOW), 42 вердикта верификаторов, 46 агентов. ⚠ Верификаторов «подтверждено» — НОЛЬ, и читать это надо точно: фаза верификации шла по дереву, где все 27 находок были уже исправлены, то есть опровергатели подтверждали ПРАВКИ, а не отсутствие дефектов. Каждая находка ниже воспроизведена или прочитана мной по коду до правки. Находки и диспозиции (все ИСПРАВЛЕНЫ, каждая с посадкой):- [HIGH] перенос без границы обнулял потолок — грант 1 оплачивал 5 юнитов, и прогон об этом молчал. Введена граница
Carried ≤ MaxUnits+bound()поCarried; посадкиFC5-carry-unboundedиFC7-volume-stop-silent-outside-grant(в первой редакции вторая называлась разведочным именемY2-silent-when-nothing-left, которого в каталоге нет — переименовано дофиксом, Б7). - [MED]
reconcileмог вывестиDeliveredнижеCarried—granted()уходил в минус, строка стопа говорила «0 NEW unit(s) delivered (1 of the new ones had been started…)», предложение, которое не может быть истинным. Все ветви теперь держат вложенность; посадкиFC7-reconcile-free-branchиFC6-reconcile-fresh-branch(в первой редакции стояло разведочноеY3, которого в каталоге нет — переименовано дофиксом, Б7). - [MED] операторские тексты утверждали «слот за юнит был взят прежним прогоном» — движок этого не знает. Снято во всех трёх местах.
- [MED] ось модели не была прибита на РЕЗОЛВЕННОМ слоте — чтение
st.Modelвместоst.ResolvedModelпереживало весь пакет. Пин + каталожная записьFC5-model-axis-configured-slot. - [MED] $0-строка без usage под сдвинутой стадией публиковалась как $0 без оговорки. Теперь помечается «не удалось пере-оценить»; посадка
FC7-zero-usage-row-silent-after-a-move(в первой редакции — разведочноеZ2). - [MED] scoped-клауза порогового отказа шла без своего базиса (дефект был и до пака) — исправлено, посадка
FC7-scoped-clause-without-basis(в первой редакции — разведочноеX29). - [LOW] ветка отката (
overshoot) причисляла строку к «пере-прайсенным по сдвинутой модели», хотя цитирует БИЛЛЕННУЮ сумму, не прайсенную ни по одной сегодняшней таблице.movedтам снят; посадкаFC7-overshoot-claims-a-model-move(в первой редакции — разведочноеY4). - [LOW]
movedсчитается противModelRequested, а пять текстов говорили «модель, которая ОТВЕТИЛА» — на провайдере, канонизирующем слаг (gpt-5-mini→ дата), это разные вещи. Код верен (пере-прогон запросит модель стадии), тексты приведены к нему. - [LOW] комментарий про
zeroRowутверждал, что хвост $0-вызовов — ОДНО поколение. Это неверно: $0-стадия оставляетcost_usd == 0после каждого прогона, поколения неразличимы, и число может быть кратным. Направление при этом ратифицированное (вверх), и оговорка «errs upward» его покрывает; ложное утверждение из комментария снято, ограничение названо вслух. - [LOW] комментарий про redrive утверждал, что пере-атакованный юнит «начинается заново». Неверно:
ResetChunkStagesудаляет только FLAGGED и SKIPPED стадии, черноваяok-строка остаётся, и юнит остаётся carried. Комментарий приведён к коду. - [LOW] доки кадра
finished(runevents.VolumeLedger) отправляли читателя к полюFreeза объяснением «почему юнитов больше, чем грант», хотя теперь причина может быть и вDelivered. Тексты исправлены; поля на провод НЕ добавлено — вопрос 1. Вrunevents/изменены ТОЛЬКО комментарии (проверено: дифф без строк кода),StreamVersionне тронут. - [LOW] докстринг
CheckpointUsageForBookссылался на несуществующий id каталогаFC1-book-filter(в каталоге две записи,-storeи-pipeline);tmmutate -idматчит точно, и следующая сессия получила бы «ничего не выбрано». Исправлено. - [LOW] комментарий у
RebillHistoricalRowsназывал платформу потребителем поля — её аллоулист не берёт ни одногоrebill_*. Формулировка приведена к факту: потребитель — операторская оснастка, читающая документ; платформа поле игнорирует. - [LOW] несколько комментариев рассказывали ИСТОРИЮ починки («used to», «went stale once already», «is how four bought units became two chapters») вместо описания кода — закон владельца. Переписаны; провенанс оставлен только в докстрингах ТЕСТОВ, где он в зоне принят.
- [LOW] «первая половина» текста согласия обещала «never below…» без оговорки про строки, которые пере-оценить не удалось: они как раз могут стоять НИЖЕ сегодняшней таблицы. Добавлено «where their usage is on file» и «may sit below today's table».
- [HIGH] перенос без границы обнулял потолок — грант 1 оплачивал 5 юнитов, и прогон об этом молчал. Введена граница
Три оси ревью, названные промтом уязвимыми именно в этом паке — по каждой предъявляю.
- Направление ошибки. Двойной счёт искала специально: порог сравнивает базу и сумму, посчитанные ОДНИМ
usd()(тест сверяетprojected_book_usd, а не только сумму), максимум из двух цен берётся РОВНО один раз на вызов, добавка денег банк-ролей входит в опубликованную проекцию и НЕ входит в базу порога — как ратифицировано. Перелёт порога проверен с обеих сторон: число выросло там, где занижало, и не упало там, где стадия ушла на дешёвую модель. Одну форму двойного счёта ревью всё же нашло — кратность оценки $0-строки; направление у неё безопасное (завышение), ограничение названо вслух и в коде, и в секции «не проверено». HistoricalRowsна новой границе. Не теряется и не удваивается: единственный инкремент на строку,rebillOutcomeотдаёт проекцию целиком, под «неизвестно» — нулевую структуру. Текст отказа и--jsonназывают ОДНО число с ОДНИМ базисом — это утверждает тест, сравнивающий подстрокуRebillFigureBasis()внутри текста отказа, а не два независимых ожидания.- Слот гранта на черновом-только конвейере. Проверено исполнением, а не рассуждением:
TestACarriedUnitOnADraftOnlyPipeline— ось не выродилась в «никогда ничего не отгружено» (юнит, начатый и не отгруженный, опознаётся и дописывается), и не выродилась в обратную сторону (уже отгруженные не пере-продаются —TestDeliveryIsReadFromTheSHIPPINGWaveOnADraftOnlyPipeline).
Что НЕ удалось и что НЕ проверено.
- Остаток «первая редакторская стадия» — вне скоупа, требует носителя прошлой отгружающей волны (схема).
- Остаток «прерванная пере-делка» — найден этим паком, требует записи «какой прогон купил какую строку» (схема).
- Кратность оценки $0-строки: книга, у которой $0-стадия пере-куплена N раз, а потом уведена на платную модель, получает оценку, кратную N. Направление безопасное (завышение) и объявлено в тексте согласия, но точным его не сделать без маркера поколения на
checkpoints— та же схемная развилка, что в докстрингеusd(). - Юнит, начатый НЕОГРАНИЧЕННЫМ прогоном, слота в следующем ограниченном не берёт (но перенос ограничен грантом). Замерено тестом, на живой книге не проверялось.
- Взаимодействие переноса с ДЕНЕЖНЫМ потолком на длинном хвосте начатых юнитов не замерено: по построению объёмный потолок их не считает, держит денежный.
- Живой прогон с платными вызовами не делался — промт его не заказывал. Вендор-сверок нет: пак не трогает слаги моделей.
⚠ Якоря в ЧУЖИХ доках, уехавшие ИЗ-ЗА пака — править не могу, зона не моя; вот готовый список с новыми номерами (python3 docs/scripts/counts.py --lint; все шесть были ЦЕЛЫ на HEAD 2a63c37, проверено git show HEAD:<файл> | sed -n '<N>p'):
| док:строка | якорь был | цель сейчас |
|---|---|---|
docs/architecture/15-money-path.md:18 |
store/ledger.go:381 «SpentUSD reports (committed, reserved)» |
:392 |
docs/architecture/15-money-path.md:24 |
pipeline/status.go:290 «book_ceiling_usd,omitempty» |
:311 |
docs/architecture/15-money-path.md:24 |
pipeline/status.go:788 «100 * (committed + reserved)» |
:811 |
docs/PROGRESS.md:179 (тело строки 232) |
pipeline/status.go:866 «IT IS NO LONGER THE READ PATH'S FIRST ANSWER» |
:901 |
docs/BACKEND_CONSENT_SESSION_PROMPT.md:52 |
pipeline/status.go:217 «can never quote a different number» |
снят по заказу (ФЧ-5 п.4) |
docs/BACKEND_CONSENT_SESSION_PROMPT.md:54 |
pipeline/reprice.go:24 «NOT projected (like the content axis» |
снят по заказу (ФЧ-5 п.4) |
Первые четыре — сдвиг номеров от моих вставок; последние два промт заякорил на тексте, который сам же велел снять, поэтому их «поломка» и есть признак исполнения.
⚠ Про остальные 12 я сперва написала здесь «все в docs/experiments/**, пришли с полигонным мержем» — это было неверно, и поправлено разбором с платформенной сессией. Перечисляю по владению; ⚠ общее число гейта — величина ПОДВИЖНАЯ, обе смены правят дерево параллельно: на момент того разбора python3 docs/scripts/counts.py --lint печатал 18, на момент сдачи дофикса — 20 (в отчёте пака стояло «все 18 строк», и это было верно только для того часа). Разбивка по владению взята с той, 18-строчной выдачи:
- 4 — платформенной сессии (
textmachine-37):docs/PROGRESS.md:19,docs/PLATFORM_P13_SESSION_PROMPT.md:286иdocs/BACKEND_CONSENT_SESSION_PROMPT.md:227целятся в одну снятую ею строку рантбукаplatform/deploy/README.md:213«сначала платформа, потом движок»; плюсdocs/PLATFORM_P13_SESSION_PROMPT.md:166на уехавшийQuarantine. ⚠ Третий из них живёт В МОЁМ промте (это его ⛔-оговорка о том, что совет рантбука опасен), но сломан не мной — целью владеет платформа. - 8 — полигонных, пришли с мержем
2a63c37: семь вdocs/experiments/**и один в теле бэклога —docs/PROGRESS.md:190наeval/conformance.py:48. - ⚠ Якорь в
docs/experiments/23-editor-tier.md:6196целится в строку 679 этого журнала, которой в нём нет: он был мёртв и до пака (тогда в файле было 472 строки), а мои вставки лишь меняют общее число, которым гейт объясняет смерть. ⚠ Записан здесь СЛОВАМИ, без токена «путь:номер» в обратных кавычках: гейт читает такой токен как якорь, и первая редакция этой строки сама добавила себе двадцатую поломку.
Урок, который стоит записи: первую версию этого абзаца я построила на подсчёте, не перечислив предмет, — тот же класс, что и мои прошлые ошибки «вывести отсутствие из счёта». Счёт по подстроке пути (grep -c 'platform/') тоже не есть счёт по владению: у платформы один из четырёх якорей целится ОТНОСИТЕЛЬНЫМ путём и в такой счёт не попадал.
Вопросы, вынесенные владельцу, и его слово (03.09) — записываю, чтобы решения не пере-открывались.
- Поле
carriedв кадреfinishedшва (runevents.VolumeLedger). Спрошено: добавлять ли число «сколько глав дописано сверх гранта», ведьdeliveredтеперь может превышатьmax_units. Цена вопроса названа: это класс «новое поле в опубликованном документе» — ратификация оркестратора плюс минорный бампStreamVersion, а промт запретил двигать контракт; платформа кадрVolumeсегодня не декодирует вовсе (platform/internal/ingest/events.go:Finished{Outcome}), потребителя у факта нет. РЕШЕНИЕ ВЛАДЕЛЬЦА: оставить как есть, поле не добавлять. Исполнено: поля нет, объяснение живёт словами в докстрингахDeliveredиFreeтого же кадра. - Семантика «юнит, начатый прогоном БЕЗ объёмного потолка, слота в следующей покупке не берёт; перенос ограничен размером гранта». Альтернативы названы: тратить на такие юниты купленное (тогда покупатель платит за главу дважды — ровно вред строки 232) либо завести схемный носитель «какая покупка оплатила какую строку». СЛОВО ВЛАДЕЛЬЦА: вынести оркестратору, решение отложено — «подумаем на этот счёт». ⇒ пункт остаётся ОТКРЫТЫМ вопросом к приёмке; в коде сейчас первый вариант, ограниченный грантом.
rebill_model_moved_rows— второе новое полеstatus --jsonсверх названного промтом одного; говорит, какая часть суммы завышена из-за смены модели стадии. Аддитивно, платформой игнорируется (её аллоулист не берёт ни одногоrebill_*); без него человекочитаемая строка и текст отказа перестают говорить дословно одно и то же. РЕШЕНИЕ ВЛАДЕЛЬЦА: оставить.- Ошибок в промте не нашла.
03.09 — ДОФИКС по приёмке №22 (наряд docs/BACKEND_DOFIX_2026-09-03.md, сессия textmachine-77)
Состояние git на входе в дофикс — важнее прочего, потому что наряд писан по другому. Наряд говорит «в индексе лежит незакоммиченная работа двух смен». К моменту исполнения владелец уже закоммитил её в ЛОКАЛЬНЫЙ
e85295d«temp», аorigin/mainбыл обновлён ПРИНУДИТЕЛЬНО наea54355, в историю которогоtempне входит (git merge-base --is-ancestor e85295d origin/main→ нет). По слову владельца я откатил temp и подтянул наряды двумя командами:git reset --mixed 2a63c37, затемgit merge --ff-only origin/main(перемотка —ea54355растёт из того же2a63c37). Перед этим поставил меткуtemp-backup-e85295d, чтобы коммит с работой обеих смен нельзя было потерять; снимать её до лендинга не надо. Целостность проверена, а не предположена: изменённые файлы совпали с temp бит-в-бит (сравнение хешей двух диффов), пять добавленных файлов снова стали неотслеживаемыми и лежат на диске побайтно как в коммите (git hash-objectпротивgit rev-parse e85295d:<файл>). В дереве НА МОМЕНТ ОТКАТА было 44 файла: 22 мои, 21 платформы, один общий журнал; дальше число растёт у обеих смен по мере работы. Индекс пуст, не коммичу.Батарея после дофикса:
cd backend && make battery→MAKE_EXIT=0,golangci-lint0 issues,okв 18 пакетах, SKIP:TestMinerFullBookParity,TestHelperEventsRun,TestHelperKillLoop. Тесты^func Test:grep -rn '^func Test' backend --include=*_test.go | wc -l→ 1083 → 1105 (пак довёл до 1102, дофикс и правки по проверяющему добавили остальное), удалённых 0 (comm -23по снимкам имён). Каталогcmd/tmmutate/mutations.json: 73 → 92 (python3 -c "import json;print(len(json.load(open('backend/cmd/tmmutate/mutations.json'))))"), прирост 19 записей: паком 6 (FC1×4 — три названные гарантии,FC5×2 — свойства, которые пак создал), дофиксом и разбором его проверки 13 (FC6×4,FC7×5,FC8×3). ⚠ В первой редакции этой строки стояло «18 заведено дофиксом и проверкой», а перечень в скобке давал 14 и не называлFC1— число одной величины под именем другой, тот же класс, что чинит Б8. Команда:python3 -c "import json;from collections import Counter;d=json.load(open('backend/cmd/tmmutate/mutations.json'));print(Counter(m['id'].split('-')[0] for m in d if m['id'][:3] in ('FC1','FC5','FC6','FC7','FC8')))".
По каждому пункту Б1–Б9.
Б1 — стоп-строка и лог лгали в случае, который пак создал. ЗАКРЫТО.
Воспроизвёл сам, до правки: VolumeStop{MaxUnits:2, Delivered:2, Carried:2} → Left()=0 granted()=0 Paid()=2, и предложение печатало разом «not on money and not at the end of the book» и «Still in the book: 0 unit(s) NEVER delivered».
Правка: у String() теперь ДВА открытия по Left(). Грант придержал работу → прежний текст. Книга кончилась → «reached the END of the book under a VOLUME ceiling (--max-units N), which held nothing back», и хвост «Nothing is left in the book» вместо перечисления нулей. Смешанный случай отдельного текста не требует: это первая ветка с уже существующей клаузой про перенесённые. Тот же развилкой пошёл лог waverun.go (сообщение выбирается тем же предикатом), а протухший комментарий у scope.bound() пере-написан на то, что код делает: «set when the grant held work back OR when the run did work outside it».
Пин: TestARunThatWorkedOutsideItsGrantSaysSo дополнен — требует и «reached the END of the book», и «Nothing is left in the book», и ЗАПРЕЩАЕТ «not at the end of the book».
Б2 — ратифицированный контракт кадра finished.volume стал ложным. ЗАКРЫТО, поля НЕ добавлял.
Утверждение «present only when a volume grant actually held work back» снято во всех ЧЕТЫРЁХ местах: runevents.go (объявление поля и абзац «its PRESENCE is the boolean»), events.go (volumeLedger), bookrun.go (BookResult.Volume). Проверка: grep -rn 'only when the grant actually held something back\|present only when a volume grant actually held\|nil when no grant held anything back\|rather than because the book ended' backend/internal → пусто.
Новая формулировка говорит, что присутствие значит «грант был в силе и прогону есть что о нём сказать», и что различают два случая left_fresh/left_rework — оба ноля значат «книга кончилась». Там же прямо сказано, что счётчика перенесённых на проводе НЕТ и почему: владелец 03.09 сказал «оставить как есть». Ратификационная ссылка сохранена с оговоркой, что правило присутствия расширилось вместе со строкой 232.
Б3 — три свойства не были прибиты. ЗАКРЫТО, каждое воспроизведено и посажено. Сначала воспроизвёл все три на копии — все три SURVIVED, как и писала приёмка. После правки те же три посадки на свежей копии → все три RED.
- (а) ветка
unitFreshвreconcile: новыйTestReconcileKeepsContainmentOnTheFreshBranch. ⚠ Состояние в нём СКОНСТРУИРОВАНО, а не наблюдено, и это сказано в докстринге:Delivered == Carriedс исходом классаunitFreshне даёт сегодня ни одна фикстура. Утверждаю инвариант всё равно, потому что код заявляет его для КАЖДОЙ ветки. - (б) отказ по названному потолку:
TestTheScopedClauseOfTheRefusalCarriesItsOwnBasisдополнен половиной про--accept-rebill=<usd>— требует «1 of the 1» и запрещает «2 of the 2». - (в) оговорка про смену модели при нуле:
TestProjectionBasisNamesWhatTheAmountIsMadeOfполучил отрицательный пин, симметричный тому, что был у близнеца про старые деньги. Записи каталога:FC6-reconcile-fresh-branch,FC6-capped-refusal-borrows-book-basis,FC6-model-caveat-printed-at-zero.
Б4 — докстринг classifyUnits не пере-считан. ЗАКРЫТО. «three things this run can do to it» → «four»; проверено, что членов unitClass действительно четыре (sed -n '/^const (/,/^)/p' … | grep -c '^\tunit' → 4).
Б5 — пример в README.md:73 противоречил новой семантике. ЗАКРЫТО. «оплатить не больше 10 выходных юнитов» → «не больше 10 выходных юнитов возьмут слот», в согласии с телом README:11.
Б6 — шов store → репрайсер прибит с одной стороны. ВЗЯЛ, хотя пункт «по желанию».
Довод: мой же аргумент по фильтру книги («мутация пережила обе батареи по отдельности, значит одной мало») применим и здесь, и отказ от него был бы непоследовательностью, а не решением. Новый TestCheckpointUsageCarriesTheEscalationFlag в internal/store + запись FC6-escalation-flag-store; подмена c.escalation на 0 теперь краснеет и в store-пакете.
Б7 — отчёт ссылался на ПЯТЬ несуществующих посадок как на живые гейты. ЗАКРЫТО заведением, а не снятием ссылок.
Проверил каждую из пяти на копии: все пять ловятся существующими тестами — то есть свойства охраняются, но каталог их не помнил, а отчёт называл гейтами. Развязка честная только одна: сделать их настоящими записями. Заведены FC7-volume-stop-silent-outside-grant, FC7-reconcile-free-branch, FC7-zero-usage-row-silent-after-a-move, FC7-scoped-clause-without-basis, FC7-overshoot-claims-a-model-move; все пять пере-посажены → RED.
Б8 — четыре числа не печатались командами, которые отчёт для них называл. ЗАКРЫТО, каждое пере-считано.
- «денежного пути стало 5 файлов» — такого числа не даёт ни одно прочтение. Правда: греп промта считает СТРОКИ,
0 → 17; различных ФАЙЛОВ денежного пути0 → 4. Обе команды вписаны рядом с числами. - «на входе 3 попадания» у грепа про снятое обещание — правда 1:
git grep -n 'can never quote a different number' 2a63c37 -- backend/ | wc -l→ 1. Тройка была снята широким грепом на ТРИ разных шаблона и приписана этому, узкому. Тот же класс, что и мои прошлые ошибки со счётом: число из одной команды под именем другой. - «все 18 строк» линта — на момент сдачи дофикса гейт печатает 20 (
python3 docs/scripts/counts.py --lint). Число ПОДВИЖНОЕ: параллельная платформенная смена правит свои файлы, и её якоря уходят и возвращаются. В отчёт пака вписана оговорка об этом. - «в файле 485 строк» — сейчас 572 (
wc -l < docs/PROGRESS.md); число снималось до того, как отчёт дорос, и с каждой вставкой меняется. Формулировка в отчёте пака переписана так, чтобы не зависеть от него. - ⚠ Отчёт пака сам добавлял себе поломку гейта: строка таблицы называла чужой мёртвый якорь ТОКЕНОМ «путь-двоеточие-номер» в обратных кавычках, и гейт читал её как якорь ЭТОГО журнала. Переписана словами. ⚠ И первая редакция этого самого пункта наступила на то же место второй раз — объясняя поломку, она снова процитировала токен и снова его создала. Теперь ни одна строка обеих моих записей токена не содержит; проверка — грепом по выдаче гейта на строки этого журнала в моих секциях, пусто.
Б9 — неполнота самообъявления по D39.183. ЗАКРЫТО. TestCheckpointsOfOneGenerationSumToTheRowsCost дописан в блок самообъявления: адаптирован под третий возврат usd(), ослабления нет, правка механическая.
Б10 — к сведению, не заказ; называю, чтобы не умерло молча.
- Подсказка в докстринге
Deliveredключуется наdelivered > max_units, а в форме «весь остаток перенесён»delivered == max_units— подсказка не срабатывает, и разложить кадр читателю нечем. Связано с отложенным вопросом владельца о семантике переноса; чинится вместе с ним. - В перенос попадает и юнит, который ФЛАГНУЛСЯ и текста не отдал: он «начат и не отгружен», значит следующая покупка снова платит за его пере-атаку вне гранта. Цикл из трёх последовательных покупок не гонял никто — ни приёмка, ни я. Вход в решение владельца, не дефект.
Проверка дофикса свежим контекстом — один агент Fable 5, ограничение владельца соблюдено. Он прочитал исходный промт, наряд, оба моих отчёта и весь дифф, посадил 26 своих мутаций и пере-гнал батарею на копиях. Из его семи находок три взяты в работу и исправлены, четыре названы ниже как известные пробелы:
- [HIGH]
$0-вызов ВНУТРИ платного поколения выпадал из обхода — и уносил с собой сегодняшнюю цену. Форма: черновая стадия на локальной$0-модели с ПЛАТНЫМescalate_to; стоимость строки объясняет один хоп, поэтому обход останавливался и бесплатный primary терялся, а после сдвига стадии на платную модель число согласия выходило вдвое ниже реальной пере-покупки, БЕЗ оговорки. Воспроизвёл сам на юнит-уровне до правки:usd=0.010000 fromHistory=false moved=falseпри пере-покупке0.03. Правило переписано: вызов, стоивший ноль, никогда не останавливает обход и никогда не переполняет счёт — он берётся всегда, а обход стоит на первом ПЛАТНОМ вызове после того, как деньги строки объяснены. Цена решения названа в коде вслух: бесплатный вызов на хвосте СТАРОГО поколения тоже будет взят, то есть оценка завышается — ратифицированное направление. ПосадкаFC8-free-call-dropped-from-a-paid-generation. - [LOW→взято]
$0-строка, чей новейший вызов чужой, котировалась$0без оговорки: переполнения на нуле не бывает, поэтому детектор отката её не видел. Теперь такая строка помечается «не удалось пере-оценить»;skipped-строка остаётся честно бесплатной. ПосадкаFC8-unestablished-zero-row-published-as-free. ⚠ Существующий случай таблицы, чей комментарий говорил «skipped-строка», диспозицию не ставил — привёл тест к его собственному замыслу и добавил случай без скипа (объявляю по D39.183: поведение сменилось по находке, тест стал строже). - [LOW→взято] развилка ЛОГА из Б1 не была прибита — мутация «удалить ветку конца книги» переживала весь пакет. Новый
TestTheRunLogSaysWhichKindOfVolumeStopItWas(обе ветки, живым прогоном), посадкаFC8-log-fork-at-the-end-of-the-book. - [MED→исправлено] отчёт пака называл пять посадок разведочными именами (
Y2…,Y3,Z2,X29,Y4), которых в каталоге нет: Б7 завёл их под именамиFC7-*, но ссылки остались старыми. Переименованы;grepпо каталогу на старые имена → 0, ни одно из них больше не стоит в отчёте как имя гейта.
Второй проход того же проверяющего — по трём осям, вердикт его словами. Дерево ему было пере-сдано после правок; он адресно пере-атаковал свои находки 1, 3 и 6 (все три ДЕРЖАТ, каталожные посадки красные), отдельно проверил новое правило обхода usd() таблицей краевых форм (откат, остаток, эскалационный хоп, skipped, нулевая стоимость) и занижений не нашёл. A — исходный промт: исполнено с остатком (остатки — два схемных остатка строки 232 и отложенный вопрос владельца, все названы и заказаны такими). B — наряд Б1–Б9: все девять закрыты (Б8 был закрыт с остатком, см. N1 ниже — закрыт). C — код и отчёты: ГОДНО К ПРИЁМКЕ, блокеров нет. Три его новые находки, все LOW, закрыты здесь же:
- N1 — строка отчёта говорила «18 заведено дофиксом и проверкой», а раскладка в скобке давала 14 и не называла
FC1. Правда: прирост 18 = паком 6 (FC1×4,FC5×2) + дофиксом и разбором проверки 12 (FC6×4,FC7×5,FC8×3). Тот же класс, что чинит Б8, — число одной величины под именем другой; пере-считано командой, она стоит рядом. - N2 — условие
len(calls) > 0в метке «поколение не установлено» не было прибито: мутация переживала пакет. Добавлен случай «$0-строка без единого вызова на файле свободна, а не нераскрыта» + записьFC8-empty-cell-disclosed-as-unestablished(красная). - N3 — комментарий у той же ветки описывал
skipped-строку так, будто guard несущий, тогда как продовые вызывающие skipped-строки сюда не доводят (projectRebillих отфильтровывает,projectBookUSDроняет флаг). Комментарий говорит теперь ровно это: guard защитный, а не несущий, и почему он остаётся. Его диспозицию по находкам 4 и 5 («согласен, входы в отложенный вопрос владельца») принимаю; он же заметил, что находку 4 можно закрыть и без смены семантики — снимком plan-timeCarried. Это ВЫБОР, не необходимость, и он входит в тот же вопрос владельца.
Что НЕ удалось и что НЕ проверено (дофикс).
- Цикл из трёх покупок на флагнутом юните не замерен — см. Б10. Знаю, что не проверено; не чинил, потому что наряд прямо запретил трогать семантику переноса.
- Состояние
Delivered == Carriedс исходом классаunitFresh(Б3а) ни одной фикстурой не достигается; инвариант утверждён на сконструированном состоянии, и это сказано в самом тесте. - Живого прогона с платными вызовами не было ни в паке, ни в дофиксе.
- Оба остатка строки 232 (первая редакторская стадия; прерванная пере-делка) по-прежнему открыты и требуют схемного носителя.
- Четыре находки проверяющего названы, но НЕ чинятся — все четыре суть входы в отложенный владельцем вопрос о семантике переноса, и наряд прямо запретил её трогать:
- Клауза «finished OUTSIDE this grant» ключуется на
CarriedПОСЛЕreconcile, поэтому исчезает, когда все перенесённые юниты флагнулись: оператор видит «2 PAID FOR BUT FLAGGED», но не то, что обе оплаты шли вне гранта. Воспроизведено:VolumeStop{MaxUnits:2, Delivered:2, Carried:2}+ два флага классаunitCarried. - Перенесённый юнит с ПРОТУХШИМИ черновыми строками пере-покупает всю цепочку вне гранта, тогда как хелп флага обещает «дописать недостающее». Воспроизведено проверяющим:
granted()=0, два вызова провайдера на один юнит. - Подсказка в докстринге
Deliveredключуется наdelivered > max_unitsи молчит в форме «весь остаток перенесён», гдеdelivered == max_units(это же Б10 наряда). - Цикл из ТРЁХ последовательных покупок на флагнутом юните не гонял никто — ни приёмка, ни проверяющий, ни я.
- Клауза «finished OUTSIDE this grant» ключуется на
- Выживание трёх гарантий ФЧ-1 на дереве ДО пака проверяющий сам не воспроизводил (принял по моим красным посадкам); я это делал в паке отдельно, лог в scratch-каталоге сессии.
Полигон
📌 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 живую улику с боевого прогона.
- (1)
-
📌 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.gostripHeading/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.yaml— 58 записей, из них 53status: approved, 16 с полемgender. В нём ровно те термины, на которых спотыкались вычитчики:资质 → талант(канон владельца D39.21),元石 → первобытный камень(а в пробе намайнилось 7 форм),甲等/乙等/丙等 → класс А/Б/В(а в переводе «категория C» ЛАТИНИЦЕЙ),蛊师 → гу-мастер. В~/books/gu-zhenren/probe-4axes/book.yamlключаglossary_seedНЕТ — 0 вхождений, и шапка стенда объявляет это сознательно: «Сид НЕ подключается — банк рождается майнером + банкнотой, как в холодном прогоне». ⇒ Прежняя формулировка «банк не подписан» (запись 02.09) НЕТОЧНА и настоящим уточняется: не подписан МАЙНЕНЫЙ банк, а подписанный канон просто НЕ ПОДКЛЮЧЁН. Весь измеренный дрейф (30 ключей из 102 с >1 передачей) — дрейф конвейера с отключённым каноном. Контр-факт на той же книге: с подписанным банком эффективная консистентность 99.3–100% (Д50.2, 375–548 пар). ⚠ Записи蛊в сиде НЕ ХВАТАЕТ поля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 (владелец). - Уже ПОСТРОЕНО: род
neuterend-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 — зона бэкенда, полигон в них не лезет; его законная часть — улики и замер (см. ниже).
- Уже в плане: вынести вердикт-поля из хеша = строка 49 (спека
-
⚠ ВХОД 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 опора покрывала 55–79%). Редакция 2 на склеенном по манифесту черновике (покрытие 99–100%) плюс активные нули (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, на уже купленном). Терминов с более чем одной передачей в тексте — 13–16% от измеренных; сменивших форму между главами — 6–8%. Независимым путём (поле
spread, считает сам движок): 30 записей из 102 несут >1 передачу, максимум 7 форм у одного ключа (元石: «юаньши · камень юань · изначальный камень · первородный камень…»). ⚠ Разброс МЕЖДУ режимами (0.3–1.9%) не превышает шум-пола (2.4%, снят по паре реплик одной руки) ⇒ дрейф на этом отрезке — свойство черновика и банка, не редактора; экономия на редакторе к нему отношения не имеет. -
⚠ Мои ошибки этого пака, названные вслух: первая редакция пре-рега имела невалидный первичный тест (ничьи в знаменателе против H₀=50% дают ошибку I рода 17.8%) и правило решения с непокрытым пространством исходов; гейт слепоты искал
[A-Za-z]{2,}и пропускал одиночные латинские буквы (23–25 на руку, слепота при этом не пробита — асимметрия 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, уlow0; обрывов по длине 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:72 ← llm/httpllm.go:415), только тела, без URL и заголовков — снято, что у low-рук в теле стоит reasoning_effort:"low", у ∅-рук ключа НЕТ, у glm-5 — thinking:{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.32–0.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давал книгу за $7–15, фаза — за $41–68. Оба верны — (а) «книга 1500 глав» в Д29.1 это 1500 НАШИХ единиц ≈ 735 глав Гу, (б) ресёрч считал ВИДИМЫЙ вывод, а уdeepseek-v4-pro46% токенов — размышление, и это ЧЕРНОВИК, а не проверка (96% предложений финала дословно есть в трейсе): модель пишет перевод дважды и обе копии тарифицируются по выходу. Правило для сметы: цену роли считать поtotal_tokens, а не по длине перевода. -
ЧТО ОСТАЛОСЬ И СКОЛЬКО СТОИТ (Д38.6, ранжировано): Шаг 7 — 15 глав Гу ПОДРЯД боевым профилем с ЗАСЕЯННЫМИ характер-листами, ~$2 + движковый прогон. Это единственный замер, дающий прибор под Вопрос 0 («консистентность на всю книгу»), и он же готовая in-loop телеметрия прода. ⛔ Без засева характер-листов результат ложно-отрицателен ПО ПОСТРОЕНИЮ: полей пола в банке нет вовсе, механизма не существовало ни в одном прогоне. Дальше — цензур-ось дешёвой линии $0.2–0.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, но по ИЮЛЬСКОМУ прайсу. Пере-счёт тех же клеток по текущему: связка $40–43 вместо $13–14. (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).
curlHTTP 200,guides/thinking_mode, 108 336 байт, sha256f28c4324…. Было (наша запись 10.08): две колонки, уdeepseek-v4-prolowмаппится вhigh, «рычаг бюджета размышления существует ТОЛЬКО у flash». Стало дословно: «identical fordeepseek-v4-flashanddeepseek-v4-pro», таблица одна,low → low; тумблер{"thinking":{"type":"disabled"}}подан как общий. ⇒ у якоря письма ПОЯВИЛСЯ рабочий рычаг размышления, которого не было при всех покупках фазы. ⚠ Это ДОКА, не поведенческая проба — по норме «слаг ≠ модель» перед деньгами нужна живая проба (единицы центов); сессия её НЕ делает без слова владельца. ⚠ Побочно с той же страницы, чего у нас не записано нигде: «Thinking mode does not support thetemperature… will have no effect» ⇒ нашtemperature: 0.3наdeepseek-v4-proмолча игнорируется. ⚠ И:effort:"low"у DeepSeek пере-вооружает эхо-мину — рычаг есть, бесплатным не будет. -
⭐⭐ ЧИСЛА ПО ЛУНЕ ПЕРЕ-СНЯТЫ ПОКЛЕТОЧНО ПО ЗАПРОСУ ВЛАДЕЛЬЦА (Д44.6), И ОНИ БОЛЬШЕ, ЧЕМ Я ПЕЧАТАЛ. Однопроходка, те же 16 английских глав, тот же промт,
finish=stop16/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.05–0.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_tokens3270, вызов с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.078–0.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.078–0.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.4–2.5, а рядом стоит рычаг ×7–11 — смена модели наgpt-5.6-luna(поглавно медиана ×7.1, по сумме ×11.4) — и он упирается НЕ в деньги, а в кап агент-сессий (нужно 16, свободно 14). Тратить доллары на ручку прежде, чем порядковый рычаг прочитан по КАЧЕСТВУ, — плохая экономика. ⚠ Операционное для чужих циклов: отказ гарда возвращает код 1, но в ФОНОВОМ shellset -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% связки) ⇒ читать «луну как черновик» значило бы потратить кап на шестипроцентный рычаг; читался порядковый (×7–11). Результат: средние местаZ02.33 ·ZF2.33 ·RN2.53 ·RL2.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:Z02.33 → 2.20 ·ZF2.33 → 2.53 ·RN2.53 → 2.60 ·RL2.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: 466–19 559), у луны 49% и ×3 (511–1 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»). Это опровергнуто пере-пином 13–15.08 (D39.137): таблица запинена ПИКОМ — flash 0.44/1.32 при кэш-хите 0.014, pro 1.32/3.96 при кэш-хите 0.044 за 1M (сверено с backend/configs/models.yaml:182,198=cached_per_m и телом D39.137 §2а), и счёт шиппинга = 100% DeepSeek ⇒ ×4.2–4.4 в пике. Квирки — ваша зона, рукой не трогаю; поправьте при ближайшем касании, потому что по ним считают деньги проб. ⚠ И ВТОРОЙ факт тем же касанием, он сейчас БЕЗДОМНЫЙ: у DeepSeek цена ходит окнами — пики UTC 01–04 и 06–10 вдвое дороже долин, платное планировать в долины. Факт куплен замером и жил в справочнике ролевого промта; я оттуда его убирал как вендор-специфику, а в квирках его НЕТ (греп по peak|долин|пики UTC = 0), то есть указатель вёл в дом, который факта не несёт. До вашего переноса держу копию в ролевом промте с явной пометкой. ⚠ Третий пункт того же аудита (eval/README.md держит мёртвый СТОП на платные прогоны) сведён ниже, в пинг №20 — один носитель на факт.
⚠ Тем же касанием — вторая протухшая клетка справочника (аудит доков 22.08, живо и на 02.09): квирки и docs/STACK.md утверждают, что ручки эффорта у deepseek-v4-pro НЕТ (low→high) и веса вендором не тронуты, — а вахта §Б-108 сработала 13.08 changelog'ом вендора (pro/flash получили low/high/max). Это боевой РЕДАКТОР и апекс эскалации; замера ПОВЕДЕНИЕМ после 13.08 нет ни у одной стороны, из репозитория вендорская сторона НЕ выводится. Закрывается вендор-сверкой, а не выбором стороны (гардрейл владельца) — и вы это только что делали по Gemini, то есть заход дешёвый. Носитель в трекере — строка 237(б).
⛔ ПИНГ ОРКЕСТРАТОРА №20 ЗОНЕ — ТРИ ПРОТУХШИХ МЕСТА, все три ЖИВЫ на 02.09 (правки зонные, рукой не трогаю).
eval/README.mdпервой врезкой держит СТОП на платные прогоны — «Платные прогоны/докупки СТОП до ре-пробы (бэклог-строка 74)». Строка 74 закрыта (D39.95), ограничение пало лендингом 112 (D39.97),pipeline-c1.yamlнесётreasoning: "low"с объяснением, а зона всё это время платно гоняет фазу Д: врезка объявляет запрещённым то, что делается ежедневно, и этим обесценивает все прочие ⚠ в файле. Живым из неё остаётся только ⚠0731 (смена весов под слагом) и стохастичность эха.eval/README.mdописывает каталогdovodka/ОДНИМ файломruns.py, тогда как там сорок скриптов и главный инструмент фазы;docs/experiments/README.mdобъявляет себя сведённой «до эксп-22», а строк для 22 и 23 в ней нет.naklon.py(гейт позиционного наклона) лежит коммитами веткиpolygon, вmainНЕ влит. «Вне git» ЛОЖНО: файл несут и локальнаяpolygon, и запушеннаяorigin/polygon. Живой остаток — НЕ ВЛИТО вmain: вeval/dovodka/уmain42 отслеженных файла против 80 уpolygon(снимать командойgit ls-tree -r <ветка> -- eval/dovodka/, а не чтением).
ФАЗА Д «ДОВОДКА ЭКСП-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.)