textmachine/docs/BACKEND_PACK16_DIFF_EDITOR_SESSION_PROMPT.md

11 KiB
Raw Blame History

Промт бэкенд-сессии: ПАК-16 «слой-3 diff-редактор» (ДВУХФАЗНЫЙ: дизайн → ратификация → стройка)

Статус: ВЫДАН 25.07.2026, оркестратор №7 (ревизия 2 — усилен по анти-рассинк норме). Слой 3 09-target-architecture.md — крупнейший остаток плана; мандат редактора до сих пор full-regen (D39: причина инверсий). Приоритет подтверждён research/22 §2 №1: конкуренты ЧИНЯТ typed-error адресно (AiNiee ProofreadTask — однострочный proofread с error_type; LinguaGacha — retranslation-by-keyword), мы только флагаем. Их код GPL/AGPL — НЕ копировать ни строчки, брать только идею. North-star: ИЗМЕРЕННЫЙ вклад петли (сколько чинится по классам), не вера.

Цель: флаг детерминированного чекера → адресный ремонт минимального спана дешёвым вызовом → детерминированный re-gate → при неудаче прежний flag+skip.

Инварианты — «РОВНО ТАК» (ратифицировано, из кода не выводится; конфликт промта с кодом/доками → пинг оркестратору через владельца, НЕ интерпретация)

  • Дисциплина D2 неприкосновенна: петля НЕ хард-гейт; неудача ремонта = сегодняшний flag+skip, мусор не течёт в TM/экспорт.
  • Лестница эскалации не ломается: ремонт встраивается в существующую механику regenerate_before_escalateescalate_to (под budget_usd), не меняя её семантику молча (развилки — в D3a).
  • Wire/деньги: $0-резюм драфта НЕ ломать; repair-вызовы = новый класс → чекпойнты, RequestHash, леджер Reserve→Settle с CostSource-маркером; no-repair путь байт-идентичен (петля выключена = сегодняшнее поведение, golden compare-режим зелёный БЕЗ пере-капчера).
  • Общность §0: промпт ремонта = данные пары → файл конвенции prompts/<пара>/<роль>.md; никаких пар/книго-литералов в Go; новые ключи конфига проходят строгий декод.
  • Провайдер-ловушки: DeepSeek thinking НИКОГДА не off (эхо-мина); слаги не менять без live-фактчека.
  • Книга и производные ВНЕ git: валидация на живых rerun2-выходах — на СТЕНДЕ, без коммита текста; в репо — только СИНТЕТИЧЕСКИЕ фикстуры по образцу дефект-классов (тест-данные пары легитимны §0.3, цитаты книги — нет).

Отправные точки в код (сверь САМ — код первичен; это entry-points, не предписания; у тебя контекст кода лучше оркестраторского)

Typed-факты чекеров: internal/checksCheapGateResult/RunCheapGates (cheapgates.go:~89/120), SanitizerResult/SanitizeOutput (sanitizer.go:~142/190), CoverageResult (coverage.go:~139), DC-паттерны из configs/langpacks/zh-ru/dc-checkers.txt (checkers.go:~50). Диспозиция-луп: internal/pipeline/chunkrun.go (classifyOutput). Гейты в волне: waverun.go (draft- и edit-пути). Грубая петля: retries.regenerate_before_escalate (internal/config/pipeline.go:~110). CostSource: store/migrate.go (v10). Инвентаризацию «кто даёт позиции, кто только факт» делай по коду, не по этому списку.

Онбординг (карта чтения — для направления и глубины)

CLAUDE.md09-target-architecture.md (слой 3) → docs/archive/reports/PACK15_STRUCTURE_REPORT_2026-07-25.md (пакет checks, границы) → D39.20 в D-логе (дефект-классы → механизмы) → research/22 §2 №1.

