diff --git a/docs/BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md b/docs/BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md new file mode 100644 index 00000000..dc3f6fc5 --- /dev/null +++ b/docs/BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md @@ -0,0 +1,60 @@ +# Промт бэкенд-сессии: РЕ-ПРОБА 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.7x–8x). Жаргон → `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≈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-номер лендинга проставит оркестратор. **СТОП — приёмка оркестратора.** diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 0897335c..08a87db4 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -2,7 +2,7 @@ > **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-02, голова D39.82). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md`; этот файл — ЖУРНАЛ.** > - **Сделано (сводно; детали — D-лог и архив-слайсы):** Ф0 ✅ · Ф1-инфра ✅ · арх-ресет D39 (7 слоёв, паки 11–16) ✅ · паки 17 «канал B» · 18 «долги» · 19 «голос/состояние» · 20 «банк+терминолог» ✅ (D39.26–28/31/41–56) · мини-прогон (D39.37) и ХОЛОДНЫЙ прогон (D39.58: recall банка 0.918/0.980, банк приходит переведённым) приняты · полигон-пакеты 5–8, ToS-речек (D39.57), Р6+P4 (D39.61) закрыты · **карта языковой привязки движка (D39.60): 149 сайтов/45 файлов, книго-ось чиста (4), ja→ru безопасно без правки Go, en→ru — нет** · Р1–Р4 закрыты целиком (D39.63: Р2 = ЗНАЧЕНИЕ, Р4 = норма потолка recall) · **ФАЗА 2 ОБЩНОСТИ ✅ (D39.64: П0 эмбед-хеш · П1 цель-шов · П2 скрипт-шов, ko-баг закрыт · П3 нарезка · П4 манифест-по-каналам; голден вердикт-нейтрален 0/172, майнер-парити EXACT)** · жанровый словарь отменён как класс (D39.47) · петля ремонта построена и НЕ включена (D39.38). -> - **Курс (D39.59–78): ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ (D39.69/75/77) → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.78: строка 25 целиком; харнесс labels В GIT 12/12; K2 r0.85 · K4b r0.22 · K6 fp 14→6; Р2 hard/soft + Р4-потолки в контрактах).** **Текущее: МЕЛКАЯ ПАЧКА ✅ ПРИНЯТА И ЗАЛЕНДЕНА (D39.82: строки 89/53/83 закрыты · 93 сужена до остатков · F4-бэкап+pre-flight построен · register/жанр → книжный слой · DC7 пере-гейчен сид-покрытием → строка 98); решения §6 исполнены (D39.79/82); ре-проба flash (строка 74) — по слову владельца; finding-1 ЗАКРЫТ (D39.77); онбординг-оверхол доков исполнен (D39.80); **ФРОНТ ОТКРЫТ владельцем (D39.81: продукт = SaaS; зоны `frontend/` + `platform/` живые, фронт работает на моках; движковая очередь НЕ пере-упорядочена — ранняя вставка одна: строка 95 «контракт API» $0; строки 96/97 и перевесы 49/94 заведены)**.** ⚠ **DeepSeek-V4-Flash-0731: платные прогоны СТОП до ре-пробы (строка 74; там же 6/6-порог классификатора и слоты Q2/Q7). Перекупок нет (D39.63).** +> - **Курс (D39.59–78): ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ (D39.69/75/77) → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.78: строка 25 целиком; харнесс labels В GIT 12/12; K2 r0.85 · K4b r0.22 · K6 fp 14→6; Р2 hard/soft + Р4-потолки в контрактах).** **Текущее: МЕЛКАЯ ПАЧКА ✅ ПРИНЯТА И ЗАЛЕНДЕНА (D39.82: строки 89/53/83 закрыты · 93 сужена до остатков · F4-бэкап+pre-flight построен · register/жанр → книжный слой · DC7 пере-гейчен сид-покрытием → строка 98); решения §6 исполнены (D39.79/82); **РЕ-ПРОБА + ОТЛАДОЧНЫЙ ХОЛОДНЫЙ ПРОГОН coldrun-b САНКЦИОНИРОВАНЫ (D39.83: промт выдан и холодно аудирован — 3 major вправлены; потолки $0.15 ре-проба / $5 прогон; ступени 2+8 глав, автобанк по D39.77)**; ре-проба flash (строка 74) — по слову владельца; finding-1 ЗАКРЫТ (D39.77); онбординг-оверхол доков исполнен (D39.80); **ФРОНТ ОТКРЫТ владельцем (D39.81: продукт = SaaS; зоны `frontend/` + `platform/` живые, фронт работает на моках; движковая очередь НЕ пере-упорядочена — ранняя вставка одна: строка 95 «контракт API» $0; строки 96/97 и перевесы 49/94 заведены)**.** ⚠ **DeepSeek-V4-Flash-0731: платные прогоны СТОП до ре-пробы (строка 74; там же 6/6-порог классификатора и слоты Q2/Q7). Перекупок нет (D39.63).** > - **Горизонт (D39.62/67):** ре-проба flash (74; + платный порог 6/6 классификатора + пробы 36б-замера Q2/эмиссии Q7 по слову) → **ДОБОР ИДЕАЛА** (первым прогоном: оси голоса 24 · авто-режим · итерация №2 редакторов 65 · цена 16 · веса K1–K12 13а · вне-претрейн чекпоинт 55) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 62–68, 85) → Ф3 ридер-IDE (69–71). **Стоячие:** ToS-триггер 25.10 · Ш-2 до go1.27 · строка 74 перед любым платным прогоном. > - **Стек:** draft deepseek-v4-flash thinking-ON (+банкнота) **⚠0731** → терминолог (та же модель, батчи, экран `target_script`) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (вендором НЕ тронут; glm-5 резерв) → судья gemini (Ф2, полигон); канал B Mistral+grok; ~$0.85/ранобэ (D30.4) — пере-калибровка после развилки 74. > - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). @@ -35,7 +35,7 @@ | 18 | **Эмиссия головы 蛊**: сид-половина = чек-лист (определяющий терм книги сидится `allow_short`, D39.50); эмиссия-КАНАЛ демотирован до ИЗМЕР-ГЕЙТА (Q7): полигон-замер «меняет ли эмиссия головы рендер композитов» — строить ТОЛЬКО по эффекту и ПОСЛЕ #10 (однознаковый пост-чек чинится чекер-паком); перед стройкой резолвить K-гейт и KWIC-грязь одиночной головы | полигон → бэкенд | скоро (санкция Q7 D39.70 — после #10, очередью с ре-пробой) | полигон-замер → решение | D39.58, D39.60, D39.69 | | 24 | **Остаток: авто-режим флага** (проект Б не гонялся) · оси голоса A–D (профили не подписаны; черновик готов — `coldrun-a/SIGN-PACKAGE.md` §3) ; + слот инъекции голоса и решение gates.voice при ненулевых осях (D39.55/D21 п.2) · слой-2 voice не строим до доказательства слоя-1 · сверить until_ch 白凝冰 при курации сида (D19.3в) | бэкенд | когда-нибудь (первый прогон добора идеала) | добор идеала | D39.40, D39.58 | | **— ТЕКУЩАЯ ОЧЕРЕДЬ (D39.59) —** | | | | | | -| 74 | ⚠ **DeepSeek-V4-Flash-0731: боевая черновая форма покупает пустые ответы — блокер ПЛАТНЫХ прогонов.** Оперативное состояние = «(в) ждать» (D39.63; фаза-2 всё равно $0-код). Перед следующим платным прогоном — ре-проба flash за копейки → если не устаканилось, выбор: (а) флор 16000 (сдвиг request_hash безболезнен — перекупок на этой фазе нет; хвост не закрывает, упор 2/5) или (б) слать `reasoning_effort` явно (вендорская модель, дешевле ~22%; но амендмент `echoMineViolation`, эхо ~6% и качество черновика при `low` не судилось — нужен замер ~$0.05; тогда же предмет для постинструкции/префилла); включение ручки #77 (ре-ген эха перед эскалацией, построена D39.64, дефолт 0) — тем же решением; при включении помнить общий счётчик attempt с length-ре-геном + рост `maxTokensForAttempt`; остаток §12.7 (8 несудимых fidelity-пар ≈$0.10 · ja-вход ≈$0.005 · prefill-continuation research/21 §1.17) — вернуться при предмете wiring; ⚠ cap 8000 бьёт и СТАДИЮ ТЕРМИНОЛОГА (reasoning 8063/батч, D39.65) — резолюция обязана накрыть терминолога; тем же заходом: платный порог приёмки §2 классификатора (6/6 harm-набор, ~$0.01, D39.69) + полигон-слоты Q2 (36б-замер) и Q7 (эмиссия головы, после #10) | владелец (по ре-пробе) | перед следующим платным прогоном | ре-проба → решение | D39.61, D39.63, D39.64, POLYGON_PROMPTLANG_ANTIECHO §12.4 | +| 74 | ⚠ **DeepSeek-V4-Flash-0731: боевая черновая форма покупает пустые ответы — блокер ПЛАТНЫХ прогонов.** Оперативное состояние = «(в) ждать» (D39.63; фаза-2 всё равно $0-код). Перед следующим платным прогоном — ре-проба flash за копейки → если не устаканилось, выбор: (а) флор 16000 (сдвиг request_hash безболезнен — перекупок на этой фазе нет; хвост не закрывает, упор 2/5) или (б) слать `reasoning_effort` явно (вендорская модель, дешевле ~22%; но амендмент `echoMineViolation`, эхо ~6% и качество черновика при `low` не судилось — нужен замер ~$0.05; тогда же предмет для постинструкции/префилла); включение ручки #77 (ре-ген эха перед эскалацией, построена D39.64, дефолт 0) — тем же решением; при включении помнить общий счётчик attempt с length-ре-геном + рост `maxTokensForAttempt`; остаток §12.7 (8 несудимых fidelity-пар ≈$0.10 · ja-вход ≈$0.005 · prefill-continuation research/21 §1.17) — вернуться при предмете wiring; ⚠ cap 8000 бьёт и СТАДИЮ ТЕРМИНОЛОГА (reasoning 8063/батч, D39.65) — резолюция обязана накрыть терминолога; тем же заходом: платный порог приёмки §2 классификатора (6/6 harm-набор, ~$0.01, D39.69) + полигон-слоты Q2 (36б-замер) и Q7 (эмиссия головы, после #10) | владелец (по ре-пробе) | в работе (промт выдан D39.83) | `BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md` (фаза B; развилка — владельцу) | D39.61, D39.63, D39.64, POLYGON_PROMPTLANG_ANTIECHO §12.4, D39.83 | | 78 | **Леджер денег = НИЖНЯЯ граница**: «2xx body decode failed (call IS billed)» — провайдер списал, исходная попытка в `request_log` НЕ попадает (≤$0.009/сессия); дизайн фикса ГОТОВ (GENERALITY_PHASE2 §5.6: `BilledDecodeFails` + per-billed-attempt settle с `Estimated=true`), но это money/ledger-путь — не $0-хастл | бэкенд | когда-нибудь (money-паком) | отдельное решение (дизайн §5.6) | D39.61, D39.64 | | 79 | **Граница ПЛОТНОСТИ письма для серий**: `enabled` через Go-константу `cjkScriptNames` — новый плотный скрипт требует правки Go (head-finality уже в данных script-series.txt; пре-существующая граница, D39.75). Первые два компонента строки (isCyrLetter→`isTargetWordLetter` · magnitude `SourceScripts`-гейт) исполнены пакетом-чекеров, D39.78 | бэкенд | когда-нибудь | следующий пак общности / касание чекеров | D39.64, D39.78 | | 90 | **Ф2-кандидаты 02-mvp-плана без носителя** (свип-хвост, D39.73): CometKiwi/T-index метрики судьи · Batch API судьи (экономия) · llama-server-интеграция локали · стриминг — взять/закрыть при пилот-препе; + H16 самоулучшение (V3-п.2, ПТ-26): дизайн петли по данным судьи — тем же препом | полигон/бэкенд | когда-нибудь (Ф2.5) | пилот-преп-промт (с 85) | 02-mvp-plan, D39.66, D39.73, D39.80 | @@ -104,6 +104,10 @@ | 95 | **Контракт API v0 + продуктовый словарь статусов ($0, ранняя вставка):** зафиксировать артефактом ДО большого кода обеих сторон — фронт пишется на моках, без пришпиленного контракта моки и API разойдутся (класс «док↔код», 26/180 переписи); дом — `docs/architecture/14-api-contract.md`; продуктовые статусы «загрузка → разбор → перевод → подпись банка → финал → готово», слой перевода внутренних вердиктов в продуктовые (flag_reason/стадии/модели НЕ протекают — инвариант D39.81); двухфазный поток уже в движке (`--verify-bank`, банк-пауза) — ВЫВЕСТИ, не проектировать; резерв полей прогресс/ETA (54) и стоп/продолжить (94); ревью-вопрос контракта: «сменится стадия конвейера — придётся ли править фронт?» | оркестратор/бэкенд/фронт | скоро (единственная ранняя вставка Ф3) | дизайн-промт по слову владельца | релей фронта 02.08, D39.81, research/16 | | 96 | **HTTP/SSE-слой и сервисная обвязка — в `platform/`, НЕ в backend:** движок = процесс-на-прогон (EXCLUSIVE flock `store.go:43` — ратифицированный инвариант D39.81, сервер в backend НЕ пишется); read-API поверх готовых `OpenReadOnly`-путей; пользователи/квоты/очередь = platform (SaaS — решение владельца 02.08) | платформа/бэкенд | когда-нибудь (Ф3, после 95) | Ф3-пак платформы | релей фронта 02.08, D39.81 | | 97 | **Глобальный брокер рейт-лимитов провайдеров:** гарды сейчас per-процесс (`pipeline/ratelimit.go`; mistral ~48% отказов под параллелизмом — :11), лимит провайдера — на ВЕСЬ аккаунт: N параллельных прогонов = N независимых гардов против общего лимита, ломается на втором пользователе | платформа/бэкенд | когда-нибудь (ДО второго параллельного пользователя SaaS) | Ф3-пак платформы (дизайн вместе с 96) | релей фронта 02.08, D39.81 | +## Оркестратор №9 — РЕ-ПРОБА И ОТЛАДОЧНЫЙ ХОЛОДНЫЙ ПРОГОН САНКЦИОНИРОВАНЫ, ПРОМТ ВЫДАН (D39.83), 02.08 + +По слову владельца («надо идти и делать холодный прогон с контролем бэкенда; цель — отладка»). Промт `BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md`: фаза A — верификация готовности сессией ($0: батарея · сквозной fake-путь · чек-лист наблюдаемости с правом чинить дыры) → фаза B — ре-проба flash по строке 74 (≤$0.15, боевая форма через live-риг; пограничные числа = НЕ здоров → развилка владельцу; ручка #77 сама не включается) → фаза C — холодный прогон coldrun-b с автобанком (≤$5, ступени 2+8 глав в ОДНОЙ БД, банк-пауза как инспекция сессии по D39.77, намеренный стоп+резюм, наблюдения per-узел вкл. цену строки 16 и голос-оси для 13б). Дебаг-дисциплина: фикс только мультиязычный с батареей, архитектурная дыра = СТОП+пинг. Холодный аудит промта агентом: 3 major вправлены ДО выдачи (`budget_usd` не существует → `ceilings.book_usd/day_usd` с миной day_usd 0.25 эталона · у ре-пробы не было носителя боевой формы → live-риг + кандидаты терминолога из coldrun-a · механика смока/добора и легитимный re-pin/подпороговая перекупка — против ложного СТОПа) + 4 minor. Вне скоупа: Q2/Q7-полигон-слоты, судья Ф2, DC7-остаток (требует сидового прогона). Строка 74 → в работе. + ## Оркестратор №9 — ФРОНТ ОТКРЫТ: SaaS РАТИФИЦИРОВАН, БЭКЕНД-РАБОТЫ ПОЛУЧИЛИ СТРОКИ (D39.81), 02.08 По релею фронт-записки (все техутверждения сверены кодом: HTTP-слоя нет · рамка research/16:13 дословна · `ratelimit.go:11` mistral ~48% · EXCLUSIVE flock `store.go:43` · банк-пауза `--verify-bank` есть). Ратифицировано: продукт = SaaS (решение владельца) · инвариант непротекания конвейера в интерфейс (продуктовые статусы «загрузка→разбор→перевод→подпись банка→финал→готово»; ревью-вопрос «сменится стадия — придётся ли править фронт?») · процессная модель (движок = процесс-на-прогон, сервер в backend НЕ пишется — HTTP/SSE в `platform/`). Строки: НОВЫЕ 95 (контракт API v0 — единственная ранняя вставка, $0) · 96 (platform-обвязка) · 97 (глобальный брокер рейт-лимитов, гейт «до второго пользователя»); перевесы 49 (annot-v1 → критический путь фронта) и 94 (стоп/лимит — к подключению). Реестр: ПТ-33 (непротекание) + SaaS в ПТ-23. Поправки записке: реестр требований, который она «предлагает завести», построен вчера (D39.80), H7/H8/H10 уже несла строка 94, ETA — строка 54. diff --git a/docs/README.md b/docs/README.md index 8d48a0bb..26a5d8fb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,7 +15,7 @@ - `experiments/` — эмпирика полигона: [00-provider-quirks.md](experiments/00-provider-quirks.md) — **читать перед любым вызовом провайдера**; [08-cost-model-v2.md](experiments/08-cost-model-v2.md) — денежная модель; [09-pilot-protocol.md](experiments/09-pilot-protocol.md) — пилот Ф2.5; остальные 01–16 — отчёты закрытых экспериментов (судьба — в баннерах/D-логе). - `research/` — фактура ресёрчей 01–22; у принятых — ревью-шапки, часть тел под ⚠ superseded: **читай баннер прежде содержимого**. Ключевые для навигации: 15 голос · 16 ридер-IDE · 17 внешняя критика · 18 рычаги качества · 19 нарезка · 20 банк-майнинг · 21 обзор транспорта · 22 доменные харнессы. - [PROGRESS.md](PROGRESS.md) — журнал: CURRENT-STATE + **ЕДИНЫЙ БЭКЛОГ** (единственный трекер) + живой хвост хроники. НЕ источник решений. -- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (полигон, отложен). Текущего бэкендного промта НЕТ (мелкая пачка залендена D39.82; очередь — в PROGRESS CURRENT-STATE). Фронт-промт — в чужой зоне `frontend/docs/`. +- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (полигон, отложен). · [BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md](BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md) (**текущий бэкендный**: ре-проба flash + отладочный холодный прогон coldrun-b). Фронт-промт — в чужой зоне `frontend/docs/`. - `archive/` — история ([правила архива](archive/README.md)): закрытые промты (`prompts/`) · отчёты с ревью-шапками (`reports/` — на них ссылаются приёмки) · исполненные арх-доки (`architecture/`) · слайсы хроники `PROGRESS-*.md`. Инструкции оттуда не исполнять. - Диаграммы: [../backend/docs/components.puml](../backend/docs/components.puml) · [../backend/docs/pipeline.puml](../backend/docs/pipeline.puml) — дом рядом с кодом (D39.80), правятся бэкендом одним коммитом с кодом; вручную НЕ рендерить (владелец смотрит PlantUML-расширением VS Code). diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 4ca1d9d5..0b6d0923 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.82 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07) +# Журнал решений оркестратора — контракт D1–D39.83 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07) > **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Читая контракт целиком, держи под рукой, что чем перекрыто: > ⚠ **Навигация (актуализация 01.08):** карта ниже детально покрывает D1–D39.28; решения D39.29+ живут хронологически в теле файла, **свежая голова — С ХВОСТА** (новые ноты аппендятся вниз). Сводка текущей головы и очередь — CURRENT-STATE в `../PROGRESS.md`. @@ -1247,3 +1247,7 @@ API-529-долг закрыт: 8-осевой refute-by-default воркфлоу ## D39.82 — Мелкая пачка хвостов принята и залендена; DC7 пере-гейчен сид-покрытием с домом канона в book.yaml (02.08) Отчёт: `archive/reports/SMALLPACK_TAILS_2026-08-02.md` (ревью-шапка). Исполнено строками 93/89/53/83 + решения D39.79: **A** — 8 хвостов ревью чекеров (whole-word inner-marker вето + гвоздь · recall-потолок в контракт · негатив-ассерт Demoted=false, мутант убит · честные комменты); **B** — ведро D добито (isHeaderSeparator = !isHeaderContentRune, комплементарность доказана приёмкой полным перебором 1 114 112 рун · мёртвый freqStratum удалён, парити EXACT), ведро B — все 6 на носителях (строки 35/81); **C** — gofmt чист · editor-mono.md DORMANT hash-нейтрально · дубль-ключ пар-файла fail-loud (`putUniqueDC`) · архео D39.4/D23.4/D28.3(б) диспозициями; **D/F4** — `tmctl backup` (integrity_check + VACUUM INTO `~/books/<книга>/backups/`) + боевой pre-flight в `run()`-диспетчере (ноль магических строк провайдеров; гвоздь «fake-путь бэкапов не создаёт»); **E** — Q1 канон «класс X» подтверждён read-only (живые носители чисты); Q2 兩 в `shichen_re`; Q4 register_neg+жанр-msg → книжный слой (`book.yaml register_blocklist` → union в DC6; BriefHash с omitempty — голден `c2021b1b…` неизменен, приёмка пере-вывела hash из фикстуры независимо; пар-файл без register легален; «вторая книга другого жанра — 0 ложных DC6, 0 правок Go» запинено тестом). Приёмка: батарея пере-прогнана независимо (build/vet/race · парити EXACT · голден-фикстура не тронута ни байтом · labels 6/6 фрозен-ячеек · DC7-замер пере-выведен 25/93/150) + 5-осевой refute-воркфлоу: **0 блокеров, 0 major против пакета**. **DC7: стоп сессии ПОДТВЕРЖДЁН, рекомендация ИСПРАВЛЕНА вторым рубежом** — класс в значительной мере уже покрыт mempostcheck+сид-v2 (грейды = approved-записи с decl-формами; «разряд» в сидовом прогоне = промах dst), а labels-финалы — прогоны до/вне сид-канона; ратифицировано: дом канона грейда = КНИЖНЫЙ конфиг (посылка D39.79 «данные в dc-checkers.txt» исправлена — пар-паковый DC7 ложно флагнул бы вторую книгу), стройка — ТОЛЬКО по остатку девиаций на первом сидовом прогоне добора идеала (строка 98). Минор приёмки: `redrive --dry-run` обходит pre-flight при мутирующем store.Open (миграции+recover) → хвост в суженную строку 93. `CheapGateVersion` НЕ бампнут; `LangpackVersion` двинут байтами пар-пака (ок, D39.63). Строки 89/53/83 ЗАКРЫТЫ; 93 сужена до остатков; НОВАЯ 98. Стенд-данные вне git: `coldrun-a/book.yaml` (register_blocklist) · `dc7-measure/` замер. Промт — в архив с баннером (02.08.2026, оркестратор №9). ✅ + +## D39.83 — Ре-проба flash и отладочный холодный прогон с автобанком санкционированы; промт выдан с потолками и двухфазным контролем (02.08) + +По слову владельца («бэкенд готов? надо идти и делать холодный прогон с контролем бэкенда; цель — отладка; никаких хаков и ворэраундов — только поддерживаемые мультиязычные решения»). Выдан `docs/BACKEND_COLDRUN_DEBUG_SESSION_PROMPT.md`, три фазы со СТОП-точками: **A** — верификация готовности САМОЙ сессией ($0; батарея с фрозен-числами · сквозной fake-путь · чек-лист наблюдаемости как приоры с правом чинить дыры — вердикт готовности за сессией, по предпочтению владельца); **B** — ре-проба DeepSeek-V4-Flash-0731 (строка 74; ≤$0.15; боевая форма через расширение live-рига, N≈8–12 + терминолог-батчи на cap 8000 + классификатор 6/6; критерии бинарны, пограничное = НЕ здоров → развилка (а) флор 16000 / (б) reasoning_effort / (в) ждать — РЕШЕНИЕ ВЛАДЕЛЬЦА; ручка #77 сессией не включается); **C** — холодный прогон coldrun-b с автобанком (≤$5 через `ceilings.book_usd/day_usd`; ступени 2+8 глав в ОДНОЙ БД; банк-пауза `--verify-bank` = инспекционная точка сессии, продолжение неподписанным банком по D39.77; намеренный стоп+резюм посреди волны; наблюдения per-узел: эхо · упоры · банкнота→банк · инъекция байт-диффом (не injected_ids) · flag_reason · голос-оси (для 13б) · wall-clock (первые данные ПТ-19) · деньги двумя путями · F4-бэкапы). Дебаг-дисциплина: фикс = мультиязычный + тест + батарея до resume; архитектурная дыра = СТОП+пинг с вариантами, заморозка чекпойнтом — легитимный исход. Прогон закроет замер цены холодного старта ЦЕЛИКОМ (строка 16). Вне скоупа: Q2/Q7 (полигон), судья Ф2, DC7-остаток (строка 98 — нужен СИДОВЫЙ прогон). Промт холодно аудирован агентом ДО выдачи: 3 major вправлены (`budget_usd` не существует — реальные потолки `ceilings.book_usd`/`day_usd`, мина day_usd 0.25 эталона · носитель боевой формы ре-пробы назван · механика смока/добора одной БД + легитимный re-pin/подпороговая перекупка против ложного СТОПа) + 4 minor; факты аудита вложены в промт приорами (голос-счётчики есть в read-model, но не печатаются; риг 6/6 исполним из бэкенда). Строка 74 → «в работе». Владельцу при запуске: стартовать в долину DeepSeek (02.08.2026, оркестратор №9). ✅