Commit Graph

3 Commits

Author SHA1 Message Date
Дмитрий 2ea204e3b3 docs схема: сторож видит имя по пути, а не по окончанию
Прежде имя опознавалось только по окончанию, и сторож был слеп к
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>
2026-08-06 08:42:18 +03:00
Дмитрий 82503073cc docs схема: сторож стережёт все бумаги про базу, а не одну
Прежняя версия читала один 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>
2026-08-06 07:48:47 +03:00
Дмитрий a8481b68c0 docs схема: седьмое место лжи и живой сторож канона
Седьмое место — шапка столбца sso_provider у таблицы админов. Там стояло
голое обещание «Логика guard'ов — в SaasAdminAuthService», без единой
оговорки. Класса нет. Место опаснее прочих шести: речь об аварийном
входе, который нарочно обходит единый вход. Ни SSO, ни обязательный
второй ключ, ни ограничение аварийного входа кодом не проверяются.

Сторож заведён отдельной новой проверкой портала:
app/tests/Unit/Schema/KanonNeObeshchaetOhrannikaTest.php. Общих файлов
не трогает, базы не требует, ходит сам при каждом полном прогоне.
Краснеет, когда канон называет поимённо кусок кода портала, которого
нет в проекте, а рядом не сказано, что его нет.

Перечень известного долга внутри проверки видимый, у каждой строки
сказано почему. Это не разрешение, а замер точным числом: нельзя ни
дописать упоминание разрешённому имени, ни оставить строку, когда долг
закрыли. На строках про запрет обработки перечень не действует вовсе.

Показан красным тремя ножами. Второй нож вскрыл дыру в самом стороже:
мерка «пометка в пределах восьми строк» давала ложное зелёное — новая
ложь укрывалась за честной пометкой соседнего абзаца через две строки
живого SQL. Правило переделано принципиально: пояснение засчитывается,
только если от имени до него идут одни пояснения.

Полный прогон: 5011 проверок, красных 0, ровно плюс две мои.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 07:08:02 +03:00