2ea204e3b3
Прежде имя опознавалось только по окончанию, и сторож был слеп к App\Services\Db\GrantsConsistencyChecker в db/02_grants.sql. Одна и та же ложь, в одном месте, ловилась или нет по последнему слову. Скверно вдвойне: чем незнакомее окончание, тем вероятнее, что класса и правда нет. Теперь имя с путём считается именем независимо от окончания. Выбор доказан замером четырёх правил: 17, 35, 40 и 348 срабатываний. Любое слово-верблюд отпадает по числу — в шум идут PostgreSQL, SaaS и имена тестов. Список окончаний для голых имён расширен: цена — одно лишнее имя в долге, находка — два имени в самом db/schema.sql, которых прежний список не видел. Известная граница названа вслух внутри сторожа: голое имя с незнакомым окончанием он не увидит, лечится привычкой писать имя с путём. Починил заодно две свои ошибки того же рода. Правило про запрет обработки работало по окну в восемь строк и давало ложное красное на десятке посторонних имён — сведено к тому же понятию куска, мерка в стороже теперь одна на всё. И существующими считались классы только из app/app: собственные проверки проекта сторож посчитал бы несуществующими. Добавлены app/tests и app/database. Перечень долга пересчитан: 28 имён вместо 9, почти весь прирост дал один раздел журнала — план мая 2026. Над перечнем поставлена оговорка: замерено, что класса с таким именем нет, и НЕ замерено, сделана ли работа под другим именем. Показан красным семью ножами. Сторож поймал собственного автора: полный прогон покраснел на абзаце, который я сам дописал в журнал час назад. Полный прогон: 5011 проверок, красных 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>