textmachine/docs/experiments/25-door-to-file-b.md

115 KiB
Raw Blame History

Эксперимент 25. Холодный прогон B — «от двери до ФАЙЛА» во ВТОРОЙ раз, и впервые с вычиткой

Пре-регистрация. Всё, что ниже строки «ГРАНИЦА ФРИЗА», написано ДО первого платного вызова и закоммичено фриз-коммитом. Результаты дописываются ПОСЛЕ прогона отдельной секцией и ничего в пре-реге не правят: расхождение НАЗЫВАЕТСЯ, а не подгоняется.

Зона: сквозной прогон · Пак: docs/COLD_RUN_B_SESSION_PROMPT.md (редакция 3fce077) · Дата: 11.09.2026 Предмет: четыре вещи, которых нет ни у кого, плюс заказ владельца на ВЫЧИТКУ боевого текста.

0. Что именно покупается, и чего этот прогон НЕ покупает

Покупается: (1) первое исполнение двух миграций схемы НА ПЛАТНОМ ПРОГОНЕ · (2) числа консистентности С ПРОГОНА, а не пере-сканом сохранённой базы A · (3) платформенный пак СКВОЗЬ · (4) пре-регистрированный ЗНАМЕНАТЕЛЬ денежной дыры и проверка её ЗНАКА · (5) вычитка ВСЕГО перевода против ВСЕГО оригинала отдельным опус-читателем и сверка ПРИБОРОВ движка с тем, что он увидел.

НЕ покупается и не оплачивается ни центом: ответ на «безопасно ли редактору думать меньше» (ряд 433) — это парный дизайн, отдельные деньги, отдельный заказ. B идёт на боевых настройках как есть. НЕ покупается ВЕЛИЧИНА доли выброшенного. B — ЕЩЁ ОДИН одиночный прогон. Квирки §3д: при sd логарифма 0.82 парный дизайн ловит эффект ×2.5 за 13 пар, ×2.0 за 22, ×1.4 за 93. n = 2 этой нормы не выполняет и выполнить не может. Писать «25.4 % подтверждено» по двум розыгрышам — ошибка.

1. ГРАНИЦА ФРИЗА — что зафиксировано до первого цента

Предмет Значение
Фриз-sha (КОД, которым собраны бинари) baa06cef7b2b30b8f7cbe031f3d0fabc03a01a55
Фриз-дерево локальный клон ~/tm-coldrun-b/freeze (0 грязных строк; контроль — главное дерево в тот же момент 1)
Бинари tmctl · tmplatformd · tmplatformctl · stub · zeropipeвсе пять из клона, у каждого vcs.revision=baa06ce…, vcs.modified=false, строк vcs.* = 3. Негативный контроль: та же сборка из ГЛАВНОГО дерева даёт vcs.modified=true. ⚠ Прогон A объявил девиацией, что два его инструмента собраны НЕ из фриза (§12.5) — здесь эта девиация закрыта построением
Исходник (оригинал) books/gu-zhenren/coldrun-v16/guzhenren-ch1-10.gb18030.txt, 57838 байт, sha256 0b5f9b0266d8c32ac717a41211d2ed15d4f2a07f37a701fb686e255ab6c89f37
Исходник (СРЕЗ, что покупается) главы 13, 17564 байта, sha256 ed870ba6065ce3eb4eec12e80238efbc2be8511f38334ab1d92d5693f4ef4df9. Нарезан МНОЙ из оригинала (head -c), байт-в-байт равен срезу прогона A (cmp). Граница чистая: декодируется целиком в 9021 знак, кончается на границе абзаца, несёт ровно 3 заголовка 第…节 при 10 в целом файле (контроль напечатан рядом)
Фактический pipeline-YAML ~/tm-coldrun-b/mirror/cfg/pipeline-c1.yaml, sha256 a46b33ee65b7713b4fbf86f64c788ba6b11eb0a219170c145a6205088156ad49, байт-в-байт равен backend/configs/pipeline-c1.yaml фриза (cmp)
Реестр моделей ~/tm-coldrun-b/mirror/cfg/models.yaml, sha256 835af7b2d8830e6058b650ab742603d228febbd663978d88e0fe496ff78b5c1c
Артефакт контраста mining-contrast.zh.txt = jieba 0.42.1 dict.txt, sha256 7197c3211ddd98962b036cdf40324d1ea2bfaa12bd028e68faa70111a88e12a8, 349 046 строк. ⚠ CheckMiningContrast делает ТОЛЬКО os.Stat и удовлетворился бы фальшивым кандидатом — sha сверена руками
Шаблон книги ~/tm-coldrun-b/book-template-c1.yaml, sha256 4118a43059dba64a45290db73252a1306af341ff4c429100314256c95ca2f24d
Потолки книги (ДВИЖКОВЫЕ, в шаблоне) book_usd: 1.25 · day_usd: 2.50 — те же, что у A, ради сравнимости
Потолок ПЛАТФОРМЫ холд ≈$2.24 (формула ниже), грант учётки $2.50
Стоп-правило СЕССИИ факт $1.00 — раньше обоих потолков; достигнут ⇒ СТОП и пинг, не решение сессии

1.1 ДВЕ КАРТЫ СРАВНИМОСТИ A↔B, которых у прогона A не было

  1. ПОКУПАЮЩИЙ файл тождествен. sha a46b33ee… — та же, что в пре-реге прогона A. Что именно покупается, между прогонами не изменилось ни на байт.
  2. ЦЕНОВАЯ МОДЕЛЬ тождественна. models.yaml фриза A и фриза B различаются ровно на 10 строк, и все десять — КОММЕНТАРИИ (не-комментарных изменённых строк: 0). ⇒ долларовые числа A и B считаны одним прайсом и сравнимы напрямую.
  3. А КОД — НЕТ, и это записывается ОГРАНИЧЕНИЕМ, а не замалчивается. Между b0f5d89 (фриз A) и baa06ce: 118 коммитов, backend/ 52 файла (+7678/85), platform/ 30 файлов (+3945/158), включая денежный путь. B меряет ДРУГОЙ движок. Прямой строкой: двойная оплата могла измениться из-за НАШИХ правок, а не из-за провайдера.

1.2 Срез по $0-манифесту (tmctl manifest --json, бинарь фриза B)

Глава units_total chunks_total expected_usd знаков
1 第一节:纵身亡魔心仍不悔 2 2 0.032424 3287
2 第二节:逆光阴五百年觉悟 1 2 0.028459 3051
3 第三节:请一边玩蛋去 1 2 0.023237 2421
книга 4 6 expected_usd 2.08412008 · book_once_usd 2.00 · step_max_usd 0.13647876 8759

Смета ТЕКСТА — сумма глав, $0.084120; book_once_usd $2.00 это ПОТОЛКИ контура банка (gates.terminology.budget_usd 1.00 + classify_budget_usd 1.00), а не смета. Все семь чисел этой таблицы совпали с манифестом прогона A до последнего знака — при другом бинаре, другом каталоге и другом book_id. Это сильная улика тождества покупаемого.

2. МЕРА ДЕНЕЖНОЙ ДЫРЫ — пре-регистрируется ЗДЕСЬ, до первого цента

Прибор ПРОВЕРЕН ДО ПРИМЕНЕНИЯ: те же запросы, прогнанные по сохранённой базе прогона A, дают его числа. Это не «похоже», а пере-снято: 33 строки · 33 уникальных id · 2 трейса · $0.419423.

  • единица = (chapter, chunk_idx, stage, role). Номера попытки в ключе НЕТ намеренно: единица ОХВАТЫВАЕТ попытки. ⚠ У стадии terminology все строки несут chapter = 0, то есть chunk_idx там — индекс майнинг-батча, а не чанк главы. Одно слово покрывает ДВА предмета; в каждом числе называется, какой именно.
  • знаменатель = единицы, за которые заплачено хоть раз (sum(cost_usd) > 0). Печатаются ОБА счёта. На A фильтр не отсеял ничего (17 и 17) ⇒ его поведение не проверялось ни разу.
  • ЧИСЛИТЕЛЬ ПЕРВЫЙ — выброшенная покупка: единицы, где есть хоть одна оплаченная и НЕ принятая попытка (ok = 0 AND cost_usd > 0). База A: 4 из 17 = 23.5 % ЕДИНИЦ, тогда как по ВЫЗОВАМ то же событие даёт 4 из 27 = 14.8 %. Две меры расходятся в полтора раза — потому мера и объявлена.
  • ЧИСЛИТЕЛЬ ВТОРОЙ — ПЕРЕ-МАЙНИНГ БАНКА, и он НЕ называется «пере-оплатой». Единицы, за ПРИНЯТЫЙ результат которых заплачено больше одного раза (ok = 1). На A это вся стадия терминологии. Главное число — «все платежи КРОМЕ ПЕРВОГО» = $0.028742 (6.9 %), нижняя граница; рядом печатается «все КРОМЕ ПОСЛЕДНЕГО» = $0.035723 (8.5 %). Разница 24 %, и обе ориентации получены ПОРЯДКОМ — тем самым методом, на котором прошлая смена получила ложные 54.9 %. Поля, называющего вызов-источник, у строк банка НЕТ (glossary 21 колонка, вызова среди них нет; glossary_revisions 0 строк), поэтому ориентация выбирается явно и объявляется. И почему это НЕ «деньги за пустоту» (замерено мной на артефактах A ДО прогона B): второй заход терминологии ИЗМЕНИЛ передачу у 12 термов из 69, и 11 из 12 уехали читателю именно в ФИНАЛЬНОЙ форме (стоп-форма — 0 из 12; один терм не встретился ни в какой). Это ЦЕНА ПЕРЕ-МАЙНИНГА БАНКА ПОСЛЕ ЧЕЛОВЕЧЕСКОЙ ПОДПИСИ, а не выброшенная покупка.
  • ДВА ПУТИ К ДЕНЕЖНОМУ ЧИСЛУ. Путь 1 — по колонке degraded; путь 2 — по ok = 0 AND cost_usd > 0, колонки degraded не касаясь. На A оба дали $0.106472 = 25.4 %, но совпадают они ПО ПОСТРОЕНИЮ. ⇒ совпадение на B — слабая улика; РАСХОЖДЕНИЕ — сильная находка: классификатор и признак приёмки разъехались. ⚠ 25.4 % — доля ДЕНЕГ, 23.5 % — доля ЕДИНИЦ, подменять нельзя.

3. ДВЕ СЛЕПЫЕ ПОВЕРХНОСТИ ПРИБОРА КОНСИСТЕНТНОСТИ, НАЗВАННЫЕ ДО ПРОГОНА

Обе найдены на артефактах прогона A, обе меняют то, как прибор B строится.

(а) ГРАНИЦА БАНКА. Прибор A сверял отгруженный текст со СТОП-ПРЕДЛОЖЕНИЕМ банка (project.db.bank.json, снят в момент подписи), а читатель получил текст, сделанный под ФИНАЛЬНЫМ банком: терминология пере-майнится ПОСЛЕ подписи, и редакторская волна идёт после неё (по request_log прогона A: терминология-2 кончается 01:42:10, редактор идёт 01:43:54 → 01:54:44). ⇒ прибор B читает ФИНАЛЬНЫЙ банк и ПЕЧАТАЕТ, какую версию он прочёл. Класс — D39.228 п.5.

