textmachine/docs/BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md

21 KiB
Raw Blame History

Промт бэкенд-сессии: РЕ-ПРОБА 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 ceilingsbook_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-номер лендинга проставит оркестратор. СТОП — приёмка оркестратора.