6.8 KiB
Промт: сессия-БЭКЕНД — Трек 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-долга» — исполни его пункты (приоритет над T1–T3 при CRITICAL/HIGH). Если раздела нет — T4 пуст, работай T1–T3.
Deliverable
Отчёт в ответе (не в PROGRESS): per-T — file:line, ДО/ПОСЛЕ, какие снапшот-версии/golden сдвинулись и почему, результаты build/vet/gofmt/test -race, само-ревью исполнением. Открытые вопросы — списком. Не коммитить — лендит оркестратор.