textmachine/eval/dovodka/prereg-4axes/ISPOLNENIE.md

29 KiB
Raw Blame History

ЖУРНАЛ ИСПОЛНЕНИЯ — что случилось ПОСЛЕ фриза №1 (c08b547)

Пре-регистрация заморожена и не правится. Всё, что исполнение показало дальше, ложится сюда: находки, отступления, деньги — по порядку, с командами.


Ш1 · КЛЮЧЕВАЯ ПРОБА, $0

tmctl translate --config $B/book.yaml --keys-file <polygon>/backend/.env --ceiling-usd 0.0001
→ pre-flight: backed up the project DB to backups/20260902T004943Z.db (integrity_check green)
→ draft wave started snapshot=8d5721f65596 chunks=35 workers=4
→ book USD ceiling reached ($0.0001) … denied estimate=$0.012052, ch1/chunk0/draft
RC=4

Критерий прохождения — деньги, а не код выхода: spend = 0 · request_log = 0 строк · request_log where cost_usd>0 = 0 · checkpoints = 0 · chunk_status[edit] = 0. Положительный контроль на сам критерий: те же четыре запроса к базе холодного прогона дают $0.436110 и 38 строк — команда умеет находить деньги там, где они есть.

Побочно установлено: ключи всех четырёх провайдеров резолвятся (ошибки CheckKeys не было); langpack_version = langpack-v2-x13fce767eada — непустой, значит русский слой загрузился; в снапшоте черновой волны РОВНО одна стадия — translator, то есть пер-волновой фолд подтверждён на живой базе.


Ш3 · БАЗОВЫЙ ПРОГОН — RC = 3, редактура не куплена

строка вызовов $
черновик deepseek-v4-flash 36 0.168200
хопы эскалации deepseek-v4-pro 5 0.088463
терминолог 3 0.013484
классификатор 1 0.002756
ИТОГО 0.272903 при поясе 0.60

chunk_status[edit] = 0 · request_log[edit] = 0 · jobs[edit] = 0, при положительном контроле (тот же запрос к coldrun-v16 даёт 3). Все 35 черновых чанков ok, флагнутых 0, эскалаций 5 — эхо-черновики вычищены, что и было задачей базового прогона.

Терминолог обрезан бюджетом: batches_dropped=5, classify_batches_dropped=6, consolidated=51, unanswered=57. Банк консолидирован ЧАСТИЧНО. Решение словом, а не умолчанием: бюджет НЕ поднимаю. Банк — константа во всех пяти руках, поэтому на ось усилия и промпта он не влияет; поднять его — пере-покупка ради вопроса, которого замер не задаёт. Ограничение уходит в область переноса: результат получен на частично консолидированном банке.


Ш4 · ПЯТЬ КОПИЙ

tmctl backupbackups/20260902T072159Z.dbcp в пять arms/<рука>.db. sha256 всех пяти совпал (036f76f7e36a8e96…), у каждой леджер $0.272903, черновиков 35, edit 0.


Ш5-ЭТАП-1 · ОСЬ ДОКАЗАНА ЗА $0

План собирался проверять ось ПОСЛЕ покупки. Приём: дать копии потолок «база + $0.0001». Движок бесплатно поднимает черновики из чекпойнтов, гоняет майнинг и терминолог по чекпойнтам, вычисляет edit-снапшот и заводит edit-джоб — и только потом упирается в отказ резервации.

p7-off   edit ba1fdded853f…  sha 2b84dee34b08…  reasoning 'off'  model deepseek-v4-pro
p7-low   edit ebf9779789ec…  sha 2b84dee34b08…  reasoning 'low'  model deepseek-v4-pro
p9-off   edit 50456adb5e42…  sha 1ad4544e564a…  reasoning 'off'  model deepseek-v4-pro
p9-low   edit 818b46153d4f…  sha 1ad4544e564a…  reasoning 'low'  model deepseek-v4-pro
glm-off  edit fe10bbf000cd…  sha 1ad4544e564a…  reasoning 'off'  model glm-5
memory_version у всех пяти: d08d11eb642e
EDIT-снапшотов 5 · DRAFT-снапшотов 1 · леджер каждой руки не сдвинулся

Плюс проверка сильнее плановой: у пяти edit-снапшотов всё, кроме плана стадий, побайтно одинаково. Без неё «пять разных id» прошло бы и при разных банках.

Находка Ш5-1: preflightBackup роняет прогоны, стартовавшие в одну секунду

