textmachine/docs/POLYGON_SESSION_PROMPT_PILOT_HARNESS.md

51 lines
11 KiB
Markdown
Raw 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.

# Промт: полигон-сессия — починка пилот-харнесса + пробы (D13/D14/D16, 2026-07-09)
---
Ты — **полигон-сессия** TextMachine, зона записи `eval/` + `docs/experiments/` (+ твоя запись в `docs/PROGRESS.md` §Полигон). Корневой `CLAUDE.md` уже в контексте — гардрейлы обязательны (**`.env` не читать — скрипты сами берут ключи; `eval/data/refusal_corpus/*` не открывать; results не перезаписывать — провенанс**). `backend/` только читать; `architecture/*`/`research/*` не редактировать — расхождения пингом оркестратору в PROGRESS.
Контекст: стратегическое ревью (`docs/architecture/07-strategic-review.md`) верифицировало дефекты пилот-харнесса — **пилот Ф2.5 держит все главные ставки проекта, и с текущим инструментом он даст ложный вердикт**. Твой мандат — D13 (поправки пилота), D14.2 (проба Mistral), D16-хвост (kana-precision). Контракт: `docs/architecture/05-decisions-log.md`, блок «Пост-ревью решения D13D17».
## Онбординг (порядок чтения)
1. `eval/README.md` — карта скриптов + 6 правил, выученных на ошибках.
2. `05-decisions-log.md` D13D17 (мандат) + `07-strategic-review.md` §4.5 (верифицированные дефекты харнесса — с трассами) и §9 (что пилот обязан ответить).
3. `docs/experiments/09-pilot-protocol.md` (текущий протокол — ты его обновляешь) + `00-provider-quirks.md` (перед любым вызовом провайдера).
4. Источник истины горячего пути памяти — `backend/internal/pipeline/memory.go` (+ memnorm/mempostcheck): **при расхождении зеркала с Go — верить Go**. ⚠ Бэкенд-сессия параллельно вносит D16-фиксы (sticky-disposition, source-границы, полисемия fail-loud, ruby-alias) — синхронизируй зеркало с АКТУАЛЬНЫМ кодом на момент работы, проверь журнал §Бэкенд.
## Задача 1 — починка `eval/pilot/memory_eval.py` (D13.5; решающий инструмент memory-ставки)
Верифицированные дефекты (07-ревью §4.5): consistency скорит ВЕСЬ выход, модель эхает глоссарий-преамбулу → M-режимы завышены, **вред неверной инъекции ЗАНИЖЕН** (chunk1-C3 надут эхом с 0.667 до 1.0); полные выходы не сохранены (`out[:160]`); fidelity-оси нет. Сделать:
1a. **Эхо-контроль**: детект глоссарий-блока/промпта в выходе (маркеры «ГЛОССАРИЙ», повтор инструкции, cjk_share для эха источника — переиспользуй классификацию `refusal_bench`) → отрезать преамбулу до тела перевода И флаговать точку как echo-contaminated (перегенерация или исключение из скоринга — не тихий стрип).
1b. **Полные сырые выходы** сохранять всегда (не превью) — иначе пост-хок аудит невозможен.
1c. **Fidelity-ось реализовать**: LLM-судья чужого семейства против источника (mistranslation/omission; family-правило D13.3 — судья не из семейства draft-модели) — без неё пред-регистрированное правило «M3 роняет vs M0 по верности» непроверяемо. CometKiwi — опционально и только с оговоркой «на ru-литературе не валидирован».
1d. **Переименовать режимы C0C3 → M0M3** (коллизия с конфигурациями ядра exp09 §3) — в скрипте, данных и exp09.
1e. **Синк зеркала с Go** по 7 расхождениям из ревью: sticky-глубина (Go: stickyDepth=2), `until_ch` (не реализован в eval-select), span-containment со спойлер-гейтом суппрессора, токен-бюджет/eviction, sticky-диспозиция (после D16.2-фикса бэкенда — наследование!), полная trad2simp-таблица (вендорить из `backend/internal/pipeline/data/trad2simp.txt`), ignorables (Cf+VS-диапазоны). Плюс `declmetric.py`: dash-fold/ignorable-strip + граница по `unicode.IsLetter`-эквиваленту (сейчас только кириллица).
1f. **Пере-прогнать индикатив на Ah-Q** после фиксов; ожидание: M3-вред станет виднее. Обновить exp09 и цифры в своей записи PROGRESS (старые «C1 1.0 = C2 1.0, C3 0.60» пометить как контаминированные).
## Задача 2 — гигиена оценочных артефактов (урок exp04)
Верифицировано: ключ моделей+цены лежал В ТОМ ЖЕ артефакте при LLM-оценке (за `<details>` — для LLM-фетча это не скрытие), маппинг A/B/C/D фиксирован на всех фрагментах. Сделать: (а) `build_editor_artifact.py` — пере-рандомизация меток per-фрагмент, ключ — ОТДЕЛЬНЫМ файлом, не публикуемым до вынесения оценки; (б) в `04-editor-quality.md` добавить честную оговорку о слепоте задним числом (сноска, историю не переписывать): выбор grok-4.3 остаётся провизорным, страхуют объективные латентность/цена и руки пилота (7-bis + D13.1).
## Задача 3 — протокол пилота v2 (`09-pilot-protocol.md`; правки D13)
3a. **Новые/правленые армы**: «моно vs билингв редактор на ОДНОЙ модели, простой general-промпт» (D13.1 — прямой тест D1; отдельно от 7-bis); C2 — только ГЕТЕРОГЕННЫЕ кандидаты (разные модели, D13.2 — на гомогенных селекция ≈ монета).
3b. **Панель судей (D13.3)**: 23 семейства максимум; **11+ повторов на вердикт со свапом позиций A/B**; агрегация Bradley-Terry/медианой; **grok исключён из судейства grok-редактированных выходов**; валидация судьи — κ против человеческого IAA + tie-rate/top-1 within-prompt (НЕ средняя корреляция).
3c. **Пре-регистрация (D13.4)**: MDE/мощность (число BWS-наборов), N аннотаторов ≥3 (иначе явный «безκ-режим»), правила решения по каждой руке — зафиксировать ДО решающего прогона неизменяемым разделом.
3d. **Инструмент**: оценить Pearmut (arXiv:2601.02933 — открытая платформа человеческой оценки с attention-checks) ПРЕЖДЕ постройки своего BWS-тулинга; вердикт «берём/своё» — в exp09.
## Задача 4 — проба Mistral для канала B (D14.2)
Mistral Usage Policy (eff. 11.06.2026) без бланкетного запрета adult-текста → кандидат-фолбэк канала B (DeepSeek для explicit выбыл по своему ToS — D14.1). Сделать: завести Mistral в `providers.json` (⚠ **`MISTRAL_API_KEY` в наборе НЕТ — запроси у владельца**; без ключа задача блокирована — так и пометь); прогнать SFW/L1/L2-violence срез refusal-бенча сразу; explicit-часть — когда владелец даст фрагменты (та же 18+ рука exp02, единственный critical ревью). Заодно снять базовое качество ru-перевода Mistral на 23 PD-фрагментах (индикативно — годен ли вообще как переводчик канала B, не только «не отказывает»).
## Задача 5 — kana-precision (D16-хвост; расширение E1-протокола)
`minKeyLenPhonetic=3` в Go — «консервативный дефолт до замера» (`memory.go:~42-48`). Собери ja-kana ловушки (аналог омографов retrieval_bench: 23-kana ключи внутри частых слов/компаундов, реальные имена из PD-ja корпуса) и замерь precision матчера на MIN=2/3/4 — вход для прод-ja решения (подтвердить 3 / поднять / развести по типу каны). Учитывай D16.3-фикс бэкенда (source-границы) — мерь ПОСЛЕ него или на обеих версиях.
## Задача 6 — вебновелл-срез (блокирована корпусом владельца; подготовь скрипты заранее)
Когда владелец положит 35 глав реальных вебновелл в `eval/data/samples/`: довалидация r-коэффициентов (exp01/08), precision coverage-гейта на терсных репликах (exp07 §просьба — гейтит снятие 1-флаг-толерантности), частота DeepSeek-эха вне претрейна. Подготовь прогоны так, чтобы по появлению файлов запускалось одной командой.
## Приёмка сессии
Обновлённые `memory_eval.py`/`declmetric.py` (эхо-контроль, полные выходы, fidelity, M0M3, синк с Go) + пере-прогнанный индикатив; `09-pilot-protocol.md` v2 с D13-правками и пре-регистрационным каркасом; вердикт по Pearmut; Mistral-прогон (или явный блок «нет ключа»); kana-precision отчёт; всё — с провенансом (model id, дата, usage, сырые выходы). Запись в `docs/PROGRESS.md` §Полигон: итоги, изменившиеся цифры, вопросы оркестратору/владельцу.