Провенанс правил фундамента: замер прошлого проекта автора (FewSeconds-ManyDeaths-Unity, 191 файл _Project), сделанный при старте Guildmaster в мае 2026. Запись извлечена из замороженного 10-reference/tech-stack — числа больше нигде не сохранились.

Решили: запретить в Guildmaster ровно то, что измеримо болело в прошлом проекте. Каждое HARD-правило фундамента — контрмера с конкретной цифрой за спиной, а не вкусовщина.

Что болело в FewSecondsМасштабКонтрмера у нас
нет Assembly Definitions0 .asmdef, монолитграф сборок, зависимости только вниз
синглтоны18 классов, 480 обращений к .instanceDI через VContainer, static instance запрещён
Find*ObjectOfType87 вызовов в 54 файлах, в том числе в геттерахинъекция и явные ссылки
глобальный UnityEngine.Random17 вызовов, SessionSeed через Random.InitState глобальнотолько IRngService, seeded
god-object стейтапараллельные массивы + SO.CreateInstance для рантаймарантайм-состояние в POCO, SO иммутабельны
god-object шиныGlobalEventSystem: 60+ статических UnityEventMessagePipe через DI с дисциплиной отписки
класс на каждый скиллвзрыв классов, SkillScript под 200 строкданные в SO, поведение через [SerializeReference]

Почему: главный вывод замера — проблемы шли не от незнания C#, а от отсутствия двух вещей: границ (asmdef) и инверсии зависимостей (DI). Всё остальное было следствием: без границ любой класс мог дотянуться куда угодно, а без DI единственным способом «дотянуться» оказывался синглтон или Find. Поэтому оба пункта заложены в фундамент до первой игровой фичи — ретрофит границ по живому проекту стоит дороже, чем весь выигрыш от них.

Грабли: правила выглядят догмой, если не знать этих чисел, — и тогда их начинают «оптимизировать» («ну один синглтон же можно»). Один можно. Их стало 18, а обращений 480, за одну итерацию проекта, и каждое по отдельности было разумным.

Владелец правды: сами правила — Reference - Code Standards §1 и §4, CLAUDE.md («Правила слоёв»); граф сборок — .asmdef файлы.