(б) ЗНАМЕНАТЕЛЬ САМОГО ПРИБОРА. На A он нашёл передачу у 40 термов из 69, а у 29 вернул пусто — и записал их в «консистентные». Его итог «отдано более чем одной формой: 0» посчитан по 40, а читается как утверждение о книге. ⇒ прибор B печатает всегда: термов всего N · передачу нашёл у M · пусто у K, и K проверяется ТЕКСТОМ, а не принимается за консистентность.

4. Пре-рег-таблица: узел → что ДОЛЖНО произойти → чем предъявлено → что считается провалом

# Узел Ожидание (числом или строкой) Чем предъявлено Провал
1 Стенд — мой слушатель 127.0.0.1:8098 принадлежит МОЕМУ pid; на 11434 в платной фазе НЕ слушает НИКТО ss -ltnp + pid-файл чужой процесс на порту ⇒ СТОП
2 Код — из фриза у ПЯТИ бинарей vcs.revision=baa06ce…, modified=false, строк vcs.* > 0 go version -m любое из трёх не так ⇒ СТОП
3 Гость и деньги ОТДЕЛЬНАЯ платная учётка; грант $2.50 одной строкой credit_ledger.kind='grant' tmplatformctl balance + строка леджера, ФИЛЬТРОВАННАЯ по учётке дымовые деньги попали в счёт ⇒ число недействительно
4 Интейк 201, chapter_count = 3; ⚠ character_count ≈ 9677 (счёт интейка по потоку, ПРИБЛИЗИТЕЛЬНЫЙ), точный — source_chars = 8759 тело 201 + строка books не 3 главы ⇒ СТОП до оплаты
5 Срез совпал units_total = 4, по главам 2/1/1, chunks_total = 6 chapters+units в Postgres против §1.2 расхождение ⇒ СТОП до оплаты
6 Цена и бонд term_consistency_funded: true, verdict: covers_all, affordable_chapters: 3, холд 2 241 631 µUSD = ⌈84 121 × 1.25⌉ + 136 479 + 2 000 000 GET /v0/books/{id}/run-options, тело в файле false ⇒ СТОП до оплаты
7 Старт 202, status: translating, ordered_chapters: 3, runs.bond_funded = t. ⚠ Ожидается, что ответ старта скажет term_consistency_funded: false при уже выставленном bond_funded = t — находка 7 прогона A; ВОСПРОИЗВЕДЕНА мной на $0-руке ответ + строка runs отказ старта ⇒ СТОП и пинг
8 Ключи живы первый платный вызов не отказан по авторизации request_log.err на первой строке отказ провайдера ⇒ СТОП и пинг (не наша поломка)
9 Кадры events.jsonl несёт hello · progress · unit_done · spend · bank_stop · finished; run_attempts.last_seq растёт ПО ПОПЫТКАМ счёт кадров по типам, per-attempt кадров нет при живом юните ⇒ дефект
10 Банк-стоп runs.status = awaiting_bank, exit 3, .bank.json несёт непустой proposed[] и terms: [] статус + exit + КОПИЯ сайдкара (резюм её уничтожает) стоп не наступил ⇒ исход «узел не наступил», не провал
11 Проекция банка bank_terms = 0 ПОКА прогон не закрыт и > 0 ПОСЛЕ GET …/bank дважды + select count(*) ноль ПОСЛЕ закрытия ⇒ дефект
12 Дверь правок preview:truechanged:true, на диске НИЧЕГО; preview:falsestate: applied + mined-delta.yaml тела обоих ответов В ФАЙЛАХ + sha файла до/после преview написал на диск ⇒ дефект
13 Резюм (РОВНО ОДИН) 202, вторая строка run_attempts, exit_code = 0 run_attempts не возобновился ⇒ дефект
14 Книга переведена units.state = translated у всех 4 юнитов select state, count(*) + контрольный счёт юнитов книги любой не translated ⇒ книга не доведена
15 Сборка complete: true, pending/withheld/incomplete/stale/ghost = 0, stale_unknown: false, config_drift: false stdout tmctl build (на API этих полей НЕТ) любое не так ⇒ книга не целая
16 Выгрузка exports.state = ready, exports.complete = t, size_bytes = числу скачанных байт, ОБА формата строка exports + длина скачанного complete не t ⇒ дверь отдала книгу с дырой
17 ФАЙЛ байты скачаны, sha256 напечатан; EPUB читается структурно (zip + container.xml + nav + spine = 3) sha256 + разбор zip не открывается ⇒ провал
18 Человек прочитал первый абзац — связный русский текст цитата в отчёте не текст ⇒ провал
19 Деньги сошлись Σ request_log.cost_usd ≈ кадр spend ≈ Σ settlement ЭТОЙ учётки ≈ (грант баланс); открытых резерваций 0 четыре счёта в µUSD рядом, ВСЕ фильтрованы по учётке расхождение — НАЗВАТЬ, не подгонять
20 Ничего не реплеено tm_hit = 1 печатается С РАЗБИВКОЙ ПО ПОПЫТКАМ по trace_id (он несёт номер попытки), distinct model_actual не содержит local-* запросы к project.db есть local-* ⇒ прогон измерил заглушку
21 v17 wave_selection 10 строк = 6 draft + 4 edit, и волны стоят над РАЗНЫМИ снапшотами (черновик — базовый банк, редактор — обогащённый) select wave, count(*) + snapshot_id + injected_srcs строк нет ⇒ пинг, а не ноль в отчёте: писатель гейтится r.memory != nil
22 v18 reasoning_in_completion ТРЁХЗНАЧНО: сколько NULL, сколько 0, сколько >0, сумма = числу строк. Ожидание: на DeepSeek >0 преобладает три счёта + контроль суммы «не ноль» вместо трёхзначности ⇒ вопрос не задан
23 Консистентность I1/I2 С ПЕЧАТАЕМЫМИ знаменателями + «термов N · передачу нашёл у M · пусто у K» + какую версию банка прочёл прибор QualityReport().Consistency + свой счёт по отгруженному тексту число без знаменателя в этом паке не принимается
24 Вычитка опус-читатель получает ВЕСЬ перевод и ВЕСЬ оригинал; печатает знаков оригинала (контроль: 9021), знаков перевода, ПОСЛЕДНЕЕ предложение обоих его отчёт не напечатал доказательство дочитывания ⇒ отчёт не принимается
25 Сверка приборов таблица 2×2 заполнена ИМЕНАМИ находок; левая нижняя клетка («прибор смолчал, читатель нашёл») названа поимённо §4.6 отчёта клетка пуста без довода ⇒ сверка не сделана

5. Стоп-правила (остановка и пинг, не решение сессии)

  1. фактическая трата дошла до $1.00 (1 000 000 µUSD);
  2. runs.paused_reason НЕПУСТО — любое из четырёх (run_limit_reached · credit_exhausted · daily_ceiling · ceiling_unknown);
  3. срез не совпал с §1.2 — стоп ДО оплаты;
  4. term_consistency_funded: false в run-options — стоп ДО оплаты;
  5. бинарь не из фриза — стоп до устранения;
  6. что-либо слушает 127.0.0.1:11434 в платной фазе — стоп: прогон измерял бы заглушку.

6. ОГРАНИЧЕНИЯ, ОБЪЯВЛЕННЫЕ ДО ПРОГОНА

  1. ЭСКАЛАЦИЯ В B НЕ ИСПОЛНЯЕТСЯ. pipeline-c1.yaml:223 несёт escalation.budget_usd: 0, а комментарий строкой :221 гласит: «Приёмочная сессия 蛊真人 ОБЯЗАНА выставить budget_usd>0». Решение оркестратора: не трогать, потому что тождество покупающего файла и ценовой модели (§1.1) стоит дороже одного непроверенного пути. ⇒ B, как и A, о работе эскалации не говорит НИЧЕГО. Сам этот факт идёт находкой вне заказа: механизм построен, ратифицирован и не может исполниться ни на одном боевом конфиге без ручного оверрайда, которого никто ни разу не сделал.
  2. Судьи на пути нет (role: judge живёт только в c2), гейт coverage выключен ⇒ из пяти гейтов работают четыре. Проверяемый путь: черновик → редактор → четыре $0-гейта → выгрузка.
  3. epubcheck не гоняетсяjava на хосте нет и поставить нельзя. EPUB судится структурно.
  4. ТРИ следа — не три свидетеля. Postgres платформы МАТЕРИАЛИЗУЕТСЯ из events.jsonl движка, а текст и файл платформа берёт теми же вербами tmctl. По-настоящему независимы только скачанные байты и их sha256, плюс systemd-маркеры выхода. Биллинга провайдера у нас нет вовсе.
  5. Доллары — НАША модель поверх токенов провайдера. Провайдер сообщает ТОКЕНЫ; цену умножаем мы, по пину models.yaml. На 11.09 пин flash был ВЫШЕ вендорской страницы на 13 % (D39.247 п.3).
  6. Пик/офф-пик. Прогон A шёл 01:2901:54 UTC в пятницу — ВНУТРИ пикового окна DeepSeek (0104 и 0610 UTC, пн–пт). B идёт вечером пятницы, то есть в ОФФ-ПИК. Леджер осознанно считает по ПИКОВОЙ цене (D39.136: потолок обязан срабатывать раньше) ⇒ записанная цена B будет вдвое выше настоящего счёта, а записанная цена A — нет. На сравнение ЛЕДЖЕРОВ это не влияет (оба пиковые), на «сколько мы заплатили» — влияет вдвое. Называется здесь, чтобы не открылось потом.
  7. ПРЕТРЕЙН — процедура, а не запрет. 蛊真人 узнаётся моделями 4 из 5. Каждая находка о качестве обязана нести ДВЕ цитаты рядом — фрагмент ОРИГИНАЛА и фрагмент ПЕРЕВОДА. Находка, которая не может показать место в исходнике, — не находка, а воспоминание.

7. Инструменты (замораживаются вместе с этим пре-регом)

  • eval/cold_run_b/door.py — драйвер: гейт · вход · грант · интейк · опции · старт · вахта · улика · подпись · резюм · выгрузка · произвольная проба. Каждый запрос И каждый ответ ложатся в evidence/http/ ДО того, как вернутся вызывающему — дефект харнесса A, из-за которого пять строк его пре-рег-таблицы остались без носителя (§10.12 его отчёта).
  • eval/cold_run_b/measure.py — прибор денег и единиц §2. Пере-снимает числа прогона A на его же базе как самопроверку перед применением к B.
  • Из фриза A переиспользуются без правки: eval/door_to_file/stub ($0-заглушка провайдера), eval/door_to_file/zeropipe (рендер $0-пайплайна). Оба собраны из клона B и несут его штамп.

