Files

5.7 KiB
Raw Permalink Blame History

01 — BRD: ORCH-081 (ORCH-52h)

Work Item: ORCH-081 Эпик: ORCH-052 (продолжение ORCH-52a / ORCH-074) Тип: Багфикс (конфигурация эффорта агентов) Приоритет: HIGH Repo: orchestrator (self-hosting)

1. Контекст и проблема

При проверке ORCH-074 (08.06) обнаружено: resolve_agent_effort() для всех 6 агентов в проде возвращает пустую строку '', хотя в src/config.py заданы осмысленные дефолты (agent_effort_default="high", per-agent high/medium). Итог: флаг --effort не передаётся в Claude CLI, и каждый агент бежит на встроенном CLI-дефолте эффорта, а не на заявленном high/medium.

Корень (диагностика)

В проде env-переменные ORCH_AGENT_EFFORT_DEFAULT и ORCH_AGENT_EFFORT_{ANALYST,ARCHITECT,DEVELOPER,REVIEWER,TESTER,DEPLOYER} выставлены в пустую строку (VAR= без значения). Pydantic Settings трактует присутствующую env-переменную (даже пустую) как явное значение и перебивает дефолт класса: agent_effort_* = ''. В цепочке резолва (launcher._resolve_agent_attr):

  • per-agent '' → falsy → пропуск (уровень 2);
  • default '' → falsy → пропуск (уровень 3);
  • → возврат '' (уровень 4, «без флага»).

Поскольку и default тоже пуст, привычный откат «per-agent пуст → взять default» не спасает: откатываться не на что. Это ключевой нюанс — фикс обязан давать каждой роли непустой «пол» (floor) даже когда И per-agent, И default env пусты.

2. Бизнес-ценность / зачем важно

Для Opus 4.8 (канон Anthropic) уровень reasoning-эффорта влияет на качество вывода сильнее, чем у прежних моделей. Coding/agentic роли (особенно developer) должны идти минимум на high, а developer — кандидат на xhigh. Сейчас фактически работает неконтролируемый CLI-дефолт → прямой удар по стратегии надёжности и предсказуемости качества всего конвейера (включая enduro-trails из общего инстанса).

3. Решение (бизнес-уровень)

Принят вариант (c) (решение Славы, 08.06): пустая строка эффорта трактуется как «не задано» и откатывается на осмысленный per-role дефолт (а не на CLI-дефолт), устойчиво к пустым env. Дополнительно — зафиксировать целевые дефолты в config.py и .env.example.

Целевые значения эффорта (единственный апгрейд — developer)

Агент Эффорт Обоснование
analyst high intelligence-роль
architect high intelligence-роль
developer xhigh coding/agentic, канон Opus 4.8 → апгрейд с high
reviewer high intelligence-роль
tester medium механическая роль
deployer medium механическая роль

developer → xhigh — единственное изменение относительно текущих config-дефолтов; остальные значения подтверждают текущий замысел и фиксируются устойчиво.

4. Грабли / ограничения (из бизнес-запроса)

  • Хост-репо / env-правки НЕ переживают деплой, если положены в git-managed файл (урок 08.06 про docker-compose + TZ). Источник правды для реальных значений — .env на хосте (gitignored), канон-шаблон — .env.example. Фикс обязан быть code-side robust: даже если прод-.env снова окажется с пустыми ORCH_AGENT_EFFORT_*, эффорт всё равно резолвится в целевые значения.
  • Self-hosting: правка касается инструмента, который сейчас в проде обслуживает и другие проекты. Прод-контейнер orchestrator не ронять в рамках задачи; деплой — через штатный deploy-stagingConfirm Deploy.

5. Не-цели

  • НЕ трогать model-резолв (resolve_agent_model — сделан в ORCH-074).
  • НЕ включать G3 model-routing — все 6 агентов остаются на claude-opus-4-8.
  • НЕ менять значения эффорта сверх согласованных (high/medium/xhigh для developer). Иные значения — отдельное взвешенное решение.

6. Затронутые стороны

  • Все агенты конвейера (analyst → deployer) во всех проектах общего инстанса.
  • Операторы (правка прод-.env), документация (README таблица, .env.example).