textmachine/docs/BACKEND_D152_SESSION_PROMPT.md

8.2 KiB
Raw Blame History

Промт: бэкенд-сессия, пакет 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, вопросы оркестратору.