82503073cc
Прежняя версия читала один db/schema.sql. Дыра хуже, чем пропущенный файл: два из семи мест лжи, которые эта же работа и чинила, жили в db/CHANGELOG_schema.md. Сторож берёг ту бумагу, где ложь уже поправлена, и не берёг ту, где она жила. Список бумаг больше не память, а замер: берётся с диска — всё под db/, что sql или md, включая вложенные папки с сырыми миграциями. Сегодня это 14 бумаг. Новая бумага попадёт под охрану сама, править сторожа не надо. Пропускаются скрытые файлы и временные слепки tmp.sql, иначе дубль канона считался бы второй бумагой и удваивал долг. Журнал схемы помнит прошлое, и первая версия правила покраснела на моей же честной записи v9.71. Глушить сторожа не стал: правило простое и проверяемое — кто называет несуществующее имя, тот пишет НЕ СУЩЕСТВУЕТ тем же куском текста. В SQL кусок это подряд идущие комментарии, в разметке абзац, причём строка таблицы стоит сама за себя. Запись v9.71 переписана по этому правилу. Имена кусков кода теперь ищутся не только в app/app, но и по карте классов Composer. Без неё QueryException из фреймворка попадал в наш долг, то есть сторож врал про чужой класс. Перечень известного долга пересчитан по всем бумагам: девять имён вместо трёх, у каждого сказано где живёт и почему не поправлено. Показан красным пятью ножами: schema_modules, журнал схемы, сырая миграция, schema.sql и отдельно снятие пометки с моей честной строки. Отдельно назвал границу мерки: ложь ВНУТРИ честного куска проходит зелёным, и это выбрано сознательно. Полный прогон: 5011 проверок, красных 0. Число не изменилось — проверок по-прежнему две, они просто читают больше. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>