textmachine/docs/BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md

60 lines
21 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.

# Промт бэкенд-сессии: РЕ-ПРОБА FLASH + ОТЛАДОЧНЫЙ ХОЛОДНЫЙ ПРОГОН С АВТОБАНКОМ (строка 74 → контроль всех узлов; деньги потолками)
**Выдан 02.08.2026, оркестратор №9; санкция владельца 02.08 («надо идти и делать холодный прогон с контролем бэкенда; цель — отладка бэкенда»).** Ты — бэкенд-сессия TextMachine с двойной ролью: подготовка/верификация готовности → контролируемый платный прогон с отладкой каждого узла. Зона: `backend/` + стенд `~/books/gu-zhenren/` + свой отчёт в `docs/archive/reports/`. НЕ коммитить — лендит оркестратор. **Первый деливерабл — эхо-блок ≤10 строк** (первым сообщением ДО работы: как понял скоуп / фазы и их СТОП-точки / потолки денег / что вне скоупа; подтверждения не жди — работай до СТОП-условий).
**Деньги (жёстко):** фаза A = $0 (ни одного вызова провайдеров). Фаза B (ре-проба) ≤ **$0.15**. Фаза C (прогон) ≤ **$5.00** суммарно; потолок продублирован в книжных потолках `book.yaml ceilings``book_usd: 5.00` И `day_usd: 5.00` (⚠ эталон coldrun-a несёт `day_usd: 0.25` — не поднимешь, встанешь посреди фазы C; ключа `budget_usd` НЕ существует, строгий декодер упадёт). Превышение любого потолка = СТОП+релей владельцу; НИКАКИХ тихих перепокупок — каждая пере-покупка видна и посчитана. В отчёте деньги — ДВУМЯ независимыми путями (request_log/леджер И сырьё провайдера); помни: **леджер = НИЖНЯЯ граница** (строка 78: 2xx с battым декодом списывается, в request_log не попадает).
## §0. Рамка
**Глобальный критерий владельца (дословно): «Мультиязычный бэкенд перевод с чистой архитектурой и современными подходами к переводу опережающий конкурентов по харнесс решениям».** Цель захода — **ОТЛАДКА БЭКЕНДА живым прогоном**: каждый узел (нарезка → черновая волна → майнинг-стоп → терминолог → банк → инъекция → редакторская волна → гейты/чекеры → эскалация → экспорт → деньги/чекпойнты/бэкапы) обязан отработать наблюдаемо и объяснимо. Что-то не так → СТОП (чекпойнты держат) → диагноз до корня → фикс. **Дыра архитектурная → СТОП+пинг с диагнозом и вариантами решений — НЕ чинить на месте.** Запрещены хаки и ворэраунды: каждый фикс — поддерживаемое МУЛЬТИЯЗЫЧНОЕ решение; оба ревью-вопроса общности обязательны на каждый фикс: «заработает ли пара, которой в репо ещё НЕТ, без правки Go?» и «вторая книга той же пары — без ложных флагов и без правки Go?». Заморозка прогона чекпойнтом ради доработки = ЛЕГИТИМНЫЙ исход захода, не провал.
**Самопроверка исполнением обязательна** (владелец 12.07): свой код + сформированные запросы к моделям + полученные результаты. **Вывод на агрегате до вскрытия единиц запрещён** (D39.61): перед любым «узел работает/не работает» открой хотя бы одну живую единицу (чанк/банк-строку/лог) с каждой стороны. В конце — адверсариальный проход author≠reviewer по СВОИМ фиксам. Канал вопросов: непонятно / конфликт промта с кодом или доками / замер бьёт по посылке → СТОП+пинг оркестратору через владельца, НЕ интерпретация.
## §1. Онбординг (карта чтения; целиком доки НЕ читать)
1. `CLAUDE.md` (гардрейлы: `.env` НЕ читать · DeepSeek thinking НЕ отключать · аномалия → вендор-дока, не гадать) → `docs/README.md` (карта) → CURRENT-STATE в `docs/PROGRESS.md` (курс; строка 74 бэклога = твоя фаза B) → голова D-лога по ссылкам (эра D39.7x8x). Жаргон → `docs/glossary.md`.
2. **`docs/experiments/00-provider-quirks.md` ЦЕЛИКОМ — ПЕРЕД любым платным вызовом** (катовер DeepSeek-0731 · finish=stop only · эхо-мина · слаги только live-фактчеком). Peak-valley DeepSeek живёт НЕ там, а в D39.7/experiments-15 — окна в §3 ниже.
3. `backend/README.md` (инварианты «ЛОМАТЬ НЕЛЬЗЯ» + структура).
4. Прошлый холодный прогон: `docs/archive/reports/COLDRUN_REPORT_2026-07-31.md` — как выглядел здоровый прогон ДО банк-стопа, и его грабли.
## §2. Фаза A — верификация готовности ($0)
**Вердикт готовности — ТВОЙ**: чек-листы ниже — приоры оркестратора (опровергаются аргументом/замером), не предписание; расширяй по своему усмотрению, режь с аргументом в отчёте.
**Известное на 02.08 (находки холодного аудита — сверь исполнением, не переоткрывай):** батарея A1 была зелёной при лендинге D39.82 (твой прогон обязан воспроизвести) · счётчики голос-флаггера СУЩЕСТВУЮТ в read-model (`retrieval_state.n_voice_flags`/`voice_detail`, агрегация `quality.go:269-276`), но НИ `renderQuality`, НИ status их не печатают — готовая дыра наблюдаемости под A3 · риг классификатора 6/6 исполним из бэкенда (классификатор — `terminologist.go:395`, harm-набор из шести терминов — `BANK_QUALITY_DESIGN_2026-08-01.md:107`) · банк-пауза = exit 3, продолжение = пере-запуск `translate` без `--verify-bank`, стоп посреди волны = SIGINT/SIGTERM (graceful, `main.go:63`), $0-резюм закреплён тестом · `redrive --dry-run` строит Runner без трат (валидация ключей/конфига).
- **A1. Батарея числами в отчёт:** `go build ./...` · `go vet ./...` · `go test -race ./...` · парити `TM_MINER_PARITY=1 … -run Parity` EXACT · labels-фриз (`TM_CHECKER_LABELS=1 …`: k4b 10/1/36/99 · k4_inverse 3/0/1/71 · k2 34/1/6/51 · K6 1/6/0/251 · k4a 0/0/0/348) · голден `TestGoldenDeterminism`.
- **A2. Сквозной $0-прогон:** полный пайплайн на фейк-провайдере = голден-тест (он и есть сквозняк; CLI-достижимого фейк-провайдера нет — голден-БД живёт в t.TempDir). CLI-читаемость `tmctl status`/`report`/`export` проверь либо сквозняком на ЛОКАЛЬНОЙ модели стенда (kind `local`, ollama — реши сам, $0), либо в C1 на первой живой БД до редакторской волны — не гадай, выбери и аргументируй.
- **A3. Чек-лист наблюдаемости** — хватит ли телеметрии КОНТРОЛИРОВАТЬ живой прогон. На каждый пункт в отчёт: «есть (чем смотрю: команда/файл)» ЛИБО «дыра → починил ($0)». Пункты: логи (LOG_LEVEL; тела запросов — LOG_LLM_BODIES=1 И debug, приватность по умолчанию) · деньги (request_log/леджер/смета/reserve-settle; видимость эскалаций и ре-биллов) · статус на живой БД (`OpenReadOnly`-путь без flock) · чекпойнты/resume/redrive (как остановишь и продолжишь) · **F4 pre-flight построен D39.82 — этот прогон его ПЕРВЫЙ боевой клиент**: бэкап+integrity на старте, `backups/` пишутся · счётчики узлов: волны/ретраи, майнер (эмиссия/кластеры), банкнота-канал, терминолог-батчи, инъекция банка (**подтверждать байт-диффом `tmctl translate`+LOG_LLM_BODIES, НЕ по `injected_ids` — там только exact-хиты**), flag_reason-распределение, счётчики голос-флаггера (наблюдение для строки 13б; не выведены наружу → это дыра наблюдаемости, чини $0) · диск под `~/books`. Фиксы наблюдаемости: голден-нейтральны, вербозность за флагами; вердикт-двигающее = СТОП+пинг.
- **A4. Стенд:** `~/books/gu-zhenren/coldrun-b/` — СВЕЖАЯ отдельная БД, **ПУСТОЙ сид (прогон холодный — сид НЕ подключать)**; `book.yaml` от эталона `coldrun-a/book.yaml` (лейблы/жанр/register_blocklist как в эталоне; `ceilings: book_usd 5.00 / day_usd 5.00`). Конфиг-санити исполнением. Ключи провайдеров: наличие проверяй $0-путём `tmctl redrive --dry-run` (строит Runner → fail-loud валидация ключей и конфига, денег не тратит; ⚠ dry-run обходит F4-pre-flight — для свежей БД это ок, известный хвост строки 93), `.env` НЕ читать.
- **A5. Веха готовности** — раздел «Фаза A» в отчёте. Дыр класса «нужно чужое решение» нет → продолжай в B БЕЗ ожидания; есть → СТОП+пинг.
## §3. Фаза B — ре-проба flash (строка 74; ≤$0.15)
Предмет: DeepSeek-V4-Flash-0731 сменил веса ПОД ТЕМ ЖЕ СЛАГОМ — боевая черновая форма покупала пустые ответы; эхо стохастично по вызову. Пробуй БОЕВОЙ формой запроса (ровно та, что шлёт пайплайн: thinking-ON, боевые max_tokens/флор — не синтетическая):
- **Носитель пробы** (одиночного верба у tmctl нет): расширь live-tagged риг (`pipeline/live_conformance_test.go`) БОЕВЫМ рендером запроса на реальных чанках будущей coldrun-b — та же сборка промпта/параметров/флора, что боевой черновой путь, не синтетика. N≈812 черновых вызовов; ВСЁ сырьё persist durable в `~/books/gu-zhenren/coldrun-b/reprobe/` (норма «персист, не scratch»). Критерии здоровья: 0 пустых ответов · finish=stop 100% · эхо в пределах известной нормы (~6%, D39.61) · без систематических усечений. **Пограничные числа (1 эхо на дюжине · 5/6 классификатора · единичный не-stop finish) = НЕ здоров → в релей с числами**; «здоров» = чистое прохождение ВСЕХ критериев.
- 12 батча ТЕРМИНОЛОГА боевой формы: ⚠ reasoning 8063/батч упирался в cap 8000 (D39.65) — батч обязан пролезать; не пролезает → это часть развилки, в релей. Кандидатов для батча в свежей coldrun-b нет до черновой волны — возьми из майнинг-сырья coldrun-a (durable-экспорты `~/books/gu-zhenren/coldrun-a/`).
- Порог классификатора 6/6 harm-набора (~$0.01, D39.69 §2): риг исполним из бэкенда (см. «Известное» §2) — прогнать; 6/6 = порог, 5/6 = НЕ здоров (в релей).
- Время: платные генерации — в ДОЛИНЫ DeepSeek (пики UTC 0104 и 0610); сверь текущее UTC, попадаешь в пик → жди долину либо зафиксируй в отчёте решение с причиной.
**Развилка по итогам (решение — ВЛАДЕЛЬЦА, строка 74):** здоров по всем критериям → фаза C без ожидания. НЕ здоров → СТОП+релей с числами и рекомендацией: (а) флор 16000 (сдвиг request_hash безболезнен — перекупок на этой фазе нет; хвост не закрывает) / (б) явный `reasoning_effort` (дешевле ~22%, но нужен амендмент `echoMineViolation` + качество черновика при low не судилось — замер ~$0.05) / (в) ждать вендора. Ручку #77 (ре-ген эха) сам НЕ включаешь — тем же решением владельца.
## §4. Фаза C — холодный прогон с автобанком (~10 глав; ≤$5)
Ступенчато, с инспекциями; Q2/Q7-полигон-слоты и судья Ф2 сюда НЕ входят.
**Механика ступеней (важно, не гадать):** майнинг-стоп идёт после ВСЕЙ черновой волны → смок = `source_file` из 2 глав В проекте coldrun-b; добор = ДОПИСАТЬ остальные главы в тот же source_file/тот же проект/ту же БД — **вторую БД НЕ создавать** (непрерывность банка и есть предмет отладки автобанка). ⚠ ЛЕГИТИМНО при доборе: рост auto-банка двигает draft-снапшот; байт-неизменные юниты спасает re-pin (`repin.go`), а изменённые инъекции глав смока перекупятся ПОД порогом консента (min($0.50, 5%) — `rebill.go`) — это НЕ «тихая перепокупка» и НЕ дефект: посчитай, объясни в отчёте, ложный СТОП не делай.
- **C1. Смок: 2 главы.** Черновая волна → майнинг-стоп → терминолог → банк-пауза `--verify-bank` как ТВОЯ инспекционная точка (НЕ подпись владельца — банк автономен, D39.77): вскрой банк (язык dst · target_script-экран · размеры · KWIC-санити · доля ⟨проверить⟩), вскрой глазами 23 черновика (единицы, не агрегат), сверь деньги леджер↔сырьё. Всё объяснимо → продолжай С НЕПОДПИСАННЫМ банком по механике кода (продолжение без `--verify-bank` несёт банк дальше с маркером ⟨проверить⟩ — это и есть автобанк). Редакторская волна на тех же 2 главах → гейты/чекеры → экспорт → вскрой 23 финала глазами.
- **C2. Добор: остальные ~8 глав** тем же порядком (пауза банка — на твоё усмотрение, аргументируй в отчёте), с контролем узлов по чек-листу A3.
- **C3. Обязательные наблюдения по ходу (в отчёт, per-узел):** счётчики волн/ретраев/эскалаций · эхо-события · упоры max_tokens (⚠ строка 45) · банкнота: кандидаты→банк, потери на пути · инъекция: байт-дифф подтверждение минимум на 2 чанках · flag_reason-распределение по гейтам/чекерам · счётчики голос-флаггера (для строки 13б) · wall-clock по стадиям и итогом (первые данные скорости — ПТ-19/строка 54) · деньги нарастающим итогом двумя путями · **минимум ОДИН намеренный стоп+резюм посреди волны** (отладка stop/continue-механики, H10) · бэкапы F4 на каждом боевом старте.
- **C4. Дебаг-дисциплина:** дефект узла → СТОП волны (чекпойнт держит) → диагноз до корня (провайдер-аномалия → официальная дока вендора, НЕ гадать) → фикс по норме §0 (мультиязычный, с тестом; батарея A1 + голден зелёные ДО resume) → точечный redrive (пере-покупка видима и посчитана). Дыра архитектурная → СТОП+пинг с диагнозом и вариантами; прогон замораживается чекпойнтом.
## §5. Чего НЕ делать
Сид НЕ заводить (прогон холодный) · судья Ф2 не гоняется · DC7-остаток НЕ мерить (строка 98 требует СИДОВОГО прогона — этот бессидовый, не путать) · `CheapGateVersion`/labels-фриз/голден-фикстуры НЕ двигать (вердикт-двигающий фикс = СТОП+пинг с маскированным диффом) · ручка #77 / флор / `reasoning_effort` — только по слову владельца (§3) · слаги моделей не менять без live-фактчека `/models` · чужое в дереве не трогать: `START_PROMT.MD`, `frontend/`, `platform/`, `.gitignore` · `reset --hard`/history-rewrite запрещены · НЕ коммитить · тексты книги в доки/отчёт НЕ цитировать (сырьё живёт durable в `~/books`).
## §6. Отчёт и СТОП
`docs/archive/reports/COLDRUN_B_DEBUG_<дата>.md`: эхо-шапка · Фаза A чек-лист («чем смотрю» / что починил) · числа ре-пробы и вердикт развилки · per-узел наблюдения C3 · **итоговая цена холодного старта ЦЕЛИКОМ, включая редактуру** (закрывает замер строки 16) двумя путями · дефекты: найдено / починено (с тестами) / отложено (с носителем) · **заявление = команда**: каждое число сопровождено командой, которой получено (приёмка их пере-ранит) · git-список тронутого (только своё). Краткий итог — `docs/PROGRESS.md` §Бэкенд (стоячая секция `## Бэкенд`, допиши СВЕРХУ; бэклог-таблицу и CURRENT-STATE НЕ трогать). D-номер лендинга проставит оркестратор. **СТОП — приёмка оркестратора.**