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