b6a15c5bbf
Ветка шла отдельно почти неделю и отставала на 227 записей, отставание росло
каждый день. Направление сведения — общая В ветку: перевод main владелец
отклонил, значит вливать в него нечего.
Девять столкновений, каждое разобрано по существу.
Журнал схемы: столкнулись НЕ три номера, как ожидалось, а ВСЕ - обе ветки
независимо заняли v8.96-v9.25 и v9.32 разным содержимым. Обе стороны
настоящие, выбросить нельзя ни одну, поэтому перенумерована ветка, а не
общая: 31 запись уехала в свободный диапазон v9.33-v9.63. Содержание не
тронуто - доказано сверкой с исходной версией через git, посимвольно.
Соответствие старых номеров новым вписано в сам журнал, чтобы старые
документы ветки оставались читаемыми. Прежняя пометка про "запас v9.32"
заменена: запас не спас, v9.32 в общей ветке тоже был занят.
Сборка тестовой базы: взята версия общей ветки. Она позже и доказана
замером - двумя шагами вместо migrate:fresh, который спотыкался на
типе-призраке и оставлял схему неполной.
Список слов орфографии сведён объединением: 2106 наших + 2169 общих дали
2173, ни одно слово ни с одной стороны не потеряно - проверено сравнением.
Расписание работ, маршруты экранов и админский слой: обе стороны добавляли
своё в одно место, оставлены обе.
Витрина рекламных каналов: каждая ветка сделала настоящим СВОЙ канал -
ветка СМС свой, общая Телеграм. После сведения настоящих три, заглушки
исключают все три. Сторож витрины принят вырезанием: убрал СМС из списка
настоящих - покраснел, вернул - позеленел.
СТОЛКНОВЕНИЕ ИМЁН, созданное самим сведением. Оба набора тестов объявляли
глобального помощника pollCampaign - свой в СМС (один довод) и свой в
Телеграме (от двух до четырёх). Две функции с одним именем в одном языке
не живут: пока ветки шли врозь, этого не видел никто. Помощник СМС
переименован в pollSmsCampaign. Проверено, что других таких пар в PHP-тестах
нет ни одной.
Статанализ ветки доведён с 674 замечаний до НУЛЯ, уровень не понижен и в
baseline не заметено ничего.
- 616 из 674 - ложный класс Pest, закрытый тремя узкими правилами; правила
перенесены из рабочей ветки, где владелец их уже принял;
- остальные 42 - свои, в новом коде ветки, и починены по существу:
задвоенный ключ массива в трёх тестах (след копирования - комментарий
оторвался от своей строки), врущие описания двух помощников (PHP сам
делает из ключа-номера число), сужение типа возврата, прятавшее от
анализатора свойства подставного отправителя, лишний знак вопроса и
четыре бесполезных перенумерования списка.
- Приёмка вырезанием: подложил несуществующий метод - анализатор назвал его
поимённо и покраснел; убрал - ноль.
Шапки 59 моделей обновлены пересборкой подсказчика и ОСТАВЛЕНЫ намеренно
(правка только в комментариях, проверено): без них анализатор не связывает
модель с описанием и не знает, что дата - это дата, а не строка. Откатил их
сперва по привычке - получил 15 замечаний про даты, вернул - ноль.
Орфография: 15 файлов проверено, 0 замечаний (смотрел и на число
проверенных файлов, не только на число ошибок). Добавлены три слова из имён
миграций ветки.
Заодно: алиас ruflo-core в списке имён сторожа реестра - плагин описан в
реестре групповым именем, сторож видел только машинное. Мостится ТОЛЬКО имя;
🔴 содержательный долг остаётся - реестр до сих пор зовёт ruflo изолированным,
хотя его разморозили 28.07. Это чинить отдельно, через claude-md-management.
Проверено: три фронтовых сторожа рекламы 18/18, статанализ 0, разметка 0,
орфография 0, синтаксис PHP чист. Полный прогон тестов ветки - отдельным
шагом, он ещё ни разу не делался.
NB: в журнале схемы есть задвоенные номера v8.26 (пять раз) и v8.64 (два) -
это досталось по наследству из общей ветки, ровно столько же их там и было.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
65 lines
4.7 KiB
Plaintext
65 lines
4.7 KiB
Plaintext
includes:
|
|
- vendor/larastan/larastan/extension.neon
|
|
- phpstan-baseline.neon
|
|
|
|
parameters:
|
|
# Sprint 2 Phase A — O-perf-07: result cache в локальной директории
|
|
# `.phpstan-cache/` (gitignored). Ускоряет инкрементальные pre-commit
|
|
# прогоны: при правке одного файла переанализ только зависящих, не
|
|
# всего графа классов.
|
|
tmpDir: .phpstan-cache
|
|
paths:
|
|
- app
|
|
- bootstrap
|
|
- config
|
|
- database
|
|
- routes
|
|
- tests
|
|
scanFiles:
|
|
- _ide_helper_models.php
|
|
level: 5
|
|
checkOctaneCompatibility: true
|
|
checkModelProperties: true
|
|
# Не краснеть из-за записей списка исключений, которым больше нечего гасить.
|
|
#
|
|
# Причина — 01.08.2026. `_ide_helper_models.php` собирается НА МЕСТЕ, в git его нет,
|
|
# и на разных машинах он получается разным: на этой он знал 52 модели, после
|
|
# пересборки — 79. От этого записи baseline про свойства моделей то совпадают,
|
|
# то нет: свежий подсказчик узнал про saas_transactions.credit_target, запись
|
|
# про «нет такого свойства» перестала совпадать — и статанализ покраснел, хотя
|
|
# в коде не изменилось ничего. Тот же механизм, что вчера с привязкой к числу
|
|
# повторов: сторож краснеет не от кода, а от своего же списка.
|
|
#
|
|
# Настоящие замечания это НЕ гасит — проверено вырезанием: подложенные поломки
|
|
# ловятся по-прежнему. Гасится ровно жалоба «запись не пригодилась».
|
|
reportUnmatchedIgnoredErrors: false
|
|
# Ложный класс Pest — 01.08.2026. Pest подставляет в замыкания тестов наш
|
|
# Tests\TestCase (tests/Pest.php: `pest()->extend(TestCase::class)->in(...)`),
|
|
# но анализатор считает `$this` внутри `it()`/`test()` за Pest\PendingCalls\TestCall
|
|
# и не находит ни методов Laravel-теста (actingAs, getJson, postJson), ни свойств,
|
|
# заданных в beforeEach. Доказательство ложности прямое: эти же тесты проходят —
|
|
# не будь метода, PHP упал бы. Замер 01.08: 722 из 758 замечаний ветки — этот класс.
|
|
#
|
|
# Upstream-расширения для этого Pest не поставляет: в vendor/pestphp/pest лежит
|
|
# только phpstan-pest-extension.neon про цепочки expect(), к `$this` он не относится.
|
|
#
|
|
# Правило узкое НАМЕРЕННО: ровно две формулировки, ровно про TestCall, ровно в tests/.
|
|
# Всё прочее внутри тестов анализатор по-прежнему проверяет — задвоенные ключи
|
|
# массива и несуществующие свойства подставных объектов ловятся, проверено вырезанием.
|
|
#
|
|
# Раньше этот класс лежал в phpstan-baseline.neon — 672 записи из 936, и каждая
|
|
# с привязкой к числу повторов (`count:`). От любого нового теста счётчик разъезжался
|
|
# и статанализ краснел на ровном месте. Записи убраны, заменены этим правилом.
|
|
ignoreErrors:
|
|
-
|
|
message: '#^Call to an undefined method Pest\\PendingCalls\\TestCall(\|Pest\\Support\\HigherOrderTapProxy)?\:\:#'
|
|
path: tests/*
|
|
-
|
|
message: '#^Access to an undefined property Pest\\PendingCalls\\TestCall(\|Pest\\Support\\HigherOrderTapProxy)?\:\:#'
|
|
path: tests/*
|
|
# Третья одёжка того же класса: `$this` передают в помощник, который по сигнатуре
|
|
# ждёт Tests\TestCase. Ждущий тип назван явно — правило не шире двух предыдущих.
|
|
-
|
|
message: '#^Parameter \#\d+ \$\w+ of function \w+ expects Tests\\TestCase, Pest\\PendingCalls\\TestCall given\.$#'
|
|
path: tests/*
|