hermes-hub/tests/test_running_build_is_visible.py
Hermes Team 28f35f863f fix(antigravity): терминал не открывался из-за подменённого HOME; видно работающую сборку
Мастер честно сообщил: «Терминал /usr/bin/xfce4-terminal завершился сразу с
кодом 1, окно не открылось» — новая проверка запуска сработала.

Причина в моей же правке. Терминал запускался с HOME, подменённым на каталог
профиля, а клиенты X11 берут ключ авторизации из ~/.Xauthority: в
agy_profiles/ag-5 такого файла нет и быть не может, поэтому подключиться к
дисплею терминал не мог. Подменять HOME терминалу и не требуется — это делает
сценарий входа, уже внутри окна, перед самым запуском agy.

Заодно устранено побочное действие в запросе: сценарий входа создавался внутри
функции ПОИСКА терминала. Теперь его готовит start_native_agy_login, а поиск
только отвечает на вопрос и ничего не создаёт.

Владелец не мог понять, обновился ли хаб: на Linux строка сборки в боковой
панели была пуста, потому что заполнялась из панели обновлений, а та
подтягивается только при открытии. Теперь номер берётся из снапшота и
показывается вместе со временем запуска процесса.

Показывается running_commit — снятый ОДИН РАЗ при старте процесса. Поле commit
читается из манифеста на диске при каждом запросе, поэтому переживший
обновление процесс рапортует им свежий номер при старом поведении; на этом я
уже спотыкался при разборе окон консоли. Снятое при старте значение отвечает на
настоящий вопрос: какой код сейчас в памяти.

678 passed, 2 skipped; ruff чисто; релизный гейт пройден.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 16:04:07 +07:00

56 lines
2.4 KiB
Python
Raw 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.

"""Владелец должен видеть, какой код сейчас работает.
На Linux строка сборки в боковой панели оставалась пустой: она заполнялась из
панели обновлений, а та подтягивается только при открытии. Понять, дошло ли
обновление, было нельзя.
Глубже: поле commit читается из манифеста на диске при каждом запросе, поэтому
переживший обновление процесс рапортует свежий номер при старом поведении.
Отличить сборки по нему невозможно — это уже подводило при разборе окон
консоли. running_commit снимается один раз, при старте процесса, и отвечает на
настоящий вопрос: какой код в памяти.
"""
from __future__ import annotations
import time
from fastapi.testclient import TestClient
from antigravity_provider.router.web.server import (
PROCESS_STARTED_AT,
RUNNING_COMMIT,
app,
)
def test_health_reports_the_running_build():
payload = TestClient(app).get("/api/health").json()
assert payload["running_commit"] == RUNNING_COMMIT
assert payload["started_at"] == PROCESS_STARTED_AT
def test_snapshot_reports_the_running_build():
snap = TestClient(app).get("/api/snapshot").json()
assert snap["running_commit"] == RUNNING_COMMIT
assert snap["started_at"] == PROCESS_STARTED_AT
def test_running_commit_is_taken_once_and_does_not_follow_the_disk(monkeypatch):
"""Подмена манифеста на диске не должна менять номер работающей сборки."""
from antigravity_provider.router.web import server
monkeypatch.setattr(server, "get_installed_commit", lambda: "deadbee")
payload = TestClient(app).get("/api/health").json()
assert payload["commit"] == "deadbee", "поле commit отражает диск"
assert payload["running_commit"] == RUNNING_COMMIT, (
"а running_commit — то, что реально запущено"
)
assert payload["running_commit"] != "deadbee"
def test_start_time_is_plausible():
assert PROCESS_STARTED_AT > 0
assert PROCESS_STARTED_AT <= time.time()