46 lines
11 KiB
Markdown
46 lines
11 KiB
Markdown
# Промт бэкенд-сессии: ПАК-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_escalate` → `escalate_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/checks` — `CheapGateResult`/`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.md` → `09-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` стейджит — декларировать. Вопросы/конфликты — пинг оркестратору через владельца.
|