8. Что уже исполнено ДО фриза и чем предъявлено ($0)

  • GET /v0/capabilitiesexport_formats: ["txt","epub"] (непусто ⇒ все три гейта выгрузки выполнены), contract_version 0.15.0, bank_corrections_enabled: true.
  • Пин фазы 0 — ЗАГРУЗЧИК, а не скан. Движок ЗАГРУЗИЛ рендер $0-пайплайна бесплатным вербом (tmctl manifest --json, EXIT=0). Контрольная величина рядом: достижимых ПЛАТНЫХ моделей в pipeline-c1.yaml8, в рендере — 0, счёт по РАЗОБРАННОМУ YAML, а не по тексту.
  • $0-ДЫМ ПРОЙДЕН ЦЕЛИКОМ на ОТДЕЛЬНОЙ книге (синтетический zh-текст, 1206 байт, 4 главы, sha256 10637234312895da4665ed0dff84f25dfacdffd842871425b1bba1cc612b80da) и на ОТДЕЛЬНОЙ учётке: стенд · гость · грант · интейк 201 · опции (4 главы, 4 юнита, бонд профинансирован) · старт 202 · кадры · банк-стоп (exit 3) · дверь правок (preview НИЧЕГО не пишет — проверено sha файла до и после) · резюм (exit 0) · выгрузка ОБОИХ форматов, complete = t, файлы скачаны.
  • ОБЕ МИГРАЦИИ УЖЕ ИСПОЛНИЛИСЬ ЖИВЬЁМ, и это честно называется здесь, а не приписывается B. На дымовой базе: wave_selection8 строк = 4 draft + 4 edit, волны стоят над РАЗНЫМИ снапшотами (6dabf7e5… без инъекции против 76670592… с тремя термами) ⇒ ось, которой у retrieval_state нет, работает. reasoning_in_completionNULL на всех 16 строках, и это ВЕРНЫЙ трёхзначный ответ: локальная заглушка поля не сообщает. ⇒ B покупает не «исполнилась ли миграция», а её поведение НА ПРОВАЙДЕРЕ, КОТОРЫЙ ЭТО ПОЛЕ ШЛЁТ.
  • МИГРАЦИЯ ПРОВЕРЕНА НА ЗАПОЛНЕННОЙ БАЗЕ, а не только на пустой. Копия базы прогона A (v16, 33 строки request_log, 69 строк glossary) открыта бинарём B: v16 -> v18, EXIT=0, строки целы (33 и 69), wave_selection создана пустой, reasoning_in_completion = NULL на всех 33 ранее написанных строках — ровно то, что миграция обещает. Оригинал не тронут (sha сверена до и после). Пустая база про данные не говорит ничего; эта — говорит.

РЕЗУЛЬТАТЫ (дописано ПОСЛЕ прогона; ничего выше не правлено)

О НУМЕРАЦИИ. Секции РЕЗУЛЬТАТОВ нумеруются своим рядом и с §5 по §8 совпадают номерами с секциями пре-регистрации — та заморожена фриз-коммитом и правке не подлежит, поэтому вместо пере-нумерации замороженного текста здесь разведены ССЫЛКИ: ссылка на пре-рег всегда пишется «§N пре-рега», ссылка на секцию результатов с номером 58 — «§N результатов», а §9 и дальше однозначны сами по себе (в пре-реге таких номеров нет).

Книга дошла до файла. 蛊真人, главы 13, zh→ru, прогон run_Q6DSXGS7TW52TFNO над книгой bk_NH6275ZIRFFTLZHG: старт 22:48:38, финиш 23:08:44 (20 мин 06 с), две попытки (банк-стоп exit 3 и резюм exit 0), status = ready, paused_reason пусто, failure_reason пусто. Все 4 юнита translated, обе выгрузки complete = t, оба файла скачаны и прочитаны. Цена доведённой до конца книги: $0.396657.

5. ДЕНЬГИ ПРЕ-РЕГИСТРИРОВАННОЙ МЕРОЙ — и меры разошлись в РАЗНЫЕ стороны

Прибор — eval/cold_run_b/measure.py, тот же, что перед прогоном пере-снял КАЖДОЕ опубликованное число прогона A на его собственной базе (--selfcheck → PASSED).

прогон A прогон B
цена книги $0.419423 $0.396657 (5.4 %)
строк request_log / вызовов / бесплатных подстановок 33 / 27 / 6 35 / 28 / 7
единиц всего / платных 17 / 17 17 / 17
ЧИСЛИТЕЛЬ 1 — по ЕДИНИЦАМ 4 из 17 = 23.5 % 7 из 17 = 41.2 %
ЧИСЛИТЕЛЬ 1 — по ДЕНЬГАМ $0.106472 = 25.4 % $0.083587 = 21.1 %
ЧИСЛИТЕЛЬ 2 (пере-майнинг банка), «все кроме первого» $0.028742 = 6.9 % $0.026771 = 6.7 %
ЧИСЛИТЕЛЬ 2, «все кроме последнего» $0.035723 = 8.5 % $0.023834 = 6.0 %
два денежных пути (degraded · ok=0 AND cost>0) совпали совпали
длительность 25 мин 31 с 20 мин 06 с

ГЛАВНОЕ В ЭТОЙ ТАБЛИЦЕ — ДВЕ СРЕДНИЕ СТРОКИ, И ОНИ ИДУТ В РАЗНЫЕ СТОРОНЫ. Доля ЕДИНИЦ почти удвоилась (23.5 → 41.2 %), а доля ДЕНЕГ УПАЛА (25.4 → 21.1 %). Причина видна поимённо: B выбросил БОЛЬШЕ единиц, но ДЕШЁВЫХ — пять черновых чанков по ~$0.012 против одного редакторского вызова за $0.071 у A. Подменить одну меру другой здесь значило бы сказать ровно противоположное правде, и это первый случай в проекте, где расхождение двух мер видно НА ДАННЫХ, а не в рассуждении. Ровно поэтому мера и пре-регистрировалась.

ВЕЛИЧИНА НЕ ЗАЯВЛЯЕТСЯ. n = 2. Квирки §3д: при sd логарифма 0.82 парный дизайн ловит ×2.5 за 13 пар. Установлен ЗНАК: на обоих прогонах доля выброшенного лежит в первой четверти цены книги, и обе меры на обоих прогонах ненулевые.

И ТРЕТЬЕ ЧИСЛО, СВОЁ У ДВИЖКА. Его собственная новая строка MONEY BY WHAT IT BOUGHT даёт: отгруженный текст $0.254510 (10 вызовов) · терминология книги $0.034726 (7) · superseded-by-a-later-call $0.107421 (11) = 27.1 % · bought-nothing-shippable $0.000000 (0). Это ТРЕТЬЕ определение («вытеснено поздним вызовом»), оно ШИРЕ моего числителя-1, и складывать три определения нельзя. Самая крупная одиночная потеря, названная самим движком: book/batch0/terminology/classifier — $0.012646.

6. ОБЕ МИГРАЦИИ ПРЕДЪЯВЛЕНЫ ДАННЫМИ

6.1 v17 wave_selection — 10 строк, и волны стоят над РАЗНЫМИ банками

Пре-рег (узел 21) требовал 10 = 6 draft + 4 edit. Факт: ровно так.

волна строк snapshot_id что показали
draft 6 fef36e1dd642b8c4… injected_srcs = [] на ВСЕХ шести, n_exact_hits = 0
edit 4 9ae4e88aa354fb3b… n_exact_hits = 21 · 26 · 23 · 26, инъекция 124159 байт

Контроль рядом: retrieval_state = 6 строк, различных черновых чанков в request_log = 6. ⇒ ось, которой у retrieval_state нет, отвечает: черновой волне не показали НИЧЕГО, редакторской — весь обогащённый банк. До v17 второй половины этого ответа в схеме не существовало.

6.2 v18 reasoning_in_completion — ТРЁХЗНАЧНО, и третье значение оказалось несущим

NULL = 7 · 0 = 0 · >0 = 28 · сумма 35 = числу строк request_log. И семь NULL — это РОВНО семь бесплатных подстановок из чекпойнтов (tm_hit = 1, cost = 0), то есть строки, где провайдера не спрашивали вовсе. Это дословно семантика, которую обещает комментарий миграции: «NULL = the question was not answered». Устаревшая колонка reasoning_tokens при этом равна 0 на всех 35 строках — как и объявлено, ПО ПОСТРОЕНИЮ.

И ВОТ ЧТО ЭТА КОЛОНКА ПОКАЗАЛА ВПЕРВЫЕ — РЯД 422 ЗАКРЫТ ЧИСЛОМ, А НЕ МЕХАНИЗМОМ. Доля РАЗМЫШЛЕНИЯ в выходе, за который уже заплачено:

стадия · роль вызовов выходных токенов из них размышление доля
draft · translator 11 88 586 75 569 85.3 %
edit · editor 4 41 879 31 477 75.2 %
terminology · classifier 6 27 754 27 097 97.6 %
terminology · terminologist 7 21 394 19 799 92.5 %

на БОЕВЫХ настройках подавляющая часть купленного выхода — думанье, а не текст. И у всех семи выброшенных вызовов размышление съело ПОЛНЫЙ потолок: 8496/8496 ×3, 8496/7110, 8496/8496, 8000/7966, 8000/8000. Мина видна в НАШЕЙ собственной телеметрии впервые за жизнь проекта.

7. НАХОДКА, КОТОРОЙ НЕ БЫЛО НИ У КОГО: БЭНК-РОЛИ НЕ ЗАВЕДЕНЫ НА ЛЕКАРСТВО

Что видел. На попытке 1 классификатор терминологии: batch=0 asked=22 answered=4 (length, $0.012646) и batch=2 asked=24 answered=0 (empty, $0.012133). 42 терма из 66 остались без машинного типа, оба провальных батча ОПЛАЧЕНЫ, регенерации не было.

Чем предъявлено, что лечение существует и бэнк-роли на него не заведены. Регенерация живёт в runStage (backend/internal/pipeline/stagerun.go:39), и там её ДВЕ ветви: «regenerating with less thinking at the SAME budget» (ручка lower_effort_on_empty, лендится выключенной — D39.251) и «stage flagged, regenerating with a larger budget» (stagerun.go:235 — работает, и на этом прогоне

ИСПР. 17.09: строка переименована (the call was flagged, regenerating with a larger budget), и адрес stagerun.go:235 тоже устарел — тело цикла уехало в attemptladder.go (акт D39.264, лендинг 10d245a). Наблюдение прогона B не меняется: лечение в движке было и работает.

вылечила 5 черновых из 5). Бэнк-роли идут МИМО runStage: runBankAttempt зовёт r.runAttempt(...) напрямую (backend/internal/pipeline/terminologist.go:832). Комментарий рядом объясняет, почему у них нет обязательного ожидания, — про лечение он не говорит ничего. ⇒ одна и та же задокументированная вендорская мина: у ЧЕРНОВОЙ стадии лекарство есть, у БЭНК-РОЛИ нет ни лекарства, ни счётчика.

ЧЕМ ЭТО НЕ ЯВЛЯЕТСЯ, и я говорю это прежде, чем меня спросят. На резюме тот же классификатор ответил 22/22 · 19/19 · 24/24 — та же книга, тот же конфиг, четыре минуты спустя. Контроль по прогону A: у него все три батча чисты (23/23, 21/21, 25/25). ⇒ это СТОХАСТИКА провайдера, а не регрессия между A и B, и назвать это регрессией значило бы получить верный результат при неверной гипотезе. Механизм задокументирован: разброс размышления ×163 при побайтно одном входе (квирки п.2).

