# ОТЧЁТ: холодный прогон движка на схеме v16 (ПЛАТНАЯ бэкенд-сессия) > ## РЕВЬЮ-ШАПКА — читать ДО тела > > **Пак ЗАКРЫТ решением ВЛАДЕЛЬЦА 31.08: прогон НЕ доводить.** Остановлено на потраченных > **$0.436110** из санкции $0.80; `--resnapshot` не нажимался, вторая порция не покупалась, > дополнительных трат НОЛЬ. Довод владельца: причина, по которой редактор съел половину захода, НЕ > УСТАНОВЛЕНА — ещё доллар купил бы то же число с той же неизвестностью внутри. Сначала > контролируемая проба (§14), потом разговор о цене. > > **Книга остаётся `--partial` с одиннадцатью помеченными дырами, ось `stale` остаётся закрытой > дрейфом. Это честный исход, а не недоделка.** > > ### Статус выводов > > **ДОКАЗАНО ИСПОЛНЕНИЕМ** (каждое — с командой и артефактом в теле): > движок переводит книгу насквозь за настоящие деньги и отдаёт файл, проходящий epubcheck 5.1.0 > (0/0/0/0) · объёмный потолок `--max-units` · нота D39.158 ОБЕИМИ половинами (стоп и не-стоп, > 70 строк `bank_stop_presented`) · `build` exit 16 с нулевой записью на диск · обе ловушки `build` > (`--format epub` МОЛЧА удаляет соседний `.txt` при exit 0; `book_files` публикует путь > несуществующего файла) · русские пометки читателя на дыре · строка бэклога 198 (17 анонсов, > 17 уникальных, повторов ноль через ТРИ процесса) · строка 239 дословно · строка 240 (у > `bank_stop_presented` нет ни одного `DELETE` во всём движке) · строка 154 числами · контракт > `migrate` для существующей книги · **уточнение контракта: остановка по объёму по КОДУ ВЫХОДА > неотличима от обычного завершения (0 или 2)** · деньги сходятся тремя путями, из которых независим > только `request_log`. > > **СНЯТО МНОЙ ЖЕ — не считать результатом пака** (подробно §4.5): > «редактор эмитит вдвое больше токенов ⇒ виновато неуправляемое размышление» · разложение > «×9.33 = ×4.55 × ×2.07» · «терминологический контур стабилен, двигались только цены» · > «у `deepseek-v4-pro` ручки эффорта нет» (опровергнуто ВЛАДЕЛЬЦЕМ через вендор-доку; §4.5-4). > > **НЕ ПРОВЕРЕНО** (полный список — §11): книга до `complete=true` не доведена · exit 4 не наблюдался · > `withheld`/`incomplete`/`ghost` не возникли · `stale` недостижим · причина роста выходных токенов > редактора · конвенционный резолв промпта переводчика · размеры юнитов в знаках (носителя нет) · > живая читалка · сверка причин флагов сделана на ОДНОМ значении из пятнадцати · манифест против > `ingest/manifest.go` не сверялся. > > ⚠ **Клеймы о рантайме без живого прогона в этом отчёте помечены как таковые.** Каталог прогона > (`/home/ubuntu/books/gu-zhenren/coldrun-v16/`) в репозиторий НЕ уезжает — всё, что должно пережить > рестарт, воспроизведено в теле: команды, числа с отметками момента, дословные строки движка, коды > выхода. > > ⚠ **HEAD с тех пор ушёл.** Прогон куплен на `065d8ac` бинарём sha256 > `e6f872df5b9c031f558ca2cc8a900b3822d2fc38d208453269ebd6dc3f78f9d1`; после сдачи лёг пак > «деньги и честность» (**D39.182**), починивший часть найденного здесь — разложение оплаченного > хвоста, ложную причину снапшот-гарда, расхождение `config_drift` между `status` и `export`, > слепоту денег к правке исходника на месте. **Числа этого отчёта относятся к `065d8ac` и > пере-проверяются только на нём.** Работу D39.182 я не пере-проверяла — она принята. Сессия `textmachine-main-a2`. Промт `docs/BACKEND_COLDRUN_V16_SESSION_PROMPT.md` (оркестратор №21). Платная часть 2026-08-31, **10:00:35 – 10:22:41 UTC**, в ДОЛИНЕ (пики UTC 01–04 и 06–10 у DeepSeek вдвое дороже; цены в `models.yaml` пинованы ПИКОВЫЕ ⇒ леджер завышает — в безопасную сторону). Каталог прогона: `/home/ubuntu/books/gu-zhenren/coldrun-v16/` — остаётся на диске целиком. ⚠ **Каждое денежное число — С ОТМЕТКОЙ МОМЕНТА.** Оси разделения прогонов в денежных таблицах нет: `checkpoints`/`spend` пожизненные по книге, единственная ось — `checkpoints.created_at`; ось прогона живёт только в `request_log.trace_id`. Оркестратор, читавший БД во время прогона, получил другие суммы — это движение живого прогона, а не дефект. --- ## 0. Результат **Движок переводит книгу насквозь на настоящих деньгах и отдаёт файл, который ПРОХОДИТ ВАЛИДАТОР** (epubcheck 5.1.0, EPUB 3.3, 0 fatals / 0 errors / 0 warnings / 0 infos). ⚠ **Открытие в живой читалке НЕ проверено** — читалки на машине нет ни одной; файл передан владельцу, ось открыта до его ответа. Полная цепь на десяти главах в СЕГОДНЯШНИХ ценах стоит **≈$1.14 по собственной оценке движка** (`projected_book_usd = 1.1377277707`) против приора ≈$0.58 и санкции $0.80. Прогон остановлен **не потолком, а снапшот-гардом**, потребовавшим `--resnapshot` после покупки двумя порциями. Куплено **$0.436110**, доставлено **3 юнита из 14** (черновая волна 14/14, редакторская 3/14). Отдан `--partial`-файл с 11 помеченными дырами. **Решение о продолжении — за владельцем. Я его не подменяла и потолок по проекции поднять не просила.** ## 1. Записка-план (§6.1) — выжимка ⚠ Слово «дословно» снимаю: полный текст — `coldrun-v16/PLAN-NOTE.md`, и каталог прогона в репозиторий НЕ уедет. Ниже выжимка; записка написана ДО первой покупки и с тех пор не правилась. **Личность прогона.** HEAD `065d8ac` · последний коммит в `backend/` — `8adcb86` · `tmctl` собран из HEAD, sha256 **`e6f872df5b9c031f558ca2cc8a900b3822d2fc38d208453269ebd6dc3f78f9d1`** — сошёлся ТРЕМЯ независимыми путями (моя сборка · стендовый `~/.local/bin/tmctl` · независимая сборка оркестратора, сообщённая ДО моей). Go 1.26.7. Схема БД **v16**. **Батарея ДО первой покупки.** `make battery` в `backend/`: build · vet (оба тег-набора + архитектурные анализаторы `tmvet`) · gofmt · `golangci-lint` **0 issues** · `go test ./... -race -count=1` — **18 пакетов `ok`, 4 без тестов**, 0 падений. **СКИПЫ ВСЛУХ, их три:** `TestMinerFullBookParity`, `TestHelperEventsRun`, `TestHelperKillLoop`; батарея сама печатает `--- did NOT run (no stand data; see battery-stand) ---`. Корпусные измерения (`TM_MINER_PARITY=1`, `TM_CHECKER_LABELS=1`) НЕ гонялись. ⚠ `EXIT=0` батареи в артефакт НЕ снят — это «со слов сессии». **Три ручки денег, все выставлены до первого платного вызова:** `--ceiling-usd 0.80` на каждом `translate` · `ceilings: {book_usd: 0.80, day_usd: 1.00}` в `book.yaml` (дневной поднят выше книжного сознательно — несущим предохранителем обязан быть книжный) · `--max-units` порциями, **N названы числом: П1 = 3, П2/П3 = 14** (`units_total` из `manifest --json`). **Конфиг — отличия от копии bank-low.** (A) пути: `prompt_override`, `models`, `langpack_root` переведены в `textmachine-main`; `mining.contrast_path` ОСТАВЛЕН в polygon-дереве (санкционированное исключение §1б). (B) `mined_delta:`/`mined_rejects:` СНЯТЫ — retired-ключи, иначе exit 10; потолки 0.10/0.10 → 0.80/1.00. (C) **единственная смысловая правка: `escalation.budget_usd: 0.015 → 0.08`**. (D) пар-слой `pairs/zh-ru.yaml` скопирован (без него exit 10, см. §7). (E) сид не подключён. **Цена копии, названная вслух ДО покупки:** черновая половина едет БАНКНОТНЫМ промптом `translator-banknote.md`, а не конвенционным боевым `translator.md`. Резолв по ролям: translator — через `prompt_override`; editor · terminologist · classifier — конвенцией. ⇒ **Конвенционный резолв промпта переводчика этим прогоном НЕ ПРОВЕРЕН.** ### 1.1 Две девиации — обе подписаны ОРКЕСТРАТОРОМ, не владельцем ⚠ Называю прямо, потому что это разные полномочия. 1. **`escalation.budget_usd` 0.015 → 0.08.** Довод: 0.015 — не значение конфига, а объявленная девиация самой bank-low под её книжный потолок $0.10 («суб-бюджет ПОНИЖЕН СОЗНАТЕЛЬНО … ⚠ Это делает наблюдение эскалаций НЕПОЛНЫМ»); прецедент полной цепи minirun держал 0.30 при потолке $1.00 (30%), мои 0.08 — 10%. Суб-бюджет есть ПОДМНОЖЕСТВО книжного потолка и вывести прогон за санкционированные $0.80 не может. ⚠ **И он был ПРОБИТ фактом: эскалации стоили $0.103305 против бюджета $0.08 — перелёт +29.1%.** Это документированный overshoot пре-хоп-гейта (`escalation.go`: read-then-act над `EscalationSpentUSD`), **впервые наблюдённый на настоящих деньгах**, и он — прямое следствие моей же правки. При 0.015 перелёт был бы тот же по механике, но 4 из 5 эхнутых чанков остались бы флагнутыми. 2. **Покупок фактически ТРИ (П1/П2/П3), а §1в говорит «двумя порциями».** `--max-units` в П2 и П3 одинаков (14), уже оплаченное не пере-оплачивается — по объёму порций по-прежнему две, стоп подписи это пауза внутри второй. Только так §5.4 закрывается ОБЕИМИ половинами. Подпись оркестратора №21 получена ДО покупки, дословно: «расхождением не считаю; свёртывать до двух вызовов не надо». ⚠ Обе развилки несены ПИНГОМ до денег. Артефакта подписи вне контекста сессии нет — при приёмке она восстанавливается только из журнала оркестратора. ## 2. Оси §5 — вердикты §7 (предъявлено / не предъявлено / опровергнуто) | Ось | Вердикт | Где | |---|---|---| | §5.1 сквозной путь семи глаголов | **предъявлено** | §3, `logs/` | | §5.1 шесть состояний честности D39.175 | **частично** | ВОЗНИКЛИ два: `pending` (11) и `drift`. `withheld`/`incomplete`/`ghost` = 0 — **НЕ возникли, остаются непроверенными**. `stale` — не «0», а **UNKNOWN**: под дрейфом счётчик не считает | | §5.1 честное `config_drift=false` | **предъявлено с оговоркой** | снято на свежей книге ДО первого платного вызова; на строках прогона вышло «да» — причина в §4.4 | | §5.1 структура глав (строка 160) | **предъявлено** | §5 | | §5.1 две ловушки `build` | **предъявлено** | §6 | | §5.1 издательский результат (epubcheck) | **предъявлено на НЕПОЛНОЙ книге** | §6 | | §5.1 живая читалка | **ось ОТКРЫТА** | файл передан владельцу | | §5.2 коды выхода | **предъявлено** | ШЕСТЬ кодов фактически: 0·1·2·3·10·16 (§3) | | §5.3 деньги, оба базлайна | **предъявлено; ДВА моих вывода СНЯТЫ мной же** | §4 | | §5.4 стоп подписи, обе половины D39.158 | **предъявлено** | §7 | | §5.5 каналы шва и словари | **предъявлено ЧАСТИЧНО — см. блокер §8** | §8 | | §5.6 $0-провокации | **4 из 6** | §10 | | §5.7 строки 154 / 157 | **154 закрыта числами; 157 частично — носителя нет** | §9 | ## 3. Коды выхода — фактические `$?` | Код | Где | Артефакт | |---|---|---| | **2** | **П1** `translate --max-units 3` — остановка по ОБЪЁМУ И один флагнутый чанк | `logs/16-exit-codes.log` | | **3** | П2 `translate --max-units 14 --verify-bank` — стоп подписи банка | `logs/16-exit-codes.log` | | **1** | П3 — снапшот-гард; и 5 раз на $0-отказах флагов | `logs/16-exit-codes.log`, `logs/15-flag-refusals.log` | | **2** | `status --json` на книге с флагами | `logs/16-exit-codes.log` | | **0** | `report` · `export` · `manifest` · `migrate` | `logs/16-exit-codes.log` | | **16** | `build` без `--partial` на книге с дырами | `logs/16-exit-codes.log` | | **10** | первый `manifest` без пар-слоя | ⚠ **артефакта нет** — держится прозой `PLAN-NOTE.md`, лог упавшего вызова не сохранён | | **0** | `build --partial` | ⚠ для форм, писавших рядом с БД, `$?` НЕ записан — 0 выведен из того, что напечатан `BuildReport` и файлы легли | ⚠ **УТОЧНЕНИЕ КОНТРАКТА, найденное собственной ошибкой.** Таблица §5.2 промта говорит `0 | чисто (в т.ч. остановка по --max-units — это ЗАВЕРШЕНИЕ)`. **Это верно только когда ничего не флагнуто.** П1 остановилась по объёму И имела флагнутый чанк ⇒ сработала ветка `errors.As(err, &flagged) → return 2` (`cmd/tmctl/main.go:133-134`), стоящая РАНЬШЕ «чисто». Объёмный стоп кода себе не присваивает вовсе — он едет на РЕЗУЛЬТАТЕ, а не на ошибке (`waverun.go:172`: «it must not reach the exit-code mapper at all»). ⇒ **Остановка по объёму по коду выхода НЕ ОПОЗНАЁТСЯ: она приходит и как 0, и как 2, и различает её только строка `VOLUME CEILING:` в выводе.** Для платформы это значимо. ⚠ Я сама сообщила оркестратору «П1 — exit 0», прочитав `[exited with code 0]` фоновой ОБЁРТКИ вместо строки `P1 EXIT=2`; поправка отправлена. ⛔ **Кода 4 (halt по денежному потолку) я НЕ ВИДЕЛА и не называю.** Коды 5·11·12·13·14·15·19 тоже. ⚠ О форме: `tmctl … --no-such-flag | head -2` под `pipefail` даёт `141` — это **wait-status самого `tmctl`, убитого SIGPIPE** (не код контракта и не код `head`), исход гоночный. Без пайпа — **1**. ## 4. Деньги — момент 10:29:19Z, прогон стоит ### 4.1 Сверка путей ⚠ **Поправка к моей же формулировке.** `spend` и `checkpoints` пишутся ОДНОЙ транзакцией из одного значения (`store/ledger.go:178` `SettleWithCheckpoint`), поэтому их равенство — **инвариант, а не проверка**. Настоящий третий, независимый писатель — `request_log` (вне settle-транзакции). Все три: ``` request_log SUM(cost_usd) = 0.436109664 spend.committed = 0.436109664 SUM(checkpoints) = 0.436109664 ``` Одна $0-команда `tmctl report` печатает две фигуры: `Book ledger: committed=$0.436110 reserved=$0.000000` и `ROUTING/MONEY: escalation hops=5 · spend by model: deepseek-v4-flash=$0.117940 · deepseek-v4-pro=$0.318169` (сумма 0.436109 — расхождение 1e-6 = округление до шести знаков). ### 4.2 Разложение | стадия / роль / модель | оплаченных чекпойнтов | всего чекпойнтов | $ | |---|---|---|---| | edit / editor / deepseek-v4-pro | 4 | 5 | **0.214865** | | draft / translator / pro (эскалации) | 5 | 7 | 0.103305 | | draft / translator / flash | 20 | 29 | 0.068135 | | terminology / terminologist / flash | 6 | 6 | 0.040617 | | terminology / classifier / flash | 3 | 3 | 0.009188 | ⚠ Колонки разные не по описке: `checkpoints` хранит и производные строки с нулевой ценой (`banknote_export`, `sanitized_export`). Всего 50, оплаченных 38. **По покупкам** (`created_at`): П1 $0.264362 · П2 $0.171747 · **П3 $0.00**. **Доля редактора — со знаменателем, потому что их два:** **49.3%** от всего прогона ($0.214865 из $0.436110) и **81.3%** внутри П1, куда целиком уместилась редакторская волна. Для сравнения: у minirun редактор — 80.6% его захода. ### 4.3 Оплаченный хвост — обе таблицы, финальные числа - по `checkpoints`: эскалации (`escalation=1`) — **5 хопов, $0.103305**; ретраи (`attempt>0`) — **ровно один, $0.070294**. Итого хвост по этой таблице **6 строк / $0.173599 = 39.8% захода**; - по `request_log`: `ok=0 AND cost_usd>0` — **11 строк, $0.123161 (28.2%)**. ⚠ Мой прежний «5 строк / $0.098761» — снимок 10:11Z, середина прогона; я держала его под шапкой «числа больше не двигаются». Снято. ⚠ И эти две величины НЕ обязаны совпадать: 5 успешных хопов pro и 11 оплаченных неудач — непересекающиеся множества; соседство двух «пятёрок» было случайным; - `estimated = 0` — **биллящихся decode-fail'ов не было ни одного**; - **крупнейшая единичная потеря прогона: ch2/chunk0 оплачен ДВАЖДЫ.** Попытка 0 — `finish=length`, 16 000 выходных токенов, **$0.072529 выброшено**; попытка 1 на удвоенном потолке — `finish=stop`, $0.070294. Один edit-юнит = **$0.142823 = 32.7% всего захода**; - ровно один полностью пустой оплаченный ответ: батч терминолога, `finish=length`, 0 знаков, **$0.012082**. ### 4.4 Оба базлайна (июль, пере-сняты read-only) | контур | bank-low | minirun | этот прогон | |---|---|---|---| | draft flash | $0.021289 / 23 | $0.018834 / 20 | $0.068135 / 20 | | draft pro (эскалации) | $0.010350 / 2 | $0.003371 / 1 | $0.103305 / 5 | | терминолог | $0.005750 / 5 | — | $0.040617 / 6 | | классификатор | $0.007706 / 16 | — | $0.009188 / 3 | | **edit editor pro** | — | **$0.092086 / 16** | **$0.214865 / 4** | | весь заход | $0.045095 | $0.114291 | $0.436110 (неполный) | Цены (`76049bb`, 15.08, вендорские с 16.08 16:00 UTC): flash `0.14→0.44` вход / `0.28→1.32` выход; pro `0.435→1.32` / `0.87→3.96` (×3.03 вход, ×4.55 выход). ### 4.5 ⛔ ДВА МОИХ ВЫВОДА, КОТОРЫЕ Я СНИМАЮ САМА **(а) «Редактор эмитит вдвое больше токенов, значит дело в неуправляемом размышлении» — СНЯТ.** Три конфаунда, и роли у них РАЗНЫЕ (прежняя формулировка «любой из которых его убивает» неверна): 1. *фантомная строка* — в `request_log` со `stage='edit'` пять строк, но пятая (id=68, `err='context canceled'`, все нули) — прерванная попытка П3, не вызов. Реальных вызовов **четыре**, средний выход **12 203**, отношение к июлю **2.59**, а не 2.07. ⚠ Это исправление работает В ПОЛЬЗУ наблюдения, а не против: оно убивает мою АРИФМЕТИКУ, а не сам факт роста; 2. *потолок вывода удвоился и БИЛ в обоих прогонах* — июль `max_tokens` 8000 (2 из 16 вернули `length` ровно на 8000), сегодня 16000 и 32000 на ретрае (1 из 4 упёрся). `models.yaml` несёт `min_max_tokens: 16000` с комментарием «8000 → 16000 ПО ЗАМЕРУ мини-прогона 25.07»; 3. *промпт редактора сменился при неизменной метке* — minirun гонялся 2026-07-25, `prompts/zh-ru/editor.md` правился 2026-08-01 (`e89874b`, одна строка про авторский рефрен), `prompt_version` в обоих — `v3-discourse-reflow`. 4. *⚠ ЧЕТВЁРТЫЙ, ДОБАВЛЕН 31.08 ПОСЛЕ СДАЧИ — и он самый действенный: рычаг у редактора БЫЛ, и не дёрнули его МЫ.* Мой `pipeline.yaml` объявил `stages[edit].reasoning: "off"`, а `backend/internal/llm/capability.go:52-53` говорит дословно: «ReasoningNone is the OpenAI-compat baseline: **low|medium|high go out as reasoning_effort; off and "" emit nothing**, leaving the provider's OWN default». ⇒ на провод для редактора НЕ УШЛО НИЧЕГО, и он поехал вендор-дефолтом. Там же, абзацем ниже, стоит ровно то различение, которое я схлопнула: «⚠ "Never turned off" is NOT "never configured" (D39.87)… riding the provider default is a choice whose owner is the vendor, not an absence of one». Черновик и терминолог свои `low` получили — редактор нет. **Вендор-факт, с датой и способом** (снято оркестратором №21 по заказу ВЛАДЕЛЬЦА, `curl` по `api-docs.deepseek.com/guides/thinking_mode` + Change Log, сверено 31.08.2026): таблица маппинга теперь несёт оговорку «identical for `deepseek-v4-flash` and `deepseek-v4-pro`», `low`→**low**; сноска «We will update the actual mapped effort of deepseek-v4-pro in early August 2026» СО СТРАНИЦЫ ИСЧЕЗЛА; запись Change Log **13.08.2026**: «The thinking modes of V4-Pro and V4-Flash now support three thinking effort levels: low / high / max». Наша последняя сверка была 10.08 — **носитель протух на 18 суток**, и вся моя рамка «у pro ручки нет» стояла на нём. ⚠ Безопасность: `low` ≠ `off`. Эхо-мина вооружается ВЫКЛЮЧЕНИЕМ thinking; три уровня эффорта едут с thinking ВКЛЮЧЁННЫМ, поэтому `low` у редактора мину не вооружает. ⚠ Честная граница этой строки: она **код-обоснована, а не снята с провода** — стадийный лог эффорт не печатает (его печатает только гейт терминолога: `reasoning=low`, дважды). Проводного подтверждения, что для редактора не ушло ничего, у этого прогона НЕТ. **Каузальную часть убивают только (2) и (3); (4) не объясняет рост токенов, но СНИМАЕТ вывод «рычага не существует» и делает статью в 49% захода управляемой одной строкой ДАННЫХ, без правки Go.** **(б) Разложение «×9.33 = ×4.55 × ×2.07» — СНЯТО целиком, и на исправленных числах тоже.** 4.55 × 2.59 = 11.78 ≠ 9.33. Форма неверна структурно: она применяет множитель ВЫХОДНОЙ статьи ко всей цене вызова, выбрасывая вход (цена входа ×3.03 при росте входных токенов лишь ×1.14) и кэш-хит. **Что остаётся ДОКАЗАННЫМ:** цена одного edit-вызова выросла **×9.33** (июль $0.005755 → сегодня $0.053716); выходных токенов на вызов стало **×2.59**; вендорская цена выхода pro выросла ×4.55. **Причина роста токенов НЕ УСТАНОВЛЕНА** — разделить её может только контролируемая проба, и её форма задана в §14. ⚠ Та форма, которую я предлагала изначально («один чанк, один потолок, оба промпта»), СПРОЕКТИРОВАНА НЕВЕРНО — см. §14. **И независимо от всей этой арифметики:** движок сам печатает **`projected_book_usd = 1.1377277707`** при `book_ceiling_usd = 0.8`. **(в) «Терминологический контур СТАБИЛЕН — двигались только цены» — СНЯТ.** Я процитировала строку П1, а не финал. Финал прогона: `consolidated=42 unanswered=16 reclassified=2 families=11`; bank-low: `consolidated=72 unanswered=18 reclassified=14`. Плюс сменилась версия контура (`terminology-v2-…` → `terminology-v3-…+families+formfold`) — сравнение конфаундировано. Держится ровно один факт: **пустой батч терминолога стоил ×4.40 при почти тех же токенах** — чистый ценовой множитель на одном вызове. **⚠ И СОБЫТИЕ, КОТОРОЕ Я ПРЕДСКАЗАЛА ДО ПОКУПКИ И ПОТОМ НЕ УВИДЕЛА В ЛОГАХ:** ``` WARN terminology classify: budget would be exceeded by the next batch; the remaining terms are left unchanged role=classifier spent_usd=0.009188 next_batch_usd=0.012500 budget_usd=0.02 batches_left=3 ``` **Классификатор ДВАЖДЫ остановлен собственным денежным суб-бюджетом $0.02; 3 батча из 4 не куплены, 16 термов остались неклассифицированными.** Суб-бюджеты bank-low были откалиброваны под ИЮЛЬСКИЕ цены, и `classify_budget_usd: 0.02` сегодня мал — ровно тот класс, который я разобрала для `escalation.budget_usd` и не довела до конца по остальным гейтам. ### 4.6 Цена мандата «двумя порциями» `rebill_units = 3`, **`rebill_usd = 0.214864848`** — цена согласия `--resnapshot`, и **одна покупка её бы не понесла**: снапшот edit-волны сдвинул выросший АВТО-БАНК, а вырос он потому, что вторая порция дочерновила остаток книги. Движок предупреждал WARN'ом ещё в П1 (живое основание `PD-422`): > `a VOLUME ceiling on a book that MINES its bank: … the next purchase moves the edit-wave snapshot … > Expect that run to need --resnapshot` ⚠ **Текст самого гарда ВВОДИТ В ЗАБЛУЖДЕНИЕ:** `… the config/prompts changed; already-paid checkpoints become invalid …`. Конфиг и промпты после первой покупки не тронуты ни байтом. Гард называет причиной то, чего не было. **Арифметика доведения до конца:** потрачено $0.436110 · `--resnapshot` пере-оплачивает $0.214865 · 11 неотредактированных юнитов по наблюдённой цене edit-юнита ($0.214865/3 = $0.0716) ≈ $0.79 ⇒ полный отток кассы **≈$1.44**. Движковая проекция $1.1377 меньше, потому что считает книгу целиком по средней цене юнита и НЕ включает пере-оплату уже сделанного. ## 5. Структура глав — строка бэклога 160 (В-4/Ф-30) **В исходнике 10 из 10 глав открыты структурным заголовком** (`第一节:纵身亡魔心仍不悔` … `第十节:天有不测风云,炼蛊别具艰辛`). **В манифесте `heading` у всех десяти — `Глава 1`…`Глава 10`, цифровой рендер движка.** Это намеренная политика пак-13, записанная в ДАННЫХ пары (`configs/langpacks/zh-ru/heading.txt`: `marker 第` · `units 章节節回` · `template Глава {n}`): маркер+номер+единица вырезаются из того, что видит модель, номер рендерится детерминированно, подзаголовок остаётся телом и переводится. Дословно из кода: *«The model is not trusted with a chapter title (it rendered «Раздел 2», «Первая глава», an orphaned « :» and dropped titles across models)»*. Движок сам предупреждает потребителя (`manifest.go`): *«It is NOT a label carried by the book's own data, and a consumer must not present it as one»*. **Дословные метки собранной книги.** txt — голая строка `Глава 1` … `Глава 10`; EPUB — `

