Issue the pack-12 transport-hygiene backend prompt: ten wire-neutral fixes from research/21 gated behind the pere-run paid path, refactoring explicitly rejected

This commit is contained in:
Claude (backend session) 2026-07-23 22:53:16 +03:00
parent 82013130ac
commit aebce7b3e5
3 changed files with 43 additions and 1 deletions

View file

@ -0,0 +1,38 @@
# Промт бэкенд-сессии: ПАК-12 «транспорт-гигиена» (по research/21)
**Статус: ВЫДАН 23.07.2026, оркестратор №7. ГЕЙТ СТАРТА: НЕ НАЧИНАТЬ, пока идёт платный путь пере-прогона** (edit-волны армов / судья / экспорт) — старт только по зелёному свету оркестратора на чистом дереве. Причина: пере-прогон гоняет tmctl из рабочего дерева; правки backend/ посреди прогона = поведенческий дрейф/КОНФИГ-ДРИФТ.
## Рамка
Источник скоупа — `docs/research/21-llm-transport-survey.md` (читать ревью-шапку: там эрратум и поправки применимости). Вердикт обзора ратифицирован: **транспорт НЕ рефакторим** — наш дизайн (Capability-как-данные, единый retryLoop, fail-loud) правильнее SDK-паттернов для детерминизм-критичной системы. Пак — ТОЛЬКО точечные добавки ниже. Любой соблазн «заодно переделать» — стоп и пинг оркестратору.
**Жёсткий инвариант пака: ноль wire-байтов.** Ни одно изменение не трогает тело запроса → snapshot не двигается, `--resnapshot` НЕ требуется, golden байт-идентичен (новые пины — отдельными тестами). Это критерий приёмки №1.
## Онбординг
`CLAUDE.md``docs/README.md` → CURRENT-STATE `PROGRESS.md``research/21` (целиком) → `00-provider-quirks.md``backend/internal/llm/` + `internal/pipeline/{ratelimit,quality,cheapgates}.go` + `configs/models.yaml`.
## Скоуп (10 пунктов, каждый ~1060 строк + тест)
1. **Валидация-тест `models.yaml`** (research/21 §1.12/goose `declarative.rs:396-467`): go-тест — каждый `api_key_env` объявлен у провайдера моделей; reasoning-режим ∈ известного enum; `min_max_tokens` разумен; каждая модель ссылается на объявленного провайдера; цены >0 там, где обязаны. Падает на дрейфе каталога ДО платного прогона.
2. **Quota-429 → terminal** (§1.4): узкий body-маркер (`insufficient_quota`/`quota_exceeded`) + HTTP 402 → терминальная ошибка (не 3 ретрая под USD-резервацией). Тест: обычный 429 остаётся retryable.
3. **`parseRetryAfter`: дробные секунды + `Retry-After-Ms`** (§1.13, `httpllm.go:426`): float-парс + ms-header first. Под существующим 5-мин капом.
4. **HTTP/2 keepalive на общем клиенте** (§1.5, `httpllm.go:161-174`): http2.Transport ReadIdleTimeout/PingTimeout (~15s/5s по образу grok-build). **Гейт внутри пака:** дым-проверка, что фронты наших провайдеров не рвут h2-PING (без платных вызовов — TLS/HEAD-пробы); рвут → h1 для того провайдера, отметить в отчёте.
5. **Пропорциональный джиттер** (§1.18а, `httpllm.go:144`): `rand.Intn(250)ms` → ±25% от backoff. Де-синк N-∥ волн.
6. **xAI reasoning identity-гард** (§1.9, `provider_openai.go:101-102`): additive-фолд только при `total == prompt+completion+reasoning`; иначе считать subset и логировать WARN (кандидат в квирк-реестр). Кап латентного 3044% overcount.
7. **CostSource-маркер** (§1.10): на settle-estimate строках (`stagerun.go:469-473`) — флаг `estimated` в request_log/report (аддитивное поле read-модели, экспорт-контракт №8 не ломать). Estimated-токены display-only, `CostUSD` НЕ трогают. Оценщик — fertility research/20 (1.20·cjk+0.39·other), НЕ char/4 (CJK-мина).
8. **Drift-guard-тесты** (§1.18б): (а) пин полной status→retryable-мапы; (б) finish-классификатор перевести на префикс/substring-матч (композит `content_filter: PROHIBITED_CONTENT` должен классифицироваться) + пин-тест. Незнакомый finish остаётся fail-loud (НЕ litellm-стиль «unknown→stop»).
9. **Кап billed-decode-ре-биллов** (§1.18в): BilledDecodeError ретраится ≤1 раза (не полный MaxAttempts) — платный 2xx-мусор не жжёт бюджет штормом.
10. **Сегмент-луп-гард, observability-only**арх-чтение/crush `loop_detection.go`): нормализованная SHA-сигнатура перевода-сегмента, повтор >N подряд → style-флаг класса наблюдаемости (КАК стиль-гейты: не диспозиция, не wire). Дополняет echoMineViolation по дегенеративной петле (research/15).
## Вендор-сверка (внутри сессии, БЕЗ реализации при неподтверждении)
По правилу 10.07 два кандидата реализуются ТОЛЬКО при подтверждении в офиц. доке: **(а)** GLM finish-словарь `sensitive`/`network_error` — сверить с docs.z.ai (reference finish_reason); подтвердится → добавить в классификатор (`sensitive`→content_filter; `network_error`НЕ маппить в stop, оставить fail-loud) + строка-кандидат в отчёт для 00-provider-quirks; **(б)** kimi reasoning-модели: temperature omit vs force:1 — сверить platform.kimi.ai; подтвердится → capability-твик. Не подтвердится — в отчёт «не подтверждено, не реализовано».
## НЕ делать (явные не-цели)
Рефакторинг транспорта/option-паттерн · стриминг/StreamingLLMClient · assistant-prefill continuation (#17, HIGH-риск детерминизма) · native-Gemini судья (Ф2) · GLM cache_control-маркировка (двигает wire → решение владельца отдельно) · GLM context-overflow гард (ждёт вендор-сверки + estimator-инфры) · дата-фикация каталога провайдеров · `prompt_cache_key` (наши провайдеры не чтут).
## Приёмка (ревью ИСПОЛНЕНИЕМ, мандат 12.07)
`go build/vet/test ./... -race` зелёные · **golden байт-идентичен** (пак wire-нейтрален; сдвиг golden = провал инварианта — стоп, пинг) · новые тесты: №1 валидация, №2 quota-терминал, №3 ms-парс, №6 identity, №8 drift-пины, №9 кап, №10 луп-гард на синтетике · самопроверка: свой код + прогон всех пинов + адверсариальный селф-ревью (author≠reviewer, минимум 3 линзы: детерминизм/деньги/конкурентность). Отчёт — `docs/archive/reports/TRANSPORT_PACK12_REPORT_<дата>.md` (НЕ в backend/), с file:line по каждому пункту. Сессия НЕ коммитит — лендит оркестратор.

View file

@ -9,6 +9,10 @@
> - **Ждём от владельца:** тачпойнты exp16 (карта подписи/пол · мини-голд алиасов · precision@30, `books/gu-zhenren/exp16/`, ~3040 мин — для сид-дельты к пере-прогону) · развилки плана §10 (W1.5-UX · DC5-стих-политика · Edit-ceiling · и др.) · реплика ja→ru (тест общности §B5) · **ре-чек прайса DeepSeek у катовера слагов 24.07** (до него платных deepseek-прогонов нет) · чтение пере-прогона (после R1+resnapshot) · старые висящие: планка запуска (лучше-фана/гибрид/издательский) · билингв-якорь пилота (D25.9-Q1) · контаминация пилот-корпуса (D27.4) · publishable/waiver (D25.1) · FN-bound L3 (D25.4) · юр-пакет · провенанс 12-*-доков.
> - Архивы хроники: `archive/PROGRESS-2026-07-04-10.md` (D31) · `archive/PROGRESS-2026-07-10-13.md` (D39.6-гигиена). Записи ниже — живая эра D39.
## Оркестратор №7 — арх-дочитка research/21 принята (транспорт НЕ рефакторим), промт пака-12 «транспорт-гигиена» выдан, 23.07
Ресёрч-сессия дослала архитектурный срез (3 Go-базы: SDK-паттерн RequestOption = несериализуемое замыкание — враждебен снапшот-детерминизму, наша Capability-как-данные правильнее; crush делегирует транспорт наружу; goose сам держит квирки в коде — сходится к нашей позе). **Вердикт ратифицирую: транспорт не рефакторим, энергия арх-работы — в pipeline (D39, уже расписан).** Сессии поручено дописать §5 «Архитектурные паттерны» в research/21 (файл залендён — приму диффом). **Промт пака-12 выдан (`BACKEND_TRANSPORT_PACK_SESSION_PROMPT.md`), ГЕЙТ: старт только после платного пути пере-прогона.** Скоуп 10 wire-нейтральных пунктов (ноль resnapshot, golden байт-идентичен): валидация models.yaml · quota-429-terminal · ms-Retry-After · h2-keepalive · proportional jitter · xAI identity-гард · CostSource (fertility, не char/4) · drift-guard-пины + substring-finish · кап billed-decode · сегмент-луп-гард (observability). Вендор-сверка внутри сессии: GLM finish-словарь, kimi temperature. НЕ вошло (явно): GLM cache_control (wire → решение владельца после чтения) · overflow-гард · native-Gemini (Ф2) · continuation · стриминг.
## Оркестратор №7 — research/21 (обзор LLM-транспорта) ПРИНЯТ и залендён, 23.07
Ресёрч-сессия сдала обзор (57 агентов; самопроверка исполнением поймала плейсхолдер-заглушки синтеза Q1/Q3 — пере-выведены из survey-сырья, 8/8 несущих цитат CONFIRMED; ещё один датапоинт мандата 12.07). **Приёмка исполнением:** 7/7 цитат о нашем коде + 5/5 из клонов сверены байт-в-байт; 1 эрратум (Mistral 400↔422 — класс верен); **поправка применимости моя:** wire single-shot `system+system+user` (`render.go:223-227`) → «арм-квирки» (Mistral extra_forbidden, deepseek multi-turn) ЛАТЕНТНЫ для текущего пере-прогона, GLM-overflow — future-proofing; идущий прогон НЕ трогаем. **Вердикт обзора:** наш транспорт опережает/вровень со всеми 11 (retryLoop, 5-мин кап Retry-After, fail-loud, served-model биллинг, min_max_tokens-флор, double-count-гард); против Mistral-48% — только concurrency-cap, против тихого усечения — стриминг даёт лишь детекцию (continuation ≠ стриминг). **Дёшево-подтверждённые кандидаты пост-прогона:** fractional/ms Retry-After · quota-429→terminal · HTTP/2 keepalive · CostSource-маркер · xAI identity-гард · план native-Gemini-судьи · cache_control на GLM (÷5 входа, но ~2% стандарта). Q7-таблица квирков — кандидаты до вендор-сверки, в `00-provider-quirks.md` НЕ абсорбированы. Промт → архив. Решения о внедрении — после чтения владельца, отдельными D.

View file

@ -16,7 +16,7 @@
- `experiments/` — эмпирика «Полигона»: `00-provider-quirks` (читать перед любым вызовом провайдера), `01-token-calibration`, `02-refusal-benchmark`, `03-local-stand`, `04-editor-quality`, `06-local-extraction`, `07-coverage-precision`, `08-cost-model-v2` (актуальная денежная модель), `09-pilot-protocol` (пилот Ф2.5 + поправки D13), `10-explicit-benchmark` (18+ violence-рука канала B), `11-erotica-benchmark` (erotica по трём парам/регистрам — закрытие D14.4, D22).
- `research/` — фактура исследований 0405.07: `0110` базовые, `11-gap-*` добор критиком, `12-*` режимы отказа/отзывы/таксономии (+ два внешних материала с провенанс-шапками), `13` валидация памяти, `14` адаптивная память, `15` голос и состояние (принят, D21), **`16` ридер-IDE (принят с ревью-шапкой, D29)**, **`17` внешняя критика GPT-5.6 (принят с ревью-шапкой, D25)** — у 16/17 читать шапку прежде тела. **`18` рычаги качества (два отчёта, D36)** · **`19` нарезка+когезия+контракт t/e (D39.1)** · **`20` банк-майнинг W1.5 (D39.6)** · **`21` обзор LLM-транспорта чужих харнессов (23.07: наш транспорт опережает/вровень со всеми 11; рекомендации DEFER до после пере-прогона, Q7-квирки — кандидаты до вендор-сверки)** — у всех ревью-шапки. ⚠ Часть под superseded-баннерами (01/02/03/04/05/09 и gap-1/2/5) — **читай баннер прежде содержимого**.
- `PROGRESS.md`**журнал** (CURRENT-STATE сверху, ниже хронология; НЕ источник решений).
- **Активные хендофф-промты (пост-D39.19, 20.07):** [`PERERUN_SESSION_PROMPT.md`](PERERUN_SESSION_PROMPT.md) (**операционная сессия пере-прогона — ТЕКУЩИЙ шаг**: главы 15, ОДИН resnapshot, армы glm/mistral/deepseek-pro, риг D39.7, блайнд-пакет D39.8) · [`ORCHESTRATOR_SESSION_PROMPT.md`](ORCHESTRATOR_SESSION_PROMPT.md) (хендофф №5 оркестратора) · [`POLYGON_PACKAGE4_SESSION_PROMPT.md`](POLYGON_PACKAGE4_SESSION_PROMPT.md) (residual пилот/18+/echo). **ПАК-11 + ПРЕП ЗАВЕРШЕНЫ.** Гейт DeepSeek 24.07 закрыт факт-чеком 20.07 (наши слаги не под депрекацией, цены совпадают; повторный чек 24.07 вписан в промт). Закрытые — в `archive/prompts/` (свежие: преп→D39.19, пак-11/R1→D39.17, арх-cleanup→D39.16).
- **Активные хендофф-промты (пост-D39.19, 23.07):** [`PERERUN_SESSION_PROMPT.md`](PERERUN_SESSION_PROMPT.md) (**операционная сессия пере-прогона — ТЕКУЩИЙ шаг**: главы 15, ОДИН resnapshot, армы glm/mistral/deepseek-pro, риг D39.7, блайнд-пакет D39.8) · [`BACKEND_TRANSPORT_PACK_SESSION_PROMPT.md`](BACKEND_TRANSPORT_PACK_SESSION_PROMPT.md) (пак-12 «транспорт-гигиена» по research/21: 10 wire-нейтральных пунктов; **ГЕЙТ — старт после платного пути пере-прогона**) · [`ORCHESTRATOR_SESSION_PROMPT.md`](ORCHESTRATOR_SESSION_PROMPT.md) (хендофф №5 оркестратора) · [`POLYGON_PACKAGE4_SESSION_PROMPT.md`](POLYGON_PACKAGE4_SESSION_PROMPT.md) (residual пилот/18+/echo). **ПАК-11 + ПРЕП ЗАВЕРШЕНЫ.** Гейт DeepSeek 24.07 закрыт факт-чеком 20.07 (наши слаги не под депрекацией, цены совпадают; повторный чек 24.07 вписан в промт). Закрытые — в `archive/prompts/` (свежие: преп→D39.19, пак-11/R1→D39.17, арх-cleanup→D39.16).
- `archive/` — закрытые сессионные промты (только история, инструкции оттуда не исполнять).
## Статус (2026-07-19, пост-D39.16 — стройка пере-прогонного стека)