ВТОРАЯ ПОЛОВИНА — ПРО НАБЛЮДАЕМОСТЬ, и она хуже первой. Итоговая строка стадии печатает classify_batches_dropped=0 unanswered=0 bad_lines=0 consolidated=66 declined=0. Это НЕ ложь, а ОТСУТСТВИЕ: ClassifyBatchesDropped = crun.dropped (terminologist.go:420) считает батчи, выброшенные СВОИМ БЮДЖЕТОМ, а unanswered/bad_lines принадлежат РЕНДЕР-проходу. Счётчика доли ответов классификатора нет ни одного, и единственный носитель факта — WARN посреди прохода. Бюджет ни при чём: лимит $1.00, потрачено $0.029749.

8. КОНСИСТЕНТНОСТЬ — ВПЕРВЫЕ С ЖИВОГО ПРОГОНА, СО ВСЕМИ ЗНАМЕНАТЕЛЯМИ

Прибор движка (QualityReport().Consistency, печатает tmctl report), по ОТГРУЖЕННОМУ тексту:

population: bank rows=66 · judgeable (a dst to look for)=66 · no dst=0 · shipped units read=4
of the judgeable: key never fired in the source=1 · spoiler-window blocked=0 · fired and judged=65
occurrences: bank keys fired and judged=268 · accepted renderings found in the text=276
I1 ONE FORM PER TERM: more than one rendering=6 · a single rendering=52
I2 THE BANK'S FORM IS THE ONE SHIPPED (D39.104): never reached the reader=7
NESTED ROWS EATEN BY A LONGER KEY whose own rendering did not reach the text=1
⚠ under the post-check's OWN equality the same book reads: absent=13 · more than one=10 · single=42

Поимённая таблица вердиктов, которую прибор печатает сам (с ГЛАВАМИ): absent ×6 (九族 «девять поколений рода» · 华夏 «Китай» · 时辰 «шичэнь» · 话事人 «распорядитель» · 熊家寨 «крепость рода Сюн» · 穿越众 «попаданец» · 管家 «домоправительница») · split ×6 (古月族长 · 家老 · 方源 «Фан Юань», подписанный, 63 сработки / 58 отгружено, strict 36, split внутри глав 1, 2 и 3 · 牌位 · 舅父 · 沈翠) · covered ×1 (魔道, съеден более длинным ключом в главах 2 и 3).

Самое дорогое в этой таблице — строка 方源. Это ПОДПИСАННЫЙ мною терм, имя главного героя, и прибор говорит split по всем трём главам: 63 сработки ключа, 58 найденных передач, а под строгим равенством — 36. То есть даже подписанная форма расходится внутри книги, и это ровно приоритет №1 владельца, замеренный на отгруженном тексте.

ЭРРАТА 11.09 (оркестратор №23, при приёмке; тело отчёта НЕ переписано — D23.3, отчёт есть улика). Вывод предыдущего абзаца НЕВЕРЕН, и опровергает его §18 этого же отчёта. «Даже подписанная форма расходится внутри книги» — не то, что показал прибор. Пере-снято мною руками: в отгруженном тексте 58 вхождений имени в четырёх падежах и НОЛЬ конкурирующих транслитераций; голые «Фан» принадлежат другим термам банка. Падеж — не вторая передача, и расхождения нет. Механизм тоже назван неточно, и это важнее самого вывода, потому что чинить будут по нему. Дело НЕ в строгой колонке: печатаемый вердикт берётся из СТЕМ-ТОЛЕРАНТНОГО счёта (58), а строгий (36) печатается рядом и вердикта не производит. split ставится предикатом, когда попаданий МЕНЬШЕ, чем срабатываний источника (backend/internal/pipeline/bookconsistency.go, греп func (v *verdictAcc) observe) — то есть имя вердикта утверждает больше, чем меряет предикат: читается «термин разъехался», а сказано «нашли не каждое срабатывание». Недостающие пять — местоимения. ⚠ Класс — голова отчёта противоречит его же хвосту: §18 ниже говорит верно, и следующая смена разрешила бы расхождение в пользу первой прочитанной строки. Носители: акт D39.252 п.3, ряд 436.

Мой независимый прибор (~/tm-coldrun-b/tools/shipped.py, тот же, что перед прогоном пере-снял артефакты A): передача найдена у 62 из 66, пусто у 4, и все четыре напечатаны поимённо (九族 · 时辰 · 熊家寨 · 管家). ⚠ Он НАЗЫВАЕТ, какой банк прочёл — ФИНАЛЬНЫЙ, — и это не формальность: см. §8.1.

8.1 ВТОРАЯ ТОЧКА К ЭРРАТЕ D39.247 §4: пере-майнинг двигает ~20 % банка

Сравнение предложения банка НА СТОПЕ с ФИНАЛЬНЫМ банком того же прогона:

прогон термов в банке передач СДВИНУЛОСЬ между стопом и финалом
A 69 12 (и 12 из 12 уехали читателю в ФИНАЛЬНОЙ форме)
B 66 14

Примеры с B: 开窍大典 «великая церемония раскрытия апертуры» → «церемония открытия апертуры» · 管家 «домоправитель» → «домоправительница» · 舅母 «жена дяди по матери» → «тётя по матери» · 赤铜香炉 «курильница из красной меди» → «медная курильница». ⇒ прибор, сверяющий отгруженный текст с банком СТОПА, на каждом пятом терме сверяется не с тем банком. На A это дало шесть ложных « отдано не банковской формой»; здесь оно названо ДО замера, и прибор B читает финальный банк.

8.2 ПОСТ-ЧЕК МОЛЧИТ ТАМ, ГДЕ ПРИБОР КНИГИ ГОВОРИТ

retrieval_state.n_postcheck_miss = 0 на ВСЕХ шести чанках — при том, что прибор книги на том же тексте называет 6 расходящихся термов и 7 не доехавших. Причина названа комментарием самого движка (bookconsistency.go): пост-чек считает ТОЛЬКО промах Confirmed-строки, а Confirmed — это status='approved', которых в банке 2 из 66. ⇒ счётчик решает на единице, которой в продукте нет (D39.144: пер-термной подписи не существует, банк подписывается целиком). Это не дефект счётчика — это дефект ЕДИНИЦЫ, на которой он построен, и сегодня он даёт ноль там, где текст расходится.

9. ИСХОД КАЖДОЙ СТРОКИ ПРЕ-РЕГ-ТАБЛИЦЫ

# Узел ФАКТ Сошлось
1 стенд мой tmplatformd pid 2337390 на 8098; на 11434 не слушает НИКТО (контроль: 8 слушателей на хосте)
2 код из фриза у ПЯТИ бинарей vcs.revision=baa06ce…, modified=false, строк vcs.* = 3; негативный контроль из главного дерева даёт modified=true
3 гость и деньги ОТДЕЛЬНАЯ платная учётка u_RR5RMQNSX2KZMNXL, грант 2 500 000 µUSD одной строкой; ледждер-строк у ЭТОЙ учётки 1 при 30 у всех
4 интейк 201, chapter_count: 3; character_count: 9677 (приблизительный счёт интейка), точный source_chars = 8759 — как и предсказано в пре-реге
5 срез совпал units_total = 4, по главам 2/1/1, chunks_total = 6
6 цена и бонд funded: true, covers_all, affordable_chapters: 3, expected 84 122, холд 2 241 631 — до микро-доллара как в пре-реге
7 старт 202, translating, ordered_chapters: 3, runs.bond_funded = t; и ответ старта сказал term_consistency_funded: false — находка 7 прогона A ВОСПРОИЗВЕДЕНА (включая предсказанную аномалию)
8 ключи живы первый платный вызов оплачен ($0.012048), отказов по авторизации 0 из 35
9 кадры 51 кадр шести типов: hello 2 · progress 10 · spend 28 · unit_done 8 · bank_stop 1 · finished 2
10 банк-стоп awaiting_bank, exit 3, .bank.json несёт proposed[] = 66 и terms: [] — ряд 224 воспроизведён
11 проекция банка 0 строк bank_terms в момент стопа, 66 (2 approved) после закрытия
12 дверь правок preview → 200, preview: true в теле, на диске НИЧЕГО (sha mined-delta.yaml до и после); apply → оба state: applied, файл 906 байт появился с носителем, которого у A не было
13 резюм (РОВНО ОДИН) 202, попытка 2, exit_code = 0
14 книга переведена 4 из 4 translated (контроль: юнитов книги — 4)
15 сборка complete: true, pending/withheld/incomplete/stale/ghost = 0, stale_unknown: false, config_drift: false, total_units: 4
16 выгрузка txt 54 848 байт complete = t; epub 20 546 байт complete = t; длина скачанного = size_bytes
17 ФАЙЛ txt sha 43b3cc4f…; epub sha 2560f9f2…, testzip() = None, 7 записей zip, container.xmlOEBPS/content.opf, nav объявлен, 3 itemref, оглавление «Глава 1/2/3»
18 человек прочитал первый разворот — связный русский текст, цитата ниже
19 деньги сошлись Σ request_log = 396 657 µUSD = Σ settlement этой учётки = (грант баланс) = 2 500 000 2 103 343; открытых резерваций 0
20 ничего не реплеено distinct model_actual = deepseek-flash, deepseek-v4-prolocal-* нет; tm_hit=1 у 7 строк, разбивка ПО ПОПЫТКАМ из trace_id: попытка 1 — 0, попытка 2 — 7, все по $0
21 wave_selection 10 = 6 draft + 4 edit, разные снапшоты, §6.1
22 reasoning_in_completion NULL 7 · 0 0 · >0 28, сумма 35 = строкам, §6.2
23 консистентность I1/I2 со всеми знаменателями, §8; прибор НАЗЫВАЕТ прочитанный банк

Первый разворот отгруженного файла (узел 18), дословно:

Пусть тело погибнет — сердце демона не раскается

— Фан Юань, послушно отдай Цикаду Весны и Осени, и я подарю тебе быструю смерть!

— Старый демон Фан, не надейся сопротивляться. Сегодня мы, великие школы праведного пути, объединились, чтобы разрушить твоё демоническое логово.

9.1 ПРОВЕРКА, КОТОРОЙ У ПРОГОНА A НЕ БЫЛО: остаток разобран ДО НУЛЯ

Каждый из 4 отгруженных юнитов найден в скачанном файле подстрокой, ровно один раз, смещения строго возрастают (37 · 5874 · 11284 · 21895), ни один не найден дважды. Σ юнитов 30 237 знаков, файл 30 283остаток 46 знаков, и он напечатан целиком: строка заголовка книги плюс переводы строк между блоками. ⇒ между тем, что оплачено, и тем, что скачано, не потеряно и не добавлено ничего.

10. КОД, КОТОРЫЙ ОТРАБОТАЛ НА ЭТОЙ КНИГЕ (§4.7 пака)

Что реально бежало: черновая волна (draft/translator, deepseek-v4-flash, 6 чанков, 11 платных вызовов) → контур банка (terminology/classifier + terminologist, deepseek-v4-flash, 13 платных вызовов за два захода) → банк-стоп и дверь правок → редакторская волна (edit/editor, deepseek-v4-pro, 4 юнита, 4 вызова) → четыре детерминированных $0-гейта → сборка → выгрузка.

