5.8 KiB
5.8 KiB
Отчёт: Задание A7 — исправление двух дефектов в данных дашборда
Дата: 2026-08-21
Идентификаторы и границы
- START_HEAD (BASE_SHA):
09d5e5d1ae62c16f2c3d52dd2b2e88a09f3e4987 - Ветка:
antigravity/dashboard-fixes - origin/main:
09d5e5d1ae62c16f2c3d52dd2b2e88a09f3e4987 - Граница зоны Codex: ни один файл в
src/antigravity_provider/router/ui/**,hermes_hub_app.py,tests/test_ui_*.pyНЕ изменялся (git diff --name-onlyпо этим путям пуст). - Тег
v0.1.1: НЕ создавался (в репозиторииhermes-hub).
1. Исправление active_calls и унификация LeaseManager (P0-1)
- Причина дефекта:
RouterEngineпо умолчанию создавал собственный экземплярLeaseManager(), в то время какstate_store.pyиhealth_tracker.pyопрашивали синглтонLeaseManager.get(). - Исправление:
RouterEngine.__init__теперь инициализируетself.leases = leases if leases is not None else LeaseManager.get().state_store.pyсчитывает активные лизы черезget_router_engine().leases(с запасным обращением кLeaseManager.get()), обеспечивая единый источник истины.ProfileHealthRecord.active_leasesвhealth_tracker.pyзаполняется реальным числом занятых лизов для каждого профиля.- В
cli_commands.py:print_router_statusдобавлен вывод активных лизов в столбцеSTATE(healthy (1 active)), еслиprecord.active_leases > 0. - Тест: добавлен тест
test_active_calls_and_hub_snapshot_integration, захватывающий лиз через путь роутера (engine.leases.acquire("ag-w1")) и проверяющий, чтоHubSnapshot.metrics["active_calls_total"] == 1,metrics["active_calls_by_profile"]["ag-w1"] == 1иsnapshot.get_profile("ag-w1").active_leases == 1.
2. Устранение холодного 0% CPU на первом замере (P0-2)
- Причина дефекта:
psutil.cpu_percent(interval=None)без предварительного замера по спецификацииpsutilвозвращает0.0%. - Исправление:
- При первом холодном вызове
HostMetricsService.collect()выполняется прогрев счетчика через короткий неблокирующий интервалpsutil.cpu_percent(interval=0.05), после чего последующие вызовы считывают накопленный дельта-дифференциал черезinterval=None. - Также счетчик
psutilпредварительно калибруется при импорте модуляhost_metrics.py. - Тест: добавлен юнит-тест
test_host_metrics_cpu_warmup_avoids_cold_zero, проверяющий прогрев на холодном старте.
- При первом холодном вызове
3. Расчет реальной скорости сети и семантика счетчиков (P1-4)
- В
HostMetricsServiceиHostMetricsSnapshotреализован расчет мгновенной скорости сети в Мбит/с на основе дельты времени и переданных байт между выборками:net_speed_mbps: общая скорость сети (Mbps = (delta_sent + delta_recv) * 8 / (dt * 1_000_000));net_sent_mbps/net_recv_mbps: скорость отдачи / приема (Mbps);net_bytes_sent/net_bytes_recv: накопительные счетчики с момента загрузки машины (с явной семантикой в контракте).
- Тест: добавлен юнит-тест
test_host_metrics_network_live_speed, проверяющий расчет Mbps между замерами.
4. Обновление контракта и статус YAML (P1-3, P1-5)
- В
docs/UI_STATE_CONTRACT.md:- В разделе 8.2 детально описаны поля сетевой скорости (
net_speed_mbps,net_sent_mbps,net_recv_mbps) и накопительных байт (net_bytes_sent,net_bytes_recv). - Добавлено примечание о warm-up поведении CPU.
- Добавлен раздел 9 Configuration Preservation Status с честной фиксацией статуса:
- Заголовочные комментарии и пустые строки до первого ключа сохраняются (
supported); - Внутренние комментарии внутри словарей нормализуются стандартным
safe_dump(статус «частично» / «partially supported»).
- Заголовочные комментарии и пустые строки до первого ключа сохраняются (
- В разделе 8.2 детально описаны поля сетевой скорости (
5. Результаты проверок
- Headless pytest (Python 3.8):
pytest -v→ 195 passed, 26 skipped, 3 deselected in 11.79s - Full pytest (Python 3.12 с
customtkinter,pillow,psutil):& "C:\Users\trush\AppData\Local\Programs\Python\Python312\python.exe" -m pytest -v→ 195 passed, 26 skipped, 3 deselected in 11.02s - 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) - UI Zone Isolation:
0 files modified in UI area