textmachine/docs/experiments/15-segmentation-empirics.md

40 KiB
Raw Blame History

exp15 — эмпирика сегментации/когезии/контракта t-e (research/19 §D, трек B)

Полигон-сессия, 2026-07-17. Промт: docs/POLYGON_SEGMENTATION_EMPIRICS_SESSION_PROMPT.md. Дизайн-оф-рекорд: docs/research/19-chunking-cohesion.md §D (Q0Q5). Зона: 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.pyexp15/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 <book>.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 Корпус S1S4 (структурные профили — ДО прогона; 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 бюджете ~34k ток (различие ТОЛЬКО в выравнивании разрезов на швы; размер-эффект → 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 кластер) — генерализация на «любую книгу» = декларированное ограничение, закрываемое S1S4-разнообразием; один первичный контраст на Q + Holm-Bonferroni; мощность честно: на 812 главах разрешимы средн./крупн. эффекты → первичны ТРАПЫ.
  • Слепота владельца: финалисты — слепые пакеты (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.252.50/0.200.40/2.505.00 (reasoning additive out); mistral-large-3 0.50//1.50; kimi-k2.6 0.95/0.16/4.00; gemini-3.1-pro 24/0.20.4/1218 (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-часы (0104 & 0610 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:35memory.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 бюджете ~34k ток: greedy vs logical — ОДИН бюджет, различие только в выравнивании разрезов на швы. Метрика границы (вторичная): доля scene-shift-швов, на которые разрез попал (выше=лучше) vs доля continuation-швов, разрезанных (ниже=лучше). Размер-эффект (1500 vs 34k) — домен 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 — реюз exp14 sizecurve, $0 генерации (eval/exp15/reflow_omission.py, exp15/q2b_omission.json)

Reflow-инвариантный entity-omission (lemma-match pymorphy3). Оркестратор-амендменты вшиты: (1) match по ЛЕММЕ, inflection вне decl.forms = inflection_gap ФЛАГ (span-чек), НЕ omission; (2) variance-чек→ceiling; (3) content-floor бэкстоп (не сработал); (4) провенанс БАЙТ-идентичен (chapter_source = exp14_sizecurve.py:30-32). Валидирован на вручную-вычитанном ch13-whole (0 ложных omission; term-drift глава→старейшина корректно НЕ omission).

Результат (ch13/17 × 800/1600/3200/whole, 0 err-фолбэков): within-chapter size-span ch13=0.059, ch17=0.0 — НЕТ монотонного size→omission тренда. ВСЕ raw-флаги (класс А,класс В,культивация) = TERM-DRIFT артефакты, не потеря контента: sizecurve-выходы (2026-07-11) ПРЕДшествуют reseed класс/разряд (D38.5, 07-12), рендерят 甲等/丙等 как «разряд» (grep-verified) → истинный entity-omission ≈0 на ВСЕХ размерах.

Вердикт: ПОТОЛОК ИНСТРУМЕНТА (амендмент 2) — это НЕ «размер безопасен»: именованные сущности выживают на любом размере по природе; тихая потеря крупного чанка (если есть) — на уровне КЛАУЗЫ/детали, невидима entity-присутствию. Центральный вопрос size↔omission требует SPAN-СУДЕЙ (платный Q2a), как и заявляет дизайн («Q2b не ратифицирует edit=глава, только Q2a»). Побочно: подтверждён term-drift класс/разряд — glossary-consistency ось, отдельно от omission.

(Q1/Q3 — платные на S2; стартуют после wire-чеков §1.13-C и трап-майнинга.)

§4 — Дерево решений §D5 применённое

(после результатов.)

§5 — Деньги

Спент этой сессии: $0.00043 / $15 (только wire-чек: grok $0.00031 + mistral $0.00004 + glm-5 $0.00008 — exp15/wirecheck.json). Q2b — $0 (реюз sizecurve). Остаток $14.99957. Прогноз полного пакета $13.13 / несущего $8.64 (exp15/budget_calc.py). Пер-call predicted-cost гейт + пер-Q стоп-гейт — в run-скриптах платной сессии.

§6 — Самопроверка + отклонения от пре-рега

Ревью ИСПОЛНЕНИЕМ в каждом скрипте: gender idempotency-реран (applied=0, hash-стабилен) + byte-diff; hand-proofread omission-валидация ch13-whole; wire-гейт асерты (reasoning_tokens>0 и т.д.). Отклонения от §D — §1.12 (зафиксированы ДО прогона). Полигон-само-ловля (D32.4-класс): первичная Q2b verdict-логика ложно показала «discriminating» — omission_rate_span смешивал cross-chapter baseline (17 всегда 2 флага) с size-вариацией; поймано и исправлено на within-chapter size-span ДО записи вывода. «0 ошибок ≠ 0 ошибок» соблюдён: raw-флаги НЕ приняты за omission без term-drift-дизамбигуации.


ХЕНДОФФ — платная сессия Q1/Q3 (полигон, 2026-07-17)

Старт свежей сессии: docs/POLYGON_SEGMENTATION_EMPIRICS_SESSION_PROMPT.md + этот §1 фриз + этот хендофф. ПРЕ-РЕГ ПЕРЕ-СОЧИНЯТЬ ЗАПРЕЩЕНО — любое изменение армов/метрик/порогов/дерева = НОВЫЙ experiment-ID. Бэкенд-дерево ЗАМОРОЖЕНО оркестратором до конца платных армов (якорь A0 стабилен). Пол 人祖=male, 古月=n-a — подписаны.

(а) Позиция в порядке §D2. СДЕЛАНО: пре-рег фриз (коммит) → wire-гейт → Q2b (потолок инструмента; size↔omission → span-судьи). СЛЕДУЮЩЕЕ: Q1 + Q3 (несущие) на S2 → затем Q2a/Q2c → Q4 → Q0. Двойной якорь A0↔A0 на S2 (floor шума) — ДО интерпретации любого Q.

(б) Пины и артефакты.

  • Фриз-коммит b9272a1. Бэкенд HEAD 68032f7 (≥ d3f6b34). Сид guzhenren-seed-v2.yaml sha256 175a67ad2f05caeaec8fc5b8c8d304334e8dc73eebd3caf5fc3b4b8be0c408f4. Промпты: translator 35d3ad6e…, editor 878b0da3….
  • Спент $0.00043 / $15; остаток $14.99957.
  • Скрипты (ВНЕ git, зона eval/exp15/, лендит оркестратор): preflight_models.py, gender_transport.py, structural_profile.py, build_s2prime.py, budget_calc.py, fertility_calib.py, reflow_omission.py, wirecheck.py.
  • Артефакты (ВНЕ git, /home/ubuntu/books/gu-zhenren/exp15/): freeze_facts.json (цены/кэш/риски), preflight_models.json, gender_signoff.yaml, S2prime.txt + S2prime_seams.json + S2prime_seam_labels.json, fertility_calib.json, q2b_omission.json, wirecheck.json, пре-gender бэкап guzhenren-seed-v2.pre-gender.yaml.
  • Реюз $0: exp14/sizecurve/* (Q2b done), exp14/material.json→trap_chunks (9), exp14/arms/A-ref-prev|both (Q3), rerun/records.json (ch13/17 source БАЙТ-идентичен sizecurve — chapter_source).

(в) Мягкие находки / гочи (несущие — не потерять).

  1. Инъекция A0 — ТОЛЬКО из реального tmctl translate (нет $0-пути; порт exp14b_reseed_promote.py ПОВЕДЕНЧЕСКИ УСТАРЕЛ — до-trust-gate longest-match, разойдётся на draft-nests-over-approved). Читать retrieval_state.injected_ids из SQLite; при расхождении верить Go.
  2. Механизм-армы = eval-риги (бэкенд не умеет logical/carryover/lookahead/diff/wide-read). Q1 logical-граница = Python-порт §B1.5-DP; carryover/lookahead — §B3. A0/A0 — единственные из реального бэкенда.
  3. A0 draft deepseek reasoning:"off" в pipeline-c1.yaml = NO-OP (echoMineViolation принуждает thinking-ON) → reproduce thinking-ON.
  4. Q1 size-match: фертильность 1.20·cjk+0.39·other (fertility_calib.json, R²=0.96, glm-4.6-токены; placeholder 0.75/0.25 занижал ~60%). Бюджет Q1 ~34k ток; greedy vs logical — ОДИН бюджет, различие только в выравнивании разрезов на швы.
  5. S2 soft-швы 1 и 7 (scene-shift, LOW confidence: шов1 = топик-переход к экспозиции, шов7 = смена локации по анонсу) — взвесить осторожно, при желании пере-читать. Negative (continuation): 4,5,10,11. Scene-shift: 1,2,3,6,7,8,9.
  6. Трап-квота: если T-tense/T-ana ≥20 straddling scene-shift-швов недоберётся на 7 швах → расширить N节 (build_s2prime.py N, N>12) + пере-классифицировать новые швы ДО платных вызовов. Майнер kimi-k2.6 (семейно чист), исключён из судей.
  7. DeepSeek peak-surge: платные DeepSeek-армы ВНЕ 0104 & 0610 UTC (Beijing ×2, freeze_facts.json), либо ×2 бюджет; ре-чек цен у 24.07-катовера.
  8. Судьи подтверждены живьём: grok-4.3 reasoning-ON (262 rt), mistral-large-latest резолвится, glm-5 PAYG доступен. Gemini как 3-й судья — эмпир-верификация thoughts-accounting ДО опоры на его usage.
  9. reflow_omission.py реюзабелен для детерм. вторички (entity-omission), НО ПОТОЛОК (сущности выживают) — первичка Q1/Q3 = trap-точность span-судей; term-substitution (класс/разряд) = glossary-drift-ось, не omission.
  10. Метрика границы Q1 (вторичка): доля разрезов на scene-shift-швы (выше=лучше) vs continuation-швы (ниже=лучше); первичка — T-tense+T-ana точность (общий знаменатель в A0).