Что НЕ бежало и почему:

  • эскалация — 0 хопов, escalation.budget_usd: 0 в боевом pipeline-c1.yaml (§6.1 пре-рега). escalated = 0 во всех 10 строках chunk_status. ⇒ о работе эскалации прогон B, как и A, не говорит НИЧЕГО — второй боевой прогон подряд.
  • судьяrole: judge живёт только в c2, на этом пути его нет вовсе.
  • гейт coverageenabled: false; работали четыре гейта из пяти.
  • ручка lower_effort_on_empty — лендится выключенной (D39.251), поэтому первая ветвь лечения в runStage не сработала ни разу; сработала вторая (удвоение потолка), 5 раз из 5.

Исход каждого чанка — disposition = ok у ВСЕХ десяти строк chunk_status, а история сохранена в first_flag_reason: empty ×5, length ×1, чисто ×1 на черновике; на редактуре флагов нет. ⇒ путь не рвался ни разу; он дорожал.

Три следа, и они НЕ три свидетеля. Postgres платформы МАТЕРИАЛИЗУЕТСЯ из events.jsonl движка, а текст и файл платформа берёт вербами tmctl. По-настоящему независимы: (а) скачанные байты и их sha256 и (б) маркеры выхода systemd (run_Q6DSXGS7TW52TFNO-1.exitstatus: "3", -2.exitstatus: "0"), то есть выход прогона подтверждён ОПЕРАЦИОННОЙ СИСТЕМОЙ вне цепочки платформы. Биллинга провайдера у нас нет вовсе.

Воспроизведённые находки прогона A (то же поведение, другой прогон, другой движок): err пуст на ВСЕХ 35 строках, включая семь провальных — аудит, написанный через err, прочитает этот прогон как идеально чистый (A, находка 15) · model_actual = deepseek-flash на 31 строке из 35 при model_requested = deepseek-v4-flash (ряд 413) — и здесь B отличается от A: движок теперь САМ кричит об этом на каждом вызове WARN'ом «priced by a model that did not answer: the answering slug is not in the catalogue … priced_by=requested», которого в журнале A нет ни разу · ответ старта говорит term_consistency_funded: false при уже выставленном bond_funded = t (A, находка 7) · 409 not_priced сразу после интейка — гонка материализации цены (A, находка 8).

11. ДЕВИАЦИИ — объявлены, не подразумеваются

  1. ПРИБОР ПРАВЛЕН ПОСЛЕ ФРИЗА, и нашла это не я. measure.py падал с ZeroDivisionError (measure.py:83) на базе, где платных единиц НОЛЬ, — то есть ровно на той ветви, которую его собственный вывод объявляет непроверенной («the paid filter removed nothing — its behaviour is still unexercised»). Нашла приёмка, прогнав прибор по ДЫМОВОЙ базе; я воспроизвела, прежде чем чинить. Правка: деление загорожено, и ноль печатается читаемо — «share UNDEFINED — no unit was paid for at all (not the same statement as 0%)». Числа прогона B этим не тронуты (пере-снято после правки: 35/28/7, $0.396657, 7 из 17 = 41.2 %, $0.083587 = 21.1 %), и --selfcheck по базе прогона A по-прежнему PASSED. Правка идёт ОТДЕЛЬНЫМ коммитом после фриза, как требует норма.
  2. Инструменты стенда переиспользованы из фриза прогона A без единой правки (eval/door_to_file/stub и .../zeropipe), но собраны ИЗ КЛОНА B и несут его VCS-штамп. ⇒ девиация §12.5 отчёта A («два моих инструмента собраны не из фриза») здесь закрыта построением, а не повторена.
  3. Дымовая рука шла на ОТДЕЛЬНОЙ книге и ОТДЕЛЬНОЙ учётке, но в ТОЙ ЖЕ базе Postgres. Выбор объявлен в пре-реге: холодность живёт на book_id, поэтому другая книга защищает её полностью, а общая база означает, что платная рука едет по базе, которую дым уже прогрел. Факторов между дымом и платной рукой сменилось четыре: пайплайн · книга · models.yaml (дымовой несёт номинальную цену локальной модели, без которой книга не продаётся) · учётка.
  4. TM_PLATFORM_BACKUP_DIR и TM_PLATFORM_PGRESTORE_BIN заведены мной на платной руке — на дымовой их не было. Довод: без них демон печатает WARN «this deployment keeps NO restore point of the paid translations or of the credit ledger». Путь проверен на $0-руке до того, как на него положились. Это правка КАССЫ, не покупающего файла ⇒ пере-фриза не требует (§4.2 пака).
  5. epubcheck не гонялсяjava на хосте нет и поставить нельзя; пак это разрешает. EPUB судится структурно.

12. НАХОДКИ ВНЕ ЗАКАЗА (§4.10 пака) — криты · мажоры · регрессии · баги · точки улучшения

Каждая — что видел · чем предъявлено · почему это не вкусовщина · чего стоит.

12.1 МАЖОР. Учётка, которой не хватает на книжный бонд, покупает УРЕЗАННЫЙ продукт ПО ТОЙ ЖЕ ЦЕНЕ, а решающая пара контракта об этом молчит

Что видел ($0-рука, воспроизводимо, тела обоих ответов в evidence/http/):

баланс учётки verdict affordable_chapters blocked term_consistency_funded hold_micro_usd expected_micro_usd
$2.50 covers_all 4 null true 2 004 553 2324
$0.05 covers_all 4 null false 4 553 2324

Старт при балансе $0.05 ПРИНЯТ (202), прогон дошёл до ready.

Почему это не вкусовщина. Реальность ТРЁХСОСТОЯННА — «заказ невозможен» · «заказ возможен УРЕЗАННЫМ» · «заказ возможен полностью», — а решающая пара контракта (verdict + blocked) ДВУХСОСТОЯННА, и третье состояние выражено булевым полем ВНЕ решающего пути. Из холда молча исчезает двухдолларовый бонд контура терминологии, цена при этом та же (2324 µUSD в обоих случаях), и affordable_chapters тоже тот же. То есть покупателю называют ту же цену и тот же объём за продукт, у которого выключена консолидация терминов — приоритет №1 владельца.

Чего это стоит и чего НЕ стоит — обе половины. Запись факт НЕСЁТ: runs.bond_funded = f у деградированного прогона против t у контрольного, и term_consistency_funded едет на проводе ⇒ пост-фактум это аудируемо, «невидимо навсегда» сказать нельзя. А размер эффекта НЕ ИЗМЕРЕН: на дымовой книжке с тремя термами контур всё равно отработал (1 классификатор + 1 терминолог против 2 + 2 на профинансированной), и на трёх термах эти два числа различаться не могут. «Контур не исчез» доказывает, что механизм ЕСТЬ, а не что урезание безвредно.

Ратифицировано ли. Греп docs/architecture/05-decisions-log.md по term_consistency_funded и bond_funded даёт только контрактную nullability (D39.…, минор 0.13.1) и отчёт прогона A. Дизайна «непрофинансированная учётка получает урезанный контур с булевым сигналом» в журнале решений НЕТ. ⇒ это вопрос о ФОРМЕ КОНТРАКТА владельцу с рекомендацией, а не доказанный дефект. Рекомендация: категория «принят с урезанным объёмом» в verdict, а не булево поле сбоку; blocked: null при этом СВОЁ значение несёт верно («заказ возможен») и менять его не надо.

12.2 МАЖОР (наблюдаемость). У контура банка нет счётчика доли ответов — см. §7 результатов

Цена на этом прогоне: $0.024779 и 42 терма из 66 без машинного типа, при итоговой строке стадии, которая говорит «всё чисто». Лечение существует и стоит в соседнем цикле (stagerun.go:235), бэнк-роли

ИСПР. 17.09: адрес stagerun.go:235 устарел — цикл попыток вынесен в attemptladder.go (D39.264). Найдено оркестратором при починке соседней ссылки: ось приёмки назвала в этом файле ОДИН адрес, а их ДВА — второй не цитирует переименованную строку и потому не попал ни в один греп по ней.

на него не заведены (terminologist.go:832).

12.3 МИНОР (упрочнение). Битый процент-эскейп в параметре запроса отвечается как ОТСУТСТВИЕ параметра

Механизм различён ТРЕМЯ пробами, а не одной: GET /v0/books?cursor=not-a-real-cursor400 cursor_invalid (механизм ЖИВ, decodeCursor в platform/internal/pgstore/books.go:1325 отвергает по-настоящему) · GET /v0/books?cursor=%zz200 и полная первая страница · контроль без курсора → тот же 200. Причина не в decodeCursor: r.URL.Query() молча выбрасывает параметр с неразбираемым эскейпом и не отдаёт ошибку разбора никому, так что Get("cursor") возвращает "". Класс системный — то же на limit (там безвредно: «выброшен» = «дефолт»). Размер называю честно: МАЛЫЙ. Курсор — base64url, % в корректно переданном курсоре не встречается; реальный триггер — двойное кодирование или прокси. Это упрочнение, не денежный путь. Но «неразбираемый запрос отвечается как другой, валидный» — тот класс, ради которого у платформы и заведена машинная модель ошибок, и этот путь её минует.

12.4 МИНОР (контракт). Внутри ПРЕВЬЮ пер-элементный state называется applied

Ответ двери правок при preview: true несёт "state": "applied" у каждого элемента. Различитель есть и стоит ПЕРВЫМ полем тела ("preview": true), и на диск превью действительно не пишет — проверено sha mined-delta.yaml до и после. ⇒ информация не теряется, но слово выбрано неудачно: would_apply сказало бы правду, а applied внутри превью читается как подтверждение совершённого. ⚠ И я обязана назвать, как чуть не завела здесь ЛОЖНУЮ находку: первый раз я прочитала ответ ГРЕПОМ по нескольким ключам, увидела state: applied у превью и почти записала «превью врёт о том, что применило». Пошла в сохранённое ТЕЛО целиком — и там первым полем стоит preview: true. Спасло ровно то, что харнесс пишет тела в файл: грепу я верила, файлу проверила.

12.5 ТОЧКА УЛУЧШЕНИЯ. Механизм эскалации не может исполниться ни на одном боевом конфиге

pipeline-c1.yaml:223 несёт escalation.budget_usd: 0, а комментарий строкой :221 гласит: «Приёмочная сессия 蛊真人 ОБЯЗАНА выставить budget_usd>0, иначе echo-эскалация не исполнится». Дефолт держится за зелень CI без чужих ключей. ⇒ два боевых прогона подряд (A и B) прошли с нулевой эскалацией, и построенный, ратифицированный механизм не исполнялся живьём ни разу. Это тот же класс, что «лекарство лендится выключенным» (ряд 433): механизм есть, условие его включения — ручная правка, которой никто не делает.

12.6 НАБЛЮДЕНИЕ О ДЕНЬГАХ, которого не заказывали: 85 % оплаченного выхода — думанье

См. §6.2 результатов. Это не дефект и не вердикт о настройках — это ВЕЛИЧИНА, которой у проекта не было, и она меняет то, как читается любая смета: «выходные токены» и «текст» на боевых настройках расходятся в шесть-семь раз. Ряд 422 закрывается числом, а не механизмом.

