diff --git a/eval/exp15/Q4A_POLYGON_ADDENDUM.md b/eval/exp15/Q4A_POLYGON_ADDENDUM.md new file mode 100644 index 0000000..d77c33f --- /dev/null +++ b/eval/exp15/Q4A_POLYGON_ADDENDUM.md @@ -0,0 +1,52 @@ +# ПОЛИГОН-АДДЕНДУМ к `docs/POLYGON_Q4A_MINI_SESSION_PROMPT.md` (exp15/Q4a) + +> Приложить к промту оркестратора при запуске Q4a-мини-сессии. **НЕ отменяет и НЕ пере-сочиняет +> замороженный дизайн** (pro-пин, два арма, сравнение с A0-flash, судьи, §D5-правило — всё в силе). +> Это **только методологическая дисциплина** — прямые уроки коррекции exp15 REV.2 (2026-07-18), где +> артефакт рига (`HEAD_CHARS=1100`) и пропущенный шум-пол дали ложный заголовок «−0.564», пойманный +> лишь пост-хок верификацией оркестратора. Цель аддендума — чтобы Q4a не повторил это. При конфликте с +> промтом оркестратора — промт побеждает; спорное — пингом оркестратору ДО спенда. + +## 1. ШУМ-ПОЛ ОБЯЗАТЕЛЕН (пре-рег §1.5) — самый дорогой урок сессии +Метрики Q4a — «доля flash-провалов, что pro-draft чинит» и «дельта (а)−(б)» — floor-чувствительны: судья +флипает вердикт на ЭКВИВАЛЕНТНЫХ входах (в основном прогоне mean|Δ| судьи на A0 vs A0′ = **0.126**, БОЛЬШЕ +всех интересующих эффектов). Без пола любую дельту примешь за реальную (ровно то, что сломало Q1b/Q3a). +- **Померить пол ДО интерпретации:** судить одну и ту же пару драфтов повторно (test-retest) ИЛИ + flash-seed1 vs flash-seed2 на тех же fidelity-трапах → **доля «ложных починок»** (судья зовёт wrong→correct + на идентичном/эквивалентном тексте). Это и есть false-positive-rate метрики «pro чинит». +- **Правило:** «pro чинит X%» и «(а)−(б)» интерпретируются ТОЛЬКО как превышение над этим полом. Эффект + ≤ пола = «не отличим от судейского шума», НЕ ратифицируется (даже если точка красивая). +- Дельта (а)−(б) особенно уязвима (разница двух редакторских исходов на близких входах) — репортить с CI. + +## 2. АДВЕРСАРИАЛЬНЫЙ РЕВЬЮ `q4a_*.py` ДО ПЕРВОГО ПЛАТНОГО ВЫЗОВА (2-рубежная дисциплина) +Артефакт HEAD_CHARS пережил self-review-1; пойман только внешней верификацией. Для Q4a — 3–4-линзовый +адверс-ревью нового драйвера ДО спенда (линзы: видимость трап-спана ОБОИМ драфтам без усечения; per-vote +персист вердиктов; бюджет-кап/гейт; маппинг трап→чанк корректен и не роняет трапы молча). Дёшево, окупилось. + +## 3. СКОУП ТРАП-МАТЕРИАЛА — РАЗРЕШИТЬ ЯВНО ДО ГЕНЕРАЦИИ (реальная развилка) +Батарея exp14b лежит на **материале exp14** (`/home/ubuntu/books/gu-zhenren/exp14/`), НЕ на S2′. А сравнение +Q4a = pro-draft vs **A0-flash на ТЕХ ЖЕ чанках** = S2′ flat-чанки (`flat_a0_30`). Два несовместимых пути: +- **(A)** локализовать трап-ТИПЫ exp14b (a1 двойное-отрицание, классы инверсий, T-inv-контроль) **в S2′** + flat-чанках (майнинг/детект) → сопоставимо с exp15-анкорами; ИЛИ +- **(B)** гнать Q4a на материале exp14, реюзя точные трап-определения → сопоставимо с exp14b, но НЕ с S2′. +«Реюз exp14b-батареи» в промте не различает (A)/(B). **Выбрать явно и записать в §7-Q4a-аддендум как девиацию;** +при сомнении — пинг оркестратору. (Логика сравнения «на тех же чанках, что A0-flash» → по умолчанию склоняет к (A).) + +## 4. Практические (экономят деньги/wall-clock) +- **Flash-драфты УЖЕ есть:** `anchors/flat_a0_30.db` stage='draft' (порт-валидирован байт-в-байт, §7.2). + Q4a генерит **только pro-драфты**; flash НЕ пере-гонять. Один pro-draft-набор питает оба арма + (арм (б) = сам pro-draft; арм (а) = pro-draft → editor glm-5). +- **mistral throttling:** интервал уже поднят **1.3→2.6s** в `exp15_llm.py` (был 48% retry@1.3s, max lat 64.7s + на полн-чанке). НЕ пере-тюнить. Судейские прогоны медленные (~1–2 мин/ячейка полн-чанк) — заложить + **wall-clock**, длинные джобы чекать периодически (не ждать пассивно финальную нотификацию). +- **Свой Spender: кап $2, seed=0.** НЕ наследовать глобальный seed $9.82 / потолок $14.5 из `judge_run.py` + (это кап exp15; Q4a — отдельный бюджет ВНЕ него). Леджеры `q4a_*.jsonl`, персистить ВЕСЬ спенд вкл. пробы. +- **Windowing тут менее опасен, чем в Q1b:** pro и flash на ОДНОЙ нарезке → трап в одной позиции у обоих → + симметрично, оракул-подобной асимметрии нет. Всё равно полно-evidence (не HEAD_CHARS-класс); переиспользуй + `judge_run.py`-хелперы (`db_drafts`, `excerpt(...,full=True)`, `judge_cell` с per-vote), НЕ редактируя их. + +## 5. Что переиспользовать из готового (не писать заново) +- Судейский слой: `judges.py` (per-vote персист, gate-block≠parse-fail, cat/ev нормализация — уже пофикшены). +- LLM/бюджет: `exp15_llm.py` (`MODELS['deepseek-v4-pro']` заведён; additive-биллинг grok/kimi; предикт-гейт). +- Полн-evidence/анкор-guard/full-режим: `judge_run.py` (как образец; для Q4a — свой `q4a_judge.py`, additively). +- Провенанс v1/v2 и §7-структуру отчёта — как шаблон аддендума §7-Q4a.