# Регенерация larastan baseline для поглощения дрейфа lead-region (v2)

После вливания телефон-каскада lead-region и добавления новых тестов в анализ
larastan (level 5, `checkModelProperties: true`) появились новые сообщения,
которых нет в зафиксированном `phpstan-baseline.neon`. Из-за этого pre-commit
larastan падает, и каждый коммит приходится прогонять с `LEFTHOOK_EXCLUDE=larastan`.
Спека описывает приведение baseline в соответствие текущему состоянию кода.

## Цель

Привести `app/phpstan-baseline.neon` в соответствие текущему дереву кода так, чтобы
прогон `composer stan` завершался без новых ошибок (все известные сообщения —
включая дрейф lead-region и шум типов Pest — зафиксированы в baseline). Результат —
чистый pre-commit larastan без обходного `LEFTHOOK_EXCLUDE`.

## D1. Контракт регенерации baseline {#D1}

Baseline регенерируется штатной командой larastan `--generate-baseline`, которая
перезаписывает `phpstan-baseline.neon` полным набором текущих сообщений анализа.
Конфиг `app/phpstan.neon` уже подключает этот файл (`includes: phpstan-baseline.neon`)
и включает `checkModelProperties: true` на уровне 5. Регенерация не меняет код
приложения и не трогает прод-логику — только перечень принятых (baselined) сообщений.
Природа поглощаемого дрейфа: новые свойства моделей lead-region
(`SupplierLead`, `Project`), мёртвые сравнения и шум вывода типов Pest в тестах —
всё это не runtime-дефекты, а сообщения статического анализатора.

## D2. Критерий приёмки {#D2}

После регенерации повторный прогон `composer stan` завершается успешно (0 новых
сообщений вне baseline). Это означает, что pre-commit-проверка larastan проходит
без исключений, и обходной `LEFTHOOK_EXCLUDE=larastan` больше не требуется.

```verified-context-json
[
  {
    "id": "phpstan-config",
    "kind": "EXTRACTED",
    "ref": "app/phpstan.neon",
    "anchor": "checkModelProperties: true"
  },
  {
    "id": "baseline-file",
    "kind": "EXTRACTED",
    "ref": "app/phpstan-baseline.neon",
    "anchor": "ignoreErrors:"
  }
]
```