12.7 ⚠ ПРО МОЙ СОБСТВЕННЫЙ ПРИБОР — две аномалии, оказавшиеся о НЁМ, а не о предмете

(а) Первые пробы «второй старт при идущем прогоне» и «стоп» дали «не как ожидалось» (202 и 409). Разбор: я спросила ПОСЛЕ того, как прогон уже кончился — $0-заглушка проходит четырёхюнитную книгу за ~15 секунд. Пере-снято залпом без пауз (три вызова за 0.27 с): 409 run_in_flight и 202 со stop_requested: true. ⇒ аномалия была о приборе. Не пере-сними я её — в отчёт уехали бы две несуществующие находки о дверях. (б) Прибор shipped.py на первом прогоне по базе A дал терму → «гу» 27 попаданий, среди которых «губ», «губы», «гул», «густое». Правило стема для короткого слова с суффиксным подстановочным знаком ловит обычные русские слова. Починено (одно-словный терм короче 4 букв матчится ТОЧНО), стало 10 попаданий и все — «гу». ⇒ инструмент, который пере-матчит, докладывает книгу консистентной по терму, который он ни разу не нашёл.

13. ЧТО НЕ УДАЛОСЬ, НЕ ПРОВЕРЕНО И НЕ ИЗМЕРЕНО

  1. ВЕЛИЧИНА доли выброшенного НЕ установлена и установлена быть не могла. n = 2. Квирки §3д: парный дизайн ловит ×2.5 за 13 пар. Установлен ЗНАК и показано, что две меры одного явления могут разойтись в противоположные стороны.
  2. Эскалация не исполнялась (budget_usd: 0). Второй прогон подряд не говорит о ней ничего.
  3. Судейская стадия отсутствует на этом пути, гейт coverage выключен: четыре гейта из пяти.
  4. epubcheck не гонялсяjava на хосте нет. Валидность EPUB по спецификации НЕ измерена; измерена структура (zip · container.xml · nav · 3 itemref · оглавление).
  5. Стоп-правила и потолки НЕ СТРЕЛЯЛИ. Книжный потолок $1.25, дневной $2.50, стоп сессии $1.00 — при трате $0.396657. Они стояли заряженными и ни разу не сработали ⇒ их поведение этим прогоном не проверено, и записывать их в актив нельзя. (На $0-руке подсадками проверены отказные пути двери, но не потолки движка.)
  6. Размер эффекта урезанного бонда (§12.1) НЕ ИЗМЕРЕН — см. там же.
  7. Атрибуция стохастики. Провал двух классификаторных батчей и его исчезновение на резюме объяснены вендорским разбросом, потому что тот задокументирован и потому что резюм на той же книге дал чистый результат. Но это ОБЪЯСНЕНИЕ, а не замер: чтобы отделить «вендор» от «наши 118 коммитов», нужен парный дизайн, которого этот прогон не покупал.
  8. Один прогон, одна книга, одна пара, три главы, четыре юнита. Всё, что здесь названо «воспроизвелось», воспроизвелось ОДИН раз.

14. ГДЕ ПРИБОР СЛЕП, И Я ЭТО ЗНАЮ

  • Пост-чек считает на единице, которой в продукте нет (§8.2 результатов): 16 записанных отклонений, счётчик 0, потому что Confirmed = approved, а таких 2 из 66. Данные ЕСТЬ, число НОЛЬ. Не чиню — чужая зона и отдельный заказ; назвать обязана.
  • I2 — нижняя граница, и прибор говорит это сам: передача засчитывается ГДЕ УГОДНО в юните, так что обычное слово вдали от своего терма может закрыть настоящее отсутствие. Прибор печатает и популяцию, где это возможно (11 термов).
  • Мой shipped.py матчит префиксным стемом и поэтому слеп к эллипсису в перечислении: «в крепостях рода Бай и рода Сюн» несёт ДВА терма под одной вершиной, и 熊家寨 уходит в «пусто». На прогоне A это ровно тот случай, который я сперва посчитала «не доехал», а он доехал. ⇒ все пустые печатаются поимённо и разбираются глазами, а не засчитываются в консистентные.
  • Долларов провайдер нам не сообщал. Он сообщил ТОКЕНЫ; доллары умножены нами по пину models.yaml, и на 11.09 пин flash был выше вендорской страницы на 13 % (D39.247 п.3). «$0.396657» — это то, что насчитала НАША модель цен.
  • Пик/офф-пик. Прогон шёл 19:4820:08 UTC в пятницу, то есть в ОФФ-ПИК DeepSeek, а леджер осознанно считает по ПИКОВОЙ цене (D39.136). ⇒ настоящий счёт вендора за B примерно ВДВОЕ меньше записанного, а за A — нет (A шёл внутри пикового окна). Сравнение ЛЕДЖЕРОВ от этого не страдает; фраза «мы заплатили столько-то» — страдает вдвое.
  • «Три следа» — не три свидетеля (§10): Postgres материализуется из потока движка. Независимы только скачанные байты с их sha и маркеры выхода systemd.

15. ДЕНЬГИ СОШЛИСЬ — шестью счётами, и все шесть отфильтрованы по ОДНОЙ учётке

путь µUSD
движок: Σ request_log.cost_usd 396 657
движок: Σ checkpoints.cost_usd 396 657
движок: последний кадр spend в events.jsonl 396 657
платформа: Σ settlement учётки u_RR5RMQNSX2KZMNXL 396 657
платформа: грант баланс той же учётки 396 657
платформа: run_attempts.spend_micro_usd ПОСЛЕДНЕЙ попытки 396 657

Открытых резерваций 0 (контроль: резерваций этой учётки 2, обе settled).

И сразу честно про эти шесть: независимый среди них ОДИН. request_log, checkpoints и кадр spend — три записи одного вычисления движка; settlement и баланс — два чтения одного леджера, который взял число У ДВИЖКА через run_attempts. Сходимость доказывает, что по дороге ничего не потеряно и не удвоено, — и ровно это, не больше.

ЛОВУШКА ПРОГОНА A ВОСПРОИЗВЕДЕНА КАК КОНТРОЛЬ: run_attempts.spend_micro_usd — величина НАКОПЛЕННАЯ. Сумма по попыткам даёт 566 850 µUSD, то есть +43 % к цене книги. Кто просуммирует эту колонку, получит завышение и не заметит.

И ещё одна ловушка, названная пре-регом и сработавшая: все шесть счётов отфильтрованы по платной учётке. Без фильтра в леджере стенда лежат 36 строк по двум учёткам, и дымовые деньги вошли бы в цену книги. Прогон A на этом и споткнулся (§14.2 его отчёта); здесь учётки разведены пре-регом, а фильтр напечатан рядом с каждым числом.

16. ЧТО СКАЗАЛИ ПРИБОРЫ ДВИЖКА ОБ ЭТОМ ТЕКСТЕ — инвентарь ДО сверки с читателем

Записан ДО того, как пришёл отчёт читателя, чтобы сверка §4.6 пака не подгонялась под находки.

прибор что сказал где живёт
эхо-гейт cjk_artifact 0 на черновике, 0 на редактуре checks, порог cjk_share > 0.15
косметический санитайзер 0 юнитов STRIPS/ECHO отчёта
стиль-гейты (тире диалога, ё, транслит-междометия, 万/億, reflow) 0 суммарно STYLE GATES
glossary-misses · number-drift · degenerate-loops · trust-gated 0 · 0 · 0 · 0 SIGNALS
пост-чек банка (n_postcheck_miss) 0 на всех 6 чанках — при 16 ЗАПИСАННЫХ отклонениях рядом retrieval_state, §8.2 результатов
банкнотный канал 93 строки на 6 чанках из 6, parse-fail 0, обрезано 0 BANKNOTE
degraded empty ×5 · length ×2 · пусто ×28 request_log
chunk_status.disposition ok у всех десяти; история — в first_flag_reason chunk_status
структура абзацев 2.44 предложения на повествовательный абзац (285 / 117) STRUCTURE
следование банку модель следовала 73 из 89 проверенных строк = 82 % UNSIGNED BANK
консистентность книги I1 = 6 термов более чем одной передачей · I2 = 7 не доехали · 1 съеден длинным ключом §8 результатов

Все приборы, кроме одного, говорят «чисто». Единственный, который говорит не «чисто», — прибор консистентности книги, и он называет 1314 термов поимённо и с главами.

16.1 И ОДНУ ИЗ ЕГО СТРОК Я ПРОВЕРИЛА РУКАМИ ПРЕЖДЕ, ЧЕМ НЕСТИ ЧИТАТЕЛЮ — она ЛОЖНАЯ ТРЕВОГА

Самая громкая строка прибора: 方源 («Фан Юань»), ПОДПИСАННЫЙ мною терм, вердикт split, «split inside: 1,2,3» — то есть разнобой по всем трём главам в имени главного героя. Счёт по отгруженному тексту:

«Фан Юань» 36 · «Фан Юаня» 19 · «Фан Юаню» 2 · «Фан Юанем» 1   = 58
конкурирующих транслитераций: 0    (голое «Фан» ×4 — это ДРУГИЕ термы:
  «Старый демон Фан» 方老魔 · «ветвь Фан» 方之一脉 · «род Фан» 方家)

это одно имя в четырёх падежах, а не две передачи. Разрыв 63 сработки → 58 передач закрывается местоимениями, что для русской прозы норма. Прибор сам печатает оговорку («fewer shipped than fired is an upper bound on renderings, not a proof of two»), но вердикт в колонке стоит split, и читатель таблицы возьмёт именно его. В склоняющем языке падеж — не вторая передача, и самый тревожный ряд отчёта оказался тревогой прибора, а не дефектом текста.

А вот эти две строки того же прибора проверку руками ПРОШЛИ и остаются настоящими:

  • 家老 («старейшина рода»): в тексте преобладает КОРОТКАЯ форма «старейшины», полная — единицы. Тот же дефект нашёл и прогон A на своём тексте.
  • 古月族长 («глава рода Гу Юэ»): в тексте «глава рода» без «Гу Юэ».

17. ВЫЧИТКА ВСЕГО ТЕКСТА (§4.5 пака)

Форма: ОДИН читатель на opus, на ВЕСЬ текст сразу. Довод: объём крошечный (оригинал 9021 знак, перевод 30 283), а консистентность банка по построению не видна тому, кто читает главу отдельно — находки [2][5] и [13][15] все межглавные. Делить было нечего и незачем.

Доказательство дочитывания — напечатано читателем, и оно сошлось: оригинал wc -m = 9021 (со снятым CR — 8782, разница ровно 239 = числу строк, то есть CRLF); перевод 30 283 обеими манерами счёта. Последнее предложение оригинала — «只要不阻碍我赶路,那就一边玩自己的蛋去,踩都不屑踩。», последнее предложение перевода — «Даже наступить на них — и то неохота.» Файлы прочитаны в три захода с ПЕРЕКРЫТИЕМ, стыки прочитаны дважды.

Итог: 26 находок — 1 крит · 11 мажоров · 14 миноров, по приоритетам владельца 7 / 6 / 7 / 6.

17.1 АДЪЮДИКАЦИЯ: находка читателя — это УТВЕРЖДЕНИЕ, а не факт, и я проверила его сама

