From b9272a19d0125727bdd9aa70823f592e7454b4da Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Fri, 17 Jul 2026 21:13:58 +0300 Subject: [PATCH] Freeze exp15 pre-registration with verified slugs/prices, sub-$15 budget, grok+mistral judges, A0 injection method, synthetic S2-prime seam ledger, and gender-signed seed --- docs/experiments/15-segmentation-empirics.md | 260 +++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 docs/experiments/15-segmentation-empirics.md diff --git a/docs/experiments/15-segmentation-empirics.md b/docs/experiments/15-segmentation-empirics.md new file mode 100644 index 0000000..487fad9 --- /dev/null +++ b/docs/experiments/15-segmentation-empirics.md @@ -0,0 +1,260 @@ +# exp15 — эмпирика сегментации/когезии/контракта t-e (research/19 §D, трек B) + +> Полигон-сессия, 2026-07-17. Промт: `docs/POLYGON_SEGMENTATION_EMPIRICS_SESSION_PROMPT.md`. +> Дизайн-оф-рекорд: `docs/research/19-chunking-cohesion.md` §D (Q0–Q5). Зона: `eval/` + `docs/experiments/`. +> Скрипты — семья `eval/exp15/`. Выходы/сырьё — ВНЕ git (`/home/ubuntu/books/gu-zhenren/exp15/`). +> +> **СТАТУС: §1 ПРЕ-РЕГ ФРИЗ — ЗАПОЛНЕН, ждёт (а) подписи владельца на 3 гейтах §1.13 и (б) коммита +> ДО первого платного вызова.** §2–§6 заполняются по ходу прогона. НИ ОДНОГО платного вызова ещё НЕ было. + +--- + +## §1 — ПРЕ-РЕГИСТРАЦИОННЫЙ ФРИЗ + +### §1.0 Дисциплина и провенанс + +- Пре-рег = единственный коммит этой сессии; всё после первого платного вызова НЕ меняется (иначе новый + experiment-ID). Мандат самопроверки (CLAUDE.md): ревью ИСПОЛНЕНИЕМ кода + сформированных запросов + + результатов — в каждый скрипт; каждый платный скрипт персистит usage/cost (D30.10). +- **Правило двух направлений соблюдено**: все слаги подтверждены И живым `/models` (`eval/exp15/preflight_models.py` + → `exp15/preflight_models.json`), И официальной вендор-докой (12-агентный веб-workflow → `exp15/freeze_facts.json`, + 5/6 тем CONFIRMED, 1 PARTIAL с явным caveat). Даты/URL — в `freeze_facts.json`. +- Анти-сходимость (D32.4): все контрасты делят один якорь A0 → их «победы» коррелированы и НЕ суммируются + в «N сигналов сходятся»; повторы судей давят судейский шум, НЕ шум генерации якоря (двойной якорь A0↔A0′). + +### §1.1 Пины (хеши — состояние на момент фриза) + +| Что | Значение | Примечание | +|---|---|---| +| Бэкенд HEAD | `68032f7` | ≥ `d3f6b34` (пак-1: trust-gated suppressor, memmatch-v4, sanitizer-v5, pair-сеам). Дерево ЧИСТОЕ (трек A залендён). | +| Сид (снапшот-основа) | `guzhenren-seed-v2.yaml` sha256 `175a67ad2f05caeaec8fc5b8c8d304334e8dc73eebd3caf5fc3b4b8be0c408f4` | gender-полон (12/13 person; `古月`=n-a клан). `人祖`=male ДОБАВЛЕН (подпись владельца, канон D19.3) — байт-стабильно (diff=1 строка, идемпотент). Пол в memory-хеше (`memory.go:273`) → resnapshot. | +| translator.md | sha256 `35d3ad6e0656a7d1116fb8b034a4cea087d5c11ac6e043804185f94f15af5829` | prod prompt (`v1-reflow`); несёт инертный reflow-однострочник (L10) — §C1 предлагает снять, но A0 = ТЕКУЩИЙ prompt как есть. | +| editor.md | sha256 `878b0da397eda5392950a5fa43a87e575b09cf6aa352d8e58ea2da26b55d8290` | prod prompt (`v3-discourse-reflow`). | +| editor-mono.md | sha256 `a8aaa38ea529e7344c4ce08f000f862cfa7a3fe4c5b3a6bba08a1a22cfeb189c` | моно-редактор (не в A0-стеке; пин для полноты). | +| A0 pipeline | `backend/configs/pipeline-c1.yaml` + `gates.regression_guard.enabled: true` | §1.2. | +| chunkerVersion | `chunker-v4-utf8-quotedepth` (const) | greedy-1500 = CODE-const (`chunker.go:47`), НЕ config-кноб. | + +### §1.2 Якорь A0 и реконструкция инъекции (по ТЕКУЩЕМУ Go) + +**A0 = прод-кандидат пост-D38.5:** draft `deepseek-v4-flash` (`v1-reflow`, temp 0.3, **thinking ON** — +конфиг-строка `reasoning:"off"` для deepseek — NO-OP, echoMineViolation-гейт принуждает thinking; при +расхождении верить Go) → editor `glm-5` (`v3-discourse-reflow`, temp 0.4, thinking OFF), **greedy-1500**, +**без когезии** (`stm_depth:2`/`overlap_tokens:200` — МЁРТВЫЕ кнобы, реального carryover в prod НЕТ), +**RegressionGuard ON** (наблюдаемость, не диспозиция), `glossary_token_budget:800`, сид reseed-промоутнутый. + +**Реконструкция инъекции — КРИТИЧНО (порт exp14b СТАЛ, не использовать):** +- $0-пути к `retrieval_state.injected_ids` НЕТ (persist только ПОСЛЕ платной стадии в `translateChunk`; + единственный бинарь `tmctl`, ingest вплавлен в платный `translate`). +- Python-порт `exp14b_reseed_promote.py` (find/suppress/render) **поведенчески устарел**: он кодирует + ДО-trust-gate longest-match (spoiler-only `valid_suppressor`), а текущий Go `suppressContained` + (`memory.go:684-726` + `matchTrust`/`trustRank` `640-668`) — disposition/trust-gated. Порт разойдётся с + A0 ровно на draft-nests-over-approved (суть пак-1). **НЕ реюзать порт для инъекции.** +- **Метод (принят):** A0/A0′ генерятся РЕАЛЬНЫМ бэкендом `tmctl translate` (аутентичный trust-gated + matcher), из его `retrieval_state.injected_ids` (SQLite `retrieval_state`) читаются авторитетные + инъекционные id; контраст-армы (eval-риги) ПОТРЕБЛЯЮТ эти же id (общий знаменатель). Дамп: + `sqlite3 .db "SELECT chapter,chunk_idx,injected_ids,n_trust_gated_suppress,trust_gate_detail FROM retrieval_state ..."`. +- **Архитектурное следствие (несущее):** бэкенд НЕ умеет производить арм-механизмы (logical-chunker, + carryover/lookahead, diff-editor, edit=глава, wide-read — все ОТСУТСТВУЮТ в prod: greedy-1500 const, + кнобы мёртвые, diff-парковка D21.4). Значит **только A0/A0′ — из реального бэкенда; ВСЕ механизм-армы + (Q1/Q2a/Q2c/Q3a-b/Q4a-c) — eval-риги** (Python, паттерн exp14/arms), реализующие §B1.4-B1.5/§B3/§C2 + ДИЗАЙН и потребляющие аутентичную A0-инъекцию. Риги — «порт-зеркала в своей зоне, при расхождении верить Go». + +### §1.3 Корпус S1–S4 (структурные профили — ДО прогона; `eval/exp15/structural_profile.py`) + +| Срез | Материал | Профиль (замерен) | Роль | Статус | +|---|---|---|---|---| +| **S1** плоский zh | 蛊真人 поздние 节 (высокий `--sec`, низкая violence-плотность), вне slice25 | median 29 cjk/строка, term 4.46/100c, **0 орнамент-разделителей во ВСЕЙ книге** (2308 节), flat_line_per_sentence=True | точка фоллбек-режима | ✅ материал есть; ⚠ IN-претрейн (принято §D0: S1 валиден для нарезки/внутрипарных, «вне претрейна» несёт S2) | +| **S2′** синтетич. сцен-маркир. zh (склейка) | конкатенация ПЕРВЫХ последоват. 节 蛊真人 (решение владельца); швы = ground-truth сцен-границы | по построению: швы-границы | **несущий**: где Q1 дифференцирует (выравнивание разрезов на швы) | ✅ материал есть (§1.14). ⚠ IN-претрейн + синтетика → ПРЕДВАРИТЕЛЬНО; свежая новелла = чистовое подтверждение (НЕ гейт) | +| **S3** ja-ранобэ | `isekai_majutsushi_jp.txt` | median 46, dialogue-opener 0.45 (line-per-utterance), 86 разделит.-строк (`=`), 43 話, scene_marked=True | нагрузка carryover/пол | ✅ $0 чанкер-профиль (без платных арм) | +| **S4** длинно-абзацный en | `fifty_shades_1_en.txt` | mean 107 cjk/строка (длинные абзацы), blank-run 0.99, 52 Chapter, cjk 0 | контроль общности §0.1 | ✅ $0 чанкер-профиль; caveat: US/UK совр., не европ.классик (альт. PD — `samples/en/*` без билдера) | + +Платные армы перевода — ТОЛЬКО S1/S2 (zh→ru, единственные прод-промты). S3/S4 — $0 детерм. валидация +общности чанкера. **Пре-ран проверка «срез задействует рычаг»**: S1 подтверждён flat (проверяет фоллбек-лестницу +B3/B4/DP); S2 обязан нести орнамент/сцен-сдвиги (проверяется профилем ДО платного прогона, когда материал будет). + +### §1.4 Трап-набор (§D1) + +- **Типы и min-N (общий знаменатель, определяется как пересекающий границу В ЯКОРЕ A0):** T-ana ≥20, + T-ent ≥20, T-tense ≥20 (несущие); T-cat ≥10, T-ell ≥10, T-gen ≥10, T-reg ≥10, T-inv ≥10 (контроль/реюз exp14b). +- **Майнер трапов = `kimi-k2.6`** (Moonshot) — ИСКЛЮЧЁН из судейского пула, семья ≠ арм-моделям (DeepSeek/GLM) + и ≠ судьям (xAI/Mistral). Кандидаты добываются майнингом + ручной отбор. +- **Стратификация по дистанции антецедента** (публикуется per-трап): квота в пределах K=3 предложений + (зона carryover) vs дальше K (зона окна/Ф2) — иначе Q3a «выиграет» по построению. +- **Общий знаменатель контраста:** трапы определяются в A0; в ОБОИХ армах скорится ОДИН набор; пересёк/не + пересёк границу в арме — записываемая КОВАРИАТА, НЕ фильтр. Исключаются только не-пересекающие НИ в одном арме. +- **Ожидаемое поведение каждого трапа записано ДО прогона**; недобор → домайнить до квоты ДО платных вызовов, + иначе тип помечается «Q недоказуем a priori» (не после). +- **T-gen** использует поле `gender` сида (§1.11); если подпись не успевает до Q3a′ — арм честно «стейт без пола». + +### §1.5 Армы — 2-арм контрасты к общему якорю (§D2, дословно + конкретизации) + +Якорь A0 на несущем S2 генерится ДВАЖДЫ (A0↔A0′, temp>0) = floor шума генерации; Q-эффект < floor не интерпретируется. + +| Q | Контраст (одна переменная) | Первичная метрика (ОДНА) | Реализация | +|---|---|---|---| +| **Q1** | greedy vs **logical-граница** (§B1.4/B1.5-DP) на **S2′**, оба на size-matched бюджете **~3–4k ток** (различие ТОЛЬКО в выравнивании разрезов на швы; размер-эффект → Q2) | T-tense+T-ana точность на S2′ (общ.знам.); вторично: доля разрезов на scene-shift-швы (выше=лучше) vs continuation-швы (ниже=лучше) | eval-риг: Python-DP чанкер (порт §B1.5) → армы через его границы | +| **Q2a** | A0 vs edit=глава (draft приколочен к greedy-1500, крупнеет ТОЛЬКО эмиссия редактора) | retry-adj cost-of-pass при reflow-инвар. omission не хуже A0 | eval-риг: editor glm-5 на объединённом чанке | +| **Q2b** | реюз sizecurve (800/1600/3200/whole, ch17/13) + omission-скоринг ($0 генерации) | reflow-инвар. omission per size | **$0**, `exp14/sizecurve/*`, err-фолбэки исключить | +| **Q2c** | A0 vs широкое-чтение/узкая-эмиссия (эмиссия=чанк, окно=сцена read-only) | T-ana+T-tense точность при out-ток ≈ A0 | eval-риг glm-5; кэш z.ai ВЕРИФИЦИРОВАН (§1.9) → cache-normalized колонка ЛЕГИТИМНА | +| **Q3a** | A0 vs +carryover(K=3): 3 режима src-only/draft-сосед/final-сосед; стейт — суб-арм Q3a′ | T-ana+T-ell точность per режим (Q3a′: T-gen/T-reg) | eval-риг: билингв невыровненный хвост в промт | +| **Q3b** | A0 vs +lookahead M=2 (src-only, шов-дедуп-гард ON) | T-cat точность (пустая ячейка exp14) | eval-риг | +| **Q4a** | A0 vs сильный переводчик (draft=`deepseek-v4-pro`) + суб-арм strong-draft+do-nothing | fidelity-трапы ЧЕРНОВИКА до редактора (span) | eval-риг; v4-pro держит семью DeepSeek (mistral свободен под судью) | +| **Q4b** | A0 vs diff-fidelity+style редактор (§C2; ±сегмент-маркеры) | trap-точность (T-inv) при формат-комплаенсе ≥90% | eval-риг: anchored search/replace + Go-стиль tolerant apply (Python-порт) | +| **Q4c** | A0 vs reflow-план отдельным пассом (§C1.3) | mean_spp при omission-инвар.=0 (валидатор плана) | eval-риг | +| **Q0** | A0 vs do-nothing (экспорт черновика) | TOST-эквивалентность, маржа M на trap-точн.+KPI | **$0** генерации (do-nothing = экспорт draft) | + +**Порядок/стоп-гейты:** Q2b($0, ре-атрибуция) → **Q1+Q3 (несущие, S2)** → Q2a/Q2c → Q4a/Q4b/Q4c → Q0 +(обязателен, дёшев). Каждый Q — стоп-гейт; стоп при исчерпании бюджета легитимен (приоритет пре-рег); +НО стоп после Q2b НЕ закрывает центральный конфликт. Двойной якорь A0↔A0′ до интерпретации любого Q. + +### §1.6 Метрики / агрегация (§D3) + +- **Reflow-инвариантный omission (ГЛАВНЫЙ, валидируется на вручную вычитанном whole-chapter выходе ДО скоринга + арм):** по КАЖДОМУ предложению источника — присутствие семантических атомов (числа, сущности/глоссарий-хиты, + полярность отрицания) ГДЕ УГОДНО в целевом чанке. НЕ длинo-зависимые гарды (RegressionGuard/coverage смещены + против крупных чанков — фабрикуют B0.4). +- **Детерминированные $0:** mean_spp / доля 1-предл. абзацев / диалог-тире / CJK-утечка (⚠ Han-в-скобках после + кириллич.терма — НЕ штраф, решение владельца #3) / glossary-консистентность (LTCR по сиду) / доля классов + границ / шов-дедуп / позиционный градиент ВНУТРИ арма. +- **Карта независимости сигналов:** метрики с общим драйвером длины (out-ток, mean_spp, длино-гарды) = ОДИН + сигнал; «сигналы сходятся» требует ≥1 длинo-независимого (trap-точность/span-верность). +- **Trap-судьи:** ≥2 кросс-семейных (§1.10), temp 0, каждый пейр в ОБОИХ порядках; **6 голосов, при расколе ≤4:2 + → добор до 10** (ослабление против §A.7 «~10» — бюджетная поправка, фиксируется явно); leave-one-judge-out; + катастроф-скрин К ПОБЕДИТЕЛЮ тоже; fidelity-first, без pooled-style. +- **Агрегация:** ПАРНЫЕ по-главные разности арм−якорь ВНУТРИ среза; кластер-SE по книге НЕ считаются (несущий + срез ≈ 1 кластер) — генерализация на «любую книгу» = декларированное ограничение, закрываемое S1–S4-разнообразием; + один первичный контраст на Q + Holm-Bonferroni; мощность честно: на 8–12 главах разрешимы средн./крупн. эффекты + → первичны ТРАПЫ. +- **Слепота владельца:** финалисты — слепые пакеты (`exp15/monitor/`), метки перемешаны. **Человеческий эндпоинт + гейтит** (планка 2 претензии, D35): метрики НОМИНИРУЮТ, ратифицирует слепое чтение владельца. + +### §1.7 Дерево решений (§D5, пороги пинятся числом ДО прогона) + +- **Q1:** T-tense+T-ana (общ.знам., S2) сдвиг ≥ **порог (пин: парная разность ≥ +0.10 доли починенных трапов, p<0.05 + Holm)** → строить §B1.4/B1.5-DP; null на S2 (НЕ только плоский S1) → граница вторична, приоритет когезии (Q3). +- **Q2a/Q2c:** Q2a-первичка (cost-of-pass при omission-инвар.) лучше A0 И Q2c НЕ воспроизводит окном → edit=глава + легитимен (§A.8.1). Q2c воспроизводит (trap-первичка ≥ Q2a при меньшей эмиссии) → «мелкая эмиссия + широкое окно». +- **Q3a/Q3b:** знаменатель = кросс-граничные трапы, которые A0 ПРОВАЛИВАЕТ; carryover чинит **≥50%** → оживление + ратифицируется (режим — по дельте src/draft/final + владелец §E.1); null при верифиц. пересекающих → когезия требует окна/Ф2. +- **Q4a:** strong-draft+do-nothing чинит **≥ пин-доли (≥0.5)** T-inv, что flash-draft валит, при COGS ≤ пин-потолка → + арм «структура у переводчика» в прод-кандидаты. +- **Q4b:** формат-комплаенс <90% ИЛИ fidelity-first trap хуже full-regen → диффы откладываются (закрыть D21.4/D21.10 явно); + ≥90% и атом-omission=0 → дифф-редактор в прод-кандидаты. +- **Q4c:** mean_spp ≥ A0 И атом-omission=0 при COGS ≤ A0×1.3 → reflow отдельным пассом; иначе остаётся в editor-промпте. +- **Q0:** TOST-эквивалентность (маржа **M пин: |Δ| < 0.05 доли** на первичках) A0↔do-nothing → мандаты редактора + пересматриваются (APE-урок); НЕ-отвержение без эквивалентности = «данных мало». +- **Финал любой ветки:** прод-кандидат → слепое чтение владельца (гейтящий эндпоинт). + +### §1.8 Слуги (live /models ✅ + вендор-док ✅, 2026-07-17) + +Все присутствуют в /models. `deepseek-chat`/`deepseek-reasoner` депрекейтятся **2026-07-24 15:59 UTC** (оба → v4-flash); +арм-конфиг на `deepseek-v4-flash`/`-pro` — НЕ задет. Слуги: draft `deepseek-v4-flash`; editor `glm-5`; Q4a-strong +`deepseek-v4-pro`; судьи `grok-4.3`, `mistral-large-latest`(=Large 3); майнер `kimi-k2.6`; gpt-5.4=`gpt-5.4-2026-03-05`, +gemini=`gemini-3.1-pro-preview` (пины на случай эскалации/3-го судьи). + +### §1.9 Цены, кэш, бюджет, капы (`exp15/freeze_facts.json`, `eval/exp15/budget_calc.py`) + +Цены/1M USD (офиц., 2026-07-17): deepseek-v4-flash 0.14/0.0028/0.28; v4-pro 0.435/0.003625/0.87; glm-5 1.00/0.20/3.20; +grok-4.3 1.25–2.50/0.20–0.40/2.50–5.00 (reasoning additive out); mistral-large-3 0.50/–/1.50; kimi-k2.6 0.95/0.16/4.00; +gemini-3.1-pro 2–4/0.2–0.4/12–18 (thinking=output); gpt-5.4 2.50/0.25/15.00. +**Кэш ВЕРИФИЦИРОВАН**: z.ai/GLM auto-implicit, `usage.prompt_tokens_details.cached_tokens`, hit ~0.2×input → +**§E.8-бис гейт ПРОЙДЕН, Q2c cache-normalized колонка ЛЕГИТИМНА**; DeepSeek auto ~2%×miss; OpenAI/Gemini auto. + +**Бюджет (recompute из trap-N×голоса×2 порядка×2 судьи):** несущий блок (Q1+Q3a+Q3a′+Q3b) armы $1.71 + судьи $6.66 + +майнер $0.27 = **$8.64**; полный пакет $13.13 — оба < **$15 (хард-кап владельца)**. **Апекс-судья gemini как 2-й = $44 +несущий блок → ИНФИЗИБЛ**; grok+mistral — бюджет-вынужденный правильный выбор (зафиксировано). +**Капы:** per-call predicted-cost гейт ДО каждого вызова (в run-скриптах); стоп-гейт после каждого Q; хард-кап $15. +**Риск (пин):** DeepSeek анонсировал (SCMP/TNW 30.06) peak-surge ×2 в Beijing-часы (01–04 & 06–10 UTC) — НЕ на офиц. +таблице; митигация: платные DeepSeek-армы ВНЕ этих окон, либо ×2 бюджет; ре-чек у 24.07-катовера. Gemini thoughts-accounting +и glm-5 PAYG-доступ — эмпир-верификация на 1-token пробе у первого платного гейта (`freeze_facts.json` risks). + +### §1.10 Судьи и майнер (семейно чисты) + +- **Судьи (2 кросс-семейных):** `grok-4.3` (xAI, reasoning ON) + `mistral-large-latest` (Mistral Large 3). Ни один + не из семьи арм-моделей (DeepSeek draft/Q4a, GLM editor) и не майнер (Moonshot). Опц. 3-й `gemini-3.1-pro` — ТОЛЬКО + на leave-one-out подмножестве при остатке бюджета (иначе инфизибл). +- **Майнер:** `kimi-k2.6` (Moonshot) — исключён из судей, семья ≠ арм/судьи. +- **Отклонение от D-лог апекс-пары (grok+gemini):** заменён gemini→mistral как бюджетная поправка (§1.9); зафиксировано явно. + +### §1.11 Gender-транспорт (решение владельца #2) + спорные + +Поле `gender` УЖЕ в сиде и потребляется Go (`memseed.go:35`→`memory.go:273` хеш→store; `migrate.go:183` = +male|female|hidden|''). Транспорт `eval/exp15/gender_transport.py` — идемпотентен, байт-стабилен, пре-снапшот+лог+асерты +(паттерн exp14b_reseed_promote), audit-first (no-op на уже-гендерном сиде → snapshot-хеш СОХРАНЁН до подписи). +Аудит: **13 person-записей, теперь 12 гендерны** (方源/方正/古月X male, 沈翠 female, 白凝冰 hidden→гендерно-нейтр., +**`人祖`=male — ПОДПИСЬ ВЛАДЕЛЬЦА, канон D19.3**); **`古月`=n-a** (клан, без поля — подтверждено). Подписи в +`exp15/gender_signoff.yaml` (пин). Транспорт применил 人祖→male байт-стабильно (diff=1 строка, идемпотент); новый seed-хеш §1.1. +**T-gen-трапы гонятся полноценно** (квота ≥10). Будущие трап-персонажи добавляются в signoff идемпотентно до Q3a′. +Scene-state слот (eval-side, Q3a′) surface-ит пол — self-review OK. + +### §1.12 Отклонения от §D (явно) + +1. Судья-пара grok+mistral вместо апекс grok+gemini — бюджет ($15 не держит gemini-thinking-output). §1.9/§1.10. +2. Голоса 6→10 (не «~10») — уже бюджет-поправка самого §D3, повторно фиксирую. +3. **Порт инъекции exp14b — НЕ реюзается** (поведенчески устарел до-trust-gate); A0-инъекция из реального `tmctl translate`. §1.2. +4. **Механизм-армы — eval-риги** (бэкенд не умеет logical/carryover/diff/wide-read); A0/A0′ — реальный бэкенд. §1.2. +5. S2 «свежий сцен-вебновелл» → **S2′ синтетическая склейка ПЕРВЫХ 节 蛊真人** (решение владельца): швы=ground-truth сцен-границы; РАЗБЛОКИРУЕТ платные Q1/Q3; репорт помечается «синтетика+претрейн, предварительно до чистого S2» (§1.14). Свежая новелла = чистовое подтверждение, НЕ гейт. + +### §1.13 Гейты владельца — ЗАКРЫТЫ (2026-07-17) + +- **A. S2-материал → S2′ (склейка ПЕРВЫХ 节 蛊真人), решение владельца.** Правила пре-рег — §1.14. Разблокирует Q1/Q3; + предварительно (синтетика+претрейн), свежая новелла = чистовое подтверждение, не гейт. ✅ +- **B. Gender подписан:** `人祖`=male (канон D19.3), `古月`=n-a (клан). Применено, seed re-hash §1.1, T-gen полноценно. ✅ +- **C. Бюджет/судьи подтверждены:** $13.13/$8.64 в $15; grok-4.3 (reasoning-ON, **wire-чек ДО платных**) + mistral-large-3 + (слаг **live-фактчек ДО платных**); Q4a=deepseek-v4-pro; майнер kimi-k2.6 (из {openai/kimi/gemini}). ✅ + +### §1.14 S2′ — синтетическая сцен-склейка (пре-рег правила, решение владельца 2026-07-17) + +Построение (`eval/exp15/build_s2prime.py`, детерминир., $0): конкатенация N ПЕРВЫХ последовательных 节 蛊真人 (opening-арка, +第一卷) в единый текст; ПЕРЕД склейкой — стрип 第X节-заголовков на швах (шов = НЕЯВНАЯ сцен-граница, без явного маркера). +Каждый шов = записанная ground-truth граница (rune-offset + пара соседних 节-id). +- **(б) Ручная классификация каждого шва:** «scene-shift» (реальная смена времени/места/POV/сцены) vs + «continuation-cliffhanger» (节 обрывается посреди сцены, следующий продолжает). Раздельные страты; continuation-швы = + **negative-boundaries** («здесь резать НЕЛЬЗЯ»). Классификация — чтением контекста шва; рационал per-шов в леджер §2. +- **(в) Q1-контраст на size-matched бюджете ~3–4k ток:** greedy vs logical — ОДИН бюджет, различие только в выравнивании + разрезов на швы. Метрика границы (вторичная): доля scene-shift-швов, на которые разрез попал (выше=лучше) vs доля + continuation-швов, разрезанных (ниже=лучше). Размер-эффект (1500 vs 3–4k) — домен Q2, НЕ Q1. +- **Трапы** размещаются straddling швов (кросс-граничные); T-* привязаны к scene-shift-швам (где граница ДОЛЖНА чинить). +- **(г) Оговорка репорта:** S2′ = синтетическая пере-нарезка IN-претрейн книги → результаты ПРЕДВАРИТЕЛЬНЫ; чистое + подтверждение — на свежей вне-претрейн новелле, когда появится (не гейт запуска). + +--- + +## §2 — Профили срезов + трап-леджер + +**Структурные профили (`eval/exp15/structural_profile.py`, $0, ДО прогона — проверка «срез задействует рычаг»):** + +| Срез | chars | median cjk/строка | term/100c | dialogue-opener | орнамент-строк | scene_marked | flat_LPS | вывод | +|---|---|---|---|---|---|---|---|---| +| S1 (guzhenren whole) | 7.99M | 29 | 4.46 | 0.19 | **0** | False | True | плоский фоллбек-режим ✓ | +| **S2′ (склейка 节1-12)** | 36,186 | 32 | 4.34 | 0.21 | 0 (швы неявные) | False | True | сцен-структура НЕЯВНАЯ на швах (§2 ниже) | +| S3 (isekai ja) | 232,921 | 46 | 3.26 | 0.45 | 86 (`=`) | True | False | line-per-utterance + разделители ✓ | +| S4 (fifty-shades en) | 873,697 | 57 (mean 107) | 0.51 | 0.53 | 3 | True (blank-run 0.99) | False | длинно-абзацный ✓ | + +**S2′ шов-леджер (`exp15/S2prime.txt`, `S2prime_seams.json`, `S2prime_seam_labels.json`):** 12 первых 节 蛊真人 +(opening-арка), заголовки стрипнуты → 11 швов = ground-truth сцен-границы (rune-offsets: 3372/6496/8981/12214/14479/ +17050/19960/23363/26698/29527/32558). Ручная классификация (полигон, рационал+цитата per шов — self-review в labels): + +| Страта | швы | роль в Q1 | +|---|---|---| +| **scene-shift** (резать ХОРОШО) | 1,2,3,6,7,8,9 (7 шт; soft: 1,7) | logical-стратегия ДОЛЖНА выровнять разрез | +| **continuation** (negative-boundary, резать ПЛОХО) | 4,5,10,11 (4 шт) | разрез здесь = штраф (анафора/референт через шов) | + +Примеры: шов4 (节4→5) — 节4 обрывается на «古月方源!», 节5 продолжает (自己 через шов) = negative; шов9 (节9→10) — +«已已三天三夜了» скачок 3 дня + POV→方源 = scene-shift. ⚠ S2′ = синтетика IN-претрейн → ПРЕДВАРИТЕЛЬНО (§1.14г). +Если трап-квота (T-tense/T-ana ≥20 straddling scene-shift) недоберётся на 7 швах — расширить N节 ДО платных вызовов. + +**Трап-леджер:** заполняется после майнинга (kimi-k2.6) + ручного отбора, ДО платных вызовов (стратификация, +ожидаемое поведение per трап, общий знаменатель в A0). + +## §3 — Результаты по Q (первичка/вторичка раздельно) +_(заполняется по ходу; Q2b — первый, $0.)_ + +## §4 — Дерево решений §D5 применённое +_(после результатов.)_ + +## §5 — Деньги +_(usage/cost per скрипт, persisted; cost-of-pass; ретраи+кэш раздельно.)_ + +## §6 — Самопроверка + отклонения от пре-рега +_(ревью исполнением; §1.12 — отклонения, зафиксированные ДО прогона.)_