Глава N

` в каждом из 10 документов и `Глава N` в nav; титул книги — `蛊真人` (китайский, из `title:` брифа, не переводится). ⚠ **Дефект, который эта политика делает видимым, и он на ПЕРВОЙ странице.** Подзаголовок главы 1 пришёл к читателю как **`,.`**. Причинная цепь снята целиком: черновик (flash) **эхнул** весь чанк китайским → эскалация на pro дала русский → **редактор** вернул подзаголовок китайским пересказом `即便身亡,魔心依旧不悔。` → **санитайзер** вырезал CJK-утечку (`detail: CJK leak in the ru output: 即便身亡; CJK leak in the ru output: 魔心依旧不悔`), оставив пунктуацию. Юнит честно помечен `sanitizer_stripped`. **Знаменатель — ДВА, не десять: из двух глав, дошедших до редактора, у одной подзаголовок выжил** («Глава 2 / Прозрение пятисот лет против течения времени»), у другой выродился. Остальные восемь — дыры. ## 6. Две ловушки `build` 1. **Одна команда пишет ОБА формата.** `build --partial` без `--format` → на диске `.book.epub` (17 946 Б) и `.book.txt` (40 068 Б). 2. **`--format epub` МОЛЧА УДАЛЯЕТ соседний `.txt`** — exit 0, ни одного предупреждения, файл исчез (`logs/12-build-epub-only.log` + листинг каталога). Код: `bookbuild.go` — незапрошенный формат удаляется, когда `--out` пуст. 3. **`StatusArtifacts.book_files` — карта МЕСТ, а не присутствия:** она перечисляет все форматы всегда. После удаления `.txt` `status --json` продолжал публиковать его путь. ⇒ **наличие пути в `book_files` не доказывает наличия файла.** 4. Отказ `build` без `--partial` — **exit 16**, на диск не записано НИЧЕГО, перечислены все 11 дыр. 5. Ловушка «exit 1 при уже лежащих файлах» (сбой `os.Remove`) НЕ сработала — **не проверена**. **Валидатор.** epubcheck 5.1.0, правила EPUB 3.3: **0 fatals / 0 errors / 0 warnings / 0 infos**, вывод сохранён (`logs/14-epubcheck.log`). ⚠ Проверен **ОДИН EPUB в двух побайтно идентичных копиях** (`artifacts/partial/…` и копия рядом с БД); `.txt` валидатором не проверялся и не мог. ⚠ Это `--partial`-EPUB с 11 дырами — на ПОЛНОЙ книге ось не проверена, потому что полной книги нет. **Русские слова читателя (второй шаг оси §1б) — дословно из файла:** `⚠ Перевод не завершён: фрагментов с пропусками — 11 из 14. Каждый пропуск отмечен в тексте знаком ⚠.` и `⚠ Этот фрагмент ещё не переведён.` Оба из `configs/langpacks/ru/reader.txt`, который есть ТОЛЬКО в `textmachine-main`; при `langpack_root` в polygon-дерево `LoadReaderWords` вернул бы дефолты БЕЗ ошибки. Ловушка реальна, обойдена, предъявлена положительно. ## 7. Банк и стоп подписи — D39.158 закрыта ЦЕЛИКОМ **Первая половина (П2, exit 3):** `bank-mining: the delta holds terms no stop has shown before; run STOPPED before the edit wave (…)`. `bank_stop_presented` = **70 строк**. **Вторая половина (П3, тот же вызов, без единого решения по термам):** стоп-строк **ноль**, таблица по-прежнему 70 строк, и движок сказал вслух: `bank-mining: --verify-bank is raised and the delta is non-empty, but every cluster in it was already presented by an earlier stop — continuing`. **Форматы, впервые на живых данных:** `mined-signature.yaml` — `map_version: tm-signature-map-v1`, `map_id: c52c36ea035a809c…` · `bank.json` — `bank_version: tm-bank-v1`, `signed: 0`, `run_id`, и якорь свежести **`as_of`, называющий ГРАНИЦУ**: на стопе `"bank-mining/signature-stop"`, после П3 `"bank-mining/auto-continue"` — проекция действительно пересобирается на каждой границе · `bank-stop.txt` 673 строки · **`bank-stop.json` НЕ СУЩЕСТВУЕТ** (снос D39.158 подтверждён на диске). **Строка бэклога 240** (PLAUSIBLE, заведена чтением кода). **Две дешёвые улики ПРОТИВ:** (1) у таблицы `bank_stop_presented` во всём движке РОВНО три места — `CREATE`, `SELECT`, `INSERT OR IGNORE`; **`DELETE`/`DROP`/`TRUNCATE` нет нигде**; (2) память пережила границу процесса живьём. ⚠ Границы улики: это про ДВИЖОК; платформенную половину берёт P12; и остаётся операторский путь — восстановление БД из `backups/*.db` откатило бы таблицу. ## 8. Что оставлено платформе **Файлы, созданные прогоном** (`logs/artifacts-01.log`): `.bank.json` 15 340 Б · `.manifest.json` 5 017 Б · `.mined-signature.yaml` 34 684 Б · `.auto-bank.yaml` 34 578 Б · `.bank-stop.txt` 45 586 Б · **`events.jsonl` 10 614 Б**. ⚠ Каналов ШВА из них — не все: `mined-signature.yaml`, `auto-bank.yaml` и `bank-stop.txt` читателя в платформе не имеют, это операторские/движковые файлы. **`events.jsonl` — 82 кадра, 6 типов:** `spend` 38 · `progress` 20 · `unit_done` 17 · `hello` 3 · `finished` 3 · `bank_stop` 1. Все шесть внутри 7-типного словаря платформы; седьмой (`ceiling`) не сработал, потому что потолок не срабатывал. `seq` рестартует с 1 на процесс, `stream_version: "1.1"` совпадает с движковой константой. Закрытые словари значений тоже сошлись: `finished.outcome ∈ {flagged, bank_stop, failed}`, `unit_done.wave ∈ {draft, edit}`. **Строка бэклога 198 — впервые на данных.** **17 анонсов юнитов, 17 УНИКАЛЬНЫХ, повторов НОЛЬ** через ТРИ процесса; ключ дословно `unit:guzhenren-coldrun-v16:draft:10:0` — метки нарезки в нём нет. Механизм виден в БД: `events_outbox` держит 17 строк с `once_key` под UNIQUE-индексом (они переживают прогон — это леджер эмиссии) плюс 3 буферных кадра последнего процесса. ⚠ Мой `capture-artifacts.sh` считает этот пункт НЕВЕРНО (читает `payload` вместо `data`) — правильный счёт снят отдельной командой; скрипт в каталоге прогона оставлен как есть с этой пометкой. ⚠ Сила улики: П3 резолвил юниты бесплатно и не выдал ни одного `unit_done`; «подавлено `once_key`» от «нечего было анонсировать» этот прогон не различает. ### ⛔ БЛОКЕР МОЕГО ЖЕ ОТЧЁТА: «сверка причин флагов» сделана на ОДНОМ значении Я написала «наблюдённые `flag_reason` — три, все в словаре платформы, расхождений ноль». **На шов вышло РОВНО ОДНО:** `sanitizer_stripped` (в `export --json` — 1 из 14 чанков; в `events.jsonl` `unit_done.reason` — 1 из 17). `cjk_artifact` (5) и `length` (1) остались в приватной колонке `chunk_status.first_flag_reason`, **которой платформа по D39.85 не видит вовсе**. ⇒ Честный вердикт: **живая сверка канала причин флагов сделана на ОДНОМ значении из пятнадцати**; остальные четырнадцать по-прежнему сверены только чтением кода. `sanitizer_stripped` → `markup_cleaned`/`glance` в `platform/internal/ingest/notes.go` — расхождения нет. **Банк:** отдал `status ∈ {draft, auto}`, `origin: mined`, `kind ∈ {term, title, name, place, nickname}` — все внутри закрытых словарей `platform/internal/ingest/bank.go`, расхождений нет. **Манифест против `platform/internal/ingest/manifest.go` я НЕ сверяла** — вердикт §5.5 понижаю: сверены ДВА словаря из трёх названных. **`export --json --pairs` против голого `export`:** `export_version = tm-export-v1`; различаются РОВНО одним ключом на чанке — `source`. **PD-297:** БД `/home/ubuntu/books/gu-zhenren/coldrun-v16/guzhenren-coldrun-v16.db`, 684 032 Б, схема **v16**, 10 глав · 23 строки `chunk_status` · 50 чекпойнтов · 53 терма глоссария · 20 строк аутбокса. ## 9. Что закрылось даром (§5.7) **Строка 154 — ЗАКРЫТА числами.** Финал прогона: `terminology finished … consolidated=42 declined=0 unanswered=16 reclassified=2 bad_lines=0 off_language=0 canon_conflicts=0 self_conflicts=0 families=11 families_refused=0 families_held=0`. ⚠ Есть ВТОРАЯ строка про семейства с ДРУГИМИ именами полей (`refused_by_cap`/`held_by_series`) — греп по `families_refused` её не найдёт; здесь не печаталась. **Строка 157 — ЧАСТИЧНО, и вот граница.** `units_total = 14`, `chunks_total = 20`, `chapters_total = 10`; юнитов по главам `2·1·1·2·1·1·1·2·2·1`; чанков на главу ровно 2 у всех десяти; чанков в юните min 1 / медиана 1 / max 2. **Распределения размеров юнитов В ЗНАКАХ манифест не публикует вовсе** — ни `--json`, ни персист-сайдкар символьных размеров не несут. Косвенная мера — входные токены черновых вызовов (1 557–1 863 на чанк). **Заказ в этой части выполнить нечем: носителя нет.** ## 10. $0-провокации §5.6 - **1. `stale` — НЕДОСТИЖИМА, и это доказано КОДОМ, а не выведено из промта.** `bookbuild.go:217-220`: `func (r *Runner) staleUnits(...)` начинается с `if exp.ConfigDrift { return nil, true }` — под дрейфом ответ UNKNOWN возвращается немедленно, ничего не считая. Комментарий там же: «under drift the answer is UNKNOWN, reported as such… It never fails the build: a check that cannot run says so in the report and the log». `build` это и напечатал: `stale: UNKNOWN for some or all units`. **Дрейф родился не из моей правки, а из самого мандата §1в покупать двумя порциями на майнящей банк книге** — два требования пака пересеклись. Решением владельца платная часть закрыта, `--resnapshot` (единственный путь снять дрейф) не нажимается ⇒ **ось закрыта окончательно. Это «недостижимо», а не «не проверено».** - **2. Строка 238 — НЕ запускалась, и запускать её теперь бессмысленно.** Её предъявление есть РАСХОЖДЕНИЕ двух $0-поверхностей: `status --json` говорит «пере-оплаты нет», а `build` — `stale N`. Под дрейфом `build` печатает не `stale N`, а `UNKNOWN` (см. выше) ⇒ заявленное расхождение предъявить нечем, а правка исходника при этом необратимо испортила бы улику прогона (`source_sha256` манифеста). **Сознательно не запускала.** ⚠ Но INFO-строка, которая её выдаёт, наблюдена побочно в пробе 6: `manifest: the stored manifest is stale (source or cut changed)`. - **3. `--partial` / дыры** — **предъявлено** (§6). - **4. Второй `--verify-bank`** — **предъявлено** (§7). - **5. Второй `translate`, повторные анонсы** — **предъявлено**: повторов ноль (§8). - **6. Строка 239** — **ВОСПРОИЗВЕДЕНА ДОСЛОВНО.** Один конфиг, одна БД: `status --json` → `config_drift = False`, `pending = 0`, `percent_done = 85`, `progress: draft 20/20, edit 0/0`; `export --json` на ТОМ ЖЕ конфиге → `config_drift = True` + WARN *«stored rows carry a stage the current config does not run … the shipping rows are not the ones the run shipped»*. **Две $0-поверхности, один конфиг, противоположные ответы.** ⚠ Побочно: `units_total` становится **20** вместо 14 — форма пайплайна меняет гранулярность, в которой платформа продаёт главы. **Сверх заказа, $0:** контракт `migrate` для СУЩЕСТВУЮЩЕЙ книги снят на МОЕЙ КОПИИ чужого стенда вне `books/` (§6.2 промта): `pre-migrate: backed up the project DB at schema v14 to …/backups/ 20260831T103333Z-pre-migrate.db (integrity_check green)` + `migrate: … schema v14 -> v16`, каталог `backups/` появился. На своей свежей книге — `migrate: created … at schema v16`, `backups/` НЕ появился. ## 11. Obstacles — что НЕ удалось и НЕ проверено 1. **Книга не доведена до `complete=true`** — остановлена снапшот-гардом; доведение ≈$1.44 против $0.80. 2. **Exit 4 не наблюдался** — до денежного потолка прогон не дошёл. 3. **`withheld`, `incomplete`, `ghost` не возникли** — три состояния честности НЕПРОВЕРЕНЫ. 4. **`stale` недостижим** под дрейфом. 5. **Причина роста выходных токенов редактора НЕ УСТАНОВЛЕНА** — нужна контролируемая проба. 6. **Конвенционный резолв промпта переводчика не проверен.** 7. **Размеры юнитов в знаках** не предъявлены — носителя нет. 8. **Живой читалки нет** — файл передан владельцу, ось открыта. 9. **Ловушка `build` с падением `os.Remove`** не сработала. 10. **Корпусные тесты батареи не гонялись** (3 скипа названы); `EXIT=0` батареи в артефакт не снят. 11. **epubcheck проверил НЕПОЛНУЮ книгу**, и один EPUB, а не два разных файла. 12. **Сверка причин флагов — на ОДНОМ значении из пятнадцати** (§8). 13. **Манифест против `ingest/manifest.go` не сверялся.** 14. **Классификатор оборвался на своём суб-бюджете** — 16 термов не классифицированы (§4.5). 15. **Коды 10 и `build --partial` 0** артефакта на диске не имеют. ## 12. Пинги 1. **Текст снапшот-гарда врёт о причине** («the config/prompts changed» при нетронутом конфиге). 2. **`prompt_version` не отслеживает байты промпта** — `editor.md` правился при неизменной метке. Деньги защищены (`PromptSHA256` фолдится в снапшот), СРАВНИМОСТЬ прогонов по метке — нет. 3. **`regenerate_echo_before_escalate` — отдельный ключ с дефолтом 0**, в bank-low его нет ⇒ эхо шло СРАЗУ в эскалацию: 5 эхо → 5 хопов pro, $0.103305 = 23.7% захода. Ре-ген на flash по квиркам ≈7.6× дешевле. Не дефект — неиспользованная ручка. 4. **Суб-бюджеты гейтов bank-low откалиброваны под ИЮЛЬСКИЕ цены.** Я разобрала это для `escalation.budget_usd` и НЕ довела до `classify_budget_usd: 0.02`, который в итоге оборвал классификатор (§4.5). 5. ⚠ **`deepseek-v4-pro` ПРИНИМАЕТ `reasoning_effort` с 13.08.2026** (вендор-дока + Change Log, сверено 31.08 оркестратором №21 по заказу владельца; наш носитель `00-provider-quirks.md` стоял на сверке 10.08 и протух на 18 суток). Редактор в этом прогоне ехал вендор-дефолтом `high` **потому, что конфиг послал `"off"`, а `ReasoningNone` на `off` не шлёт ничего** — это НАШ выбор, а не ограничение провайдера. Рычаг на статью в 49% захода = одна строка данных, правки Go не требует. ⚠ Я НЕ правлю `pipeline.yaml` задним числом: это конфиг, которым куплен прогон, и его изменение фальсифицировало бы улику. Его шапка несёт теперь опровергнутую фразу «у pro ручки эффорта нет вовсе» — читать её надо вместе с этим пунктом. 6. **Промт §1а не называет `pairs/<пара>.yaml`** — без него exit 10. 7. **Промт §5.7 заказывает размеры юнитов в знаках, а манифест их не публикует.** 8. **Кто коммитит репозиторий книг?** Роли в `CLAUDE.md` нет. Не коммитила и не прибирала. Дословно: `git -C /home/ubuntu/books status --porcelain` → `?? gu-zhenren/coldrun-v16/`; ветка `## main...origin/main [ahead 5]`. Репозиторий кода ЧИСТ, HEAD `065d8ac`. Чужие БД читались только `sqlite3 'file:…?mode=ro'` — ни одной строки ` D` не появилось. ## 13. Адверсариальный проход (§6.5) **Модель:** во всех веерах — модель сессии по умолчанию (Opus 5; `claude-fable-5` на этом аккаунте недоступен — см. записку `textmachine-36` в канале). **Три веера, 23 агента суммарно.** **Веер 1 — разведка ДО покупки (16 агентов):** 8 читателей кода/корпуса + 8 адверсариальных проверяющих их отчётов. Вход: код HEAD, конфиги, БД корпуса read-only. Нашли дрейф якорей `file:line` в отчётах читателей (существо подтверждалось, номера строк уезжали) — на план прогона не влияло. **Веер 2 — интервальная сверка с заказом (§6.8, 2 агента).** Вход: промт, `PLAN-NOTE.md`, `STATE-AT-BLOCK.md`, логи. Критерии §7 заданы дословно. Находки и диспозиции: | находка | диспозиция | |---|---| | колонка «вызовов» смешивает оплаченные и все чекпойнты | **принято**, колонки разведены (§4.2) | | подзаголовок ch1 подан как 1/10, а знаменатель 2 | **принято** (§5) | | ловушка `build` №1 не проверена — гонялись два `--format` вместо одной команды | **принято, проба проведена** (§6) | | вывод epubcheck не сохранён | **принято**, `logs/14-epubcheck.log` | | файл владельцу не передан, ось не названа открытой | **принято**, передан | | код 10 пропущен в ростере | **принято** (§3) | | $0-отказы флагов без артефакта | **принято**, `logs/15-flag-refusals.log` | | `stale` — UNKNOWN, а не 0 | **принято** (§2, §10) | **Веер 3 — адверсариальный проход по ГОТОВОМУ отчёту (5 линз: деньги · коды выхода · EPUB и книга · платформа и шов · заказ и умолчания).** Вход каждой: `REPORT-DRAFT.md`, промт, каталог прогона, бинарь. Мандат дословно: «найди, где она выдаёт непроверенное за проверенное». **45 находок, из них 4 блокера.** Все блокеры и все «важные» приняты и исправлены: | находка (дословно из линзы) | диспозиция | |---|---| | **БЛОКЕР** «Терминологический контур СТАБИЛЕН — двигались только цены» — REFUTED: процитирована строка П1, а не финал; версия контура v2→v3 | **ПРИНЯТО, клейм снят** (§4.5в) | | **БЛОКЕР** оплаченный хвост `ok=0` — 11 строк / $0.123161, а не 5 / $0.098761 (мид-ран снимок под шапкой «числа не двигаются») | **ПРИНЯТО, число заменено** (§4.3) | | **БЛОКЕР** «сверка причин флагов, расхождений ноль» — на шов вышло ОДНО значение из трёх; `cjk_artifact`/`length` платформе не видны | **ПРИНЯТО, вердикт понижен** (§8) | | **БЛОКЕР** секции §6.5 в отчёте нет вовсе | **ПРИНЯТО — это она** | | «Два независимых пути СОШЛИСЬ» — `spend` и `checkpoints` пишутся ОДНОЙ транзакцией, равенство есть инвариант | **ПРИНЯТО**, независимым назван `request_log` (§4.1) | | ретраи названы и брошены без числа; ch2/chunk0 оплачен дважды на $0.142823 = 32.7% | **ПРИНЯТО** (§4.3) | | «редактор — 81%» без знаменателя (49.3% от прогона) | **ПРИНЯТО** (§4.2) | | «три конфаунда, любой убивает» — №1 работает В ПОЛЬЗУ наблюдения | **ПРИНЯТО** (§4.5а) | | разложение ×9.33 не закрывается и на исправленных числах | **ПРИНЯТО, снято целиком** (§4.5б) | | пропущено событие: классификатор оборван суб-бюджетом, `batches_left=3` | **ПРИНЯТО** (§4.5) | | суб-бюджет $0.08 ПРОБИТ фактом до $0.103305 (+29%) | **ПРИНЯТО** (§1.1) | | «19 пакетов ok» — на деле 18 ok + 4 без тестов | **ПРИНЯТО** (§1) | | «открывается и проходит валидатор» — открытие не проверено | **ПРИНЯТО** (§0) | | «оба файла» у epubcheck читается как epub+txt | **ПРИНЯТО** (§6) | | «в ту же секунду» у `book_files` — одномоментного снимка не было | **ПРИНЯТО**, переформулировано как «карта мест» (§6) | | `141` объяснён как SIGPIPE от `head` — на деле wait-status самого `tmctl`, гоночный | **ПРИНЯТО** (§3) | | «коды лежат артефактом» — два кода артефакта не имеют | **ПРИНЯТО** (§3) | | «ДОСЛОВНО» в §1 при выжимке | **ПРИНЯТО**, слово снято | | три покупки — девиация, подписана оркестратором, НЕ владельцем | **ПРИНЯТО** (§1.1) | | манифест против `ingest/manifest.go` не сверялся | **ПРИНЯТО**, вердикт понижен (§8) | | баг счёта строки 198 в `capture-artifacts.sh` | **ПРИНЯТО**, назван вслух (§8) | | §5.5: три файла из перечисленных каналами шва не являются | **ПРИНЯТО** (§8) | **Отклонено с доводом — одна находка:** линза предлагала снять улику про молчаливое удаление `.txt` как «не снятую отдельной командой». Отклоняю: удаление наблюдено прямым листингом каталога до и после (`logs/11-build-both.log` → оба файла; `logs/12-build-epub-only.log` → остался один), это исполнение, а не вывод из кода. **Чего адверсариальный проход НЕ покрыл:** качество перевода (не мой предмет), поведение платформы (чужая зона), и любые клеймы о рантайме, которых в отчёте нет. ## 14. Последний абзац — не план, а состояние Прогон стоит на развилке владельца. Всё, что можно было сделать за $0, сделано и лежит в каталоге: книга обоих форматов, валидированный EPUB, пять артефактов шва, `events.jsonl`, три среза леджера, логи всех вызовов, коды выхода артефактом. Ничего не закоммичено ни в один из двух репозиториев. Правку исходника (§5.6 пробы 1–2) я не трогала намеренно: она закрывает платную часть НАВСЕГДА, а решение владельца ещё может её открыть. ## 14. Форма следующего замера — ПЕРЕ-СПРОЕКТИРОВАНА ⚠ **Моя первоначальная рекомендация («один и тот же чанк, один потолок, оба промпта») НЕВЕРНА, и я её снимаю.** Опровержение принесла ресёрч-сессия (exp19), и оно бьёт ровно в мою слепую зону. **Что намерено там и чего в моих трёх осях НЕ БЫЛО:** - размышление — **95–96% цены дифф-вызова**, то есть предмет замера это оно, а не «цена вызова»; - оно растёт **с ОБЪЁМОМ ВХОДА** (×2.78 при ×3.24, p=0.0003) — **этой оси в моей пробе не было вовсе**, и она свалилась бы в остаток, который я бы приписала промпту или эффорту; - оно растёт **с количеством найденной работы** (rho +0.781) — то есть от ТРУДНОСТИ чанка, а трудность у меня не блокировалась; - **сужением мандата НЕ снимается** (MW p=0.752) — правка промпта в сторону «меньше делай» не рычаг; - бюджет размышления **не адаптируется к трудности инстанса**, а обязательное размышление на лёгких сегментах — чистый убыток (311 токенов против 13, −3.31 качества). **Отсюда четыре оси, и роли у них РАЗНЫЕ — это главное:** | ось | роль | как | |---|---|---| | **трудность чанка** | **БЛОКИРОВАТЬ** | парный дизайн: КАЖДАЯ рука видит одни и те же чанки. Не рандомизация — блокировка, иначе rho +0.781 съест эффект | | **длина входа** | **КОНТРОЛИРОВАТЬ и МЕРИТЬ** | страты по длине входа; длина входит в модель как ковариата, а не выбрасывается. Иначе её ×2.78 осядет в остатке | | **промпт** | фактор | июльский `editor.md` (`e89874b^`) против сегодняшнего — оба под ОДНОЙ меткой `v3-discourse-reflow`, поэтому брать по SHA, не по метке | | **эффорт** | фактор | `"off"` (= вендор-дефолт `high`, как ехал этот прогон) против явного `"low"` — и это ДАННЫЕ, правки Go не требуется | **Ещё три требования, каждое куплено ошибкой этого прогона:** 1. **Потолок вывода зафиксировать одинаковым во всех руках.** В моём сравнении он различался (8000 против 16000) и БИЛ в обоих прогонах — один этот конфаунд убил каузальный вывод. 2. **Мерить цену за ДОСТАВЛЕННЫЙ ЗНАК, а не за вызов.** Цена вызова смешивает «дороже думает» и «больше отдаёт»; у меня на 4 вызовах вышел спред ×7.6 по юнитам ($0.0187 · $0.0534 · $0.1428). 3. **n считать от разброса, а не от удобства.** Квирки пинят разброс размышления **×163 на побайтно одном входе**; n=3–4, на которых стояли и мой вывод, и отозванное звено D39.86 §3б, для этого распределения непригодны по построению. ⚠ **И оговорка, которую замер обязан нести:** `low` ≠ `off`. Эхо-мина вооружается ВЫКЛЮЧЕНИЕМ thinking; три уровня эффорта едут с thinking включённым, поэтому арм `low` мину не вооружает. Но эхо-ГЕЙТ обязан остаться включённым во всех руках — он последняя линия против тихого провала. **Чего замер НЕ должен делать:** калибровать ставку платформы. Она гейчена строкой 202 и требует ЗАВЕРШЁННОЙ цепи; эта проба отвечает на вопрос «почему дорого», а не «сколько продавать».