37 KiB
Эксперимент 09. Протокол пилота Фазы 2.5 — выбор ядра, memory-bet, судья, think-режим (v2, D13)
Дата: 2026-07-05 · v2: 2026-07-09 (поправки D13, починка харнесса, Pearmut-вердикт) · Зона: полигон (флагман) · Статус: протокол + харнесс (memory_eval починен и валидирован индикативом); решающий прогон ждёт корпус владельца + человеческих аннотаторов. Закрывает решения: выбор ядра C0–C3 (Р2), go/no-go на банк памяти (research/13 §Вердикт), валидность LLM-судьи (research/11-gap-3), think-ON/OFF (D6), ценность пре-пасса Annotator (04-unhappy).
Пилот — единственная точка, где сходятся все отложенные «решаемые только человеком» вопросы качества. Он же — дециждающий эксперимент банка памяти (ставка не морозится до него, вердикт GO-на-схему был условным).
⚠ Разведение имён (D13.4, устраняет коллизию exp09): C0–C3 = конфигурации ЯДРА (§3, baseline/draft→editor/generate-select/select-refine). M0–M3 = режимы ТЕРМИНОЛОГИИ memory-eval (§6, no-gloss/selective-bank/full-context/wrong-gloss). Раньше оба назывались C0–C3 — риск путаницы в пре-регистрации; исправлено в доке, харнессе (
memory_eval.py), данных и pre-registration §12.
Сводка поправок v2 (D13, 2026-07-09)
- §3a Новый арм D13.1 — моно-vs-билингв редактор на ОДНОЙ модели, простой general-промпт (прямой тест D1; отдельно от 7-bis бейк-оффа моделей).
- §3b C2 только на ГЕТЕРОГЕННЫХ кандидатах (D13.2) — draft'ы от разных моделей, не N сэмплов одной (иначе селекция ≈ монета, плечо предрешено).
- §5 Панель судей (D13.3) — 2–3 семейства; 11+ повторов со свапом позиций; Bradley-Terry/медиана; grok не судит grok-выходы; валидация судьи — κ vs человеческий IAA + tie-rate/top-1.
- §6 memory-eval починен (D13.5) — эхо-контроль, полные выходы, ось верности реализована, C0–C3→M0–M3, зеркало синхронизировано с Go по 7 расхождениям; индикатив пере-прогнан (§6-результаты).
- §9/§12 Пре-регистрация расширена (D13.4) — MDE/мощность, N аннотаторов ≥3 (иначе «безκ-режим»), правила решения по каждой руке — неизменяемый каркас §12.
- §10 Инструмент — Pearmut оценён (D13.5): НЕ берём как BWS-движок (у него нет BWS), строим тонкий свой + крадём его attention-checks. Вердикт §10.
1. Что пилот решает (и почему только он)
| Решение | Почему не решено раньше | Рука пилота |
|---|---|---|
| Ядро C0–C3 (baseline / draft→editor / generate-select / select-refine) | arXiv:2603.20324 «When Agents Disagree» не покрывает перевод; на zh/ja→ru нужен свой (research/11-gap-3) | человеческий BWS + судья-панель |
| Банк памяти vs длинный контекст (go/no-go на ставку) | DelTA — LLM-в-цикле, не наш детерминированный путь; сравнение «банк vs длинный контекст» на zh/ja→ru не проведено (research/13 Q6) | memory-eval (§6), WMT25-3-режим |
| Валиден ли LLM-судья вообще | LAIT: судьи расходятся с людьми; на s* висит вся ставка generate-select C2/C3 | корреляция судья↔человек + калибровка s* (§5) |
| think-ON vs OFF по качеству (draft/translator + editor) | локально подтвердилось на реалиях (羅生門→Радзёмон), но COGS +13–25% (эксп.08) — стоит ли | think-рука (§7), встроена в ядро |
| Ценность пре-пасса Annotator | улучшает ли настолько, чтобы оправдать вызов | A/B в ядре (§8) |
2. Корпус (нужен от владельца)
- 25–35 глав реальных произведений с приватными эталонными переводами (издательскими или выверенными). GuoFeng V2 — только dev, non-commercial (нельзя в продукт-оценку).
- Покрытие: zh→ru (вебновелла + данмэй), ja→ru (ранобэ), en→ru (роман) — по 8–12 глав. Диалого-плотные и нарративные главы (см. эксп.07: диалог-плотность — ключевая ось).
- Рекуррентные имена/термины обязательны (≥8 сущностей, повторяющихся через главы) — иначе memory-eval нечего мерить.
- ⚠ Методическое ограничение (эксп.04): владелец читает только en/ru. → человеческая оценка ВЕРНОСТИ возможна лишь на en→ru (и русская сторона стиля любого перевода). Для zh/ja верность оценивается: (а) английским якорь-подстрочником (профессиональный en-перевод как мост), (б) LLM-судьёй чужого семейства против исходника, (в) сверкой с приватным русским эталоном. Заложено в дизайн (§4–5).
Пока корпуса нет — индикативный прогон на PD-Ah-Q (eval/pilot/memory_eval.py) валидирует харнесс и метрики; вебновелл-срез добора (r-коэффициенты/эхо/coverage-precision вне претрейна) — eval/webnovel_slice.py, одна команда по появлению файлов в eval/data/samples/webnovel/.
3. Дизайн ядра (C0–C3, Р2)
Один и тот же чанк проходит 4 конфигурации ядра, все на ратифицированном стеке (draft=DeepSeek-v4-flash, editor=grok-non-reason):
- C0 baseline — один проход переводчика (+ детерминированный глоссарий = уровень VseGPT; baseline метрики, §синтез дня-0 — ныне
../archive/PROGRESS-2026-07-04-10.md). - C1 draft→editor — черновик → моноязычный редактор (D1). Дефолт Ф1.
- C2 generate-then-select — N черновиков → судья-селектор выбирает лучший (arXiv:2603.20324). Висит на калибровке s* и валидности судьи (§5). D13.2: кандидаты ГЕТЕРОГЕННЫ — draft'ы от РАЗНЫХ моделей (deepseek/glm/kimi/mistral), НЕ N сэмплов одной. Основание: на гомогенных селекция ≈ монета (2603.20324 WR 0.512; LitMT 2606.05924 best-of-8+судья — последнее место). На гомогенных C2 предрешён и жжёт бюджет впустую.
- C3 select-then-refine — селект + точечный re-ask/refine на выбранном (verifier-gated, research/14 M2; рычаг L3 эксп.adaptive_reask).
Каждая конфигурация × {think-OFF, think-ON} (§7) × {Annotator-pre-pass OFF/ON} (§8) — факторный, но приоритезированный (полный крест дорог; ядро × think — первично, Annotator — вторичный A/B на подвыборке).
3a. Арм D13.1 — моно-vs-билингв редактор на ОДНОЙ модели (прямой тест D1)
Отдельная рука, не путать с 7-bis (тот — бейк-офф РАЗНЫХ моделей на моно-редактуре). Здесь одна модель (grok-4.3) правит черновик в двух режимах:
- моно: вход = только русский черновик + глоссарий-констрейнты (боевой D1, без исходника);
- билингв general: вход = исходник + черновик + ПРОСТОЙ general-промпт «улучши, не переври».
Основание (верифицировано по PDF arXiv:2605.13368, вкл. en→ru): monolingual-рефайнмент теряет accuracy с ПЕРВОГО прохода (−2.2…−5.6 MQM у всех 6 моделей); general-рефайнмент С исходником даёт тот же fluency при accuracy ~flat и лучшем overall. Вход в решение (D17): если моно даёт паритет верности — D1 подтверждён дёшево; если налог на верность воспроизводится — флип на «редактор с исходником, простой промпт» (дешевле любой альтернативной митигации калек). Метрики те же (§4 BWS-стиль + §6 decl-консистентность + верность через сверку с эталоном/якорем).
4. Человеческая оценка — Best-Worst Scaling (BWS)
Почему BWS, не шкала Ликерта: BWS (выбери ЛУЧШИЙ и ХУДШИЙ из набора) даёт более надёжные, менее шумные ранги, чем абсолютные оценки (устойчив к разнице калибровки аннотаторов) — стандарт для сравнения близких систем. LAIT показал: абсолютные оценки судей плывут, ранги — надёжнее.
- Единица: абзац/короткий чанк (не вся глава — усталость аннотатора). Наборы из 3–4 систем (C0–C3, или think-ON vs OFF пары).
- Слепота: аннотатор не видит, какая система какой выход дал (рандомизация порядка + меток) — и рандомизация ПО НАБОРУ, ключ вне артефакта (урок exp04, D13.5: за
<details>для фетча не скрытие). - Оси оценки (раздельно, НЕ смешивать):
- Стиль/естественность (русская сторона) — владелец/русскоязычный аннотатор, любой языковой парой (не нужен исходник).
- Верность/полнота — только en→ru напрямую; для zh/ja — через en-якорь-подстрочник (§2). Отдельная BWS-задача с исходником/якорем на виду.
- N и κ (D13.4): ≥3 аннотатора на набор для inter-annotator agreement (κ); при низком κ — расширять, не усреднять шум. Если аннотатор реально один (владелец) — κ неисчислим → это ЯВНЫЙ «безκ-режим» (пишем честно, не выдаём одиночную оценку за согласованную).
- Мощность/MDE (D13.4): число BWS-наборов пред-регистрируется под целевой MDE (минимально-детектируемую разницу рангов) — иначе «нет разницы» неотличимо от «мало мощности». См. §12.
- Стилевая ось для M1 (in-context демонстрации, research/14): бьёт ли демо-рука стиль БЕЗ потери консистентности/fidelity (индикатив: по консистентности не бьёт; стиль не мерен).
5. LLM-судейская панель (валидация + калибровка, D13.3)
Судья держит две вещи: (а) выбор в C2/C3 (селектор), (б) валидацию качества offline. Обе непроверены на домене → пилот их валидирует, не принимает на веру.
- Панель — 2–3 семейства МАКСИМУМ (D13.3а). Не 9 судей: 9 ≈ 2 эффективных голоса (2605.29800), лучший ОДИНОЧНЫЙ судья ≥ панели. Кандидаты чужих семейств (анти-self-preference): Gemini-3.1-Pro (нативный, safety-off для 18+), grok-4.3, gpt-5-mini.
- 11+ повторов на вердикт со свапом позиций A/B (D13.3б). Одиночный прогон нестабилен (13.6% флипов; парафраз меняет исход в 25%; 2606.13685). Позиции A/B свапаются, вердикт агрегируется по повторам.
- Агрегация — медиана / Bradley-Terry (D13.3в), НЕ среднее (JP-TL-Bench-паттерн).
- grok НЕ судит grok-редактированные выходы (D13.3г) — нарушение собственного анти-self-preference правила. Реализуется на уровне харнесса (family-guard; тот же принцип, что cross-family fidelity-судья в memory_eval —
family_of(judge) != family_of(translator)). - Валидация судьи — κ vs человеческий IAA + tie-rate/top-1 within-prompt (D13.3д), НЕ средняя корреляция (2603.12520). Метрики: доля совпадений top-1 судья↔человек ВНУТРИ набора, tie-rate; Kendall τ судья↔человек на BWS-ранге как вторичная.
- Шкала Комиссарова (анкета MQM-весов, 04-unhappy): mistranslation / omission / addition / терминология / согласование рода / стиль-канцелярит.
- Калибровка порога s* (на нём вся ставка generate-select, arXiv:2603.20324): при каком судейском скоре «выбрать/переспросить» максимизируется человеческий win-rate. Пред-регистрировать s* ДО финального прогона (§12).
6. Memory-eval — дециждающий эксперимент банка (WMT25 три-режимный; M0–M3)
Вопрос (страх владельца + go/no-go): оправдана ли ДЕТЕРМИНИРОВАННАЯ селективная инъекция (наш банк) vs просто весь глоссарий в длинном контексте, и вредит ли ошибочная инъекция (тихая деградация).
Три режима терминологии (WMT25) × baseline — переименованы M0–M3 (D13.4):
- M0 без глоссария; M1 селективная инъекция (наш банк); M2 полный глоссарий + скользящее резюме (длинный контекст); M3 случайный/неверный глоссарий (dst перемешан) — адверсариальная рука, прямой замер тихой деградации.
Инъекция M1 = ЗЕРКАЛО Go-горячего-пути (backend/internal/pipeline/memory.go — ИСТОЧНИК ИСТИНЫ). Синхронизировано D13.5 + пакет-2 (07-review §4.5): sticky depth=2 union+reset; until_ch-гейт; span-containment со спойлер-гейтом суппрессора; токен-бюджет+eviction; sticky-диспозиция НАСЛЕДУЕТСЯ (D16.2 — collision-prone AMBIGUOUS не апгрейдится sticky'ем в CONFIRMED; Go memmatch-v3 залендён 09.07); полная вендоренная trad2simp-таблица (508→500 уник., hash-синк + байт-parity self-test); ignorables=Cf+VS-диапазоны; source-граница фонетических ключей D16.3 (rose⊄roseanne — Latin/Cyrillic только, кросс-скрипт=валидная граница; кана/Han НЕ проверяются — пакет-2 Task 1a) и апостроф-фолд ‘’ʼ'→' с обеих сторон (пакет-2 Task 1b, критично для en→ru руки). Han-скрипт по ВСЕМ плоскостям, significantLen по Unicode-letter (закрыты дельты адверсариального ревью — supplementary-plane имена). На кану source-граница НЕ распространяется (см. kana-precision §6-bis — эмуляция даёт TP 15→1). При расхождении — верить Go; parity закреплён memory_eval.py --self-test (мирроры Go-тестов TestSourcePhoneticWordBoundary/TestApostropheFold).
Метрики (три оси раздельно):
- (а) консистентность — decl-осознанная (
eval/pilot/declmetric.py, pymorphy3 + Go-style stored-decl): одинаково ли рендерится approved-dst во всех чанках, где встречается src. ОБЯЗАНА быть decl-осознанной — наивный матч даёт 18–67% ложных флагов (research/14 §2; backend memory_e1_test.go full-decl 0% / base-only 67%). Заодно — валидация E1-надёжности post-check на РЕАЛЬНОМ корпусе (жёсткий гейтpostcheck_gateфлипается только после этого замера precision на живых книгах). - (б) верность/пропуски — РЕАЛИЗОВАНА (D13.5, была дырой): LLM-судья ЧУЖОГО семейства против источника (family-guard
family_of(judge)!=family_of(translator); mistranslation/omission/addition/wrong_names → JSON). Без неё пред-регистрированное правило «M3 роняет vs M0 по верности» непроверяемо. CometKiwi — опционально и только с оговоркой «на ru-литературе не валидирован» (research/11-gap-2), НЕ подключён. - (в) стоимость — input/output токены по режимам.
Эхо-контроль (D13.5): модель эхает глоссарий-преамбулу («ГЛОССАРИЙ … 阿Q → А-кью …») перед переводом; скоринг всего выхода тогда считает эхнутые dst «отрендеренными» → M-режимы завышены, вред M3 занижен (ревью проследил chunk1-M3 надут 0.667→1.0). Теперь: детект преамбулы/source-эха (переиспользован CJK-классификатор refusal_bench) → стрип до тела перевода → флаг echo_contaminated + исключение из чистого агрегата (опц. --regen-on-echo переспрашивает с усиленным промптом) — не тихий стрип.
Пред-регистрированное правило решения: M1≈M2 по качеству но M1 дешевле → банк оправдан; M2≫M1 → нужен полнее контекст; M3 роняет vs M0 по ВЕРНОСТИ → страх владельца подтверждён, post-check/disposition обоснованы (и мы их конвертируем в громкое, а не устраняем).
6-результаты. Индикатив на Ah-Q (пере-прогнан 2026-07-09 ПОСЛЕ починки; grok-4.20-non-reasoning, судья gemini-2.5-flash, 5 чанков)
| Режим | consistency (decl) | fidelity (судья) | in_tok (ср.) | echo |
|---|---|---|---|---|
| M0 без глоссария | 0.567 | 94.6 | 1155 | 0/5 |
| M1 селективный банк | 1.0 | 93.4 | 1237 | 0/5 |
| M2 полный глоссарий | 1.0 | 93.4 | 1260 | 0/5 |
| M3 неверный глоссарий | 0.467 | 49.0 | 1218 | 0/5 |
Чтение (все пред-регистрированные правила разрешились чисто):
- M1≈M2 (consistency 1.0=1.0, fidelity 93.4=93.4), M1 дешевле по input (1237<1260; разрыв растёт с полной книжной глоссарией) → банк оправдан vs длинный контекст.
- M3 роняет ВЕРНОСТЬ: 49.0 vs M0 94.6 (−45.6) → страх владельца ПОДТВЕРЖДЁН количественно. Судья ловит: 阿Q (А-Кью) отрендерен как «Вэйчжуан» (имя человека → топоним) — модель ПОСЛУШАЛАСЬ неверной инъекции.
- Ключевое: M3 consistency (0.467) ≈ M0 (0.567) — по консистентности M3 выглядит как baseline, вред НЕВИДЕН. Его ловит ТОЛЬКО ось верности → почему её реализация (D13.5) была решающей, а старый харнесс давал ложный «вред меньше».
⚠ Старые числа КОНТАМИНИРОВАНЫ, не использовать: до починки харнесс показывал «C1 1.0 = C2 1.0, C3 0.60» (только консистентность; C3 chunk1 надут эхом до 1.0; оси верности НЕ было). Индикатив на PD-классике из претрейна — предварительный; решающий замер — на вебновелл-корпусе владельца + человеческий BWS.
6-bis. Kana-precision (D16-хвост, eval/pilot/kana_precision.py, 2026-07-09)
Замер precision матчера на ja-kana ключах при MIN=2/3/4 (вход в прод-ja решение: minKeyLenPhonetic=3 был «консервативным дефолтом до замера»). Trap-корпус (kana_traps.json): имена из PD-ja сэмплов (メロス/おさん/…) + коллизии, размеченные по типу (substring vs homograph).
| MIN (substring-матчер = текущий Go) | TP_fire | FP всего | FP substring | FP homograph | FP CONFIRMED | precision | conf-precision |
|---|---|---|---|---|---|---|---|
| 2 | 15 | 40 | 26 | 14 | 22 | 0.273 | 0.371 |
| 3 (дефолт) | 13 | 22 | 8 | 14 | 8 (все len-4, 7 homograph) | 0.371 | 0.429 |
| 4 | 6 | 8 | 1 | 7 | 0 | 0.429 | 1.0 |
⚠ Числа precision — ОТНОСИТЕЛЬНО trap-сета, не корпусные (ратификация 09.07 §1).
kana_traps.json— намеренно adversarial коллекция (имена + сконструированные коллизии/омографы), так чтоprecision/conf_precisionздесь измеряют РАЗДЕЛИТЕЛЬНУЮ способность матчера на трудных парах, а НЕ ожидаемую долю ложных срабатываний на реальном ja-тексте (там доля коллизионных контекстов на порядок ниже). Использовать для СРАВНЕНИЯ MIN=2/3/4 между собой (за этим замер и ставился), не как продовую метрику. Корпусный precision — на вебновелл-срезе/приёмке.
Выводы:
- Подтвердить MIN=3 как дефолт каны. Он гасит len-2 substring-шум (substring-FP 26→8, precision 0.273→0.371), СОХРАНЯЯ 3-kana имена (メロス/ゼウス/おさん — реальные корпус-имена). MIN=4 даёт conf-precision 1.0, НО роняет recall (TP 13→6 — банит легитимные 3-kana имена, большой класс в ja).
- collision-downgrade (≤3→AMBIGUOUS) реально работает: при MIN=3 len-3 фаерятся AMBIGUOUS (софт, ⟨проверить⟩+forced post-check), CONFIRMED только len≥4 → опасные авторитетные FP = 8 штук len-4.
- Потолок precision — класс HOMOGRAPH (имя == целое частое слово: ひまわり=подсолнух, あさひ=утреннее солнце, ひかる=光る), ДЛИНО-ИНВАРИАНТЕН — MIN-порог его НЕ гасит (это полный substring на любой длине). Митигация ортогональна: POS/known-word гейтинг или требование ruby/kanji-якоря, или даунгрейд kana-only name-ключей в AMBIGUOUS вне зависимости от длины. Вход для B6 — оркестратору/бэкенду.
- D16.3 source-граница на кане КАТАСТРОФИЧНА (эмуляция): TP 15→1 (14 реальных имён подавлены — за именем идёт kana-частица は/が, нет kana-run границы). Бэкенд правильно скоупнул D16.3 на Latin/Cyrillic; на кану НЕ распространять (в японском нет пробелов между словами). Замер это подтверждает.
7. Think-ON vs OFF (D6, встроено в ядро)
Гипотеза владельца частично подтвердилась локально (羅生門→Радзёмон) + DRT (arXiv:2412.17498). Но COGS: deepseek-reasoning мал, grok-4.3 +25% (эксп.08), Gemini форс. Мерить по качеству на draft/translator И editor (не только Terminologist):
- пары think-ON vs think-OFF того же ядра → BWS + судья;
- скоуп think-ON — subset-billing провайдеры (deepseek/glm/kimi, reasoning ⊆ completion); xAI/Grok think-ON только после reasoning-буфера в EstimateUSD (D6.2);
- вход в решение: оправдывает ли прирост качества +25% COGS редактора при reasoning ON (эксп.08: grok-reasoning отключается
reasoning_effort:"none", дефолт-редактор — off; reasoning-редактура — опция под этот замер).
7-bis. Моно-редактор бейк-офф (F8 — доп-рука, из caveat эксп.08:92)
Зачем: эксп.04 выбрал grok-4.3 редактором, кормя его билингвально (исходник+черновик), но боевой редактор D1 — моноязычный; рейтинг grok на моноредактуре строго не перенесён, а слепота exp04 была структурно сломана (D13.5-сноска exp04) → выбор ПРОВИЗОРЕН. Отдельная рука — валидировать выбор редактора на РЕАЛЬНОЙ моноязычной задаче:
- grok-4.3 моно-редактура (вход = только русский черновик + глоссарий-констрейнты, БЕЗ исходника) vs кандидаты (gemini-3.1-pro-preview, gpt-5-mini, glm-5) на той же моно-задаче;
- крест с think-ON/OFF (§7); метрика — BWS-стиль (§4) + консистентность (§6) + верность через сверку с эталоном;
- вход в решение: держится ли ранг grok-редактора при переходе билингв→моно; если нет — перевыбрать редактора Ф1.
- Инструмент слепоты починен:
eval/build_editor_artifact.pyтеперь рандомизирует метки ПО ФРАГМЕНТУ (соль в ключе) и пишет ключ+цену в ОТДЕЛЬНЫЙ файл (--key), не публикуемый до оценки.
8. Пре-пасс Annotator (A/B)
Улучшает ли пре-пасс (извлечение терминов/резюме/контекста ДО перевода) качество настолько, чтобы оправдать вызов. A/B на подвыборке: ядро с Annotator-pre-pass vs без. Метрика — та же BWS + консистентность (пре-пасс должен поднимать recall глоссария).
9. Пред-регистрация (до финального прогона — против p-hacking)
Зафиксировать ДО прогона неизменяемым разделом §12: пороги s*, допустимый flag-volume на главу (эксп.07: ≥2 excision-флага = fail), decl-метрику и её матчер, состав судейской панели (§5), правило решения memory-eval (§6), N аннотаторов и κ-порог (§4), MDE/мощность и число BWS-наборов, правила решения по КАЖДОЙ руке (C0–C3, D13.1 моно-vs-билингв, think, Annotator). Изменения после — отдельным разделом с обоснованием.
10. Инструмент человеческой оценки — Pearmut vs своё (вердикт D13.5)
Оценён Pearmut (arXiv:2601.02933, Zouhar & Kocmi, ETH; MIT, pip install pearmut, self-host файловый, verified по GitHub/PyPI 2026-07-09).
Вердикт: НЕ брать Pearmut как BWS-движок; строить тонкий свой BWS-тул + красть attention-checks Pearmut. Три решающих факта:
- BWS в Pearmut ОТСУТСТВУЕТ (дилбрейкер). Его протоколы — DA/ESA/cESA/MQM (скоринг + error-span), НЕ best-worst-из-набора. Наш дизайн (§4) целиком на BWS с рандомизацией меток и агрегацией в ранги — под data-model Pearmut это ломать.
- Self-host НЕ различает кандидатов (все self-host'ятся: Pearmut MIT, Potato, Label-Studio Apache-2.0, Appraise BSD) → приватность/18+ проходят все, решает BWS-fit, где Pearmut проигрывает.
- Наша логика тонкая и это то, что важно: генерация наборов, слепая рандомизация меток, best-minus-worst (Orme) агрегация, κ, безκ-режим — ни один тул не даёт их turnkey; несколько сотен строк. Владение = пришпилить пре-регистрацию (§12) в тот же репо + держать две-строгие-оси (стиль/верность) как инвариант.
Практический путь: нужен нулевой UI-труд → поднять Potato (native BWS-схема; ⚠ лицензия MIT-vs-GPLv3 в источниках расходится — проверить github.com/davidjurgens/potato/LICENSE перед принятием) как фронт, свой export→агрегация→κ поверх. Нужен полный контроль слепоты/двух-осей/безκ — писать тонкий харнесс напрямую. В обоих — украсть attention-checks Pearmut (Loud/Silent/Tutorial — его самая переиспользуемая идея) + doc-level-context.
11. Харнесс eval/pilot/ (состояние)
Построено и валидировано:
declmetric.py— decl-осознанная консистентность (pymorphy3 + Go-style stored-decl); зеркало memnorm.go normalizeTargetForm/containsWholeWord (NFC/dash-fold/ignorable-strip/letter-boundary). Parity-asserts зелёные.memory_eval.py— WMT25 M0–M3 + fidelity-ось (cross-family судья) + эхо-контроль + полные выходы + провенанс; инъекция = зеркало Go D13.5 (self-test 12 инвариантов зелёный; адверсариально верифицирован — faithful, дельты supplementary-plane закрыты). Индикатив пере-прогнан (§6-результаты).kana_precision.py(+kana_traps.json) — kana-precision MIN=2/3/4 (§6-bis).trad2simp.txt— вендоренная таблица (508, hash-синк с Go-embed).webnovel_slice.py— одна команда добора вне претрейна (§2; блокируется корпусом, не падает).
Нужно достроить (когда есть корпус + аннотаторы):
- BWS item-generator + агрегатор (наборы, рандомизация, best-minus-worst, κ, безκ-режим) →
bws.py(или Potato-фронт; §10). attention-checks по Pearmut. - Судейская панель обёртка (2–3 семейства, 11+ повторов+свап, Bradley-Terry, family-guard, Комиссаров-анкета) →
judge_panel.py. - en-якорь-подстрочник pipeline для zh/ja верности.
12. Пред-регистрационный каркас (НЕИЗМЕНЯЕМЫЙ; заполнить ДО решающего прогона)
Заполняется ОДИН раз перед решающим прогоном и не меняется; правки — отдельным датированным подразделом с обоснованием (D13.4).
- Корпус: ____ глав, языки ____, ≥8 рекуррентных сущностей: да/нет.
- Аннотаторы: N = ____ (≥3 иначе «безκ-режим: да»), κ-порог = ____ (низкий → расширять, не усреднять).
- Мощность: число BWS-наборов = ____ под MDE рангов = ____.
- Судья: семейства = ____ (2–3), повторов/вердикт = ____ (≥11) со свапом A/B, агрегация = медиана/Bradley-Terry, family-guard: судья ∉ семейства выхода. Валидация = κ vs IAA + tie-rate/top-1.
- s*: порог селектора C2/C3 = ____ (калибр §5).
- memory-eval: правило = M1≈M2&дешевле→банк; M3<M0 верность→страх подтверждён; матчер = decl-осознанный (stored-decl primary, pymorphy cross-check); fidelity-судья = ____ (чужого семейства).
- coverage-гейт: flag-volume/глава fail-порог = ____ (exp07: ≥2 excision = fail).
- Правила решения по руке: C0–C3 = ____; D13.1 моно-vs-билингв = ____ (паритет верности→D1; налог→флип); think-ON/OFF = ____ (+25% COGS оправдан?); Annotator A/B = ____.
Воспроизведение (индикатив, без корпуса владельца)
eval/.venv/bin/python eval/pilot/declmetric.py # decl-метрика + parity-asserts
eval/.venv/bin/python eval/pilot/memory_eval.py --self-test # 12 инвариантов зеркала (без API)
eval/.venv/bin/python eval/pilot/memory_eval.py --dry-run --chapter 6 # инъекция-зеркало + спойлер/until/eviction
eval/.venv/bin/python eval/pilot/memory_eval.py --chapter 6 --max-chunks 5 --regen-on-echo # индикатив M0–M3 + fidelity
eval/.venv/bin/python eval/pilot/kana_precision.py # kana-precision MIN=2/3/4
eval/.venv/bin/python eval/webnovel_slice.py # вебновелл-срез (по появлению корпуса)