textmachine/docs/BACKEND_D152_SESSION_PROMPT.md

43 lines
8.2 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.

# Промт: бэкенд-сессия, пакет D15.2 — реализация content-addressed resume + качественные фиксы D30 + экспорт-контракт D29 (2026-07-12)
---
## Кто ты и что делаешь
Ты — **бэкенд-сессия** TextMachine, реализационный пакет D15.2 (самый крупный после Ф1-машинерии). Зона: `backend/` + секция «Бэкенд» в `docs/PROGRESS.md`. **Ничего не коммитить** — лендинг оркестратором по этапам (см. этапность). Пакет собирает четыре ратифицированных потока: качественные фиксы D30 (гейтят пере-прогон 25 глав), реализацию D15.2 v3.1, экспорт-контракт D29, накопленные fix-листы.
## Онбординг (~60 мин)
1. `CLAUDE.md` → CURRENT-STATE → `docs/architecture/05-decisions-log.md`: **D30 (мандат качественной части), D29 (экспорт/override), D28.228.3, D22.2 (v3.1-амендменты), D20.120.2, D15** — целиком.
2. **Спека D15.2** (`backend/docs/D15.2-content-addressed-resume-spec.md`) + ревью-требования к ней: D20.1 (v2-правки), D22.2 (v3.1: SourceLang/TargetLang → verdictSnapshotID; cache_ttl → advisory; правило «судьбу получает ЛЮБОЕ brief-поле вне рендера»).
3. `docs/research/16-reader-ide-alignment.md` — ревью-шапка + §34 (контракт экспорта; поправки шапки ОБЯЗАТЕЛЬНЫ: ключ override = хеш СЫРОГО src, RED = дополнение, паспорт-rollup = амендмент).
4. `docs/experiments/12-quality-diagnosis.md` — шапка + §2.5/2.6 (root-cause вёрстки, классы санитайзера).
## Этап А — качественные фиксы D30 (гейтит пере-прогон; лендится ОТДЕЛЬНО и раньше)
1. **Билингв-редактор (флип D1, D30.1):** `editor.md` получает исходник (форма D13.1: простой general-промпт — блок `{{source}}` + инструкция сверять смысл; БЕЗ сложного инжиниринга); bump `prompt_version`. Моно-вариант сохранить отдельным промпт-файлом (пилот-арм D13.1 остаётся подтверждающим).
2. **Reflow (D30.2):** убрать «Сохраняй разбивку на абзацы» из `translator.md:9` и `editor.md:8`; редактору — разрешение нормативной репараграфизации (реплики диалога с тире с абзаца; без максимума длины абзаца); bump обеих prompt_version.
3. **Output-санитайзер (D30.3) — новый детерминированный гейт-класс** (vердикт-ось, дисциплина D2 flag+skip): ведущие сервис-преамбулы («Вот отредактированный…» и класс) И хвостовые блоки «заметок/правок»; markdown-заголовки `###`; латиница-врезки в ru-выходе (порог, не единичные имена); битые словоформы — класс «слово, отсутствующее в выходе draft'а, с внутренним разрывом/дубликацией» детектировать дёшево (минимум: повтор подстроки типа «Первок предок», невалидные кириллические биграммы — предложи детерминированную эвристику, precision > recall, это ФЛАГГЕР). Версионируй как санитайзер-version в вердикт-снапшот.
4. **Golden:** этап А меняет промпты и вердикты → осознанный re-capture (инвариант №8) + **расширение фикстуры по D28.2**: (i) стадия на флорнутой модели, (ii) oblique-only decl entry (golden начинает пиновать floor и union), (iii) кейс санитайзера. Дифф-класс задокументировать.
## Этап Б — D15.2 v3.1 + реализация
- Сначала v3.1-амендменты спеки (D22.2 два обязательных + D20.1: role/stage в guard_hash, editor-каскадное правило dry-run, полевой маппинг §4). Затем реализация: пер-стадийный wireSnapshotID (D20.1-Q1), расщепление wire/verdict, fast-path гард на ВЕСЬ wire-план, pre-flight dry-run «N чанков, ~$X» + `--accept-rebill[=usd]` (порог min($0.50, 5%×Projected)), миграция store с сиквенсингом (старые чекпоинты этапа A/пере-прогона не теряются).
- Axis-sensitivity тест RequestHash (флип role/stage меняет хеш — D22.9); негативный кейс additive_total; hop-checkpoint-replay тест (D28.3а — пин fbHash-зеркала).
## Этап В — экспорт-контракт D29.1
- **`tmctl export`**: канонический ассемблер перевода (нормализация выхода: стрип markdown-###, унификация разделителей) + `annotations.json` annot-v1 (схема research/16 §4.1 С ПОПРАВКАМИ шапки: src_range — офсеты в чанкере (net-new), dst_range nullable/эфемерный, source_file_hash — новое поле, спаны style-флагов пересчитываются линтерами на экспорте, paragraph_anchors — ТОЛЬКО позиционная пара при равном числе абзацев); editor-facing: красные = маркированный плейсхолдер; reader-facing: fail-closed + release-state лестница D25.1 (`run_complete/structurally_complete/quality_reviewed/publishable`).
- **Цвет-мап + GREY** (RED = flagged && reason≠glossary_miss — дополнение, не перечень) + **паспорт-rollup 3-тир** (это амендмент вердикт-правила D12/exp07 — сохранить консистентность с exit-кодом translate; поведение при gate-on задокументировать).
- **human_override слой 1 (LOCK):** per-chunk provenance-состояние; ключ = **хеш сырого src-текста чанка** (новое поле; НЕ chunk_status.content_hash); redrive/resume НЕ трогают override (mutation-тест); слой 2 (carry-over + «needs re-review») — только дизайн-нота, реализация после.
## Попутно (fix-листы, мелочь)
D22.9: CLI-тест `redrive --resnapshot`; комменты models.yaml «native Gemini судья 18+ — Ф2» (устарели против exp11). D23.4-остаток: опц. компонент-тест snapshotID. D28.3: provider_local×floor note; коммент mempostcheck.go:84 «D24.3/D24.4»→«D24.4»; стейл-комменты models.yaml «чистый ключ/data-sharing» → привести к D27.
## Дисциплина
- Этапность лендинга: **А отдельно и первым** (гейтит пере-прогон; Б/В не гейтят). По завершении А — пинг в PROGRESS, не жди Б/В.
- Никаких wire-изменений сверх мандата; каждый фикс mutation-verified; `go build/vet/test -race` чисто; санитайзер и промпты — с тестами на классы из exp12 (преамбула gemini, «Первок предок», ###).
- `git status` перед стартом (чужие правки — стоп); `.env` не читать; книга/diag вне git.
- Отчёт: секция PROGRESS «Бэкенд» по этапам, дифф-классы golden, вопросы оркестратору.