Решили: снимок палитры (GuildmasterPalette.asset) пересобирается сам по импорту tokens.primitives.uss / tokens.semantic.ussAssetPostprocessor рядом с PaletteSnapshotBuilder. Пункт меню остаётся, но обязанности помнить о нём больше нет ни у кого.

Почему: сам шов USS → снимок законен и остаётся: мир (карта, боевые VFX, перекрасчик спрайтов) рисуется мимо UI Toolkit и читать USS не умеет. Костылём был не он, а ручной шаг: состояние «снимок отстал от токенов» существовало только потому, что о кнопке надо было помнить, и ловилось красным PaletteSnapshotTests уже постфактум. Правило, живущее в голове при том, что его умеет исполнять машина, — это и есть определение костыля.

Отвергнуто два других пути. Парсить USS в рантайме — писать парсер CSS ради одного потребителя. Сделать источником ассет, а USS генерировать — переворачивает направление, и тогда правка цвета уезжает в инспектор, где негде держать обоснования контраста; сейчас они живут комментариями прямо в USS рядом с числами.

Сказано: «Зачем нам кнопка “пересобрать палитру”? В чем сложность тебе её самой нажимать? Что за костыли, Никси?» (04.08.2026, сессия ca460396).

Грабли:

  • Нажать кнопку агент мог всё это времяexecute_menu_item в Unity MCP. Шаг числился «за Максом» по моей ошибке, а не по устройству системы, и из-за этого дважды попадал в отчёты как чужая работа.
  • В play mode пересборка пропускается: запись ассета посреди чужой игровой сессии — это внезапный SaveAssets под руками у того, кто играет. После выхода импорт темы отработает заново.
  • Рекурсии нет по построению: следим за .uss, пишем .asset.

Владелец правды: Assets/_Project/Scripts/Data/Editor/PaletteSnapshotAutoRebuild.cs, PaletteSnapshotBuilder.cs, тест PaletteSnapshotTests.