66 KiB
ОТЧЁТ: холодный прогон движка на схеме 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) ·buildexit 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бинарём sha256e6f872df5b9c031f558ca2cc8a900b3822d2fc38d208453269ebd6dc3f78f9d1; после сдачи лёг пак «деньги и честность» (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 Две девиации — обе подписаны ОРКЕСТРАТОРОМ, не владельцем
⚠ Называю прямо, потому что это разные полномочия.
escalation.budget_usd0.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 эхнутых чанков остались бы флагнутыми.- Покупок фактически ТРИ (П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 ⛔ ДВА МОИХ ВЫВОДА, КОТОРЫЕ Я СНИМАЮ САМА
(а) «Редактор эмитит вдвое больше токенов, значит дело в неуправляемом размышлении» — СНЯТ. Три конфаунда, и роли у них РАЗНЫЕ (прежняя формулировка «любой из которых его убивает» неверна):
-
фантомная строка — в
request_logсоstage='edit'пять строк, но пятая (id=68,err='context canceled', все нули) — прерванная попытка П3, не вызов. Реальных вызовов четыре, средний выход 12 203, отношение к июлю 2.59, а не 2.07. ⚠ Это исправление работает В ПОЛЬЗУ наблюдения, а не против: оно убивает мою АРИФМЕТИКУ, а не сам факт роста; -
потолок вывода удвоился и БИЛ в обоих прогонах — июль
max_tokens8000 (2 из 16 вернулиlengthровно на 8000), сегодня 16000 и 32000 на ретрае (1 из 4 упёрся).models.yamlнесётmin_max_tokens: 16000с комментарием «8000 → 16000 ПО ЗАМЕРУ мини-прогона 25.07»; -
промпт редактора сменился при неизменной метке — minirun гонялся 2026-07-25,
prompts/zh-ru/editor.mdправился 2026-08-01 (e89874b, одна строка про авторский рефрен),prompt_versionв обоих —v3-discourse-reflow. -
⚠ ЧЕТВЁРТЫЙ, ДОБАВЛЕН 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 fordeepseek-v4-flashanddeepseek-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
- Одна команда пишет ОБА формата.
build --partialбез--format→ на диске.book.epub(17 946 Б) и.book.txt(40 068 Б). --format epubМОЛЧА УДАЛЯЕТ соседний.txt— exit 0, ни одного предупреждения, файл исчез (logs/12-build-epub-only.log+ листинг каталога). Код:bookbuild.go— незапрошенный формат удаляется, когда--outпуст.StatusArtifacts.book_files— карта МЕСТ, а не присутствия: она перечисляет все форматы всегда. После удаления.txtstatus --jsonпродолжал публиковать его путь. ⇒ наличие пути вbook_filesне доказывает наличия файла.- Отказ
buildбез--partial— exit 16, на диск не записано НИЧЕГО, перечислены все 11 дыр. - Ловушка «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 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 — что НЕ удалось и НЕ проверено
- Книга не доведена до
complete=true— остановлена снапшот-гардом; доведение ≈$1.44 против $0.80. - Exit 4 не наблюдался — до денежного потолка прогон не дошёл.
withheld,incomplete,ghostне возникли — три состояния честности НЕПРОВЕРЕНЫ.staleнедостижим под дрейфом.- Причина роста выходных токенов редактора НЕ УСТАНОВЛЕНА — нужна контролируемая проба.
- Конвенционный резолв промпта переводчика не проверен.
- Размеры юнитов в знаках не предъявлены — носителя нет.
- Живой читалки нет — файл передан владельцу, ось открыта.
- Ловушка
buildс падениемos.Removeне сработала. - Корпусные тесты батареи не гонялись (3 скипа названы);
EXIT=0батареи в артефакт не снят. - epubcheck проверил НЕПОЛНУЮ книгу, и один EPUB, а не два разных файла.
- Сверка причин флагов — на ОДНОМ значении из пятнадцати (§8).
- Манифест против
ingest/manifest.goне сверялся. - Классификатор оборвался на своём суб-бюджете — 16 термов не классифицированы (§4.5).
- Коды 10 и
build --partial0 артефакта на диске не имеют.
12. Пинги
- Текст снапшот-гарда врёт о причине («the config/prompts changed» при нетронутом конфиге).
prompt_versionне отслеживает байты промпта —editor.mdправился при неизменной метке. Деньги защищены (PromptSHA256фолдится в снапшот), СРАВНИМОСТЬ прогонов по метке — нет.regenerate_echo_before_escalate— отдельный ключ с дефолтом 0, в bank-low его нет ⇒ эхо шло СРАЗУ в эскалацию: 5 эхо → 5 хопов pro, $0.103305 = 23.7% захода. Ре-ген на flash по квиркам ≈7.6× дешевле. Не дефект — неиспользованная ручка.- Суб-бюджеты гейтов bank-low откалиброваны под ИЮЛЬСКИЕ цены. Я разобрала это для
escalation.budget_usdи НЕ довела доclassify_budget_usd: 0.02, который в итоге оборвал классификатор (§4.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 ручки эффорта нет вовсе» — читать её надо вместе с этим пунктом. - Промт §1а не называет
pairs/<пара>.yaml— без него exit 10. - Промт §5.7 заказывает размеры юнитов в знаках, а манифест их не публикует.
- Кто коммитит репозиторий книг? Роли в
CLAUDE.mdнет. Не коммитила и не прибирала. Дословно:git -C /home/ubuntu/books status --porcelain→?? gu-zhenren/coldrun-v16/; ветка## main...origin/main [ahead 5]. Репозиторий кода ЧИСТ, HEAD065d8ac. Чужие БД читались только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 не требуется |
Ещё три требования, каждое куплено ошибкой этого прогона:
- Потолок вывода зафиксировать одинаковым во всех руках. В моём сравнении он различался (8000 против 16000) и БИЛ в обоих прогонах — один этот конфаунд убил каузальный вывод.
- Мерить цену за ДОСТАВЛЕННЫЙ ЗНАК, а не за вызов. Цена вызова смешивает «дороже думает» и «больше отдаёт»; у меня на 4 вызовах вышел спред ×7.6 по юнитам ($0.0187 · $0.0534 · $0.1428).
- n считать от разброса, а не от удобства. Квирки пинят разброс размышления ×163 на побайтно одном входе; n=3–4, на которых стояли и мой вывод, и отозванное звено D39.86 §3б, для этого распределения непригодны по построению.
⚠ И оговорка, которую замер обязан нести: low ≠ off. Эхо-мина вооружается ВЫКЛЮЧЕНИЕМ
thinking; три уровня эффорта едут с thinking включённым, поэтому арм low мину не вооружает. Но
эхо-ГЕЙТ обязан остаться включённым во всех руках — он последняя линия против тихого провала.
Чего замер НЕ должен делать: калибровать ставку платформы. Она гейчена строкой 202 и требует ЗАВЕРШЁННОЙ цепи; эта проба отвечает на вопрос «почему дорого», а не «сколько продавать».