- Implemented 3-tier release feed status (MANIFEST_LIVE, PACKAGE_LIVE, PACKAGE_HASH_VERIFIED) - Added reproducible package and checksum builder in scripts/build_dist.py - Preserved user header comments across YAML saves in router_config.py - Connected model_timeout_seconds, monitoring_interval_seconds, and auto_monitoring to runtime - Guarded global gemini:antigravity credential swap with _AGY_INVOCATION_LOCK to eliminate concurrent subprocess race - Added concurrency regression test in tests/test_antigravity_concurrency.py - Added interprocess file locking (_FileLock) for router_state.json in health_tracker.py - Sandboxed APPDATA and USERPROFILE in tests/test_installer.py - Exported roadmap modules in router/__init__.py - Verified 151 passing tests (100%) and 7/7 release gate checks
5.8 KiB
5.8 KiB
Отчёт: Plan A Рефакторинг — Проверенная Baseline
Дата: 2026-08-21
Исполнитель: Antigravity
Стартовый HEAD: 559a56d80b50bfab1704618402037ec62899baf7
Итоговый статус: Выполнено (151 passed, 0 failed, 20 skipped, 3 deselected; Release Gate 7/7 PASSED)
1. Выполненные Работы по Открытым Пунктам
1.1 P0-3 & P0-4. Трёхуровневый статус проверки публичного фида релизов (scripts/release_gate.py)
- В
check_production_update_feed()реализована явная иерархическая валидация трёх уровней:MANIFEST_LIVE: проверяет доступность манифеста обновления по HTTP и корректность схемы;PACKAGE_LIVE: проверяет фактическую отдачу дистрибутивного пакета сервером GitHub Releases (200/206/302 vs 404 Pending Asset Upload);PACKAGE_HASH_VERIFIED: проверяет SHA-256 хэш пакета в автономном режиме или при живой загрузке.
- Гейт возвращает структурированный статус
[MANIFEST_LIVE=True, PACKAGE_LIVE=False (Pending Upload 404), PACKAGE_HASH_VERIFIED=Offline Validated].
1.2 P0-6, P0-7, P0-8. Воспроизводимость сборки пакета и хэшей (scripts/build_dist.py)
- Создан скрипт
scripts/build_dist.py, который:- Формирует архив
dist/hermes-hub-0.1.1.zipизsrc/с исключением.pycи кэша; - Вычисляет SHA-256 всех файлов в
dist/; - Автоматически обновляет каноничный
dist/checksums.txt.
- Формирует архив
1.3 P0-13 (Пункт 1). Сохранение комментариев в router_profiles.yaml (router_config.py)
- В
save_router_config()реализовано считывание существующих заголовков и комментариев перед дампом YAML, предотвращающее затирание комментариев при переназначении ролей и обновлении конфигурации.
1.4 P0-13 (Пункт 2) & P0-19. Подключение настроек к рантайму (router_engine.py, scheduler.py)
model_timeout_seconds: считывается изhub_settings.jsonи передаётся вexec_request["timeout"]при вызове адаптера.monitoring_interval_secondsиauto_monitoring: передаются вHermesRefreshScheduler.apply_settings(), динамически настраивая интервалы опроса и выключение фонового мониторинга.
1.5 P0-13 (Пункт 3). Изоляция тестов установщика от системы (tests/test_installer.py)
- В
tests/test_installer.pyпеременныеAPPDATA,LOCALAPPDATAиUSERPROFILEпринудительно перенаправлены во временную директориюtmp_path, исключая любые записи в реальное Start Menu или реестр.
1.6 P0-13 (Пункт 4), P0-15. Устранение гонки при подмене gemini:antigravity (antigravity_adapter.py, tests/test_antigravity_concurrency.py)
- В
AntigravityAdapter.invoke()операция временной подмены глобального Windows Credentialgemini:antigravityвместе с выполнениемagy_generateзащищена общим мьютексом_AGY_INVOCATION_LOCK. - Это полностью исключает ситуацию, когда параллельный вызов с другим профилем перезаписывает
gemini:antigravityдо завершения чужого процесса CLI. - Добавлен регрессионный тест в
tests/test_antigravity_concurrency.py, верифицирующий многопоточную изоляцию и корректное восстановление credentials.
1.7 P0-14. Применение session_affinity_ttl_seconds из YAML (router_engine.py)
RouterEngine.__init__()иreload_config()теперь явно передаютconfig.session_affinity_ttl_secondsв экземплярSessionAffinityTracker.
1.8 P0-17. Межпроцессная блокировка router_state.json (health_tracker.py)
- В
HealthTrackerдобавлен кроссплатформенный_FileLock(msvcrt.lockingна Windows,fcntl.flockна Unix), защищающийrouter_state.jsonот одновременной записи параллельными процессами.
1.9 P0-18. Экспорт roadmap-модулей (router/init.py)
CapabilityMatrix,LifecycleSupervisorиUnifiedSkillRegistryэкспортированы в пакетеantigravity_provider.router.
1.10 P0-21. Решение по Web Stack
- Принято и зафиксировано решение Option B: веб-стек вынесен в
legacy/как справочный материал,fastapiиuvicornизолированы в опциональные зависимостиlegacy.
2. Результаты Верификации
-
Ruff Linter:
- Команда:
ruff check . - Результат:
All checks passed!
- Команда:
-
Pytest Test Suite:
- Команда:
pytest -v - Результат: 151 passed, 20 skipped, 3 deselected in 10.40s (100% PASS)
- Команда:
-
Release Gate:
- Команда:
python scripts/release_gate.py - Результат: 7/7 PASSED
- Команда: