Apply the skeptic's pre-freeze list: name the real mechanism that keeps drafts free, fix the stop condition, drop the unreachable branch, and put every ceiling in peak terms

This commit is contained in:
heaven 2026-09-01 23:40:41 +03:00
parent d1819b0d04
commit 9c5bc853f6

View file

@ -25,23 +25,43 @@ D39.170) — она в `main`; это следствие расхождения
| P₉·E_low | тот же | `"low"` | `low` |
Промпты различаются одной строкой; **метка `v3-discourse-reflow` у обоих одна**, поэтому берём по
SHA — снапшот их различает (`snapshot.go:289`).
SHA — снапшот их различает (`snapshot.go:288`=`prompt_sha256`).
* **БЛОКИРУЕТСЯ трудность:** каждая рука видит ВСЕ юниты. Реализация: один базовый прогон (черновая
волна + майнинг + терминолог), затем БД копируется ×4; черновики ре-пинятся за $0.
волна + майнинг + терминолог), затем БД копируется ×4.
**Черновики выживают за $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`.
* **КОНТРОЛИРУЕТСЯ длина входа:** `len(draft)` и `prompt_tokens` — ковариата. ⚠ Честно: чанки движка
дают узкий диапазон (44126946 токенов), поэтому ось **контролируется, а не измеряется**.
* **ФИКСИРУЕТСЯ:** модель и дата вендор-доки · бинарь `tmctl` по sha · `models.yaml` по sha ·
потолок вывода · `temperature 0.4` · `few_shot: false` · санитайзер ON ·
**`escalation.budget_usd: 0`** — иначе флагнутый юнит уйдёт хопом в другую модель и загрязнит руку.
`escalation.budget_usd: 0` — ⚠ **обоснование прежней редакции («иначе флагнутый юнит уйдёт хопом»)
ЛОЖНО и снято: редактор эскалировать не может по построению** (`pipeline.go:1012`=`escalate_to is
only allowed on a translator role`). Настройка инертна для edit-волны; держим её как гигиену, а не
как защиту.
* **РАНДОМИЗИРУЕТСЯ** порядок рук внутри юнита; **интерливинг во времени** — четыре клетки юнита в
окне 1020 минут, чтобы дрейф сервинга не разошёлся между руками. В цикле `|| break` (урок Д47.6).
окне 1020 минут, чтобы дрейф сервинга не разошёлся между руками.
**Останов цикла НЕ по коду выхода:** штатная остановка по объёму приходит **и как 0, и как 2**,
различает её только строка `VOLUME CEILING:` в выводе. `|| break` (урок Д47.6) здесь либо рвёт
цикл на первом штатном стопе, либо не рвёт никогда ⇒ **цикл разбирает вывод на `VOLUME CEILING:`**.
⚠ Окно 1020 мин достижимо не всегда: латентности edit-вызовов 43216 с, ретрай добавляет ~200 с
юнит с обрывом в обеих `∅`-руках упирается в верх окна.
**Единица наблюдения** — клетка (юнит × рука); **единица анализа** — юнит.
**Требование §14 «потолок вывода одинаков во всех руках» выполняется само:** `stagerun.go:113-122`
**Требование §14 «потолок вывода одинаков во всех руках» выполняется само:** `stagerun.go:109-125`
даёт `base = max(EstimateTokens(draft)·2.2, min_max_tokens)`; при черновике ~7 тыс. знаков это
≈5.1 тыс. < 16000 **16000 у всех юнитов во всех руках по построению**, ретрай 32000 тоже одинаков.
≈4.5 тыс. < 16000 **16000 у всех юнитов во всех руках по построению**, ретрай 32000 тоже одинаков.
⚠ Числа прежней редакции были не те: реальные черновики **4276171 знак** (не «~7 тыс.»), а
«44126946» — это `prompt_tokens` трёх edit-вызовов (исходник + черновик + системное), не длина
черновика. Механизм ломается только выше ~21 800 русских знаков или ~7 300 CJK-знаков эха.
## 3. ⛔ ДВЕ ДЫРЫ ПРИБОРА — БЕЗ НИХ ЗАМЕР НЕ ИЗМЕРИТ СВОЙ ПРЕДМЕТ
@ -53,7 +73,13 @@ SHA — снапшот их различает (`snapshot.go:289`).
**Лечение без правки Go, с замеренной точностью:** `R̂ = completion_tokens 0.3644·len(response_text)`.
Коэффициент — видимый выход pro-редактора на zh→ru; **пере-снят мной независимо: 0.3644 токена/знак,
n=16, sd 0.0069**. Ошибка ≈±2.3% видимого выхода, пренебрежима при размышлении в тысячах и заметна
лишь при `R̂ < ~500`. Коэффициент **пинится в пре-реге**.
лишь при малом размышлении. Коэффициент **пинится в пре-реге**.
**Границы формулы, названные до покупки** (проверено независимо на 185 клетках рига с отчётным
`reasoning_tokens`: 0.3670.369, sd 0.0070.010): (1) **любой CJK в выходе** ломает оценку — иероглиф
≈1 токен, видимая часть недооценивается, `R̂` завышается; направление консервативно для E1, но
раздувает клетки E5; (2) при `R̂ < ~700` относительная ошибка достигает 2070% — у мелких клеток
`low` вывод о величине не делается; (3) брать сырую строку попытки, **не `sanitized_export`** — та
несёт обрезанный текст и пустой `usage_json`; (4) «±2.3%» занижено: худшая клетка дала **5.3%**.
**Дыра 2. У движка нет проводного артефакта** — стадийный лог эффорт не печатает. Лечение:
(а) снапшот фолдит `Reasoning` и `PromptSHA256`**у четырёх рук четыре разных `snapshot_id`**, это
@ -67,17 +93,33 @@ n=16, sd 0.0069**. Ошибка ≈±2.3% видимого выхода, пре
`cost/delivered` · `finish` попытки 0 · `flag_reason`.
* **E1 (главный):** по-юнитный контраст `log R̂(low) log R̂(∅)`; **Вилкоксон знаково-ранговый**,
α=0.05 двусторонне; медиана и 95% ДИ Ходжеса–Лемана.
**Решение:** p<0.05 И ДИ вне [0.8; 1.25] эффект есть; ДИ целиком внутри эффекта нет
(эквивалентность); иначе ⇒ ⭐ **«НИЖЕ РАЗРЕШЕНИЯ ЗАМЕРА» — и это НЕ «эффекта нет»**.
α=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) и потому что сама
полоса — заимствованная конвенция биоэквивалентности, к объёму размышления не обоснованная.
Полоса остаётся **описательной**: попадание в неё печатается, решения не несёт.
* **E2:** то же для `log(cost/delivered)` — отдельно по попытке 0 (равный потолок) и по итогу юнита
(боевая цена). ⭐ Средний член цены за знак — константа ($1.45 за 1M знаков в пик), поэтому вся
разница рук сидит в **ρ = R̂/delivered**; ρ свободна от прайса и времени суток.
(боевая цена). ⭐ Средний член цены за знак — константа, поэтому разница рук сидит в
**ρ = R̂/delivered**. ⚠ Оговорка: 24-я клетки юнита бьют префикс-кэш, вход дешевеет ~$0.0060.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 и на риге. ⇒ **Пред-полёт ЗАМЕРЯЕТ сигнатуру и пинит полосу коммитом**, и лишь
после этого она становится гейтом.
**Мощность.** В кресте 2×2 контраст главного эффекта на юните имеет sd = σ (не σ√2) — поэтому n
вдвое меньше, чем в простой паре. Источник σ: **эррата Д47.7** (`23-editor-tier.md:7201`=`sd одного розыгрыша = 1.02`, 16 пар
@ -108,14 +150,27 @@ n=16, sd 0.0069**. Ошибка ≈±2.3% видимого выхода, пре
## 6. ⚠ ДЕНЬГИ — И ЗДЕСЬ НУЖНО ЧИСЛО ВЛАДЕЛЬЦА
По фактическому леджеру холодного прогона: клетка `∅`**$0.054**, с учётом 25% обрывов на 16000 и
ретрая — эффективно ≈ **$0.09**; клетка `low`**$0.04**. Юнит (2+2) ≈ **$0.26**.
**Все числа ниже — в ПИКОВЫХ терминах, и иначе быть не может:** леджер движка букирует пик всегда
(`models.yaml:180`=`держим пик`). Потолок кассы, `--ceiling-usd` и число владельца — тоже пиковые;
офф-пик — это счёт вендора по факту, а не потолок.
| объём | клеток | расчётно (пик) | фактически в офф-пик |
|---|---|---|---|
| 24 юнита (~17 глав) | 96 | ≈ **$7.5** | ≈ $3.8 |
| 32 юнита (~24 главы) | 128 | ≈ **$9.9** | ≈ $5.0 |
| плюс базовый прогон | — | ≈ $0.6 | ≈ $0.3 |
По леджеру холодного прогона: клетка `∅`**$0.054** (среднее четырёх ненулевых edit-строк, включая
ретрай на 32000; попытка 0 — $0.048 при n=3); обрыв случился у **1 строки из 4**.
**Клетка `low` ≈ $0.04 — ИСТОЧНИКА НЕТ:** движковых edit-вызовов на `low` не существует вовсе, а
хопы на `low` — роль переводчика ($0.0040.040). Это **предположение, а не замер**, и его проверяет
пред-полёт. Юнит (2+2) ≈ **$0.26** при этом предположении.
| строка | клеток | расчётно, ПИК |
|---|---|---|
| пред-полёт (1 юнит × 4 руки) | 4 | ≈ **$0.25** |
| 24 юнита (~17 глав) | 96 | ≈ **$7.5** (вкл. 20% запаса) |
| 32 юнита (~24 главы) | 128 | ≈ **$9.9** (вкл. 20% запаса) |
| базовый прогон | — | ≈ $0.40.6 |
**Чувствительность, названная до покупки:** если `low` на zh режет размышление слабо (×1.4,
как внутри блока Д47), клетка `low` дорожает до $0.050.065 ⇒ 32 юнита ≈ **$9.510.5 до запаса**.
У рекомендации «$11» остаётся зазор 515%, и гард с заметной вероятностью остановит раньше 32-го
юнита. Это штатный исход: **стоп и вопрос владельцу, добор после чисел запрещён.**
**Мои прежние сметы ($1.7 и $2.50) занижены втрое** и снимаются: они считали «выход» как видимый
текст, тогда как размышление у DeepSeek сидит ВНУТРИ `completion_tokens`. Это тот же класс, что
@ -148,7 +203,7 @@ n=16, sd 0.0069**. Ошибка ≈±2.3% видимого выхода, пре
| 5 | «засеять `first_person`/`speech`» | поля мёртвые: не копируются в рендер, не входят в хеш |
| 6 | «движок ручку не шлёт вообще» | `capability.go:236` шлёт `low|medium|high`; доказано на проводе |
| 7 | «гейт запретит» | гейт в другом тесте и пинит только шиппинг-конфиги |
| 8 | «риг потерял бы роль редактора» | `tenant_panel/prompts.py:143` грузит боевой `editor.md` |
| 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` |