From e13d4dff47a018331b9f4f63966b006f03302be5 Mon Sep 17 00:00:00 2001 From: heaven Date: Tue, 1 Sep 2026 23:19:41 +0300 Subject: [PATCH] Land plan revision four: a pre-registration built with the standing consilium, with the two instrument holes named and the ceiling left to the owner --- eval/dovodka/PLAN-01-09.md | 288 ++++++++++++++++++++----------------- 1 file changed, 153 insertions(+), 135 deletions(-) diff --git a/eval/dovodka/PLAN-01-09.md b/eval/dovodka/PLAN-01-09.md index b019d2fc..31afb50c 100644 --- a/eval/dovodka/PLAN-01-09.md +++ b/eval/dovodka/PLAN-01-09.md @@ -1,140 +1,158 @@ -# ПЛАН ФАЗЫ Д — РЕДАКЦИЯ 3, ПОДЧИНЁННАЯ РАТИФИЦИРОВАННОМУ +# ПЛАН ФАЗЫ Д — РЕДАКЦИЯ 4: ПРЕ-РЕГ РАТИФИЦИРОВАННОЙ ПРОБЫ -> Редакции 1 и 2 отвергнуты консилиумом. Разбор обеих — §5, сохранён как класс ошибок фазы. -> **Редакция 3 не изобретает следующий замер: он уже ратифицирован D39.184 п.5 (01.09).** -> Платные замеры санкционированы владельцем 01.09. +> Редакции 1–3 отвергнуты консилиумом; их разбор — §8, сохранён как класс ошибок фазы. +> Редакция 4 собрана с постоянным консилиумом (архитектор замера · скептик · казначей) и несёт +> ПРЕ-РЕГИСТРАЦИЮ, а не намерения. Платные замеры санкционированы владельцем 01.09 — ⚠ **без числа, +> и число нужно до фриза** (§6). -## 1. ЧТО ИЗМЕНИЛОСЬ +## 1. ЧТО ЭТО ЗА ЗАМЕР И ПОЧЕМУ ИМЕННО ОН -| редакция 2 | судьба | почему | +**Носитель:** 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:289`). + +* **БЛОКИРУЕТСЯ трудность:** каждая рука видит ВСЕ юниты. Реализация: один базовый прогон (черновая + волна + майнинг + терминолог), затем БД копируется ×4; черновики ре-пинятся за $0. +* **КОНТРОЛИРУЕТСЯ длина входа:** `len(draft)` и `prompt_tokens` — ковариата. ⚠ Честно: чанки движка + дают узкий диапазон (4412–6946 токенов), поэтому ось **контролируется, а не измеряется**. +* **ФИКСИРУЕТСЯ:** модель и дата вендор-доки · бинарь `tmctl` по sha · `models.yaml` по sha · + потолок вывода · `temperature 0.4` · `few_shot: false` · санитайзер ON · + ⭐ **`escalation.budget_usd: 0`** — иначе флагнутый юнит уйдёт хопом в другую модель и загрязнит руку. +* **РАНДОМИЗИРУЕТСЯ** порядок рук внутри юнита; **интерливинг во времени** — четыре клетки юнита в + окне 10–20 минут, чтобы дрейф сервинга не разошёлся между руками. В цикле `|| break` (урок Д47.6). + +**Единица наблюдения** — клетка (юнит × рука); **единица анализа** — юнит. + +⭐ **Требование §14 «потолок вывода одинаков во всех руках» выполняется само:** `stagerun.go:113-122` +даёт `base = max(EstimateTokens(draft)·2.2, min_max_tokens)`; при черновике ~7 тыс. знаков это +≈5.1 тыс. < 16000 ⇒ **16000 у всех юнитов во всех руках по построению**, ретрай 32000 тоже одинаков. + +## 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**. Ошибка ≈±2.3% видимого выхода, пренебрежима при размышлении в тысячах и заметна +лишь при `R̂ < ~500`. Коэффициент **пинится в пре-реге**. + +**Дыра 2. У движка нет проводного артефакта** — стадийный лог эффорт не печатает. Лечение: +(а) снапшот фолдит `Reasoning` и `PromptSHA256` ⇒ **у четырёх рук четыре разных `snapshot_id`**, это +запись в БД, что конфиг был в силе; (б) сигнатура `prompt_tokens(∅) − prompt_tokens(low)` по юнитам +(на en дважды ровно **79**). ⚠ Оба — косвенные; побайтной улики у движка нет. + +## 4. ПРАВИЛО РЕШЕНИЯ — ЗАПИСАНО ДО ЧИСЕЛ + +**Метрики клетки:** `R̂` · `completion_tokens` · `cost_usd` (сумма ВСЕХ строк юнита в руке, ретраи +включены) · `delivered` = знаки отгружаемого текста при годной диспозиции, иначе **0** · +`cost/delivered` · `finish` попытки 0 · `flag_reason`. + +* **E1 (главный):** по-юнитный контраст `log R̂(low) − log R̂(∅)`; **Вилкоксон знаково-ранговый**, + α=0.05 двусторонне; медиана и 95% ДИ Ходжеса–Лемана. + **Решение:** p<0.05 И ДИ вне [0.8; 1.25] ⇒ эффект есть; ДИ целиком внутри ⇒ эффекта нет + (эквивалентность); иначе ⇒ ⭐ **«НИЖЕ РАЗРЕШЕНИЯ ЗАМЕРА» — и это НЕ «эффекта нет»**. +* **E2:** то же для `log(cost/delivered)` — отдельно по попытке 0 (равный потолок) и по итогу юнита + (боевая цена). ⭐ Средний член цены за знак — константа ($1.45 за 1M знаков в пик), поэтому вся + разница рук сидит в **ρ = R̂/delivered**; ρ свободна от прайса и времени суток. +* **E3:** ось промпта — те же тесты. Прогноз, калибрующий удивление: |эффект| < ×1.25. +* **E5 (безопасность, блокирует любую рекомендацию):** доля клеток с эхом/`cjk_artifact` и с + `length` по рукам. Если у `low` эхо-клеток ≥3 сверх `∅` — **«риск эха на low» независимо от цены**. +* **Провал прибора:** сигнатура Δ`prompt_tokens` вне полосы у >20% юнитов ⇒ проба аннулируется, + деньги называются. + +**Мощность.** В кресте 2×2 контраст главного эффекта на юните имеет sd = σ (не σ√2) — поэтому n +вдвое меньше, чем в простой паре. Источник σ: **эррата Д47.7** (`23-editor-tier.md:7196`, 16 пар +`e0`/`zf`, побайтно один вход) — ⚠ **на английской паре и роли редактора; на zh не переносится**, +поэтому планируем σ=1.2 с чувствительностью 1.0/1.4. + +| σ | ×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. ГАРДЫ + +1. **Пред-полёт:** один юнит × 4 руки (~$0.25) → сигнатура Δ`prompt_tokens` в полосе · четыре разных + `snapshot_id` · кириллица ≥0.99 · эхо 0. Только потом пачка. +2. **Зелень на пустоте:** `delivered = 0` ⇒ клетка идёт в E5 и исключается из E2; если таких >20% в + руке — **прибор ОТКАЗЫВАЕТ**, а не печатает «в пределах». +3. **Эхо-гейт включён во всех руках.** ⚠ `low` ≠ выключение: мина вооружается ТУМБЛЕРОМ, а уровни + эффорта едут с размышлением включённым. Гейт всё равно остаётся. +4. **Касса:** `ceilings.book_usd` на каждую БД + `--ceiling-usd`; отказ леджера = **СТОП и вопрос + владельцу**; добор после чисел запрещён; потолок сессия не поднимает. +5. **Фриз:** пре-рег, скрипт эндпойнта, четыре `pipeline.yaml` и два `editor.md` — коммитами ДО + первой платной клетки. + +## 6. ⚠ ДЕНЬГИ — И ЗДЕСЬ НУЖНО ЧИСЛО ВЛАДЕЛЬЦА + +По фактическому леджеру холодного прогона: клетка `∅` ≈ **$0.054**, с учётом 25% обрывов на 16000 и +ретрая — эффективно ≈ **$0.09**; клетка `low` ≈ **$0.04**. Юнит (2+2) ≈ **$0.26**. + +| объём | клеток | расчётно (пик) | фактически в офф-пик | +|---|---|---|---| +| 24 юнита (~17 глав) | 96 | ≈ **$7.5** | ≈ $3.8 | +| 32 юнита (~24 главы) | 128 | ≈ **$9.9** | ≈ $5.0 | +| плюс базовый прогон | — | ≈ $0.6 | ≈ $0.3 | + +⛔ **Мои прежние сметы ($1.7 и $2.50) занижены втрое** и снимаются: они считали «выход» как видимый +текст, тогда как размышление у DeepSeek сидит ВНУТРИ `completion_tokens`. Это тот же класс, что +«смета ×10» редакции 1. + +⭐ **Вопрос владельцу, единственный блокирующий:** потолок. Рекомендация — **$11 расчётных за 32 +юнита** (MDE ×1.84 при σ=1.2); экономный вариант — **$8.5 за 24 юнита** (MDE ×2.02). Санкция +«платные замеры разрешаю» числа не содержит, а по канону потолок сессия не поднимает. + +## 7. ЧЕГО В ЗАМЕРЕ НЕТ НАМЕРЕННО + +Калибровки ставки платформы (гейчено, §14 прямо) · судейства качества — качество `low` вне скоупа, +только $0-гейты и E5 · правок `models.yaml`, capabilities, Go · смены модели, черновика, +дифф-контракта · креста «размышление вкл/выкл» пилота · сравнения с июльским базлайном как +каузального: между июлем и сегодня сменились веса модели, дефолт, маппинг и потолок — проба +разделяет рычаги СЕГОДНЯ. + +⛔ **И отдельно: из этой пробы НЕ следует рекомендация менять боевой `pipeline-c1.yaml`.** Флип там +пинит тест (`echo_mine_test.go:217`, `TestBoevoyConfigEditorDsproAndGrokReasoning`) и двигает +снапшот edit-волны ⇒ `--resnapshot` и перекупка волны. + +## 8. РЕЕСТР ОШИБОК ЧЕТЫРЁХ РЕДАКЦИЙ — сохранено, потому что класс один + +| # | что утверждал | чем опровергнуто | |---|---|---| -| «прогон 15 глав» центральным шагом | ⚠ **ПОНИЖЕН** до носителя | три из четырёх его обещаний оказались закрыты или неисполнимы (§5.2) | -| «эхо-контроль первым» | ⛔ **СНЯТ** | его клетки **уже куплены**: `coldrun-v16` дал 5 эскалаций `pro`@`low` на плотном CJK, эхо 0 | -| «засеять `first_person`/`speech`» | ⛔ **СНЯТ** | поля **мёртвые на проводе** (§5.2 п.4) | -| — | ⭐ **ДОБАВЛЕНА ратифицированная проба по четырём осям** | D39.184 п.5; ратифицированное бьёт наши планы | +| 1 | «прибор верности нужен первым» | вопрос закрыт замером: редакторы не дописывают (рост знаков −0.4% и −0.6%) | +| 2 | «проба единицы выдачи» | гипотезу опровергают наши же данные; арм запрещён; смета ×10 | +| 3 | «контур ни разу не ездил целиком» | `coldrun-v16` прошёл НАКАНУНЕ | +| 4 | «канон мерен на 1–2 главах» | я сам намерил на 25 главах подряд сутками ранее | +| 5 | «засеять `first_person`/`speech`» | поля мёртвые: не копируются в рендер, не входят в хеш | +| 6 | «движок ручку не шлёт вообще» | `capability.go:236` шлёт `low|medium|high`; доказано на проводе | +| 7 | «гейт запретит» | гейт в другом тесте и пинит только шиппинг-конфиги | +| 8 | «риг потерял бы роль редактора» | `tenant_panel/prompts.py:143` грузит боевой `editor.md` | +| 9 | «эхо на `pro`@`low` не мерено» | 5 хопов в `coldrun-v16`, эхо 0 — ⚠ но роль переводчика, не редактора | +| 10 | сметы $1.7 / $2.50 | занижены втрое: размышление внутри `completion_tokens` | -## 2. ШАГ 1 (ГЛАВНЫЙ). РАТИФИЦИРОВАННАЯ ПРОБА РЕДАКТОРА ПО ЧЕТЫРЁМ ОСЯМ - -**Носитель решения:** D39.184 п.5 — «Следующий платный замер — контролируемая проба редактора по -ЧЕТЫРЁМ осям (§14 отчёта холодного прогона): трудность чанка БЛОКИРОВАТЬ, длину входа -КОНТРОЛИРОВАТЬ, промпт по SHA, эффорт `off` против `low`». - -**Вопрос, на который она отвечает:** ПОЧЕМУ редактор дорог. Не «сколько продавать» (это гейчено -отдельно) и не «кто лучше» (это уже мерено). - -### 2.1 Дизайн — четыре оси с РАЗНЫМИ ролями - -| ось | роль | как реализуется | -|---|---|---| -| **трудность чанка** | **БЛОКИРОВАТЬ** | парный дизайн: **каждая рука видит ОДНИ И ТЕ ЖЕ чанки**. Не рандомизация — блокировка: размышление растёт с найденной работой (rho +0.781), и рандомизация даст эффекту утонуть | -| **длина входа** | **КОНТРОЛИРОВАТЬ и МЕРИТЬ** | страты по длине; длина входит в модель **ковариатой**, не выбрасывается — иначе её ×2.78 осядет в остатке | -| **промпт** | фактор | июльский `editor.md` (`e89874b^`) против сегодняшнего — **оба под одной меткой `v3-discourse-reflow`**, поэтому брать **по SHA**, не по метке | -| **эффорт** | фактор | `"off"` (= вендор-дефолт `high`) против явного `"low"` | - -**Три требования, каждое куплено ошибкой холодного прогона:** -1. **Потолок вывода одинаков во всех руках.** В том прогоне он различался (8000 против 16000) и - БИЛ в обеих руках — один этот конфаунд убил каузальный вывод. -2. **Цена считается за ДОСТАВЛЕННЫЙ ЗНАК, а не за вызов.** Цена вызова смешивает «дороже думает» и - «больше отдаёт»: на 4 вызовах вышел спред ×7.6 по юнитам. -3. **n считается от РАЗБРОСА.** Квирки пинят разброс размышления **×163 на побайтно одном входе**; - n=3–4 для такого распределения непригодны по построению. - -### 2.2 ⛔ Где проба исполняется — и почему НЕ движком - -§14 пишет «эффорт — это ДАННЫЕ, правки Go не требуется». **Для движка это неверно, и вот улика:** -у `deepseek-v4-pro` в `models.yaml` нет `capabilities.reasoning` ⇒ резолв в `ReasoningNone` ⇒ -**движок ручку не шлёт вообще**. Описать capability нельзя: это **намеренная защита под тестом** -(`echo_mine_test.go:218`=`never armed`, `TestDeepSeekEchoMineRejected`, гоняно — `ok 0.008s`). - -⇒ **Проба исполняется полигонным ригом** (`eval/dovodka/rol.py`), который ручку шлёт своим проводом -и уже доказал это бесплатной уликой (`prompt_tokens` 3270 → 3191 при побайтно одинаковых messages). -Это снимает конфликт с гардрейлом: мы ничего не снимаем в движке. -⚠ **Цена переноса:** риговый провод ≠ движковый, и вывод о ЦЕНЕ движка переносится только как -направление. Записать в оговорки замера. - -### 2.3 Мощность и n — считается ДО покупки - -Парность гасит межчанковый разброс, поэтому считаем по разбросу **внутри пары**. Известное: sd -логарифма объёма размышления на повторах одного входа = **1.02** (Д49, 16 пар). - -| ожидаемый эффект `off`→`low` | log-эффект | n пар при 80% мощности | -|---|---|---| -| ×2.5 (наблюдалось между блоками, конфаундировано) | 0.92 | **≈ 20** | -| ×2.0 | 0.69 | ≈ 35 | -| ×1.4 (наблюдалось внутри блока) | 0.34 | ≈ 140 ⛔ не влезает | - -⇒ **Пре-регистрируем n = 24 пары** (запас над 20). Если истинный эффект ×1.4 — проба его не увидит, -и **это записывается как исход «величина ниже разрешения замера», а не как «эффекта нет»**. - -### 2.4 Смета и гард - -24 пары × 2 фактора промпта = 4 руки по 24 клетки = **96 вызовов**. По фактическому расходу -редактора на чанк (~4 300 вход / ~2 900 выход) и нынешнему прайсу `pro`: пик ≈ **$1.7**, офф-пик -≈ **$0.85**. ⛔ Гнать в офф-пик. Потолок кассы — **$2.50**, гард обязателен, пре-рег фризится -коммитом ДО первого платного вызова. - -### 2.5 Правило решения — записывается ДО чисел - -* **Эндпойнт 1 (главный):** отношение объёма размышления `low`/`off`, парно, с длиной входа - ковариатой. Порог: двусторонний знаковый тест p<0.05 И медианное отношение вне [0.8; 1.25]. -* **Эндпойнт 2:** цена за доставленный знак — то же правило. -* **Эндпойнт 3 (промпт):** тот же тест по оси SHA промпта. -* ⛔ **Гейт против зелени на пустоте:** нулевой знаменатель ⇒ прибор ОТКАЗЫВАЕТ, а не печатает - «в пределах». -* ⛔ **Эхо-гейт включён во всех руках** — последняя линия против тихого провала. ⚠ `low` ≠ `off`: - мина вооружается ВЫКЛЮЧЕНИЕМ размышления, а три уровня эффорта едут с ним включённым, поэтому - арм `low` мину не вооружает — но гейт всё равно остаётся. - -## 3. ШАГ 2. ПРОГОН 15 ГЛАВ — текст владельцу и единственный неповторённый элемент - -Понижен из центрального, но не снят: он даёт то, чего не даёт никакой замер — **15 новых глав**. - -**Что в нём подлинно ново** (остальное закрыто, см. §5.2): редакторская волна боевого профиля -**доведена до конца на книге С ЗАСЕЯННЫМ БАНКОМ**. `coldrun-v16` шёл на **пустом** сиде и встал на -3 юнитах из 14. - -**Исполнение:** главы 26–40 тома 1 (непереведённые, 39 914 знаков), запуск **из `textmachine-main`** -(в polygon нет `backend/configs/langpacks/ru`, бэкенд отстаёт на 65 коммитов), одной покупкой -(`--max-units 18`), потому что вторая покупка на майнящей книге требует `--resnapshot`. -Смета по леджеру ≈ **$1.7** пик / ≈$0.85 офф-пик, потолок **$2.50**. -⚠ **Мина нумерации:** движок не умеет смещение глав — срез пронумеруется 1–15, читать как 26–40. - -**Прибор:** `bank.py` (добавить третью запись в `RUNS` + маппинг глав +25) · движковые $0-гейты · -`retrieval_state`. - -## 4. ШАГ 3. УБОРКА — $0 - -1. ⭐ **Записать `coldrun-v16` в отчёт фазы.** Прогон 31.08 с полным контуром, отчёт фазы упоминает - его **0 раз** — иначе следующая сессия переоткроет его восьмой раз. -2. **Занести замер объёма правки в скрипт** (числа Д52.2 сняты в консоли, носителя нет). Взять - готовое: `eval/role_topology/battery.py:523` (`check_noop`), `check_numbers`. -3. **Пинг оркестратору:** `docs/architecture/04-unhappy-paths.md:54` числит строку «гладкие - галлюцинации-дописывания» с галочкой ✅ при неисполненном коде; `docs/PROGRESS.md:610` несёт - снятую 30.08 сильную форму «полей пола в банке нет вовсе». -4. **Поправить Д32.16** — его формулировка «без засева характер-листов замер ложноотрицателен» - опирается на поля, которые на провод не идут (§5.2 п.4). - -## 5. РАЗБОР ОТВЕРГНУТЫХ РЕДАКЦИЙ — сохранено как класс ошибок - -### 5.1 Редакция 1 (отвергнута: «не двигает продукт») -Прибор верности — вопрос закрыт замером (наши редакторы не дописывают: рост знаков −0.4% и −0.6%). -Проба единицы выдачи — гипотеза опровергнута нашими же данными (`pro` на единице ~500 токенов дал -те же 35% изменённого, что и на главе), арм запрещён гардрейлом D39.87, конфаунд двух факторов, -смета занижена ×10. - -### 5.2 Редакция 2 (отвергнута: три обещания из четырёх несостоятельны) -1. ⛔ **«Контур ни разу не ездил целиком» — ЛОЖНО.** `coldrun-v16` (31.08): черновик + банкнота + - терминолог + голосовой флаггер + редактор `pro`, $0.436, `draft=36 edit=5 terminology=9`. -2. ⛔ **«Канон мерен на 1–2 главах» — ЛОЖНО, и это моя же фраза:** Д50.2 намерил его на **25 главах - подряд** сутками ранее. -3. ⛔ **«Ловит ли банкнота класс `term`» — отвечено дважды, $0:** `coldrun-a` 94 из 150, - `coldrun-v16` 33 из 53 с пометкой «кандидат только банкноты». -4. ⛔ **Засев `first_person`/`speech` не работает по построению:** поля пишутся в стор, но **не - копируются в рендерящий `entry`** (`memory.go:283-299` копирует только `gender`), **не входят в - content-hash** (`memory.go:427-442`) и не читаются флаггером. Настоящий носитель — секции - `voices:`/`addresses:` сида, которых нет ни в одном сиде, и они доходят **только до $0-флаггера**: - инъекция голоса захардкожена выключенной без ручки (`bankmaterialize.go:291-294`, D21 п.2). - -### 5.3 Сквозной класс — восемь случаев за трое суток -**Показания инструмента (или собственная память) приняты за факт о мире.** Реестр — Д52.5. -Восьмой случай — этот план: я утверждал отсутствие того, что измерил сам сутками ранее. +**Сквозной класс — один:** показания инструмента, собственной памяти или своей ветки приняты за +факт о мире. Лечение, выведенное из десяти случаев: **отрицательный результат предъявляется с +положительным контролем**, а прежде «этого нет» — смотреть каталог артефактов, а не только доки +своей ветки.