textmachine/docs/BACKEND_TRACKA_PACK15_SESSION_PROMPT.md

60 lines
6.8 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.

# Промт: сессия-БЭКЕНД — Трек A, пак-1.5 (экспорт-поверхность + глосс-whitelist + пример), 2026-07-16
> Малый хирургический пак ПОСЛЕ приёмки пака-1 (D39.2, `d3f6b34`). Три задачи — все НЕ гейтятся
> эмпирикой exp15 и закрывают открытые вопросы D39.2 с решениями владельца от 16.07. Крупные слои
> (чанкер B1, кнобы когезии, дифф-apply) **НЕ строить** — они гейтятся результатами exp15 (research/19 §D).
> Смысл окна: все снапшот-сдвиги этого пака ложатся В ТОТ ЖЕ единый `--resnapshot`, который и так
> предстоит (D38.5+пак-1) — сейчас они бесплатны, после resnapshot стоили бы вторую переоплату книги.
## Зона/дисциплина (как в паке-1)
`backend/` только; не коммитить; `.env` не читать; мандат самопроверки ИСПОЛНЕНИЕМ (build/vet/gofmt/
test -race, каждый фикс запинен firing+non-firing тестом, ДО/ПОСЛЕ на сконструированном входе);
golden = инвариант №8 — re-capture только с обоснованием «что и почему сдвинулось» (ратифицировано
D39.2-open + решения владельца 16.07); git status перед работой — в дереве возможны параллельные сессии.
## Онбординг
`CLAUDE.md` → D-лог **D39.2** (что залендено паком-1 + открытые вопросы) → `09-target-architecture.md`
§2 (слой 6) → свой же код пака-1 (sanitizer.go exportNormalize/detectCJKLeak/stripCosmetic,
chunkrun.go FinalText, cmd/tmctl).
## T1 — Read-only экспорт-поверхность для полигона (закрывает D39.2-open №1; НУЖНО ДО пере-прогона)
**Проблема:** exportNormalize живёт на бэкенд-поверхностях (translate stdout / report), а полигонная
экстракция (`records.json`/exp12_extract-класс) читает СЫРЫЕ чекпоинты из store → полигон и
читатель-сэмплы увидят НЕнормализованный текст. Решение оркестратора: НЕ Python-зеркало нормализации
(анти-паттерн зеркального дрейфа), а **бэкенд-поверхность**.
**Сделать:** read-only команда `tmctl export` (проекция класса `status`/`report`: OpenReadOnly, $0,
без снапшот-влияния): для каждого чанка книги эмитит финальный экспорт-текст РОВНО по прод-семантике
(`chunk_status.final_hash` → checkpoint.response_text → [для `sanitizer_stripped` — это уже
стрипнутый derived-чекпоинт] → `exportNormalize`) + метаданные (chapter/chunk/disposition/flag/
snapshot_id) в стабильном JSON (+опц. plaintext). Флагнутые-непоправимые — пустой текст + причина
(как FinalText-семантика). Это и есть отложенный `tmctl export` из D15.2-этап-Б в минимальной форме —
НЕ строй annotations/override-часть, только чтение. Тест: export == translate-FinalText байт-в-байт
на golden-фикстуре (fresh и resume).
## T2 — CJK-глосс-whitelist (решение владельца 16.07: глоссы СОХРАНЯТЬ)
**Сейчас:** `stripCosmetic` стрипает намеренный глосс «Кулак Ло Ханя (羅漢拳)» и пустит скобку;
`detectCJKLeak` флагует такой Han-ран. **Сделать:** узкий whitelist — **сбалансированный Han-ран
целиком внутри скобок, непосредственно после кириллического/латинского слова-головы** (паттерн
«терм (漢字)») — НЕ утечка: `detectCJKLeak` не флагует, `stripCosmetic`/`exportNormalize` сохраняют
байты глосса (вкл. НЕ-фолд его полноширинных символов, если они часть глосса). Голый Han вне этого
паттерна — по-прежнему утечка (прод-класс cjk_leak цел). Краевые: вложенные скобки, глосс с пробелами/
пиньинем, глосс в начале строки без головы (→ утечка), два глосса подряд. `sanitizerVersion` v5→v6 +
golden re-capture (обоснование: решение владельца). Тесты: глосс сохранён (strip и normalize),
standalone-Han флагуется, пустая скобка больше не рождается.
## T3 — `example/book.yaml`: вернуть runnable
После pair-сеама ja-пример fail-loud'ится через zh-ru-keyed pipeline-c1 (сеам работает как задуман).
**Сделать:** переоформить пример на **zh→ru** (реальный прод-контент пары уже есть) — пример снова
проходит end-to-end; рядом закомментированный ja-блок с пояснением «fail-loud до появления ja-ru
пакета» (демонстрация сеама, не заглушка). ja-ru пакет НЕ сочинять (контент пары = данные под
реальную книгу, инвариант общности §0.1).
## T4 — РЕЗЕРВ: фикс-лист отложенного адверсариала D39.2
Оркестратор догоняет отложенный мульти-агентный адверсариал пака-1 (падал на API-529). Если к старту
твоей сессии в этом файле/в D-логе появился раздел «фикс-лист D39.2-долга» — исполни его пункты
(приоритет над T1T3 при CRITICAL/HIGH). Если раздела нет — T4 пуст, работай T1T3.
## Deliverable
Отчёт в ответе (не в PROGRESS): per-T — file:line, ДО/ПОСЛЕ, какие снапшот-версии/golden сдвинулись и
почему, результаты build/vet/gofmt/test -race, само-ревью исполнением. Открытые вопросы — списком.
Не коммитить — лендит оркестратор.