8.1 KiB
8.1 KiB
Отчёт: Задание A8 — запуск, развёртывание, самопроверка
Дата: 2026-08-22
Идентификаторы и границы
- START_HEAD (BASE_SHA):
20078f5ae2ee38525b6da383e20e54d314811a2f(origin/main) - Ветка:
antigravity/deployment-doctor - origin/main:
20078f5ae2ee38525b6da383e20e54d314811a2f - Граница зоны Codex: ни один файл в
src/antigravity_provider/router/ui/**,tests/test_ui_*.pyНЕ изменялся (git diff --name-onlyпо этим путям пуст). - Тег
v0.1.1: НЕ создавался (в репозиторииhermes-hub).
1. Самолечение и видимая диагностика сбоев при запуске (P0-1)
- Создан модуль самовосстановления и ранней диагностики
src/antigravity_provider/router/launcher_bootstrap.py:check_missing_dependencies(): проверяет наличиеcustomtkinter,PIL,psutil,yaml.self_heal_dependencies(): если пакеты снесены кнопкой «Repair install» в Hermes, выполняет автоматическую тихую доустановку в активный venv (sys.executable -m pip install).log_startup(): фиксирует все этапы запуска и полный трейсбек исключений вlogs/startup.logдо инициализации графической оболочки.show_native_error(): в случае фатального падения до создания окна вызывает нативный диалогMessageBoxWс текстом ошибки и путем к логу запуска.
- Обновлен лаунчер
launcher/HermesHub.csи скомпилированlauncher/HermesHub.exe: генерируемый входной скрипт запускает приложение черезbootstrap_and_launch(). - Оценка перехода на собственный venv:
- Обоснование: Оставлено единое окружение Hermes venv с механизмом самолечения (
launcher_bootstrap.py), так как собственный venv потребовал бы дублирования 300+ МБ рантайма Python и усложнил интеграцию с CLI Hermes. Самолечение устраняет риск сноса пакетов при пересборке venv агентом.
- Обоснование: Оставлено единое окружение Hermes venv с механизмом самолечения (
2. Профили Claude и Grok во встроенной конфигурации и исправление мастера (P0-2)
- Добавлены профили Claude и Grok:
- В
src/antigravity_provider/router/router_config.pyиconfig/router_profiles.example.yamlдобавлены по 3 профиля:claude-orch,claude-worker-1,claude-worker-2иgrok-orch,grok-worker-1,grok-worker-2(всего 22 профиля).
- В
- Исправление
AutoAssigner.find_free_slot:- Кандидаты строго фильтруются по наличию в
config.profiles. - Если для провайдера нет свободных/неавторизованных слотов, метод возвращает
None(а не несуществующий или занятыйcandidates[0]). AutoAssigner.recommend_assignmentпри отсутствии слотов корректно возвращает пустой слот со статусом «Нет свободных слотов».- Тест:
test_auto_assigner_find_free_slot_for_all_five_providersпроверяет все 5 провайдеров.
- Кандидаты строго фильтруются по наличию в
3. Блокировка интерактивного входа при нажатии «Тест» (P0-3)
- В
do_test_profileвhermes_hub_app.py: добавлена предварительная проверкаstatus.get("expired"), которая сразу возвращает ошибку «Авторизация истекла, требуется повторный вход» без вызова адаптера. - В
AntigravityAdapter.invoke: добавлена проверка времени жизни токена (tokens.get("expiry_date")) перед запуском подпроцессаagy. При просрочке немедленно выбрасываетсяAuthExpiredError. - В окружение
agy_subprocess: добавлены флагиBROWSER=noneиCI=1, исключающие интерактивный запуск браузера дочерними процессами. - Тесты:
test_adapter_no_browser_on_expired_tokenиtest_do_test_profile_no_browser_on_expired_token.
4. Зеркальное развёртывание инсталлятора и манифест (P0-4)
- В
installer/HermesHubSetup.cs:- Функция
CopyDirectoryRecursiveпереведена наMirrorDirectoryRecursive: рекурсивно зеркалирует источник, удаляя устаревшие или мертвые файлы/каталоги в целевой папке (pluginDst), игнорируя__pycache__и.pyc. - При установке создается
deployment_manifest.jsonс полямиversion,deployed_at,git_commit. - Скомпилирован
dist/HermesHubSetup.exeи обновленdist/checksums.txt.
- Функция
- В
installer/HermesHubSetup.py: также добавлено зеркальное копирование и записьdeployment_manifest.json. - Тест:
test_mirror_deployment_removes_deleted_filesподтверждает удаление исчезнувших из источника файлов.
5. Команда самопроверки hermes router diag (P0-5)
- В
src/antigravity_provider/router/cli_commands.pyрасширена командаprint_diagnostics_cli():- Проверка зависимостей venv (
customtkinter,Pillow,psutil,pyyaml). - Проверка свежести развёрнутого плагина против версии приложения по
deployment_manifest.json. - Проверка валидности
router_profiles.yaml(число профилей и ролей). - Диагностическая матрица по всем профилям с маскированием идентичностей и источниками квот.
- Реальный тестовый вызов по одному профилю на каждого авторизованного провайдера.
- Однострочный вердикт:
[ВЕРДИКТ: ГОТОВ / ЧАСТИЧНО ГОТОВ / НЕ ГОТОВ]с явным списком причин. - Все секреты маскируются (
sk-...abcd,och***@domain).
- Проверка зависимостей venv (
- Тест:
test_print_diagnostics_cli_outputпроверяет структуру вывода и вердикта.
6. Результаты проверок
- Headless pytest (Python 3.8):
pytest -v→ 201 passed, 27 skipped, 3 deselected in 10.70s - Full pytest (Python 3.12):
& "C:\Users\trush\AppData\Local\Programs\Python\Python312\python.exe" -m pytest -v→ 201 passed, 27 skipped, 3 deselected in 10.54s - Ruff linter:
ruff check .→ All checks passed! - Release Gate:
python scripts/release_gate.py→ 7/7 PASSED ([RELEASE GATE: PASSED] All criteria verified. Ready for Candidate v0.1.1) - Live Update Feed:
[MANIFEST_LIVE=True, PACKAGE_LIVE=True, PACKAGE_HASH_VERIFIED=True](sha256b5bbdea2a7a2157a26389266aab07ab3602bb00b4612065c48defec9d6fe909c)