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

50 lines
4.5 KiB
Markdown
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.

# Отчёт: Правдивость данных и готовность к релизу 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**.