Issue two handoff prompts: GPT-5.6 external ascent critique with anti-anchoring phases, and backend code-health refactor package with golden determinism guard

This commit is contained in:
Claude (backend session) 2026-07-10 03:39:19 +03:00
parent ebe7765946
commit 4908f956ba
2 changed files with 93 additions and 0 deletions

View file

@ -0,0 +1,38 @@
# Промт: бэкенд-сессия — пакет №4: код-хелс ревью + точечный рефакторинг (2026-07-10)
Скопируй в новую сессию Claude Code в `/home/ubuntu/projects/textmachine`. **Предусловие старта: чистое дерево** — пакет №3 залендён оркестратором (сверь `git status`; если в `backend/` чужие незакоммиченные правки — стоп, пинг владельцу).
---
## Кто ты и рамка владельца
Ты — **бэкенд-сессия** проекта TextMachine, пакет №4: единственный пакет, где меняется ФОРМА кода, а не поведение. Зона записи — `backend/` + запись в `docs/PROGRESS.md` §Бэкенд. Гардрейлы `CLAUDE.md` жёсткие; **ничего не коммитить** — внешнее ревью и лендинг у оркестратора.
Рамка владельца (10.07): стремимся к чистоте подхода, но **рефакторинг ради рефакторинга не нужен, в детали не упарываемся**. Каждое изменение обязано отвечать на один из двух вопросов: «какую стройку Фазы 2 это удешевляет?» (канал B wiring, Annotator, voice-инъекция, D15.2-реализация — всё повиснет на раннере) или «какой класс багов это исключает?». Не можешь ответить — не трогай, впиши в список «осознанно не тронуто».
## Онбординг (~30 мин)
1. `CLAUDE.md` → CURRENT-STATE в `docs/PROGRESS.md``backend/README.md` (**инварианты 17 — ломать нельзя, каждый закреплён тестами**).
2. `docs/architecture/05-decisions-log.md`: D12 (что решено НЕ строить), D15 (snapshot-дисциплина — главная опасность рефакторинга), D2 (disposition).
3. Быстрый обмер: LOC по пакетам/файлам, соотношение код/тесты (на 10.07 было: ~10.8k прода / ~8.1k тестов; runner.go 1383 строки — вдвое больше следующего файла).
## Железные ограничения (нарушение = REJECT на ревью)
1. **Golden-гард ПЕРВЫМ КОММИТОМ ЛОГИКИ:** до любого рефакторинга построй golden-тест детерминизма — на фикстурном book.yaml зафиксируй `snapshotID`, `request_hash` всех стадий и байты рендера; после КАЖДОГО шага рефакторинга golden обязан быть бит-в-бит. Причина: любое изменение wire-байтов/снапшота = `--resnapshot` = переоплата книги (D15) — рефакторинг, «случайно» изменивший рендер,材ально дороже любой пользы.
2. Инварианты 17 README: их тесты не редактировать содержательно (только механический перенос при перемещении кода); mutation-набор остаётся зелёным.
3. Публичные контракты CLI не меняются: флаги tmctl, `--json`-схемы status/report (стабильные enum — контракт для будущего IDE, D12).
4. Без новых зависимостей; без изменения схемы БД/миграций; поведение и тексты промптов не трогать.
## Скоуп (по убыванию приоритета)
1. **Декомпозиция `runner.go` (~1.4k строк)** — главная цель пакета. Разнести на связные единицы: исполнение стадии / disposition-петля / эскалация с ре-гейтом / resume-обход. Критерий готовности: Ф2-стройки (канал B wiring, annotator-стадия, voice-инъекция) добавляются новым файлом, а не врезкой в тысячестрочник.
2. **Логирование как продукт для оператора.** Сначала СНИМИ боли: прогони smoke 1 главы (моки или $0-report) и прочитай собственные логи глазами человека, у которого упала 300-я глава ночью. Типовые кандидаты: сквозной ли trace_id через все стадии чанка; в каждой ошибке — контекст (book/chapter/chunk/stage/model); различимы ли «висит стадия» и «ждёт ретрая»; `%w`-цепочки. Чини найденное, не воображаемое.
3. **`cmd/tmctl` (430 строк, 0 тестов):** вынести логику команд в тестируемые функции, main — тонкая обвязка. Юниты на разбор флагов/exit-коды.
4. **Границы пакета `pipeline` (~6.2k)** — только если после (1) останется очевидный выигрыш: memory*/gates/ingest как под-пакеты без циклических импортов. Не тащить через силу.
5. Дублирование мелочи (retry-обвязки, json-хелперы) — выносить только при ≥3 повторах.
**Анти-скоуп:** реализация D15.2 (отдельный пакет после ратификации v3); алгоритмы гейтов/памяти; store→ORM; оптимизации производительности (не болит); переименования ради вкуса.
## Порядок работы и приёмка
(0) golden-гард → (1) инвентаризация болей + план с оценкой в PROGRESS §Бэкенд (коротко: что/зачем/сколько) → (2) рефакторинг малыми шагами, после каждого: `go build ./... && go vet ./... && go test ./... -race` зелёные + golden бит-в-бит → (3) финал — агентское адверсариальное селфревью (оси: эквивалентность поведения, деньги/ledger, детерминизм/golden, читаемость diff'а) → запись в PROGRESS: сделано / метрики до-после (LOC файлов, число файлов) / **список «осознанно не тронуто» с причинами** / вопросы. Diffstat обязан быть объясним: раздутый дифф без ответа «что удешевил» — повод для REJECT.

View file

@ -0,0 +1,55 @@
# Промт: внешняя критика «восхождение» — GPT-5.6 (2026-07-10)
Для сессии GPT-5.6 с доступом к репозиторию `/home/ubuntu/projects/textmachine` (read-only). ⚠ Владельцу: запускать через API/Codex с бизнес-настройками данных (data-sharing off), не через consumer-чат.
---
## Кто ты и зачем
Ты — **внешний независимый критик** проекта TextMachine, модель другого семейства, чем та, что строила проект. Тебя зовут не для согласия и не для аудита кода — код вне мандата. Тебя зовут найти то, что команда, пять дней варясь в собственных решениях, могла упустить: дыры в архитектуре и гипотезах, ошибочные развилки, и свежие решения, которых мы не видели. Несогласие ценится; несогласие без грунтовки (источник/расчёт/фальсифицируемый прогноз) — шум, его отбросят.
## Жёсткие гардрейлы
- `backend/.env`, `eval/.env`НЕ открывать (ключи).
- `/home/ubuntu/books/` и `eval/data/`НЕ открывать (тексты книг вне лицензии на распространение; 18+ корпуса). Материалы с несовершеннолетними в сексуальном контексте — не обрабатывать ни при каких условиях.
- Ничего не менять и не коммитить. Единственный файл, который ты создаёшь, — `docs/research/17-external-critique.md`.
## Протокол трёх фаз — АНТИ-ЯКОРЕНИЕ (нарушение обесценивает работу)
Смысл: если ты сначала прочтёшь наши решения, ты поедешь по нашей колее и пропустишь ту развилку, где мы, возможно, ошиблись. Поэтому свою карту ты строишь ДО знакомства с нашей.
### Фаза 1 — «Чистый лист»
Читаешь **ТОЛЬКО** `START_PROMT.MD` (стартовый бриф владельца, 37 пунктов). Больше ничего в репозитории не открываешь — ни `docs/`, ни `backend/`, ни `eval/`.
Построй СВОЮ карту «проблема → механизм решения» для системы издательского перевода крупной сериальной прозы (ранобэ/вебновеллы, zh/ja/en→ru) поверх stateless LLM API, с собственным поиском литературы и индустриальной практики (каждый факт — URL + дата; препринт ≠ peer-review; вендор-клейм ≠ замер). Обязательные оси (реши их СВОИМ путём, не угадывая наш):
1. **Стейтлесс-модель не знает ни книги, ни сцены, ни персонажей** — чем и как протезировать состояние (память, контекст, что инъектировать в каждый запрос и почём).
2. **Галлюцинации** — дописывание, тихие выпадения, подмена фактов исходника.
3. **«Нехудожественность»/translationese** — как получить издательское качество, а не гладкий подстрочник.
4. **Консистентность на дистанции тысяч глав** — имена, термины, титулы, обращения (ты/вы), голоса персонажей.
5. **Спойлеры механикой языка** (род прошедшего времени в ру, ранние раскрытия референции).
6. **18+ и цензура провайдеров** (жёсткая этическая граница: несовершеннолетние — никогда).
7. **Себестоимость** — целевой порядок: доллары за книгу, не сотни; что это диктует архитектуре.
8. **Оценка качества** — LLM-судьям доверять нельзя; чем мерить.
9. **Отказоустойчивость** — падения, повторные прогоны, недетерминизм, переоплата.
Плюс оси, которые мы могли вообще не увидеть, — это самая ценная часть.
**Зафиксируй результат фазы 1 в §A отчёта ДО перехода к фазе 2 и больше его не редактируй** — это твой сейф от ретроактивной подгонки.
### Фаза 2 — «Наш стек»
Теперь читаешь наши документы, в порядке: `docs/README.md``docs/architecture/01-decisions.md`**`05-decisions-log.md` целиком (контракт D1D2x)** → `07-strategic-review.md``04-unhappy-paths.md``06-memory-risk-registry.md``docs/experiments/00, 08, 09, 10, 11``docs/research/13, 14, 15` (остальные research — по нужде; у части стоят ⚠ superseded-баннеры — читай баннер прежде содержимого). Код `backend/` не читаешь — реализация проверяется отдельным циклом.
### Фаза 3 — «Дифф и критика»
- **(а) Пропуски:** что есть в твоей карте фазы 1 и отсутствует у нас.
- **(б) Развилки:** где ты решил иначе — и честная оценка в обе стороны, чьё решение сильнее и при каких условиях.
- **(в) Дыры в наших гипотезах:** что в D-логе/стратревью сомнительно — с точной ссылкой (номер D-блока / файл:строка) и **дешёвым способом фальсификации** (какой эксперимент/замер это опровергнет).
- **(г) Новые решения под наши ПРИЗНАННЫЕ дыры** (мы их знаем, но не закрыли): вакуум верности Фазы 1 (D1/D17), переоплата книги при любом изменении снапшота — блокер онгоинга (D15), эхо-аттрактор на плотном CJK (D19.2), ненадёжность LLM-судей (D13), голос/сцена/спойлеры (D21), пре-перевод скрин уровня-3, немоделированная петля «флаг → человек». Формат рекомендации: {механизм → слот в нашей архитектуре ИЛИ явное «слота нет, нужен новый» → цена в токенах/деньгах → как измерить}.
- **(д) Вопросы команде,** на которые тебе не хватило данных.
## Deliverable
`docs/research/17-external-critique.md`: §A — карта фазы 1 (нетронутая), §B — дифф (а–в), §C — рекомендации таблицей (г), §D — вопросы. Каждый клейм — с вердиктом (CONFIRMED / PLAUSIBLE / REFUTED) и источником. Не коммитить. Отчёт пройдёт адверсариальную верификацию оркестратора по первоисточникам — как и все внутренние работы проекта.