Решили: правку references в .asmdef считать НЕ проверяемой скриптом compile-check.ps1 — его красный на такой правке ложный, а настоящий ответ даёт теневой проект (run-tests.ps1 -Where Shadow, balance-headless.ps1), где Unity собирает сборки заново.

Почему: скрипт берёт готовые команды компиляции из Library/Bee/artifacts/*.dag/*.rsp, и именно это делает его быстрым. Но список -r: внутри .rsp пишет ТОЛЬКО редактор: исходники скрипт добирает с диска (потому новые .cs видит), а ссылки — нет. Добавил Guildmaster.Guild в Guildmaster.Balance.Editor.asmdef — скрипт продолжает собирать по старому списку и печатает CS0234: пространства имён Guild не существует для кода, который на самом деле компилируется.

Альтернатива «попросить рефреш у редактора» отвергнута ситуативно: редактор занят человеком, а правило проекта — не компилировать в чужом play. Альтернатива «обойтись без ссылки» отвергнута по существу: бенч забега обязан ходить по карте тем же MapGenerator/MapTraversal, что и игра, иначе он мерит выдуманный акт.

Грабли: разовую проверку можно сделать, не трогая проект — скопировать .rsp в свою временную папку, дописать -r: на нужный *.ref.dll (он в той же .dag-папке, если сборка редактору знакома), заменить список исходников на актуальный и вызвать dotnet <editor>/Data/DotNetSdkRoslyn/csc.dll @probe.rsp. Пустой вывод = компилируется. Оригинальные артефакты при этом не портятся.

Вторая мина того же захода: шаг круга бенчей возвращает (string csv, string md) — это пути к записанным файлам, а не их содержимое. BalanceCli печатает их в лог как пути. Бенч, вернувший текст, отработает «успешно», напечатает первые строки отчёта и не оставит ни одного файла; выглядит это как «прогон прошёл, а отчётов нет». Запись делает сам бенч через ReportWriter.

Владелец правды: scripts/compile-check.ps1 (шапка про .rsp), Assets/_Project/Scripts/Balance/Editor/BalanceCli.cs (контракт шага), Assets/_Project/Scripts/Balance/Editor/ReportWriter.cs.