textmachine/docs/RESEARCHER_CHUNKING_COHESION_SESSION_PROMPT.md

65 lines
17 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.

# Промт: сессия-РЕСЁРЧЕР — логическая нарезка + меж-чанковая когезия + дизайн эмпирики (трек B), 2026-07-13
> Рождён из арх-ресета **D39** (`docs/architecture/05-decisions-log.md`, `09-target-architecture.md` §2 слой 1, §4 трек B). Это **ресёрч ПЕРЕД постройкой** для сцепленных концернов **1 (разделение переводчик/редактор), 2 (нарезка), 4 (частично)**. Ты НЕ пишешь прод-код и НЕ гоняешь платную эмпирику — ты (1) добываешь best-practices, (2) проектируешь реализуемый чанкер+когезию, (3) выдаёшь ПРЕ-РЕГИСТРИРОВАННЫЙ дизайн полигон-эмпирики, которую потом исполнит полигон-сессия.
## Зачем эта сессия (мета)
Потолок художественности — в НАШЕЙ нарезке/проходах, не в моделях (D39). Три сцеплены: редактор репараграфизует ВНУТРИ ~1500-токенного чанка → нарезка ограничивает потолок дискурс-переверстки и «понимания связей». Владелец: **нарезка нетривиальна** — глава может быть >> загружаемого чанка, резать надо по **логическим** единицам (статический код, фоллбеки, интернет-best-practices), а не «все китайские книги такие, грузим главы». Нужно спроектировать это правильно И спроектировать эксперимент, который разрешит открытые вопросы, а не соберёт ложную сходимость (полигон делал это трижды — D32.4).
## Зона и дисциплина
- **Зона записи — `docs/research/` только** (новый отчёт, напр. `docs/research/19-chunking-cohesion.md`). Ничего не коммитишь — лендит оркестратор после верификации первоисточников (как research/1518).
- **Гардрейлы (CLAUDE.md):** НЕ читать `.env`; 18+ уровень 3 — не открывать `eval/data/*corpus*`, `/home/ubuntu/books/` (кроме метаданных/структуры, если понадобится оценить размеры глав — тогда ТОЛЬКО счётчики, не содержимое explicit).
- **Правило двух направлений:** несущий клейм → первоисточник; аномалия/best-practice тула → офиц. дока. Не абсорбируй фреймворк-маркетинг как факт.
- **Анти-анкоринг (как research/18):** §A своего вывода замораживай (sha256) ДО чтения нашего стека/предыдущих отчётов, чтобы независимость была реальной.
- **Мандат самопроверки (CLAUDE.md):** несущие клеймы верифицируй адверсариально своим воркфлоу (author≠reviewer внутри сессии: твой «CONFIRMED» — по первоисточнику, не по вторичке); отметь, где сходимость общая-ногой-литературы, а не 3 независимых голоса.
## Онбординг
1. `CLAUDE.md``docs/architecture/09-target-architecture.md` (§2 слой 1 — целевой чанкер; §4 трек B — вопросы) → `08-sync-audit-ledger.md` дорожка **L2** (все находки нарезки) + `L1` (контракт переводчик/редактор).
2. `docs/architecture/05-decisions-log.md` **D39** + D30.2 (`:366` — reflow-механизм открытый вопрос) + D35 (`:471` — декаплинг = un-ratified кандидат).
3. **Код нарезки** (грунтовка, не по заголовкам): `backend/internal/pipeline/chunker.go` (жадная упаковка абзацев в `targetChunkTokens=1500` const, спуск до предложений; границы бюджетные), `ingest.go` (как формируются главы), `chunkrun.go` (чанк = единица И черновика И редактуры; инъекция только глоссарий — меж-чанковой когезии нет), `render.go`/`config/pipeline.go` (`STMDepth`/`OverlapTokens` — мёртвые заглушки).
4. **Предыдущая эмпирика:** `docs/experiments/14-quality-empirics.md` (кривая размера чанка §2Б.4; A-ref ±1 §2.4; P1c глава-целиком §2.3) + `docs/research/18-quality-levers.md` §A (Ось-4: держать чанк МЕЛКИМ + carryover; глоссарий ≈14% дискурс-ошибок, дейксис ~37%, эллипсис ~29%) + `16-reader-ide-alignment.md`, `12-*` (дискурс-нормы, кросс-предложенческая когезия).
## ⚠ ЦЕНТРАЛЬНЫЙ КОНФЛИКТ, который сессия ОБЯЗАНА адресовать
**exp14 §2Б.4** намерял: крупнее чанк = дешевле выходных токенов И лучше абзацы (оптимум ~3200c/глава, 0 ретраев) → «edit=крупная единица». **research/18 §A Ось-4** заключает ОБРАТНОЕ для прода: держать чанк МЕЛКИМ (малый retry-blast-radius, Lost-in-Middle), а когезию давать кэшированным running-summary/carryover — «а НЕ размером единицы». Оба клейма grounded, но **противоречат по размеру edit-единицы**. Твой дизайн эмпирики должен этот конфликт РАЗРЕШИТЬ (на retry-adjusted-cost + на реальном вебновелл-срезе, не PD-классике), а не выбрать сторону догадкой.
## ЗАДАЧИ
### Задача 1 — Best-practices логической/семантической нарезки (интернет + академия)
Добудь и адверсариально верифицируй, КАК правильно нарезать крупный НАРРАТИВНЫЙ текст на логические единицы, когда глава >> окна модели:
- Инженерные best-practices: recursive/semantic splitting, sentence-window / parent-document, discourse/scene-boundary detection, topic segmentation (TextTiling и потомки), overlap-стратегии — с их РЕАЛЬНЫМИ ограничениями (не маркетинг фреймворков).
- Как это делают CAT/пром-MT тулы и переводчики-практики (сегментация по смысловым блокам, не по строкам).
- Академия по кросс-предложенческой когезии, релевантная нарезке: Voita (дейксис/эллипсис/когезия), DelTA / running-summary, document-level MT context windows.
**Выход:** реализуемый в СТАТИЧЕСКОМ Go-коде дизайн: (а) стратегия `logical` (сцена/диалог/тема-граница) с **фоллбек-лестницей** и инвариантом «никогда не резать предложение»; (б) какие сигналы границы детектируемы БЕЗ модель-вызовов (дёшево — владелец: «не модель-вызовами размечать чанк»); (в) конкретные фоллбеки при провале детекции. Рассмотри ВСЕ кейсы, не только «1-2-3-4 мелкие главы влезли в чанк» (это простейший).
### Задача 2 — Дизайн меж-чанковой когезии
Спроектируй механизм, закрывающий претензию-2 «понимание связей» при чанк-изоляции + zh zero-anaphora:
- running bilingual summary + carryover соседних единиц (оживить `STMDepth`/`OverlapTokens`), cache-friendly (порядок кэша важен — research/18);
- ±1 reference-контекст (exp14 дал null на PD-срезе — но домен-mismatch: нужны РЕАЛЬНЫЕ кросс-граничные трапы вебновеллы);
- как это НЕ ломает деньги/снапшот/детерминизм (read-only контекст, fold в снапшот).
### Задача 3 — Дизайн контракта переводчик/редактор (концерн 1)
research/07 предписывает узкие мандаты + диффы, не полную перегенерацию; прод-редактор = ОДНА full-regen с 4 мандатами (причина инверсий D34.3). Спроектируй (для эмпирики, не для прода):
- арм **«переводчик отдаёт структурный ~верный черновик»** vs «редактор-переписыватель» — **НИКОГДА не тестировался** (exp14 держал модель черновика константой);
- diff-based редактор (search/replace + детерм. apply) как узкий проход — оценка ROI (blast-radius, COGS, omission-safety).
### Задача 4 — ПРЕ-РЕГИСТРИРОВАННЫЙ дизайн полигон-эмпирики (для исполнения полигоном)
Спроектируй эксперимент, разрешающий концерны 1/2/4 БЕЗ ложной сходимости. Не полный факториал (24 ячейки — неподъёмно) — **набор целевых 2-арм контрастов к общему якорю** на едином **МАРКИРОВАННОМ вебновелл-срезе** (не PD-классика — гейт «вне претрейна»):
- **Q1 (нарезка):** `граница greedy vs logical` при фикс. edit-единице → чинит ли логическая граница когезию (претензия-2).
- **Q2 (edit-единица, РАЗРЕШАЕТ КОНФЛИКТ):** `edit=чанк vs edit=глава/крупная` на **retry-adjusted** COGS + когезия.
- **Q3 (когезия):** `нет vs running-summary/carryover` при МЕЛКОМ чанке → закрывает ли carryover кросс-границу (клейм research/18).
- **Q4 (контракт):** `где reflow: переводчик vs редактор vs отдельный-пасс` + арм сильного переводчика.
- **Обязательно:** маркированный набор КРОСС-ГРАНИЧНЫХ трапов на вебновелл-срезе (аудит: §D-1 «locus когезии не размечен»); methodology-guard D32.4 (fidelity-first агрегация, leave-one-out судей, катастроф-скрин к победителю тоже, per-call кап, пре-регистрация ЗАМОРОЖЕНА коммитом ДО первого платного вызова, каждый скрипт персистит usage/cost).
## Полигон-синк — ОТВЕТЫ получены (2026-07-13), ВПЛЕТИ в дизайн
Оркестратор синканулся с полигон-сессией 14/14б. Факты (grounded по артефактам, всё ВНЕ git в `exp14/`):
1. **Translate-арм НЕ гонялся:** frontier-as-ПЕРЕВОДЧИК спот-чек (14:148) планировался, но `exp14/costs.jsonl` — только РЕДАКТОРСКИЕ армы (ре-редактуры фикс. flash-черновика). Draft-swap/translate-плеча НЕТ. → **«переводчик отдаёт структуру» (Q4) — чистое поле, ни одного датапоинта.**
2. **Реюз (дёшево):** кривая размера — выходы `exp14/sizecurve/{17,13}-{800c,1600c,3200c,whole}.txt` + `sizecurve.json`; исходник = детерм. `chapter_source()` из `material.json`; границы байт-воспроизводимы (жадный `rechunk(budget)` детерминирован). A-ref — `exp14/arms/A-ref-{prev,both}/{11.1,24.1}.txt` + `material.json→trap_chunks`. **`A-ref-next` НЕ гонялся** (только prev/both) — next-supported/катафора-плечо ОТСУТСТВУЕТ.
3. **Кросс-граничный null = ДОМЕН-АРТЕФАКТ, не бесполезность рычага:** чистого next-supported/катафора-трапа в раннем срезе не нашлось; T5/T6 локально самодостаточны → A-ref-prev байт-идентичен «чинить нечего» (14:93/257/290). Маркированного кросс-граничного набора НЕТ. §D-1 (locus когезии не размечен) в силе.
4. **Сцен-граница — СОЗНАТЕЛЬНО не гонялась:** докстринг `exp14_sizecurve.py:10-11` — ранняя арка 蛊真人 **структурно плоская** (1 предл./строка, мало сцен-маркеров) → «сцена vs жадная» слабо различима на ЭТОМ тексте. Не тулинг/время — домен.
**СКВОЗНОЙ ВЫВОД (несущий для дизайна):** три из четырёх пробелов (Q1/Q3/Q4) — непротестированные допущения на НЕПОДХОДЯЩЕМ домене (плоская ранняя арка 蛊真人), а НЕ отрицательные результаты. Прямые следствия для §D:
- **Домен-пригодность — ПЕРВЫЙ шаг эмпирики.** Сначала **характеризовать структуру целевой книги** (蛊真人 целиком, не только ранняя арка: есть ли сцен-маркеры, кросс-главные зависимости, разброс длины глав) — ТОЛЬКО метаданные/структура, не explicit-содержимое. Если книга плоская и дальше → это САМО ПО СЕБЕ находка: логическая/сцен-граница для НЕЁ малополезна, доминирующий рычаг = внутри-чанк верность (T1-floor) + размер edit-единицы, а не граница. Не строить сцен-чанкер под домен, который его не задействует.
- **Трап-набор Q1/Q3/Q4 должен быть на срезе С выраженной сцен-структурой + реальными кросс-граничными зависимостями** (маркированный, вебновелл, вне претрейна) — иначе снова неинформативный null. Выбор среза обоснуй характеризацией (шаг выше).
- **Дешёвый путь (от полигона):** реюзать кривую (Q2) + A-ref-prev/both как есть; дозаказать только `A-ref-next` + translate-плечо (Q1 реюзит те же 2 T-трапа почти бесплатно); маркированный кросс-граничный + сцен-структурированный набор разблокирует Q3+Q4 разом.
## Deliverable
`docs/research/19-chunking-cohesion.md`: §A (заморожена sha256, ДО чтения стека) · §B (best-practices нарезки+когезии, реализуемый Go-дизайн + фоллбеки) · §C (дизайн контракта t/e) · §D (пре-регистрированный арм-дизайн Q1Q4 + маркированный трап-набор + methodology-guard) · §E (открытые вопросы владельцу/бэкенду). Несущие клеймы — с первоисточником; отметь общую-ногу-литературы vs независимые голоса. Оркестратор верифицирует по первоисточникам и лендит; полигон-эмпирику по §D запускаю отдельным промтом ПОСЛЕ (author≠reviewer). **Ничего не коммить.**