Первый запуск гарда: три руки из пяти вернули код 1 — store: backup .../arms/backups/20260902T072300Z.db already exists (refusing to overwrite a restore point). Точка восстановления именуется с точностью до СЕКУНДЫ, пять рук лежат в одном каталоге. В пачке это остановило бы прогон на сотне клеток. Лечение: пауза 2 с перед каждым вызовом в predpolet.sh и pachka.sh. Денег не стоило.


Ш5-ЭТАП-2 · ГЛАВНАЯ НАХОДКА ИСПОЛНЕНИЯ: АВТО-БАНК РАСТЁТ МЕЖДУ ПОКУПКАМИ

Первая платная клетка (p7-low):

rc=1 · потрачено $0.018243 · edit-клеток куплено 0
tmctl: job guzhenren-probe4/ch1/edit was started under snapshot ebf9779789ec, current config
  renders snapshot 64fc22983b6c — what moved: memory_version — that is the BANK, not a config
  or prompt edit: the auto-bank grew between purchases

Механизм. Терминолог перезапускается в КАЖДОЙ руке и, пока у него остался бюджет, доращивает авто-банк. Банк — вход редактора.

база рука p7-low
consolidated 51 81
unanswered 57 27
batches_dropped 5 3
memory_version d08d11eb642e 67d54521e64d
edit-снапшот ebf9779789ec 64fc22983b6c

Все $0.018243 — терминолог ($0.013276 render + $0.004967 classify), ни одной edit-клетки.

Почему это угроза дизайну, а не побочка гарда. Гард лишь показал раньше. Без него первая рука завела бы джоб под своим банком и купила клетку, а на ВТОРОМ юните банк дорос бы снова — и рука упёрлась бы в тот же отказ уже с оплаченными клетками. Хуже: банк мог вырасти по-разному в разных руках, и тогда редактор получил бы разный вход при внешне исправном кресте. Это прямое разрушение блокировки трудности, на которой стоит весь замер. Ни план, ни я этого не предвидели.

Банк НЕ в неподвижной точке: накоплено render $0.02676 из $0.05, classify $0.007723 из $0.02 — головы ещё на пару батчей.

Что при этом НЕ грозит — проверено, а не предположено

  • Предупреждение «the reverse section is capped … re-proposes on the next run» не срабатывало ни разу: grep -c 'reverse section is capped' = 0 в обоих логах, при положительном контроле — тот же греп находит 14 и 10 других level=WARN в тех же файлах.
  • Дельта майнинга стабильна: terms=102 и в базе, и в руке. Растёт только консолидация.
  • Бюджет режется ДО первого вызова от накопленного расхода (terminologist.go:792), поэтому исчерпание монотонно и неподвижная точка достижима.

Лечение — проверено исполнением за $0

Довести терминолога до неподвижной точки В БАЗЕ и только потом копировать. Мешало то, что любой прогон, дошедший до edit-волны, заводит edit-джоб, а он уехал бы в пять копий, совпав со снапшотом лишь одной руки. Проверена гипотеза «draft-only конфиг»:

конфиг БЕЗ стадии edit, прогон на копии базы, потолок отказывает всему:
  draft wave started snapshot=8d5721f65596      ← ТОТ ЖЕ, что у базы
  bank-mining: --verify-bank has nothing to stop before in a draft-only pipeline
  edit-джобов заведено: 0 · потрачено: $0.000000

Опасение, что finalStageWave перекинет фолд repair на черновую волну и сдвинет снапшот, снято: гейт repair выключен, repairSnapshot даёт nil в обоих случаях.

Процедура: гонять базу pipeline-bank-only.yaml, пока memory_version не перестанет меняться между двумя подряд прогонами (измеримая неподвижная точка) → новый бэкап → пять новых копий → заново $0-гард оси → платный пред-полёт. Потолок стоимости лечения — остаток замороженных бюджетов: $0.036516 + $0.017244 = ≤ $0.0538.

Что это меняет и чего не меняет. Меняет ПОРЯДОК сборки стенда, который §10 плана прямо оставляет исполнителю. Не меняет ни дизайн, ни правило решения, ни потолок, ни рамку выборки, ни сид, ни модели. Отвергнутые альтернативы: gates.terminology.enabled: false в руках (банк стал бы ДРУГИМ, чем в базе: без терминолога attachConsolidatedDst берёт dst из сырого порядка черновиков); поднять budget_usd (правка замороженного числа, и неподвижной точки не гарантирует); --resnapshot (запрещён промтом).


⚠ ДЕНЕЖНАЯ ЛОВУШКА, НАЗВАННАЯ ДО ТОГО, КАК ОНА СРАБОТАЛА