Претрейн-опасность закрывается не обещанием, а сверкой. Проверено МНОЙ по обоим файлам,механически: ВСЕ проверенные пары цитат присутствуют в выданных файлах дословно — ни одной выдуманной. Проверены обе цитаты находок [1] (крит), [2], [3], [5], [8], [9], [17], [18], [19], [23]: 对她来讲,自己前途光明… ×1 · 方家两兄弟 ×1 · 方之一脉 ×2 · 你退下罢 ×2 · 杀了千万人的性命 ×1 · 诛了我的九族 ×1 · 十万八千里 ×1 · 绣花鞋 ×1 · 蹬蹬蹬 ×1 — и соответствующие русские фрагменты все по разу. ⇒ ни одного «воспоминания из претрейна» в отчёте нет.

ТРИ ЧИСЛА ЧИТАТЕЛЯ ПРИ ЭТОМ НЕВЕРНЫ, и я их правлю, а не пересказываю:

  • [2] «род 48 против клан 7» → на самом деле 32 против 6. 48 — это счёт по СТЕМУ, куда попали «родители», «родился», «родного», «родственных»; а из семи «клан» один — «робко кланяясь». Существо находки при этом устояло: обе цитаты на месте, и разнобой внутри одной реплики («единству клана» — «старейшин рода») подтверждён.
  • [11] «230 абзацев оригинала → 155 перевода» → пере-считано: 230 → 158, отношение 0.69. Направление и величина сжатия подтверждены, число уточнено.
  • [14] риск слипания «старой нянюшки» с «нянюшкой Шэнь» — подтверждён составом БАНКА: там стоят РАЗНЫЕ строки 老嬷嬷 → «старая нянюшка» и 沈嬷嬷 → «нянюшка Шэнь», то есть два персонажа действительно получили однокоренные имена.

Доля подтверждённых по цитатам: 10 из 10 проверенных. Доля числовых утверждений, потребовавших правки: 3. Это и есть цена того, что находку читателя нельзя брать на слово, — и одновременно доказательство, что предмет он видел.

18. СВЕРКА ПРИБОРОВ С ЧИТАТЕЛЕМ (§4.6 пака) — ради этого прогон и стоил своих денег

КЛЕТКА «ПРИБОР СМОЛЧАЛ» РАЗДЕЛЕНА НА ЧЕТЫРЕ, И БЕЗ ЭТОГО ДЕЛЕНИЯ ОНА БЫ СОЛГАЛА. Свалить в неё translationese, ритм и согласование значило бы отчитаться «приборы пропустили 24 дефекта из 26» — тогда как для большинства из них прибора не существует и существовать не предполагалось.

читатель нашёл читатель не нашёл
прибор сказал 1: 家老 «старейшина рода» → в тексте преобладает короткая «старейшины» (I1 split, главы 1 и 3; читатель этого терма не назвал отдельно, но назвал тот же класс) ЛОЖНАЯ ТРЕВОГА ×1: 方源 — самый громкий ряд отчёта, вердикт split по всем трём главам на ИМЕНИ ГЕРОЯ. Руками: «Фан Юань» 36 + «Фан Юаня» 19 + «Фан Юаню» 2 + «Фан Юанем» 1 = 58, конкурирующих транслитераций 0; четыре голых «Фан» — это ДРУГИЕ термы банка (方老魔, 方之一脉, 方家). В склоняющем языке падеж — не вторая передача. Читатель, читавший текст глазами, её не назвал — и был прав
прибор смолчал СЛЕПЫЕ ПОВЕРХНОСТИ — см. разбор ниже согласие: пропусков нет (читатель сверил 230 абзацев к 230), эхо 0 при гейте 0, выдумок уровня предложения 0

18.1 Четыре РАЗНЫЕ причины молчания, и лечатся они в разных местах

(а) ПРИБОР ЕСТЬ, ТЕРМ В ЕГО ПОПУЛЯЦИЮ НЕ ПОПАЛ — молчал МАЙНЕР, а не энфорсер. Прибор консистентности судит СТРОКИ БАНКА. Проверено по банку прогона: из терминов, на которых читатель поймал разнобой, в банке НЕТ восьми: 家族/族 (род↔клан — самая крупная находка приоритета №1) · 炼制/炼成 (создать↔выплавить) · 楼阁/阁楼 (башня↔павильон) · 老妈子 · 先机 (преимущество первого хода↔первому) · 丫头片子 · 怀璧之罪. ⇒ энфорсер не молчал — ему не о чем было говорить. Это дефект ПОЛНОТЫ МАЙНИНГА, и лечится он там, а не в гейте.

(б) ПРИБОР ЕСТЬ, ТЕРМ В БАНКЕ, ФОРМА БАНКА ДОЕХАЛА — А ДЕФЕКТ В САМОМ БАНКЕ. 方家 → «род Фан» и 方之一脉 → «ветвь Фан» ОБА в банке, обе формы отгружены, прибор доволен. Но «род» в этой книге занят кланом (род Гу Юэ, род Бай, род Сюн), и «братья из рода Фан» делают ветвь четвёртым самостоятельным родом — находка [3]. То же у 九族 → «девять поколений рода» (находка [19]: 九族 — девять степеней родства, а не девять поколений). ⇒ прибор спрашивает «доехала ли форма банка», и по построению НЕ МОЖЕТ спросить «а верна ли сама форма». Содержание банка не судит ничто.

(в) ПРИБОР ЕСТЬ, КОНСТРУКЦИЮ ЗНАЕТ ПОИМЁННО — И ПО РАТИФИЦИРОВАННОМУ РЕШЕНИЮ ЕЁ НЕ СУДИТ. Находка [17]: 杀了千万人 → «десятки миллионов» (千万 = десять миллионов). У движка есть чекер ровно на эту конструкцию — DC2 千万, — и его собственный комментарий говорит дословно (backend/internal/checks/cheapgates.go:90-93):

«DC2 千万: the live hit (杀了千万人 → «тысячи и тысячи людей») is shape-identical to the ratified TRUE positive (千万生灵 → «тысячи жизней»). Hyperbole and magnitude are not separable offline here — the rule's header says so (§5-A4) — so the hit is the class's accepted ambiguity, not an implementation bug.»

прибор встретил ЭТУ ЖЕ конструкцию, признал её неразрешимой ОФФЛАЙН и по решению оставил в покое — а читатель с оригиналом в руках решил её одной строкой. Это не дыра в реализации; это точная граница того, что детерминированный гейт умеет, и цена этой границы теперь названа в тексте.

(г) ПРИБОРА ДЛЯ КЛАССА НЕТ ВОВСЕ — и это БОЛЬШИНСТВО находок. Ни один $0-гейт не судит: подмену референта (крит [1]: 自己 отдано служанке, и мотивировка сцены рухнула) · согласование рода ([8] «Наделила … небо», [9] «нашлось бы не одна сотня» — две настоящие грамматические ошибки) · кальку идиом ([7] «жёлтые цветы уже остынут», [12] «сила девяти быков и двух тигров», [16] «преступление владения яшмой», [25]) · регистр ([20] «девчонка-маломерка», [22] «апертура» в молитве предкам, [26] «молвил» + «рассеянно») · утрату эха реплики ([5] 你退下罢 дважды в оригинале, две разные реплики в переводе) · дописанный образ ([6] «очки с глаз упали», [23] «каблучками» при вышитых туфельках). Это 20 находок из 26.

И ОДИН ПРИБОР ИЗМЕРИЛ ПРЕДМЕТ, НО НЕ ИМЕЕТ ПОРОГА. Находка [11] — сжатие абзацев 230 → 158. Движок это ЧИСЛО печатает: STRUCTURE … sentences/narrative-paragraph = 2.44 (285 / 117). Но это наблюдаемость без порога и без сравнения с ИСХОДНИКОМ: прибор знает, сколько абзацев в ПЕРЕВОДЕ, и не знает, сколько их было в оригинале. ⇒ самая крупная художественная потеря прогона измерима одним вычитанием, которого никто не делает.

19. ЧТО ЧИТАТЕЛЬ СКАЗАЛ О КАЧЕСТВЕ ТЕКСТА — и это ответ на вопрос владельца

Оценка читателя: «приличный любительский, на верхней его границе». Довод, который он привёл сам: издательское качество не допускает ни одной ошибки согласования и ни одного места, где абзац теряет смысл, — здесь их три, и все три ловятся обычной редакторской вычиткой БЕЗ сверки с оригиналом. Машинным текст назвать нельзя: «машина не выбирает „попаданец“, не строит „в отблесках заката вдруг приобрело чарующий оттенок“ и не держит одиннадцать вхождений термина без сбоя».

Что он назвал сильным: сцена жертвоприношения в родовом храме, утренняя сцена с Шэнь Цуй, пересуды сверстников по дороге — «читается как нормальная русская проза, без запинок»; диалог старейшин звучит как разговор пожилых интриганов, а не как подстрочник.

Три системные слабости, названные им: (1) ритм — 230 абзацев оригинала сплавлены в 158, в главе 2 почти вдвое, и фирменные однофразовые удары автора («大局已定,今日必死无疑», «简而言之,就是重生», «恨吗?») стали придаточными внутри потока; (2) идиомы — там, где китайский оборот стёрт до служебного значения, перевод его РИСУЕТ, и читатель спотыкается там, где автор не просил останавливаться; (3) терминология не сведена — «род/клан, ветвь Фан/род Фан, создать/выплавить, „Ступай“/„Можешь идти“ — следы текста, который никто не вычитывал единым проходом с глоссарием».

Его три первоочередные правки: абзац про Шэнь Цуй (крит) · свести глоссарий одним проходом (закрывает почти весь приоритет №1) · вернуть абзацную разбивку и переписать четыре кальки по смыслу.

И честная рамка вокруг этой оценки. Она снята ОДНИМ читателем на ОДНОЙ книге из трёх глав, без второго независимого суждения о качестве (адъюдикация §17.1 проверяла ЦИТАТЫ и ЧИСЛА, а не вкус). Шкала «издательское / приличное любительское / машинное» — его, не наша ратифицированная.

20. СОСТОЯНИЕ СДАЧИ

Сделано и предъявлено: книга проведена от двери до файла и прочитана ($0.396657, 20 мин 06 с) · исход есть у каждой из 23 машинных строк пре-рег-таблицы (§9 результатов), а две последние её строки — 24 «вычитка» и 25 «сверка приборов» — закрыты §17 и §18 · деньги сведены шестью счётами с названной оговоркой про независимость (§15 результатов) · обе миграции предъявлены ДАННЫМИ, и v18 дала числу ряда 422 первое значение (§6 результатов) · денежная мера пре-регистрирована, прибор само-проверен на прогоне A до применения, и две меры одного явления разошлись в разные стороны (§5 результатов) · вычитка всего текста опус-читателем с доказательством дочитывания и адъюдикацией цитат (§17) · сверка приборов с читателем разделена на четыре РАЗНЫЕ причины молчания (§18) · находки вне заказа с носителями (§12 результатов) · девиации объявлены, включая правку моего прибора после фриза (§11 результатов) · что не удалось и где прибор слеп (§1314 результатов).

Где артефакты:

