Решили: заведён гейт UssAssetLinkTests — каждый url("…") в любом .uss/.tss под
_Project/UI обязан вести на существующий файл. Семнадцать битых ссылок починены, текстура зерна
главного меню возвращена из истории со своим прежним guid.
Почему: тема переехала «файл на блок, файл на экран», и правила из UI/Theme/ оказались на
уровень глубже, в Theme/screens/. Путь ../../Art/… при этом не изменился ни одним символом — и
стал указывать в UI/Art/, которой не существует. Отвалились фон и все три логотипа бут-экрана,
восемь иконок ленты забега, иконки фильтров, сепаратор и замок. Заметил это Макс, глядя на игру,
через несколько дней после переезда.
Инвариант кросс-файловый по своей природе: ссылка живёт в USS, картинка — на диске, а связь между ними ломается ПЕРЕМЕЩЕНИЕМ, в диффе которого не меняется ничего. Ревью такого не ловит: в глаза бросается содержимое правил, а сломался их адрес.
Грабли, и они мои. PanelLinen.png использовали ДВА места: вариант .gm-panel--linen из
отменённого регистра «лист» и зерно главного меню .gm-mainmenu__texture. Снося регистр 06.08, я
посмотрела на первое и удалила файл — вместе с фоном меню, который к «листу» отношения не имел.
Макс отменял регистр, а не фон.
Поймать это было нечем, и в этом суть: гейт мёртвого кода проверяет КЛАССЫ, а
.gm-mainmenu__texture живой — у него есть потребитель в разметке. Живой класс, у которого пропала
картинка, не видел никто. Отсюда и форма нового гейта: он проверяет не «нужен ли кому-то класс», а
«существует ли то, на что правило показывает».
Сказано: «Т.е., а зачем мы убрали то? Нам ведь надо какой-то красивый переход от слабого затемнения к сильному? Я вроде не просил ничего убирать… негде. Изучишь этот момент?» (07.08.2026, сессия e32de921).
Переход, о котором вопрос, при этом цел: его держит EdgeVeil (.gm-mainmenu__veil) с шириной 85%
и плато 0.14, выверенными 04–05.08. Ушла только фактура поверх него.
Владелец правды: UssAssetLinkTests, components/*.uss и screens/*.uss (сами ссылки).