# Ядро C1: draft → editor (Р2). Обязательное приложение Фазы 0 — фиксирует
# границу «конфиг vs код раннера»:
#   КОНФИГ: состав/порядок стадий, роль→модель, версии промптов, сэмплинг,
#     пороги гейтов, режим инъекции глоссария, токен-бюджеты сборки контекста,
#     именованные эскалационные цепочки, fan-out N, cache TTL.
#   РАННЕР (код): циклы по главам/чанкам, ветвление по гейтам, механика
#     эскалации/ретраев, правило «эскалация → re-gate → флаг», channel-aware
#     фильтр цепочек (Anthropic вне 18+), resume по чекпоинтам.
core: C1
version: 1

defaults:
  # max_tokens ≈ ratio × входные токены; калибровка полигона (эксп. 01):
  # русский выход zh→ru ≈1.9× входа в токенах — 2.2 с запасом на ja/en.
  max_output_ratio: 2.2
  min_max_tokens: 2048

context:
  # Р5: обе схемы инъекции глоссария обязаны поддерживаться конфигом.
  # selective — ключи/алиасы/леммы в волатильном хвосте (~100–800 ток.);
  # full_prefix — весь глоссарий в стабильном префиксе (выгодно при cache-hit
  # DeepSeek $0.0028/M — решается расчётом на прототипе).
  glossary_injection: selective
  glossary_token_budget: 800
  stm_depth: 2 # глубина STM в чанках (Фаза 1)
  overlap_tokens: 200 # перекрытие чанков = read-only контекст (Фаза 1)
  cache_ttl: "5m"

retries:
  # Содержательные регенерации после провала гейта ДО эскалации (транспортные
  # ретраи — отдельно, в timeouts models.yaml).
  regenerate_before_escalate: 1

stages:
  - name: draft
    role: translator
    model: deepseek-v4-flash
    prompt: ../prompts/translator.md
    prompt_version: v0-draft
    temperature: 0.3
    reasoning: "off"
    # single-hop echo-эскалация (D18: deepseek-эхо 25% на 蛊真人 → фолбэк выстрелит). deepseek-v4-pro —
    # хоп 1 цепочки A (D3); стреляет ТОЛЬКО при escalation.budget_usd>0 (см. ниже). Escalate_to разрешён
    # лишь на translator-роли (editor pinned — D12); результат ре-гейтится.
    escalate_to: deepseek-v4-pro
  - name: edit
    role: editor
    # Дефолт-редактор — grok-4.3 (D1/D3, bake-off эксп-04; glm-5 был плейсхолдером).
    # reasoning:"off" → grok шлёт ЯВНЫЙ reasoning_effort:"none" (control:effort/off_effort:none,
    # models.yaml) — омиссия у grok = low. Прод: только чистый xAI-ключ без data-sharing.
    model: grok-4.3
    prompt: ../prompts/editor.md
    # D1-уточнение №3: коммит 6a68dfd сделал editor.md монолингвальным (убрал {{text}}) →
    # сменил SHA, но лейбл остался v0-draft (один лейбл на два SHA). Бамп на v1-monolingual;
    # осознанно меняет снапшот (боевых прогонов ещё не было).
    prompt_version: v1-monolingual
    temperature: 0.4
    reasoning: "off"

gates:
  coverage:
    # Фаза 1. Пороги полигона (эксп. 02, символы БЕЗ пробелов): нижняя граница
    # — подозрение на вырезание, верхняя — аномалия/галлюцинация.
    enabled: false
    len_ratio_bounds:
      zh-ru: [2.2, 4.2]
      ja-ru: [1.4, 2.6]
      en-ru: [0.70, 1.4]
    sent_cov_min: 0.75
    min_chunk_chars: 500 # калибровка порогов — на фрагментах 500–2500 симв.

escalation:
  chains:
    # D3-цепочка ЗАВЕДЕНА (пакет №3; все слаги live-фактчекнуты 2026-07-10 — /models + пробный вызов):
    #   канал A: deepseek-v4-pro → glm-5.1 → gemini-3.1-pro-preview (кросс-семейно; апекс — mandatory-thinking Gemini).
    #   канал B (18+): grok-4.3 reasoning-ON (D19.1; переводчик канала B = Mistral, задаётся channel:adult-стадией — Ф2).
    # ⚠️ Именованные цепочки — валидируемый конфиг для мульти-хопа (шаг 7); раннер Ф1 исполняет
    # SINGLE-HOP через stage.escalate_to (draft → deepseek-v4-pro выше). Слаг ИМЕННО gemini-3.1-pro-preview
    # (gemini-3.1-pro → HTTP 404, live 2026-07-10). adult-цепочка — permissive-провайдеры (D4.1).
    default: [deepseek-v4-pro, glm-5.1, gemini-3.1-pro-preview]
    adult: [grok-4.3]
  # Адресный премиум-бюджет книги, $. Формула «≤2×» из Р5 неоднозначна — [НУЖНО РЕШЕНИЕ] п.1.
  # ⚠️ budget_usd=0 ⇒ эскалация НЕ исполняется (НИ chains, НИ stage.escalate_to — escalationBudgetRemains=false;
  # CheckKeys не требует её ключей). Приёмочная сессия 蛊真人 ОБЯЗАНА выставить budget_usd>0, иначе echo-эскалация
  # черновика (D18) не выстрелит. Дефолт 0 держит CI/Ф0 зелёными без gemini/mistral-ключей.
  budget_usd: 0

fanout:
  candidates: 1 # C1: один черновик