$0.018243, потраченные в p7-low, при пере-копировании ИСЧЕЗНУТ из леджера копии — а провайдеру они уже ушли. Агрегат §9.5 («база + Σ(копия база)») их не увидит и занизит расход. ⇒ В агрегат вводится постоянное слагаемое «потрачено вне текущих баз» = $0.018243, и оно переносится во все последующие подсчёты.


ДЕНЬГИ НА ЭТОТ МОМЕНТ

база                        $0.272903
вне текущих баз (p7-low)    $0.018243
────────────────────────────────────
ИЗРАСХОДОВАНО               $0.291146   из санкции $9.50

НАХОДКА В МОЁМ ЖЕ ГАРДЕ: ЛОЖНАЯ НЕПОДВИЖНАЯ ТОЧКА

Класс: показания собственного инструмента приняты за факт о мире. Тот же класс, что и снятая находка про pairs/ (§9-КВАТЕР пре-рега), и тот, из-за которого этот промт вообще написан.

$0-гард оси с потолком «база + $0.0001» показал «банк не двинулся, леджер не сдвинулся». Я прочла это как «банк стабилен». На деле потолок отказывал и ТЕРМИНОЛОГУ, а его отказ — не остановка, а break с логом (terminologist.go:807: «call denied by a USD ceiling; remaining terms left unchanged»). Банк не двигался потому, что не на что было купить.

Улика, снятая после того, как это назвал агент-контролёр:

$ grep -c 'denied by a USD ceiling' logs/axis-*.log logs/base.log
  axis-p7-off:2  axis-p7-low:2  axis-p9-off:2  axis-p9-low:2  axis-glm-off:2   base:0
  ПОЛОЖИТЕЛЬНЫЙ КОНТРОЛЬ: тот же греп на 'ceiling' в axis-p7-off даёт 6

Во всех пяти логах гарда терминолог был заблокирован деньгами; в базовом прогоне (потолок $0.60) — ни разу. Лечение: потолок гарда обязан лежать НИЖЕ редакторской резервации, но ВЫШЕ батча терминолога — тогда ложная точка проявляется покупкой, а не тишиной.

СТАБИЛИЗАЦИЯ БАНКА — ТРИ ИТЕРАЦИИ, ТОЧКА ДОКАЗАНА

Терминальное условие — не «memory_version не изменился» (это можно получить и купив батч, который ничего не сконсолидировал), а ноль свежих платных строк И ни одного отказа по деньгам.

итерация 1  потолок $0.3729  строк с ценой 45→48  consolidated 81   memory_version 6cf3bbb07c4c
итерация 2  потолок $0.3862  строк с ценой 48→51  consolidated 101  memory_version e1815faab405
итерация 3  потолок $0.4081  строк с ценой 51→51  denied=0          memory_version НЕ ИЗМЕНИЛСЯ
                                                                    ✅ НЕПОДВИЖНАЯ ТОЧКА

Банк: 51 → 101 консолидированный терм из 108, unanswered 57 → 7. Стоимость лечения: $0.035199 (леджер базы $0.272903 → $0.308102) — в предсказанном потолке ≤ $0.0538, который был выведен из ЗАМОРОЖЕННЫХ бюджетов и потому не мог быть превышен.

$0-альтернатива, рассмотренная и отвергнутая по улике: gates.terminology.budget_usd: 0 в руках заморозил бы банк бесплатно (terminologist.go:770-776 — оплаченные батчи допускаются мимо бюджета). Но такой конфиг не загрузился бы вовсе: pipeline.go:1078budget_usd must be > 0 when the gate is enabled (a gate that can never spend is a silent no-op), код 10 на старте. Прочитан планировщик, не прочитан валидатор — поймано до запуска, ценой ноль.

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

Старые копии снесены (несли джобы под старым снапшотом, а p7-low — иной банк). Новый бэкап backups/20260902T075300Z.db, пять новых копий, sha256 совпал, edit-джобов 0, база $0.308102.

p7-off   edit 5d19943a7771…  sha 2b84dee34b08…  reasoning 'off'  model deepseek-v4-pro
p7-low   edit 9fcf3c1c3eb1…  sha 2b84dee34b08…  reasoning 'low'  model deepseek-v4-pro
p9-off   edit 4fb1efc79dab…  sha 1ad4544e564a…  reasoning 'off'  model deepseek-v4-pro
p9-low   edit b76ab168d95b…  sha 1ad4544e564a…  reasoning 'low'  model deepseek-v4-pro
glm-off  edit a4598c85a210…  sha 1ad4544e564a…  reasoning 'off'  model glm-5
memory_version у всех пяти: e1815faab405 · EDIT-снапшотов 5 · DRAFT-снапшотов 1

Устойчивость прогон-к-прогону — то, на чём стоит цикл из 20 повторов

