56 KiB
ПЛАН ФАЗЫ Д — РЕДАКЦИЯ 4: ПРЕ-РЕГ РАТИФИЦИРОВАННОЙ ПРОБЫ
Редакции 1–3 отвергнуты консилиумом; их разбор — §8, сохранён как класс ошибок фазы. Редакция 4 собрана с постоянным консилиумом (архитектор замера · скептик · казначей) и несёт ПРЕ-РЕГИСТРАЦИЮ, а не намерения. Платные замеры санкционированы владельцем 01.09 — ⚠ без числа, и число нужно до фриза (§6).
1. ЧТО ЭТО ЗА ЗАМЕР И ПОЧЕМУ ИМЕННО ОН
Носитель: D39.184 п.5 — «Следующий платный замер — контролируемая проба редактора по ЧЕТЫРЁМ
осям (§14 отчёта холодного прогона): трудность чанка БЛОКИРОВАТЬ, длину входа КОНТРОЛИРОВАТЬ,
промпт по SHA, эффорт off против low». ⚠ Ноты нет в ветке polygon (реестр обрывается на
D39.170) — она в main; это следствие расхождения веток, а не отсутствия решения.
Вопрос: ПОЧЕМУ редактор дорог. Не «кто лучше» (мерено) и не «сколько продавать» (гейчено отдельно, §7).
2. ДИЗАЙН — КРЕСТ 2×2 ВНУТРИ ЮНИТА
| рука | промпт | stages[edit].reasoning |
что уходит на провод |
|---|---|---|---|
| P₇·E∅ | editor.md из e89874b^ |
"off" |
ключа reasoning_effort НЕТ ⇒ вендор-дефолт high |
| P₇·E_low | тот же | "low" |
reasoning_effort:"low" |
| P₉·E∅ | editor.md HEAD |
"off" |
ключа нет |
| P₉·E_low | тот же | "low" |
low |
Промпты различаются одной строкой; метка v3-discourse-reflow у обоих одна, поэтому берём по
SHA — снапшот их различает (snapshot.go:288=prompt_sha256).
⭐ МОДЕЛИ (их не было ни в одной прошлой редакции — поймано владельцем 02.09):
редактор — deepseek-v4-pro (он и есть предмет: off против low) · референс — glm-5 (thinking выключен, few_shot: false, не фактор) · черновик —
deepseek-v4-flash с low · хоп эскалации черновика — deepseek-v4-pro, наследует эффорт стадии ·
терминолог и классификатор — deepseek-v4-flash с low · судья не вызывается вовсе.
Состав снят с отработавшего coldrun-v16 и менять его нельзя: смета и сопоставимость стоят на нём.
- БЛОКИРУЕТСЯ трудность: каждая рука видит ВСЕ юниты. Реализация: один базовый прогон (черновая
волна + майнинг + терминолог), затем БД копируется ×5 (четыре руки креста + референс
glm). ⭐ Черновики выживают за $0 НЕ ре-пином (repin.go— механизм смены БАНКА, при смене промпта/эффорта он даёт «Nothing is re-pinnable»), а потому, что снапшот ПЕР-ВОЛНОВЫЙ (snapshot.go:225-231=waveDraft): правка edit-стадии draft-снапшот не двигает, и черновики идут обычным resume. ⛔ Базовый прогон ОБЯЗАН остановиться ДО edit-волны, и это делает только--verify-bank. Без флага движок авто-продолжает с неподписанным банком и покупает edit-юнит в том же процессе — тогда каждая копия потребует--resnapshotи перекупит базовые edit-юниты ×4. Условия копирования: движок остановлен (WAL закрыт),book_idтот же (он входит вrequest_hash), вbook.yamlменяются ТРИ поля —project_db,pipelineиceilings(последнее — потому что касса наследует базовый расход, §5.4). - КОНТРОЛИРУЕТСЯ длина входа:
len(draft)иprompt_tokens— ковариата. ⚠ Честно: чанки движка узки поprompt_tokens(4412–6946: там доминируют исходник и системное), но сама длина черновика широка — 427–6171 знак, разброс ×14, и она входит в модель ковариатой (§4). Прежняя формулировка «контролируется, а не измеряется» снята как противоречащая §4. - ФИКСИРУЕТСЯ: модель и дата вендор-доки · бинарь
tmctlпо sha ·models.yamlпо sha · потолок вывода ·temperature 0.4·few_shot: false· санитайзер ON ·escalation.budget_usd: 0ТОЛЬКО в ПЯТИ конфигах рук (четыре креста + референс). ⛔ **В БАЗОВОМ прогоне он обязан быть0**, иначе эхо-черновики останутся флагнутыми: в холодном прогоне 5 хопов на 25 вызовов, $0.103 на 10 глав ⇒ ≈$0.25 на 24 главы, и это отдельная строка сметы. ⚠ обоснование прежней редакции («иначе флагнутый юнит уйдёт хопом») ЛОЖНО и снято: редактор эскалировать не может по построению (
pipeline.go:1012=escalate_to is only allowed on a translator role). Настройка инертна для edit-волны; держим её как гигиену, а не как защиту. - РАНДОМИЗИРУЕТСЯ порядок ЧЕТЫРЁХ рук креста внутри юнита. ⭐ Контракт
poryadok.py, дословно: четыре руки креста — перестановкой от сида,glm-off— ВСЕГДА последним пятым. ⭐ референсglmидёт ПЯТЫМ, фиксированно последним — тогда при срабатывании денежного гарда теряется референс, а не пара, на которой стоит E1. Интерливинг во времени — пять клеток юнита в окне 10–20 минут, чтобы дрейф сервинга не разошёлся между руками. ⛔ Останов цикла НЕ по коду выхода: штатная остановка по объёму приходит и как 0, и как 2, различает её только строкаVOLUME CEILING:в выводе.|| break(урок Д47.6) здесь либо рвёт цикл на первом штатном стопе, либо не рвёт никогда ⇒ цикл разбирает вывод наVOLUME CEILING:. ⚠ Окно 10–20 мин достижимо не всегда: латентности edit-вызовов 43–216 с, ретрай добавляет ~200 с — юнит с обрывом в обеих∅-руках упирается в верх окна.
⭐ ПЯТАЯ, РЕФЕРЕНСНАЯ КЛЕТКА НА ЮНИТ: glm-5 в БОЕВОЙ форме (размышление выключено) ×
сегодняшний промпт. Не фактор креста — ценовой контроль: тот же черновик, тот же банк, тот же
день. ~$0.02 за клетку, ≈$0.5 на 24 юнита.
Зачем: без неё вывод звучит «pro стал дешевле на ×N», а с ней — «цена доставленного знака у
pro@low против glm@off СЕГОДНЯ». Это ровно та таблица, которой не хватает Д51: там pro посчитан на
ИЮЛЬСКИХ токенах (2 798 на вызов), а сегодня один вызов даёт 12 203 — отношение ×2.14 занижено.
⛔ Почему glm НЕ вводится третьей осью: её «low» в движке не ступень — on_extra_body у неё не
объявлен, при low мержится пустое и едет вендор-дефолт. Значит ось на glm = «выкл/вкл», а на
pro = «уровень» — фактор означал бы РАЗНОЕ на разных уровнях, и крест 2×2×2 не дал бы чистого
взаимодействия. Плюс удвоение рук (считано при прежнем потолке $8.6) срезало бы n до ~12 и MDE до ×2.7 — проба
перестала бы видеть даже ×2.5.
⚠ ЧЕТЫРЕ ОГОВОРКИ РЕФЕРЕНСА, без которых он даст ложное число (найдены скептиком 02.09):
- Его потолок вывода НЕ 16000. У
glm-5в реестре нет флораmin_max_tokens(«0 = no floor» для моделей с выключаемым размышлением) ⇒ потолок =EstimateTokens(draft)·2.2≈ 4.5 тыс. Для E1 неважно (референс в него не входит), но для E0/E2 «равный потолок» на него НЕ распространяется — и это записывается рядом с числом. - ⛔
R̂для референса обязан быть 0 ПО ПОСТРОЕНИЮ, а не по формуле: у него другой токенизатор, и формула напечатала бы «думает ±300 токенов» на модели с выключенным размышлением. Статья «размышление» = 0, «видимый выход» = весьcompletion_tokens. - ✅
few_shot: false— РЕШЕНО, развилка закрыта (нельзя фризить документ с открытой развилкой: этот флаг меняет байты конфига, его sha256 и статью «вход» в E0). Боевой резервный арм держит few-shot включённым, поэтому слово «боевая форма» из описания референса снято: референс отличается отP₉·E∅ровно моделью, и только так он остаётся чистым ценовым контролем. - ⚠ Референс на билингвальном входе — зона эха. Его эхо-клетки дадут
delivered = 0и раздуют цену знака не из-за цены. E5 считается по референсу ОТДЕЛЬНО.
Единица наблюдения — клетка (юнит × рука); единица анализа — юнит.
⭐ Требование §14 «потолок вывода одинаков во всех руках» выполняется само: stagerun.go:109-125
даёт base = max(EstimateTokens(draft)·2.2, min_max_tokens); при МАКСИМАЛЬНОМ черновике 6171 знак это
≈4.5 тыс. < 16000 ⇒ 16000 у всех юнитов во всех ЧЕТЫРЁХ РУКАХ КРЕСТА по построению (референс — своя история, §2), ретрай 32000 тоже одинаков.
⚠ Числа прежней редакции были не те: реальные черновики 427–6171 знак (не «~7 тыс.»), а
«4412–6946» — это prompt_tokens трёх edit-вызовов (исходник + черновик + системное), не длина
черновика. Механизм ломается только выше ~21 800 русских знаков или ~7 300 CJK-знаков эха.
3. ⛔ ДВЕ ДЫРЫ ПРИБОРА — БЕЗ НИХ ЗАМЕР НЕ ИЗМЕРИТ СВОЙ ПРЕДМЕТ
Дыра 1. Движок НЕ ВИДИТ размышление DeepSeek по построению. provider_openai.go:23
=ReasoningTokens stays 0 to avoid double-billing: у subset-провайдеров размышление считается
ВНУТРИ completion_tokens, и поле остаётся нулём. Проверено: во всех движковых базах
sum(reasoning_tokens>0) = 0. А предмет замера — именно размышление (95–96% цены).
Лечение без правки Go, с замеренной точностью: R̂ = completion_tokens − 0.3644·len(response_text).
Коэффициент — видимый выход pro-редактора на zh→ru; пере-снят мной независимо: 0.3644 токена/знак,
n=16, sd 0.0069. Ошибка типично ~3% видимого выхода, худшая клетка 5.3%; пренебрежима при размышлении в тысячах и заметна
лишь при малом размышлении. Коэффициент пинится в пре-реге.
⚠ Границы формулы, названные до покупки (проверено независимо на 185 клетках рига с отчётным
reasoning_tokens: 0.367–0.369, sd 0.007–0.010): (1) любой CJK в выходе ломает оценку — иероглиф
≈1 токен, видимая часть недооценивается, R̂ завышается; направление консервативно для E1, но
раздувает клетки E5; (2) при R̂ < ~700 относительная ошибка достигает 20–70% — у мелких клеток
low вывод о величине не делается; (3) брать сырую строку попытки, не sanitized_export — та
несёт обрезанный текст и пустой usage_json; (4) типичная ошибка ~3%, худшая клетка — 5.3%.
Дыра 2. У движка нет проводного артефакта — стадийный лог эффорт не печатает. Лечение:
(а) снапшот фолдит Reasoning и PromptSHA256 ⇒ у пяти рук пять разных snapshot_id, это
запись в БД, что конфиг был в силе; (б) сигнатура prompt_tokens(∅) − prompt_tokens(low) по юнитам
(на en дважды ровно 79). ⚠ Оба — косвенные; побайтной улики у движка нет.
3-БИС. ⭐ ОБЛАСТЬ ПЕРЕНОСА — ПИШЕТСЯ ДО ЗАМЕРА, ЧТОБЫ ВЫВОД НЕ РАСШИРИЛИ МОЛЧА
⚠ Повод: владелец 02.09 — «мы фактически измеряем, как ведёт себя дипсик; исследование однобокое». Он прав, и лечится это не расширением креста (§7), а честной границей вывода.
УСТАНАВЛИВАЕТСЯ — на одной модели deepseek-v4-pro в тех весах, что сервятся в дни прогона
(вендор объявил новые веса 13.08 при неизменном слаге), при маппинге эффорта от 30.08, на паре
zh→ru, на нашей нарезке (~2 тыс. знаков исходника на юнит), с нашей инъекцией банка, на двух
конкретных SHA editor.md:
- эффект ОТПРАВКИ
reasoning_effort:"low"против неотправки ключа — на объём размышления и на цену доставленного знака; - эффект одной строки промпта;
- разложение цены по статьям (E0 ниже) — у ЭТОЙ модели.
НЕ УСТАНАВЛИВАЕТСЯ, и это пишется тем же абзацем:
- «размышление вообще» — в реестре четыре разных механизма: у DeepSeek уровень без выключения, у GLM тумблер, у grok явное «none», у Gemini выключить нельзя;
- «семейство DeepSeek» — у
flashдругие веса и своя эхо-статистика; общее у них лишь таблица маппинга и сигнатура входа; - перенос на английскую пару — размышление на плотном китайском идёт в разы больше.
⛔ СРОК ГОДНОСТИ. Вендор за месяц сменил дефолт эффорта (31.07), веса (13.08) и таблицу маппинга (30.08). ⇒ вывод действителен до следующего изменения вахты и ПЕРЕ-СНИМАЕТСЯ пред-полётной парой (~$0.25), а не цитируется.
⭐ ШАБЛОН КЛЕЙМА, обязательный для любого, кто будет ссылаться на результат:
«у
deepseek-v4-pro(веса 0813) на zh→ru при нашей нарезке ручкаlowдаёт ×N [ДИ] — на N-й день после смены маппинга 30.08»
Число без этого квалификатора — ошибка класса Д52.5 (вендор-факт принят за свойство системы).
4. ПРАВИЛО РЕШЕНИЯ — ЗАПИСАНО ДО ЧИСЕЛ
Метрики клетки: R̂ · completion_tokens · cost_usd (сумма ВСЕХ строк юнита в руке, ретраи
включены) · delivered = знаки отгружаемого текста при годной диспозиции, иначе 0 ·
cost/delivered · finish попытки 0 · flag_reason.
- ⭐ E0 (ответ на вопрос «ПОЧЕМУ дорого», $0, на тех же данных). Для каждой руки на каждом юните
цена раскладывается по статьям: вход · кэш · видимый выход · размышление · ретраи, сложенные по
ВСЕМ попыткам. Печатаются доли и их сдвиг между руками.
Зачем он введён: ратифицированные оси меряют «сколько режет ручка», а заказ владельца был
«почему редактор дорог» — это шире. Разложение и есть ответ: «у пары без ручки размышление = X%
цены знака, ретраи = Y%; на
low— X′/Y′; промпт даёт Z». ⚠ Одна статья невосстановима никакой пробой и объявляется заранее: что из подорожания дали новые веса и смена дефолта вендором — июльское состояние сервинга не вернуть. - E1 (главный): по-юнитный контраст
log R̂(low) − log R̂(∅); Вилкоксон знаково-ранговый, α=0.05 двусторонне; медиана и 95% ДИ Ходжеса–Лемана печатаются как ВЕЛИЧИНА. ⛔ Исходов ДВА, а не три — прежняя редакция обещала третий и была неправа: ветвь «эквивалентность» (ДИ целиком внутри полосы) при наших n недостижима — полуширина ДИ в логарифме ≈0.43 при n=32 против полуширины полосы 0.22, для эквивалентности нужно n≈117. Решение:p<0.05⇒ эффект есть, величина = медиана с ДИ. Иначе ⇒ «НИЖЕ РАЗРЕШЕНИЯ ЗАМЕРА», и это НЕ «эффекта нет». ⚠ Критерий — толькоp<0.05: со-условие «ДИ вне [0.8;1.25]» снято, потому что оно строже таблицы мощности (требовало бы истинного эффекта ≈×2.3 против заявленных ×1.84) и потому что сама полоса — заимствованная конвенция биоэквивалентности, к объёму размышления не обоснованная. Полоса остаётся описательной: попадание в неё печатается, решения не несёт. ⛔ Цензура на потолке — правило записано до чисел, СИММЕТРИЧНО. В холодном прогоне 1 из 4∅-строк вернулаlengthровно на 16000 при непустом тексте: тамR̂— нижняя граница, а ретрай на 32000 есть ДРУГОЙ розыгрыш. ⇒ E1 считается по попытке 0; клетка сlengthвходит правой цензурой (R̂ ≥наблюдённого). Знак пары определяется так:- цензурирована
∅— знак достоверен, пока цензурированная∅≥low; иначе ничья; - цензурирована
low— знак достоверен, только если∅≤ наблюдённой границыlow; иначе ничья; - цензурированы обе — ничья.
⚠ «Ничья» ≠ «выброшено», и это надо задать в коде явно: стандартный знаково-ранговый Вилкоксон
нули по умолчанию ВЫБРАСЫВАЕТ; сохраняет их вариант Пратта. Скрипт эндпойнта обязан назвать
метод обработки нулей, иначе правило плана и тест разойдутся молча. ✅ Проверено на машине
01.09:
scipy 1.18.0, уwilcoxonумолчаниеzero_method='wilcox'(нули ВЫБРАСЫВАЮТСЯ), вариант Пратта поддержан ⇒ в скрипте пинитсяzero_method='pratt'. ⚠ Величина под цензурой — НИЖНЯЯ ГРАНИЦА: медиана и ДИ Ходжеса–Лемана при цензурированных клетках занижают эффект, поэтому величина печатается со знаком «≥». Иначеp<0.05при малой медиане прочтётся как «эффект мал», когда он может быть велик.
- цензурирована
- E2: то же для
log(cost/delivered)— отдельно по попытке 0 (равный потолок) и по итогу юнита (боевая цена). ⭐ Средний член цены за знак — константа, поэтому разница рук сидит в ρ = R̂/delivered. ⚠ Оговорка: 2–4-я клетки юнита бьют префикс-кэш, вход дешевеет ~$0.006–0.009; рандомизация порядка это усредняет, но добавляет ~10% шума на клетку. - E3: ось промпта — те же тесты. Прогноз, калибрующий удивление: |эффект| < ×1.25.
- E4 (восстановлен — без него крест не даёт ничего сверх двух пар): взаимодействие промпт×эффорт,
контраст
(P₉E_low − P₉E∅) − (P₇E_low − P₇E∅). sd контраста вдвое больше ⇒ MDE ≈ ×3.3 при n=32: эндпойнт описательный, выводов не несёт — но печатается, иначе крест не отличим от двух пар. - E5 (безопасность, блокирует любую рекомендацию): доля клеток с эхом/
cjk_artifactи сlengthпо рукам. Если уlowэхо-клеток ≥3 сверх∅— «риск эха на low» независимо от цены. - Ковариата длины входа — требование §14, которое Вилкоксон принять не может. Восстановлено
ОТДЕЛЬНОЙ моделью:
log R̂ ~ effort + prompt + log(len_draft) + (1|unit), как проверка устойчивости E1/E3, не как решающий тест. - Провал прибора: сигнатура Δ
prompt_tokensвне полосы у >20% юнитов ⇒ проба аннулируется, деньги называются. ⛔ Полоса НЕ задана заранее и не может быть: единственное известное число (−79) снято на en и на риге. ⇒ Пред-полёт ЗАМЕРЯЕТ сигнатуру и пинит её коммитом, и лишь после этого она становится гейтом. ⚠ Но «полосу» из пред-полёта не вывести: один юнит даёт две сигнатуры (P₇ и P₉), разброса в них нет. Поэтому правило допуска объявляется ЗДЕСЬ, до замера, и опирается на контроль 05.08: при побайтно одинаковыхmessagesпровайдер повторяетprompt_tokensв точности ⇒ сигнатура ожидается КОНСТАНТОЙ. Допуск: ±2 токена от значения, снятого пред-полётом (запас на неучтённую серверную вставку, не на шум). Клетка вне допуска — «сигнатура не воспроизвелась»; >20% таких юнитов ⇒ проба аннулируется.
Мощность. В кресте 2×2 контраст главного эффекта на юните имеет sd = σ (не σ√2) — поэтому n
вдвое меньше, чем в простой паре. Источник σ: эррата Д47.7 (23-editor-tier.md:7201=sd одного розыгрыша = 1.02, 16 пар
e0/zf, побайтно один вход) — ⚠ на английской паре и роли редактора; на zh не переносится,
поэтому планируем σ=1.2 с чувствительностью 1.0/1.4.
⭐ Плановое число — ×2.0 при σ=1.2 (z-аппроксимация с поправкой на ранговый тест). ⚠ Три версии, гулявшие по документам, суть одна формула в разных конвенциях: ×1.82 при σ=1.02 · ×1.88 при σ=1.056 (несмещённая sd, t-квантили без поправки) · ×2.02–2.08 при σ=1.2. t-квантили при n=24 добавляют ~3%. Решение владельца ни одна из трёх не двигает.
| σ | ×2.5 | ×2.0 | ×1.5 | MDE при n=24 | MDE при n=32 |
|---|---|---|---|---|---|
| 1.02 | 11 | 18 | 51 | ×1.82 | ×1.68 |
| 1.2 | 15 | 25 | 70 | ×2.02 | ×1.84 |
| 1.4 | 20 | 34 | 95 | ×2.27 | ×2.03 |
⛔ Эффект ×1.40 (наблюдённый внутри блока в Д47) при любом n ≤ 32 ниже разрешения — записано ДО покупки.
5. ГАРДЫ
-
⛔ РАМКА ВЫБОРКИ — пинится ДО всего остального, иначе «24 юнита» читаются как ОТБОР. В пре-рег заносится: срез исходника (диапазон глав, файл, его sha256) · новый каталог книги — ⚠ не
coldrun-v16, где три оплаченных edit-юнита заставят--resnapshotна каждой из четырёх копий · все юниты этих глав в порядке движка, без выбора ·n= сколько их получится (ориентир холодного прогона: 14 юнитов на 10 глав) · и входит ли юнит пред-полёта вn(решение: входит — это первый юнит в порядке движка, прогоняемый во всех четырёх руках). -
Пред-полёт: один юнит × ПЯТЬ клеток (четыре руки креста + референс, ~$0.27) → сигнатура Δ
prompt_tokensСНЯТА и запинена коммитом (по одной на P₇ и P₉; полосой она станет только после этого) · пять разныхsnapshot_id· ⭐ референс проходит свои гейты именно здесь: эхо,R̂ = 0, потолок ≈4.5 тыс. — иначе его первая клетка выстрелит в пачке мимо всех проверок · кириллица ≥0.99 · эхо 0. Только потом пачка. -
Зелень на пустоте:
delivered = 0⇒ клетка идёт в E5 и исключается из E2; если таких >20% в руке — прибор ОТКАЗЫВАЕТ, а не печатает «в пределах». ⛔ Правило действует ТОЛЬКО на четыре руки креста. Референсglm@offработает на билингвальном входе — это зона эха с НЕИЗМЕРЕННОЙ экспозицией, и правдоподобная доля пустых у него обнулила бы E1, в который он не входит вовсе. Референс с >20% пустых просто не печатается в E0, а его доля идёт в E5 отдельной строкой. -
Эхо-гейт включён во всех руках. ⚠
low≠ выключение: мина вооружается ТУМБЛЕРОМ, а уровни эффорта едут с размышлением включённым. Гейт всё равно остаётся. -
Касса — и здесь ловушка, которую видно только в коде.
ledger.go:58=FROM spend WHERE book_idсчитает потолок поbook_id, а копия БД несёт базовый расход под тем жеbook_id(в холодном прогоне это $0.4361). ⇒ceilings.book_usdкаждой копии = база + доля руки + запас, то есть вbook.yamlменяются ТРИ поля (project_db,pipeline,ceilings), либо потолок задаётся--ceiling-usdна каждый запуск. И число владельцу подаётся ОДНОЙ суммой: база + пред-полёт + N юнитов × 4 руки креста + референс — иначе базовый расход посчитается четырежды или не посчитается вовсе. Отказ леджера = СТОП и вопрос владельцу; добор после чисел запрещён; потолок сессия не поднимает. -
Фриз — и он обязан лежать в зоне полигона. Пре-рег и скрипт эндпойнта коммитятся в
eval/dovodka/. ⚠ ПЯТЬpipeline.yamlи дваeditor.mdфизически живут в каталоге книги — это ОТДЕЛЬНЫЙ репозиторий с открытым вопросом «кто коммитит книги», поэтому в зону полигона кладутся их замороженные копии вместе с sha256; иначе «коммитами ДО первой клетки» не исполнимо по канону. Всё — ДО первой платной клетки.
6. ⚠ ДЕНЬГИ — И ЗДЕСЬ НУЖНО ЧИСЛО ВЛАДЕЛЬЦА
⛔ Все числа ниже — в ПИКОВЫХ терминах, и иначе быть не может: леджер движка букирует пик всегда
(models.yaml:180=держим пик). Потолок кассы, --ceiling-usd и число владельца — тоже пиковые;
офф-пик — это счёт вендора по факту, а не потолок.
По леджеру холодного прогона: клетка ∅ ≈ $0.054 (среднее четырёх ненулевых edit-строк, включая
ретрай на 32000; попытка 0 — $0.048 при n=3); обрыв случился у 1 строки из 4.
⚠ Клетка low ≈ $0.04 — ИСТОЧНИКА НЕТ: движковых edit-вызовов на low не существует вовсе, а
хопы на low — роль переводчика ($0.004–0.040). Это предположение, а не замер, и его проверяет
пред-полёт.
Арифметика юнита, по шагам (её пропуск в прошлой редакции ломал все производные): попытка 0
у ∅ = $0.048; обрыв на 16000 случается у ~25% и добавляет ретрай на 32000 (+$0.070) ⇒
эффективная ∅ ≈ $0.048 + 0.25·0.070 ≈ $0.066, с запасом на разброс — $0.09.
Юнит (2 × ∅ + 2 × low) ≈ 2·0.09 + 2·0.04 = $0.26.
| строка сметы | клеток | расчётно, ПИК |
|---|---|---|
| базовый прогон (черновая волна + майнинг + терминолог) | — | ≈ $0.6 |
эскалация эхо-черновиков в базовом прогоне (budget_usd > 0) |
~12 хопов | ≈ $0.25 |
| пред-полёт (1 юнит × 5 клеток) | 5 | ≈ $0.27 |
| вариант A: 24 юнита × 4 руки креста (+20% запаса) | 96 | ≈ $7.5 |
⭐ референс glm-5@off, 24 клетки (+20%) |
24 | ≈ $0.6 |
| вариант B: 32 юнита × 4 руки (+20% запаса) | 128 | ≈ $10.0 |
⭐ ОДНОЙ СУММОЙ, как и надо просить у владельца (иначе база посчитается четырежды или ни разу —
леджер считает потолок по book_id, а его несут все четыре копии):
- вариант A (~17 глав, ожидаемо ~24 юнита): $8.6 — ⚠ ЭТО ИСТОРИЯ, потолок поднят до $9.5 ниже — разрешающая способность ×2.02;
- вариант B (~24 главы, ожидаемо ~32 юнита): $11.1 — разрешающая способность ×1.84.
⚠ Вариант задаётся ДИАПАЗОНОМ ГЛАВ, а не числом юнитов. «24» и «32» — ожидание по пропорции холодного прогона (14 юнитов на 10 глав), а не цель: юниты не добираются и не обрезаются. Прогон идёт до конца диапазона либо до срабатывания денежного гарда — что наступит раньше.
⚠ Чувствительность, названная до покупки и выведенная из своих же клеток: если low на zh режет
размышление слабо (×1.4, как внутри блока Д47), клетка low дорожает до $0.05–0.065 ⇒ юнит
2·0.09 + 2·(0.05…0.065) = $0.28–0.31 ⇒ 32 юнита = $8.96–9.92 до запаса. Сравнивать это надо
со строкой ЮНИТОВ ($10.0), а не с полной суммой: база, эскалация и пред-полёт ($1.1) тратятся при
любом срезе. Зазор 0.8–10.4% ⇒ гард с заметной вероятностью остановит раньше 32-го юнита.
Это штатный исход: стоп и вопрос владельцу, добор после чисел запрещён.
⛔ Мои прежние сметы ($1.7 и $2.50) занижены втрое и снимаются: они считали «выход» как видимый
текст, тогда как размышление у DeepSeek сидит ВНУТРИ completion_tokens. Это тот же класс, что
«смета ×10» редакции 1.
✅ РЕШЕНИЕ ВЛАДЕЛЬЦА: ВАРИАНТ A — 17 глав. ПОТОЛОК $9.5 (01.09 — «17 глав разрешаю», $8.6; 02.09 поднят до $9.5 словом «да, можно поднять» после того, как в дизайн вошла референсная клетка). Вариант B (~24 главы) не берётся.
Почему именно $9.5 — посчитано, а не округлено: база 17 глав $0.45 + четыре руки креста
(24 юнита × 2×$0.09 + 2×low) + референс 24×$0.02, всё с 20% на ретраи.
сценарий цены клетки low |
сырое | с запасом | влезает юнитов |
|---|---|---|---|
| центральный $0.04 | $7.17 | $8.60 | 24 из 24 |
| пессимистичный $0.05 | $7.65 | $9.18 | 24 из 24 |
| худший $0.065 | $8.37 | $10.04 | 22 из 24 (MDE ×2.02 → ×2.06) |
| ⇒ $9.5 покрывает два сценария из трёх целиком; в худшем теряются два юнита, и это штатный исход — | |||
| референс идёт последним, поэтому теряется он, а не пара, на которой стоит вывод. | |||
| ⛔ Потолок $9.5 — В ПИКОВЫХ ТЕРМИНАХ и СЕССИЕЙ НЕ ПОДНИМАЕТСЯ. Срабатывание гарда = стоп и | |||
| вопрос владельцу; добор после просмотра чисел запрещён. |
Прежняя развилка (снята решением): вариант A $8.6 (MDE ×2.02) или вариант B $11.1 (MDE ×1.84). Обе суммы — из таблицы выше и больше нигде в этом файле не повторяются. Санкция «платные замеры разрешаю» числа не содержит, а по канону потолок сессия не поднимает.
7. ЧЕГО В ЗАМЕРЕ НЕТ НАМЕРЕННО
Калибровки ставки платформы (гейчено, §14 прямо) · судейства качества — качество low вне скоупа,
только $0-гейты и E5 · правок models.yaml, capabilities, Go · смены модели, черновика,
дифф-контракта · креста «размышление вкл/выкл» пилота · сравнения с июльским базлайном как
каузального: между июлем и сегодня сменились веса модели, дефолт, маппинг и потолок — проба
разделяет рычаги СЕГОДНЯ.
⛔ И отдельно: из этой пробы НЕ следует рекомендация менять боевой pipeline-c1.yaml. Флип там
пинит тест (echo_mine_test.go:217, TestBoevoyConfigEditorDsproAndGrokReasoning) и двигает
снапшот edit-волны ⇒ --resnapshot и перекупка волны.
8. РЕЕСТР ОШИБОК ЧЕТЫРЁХ РЕДАКЦИЙ — сохранено, потому что класс один
| # | что утверждал | чем опровергнуто |
|---|---|---|
| 1 | «прибор верности нужен первым» | вопрос закрыт замером: редакторы не дописывают (рост знаков −0.4% и −0.6%) |
| 2 | «проба единицы выдачи» | гипотезу опровергают наши же данные; арм запрещён; смета ×10 |
| 3 | «контур ни разу не ездил целиком» | coldrun-v16 прошёл НАКАНУНЕ |
| 4 | «канон мерен на 1–2 главах» | я сам намерил на 25 главах подряд сутками ранее |
| 5 | «засеять first_person/speech» |
поля мёртвые: не копируются в рендер, не входят в хеш |
| 6 | «движок ручку не шлёт вообще» | capability.go:236 шлёт `low |
| 7 | «гейт запретит» | гейт в другом тесте и пинит только шиппинг-конфиги |
| 8 | «риг потерял бы роль редактора» | tenant_panel/prompts.py:141=def editor_msgs грузит боевой editor.md |
| 9 | «эхо на pro@low не мерено» |
5 хопов в coldrun-v16, эхо 0 — ⚠ но роль переводчика, не редактора |
| 10 | сметы $1.7 / $2.50 | занижены втрое: размышление внутри completion_tokens |
Сквозной класс — один: показания инструмента, собственной памяти или своей ветки приняты за факт о мире. Лечение, выведенное из десяти случаев: отрицательный результат предъявляется с положительным контролем, а прежде «этого нет» — смотреть каталог артефактов, а не только доки своей ветки.
9. ПРОЦЕДУРА — КОМАНДЫ, А НЕ АРГУМЕНТЫ
⚠ Этот раздел дописан 02.09 после проверки исполнимости свежей сессией. Её вердикт был: «план написан как аргумент, а не как процедура — из него нельзя набрать ни одной команды», и объём домысливания оказался больше, чем то, что план задаёт. Все якоря при этом были верны: дефект был не в фактуре, а в форме. Ниже — то, чего не хватало.
9.0 ⛔ ТРИ МЕСТА, ГДЕ ДОМЫСЛИВАНИЕ СТОИТ ДЕНЕГ ИЛИ ЗАМЕРА
Прочти их ПЕРВЫМИ; каждое проверено исполнением.
--verify-bankНЕ ГАРАНТИРУЕТ останова. Флаг единственный, кто вообще может остановить прогон до редакторской волны, но при ПУСТОЙ дельте майнинга движок авто-продолжает (mining.go:152-164, флаг лишь повышает уровень лога). Если это случится, базовый прогон купит редакторские юниты, и каждая из четырёх копий потребует пересборки снапшота с перекупкой. ⇒ ПОЯС: базовому прогону ставится--ceiling-usdчуть выше ожидания ЧЕРНОВОЙ волны, чтобы редакторская покупка упёрлась в денежный отказ (код 4), а не прошла молча.- Ось промпта реализуется ТОЛЬКО через
stages[edit].prompt_override. Промпт резолвится конвенцией<prompts_root>/<пара>/<роль>.md, аprompts_rootживёт вpairs/zh-ru.yaml, общем для всех конфигов каталога. ⇒ безprompt_overrideчетыре руки схлопнутся в две: платишь за четыре, меришь две. Ловится гардом «четыре разныхsnapshot_id» — снимать его запросом кsnapshotsкаждой из четырёх баз. - Потолка $9.5 не существует как механизма. Леджер считает по
book_id, а таблицаspendлежит ВНУТРИ проектной базы: четыре копии сторожат каждая себя и каждая уже несёт базовый расход. ⇒ агрегат ведётся вручную (§9.5), и санкционированную сумму держит только он.
9.1 СТЕНД
Образец — ~/books/gu-zhenren/coldrun-v16/ (его book.yaml, pipeline.yaml, pairs/zh-ru.yaml).
⚠ Каталог берётся как ОБРАЗЕЦ, но не как рабочее место: в нём три оплаченных редакторских юнита,
которые заставят пересборку снапшота на каждой копии.
⛔ Пути на models, langpack_root, prompts_root обязаны смотреть в
/home/ubuntu/projects/textmachine-main/, а не в своё дерево: в polygon нет
backend/configs/langpacks/ru (проверено: там только zh, zh-ru), а загрузчик на отсутствующий
каталог молча возвращает умолчания — русский слой читателя потеряется во всех четырёх руках тихо.
backend/prompts и models.yaml в двух деревьях побайтно совпадают, расходится только langpacks.
B=~/books/gu-zhenren/probe-4axes # новый каталог, не coldrun-v16
mkdir -p $B/{bin,logs,arms}
cp ~/books/gu-zhenren/coldrun-v16/{book.yaml,pipeline.yaml} $B/
cp -r ~/books/gu-zhenren/coldrun-v16/pairs $B/
# исходник: 17 глав, вариант A
eval/.venv/bin/python eval/dovodka/narezka.py --from 26 --to 42 --out $B/guzhenren-ch26-42.gb18030.txt
# бинарь — из main-дерева, sha пинится в пре-рег
cd /home/ubuntu/projects/textmachine-main/backend && go build -o $B/bin/tmctl ./cmd/tmctl
sha256sum $B/bin/tmctl
9.2 ЧЕТЫРЕ РУКИ
Четыре копии pipeline.yaml в $B/arms/, различающиеся РОВНО двумя строками стадии edit:
| файл | prompt_override |
reasoning |
|---|---|---|
p7-off.yaml |
$B/editor-p7.md |
"off" |
p7-low.yaml |
$B/editor-p7.md |
"low" |
p9-off.yaml |
$B/editor-p9.md |
"off" |
p9-low.yaml |
$B/editor-p9.md |
"low" |
⭐ glm-off.yaml (референс, не рука креста) |
$B/editor-p9.md |
"off", модель glm-5 |
cd /home/ubuntu/projects/textmachine
git show e89874b^:backend/prompts/zh-ru/editor.md > $B/editor-p7.md # июльский
git show HEAD:backend/prompts/zh-ru/editor.md > $B/editor-p9.md # сегодняшний
sha256sum $B/editor-p7.md $B/editor-p9.md # ОБА в пре-рег
⚠ В образце coldrun-v16/pipeline.yaml комментарий утверждает, что у pro ручки эффорта нет
вовсе — это протухло. Копируя файл, комментарий поправить или удалить, иначе следующий читатель
получит противоречие своему же плану.
9.3 ПОРЯДОК
Коды выхода, без которых штатный стоп читается как падение: 0 — чисто · 2 — завершено с
флагами · 3 — стоп подписи банка (WaveSignatureStop) · 4 — денежный отказ
(CeilingHalt). Объёмный стоп приходит и как 0, и как 2; различает только строка
VOLUME CEILING: в выводе.
# 1. БАЗОВЫЙ ПРОГОН: черновая волна + майнинг + терминолог, стоп ДО редактуры
$B/bin/tmctl translate --config $B/book.yaml --verify-bank --ceiling-usd 1.20 2>&1 | tee $B/logs/base.log
# ожидаемый код 3 (стоп подписи). Код 0/2 ⇒ ⛔ СТОП: дельта была пуста, редактура куплена —
# к владельцу, не продолжать.
# 2. КОПИИ — только через backup, не cp (живые -wal/-shm теряют данные)
$B/bin/tmctl backup --config $B/book.yaml # ⚠ флага --out НЕТ: пишет в $B/backups/<ts>.db
cp $B/backups/<ts>.db $B/arms/p7-off.db # …и так все ПЯТЬ копий
# в каждой копии свой project_db, pipeline и ceilings
# ⛔ если project_db копии не существует, движок заведёт ПУСТУЮ базу и купит черновую волну заново
# 3. ИНТЕРЛИВИНГ: юнит за юнитом, руки в порядке из сида
for u in $(seq 1 $N); do
for arm in $(eval/.venv/bin/python eval/dovodka/poryadok.py --unit $u --seed 20260902); do
$B/bin/tmctl translate --config $B/arms/$arm.yaml --max-units 1 --ceiling-usd <своя> \
2>&1 | tee -a $B/logs/$arm.log
rc=$?; grep -q 'VOLUME CEILING:' $B/logs/$arm.log && break 2
[ $rc -eq 4 ] && { echo "⛔ ПОТОЛОК — СТОП, вопрос владельцу"; exit 4; }
done
done
⛔ Увидел требование --resnapshot — СТОП, не давать флаг. Он перекупит все уже оплаченные
клетки. ⚠ Предупреждение планировщика о будущем --resnapshot на майнящей книге печатается на
КАЖДОМ ограниченном прогоне (десятки раз) — оно ожидаемо и не есть требование.
9.4 РАНДОМИЗАЦИЯ
Порядок рук внутри юнита — детерминированная перестановка от сида; сид объявляется в пре-реге
(20260902), выпавший порядок пишется в манифест. Без запиненного сида пре-рег не является
пре-регом.
9.5 АГРЕГАТ ПОТОЛКА — ВРУЧНУЮ, ПОТОМУ ЧТО МЕХАНИЗМА НЕТ
for db in $B/arms/*.db $B/*.db; do
echo -n "$(basename $db): "; sqlite3 "$db" "select round(sum(committed_usd+reserved_usd),4) from spend;"
done
База считается ОДИН раз (она в каждой копии), поэтому: израсходовано = база + Σ(копия − база). Санкция владельца — $9.5 в пиковых терминах; при достижении — стоп и вопрос, добор запрещён.
9.6 ЧЕГО ЕЩЁ НЕТ И ЧТО ПИСАТЬ ПЕРЕД ФРИЗОМ
- скрипт эндпойнта (
chetyre.py): ключ юнита, реконструкция попытки 0 (вrequest_logнет колонкиattempt— она вcheckpoints), определениеdelivered, восстановление размышления, правило цензуры, Вилкоксон сzero_method='pratt'; - ⚠ медиану и доверительный интервал Ходжеса–Лемана придётся писать руками:
scipy 1.18.0установлен иprattподдерживает, но интервала уwilcoxonне отдаёт (проверено); - ⚠ ковариатная модель не запустится:
statsmodelsвeval/.venvне установлен; poryadok.py— генератор порядка рук от сида.
10. ⛔ ФРИЗ ПРЕ-РЕГИСТРАЦИИ
Настоящим коммитом пре-регистрация ЗАМОРОЖЕНА. Дата: 02.09.2026. Объявлено владельцу вслух.
Что заморожено и после этого коммита НЕ ПРАВИТСЯ:
- дизайн — крест 2×2 внутри юнита + референсная клетка пятой, фиксированно последней;
- модели — редактор
deepseek-v4-pro, референсglm-5(thinkingвыключен,few_shot: false), черновик и терминологdeepseek-v4-flash, судья не вызывается; - правило решения §4 — эндпойнты E0/E1/E2/E3/E4/E5, критерий
p<0.05, два исхода, правило цензуры, метод обработки ничьих, порог «ниже разрешения замера»; - мощность и её конвенция — плановое ×2.0 при σ=1.2;
- потолок — $9.5 в пиковых терминах, санкция владельца 02.09;
- рамка выборки — главы книги 26–42, все юниты в порядке движка, без отбора;
- сид рандомизации — 20260902;
- коэффициент восстановления размышления — 0.3644 токена/знак;
- область переноса §3-БИС и обязательный шаблон формулировки вывода.
Что фризом НЕ покрыто и остаётся работой исполнителя (форма — на его усмотрение, требования —
в §9.6 и в промте): скрипты chetyre.py и poryadok.py · сборка стенда · тексты конфигов.
⚠ Известные шероховатости, названные при фризе, а не скрытые: смета существует в двух структурах (обе ниже потолка, расхождение в базе $0.45 против $0.85 и в двойном счёте пред-полёта); в полировочных местах остались формулировки «четыре руки» там, где теперь пять. Ни то, ни другое не меняет дизайн, правило решения и потолок.
Отступление от замороженного = пинг владельцу, а не правка. Если исполнение покажет, что что-то из замороженного неверно — это НАХОДКА, которая записывается и предъявляется, а не исправляется молча.