Решили: DevCommandTool резолвит реестр через Resolve в try, а не через TryResolve — обобщённой перегрузки без ключа в нашей версии VContainer нет. Та же готча уже была описана в MapDevCommands, но во второй раз её не заметили.

Грабли, ради которых запись и существует: сборка Guildmaster.DevTools.Editor не компилировалась три коммита подряд, и ни один из штатных прогонов этого не показал.

  • compile-check.ps1 без -All проверяет только сборки, задетые правками. Правишь Combat и Game — редакторные сборки не в списке, и их краснота остаётся невидимой сколько угодно долго.
  • EditMode-тесты тоже молчат: они не зависят от *.Editor-сборок и проходят на зелёном.
  • Всплыло только в PlayMode-прогоне, потому что тот поднимает настоящий редактор и компилирует всё.

Отсюда правило на будущее: красное в редакторной сборке морозит тулинг у человека (меню крутит старую сборку, MCP-инструменты отвечают из прошлого), а поймать его дешевле всего -All перед сдачей блока, а не после жалобы на «редактор ведёт себя странно».

Второе, мельче: compile-check -All на этом дереве показывает ошибку и в Guildmaster.AnimationLab.Editor — но там ссылка в .asmdef уже есть, а скрипт собирает по Library/Bee/artifacts/*.rsp, которые генерирует только редактор. Это ложная тревога от устаревших .rsp, и отличить её от настоящей можно ровно одним способом: пересобрать в редакторе. Скрипт про это честно предупреждает строкой «добраны устаревшие зависимости», и строку эту стоит читать.

Владелец правды: DevTools/Editor/DevCommandTool.cs (комментарий у вызова), DevTools/MapDevCommands.cs (первое описание той же готчи).