hermes-hub/tests/test_readiness_counting.py
Hermes Team 03d73f8d0b fix(readiness): роль на резерве считается работающей
Со скриншота владельца: заголовок «Ролей в строю: 0/6», а ниже шесть
предупреждений «роль работает через резервный аккаунт». Пять ролей
исправно отвечали, интерфейс сообщал, что не работает ни одна.

roles_ready считал только роли со здоровым ОСНОВНЫМ профилем. Роль,
обслуживаемая резервом, попадала в degraded_roles, но не в ready.
Ошибка в худшую сторону: отказ показывался там, где всё работает — а
переключение на резерв это ровно то, ради чего продукт и создан.

Теперь роль с живым резервом считается работающей и одновременно
помечается деградировавшей: оба состояния остаются различимыми.

Попутно склонение: «Есть 1 ролей без рабочего маршрута» заменено на
согласованное с числом — 1 роль, 2 роли, 5 ролей.

Проверено на живых данных: 6/6 в строю, состояние «деградация», а не
«критическое».

Тесты: 375 passed, ruff чисто.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 10:19:33 +07:00

43 lines
2.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Роль на резерве считается работающей.
Дефект со скриншота владельца: заголовок «Ролей в строю: 0/6», а ниже
шесть предупреждений вида «роль работает через резервный аккаунт». Пять
ролей исправно отвечали, а интерфейс сообщал, что не работает ни одна.
roles_ready считал только роли со здоровым ОСНОВНЫМ профилем. Роль,
обслуживаемая резервом, попадала в degraded, но не в ready. Это ошибка в
худшую сторону: пользователь видит отказ там, где всё работает.
"""
from __future__ import annotations
from antigravity_provider.router.unified_health import _plural_roles
def test_role_on_fallback_counts_as_ready():
"""Роль, у которой жив резерв, обязана попадать в «в строю»."""
import inspect
from antigravity_provider.router import unified_health
src = inspect.getsource(unified_health.UnifiedHealthService.get_system_readiness)
marker = "if has_working_fallback:"
assert marker in src
tail = src.split(marker, 1)[1].split("else:", 1)[0]
assert "roles_ready += 1" in tail, (
"роль на резерве снова не засчитывается как работающая"
)
assert "degraded_roles += 1" in tail, (
"признак деградации потерян — состояние должно оставаться отличимым"
)
def test_plural_roles_agrees_with_number():
"""«Есть 1 ролей» — так по-русски не пишут."""
assert _plural_roles(1) == "1 роль"
assert _plural_roles(2) == "2 роли"
assert _plural_roles(4) == "4 роли"
assert _plural_roles(5) == "5 ролей"
assert _plural_roles(11) == "11 ролей"
assert _plural_roles(21) == "21 роль"
assert _plural_roles(112) == "112 ролей"