hermes-hub/agents/done/2026-08-21-data-truthfulness-and-release-readiness.md
Hermes Team 42eddb3627 fix(quota, oauth): enforce data truthfulness, honest quota sources, and fail-closed OAuth
- Removed fabricated used_percent numbers and fake *_api source tags from quota_collector.py
- Marked quota snapshot sources as baseline/estimated and added visual estimation indicators in accounts_view.py
- Eliminated silent fallback on fake user_code/device_code in codex_oauth.py and grok_oauth.py
- Gated mock OAuth sessions strictly behind HERMES_HUB_DEV_MODE=1 with visible UI warnings
- Documented Google, OpenAI, xAI, and Claude OAuth clients in docs/OAUTH_CLIENT.md
- Relocated unused gui_server.py and gui_cockpit.html to legacy/
- Added test_data_truthfulness_and_oauth_security.py covering fail-closed and source truthfulness invariants
- Verified 98 passed tests (100%) and 7/7 release gate checks
2026-08-20 22:11:57 +07:00

4.5 KiB
Raw Permalink Blame History

Отчёт: Правдивость данных и готовность к релизу v0.1.1

Дата: 2026-08-21
Исполнитель: Antigravity
Статус: Выполнено (100% PASS, Release Gate 7/7)


1. Контекст и Выполненные Работы

Устранены дефекты показа недостоверных данных и тихого создания фиктивных кодов авторизации.

1.1 P0-1. Честный сбор и маркировка квот (quota_collector.py, account_identity.py, accounts_view.py)

  • Исключены выдуманные проценты: Удалены захардкоженные used_percent (12%, 9%, 1%, 2%, 5%, 10%, 6%, 9%, 14%, 13%, 1%). При отсутствии сетевого API провайдера для измерения точного расхода used_percent и remaining_percent устанавливаются в None.
  • Честный источник: Источники квот маркируются как "baseline" (или "estimated" / "runtime_event"), а не фиктивными *_api.
  • Визуальный признак в UI: В AccountCardWidget для оценочных/базовых данных отображается явная подпись (оценка) и бейдж • оценка во времени обновления.
  • Честная формулировка доступности: QuotaBucket.formatted_remaining() возвращает "Доступна", а при runtime-исчерпании квоты (429) — "Исчерпана (Сброс через ...)".

1.2 P0-2. Устранение тихого фолбэка на поддельный код авторизации (codex_oauth.py, grok_oauth.py, claude_oauth.py)

  • Fail-Closed при сетевой ошибке: При недоступности эндпоинта провайдера в CodexOAuthSession и GrokOAuthSession:
    • start() немедленно переходит в статус status = "failed" с возвратом ошибки.
    • Поток поллинга poll_thread не запускается.
    • Фиктивные коды CDX-... и GRK-... не генерируются.
  • Строгий DEV_MODE: Фолбэк на локальную сессию разрешён только при явном флаге HERMES_HUB_DEV_MODE=1 с визуальным предупреждением в мастере ⚠️ ТЕСТОВЫЙ РЕЖИМ (HERMES_HUB_DEV_MODE).
  • Claude OAuth: В handle_auth_code() при сбое обмена кода возвращается ошибка; прямой приём строки допускается только для явных ключей sk-ant- или в HERMES_HUB_DEV_MODE=1.

1.3 P1-3. Документация OAuth-клиентов (docs/OAUTH_CLIENT.md)

  • Документированы 4 публичных клиента (Google Antigravity, OpenAI Codex app_EMoamEEZ73f0CkXaXp7hrann, xAI Grok b1a00492-073a-47ea-816f-4c329264a828, Anthropic Claude 9d1c250a-e61b-44d9-88ed-5944d1962f5e).
  • Описаны модели угроз и обоснования по RFC 8252 (Native Apps), RFC 7636 (PKCE) и RFC 8628 (Device Authorization Grant).

1.4 P1-4. Очистка неиспользуемого gui_server.py

  • Неиспользуемые файлы gui_server.py и gui_cockpit.html вынесены из src/ в legacy/.
  • Зависимости fastapi и uvicorn изолированы в секцию [project.optional-dependencies] legacy.

2. Результаты Тестирования и Release Gate

  1. Новый набор тестов (tests/test_data_truthfulness_and_oauth_security.py):

    • Проверка честной маркировки источников квот source != '*_api' и is_estimated=True.
    • Проверка немедленного failed статуса и отсутствия поллинга в Codex и Grok при сетевых сбоях.
    • Проверка работы mock-сессий строго под HERMES_HUB_DEV_MODE=1.
    • Проверка отклонения невалидных кодов в Claude.
  2. Полный прогон Pytest:

    • Команда: pytest -v
    • Результат: 98 passed, 7 skipped, 3 deselected in 9.63s (100% PASS).
  3. Release Gate Verification (scripts/release_gate.py):

    • Результат: 7/7 PASSED.