Два подряд прогона p9-off с потолком база + $0.015 (НИЖЕ edit-резервации креста $0.0704, ВЫШЕ батча терминолога ≈$0.0126 — то есть ложная точка проявилась бы покупкой):

прогон 1: rc=4 · снапшот 4fb1efc79dab→4fb1efc79dab · строк с ценой 51→51 · леджер не сдвинулся · denied=0
прогон 2: rc=4 · снапшот 4fb1efc79dab→4fb1efc79dab · строк с ценой 51→51 · леджер не сдвинулся · denied=0

⚠ ОТСТУПЛЕНИЕ: референсная клетка куплена ПЕРВОЙ, а не пятой

Гард с потолком база + $0.04 купил клетку glm-off: у glm-5 НЕТ флора min_max_tokens, её редакторская резервация $0.020191 влезла в потолок, тогда как у рук креста она $0.070426 (отказ назвал ch1/chunk0/edit — стадия та, что нужно).

glm-off (1,0) · glm-5 · pt 5478 · cmpl 2310 · $0.012870 · finish stop · ответ 7605 знаков
max_tokens в вызове: 4637        ← план предсказывал ≈4.5 тыс. для референса без флора: сходится

Клетка принята, а не пере-куплена. Она законна — это клетка пред-полётного юнита; куплена вне порядка сида (первой вместо пятой), то есть БЕЗ выигрыша префикс-кэша, что для референса консервативно; референс не входит в крест и в E1. Пере-покупка стоила бы ещё $0.0129 и не дала бы ничего измеримого. Отступление записано здесь.

Побочно — улика, что thinking у референса действительно выключен: остаток 2310 0.3644·7605 = 461 вместо тысяч положительных. Отрицательный знак — свойство ЧУЖОГО токенизатора (план это и предупреждал), а не размышления.

ДЕНЬГИ ПОСЛЕ СТАБИЛИЗАЦИИ

база (стабилизированная)     $0.308102
вне текущих баз (p7-low)     $0.018243   ← улика logs/orphaned-spend-p7-low.tsv, sha256 2b15d1e7…
клетка glm-off               $0.012870   ← уже в леджере копии, в агрегат войдёт как (копия  база)
─────────────────────────────────────
ИЗРАСХОДОВАНО                $0.339215   из санкции $9.50

ПРЕД-ПОЛЁТ ПРОЙДЕН — все стоп-критерии §5.1 исполнены командой

Команда: ./eval/.venv/bin/python eval/dovodka/predpolet_proverka.py ~/books/gu-zhenren/probe-4axes → RC=0

Пять клеток юнита (1,0) = «Глава 26»

рука pt кэш cmpl finish клетка $ ответ, зн
p7-off 5696 0 14276 11506 stop 0.064052 7602
p7-low 5617 0 4593 1889 stop 0.025603 7420
p9-off 5752 0 6673 3920 stop 0.034018 7554
p9-low 5673 5632 3303 585 stop 0.013382 7458
glm-off 5478 0 2310 0 по построению stop 0.012870 7605

p9-low: R̂ = 585 < 700 — по правилу плана о ВЕЛИЧИНЕ такой клетки вывод не делается. ⚠ n = 1: числа приведены как улика исправности прибора, а НЕ как результат. Правило решения §4 требует Вилкоксона по 20 юнитам, и оно не пересматривается.

ПРОВОДНАЯ УЛИКА — план утверждал, что её не существует

p7-off   reasoning_effort —       max_tokens 16000  temperature 0.4  model deepseek-v4-pro
p7-low   reasoning_effort ['low'] max_tokens 16000  temperature 0.4  model deepseek-v4-pro
p9-off   reasoning_effort —       max_tokens 16000  temperature 0.4  model deepseek-v4-pro
p9-low   reasoning_effort ['low'] max_tokens 16000  temperature 0.4  model deepseek-v4-pro

Ключ стоит РОВНО у low-рук и отсутствует у -рук; потолок вывода, температура и модель побайтно одинаковы. Требование §14 «потолок вывода одинаков во всех руках» — исполнено на проводе, а не выведено из кода.

Дефект инструмента, пойманный положительным контролем. Первая редакция ассертов рапортовала «у low-рук ключа НЕТ» — то есть дефект МОЕГО грепа выглядел как находка о проводе. Тело логируется экранированным (request="{\"reasoning_effort\":\"low\"}"), а регулярка искала неэкранированные кавычки. Поймано тем, что grep -c reasoning_effort давал 1 там, где регулярка давала 0. Класс: показания собственного инструмента приняты за факт о мире — третий случай за сессию.

