textmachine/eval/exp15/Q4A_POLYGON_ADDENDUM.md

52 lines
6.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ПОЛИГОН-АДДЕНДУМ к `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 — 34-линзовый
адверс-ревью нового драйвера ДО спенда (линзы: видимость трап-спана ОБОИМ драфтам без усечения; 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
на полн-чанке). НЕ пере-тюнить. Судейские прогоны медленные (~12 мин/ячейка полн-чанк) — заложить
**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.