Что Где В git
Инструменты (драйвер, прибор денег, прибор отгруженного текста, пакет читателя) eval/cold_run_b/ фриз 4ee7f03 + правка measure.py отдельным коммитом
Пре-регистрация и этот разбор docs/experiments/25-door-to-file-b.md пре-рег4ee7f03; результаты лендит оркестратор
Стенд, следы, 54 сохранённых HTTP-тела, копии БД, отгруженные файлы ~/tm-coldrun-b/ (вне git, вне /tmp) нет
Живой журнал прогона («время · что увидел · чего ожидал · что это значит») ~/tm-coldrun-b/evidence/live-journal.md нет
Ожидания §4.8, написанные ДО проб, и исход каждой ~/tm-coldrun-b/evidence/checks/api-expectations.md нет

Что оставлено включённым: стенд жив (tmplatformd на 127.0.0.1:8098, pid в ~/tm-coldrun-b/stand/daemon.pid, база tm_coldrun_b в кластере /tmp:55433, клон фриза в ~/tm-coldrun-b/freeze) — чтобы любое число этого отчёта можно было пере-снять теми же командами. Гасить по слову оркестратора и только по pid.

Чего я не делала и не буду: не чинила ничего из найденного — ни в движке, ни в платформе, ни в банке. Пак запрещает прогону чинить, и это правильно: прогон, чинящий найденное, перестаёт быть холодным и теряет право сравниваться с A. Единственная правка кода за пак — мой СОБСТВЕННЫЙ прибор после фриза, и она объявлена девиацией (§11 п.1 результатов).

Работа завершена, править не планирую.


ДОПИСКА 12.09 — по прямому вопросу «что ты знаешь и не сказала»

⚠ Дописка, а не правка: ничего выше не тронуто. Поводом послужил вопрос оркестратора №23 после закрытия пака (норма: «в коде названо, в отчёте нет — значит для следующей смены НЕ названо»).

Д1. БАНК КНИГИ НЕДЕТЕРМИНИРОВАН ПО ПОСТРОЕНИЮ — замерено, а не предположено

В §18.1(а) сказано, что восьми термов читателя «нет в банке», и причина названа только для части. Пере-снято по обеим базам, два разных механизма:

(а) ЧТО ОТСЕКАЕТ КОНТРАСТ — и это НЕ порог. Греп по mining-contrast.zh.txt (jieba 0.42.1, 349 046 строк — контроль): 家族 · · 炼制 · 楼阁 · 先机 · 老妈子ВСЕ в словаре общекитайского, а 方源 · 古月山寨 · 丫头片子 · 怀璧之罪 — нет. ⇒ шесть из восьми термов читателя отсечены потому, что они ОБЫЧНЫЕ КИТАЙСКИЕ СЛОВА. Контраст спрашивает «характерно ли слово для ЭТОГО текста на фоне китайского вообще»; продукт спрашивает «нужна ли слову ОДНА закреплённая русская передача на всю книгу». Для 家族 первый ответ „нет“, второй „да“ — и крупнейшая находка приоритета №1 (род↔клан, 9 + 29 вхождений в исходнике) не отсеяна порогом, а исключена ПО ПОСТРОЕНИЮ.

(б) А РАСХОЖДЕНИЕ БАНКОВ A И B — СОВСЕМ ДРУГОЕ, и оно глубже. Банки: общих 53, только в A — 16, только в B — 13, на побайтно одном исходнике и тождественном покупающем конфиге (sha a46b33ee… у обоих). Granularity-парами объясняются лишь 4 (丙等资质资质 · 四更时四更 · 族长家老族长 · 贴身丫鬟丫鬟). И частотой это не объясняется: 舅父舅母 встречается в исходнике 14 раз, есть в банке A и отсутствует в банке B.

МЕХАНИЗМ ЗАКРЫТ ЗАМЕРОМ, $0. Кандидатов банка предлагает ЧЕРНОВИК — канал banknote draft-side (bank-mining: draft-side proposals folded). Сверено retrieval_state.banknote_detail двух прогонов НА ОДНИХ И ТЕХ ЖЕ шести чанках:

чанк поверхностей A B общих только A только B
ch1/0 16 19 15 天罗地网 牌位 祭祀大典 赤铜香炉 魔头
ch1/1 19 18 17 三转蛊师 古月族长 将敬酒
ch2/0 19 11 11 三转 仙师 孪生弟弟 开窍 怀璧之罪 舅母 舅父 魔道巨擘
ch2/1 15 12 11 唐诗宋词 正派 甲等资质 邪魔 甲等
ch3/0 17 20 13 四更时 舅父舅母 贴身丫鬟 雪盐 丫鬟 四更 嬷嬷 少爷 时辰 舅母 舅父
ch3/1 12 13 7 丙等资质 丫头片子 后宫 族长家老 舅父舅母 丙等 家老 族长 舅母 舅父 资质
итого 98 93 74

Жаккар по книге = 0.63.банк книги — функция ЧЕРНОВИКА, а черновик есть стохастический выход модели. Значит и СОСТАВ банка, и ГРАНУЛЯРНОСТЬ его ключей недетерминированы от прогона к прогону на одном входе. Видно и род различия: на ch3/1 прогон A предлагает СОСТАВНЫЕ ключи (丙等资质, 族长家老, 舅父舅母), а B — их СОСТАВЛЯЮЩИЕ (丙等, 族长, 舅母, 舅父, 资质, 家老); на ch2/0 предложение B — строгое подмножество A, беднее на восемь. Следствие для чисел этого прогона, и оно жёстче уже записанного: консистентность мерится ПО СТРОКАМ БАНКА, а сами строки между прогонами разные. Двигается не только вердикт (ряд 436) — двигается ПОПУЛЯЦИЯ, на которой он считается. Числа I1/I2 двух прогонов сравнивать нельзя не потому, что прибор плох, а потому, что у них разные знаменатели по построению.

Д2. ТРИ НАХОДКИ ЧИТАТЕЛЯ, ВЫПАВШИЕ ИЗ ОТЧЁТА — и почему это хуже отброса

В отчёт вошли 22 из 26. [4] присутствует по содержанию (в §18.1(а) термы перечислены иероглифами). Три отсутствуют полностью, и я их НЕ отбрасывала по доводу — они выпали при сведении находок в КЛАССЫ: в §18.1(г) перечислены представители класса, и перечень не сверен с полным списком. У отброса есть аргумент, который можно проверить; у выпадения из выжимки его нет.

  • [10] МАЖОР, приоритет 4, калька. 舅父舅母 — одно двусложное слово — отдано шестисловной конструкцией «дядя по матери и тётя по матери», 11 раз полной парой (плюс «тётя по матери» отдельно ещё 6). ОРИГИНАЛ: «明天就是开窍大典,哥哥你这么晚还不休息,舅父舅母知道了,恐怕会担心的。» ПЕРЕВОД: «Завтра ведь церемония открытия апертуры, а ты так поздно не отдыхаешь. Если дядя по матери и тётя по матери узнают, боюсь, они будут волноваться.» В живой реплике подростка брату это канцелярская справка о родстве.
  • [21] МИНОР, приоритет 3, типографика. Два вида многоточия («…» ×10 и «...» ×2, строки 217 и 227) и одна пара ПРЯМЫХ ASCII-кавычек внутри ёлочек при 24 парах ёлочек: «…на пути демонов нет слова "компромисс"». Правки корректора, которых не сделали.
  • [24] МИНОР, приоритет 4, калька. ОРИГИНАЛ: «弟弟如卧龙升天,哥哥似凤雏落地。» ПЕРЕВОД: «Младший — словно Лежащий дракон, вознёсшийся в небо; старший — словно Птенец феникса, павший на землю.» 卧龙 и 凤雏 — прозвища Чжугэ Ляна и Пан Туна, для китайского читателя мгновенно узнаваемая пара равновеликих гениев; по-русски антитеза не срабатывает, читатель видит двух произвольных зверей.

Д3. ЧЕТЫРЕ КОДОВЫХ НАБЛЮДЕНИЯ, НЕ ЗАВЕДЁННЫЕ НАХОДКАМИ В ОСНОВНОМ ОТЧЁТЕ

  1. bank_decisions пуста при трёх approved. После ДВУХ прогонов, применивших правки через дверь, в таблице 0 строк, при bank_terms с 3 approved (оба числа сняты запросом). Эффект решений есть, платформенной записи «кто что решил» нет. Видела на дымовой руке и не чесала; в код за причиной НЕ ходила, поэтому дефект это или таблица другого назначения — не установлено.
  2. ДВА флора min_max_tokens, и какой выигрывает — выяснила только по вопросу. pipeline-c1.yaml:18 несёт 2048, models.yaml8000 (flash) и 16000 (pro). На проводе: черновик 8496 (= 8000 + 496 банк-бюджета), редактор 16000, бэнк-роли 8000 ⇒ выигрывает пер-модельный, пайплайновый инертен.
  3. TM_PLATFORM_SIGNUP_GRANT_USD печатается на буте как «(an amount; not logged)», то есть настройка фри-тир-гранта в деплое существует — при ратифицированном «продуктовых квот и фри-тира нет и не проектируется».
  4. waves.workers — РЕАЛЬНЫЙ ключ (internal/config/pipeline.go:98), дефолт 1 при ≤ 0 (:939-940), в боевом pipeline-c1.yaml не задан вовсе. ⇒ последовательность прогона — дефолт, а не записанное решение. Внутренний пер-модельный кап — RateLimit.MaxConcurrency (models.yaml), выставлен только у mistral-large-2512. О поведении при workers > 1 этот прогон не говорит НИЧЕГО: гонки, порядок записи, снапшот и леджер под конкуренцией НЕ СМОТРЕЛА.

Д4. ДВА СВОЙСТВА ХОСТА, КОТОРЫХ НЕТ В ОСНОВНОМ ОТЧЁТЕ

  • /tmp занят на 96 % на входе и 97 % на выходе (5.7 ГБ из 5.9, tmpfs; 4.9 ГБ — скретчпады ЧУЖИХ сессий). Меня не задело только потому, что TMPDIR/GOTMPDIR всех сборок и движка уведены на диск. Забитый tmpfs маскируется под сломанную сборку.
  • TM_PLATFORM_RUN_MEMORY_MAX = 4G по умолчанию — прогон исполняется в транзиентном юните systemd С ПОТОЛКОМ ПАМЯТИ. На трёх главах не сработало; на книге в 2283 главы это первый подозреваемый при убийстве по CONSTRAINT_MEMCG.
  • loginctl show-user … Linger=no, хотя platform/README.md говорит «установка требует enable-linger, иначе не стартует ни один прогон». Прогон прошёл целиком ⇒ на этом хосте утверждение README буквально НЕ выполняется (пользовательский менеджер systemd жив сам по себе).

Д5. ЧЕГО Я НЕ СМОТРЕЛА ВООБЩЕ

SSE-поток /v0/books/{id}/stream не дёргала ни разу · tmctl backup как канал не проверяла, хотя TM_PLATFORM_BACKUP_DIR включила · --max-units не трогала · несмонтированные ручки (getRun/updateBook/deleteBook) не проверяла · метрики на 127.0.0.1:9468 не читала · regenerate_before_escalate — не проверяла, срабатывал ли.