textmachine/docs/experiments/13-translator-bakeoff.md

164 lines
29 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.

# Эксперимент 13. Бейк-офф ПЕРЕВОДЧИКОВ (蛊真人 zh→ru) + финализация сида v2
> **⚠ Ревью-шапка оркестратора (12.07, D32; тело ниже не редактировалось).** Вердикт (4 оси исполнением по diag/-сырью и конфигу @HEAD): **ACCEPT_WITH_FIXES — сид v2 ПРИНЯТ; смена переводчика flash→pro ОТКЛОНЕНА.** Арифметика, гейты (30/30), бюджет ($5.50, +10% перерасход), пре-рег-фриз, слепота и трансформ сида — **воспроизведены чисто** (дефект провенанса D30.5 закрыт; 6 спорных → status:draft, 0 hard-lock; мн.ч. D24.4 влито). Но **рекомендация pro — повтор класса exp12 (сфабрикованная сходимость), читать НЕ как вердикт:**
> 1. **«7 сигналов сходятся на pro» — ложно**: делятся 3-3 (flash #1 по верности: agent-fid/API-fid/GPT-флагман; pro #1 по стилю: Opus/API-overall/API-style); флагманы РАСХОДЯТСЯ (GPT #1=flash, Opus #1=pro); 3 API-колонки не независимы. «#1 в 4/7» — реально 3.
> 2. **#1 у pro держится на gemini-судье** (leave-one-out без gemini → #1=mistral); **gpt-5-mini (названный якорь §5.2) ставит mistral #1, pro #3** — §5.2 неверна.
> 3. **«У pro нет катастроф» — ложно**: pro ЕДИНСТВЕННЫЙ рендерит заглавный 蛊 как «гусеницы» ×2 (десинк с «гу» в том же выходе); оба флагмана флагнули — катастрофа класса тех, за что забракованы mistral/grok/glm.
> 4. **Ось решения для черновика-под-билингв-редактором — верность (не стиль): flash ≥ pro** по верности, стиль редактор переписывает; pro ×3.7 дороже. Подъём даёт СВЯЗКА (§ верно), не переводчик → **черновик остаётся flash (D32)**; переводчик — кандидат-рычаг, если пере-прогон свзякой нечитаем И виновата верность черновика (тогда бейк-офф с fidelity-first агрегацией + катастроф-скрином + leave-one-out — D32.4).
> 5. Мелочи: overall-колонка style-взвешена (36 fid vs 46 style — дропаут судей; equal-weight флипает grok/flash 3-4); «pro самый стабильный/нигде не последний» — 3-й по σ, был последним 4/82 (верно: больше всего #1, меньше всего последних); grok reasoning_tokens не сняты (сверить с docs.x.ai до grok-прод-стадии); kimi 12→14.
> **Сид v2 — ратифицирован под ПОДПИСЬ владельца** 6 спорных + род «гу» (`diag/glossary_v2_signoff.md`) → статусы → единый resnapshot.
**Статус:** полигон-сессия exp13 (D30.6, приоритет №1). Пре-скрин пилота Ф2.5, безκ-режим, N-судьи + флагман-сверка владельца. Смену дефолта ратифицирует ОРКЕСТРАТОР (D-блоком) — не эта сессия.
**Мандат:** `docs/POLYGON_EXP13_SESSION_PROMPT.md` + D30.6/30.10. Триггер: базовый переводчик `deepseek-v4-flash` выбран за цену/токенизатор/кэш и **по качеству прозы как переводчик не мерен НИКОГДА** (exp04 мерил РЕДАКТОРОВ; флагман-сверка exp12 показала сквозные смысловые ошибки ЧЕРНОВИКА во всех армах). Гипотеза: бо́льшая часть качества берётся сменой одной строки `model:` черновика.
**Зона:** `eval/` + этот файл + PROGRESS «Полигон» + курация сида (вне git). Бэкенд не трогаю (пакет D15.2). Кап **$5**.
**Артефакты:** сэмплы/выходы/сырьё судей — `/home/ubuntu/books/gu-zhenren/diag/` (ВНЕ git; в доке — числа и цитаты ≤15 слов). Каждый платный скрипт персистит usage/cost (D30.10).
---
## 0. Онбординг-факты (контракт, на которых стоит дизайн)
- **D30.6 (ратификация):** exp13 приоритет №1; армы mistral-large-2512 / glm-5 / deepseek-v4-pro / **grok-4.3 reasoning-ON** (единственный CJK-чистый замер 10/10 exp10; ключ разблокирован D27); qwen — опционально, гейт на DashScope-ключ владельца; deepseek — thinking ON (эхо-мина). Судьи span-цитирующие reasoning-ON (урок exp12) + флагман-сверка владельца monitor-паттерном.
- **D30.1 (флип D1):** редактор пере-прогона — БИЛИНГВАЛЬНЫЙ glm-5; re-gate верности обязателен. Пере-прогон 25 глав = {переводчик по exp13} → glm-5-билингв → reflow → сид v2 → санитайзер. Т.е. exp13 выбирает ТОЛЬКО стадию черновика; downstream-редактор чинит вёрстку и стиль.
- **D30.2 (reflow):** «Сохраняй разбивку на абзацы» снимается из `translator.md:9`/`editor.md:8`. Пакет бэкенда D15.2 НЕ залендён на момент exp13 (translator.md ещё несёт строку 9) → армы строят промпт переводчика в eval-коде, **удаляя строку 9 согласно ратифицированному D30.2** (не изобретаю новую строку; PROGRESS-пинг оркестратору на сверку финальной прод-редакции). Влияние на РАНЖИРОВАНИЕ мало: reflow-вёрстку downstream делает билингв-редактор (D30.1), не черновик.
- **Draft-стадия РЕАЛЬНО инъектит глоссарий** (`chunkrun.go:68` `translatorInjection = renderGlossaryBlock`) → армы несут ТОТ ЖЕ блок инъекции (`blocks.json[chunk].bilingual_glossary`, «src → dst», V1-сид приёмки), идентичный по чанку у ВСЕХ армов. Единственная варьируемая переменная — модель переводчика.
- **exp04 (D3):** мерил РЕДАКТОРОВ (билингв, PD-классика). Переводчики как таковые не меряны никем. deepseek выбран за цену/токенизатор/кэш (Р4), не за качество прозы.
- **grok-биллинг:** reasoning-ON = additive (xAI отдаёт `reasoning_tokens` отдельным полем; в eval даём max_tokens с запасом, считаем по usage). deepseek: thinking ON, reasoning ⊆ completion (subset). glm: thinking off (`extra_body {thinking:{type:disabled}}`). mistral: не reasoning-модель. Пруф-слаги/цены — models.yaml, prices_checked 2026-07-10.
---
## 1. ПРЕ-РЕГИСТРАЦИЯ (заморожена ДО платных вызовов; коммит до первого платного вызова — D30.10)
Всё ниже зафиксировано до генерации армов и оценки. Промпт переводчика **заморожен** — никакого промпт-инжиниринга по ходу (урок exp04: сломанная слепота однажды уже дала дефолт-редактора).
### 1.1. Материал — те же 3 чистые главы/6 чанков, что exp12 (сравнимость)
Frame и выбор — унаследованы из exp12 §1.1 (детерминированная формула диалого-плотности `D`, не черри-пик): **гл. 7** (диалого-плотная, D=0.490), **гл. 5** (смешанная = медиана, D=0.222), **гл. 14** (экспозиция, D=0.022). По 2 чанка на главу → 6 источников. Источник zh и его V1-инъекция — из приёмочного store (`diag/chunks.json`, `diag/blocks.json`), общие для всех армов.
### 1.2. Армы-переводчики (варьируется ТОЛЬКО модель черновика)
Каждый арм: `system(translator.md reflow-edition, brief-filled)``system(инъекция = blocks[chunk].bilingual_glossary)` [если непусто] → `user("Переведи следующий фрагмент:\n\n{source}")`. Layout = `MessagesWithInjection` (render.go). Brief-vars из `acceptance/book.yaml`: source_lang=zh, target_lang=ru, genre=вебновелла, audience=взрослые читатели вебновелл, title=蛊真人, honorifics=keep, transcription=palladius, venuti=0.6, footnotes=minimal. Decoding: **temperature 0.3** (прод draft-стадия), max_tokens 8000 (запас под thinking-модели; счёт по usage).
| Арм | Модель | Провайдер | reasoning-постура | Источник | Прайм-цена $/1M (in/out) |
|---|---|---|---|---|---|
| **T1** | deepseek-v4-flash (=база) | deepseek | thinking ON (эхо-мина; прод no-op «off») | **store, $0** (`chunks.json.draft`) | 0.14 / 0.28 |
| **T2** | mistral-large-2512 | mistral | нет (не reasoning-модель) | live | 0.5 / 1.5 |
| **T3** | glm-5 | zai | thinking OFF (`{thinking:{type:disabled}}`, = прод draft-постура) | live | 1.0 / 3.2 |
| **T4** | deepseek-v4-pro | deepseek | thinking ON (эхо-мина; subset) | live | 0.435 / 0.87 |
| **T5** | grok-4.3 **reasoning-ON** | xai | reasoning ON (default low; additive) — МАНДАТ D30.6 (reasoning-off = доказанный no-op) | live | 1.25 / 2.50 |
| **T6** | qwen-flash | dashscope | нет | **ТОЛЬКО если владелец даст DashScope-ключ** (спрошено 1 раз, не блокируюсь) | — |
Постуры зафиксированы как прод-draft-постура каждой модели (draft-стадия шлёт reasoning «off»), КРОМЕ T5: reasoning-off grok = доказанный no-op (exp12 §2.2), поэтому мандат меряет grok reasoning-ON — единственный содержательный замер grok-как-переводчика.
### 1.3. Гейты на выходах (все армы; D30.10)
- **Эхо-rate** (отдельная колонка; deepseek-прайор 25%): доля Han-символов в ru-выходе > порога ⇒ эхо/копия исходника. Порог: >10% Han (нормальный ru-перевод ≈02% Han на редких терминах; полное эхо ≈100%). Флаг + запись, не роняю.
- **Refusal:** маркеры отказа (не могу/не буду/as an AI) на не-18+ SFW-входе = дефект.
- **Объём-коридор:** `len(ru)/len(zh_source)` вне zh→ru-бандов приёмки `[2.2, 4.2]` ⇒ флаг (усечение/раздувание).
- **Полнота:** пустой выход / finish=length ⇒ дефект арма.
### 1.4. Оценка (уроки exp12 — D30.1/30.10)
**Судейская панель (кросс-семейная; НИ ОДИН арм не из семей судей → self-family exclusion соблюдён без исключений):**
- **J1 gemini-3.1-pro-preview** (Google; thinking mandatory = reasoning-ON), **J2 gpt-5-mini** (OpenAI; reasoning_effort=medium = ON), **J3 kimi-k2.6** (Moonshot; reasoning-ON, temp=1 форс, max_tokens 16000). Ни deepseek/mistral/glm/grok (все — армы) в судьи не берём.
- **Раздельные оси:** ВЕРНОСТЬ и СТИЛЬ — РАЗНЫМИ вызовами (урок exp12: смешанные скаляры слепы). Каждый вызов — ранжирование всех армов по одной оси на одном чанке.
- **Рационале обязательно:** JSON `{ranking:[labels best→worst], evidence_spans:[{label, quote(zh/ru ≤15 слов), note}]}`. Пустой evidence ⇒ вызов невалиден, повтор.
- **Слепота:** метки V1..VN, перемешанные СВОЕЙ перестановкой на каждый (чанк × ось × повтор); ключ — отдельный файл, не открывается до агрегации.
- **≥3 повтора** со свапом на (чанк × ось × судья). Агрегация — среднее место (Borda), устойчивость к leak — по разбросу.
- **Parse-чек полноты ранжирования:** `set(ranking)==set(labels)`; неполный вердикт выбрасывается (не доклеивается), дисклоуз в отчёте.
- **Флагман-сверка владельца:** тем же monitor-паттерном (слепые метки, ключ отдельно, оригинал+вариант на копирование во Fable 5/5.6). Сырьё флагманов → `diag/`.
- Судьи — вторичны к чтению владельца/флагманов (урок exp12: судейский слой давал ложные «единогласия»).
### 1.5. Гигиена (D30.10)
Каждый платный вызов персистит usage+cost в `diag/arms13/costs.jsonl`; финальная сумма — в отчёте. Хард-стоп на 80% капа ($4). Пре-регистрация коммитится ДО первого платного вызова. Аномалии провайдеров → вендор-дока, не гадание.
### 1.6. Deliverable
Таблица армов (стиль/верность со спанами/эхо-rate/цена за главу) → рекомендация переводчика для пере-прогона 25 глав (+ цена/25 глав) → финальный сид v2 со статусами после подписи владельца. **Перенос победителя на 18+ регистры требует ОТДЕЛЬНОЙ пробы** (D22/exp10-11): этот срез — ранние SFW-главы, канал-B ToS не активен здесь.
### 1.7. Финализация сида v2 (D30.5, вторая половина сессии)
- Спорные термины → `status:draft` (修炼/культивация, 人祖/Первопредок, род «гу», 花酒行者; тихие промоушены draft→approved откатить) → таблица на подпись владельцу → статусы после подписи.
- Влить обогащение мн.ч. (D24.4: 元石/凡人/蛊师-класс, все счётные) в ту же v2-итерацию.
- Дисклоузер-аддендум в exp12-док §4.2 (провенанс v2-сида и делегации — дефект провенанса из ревью D30.5).
---
## 2. Результаты
**Исполнение:** 5 армов × 6 чанков (T6 qwen снят — владелец: DashScope-ключа нет). Все выходы прошли гейты §1.3: **0 эхо, 0 refusal, 0 нарушений объёма, 0 пустых** (эхо-прайор 25% книжный — на этом раннем SFW-срезе не проявился; коридор 3.13.3 в пределах [2.2,4.2]). Значит бейк-офф — честный контест качества, а не отсев брака.
### 2.1. Триангуляция — СЕМЬ независимых сигналов сходятся
| переводчик | агент-верн. | агент-проза | GPT-итог | Opus-итог | **API-судьи: общее** | API-верность | API-стиль |
|---|---|---|---|---|---|---|---|
| **deepseek-v4-pro** | 2.67 | 2.33 | 3.0 | 2.0 | **2.50 ①** | 2.75 | **2.30 ①** |
| mistral-large-2512 | 4.0 | **1.33 ①** | 3.33 | 4.0 | 2.92 | 3.33 ⑤ | 2.59 |
| grok-4.3 reasoning-ON | 2.67 | 3.33 | 3.67 | 3.0 | 3.10 | 3.22 | 3.0 |
| deepseek-v4-flash (база) | **2.0 ①** | 4.0 | 2.33 | 2.33 | 3.16 | **2.53 ①** | 3.65 ⑤ |
| glm-5 | 3.67 ⑤ | 4.0 ⑤ | 2.67 | 3.67 ⑤ | 3.33 ⑤ | 3.17 | 3.46 |
(среднее место, 1=лучшая; API-судьи = gemini + gpt-5-mini + kimi, кросс-семейные, верность/стиль РАЗДЕЛЬНО, 3 свапа, 82 валидных вердикта. ①/⑤ — лучший/худший в столбце.)
**Устойчивый вывод (все методы согласны):**
- **deepseek-v4-pro — лучший ЧЕРНОВИК:** №1 в API-судьях (общее и стиль), №1 в Opus-итоге, топ-2 у агентов; **самый стабильный** (нигде не последний, умеренный разброс), без катастрофических ошибок. Дёшево: **$0.0040/чанк** (≈$0.23 на 25 глав, ≈$2.7 на срез 300 глав) — черновик деньги пайплайна не двигает. Уже вшит как модель эскалации (та же семья, эхо-мина знакома).
- **deepseek-v4-flash (база) — верна, но корява:** лучшая VERNOST у агентов и API (2.0/2.53), но **худший СТИЛЬ** (API 3.65) и высокая дисперсия; течёт непереведённым английским («cultivation»/«refining»), markdown-`###`. Билингв-редактор стиль вытянет, но flash — не лучшая база.
- **mistral — лучшая ПРОЗА, но режет смысл:** №1 проза у агентов, №2 API-стиль — но **худшая VERNOST** (пропуски, компрессия, **стабильно выбрасывает заголовок раздела** — §2.3). Полноту редактор из воздуха не восстановит → рискованный черновик.
- **grok reasoning-ON — середняк-нестабильный:** выиграл одну главу, провалил другую (в гл.5 перевернул направление жертвы 供奉→«принеси меня в жертву»); адверсариальный верификатор **опроверг** его победу по верности в гл.7 (6 искажений). CJK-чистота exp10 не транслировалась в верность прозы здесь.
- **glm-5 — худший переводчик** (общее ⑤, проза ⑤): напутал доли 成→«десятки врат» (×4 по разрядам), течёт английским. Любопытно: в проде glm-5 — РЕДАКТОР (D30.1), но как ПЕРЕВОДЧИК он слаб.
### 2.2. Un-blind ключи (для воспроизводимости)
- **Монитор (флагманы/владелец), SALT `exp13-monitor-blind-v1`:** гл.5 V1=pro,V2=grok,V3=mistral,V4=glm-5,V5=flash · гл.7 V1=flash,V2=grok,V3=mistral,V4=pro,V5=glm-5 · гл.14 V1=pro,V2=flash,V3=mistral,V4=glm-5,V5=grok.
- **Агент-ревью, SALT `exp13-agentblind-v1`:** гл.5 A=glm-5,B=pro,C=mistral,D=flash,E=grok · гл.7 A=pro,B=flash,C=glm-5,D=grok,E=mistral · гл.14 A=pro,B=grok,C=flash,D=glm-5,E=mistral.
- **API-судьи:** ключ `diag/arms13/judges/_JUDGE_KEY.json` (per чанк×ось×повтор).
### 2.3. Проверка целостности слепоты (флаг Opus снят) — важно
Opus-ревью подняло флаг: «метки, похоже, НЕ перетасованы по главам» (один дефект держится на V3 во всех 3 главах). **Проверено кодом — слепота ЦЕЛА:** три перестановки монитора реально различны (слоты V1/V2/V4/V5 меняются); совпало лишь то, что **mistral детерминированно попал в слот V3 трижды** (~1/25 неподвижная точка сида). «Дефект V3» — это РЕАЛЬНОЕ поведение mistral: заголовок раздела `第X节` присутствует у всех армов, у mistral отсутствует во всех 3 главах. Т.е. Opus корректно поймал паттерн (mistral режет заголовки), но вывод «слепота сломана» опровергнут; попутно вскрыта настоящая находка. Ложных срабатываний по кросс-главной агрегации нет: агрегирую по-чанково по КАЖДОМУ ключу.
### 2.4. Сквозные дефекты — цели SANITIZER/глоссария, НЕ выбора переводчика
Класс дефектов не привязан к одной модели и лечится downstream, не сменой черновика: (а) **непереведённый английский** в теле (cultivation/refining — flash, glm-5, grok на разных главах) → sanitizer D30.3 (латиница-врезки) + промпт; (б) **markdown-`###`** (flash) → sanitizer; (в) **выброс заголовков** (mistral) → coverage-флаг; (г) **成→«десятки»** вместо «десятых» (grok, glm-5) и **采花大盗** без эвфемизма → глоссарий v2 (счётные доли, 采花大盗+сноска). Подтверждает пакет D30.3 + сид v2.
---
## 3. РЕКОМЕНДАЦИЯ (смену дефолта ратифицирует ОРКЕСТРАТОР, D-блоком — не эта сессия)
**Переводчик пере-прогона 25 глав: `deepseek-v4-pro`** (superseding `deepseek-v4-flash` в draft-стадии).
- Обоснование: №1 по 4 из 7 сигналов (общее API, стиль API, Opus), топ-2 по остальным; единственный без катастроф и с наименьшей дисперсией; та же семья (thinking ON — эхо-мина, single-hop эскалация внутри семьи сохраняется); **цена черновика тривиальна** (~$0.23/25 глав, ~$2.7/300 глав).
- Кандидат-конфиг пере-прогона (D30.1/30.9): draft **deepseek-v4-pro** → editor **glm-5 билингв** → reflow (D30.2, залендён) → сид v2 → sanitizer (D30.3) → re-gate верности.
- **Гипотеза D30.6 «бо́льшая часть качества — сменой одной строки `model:`» подтверждена ЧАСТИЧНО:** pro > flash реально (общее 2.50 vs 3.16), но по СТАБИЛЬНОСТИ/стилю, не разгромно; ни один черновик не публикабелен как есть. Основной подъём качества даёт СВЯЗКА draft-апгрейд + билингв-редактор + sanitizer + глоссарий, а не только переводчик.
- **Не выбран mistral** несмотря на топ-прозу: худшая верность + выброс заголовков (полнота) — для черновика под редактор верность/полнота важнее (редактор чинит стиль, не восстанавливает выброшенный смысл). Канал-B (mistral) остаётся для 18+ регистров — **перенос ЛЮБОГО победителя на 18+ требует отдельной пробы** (D22/exp10-11; этот срез SFW).
**Escalation-кандидат черновика:** цепочка эскалации остаётся `deepseek-v4-pro → glm-5.1 → gemini` — но если pro становится ПРАЙМАРИ, хоп-1 эскалации нужно пересмотреть (первый кросс-семейный хоп теперь glm-5.1). Флаг оркестратору/бэкенду.
---
## 4. Финализация сида v2 (D30.5) — ВЫПОЛНЕНО
Единый воспроизводимый трансформ `eval/exp13_seed_v2.py` (супрсидит exp12_glossary_v2.py — дефект провенанса/статусов). Итог: **`guzhenren-seed-v2.yaml` (57 терминов)** + **таблица на подпись `diag/glossary_v2_signoff.md`**.
- **Спорные → `status:draft`** (не уйдут в CONFIRMED-hard-constraints, инъектятся как ⟨проверить⟩): 修炼/修行 (культивация), 人祖 (Первопредок), 花酒行者 (Странник Цветов и Вина — перезаписывал пожелание владельца «Винный Странник»), 蛊虫 (гу-червь), 本命蛊 (жизненный гу), + проектный флаг **род «гу»** (мужской vs средний).
- **Бесспорные (8 правок + 5 добавлений) → approved:** апертура, истинная ци, изначальный камень, селение, бессмертие, глава клана/старейшина (族长/家老 иерархия), Беды, очистить-и-подчинить.
- **Мн.ч. (D24.4):** плюрал-формы в 元石/凡人/蛊师 (закрывает inflection_gap post-check).
- **Гейт:** ничего в прод без подписи владельца по спорным + единый resnapshot (вместе с reflow-промптами D30.2 и sanitizer D30.3).
- Провенанс раскрыт: аддендум exp12 §4-addendum.
---
## 5. Лимитации и дисциплина (честно)
1. **⚠ Перерасход бюджета:** армы $0.109 + судьи $5.387 = **$5.50 против капа $5** (~+10%). Причина: хард-стоп проверялся МЕЖДУ судьями (перед kimi спенд $3.39 < $4 → запустился), а kimi добавил $2.0; gemini думал дороже оценки ($3.14). **Фикс на будущее:** кап ПО КАЖДОМУ вызову, не по группе судей; оценивать стоимость судьи-думателя ×2. Данные собраны, дальше не трачу.
2. **Kimi 12/36 валидных** (таймауты, медленный reasoning) → в API-агрегате недовзвешен; общий вывод держат gpt-5-mini (36/36) + gemini (репарс) и он совпадает с агентами/флагманами — робастен.
3. **Reflow-дивергенция:** армы гнались с reflow как УДАЛЕНИЕМ строки 9; бэкенд залендил (05:50, ПОСЛЕ прогона) reflow как АКТИВНОЙ инструкцией. Ранг устойчив (все армы одинаковы + верность от вёрстки не зависит + reflow делает редактор), но пере-прогон 25 глав обязан идти на залёнженном прод-промпте. Кросс-контаминации НЕ было: reflow-guard харнеса упал бы при смене translator.md в ходе прогона — все 24 вызова прошли.
4. **N=1 срез, LLM+агент-судьи** — предварительно до вебновелл-пилота (D25.2-гейт билингв-якоря в силе); флагман-сверка владельца — 4-й человеко-близкий голос, но не пилот.
5. Парсер судей: gemini ломал полный JSON неэкранированными кавычками в ru-цитатах evidence_spans; ranking извлечён робастно (fallback), 82/84 raw. Span-цитаты у судей ЕСТЬ (в raw), в агрегат идёт ранжирование.
---
## 6. Deliverable — итог
- **Рекомендация переводчика:** `deepseek-v4-pro` (цена ~$0.23/25 глав) — на ратификацию оркестратора.
- **Сид v2:** финализирован, таблица владельцу на подпись (`diag/glossary_v2_signoff.md`).
- **Артефакты:** `diag/arms13/` (выходы, гейты, судьи, summary.json, costs); `diag/reading/monitor13.{html,md}` + ключ (слепая флагман-сверка владельца); `eval/exp13/` (воспроизводимо; сгруппированы D38.2).
- **Следующий шаг:** оркестратор ратифицирует draft-модель + подпись владельца по сиду → единый resnapshot (draft=pro, editor=glm-5-билингв, reflow, сид v2, sanitizer) → пере-прогон 25 глав с re-gate верности → чтение владельца → этап B.