Блокировка трудности и ось промпта — побайтно

ключи юнита:  все пять рук = (1, 0)
content_hash: p7-off = p7-low = e3db15ac06a4ff04…
              p9-off = p9-low = glm-off = 5282b3b56371e582…
              между P7 и P9 РАЗЛИЧЕН

content_hash — сигнатура отрендеренных сообщений. Совпадение внутри пары доказывает, что руки видят ПОБАЙТНО ОДИН вход и различаются только эффортом; различие между парами — что ось промпта дошла до сообщений, а не осталась в конфиге.

Безопасность

Кириллица 0.9995 во всех пяти руках, CJK 0 и в сыром ответе, и в отгружаемом — включая референс, от которого план ждал зону эха. Стоп-критериев не сработало.

Референс

Остаток 2310 0.3644·7605 = 461 (20% от completion). Отрицательный — значит размышления нет вовсе, а коэффициент 0.3644 просто не подходит чужому токенизатору. План это предупреждал; для E1 референс не используется, и «R̂ = 0 по построению» остаётся верным. Проводная улика референса СНЯТА на первом юните пачки (канал включён именно там):

glm-off, тело запроса: …\"thinking\":{\"type\":\"disabled\"}}

Тем самым провод доказан для ВСЕХ ПЯТИ рук: у low-рук в теле стоит reasoning_effort:"low", у -рук этого ключа НЕТ вовсе, у референса — thinking:{type:disabled}. Три РАЗНЫХ механизма на проводе, ровно как их описывает реестр моделей.


ФРИЗ №2 — СИГНАТУРА Δprompt_tokens ЗАПИНЕНА

P7: prompt_tokens(p7-off) 5696  prompt_tokens(p7-low) 5617 = 79
P9: prompt_tokens(p9-off) 5752  prompt_tokens(p9-low) 5673 = 79
допуск ±2 токена; >20% юнитов вне допуска ⇒ ПРОБА АННУЛИРУЕТСЯ

Число совпало с единственным известным ранее — «на en дважды ровно 79». Совпадение получено на ДРУГОЙ паре, ДРУГОЙ модели и ДРУГОМ материале, то есть это независимое подтверждение, а не воспроизведение конвенции. С этого момента сигнатура — гейт, а не наблюдение.


ДЕНЬГИ ПЕРЕД ПАЧКОЙ

база (стабилизированная)     $0.308102
вне текущих баз              $0.018243
p7-off                       $0.064052
p7-low                       $0.025603
p9-off                       $0.034018
p9-low                       $0.013382
glm-off                      $0.012870
─────────────────────────────────────
ИЗРАСХОДОВАНО                $0.476269   из $9.50   ·   остаток $9.023731

юнит из пяти клеток стоил    $0.149925
проекция на 19 юнитов        $2.8486
ПРОЕКЦИЯ ИТОГА               $3.3248     из $9.50

Клетка втрое дешевле сметы. План закладывал $7.5 на крест из расчёта ∅ $0.09 и low $0.05; факт — ∅ $0.0340.064 и low $0.0130.026. Причина в том, что low режет размышление сильнее закладывавшегося. Это НЕ основание добирать юниты: рамка выборки заморожена диапазоном глав, и §12 промта запрещает добор после просмотра чисел. Остаток санкции остаётся неизрасходованным.


ИТОГ ПАЧКИ И КУДА СМОТРЕТЬ ДАЛЬШЕ

Пачка отработала 19 юнитов (юнит 1 куплен пред-полётом), итого 100 клеток. Наборы ключей юнитов побайтно одинаковы во всех пяти руках — блокировка трудности выдержала все сто клеток. Израсходовано $5.524817 из санкции $9.50; остаток $3.98 НЕ добирался (рамка заморожена диапазоном глав, добор после чисел запрещён §12 промта).

Результат, реестр ошибок и всё, что не удалось, — в отчёте docs/experiments/23-editor-tier.md §Д54. Здесь он не дублируется: одно число в двух местах рано или поздно разойдётся.

Отчёт и запись в docs/PROGRESS.md НЕ ЗАКОММИЧЕНЫ намеренно: §12 промта разрешает этой сессии единственный класс коммитов — пре-рег-фриз (c08b547, 590256a). Лендит оркестратор.

Адверсариальный проход по готовому отчёту (мандат §7.3) нашёл в его первой редакции ещё семь ошибок — все записаны в Д54.5 с классами. Главные три: «эхо» там, где флаг cjk_artifact не срабатывал ни разу за 100 клеток; «минимум втрое» при верхней границе ДИ ÷2.3; «21-й день» вместо 3-го в обязательном клейме вывода.