ФАЗА 1 — ДИЗАЙН (без единой правки кода; каждый пункт — «реши сам и аргументируй», советы оркестратора = приоры, опровергаются только аргументом/замером)

  • D1. Единица ремонта + маппинг флаг→спан. Инвентаризация: какие чекеры дают ПОЗИЦИИ, какие только факт; что дотипизировать в checks (не ломая API пака-15). Приор: спан = предложение(я) с матчем + минимальный контекст; дотипизация = позиции в Result-структуры аддитивными полями.
  • D2. Классы петли v1 vs flag-only. Критерий отбора: существует детерминированный ре-чек. Приор: в петлю — юнит-конверсия (时辰), число-масштабы (千万/成), broken-word, latin-residue; flag-only — register/style/coverage (нет детерминированного «починено»). Отдельно отсортируй класс (в): чинится ЧИСТЫМ КОДОМ без LLM (прецеденты уже в проде: заголовок-шаблон пака-13, санитайзер-стрип D30.3) — такие в LLM-петлю НЕ тащить.
  • D3. Механика вызова. Промпт ремонта (src-спан + draft-спан + типизированная ошибка → исправление; язык = данные пары) · где живёт в конфиге (суб-шаг edit-стадии vs новая стадия) · модель · потолок вызовов/бюджет · loop-guard. Приор: суб-шаг edit-стадии (меньше поверхности схемы/снапшота), модель = дешёвая (flash-класс), 1 раунд на чанк, re-gate тем же чекером + полной cheap-сюитой юнита.
  • D3a. Позиция в лестнице эскалации. Как ремонт соотносится с regenerate_before_escalate и escalate_to. Приор: для typed-span дефектов ремонт ПЕРВЫМ (дешевле полного re-gen); regenerate остаётся для классов без спана; эскалация не трогается. Провал ремонта НЕ триггерит regenerate автоматически (иначе двойная оплата пути) — аргументируй, если не согласен.
  • D4. Wire/снапшот/resume. RequestHash для repair-вызовов · чекпойнт-ключи (резюм скипает сделанный ремонт) · снапшот-фолд промпта ремонта · resnapshot ОДИН · golden: эволюция capture новым классом вызовов — пере-капчер ТОЛЬКО по санкции, no-repair путь без пере-капчера.
  • D5. Деньги/отчётность. CostSource-маркер для repair · счётчики «починено/по классам/не удалось» в quality-report и паспорт главы.
  • D6. $0-валидация. Синтетические фикстуры дефект-классов в репо (см. «РОВНО ТАК» про книгу вне git) + прогон на стенде против живых rerun2-выходов без коммита; mini-live гейт = отдельное решение владельца, НЕ в паке.

Приёмка фазы 1: отчёт-предложение docs/archive/reports/PACK16_DESIGN_<дата>.md — НАЧИНАЕТСЯ эхо-блоком (≤10 строк: скоуп / инварианты / не-делать — как ты их понял; расхождение чиним сразу), затем по каждому D: варианты, рекомендация, риски, где расходишься с приорами и почему; адверсариальный селф-ревью дизайна (линзы: детерминизм/resume · деньги · D2-дисциплина · общность «заработает ли на паре, которой нет»). Кода НЕ трогать. СТОП — ратификация оркестратора через владельца.

ФАЗА 2 — СТРОЙКА (только после ратификации; список пунктов станет размеченным «ровно так» при ратификации)

По ратифицированному дизайну. Инварианты фазы: no-repair путь байт-идентичен · парити EXACT · -race весь · тесты на синтетических фикстурах + стенд-прогон. Хвосты первого касания (байт-нейтральные, тем же паком): строгий декод book.yaml (санкционирован; перед вкл. проверить стендовые book.yaml на внесхемные ключи, доложить) · строгий декод pair/models-слоёв · unknown-key-тест пинит ИМЯ ключа · zero-value-паники PickedEntry/Bank (гард или док).

НЕ делать

Канал B (пак-17) · копирование GPL/AGPL · пар/книго-литералы в Go · live-вызовы без санкции владельца · книжный текст в git · расширение скоупа без пинга.

Приёмка (мандат 12.07)

Фаза 1 — см. выше, СТОП. Фаза 2 — ревью исполнением: build/vet/test -race · golden (инварианты выше) · парити · дифф ^func Test ИСПОЛНЕНИЕМ в отчёте (норма после паков 14/15) · адверсариальный селф-ревью. Отчёт docs/archive/reports/PACK16_DIFF_EDITOR_REPORT_<дата>.md. Сессия НЕ коммитит; git mv стейджит — декларировать. Вопросы/конфликты — пинг оркестратору через владельца.