21 KiB
Промт бэкенд-сессии: РЕ-ПРОБА 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. Онбординг (карта чтения; целиком доки НЕ читать)
CLAUDE.md(гардрейлы:.envНЕ читать · DeepSeek thinking НЕ отключать · аномалия → вендор-дока, не гадать) →docs/README.md(карта) → CURRENT-STATE вdocs/PROGRESS.md(курс; строка 74 бэклога = твоя фаза B) → голова D-лога по ссылкам (эра D39.7x–8x). Жаргон →docs/glossary.md.docs/experiments/00-provider-quirks.mdЦЕЛИКОМ — ПЕРЕД любым платным вызовом (катовер DeepSeek-0731 · finish=stop only · эхо-мина · слаги только live-фактчеком). Peak-valley DeepSeek живёт НЕ там, а в D39.7/experiments-15 — окна в §3 ниже.backend/README.md(инварианты «ЛОМАТЬ НЕЛЬЗЯ» + структура).- Прошлый холодный прогон:
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 ParityEXACT · 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проверь либо сквозняком на ЛОКАЛЬНОЙ модели стенда (kindlocal, 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≈8–12 черновых вызовов; ВСЁ сырьё persist durable в~/books/gu-zhenren/coldrun-b/reprobe/(норма «персист, не scratch»). Критерии здоровья: 0 пустых ответов · finish=stop 100% · эхо в пределах известной нормы (~6%, D39.61) · без систематических усечений. Пограничные числа (1 эхо на дюжине · 5/6 классификатора · единичный не-stop finish) = НЕ здоров → в релей с числами; «здоров» = чистое прохождение ВСЕХ критериев. - 1–2 батча ТЕРМИНОЛОГА боевой формы: ⚠ 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 01–04 и 06–10); сверь текущее 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-санити · доля ⟨проверить⟩), вскрой глазами 2–3 черновика (единицы, не агрегат), сверь деньги леджер↔сырьё. Всё объяснимо → продолжай С НЕПОДПИСАННЫМ банком по механике кода (продолжение без--verify-bankнесёт банк дальше с маркером ⟨проверить⟩ — это и есть автобанк). Редакторская волна на тех же 2 главах → гейты/чекеры → экспорт → вскрой 2–3 финала глазами. - 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-номер лендинга проставит оркестратор. СТОП — приёмка оркестратора.