Type
feature
Area
ai-coaching
Purpose
Чтобы у Coach появился измеряемый критерий «качество совета», а не только набор узких rule-гейтов. Сейчас качество LLM-рекомендации проверяется только косвенно: narrative-evidence-гейт ловит фактическое противоречие (readiness/HRV/trend), mutation/token-budget гейты ограничивают дугу, а drift-отчёт смотрит на факты решений. Ничего из этого не отвечает на вопрос «является ли рекомендация безопасной, точной, действенной и непротиворечивой» в целом.
По результату должен существовать версионируемый набор поведенческих eval-кейсов для Coach (по образцу services/bike_hr_tss_eval.py: holdout-сплит, метрики, вердикт pass/fail), прогоняемый непрерывно, с pass-rate и порогом качества, и правилом «production failure → новый eval-кейс». Это закрывает крупнейший gap AI-native SDLC-подхода (stage Test/Deploy) в контексте Coach.
Non-goals
- НЕ немедленный regex-блокировщик одной фразы («запретить говорить "увеличь нагрузку" при плохом восстановлении»). Это анти-паттерн: ловит конкретное выражение, а не класс проблем, и ничего не говорит о качестве ответа в целом. Такой quick-fix сознательно исключён из скоупа.
- Не автоматическая реализация фиксов по провалившимся eval-кейсам (без человеческого triage).
- Не production control bands / observability — это отдельный контур.
Context (уже воспроизведённый falsifying check)
Сценарий: реальный снапшот с плохим восстановлением (readiness низкий, HRV подавлен, TSB глубоко отрицательный) + Coach генерирует рекомендацию «увеличить нагрузку / сегодня интервалы». Рекомендация проходит через существующие гейты, потому что «increase intensity» не является правилом-противоречием в narrative-гейте, а mutation/token-гейты это не оценивают. Итог: покрытие = claim-level fact-checker + ограничители, но НЕ поведенческий eval. Пробел реален и не дублирует существующее.
Proposed approach (эскиз, детали — в ExecPlan)
- Инвентаризация поведенческих свойств Coach (безопасность, точность, действенность, непротиворечивость, стиль/тон).
- Формат eval-кейса: вход (data snapshot + prompt/намерение) → ожидаемое качество (набор проверяемых свойств, не единственный «верный» текст). LLM-ответы не должны сравниваться со строкой — сравниваются свойства.
- Версионируемый реестр кейсов (
tests/evals/coach/...), детерминированный прогон через реальный провайдер или Mock с зафиксированным контекстом.
- Метрики: pass-rate по свойствам, разбиение по классам сценариев, порог качества (например, ≥ N% + красная зона для критичных свойств).
- Непрерывный прогон в CI + правило «production failure → новый eval-кейс» в контур Maintain.
ExecPlan
to be created — docs/coach_behavioral_eval_lifecycle_execplan.md
Acceptance criteria
- Given версионируемый реестр eval-кейсов Coach, when он прогоняется детерминированно, then выводится pass-rate по свойствам и общий вердикт (pass/fail) по порогу.
- Given проваленный eval-кейс, when Coach выдаёт рекомендацию, нарушающую критичное свойство, then гейт возвращает fail и связывает с конкретным кейсом (не блокируя всю сборку без triage).
- Given новый production-инцидент с качеством ответа Coach, when диагностика фиксирует паттерн, then существующий процесс может добавить eval-кейс в реестр (правило закрытия петли Maintain).
- Anti-тест (должен остаться fail): снапшот с плохим восстановлением + «увеличить нагрузку» не должен молча проходить как «хороший совет».
Files in scope
tests/evals/coach/ — новый каталог с реестром и прогоном
services/coach_behavioral_eval.py — новый модуль (по аналогии с services/bike_hr_tss_eval.py)
.github/workflows/ci.yml — job непрерывного прогона evals
docs/coach_behavioral_eval_lifecycle_execplan.md — новый ExecPlan
Smoke baseline
Не регрессировать python -m pytest tests/smoke -q и -m "not live and not debug" tests/. Новые eval-кейсы — отдельный контур, не смешивать со smoke.
Dependencies
Type
feature
Area
ai-coaching
Purpose
Чтобы у Coach появился измеряемый критерий «качество совета», а не только набор узких rule-гейтов. Сейчас качество LLM-рекомендации проверяется только косвенно: narrative-evidence-гейт ловит фактическое противоречие (readiness/HRV/trend), mutation/token-budget гейты ограничивают дугу, а drift-отчёт смотрит на факты решений. Ничего из этого не отвечает на вопрос «является ли рекомендация безопасной, точной, действенной и непротиворечивой» в целом.
По результату должен существовать версионируемый набор поведенческих eval-кейсов для Coach (по образцу
services/bike_hr_tss_eval.py: holdout-сплит, метрики, вердикт pass/fail), прогоняемый непрерывно, с pass-rate и порогом качества, и правилом «production failure → новый eval-кейс». Это закрывает крупнейший gap AI-native SDLC-подхода (stage Test/Deploy) в контексте Coach.Non-goals
Context (уже воспроизведённый falsifying check)
Сценарий: реальный снапшот с плохим восстановлением (readiness низкий, HRV подавлен, TSB глубоко отрицательный) + Coach генерирует рекомендацию «увеличить нагрузку / сегодня интервалы». Рекомендация проходит через существующие гейты, потому что «increase intensity» не является правилом-противоречием в narrative-гейте, а mutation/token-гейты это не оценивают. Итог: покрытие = claim-level fact-checker + ограничители, но НЕ поведенческий eval. Пробел реален и не дублирует существующее.
Proposed approach (эскиз, детали — в ExecPlan)
tests/evals/coach/...), детерминированный прогон через реальный провайдер или Mock с зафиксированным контекстом.ExecPlan
to be created —
docs/coach_behavioral_eval_lifecycle_execplan.mdAcceptance criteria
Files in scope
tests/evals/coach/— новый каталог с реестром и прогономservices/coach_behavioral_eval.py— новый модуль (по аналогии сservices/bike_hr_tss_eval.py).github/workflows/ci.yml— job непрерывного прогона evalsdocs/coach_behavioral_eval_lifecycle_execplan.md— новый ExecPlanSmoke baseline
Не регрессировать
python -m pytest tests/smoke -qи-m "not live and not debug" tests/. Новые eval-кейсы — отдельный контур, не смешивать со smoke.Dependencies
bike_hr_tss_eval.pyкак образец)