Land the cold-run report the owner closed: what the first paid pass proved, what it retracted, and the four axes the next probe needs

This commit is contained in:
heaven 2026-08-31 21:21:48 +03:00
parent bb541a8293
commit 244f808e7b
2 changed files with 644 additions and 1 deletions

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,643 @@
# ОТЧЁТ: холодный прогон движка на схеме 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 0104 и 0610 у 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 —
`<h1>Глава N</h1>` в каждом из 10 документов и `<a href="chN.xhtml">Глава N</a>` в 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`): `<db>.bank.json` 15 340 Б ·
`<db>.manifest.json` 5 017 Б · `<db>.mined-signature.yaml` 34 684 Б · `<db>.auto-bank.yaml` 34 578 Б ·
`<db>.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 5571 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 пробы 12) я не трогала намеренно: она закрывает платную часть НАВСЕГДА, а
решение владельца ещё может её открыть.
## 14. Форма следующего замера — ПЕРЕ-СПРОЕКТИРОВАНА
⚠ **Моя первоначальная рекомендация («один и тот же чанк, один потолок, оба промпта») НЕВЕРНА, и я
её снимаю.** Опровержение принесла ресёрч-сессия (exp19), и оно бьёт ровно в мою слепую зону.
**Что намерено там и чего в моих трёх осях НЕ БЫЛО:**
- размышление — **9596% цены дифф-вызова**, то есть предмет замера это оно, а не «цена вызова»;
- оно растёт **с ОБЪЁМОМ ВХОДА** (×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=34, на которых стояли и мой вывод, и отозванное звено D39.86 §3б, для этого
распределения непригодны по построению.
**И оговорка, которую замер обязан нести:** `low``off`. Эхо-мина вооружается ВЫКЛЮЧЕНИЕМ
thinking; три уровня эффорта едут с thinking включённым, поэтому арм `low` мину не вооружает. Но
эхо-ГЕЙТ обязан остаться включённым во всех руках — он последняя линия против тихого провала.
**Чего замер НЕ должен делать:** калибровать ставку платформы. Она гейчена строкой 202 и требует
ЗАВЕРШЁННОЙ цепи; эта проба отвечает на вопрос «почему дорого», а не «сколько продавать».