Мастер честно сообщил: «Терминал /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>
56 lines
2.4 KiB
Python
56 lines
2.4 KiB
Python
"""Владелец должен видеть, какой код сейчас работает.
|
||
|
||
На 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()
|