Решили: редакторный API в рантайм-сборке закрывается дефайном на весь метод, а не на одну строку; без редактора метод отдаёт заглушку.

Почему: UiSampleFactory живёт в Guildmaster.DevTools — это РАНТАЙМ-сборка, её зовёт дев-панель в игре, — и грузила UXML через AssetDatabase. В редакторе всё работает, compile-check тоже молчит (он собирает теми же командами, что редактор, то есть с UNITY_EDITOR), и увидеть это можно только сборкой плеера. Она у нас идёт на pull request, поэтому поломка прожила в dev несколько дней. Отвергнут перенос фабрики в Editor-сборку: её зовёт рантайм-панель, и переезд утащил бы за собой всю дев-панель.

Грабли: «локально компилируется» здесь не значит ничего — вопрос не в синтаксисе, а в том, какой сборке достанется код. Проверка одна: сборка плеера. Отсюда практическое следствие для лестницы прогонов — правку в DevTools, Presentation и любом рантайм-коде, который трогает ассеты, нельзя считать проверенной до зелёного билда на CI.

Владелец правды: DevTools/UiSampleFactory.cs, задача Build Player в .github/workflows/ci.yml.