textmachine/docs/archive/prompts/BACKEND_PACKAGE5_SESSION_PROMPT.md

6.2 KiB
Raw Permalink Blame History

Промт: бэкенд-сессия, мини-пакет №5 — фиксы приёмки этапа A (D24), 2026-07-11


Кто ты и что делаешь

Ты — бэкенд-сессия TextMachine, мини-пакет №5. Зона записи: backend/ (+ своя секция в docs/PROGRESS.md → «## Бэкенд»). Ничего не коммитить — лендинг у оркестратора после внешнего ревью. Пакет маленький и целевой: две ратифицированные смены поведения из приёмки этапа A (D24.324.4) + два теста-оговорки вердикта (D24.1) + микро-хвосты D23.4. Пакет гейтит этап B приёмки — не расползаться.

Онбординг (~30 мин)

  1. CLAUDE.md → CURRENT-STATE в docs/PROGRESS.md → отчёт «## Приёмка Ф1 … этап A» там же (особенно «Находки для оркестратора»).
  2. docs/architecture/05-decisions-log.md: D24 целиком (твой мандат), D23.1 (процедура golden), D22.9/D23.4 (микро-хвосты).
  3. backend/README.md (инварианты 18) + docs/experiments/00-provider-quirks.md (флоры thinking-моделей: строки DeepSeek/Gemini/Kimi).

Задачи (по приоритету)

1. Per-model floor min_max_tokens (D24.3) — смена wire-поведения

  • Поле в models.yaml capabilities (схема, не комментарий): min_max_tokens: <int>. Значения: deepseek-v4-flash: 8000, deepseek-v4-pro: 8000, gemini-3.1-pro-preview: 8000, kimi-k2.6: 16000. glm-5/5.1 и grok-4.3 — БЕЗ поля (reasoning off/none).
  • Применение: при деривации max_tokens любого вызова модели — праймари-аттемпты (stagerun.go:89-92) И эскалационные хопы (maybeEscalate наследует бюджет праймари — ровно это сломало эскалацию на этапе A: хопы deepseek-v4-pro при 2048/3291 вернули finish=length, один — 0 байт контента). Флор берётся по МОДЕЛИ вызова (у хопа — модель хопа, не праймари), применяется ДО request_hash — wire-видимо.
  • Существующие комментарии-заглушки «дать max_tokens ≥8000/16000» в models.yaml привести к новому полю (комментарий → схема).
  • Санити: резервация EstimateUSD вырастет на флорнутых вызовах (≤$0.10/вызов) — убедись, что тесты потолков это переживают; committed не меняется (биллинг по факту).

2. Post-check dstFormPresent: базовый dst всегда проверяется (D24.4) — смена вердиктов

  • mempostcheck.go:85-96: множество проверяемых форм = declForms normalizeTargetForm(dst) ВСЕГДА (сейчас фолбэк на базу только при пустом decl). Закрывает 37/55 ложных промахов этапа A (класс: «Фан Юань» в выходе, decl только косвенные).
  • Тест на репро-кейс этапа A: entry с непустым oblique-only decl + именительный в выходе → промаха НЕТ; и негатив: dst и все формы отсутствуют → промах ЕСТЬ (mutation-verified: реверт фикса валит тест).

3. Golden re-capture — ратифицированная смена поведения (D23.1, инвариант №8)

  • TM_UPDATE_GOLDEN=1 вручную; в журнал пакета — дифф-класс golden: изменения ДОЛЖНЫ исчерпываться (а) max_tokens в wire-телах/request_hash флорнутых моделей, (б) postcheck-вердиктами (confirmed-miss набор). Любой другой класс диффа = стоп и пинг оркестратору.
  • Заодно D23.4: ячейка AMBIGUOUS>0 в фикстуру ИЛИ смягчение коммента golden_test.go:32 — реши и сделай.

4. Тесты-оговорки вердикта этапа A (D24.1)

  • Coverage-recall (D24.1б): синтетический мини-набор искусственных пропусков (вырезание предложений/абзацев из эталонных чанков) → coverage-гейт ловит ≥90% (критерий 4 приёмки, первая половина). Юнит/интеграционный, без wire. Зафиксируй в тесте и recall-число.
  • Отказ эскалации по budget_usd (D24.1г): исчерпанный escalation.budget_usd → хоп НЕ стреляет, диспозиция честная (флаг остаётся), деньги не тратятся. Mutation-verified.

5. Микро-хвосты D23.4 (попутно, не разрастаться)

  • Тест errTail на границу руны (реверт фикса сейчас выживает сьют); лог-ассерты retryLoop (retry_in / отсутствие «will retry» на последней попытке) через slog-capture. Опционально: компонент-тест snapshotID-payload; kill9 rounds 3→5.

Дисциплина

  • Промпты/конфиг-семантику НЕ менять сверх D24-мандата; никаких «заодно» в wire.
  • Всё mutation-verified где применимо; go build ./... && go vet ./... && go test -race ./... чисто.
  • git status перед стартом: чужие незакоммиченные правки — стоп и пинг. .env не читать. Книга/производные вне git.
  • Отчёт: секция в docs/PROGRESS.md «Бэкенд» — что сделано, дифф-класс golden, числа тестов, вопросы. Не коммитить.