Тема
Фаза 0 — Целевая платформа: Laravel 13, PHP, Filament
Статус: решение принято (июль 2026). На чём строить ядро CMS, которое проживёт годы в managed-парке. Влияет на все контракты фазы 0 (минимальные версии зависимостей, синтаксис, политику апгрейда парка). Опирается на факты релиз-цикла, а не на память.
Короткий ответ
Laravel 13 + PHP 8.4 + Filament v5 (≥ 5.6.6). Стартовать новое ядро в 2026 на Laravel 12 — значит родиться на версии, у которой багфиксы кончаются через месяц (август 2026). Для продукта с многолетним жизненным циклом это анти-паттерн: заплатить миграцию сразу же после старта.
Факты релиз-цикла (на июль 2026)
| Факт | Значение | Источник |
|---|---|---|
| Laravel 13 вышел | 17 марта 2026 | laravel.com/docs/13.x |
| Апгрейд 12 → 13 | zero breaking changes, ~10 минут | release notes |
| Минимум PHP для L13 | PHP 8.3 (рекомендуется 8.4) | release notes |
| Laravel 12 — багфиксы до | 13 августа 2026 | endoflife.date |
| Laravel 12 — секьюрити до | 24 февраля 2027 | endoflife.date |
| Laravel 13 — багфиксы до | ~Q3 2027 | политика 18 мес |
| Laravel 13 — секьюрити до | ~Q1 2028 | политика 24 мес |
| Filament v5 поддержка L13 | с v5.6.6 (illuminate/contracts ^13.0); v5.0–5.3.5 — нет | packagist |
| Ритм мажоров Laravel | 1 мажор в год, ~Q1; миноры без breaking | политика |
Ключевое, что меняет решение: Laravel убрал боль мажорных апгрейдов. С L9→L10→L11→ L12→L13 апгрейды стали near-zero-breaking (10–30 минут). Историческая осторожность «сидим на предыдущем мажоре, пока экосистема догонит» больше не окупается — догонять почти нечего.
Почему 13, а не 12
1. Стартовать на уходящей версии — заведомый долг. Ядро в фазе 1 родится летом–осенью 2026. Laravel 12 к этому моменту уже вне окна багфиксов. Родить продукт на нём = запланировать миграцию на первый же квартал жизни. Метрика README «upgrade-тесты с прошлого мажора зелёные» начинает работать с правильного мажора.
2. Апгрейд 12→13 бесплатный, значит риск «13 сырая» мнимый. Zero-breaking означает, что даже если бы мы стартовали на 12, переход занял бы минуты. Но раз он бесплатный — нет причины не взять 13 сразу и не получить лишний год поддержки.
3. Экосистема догнала (это была единственная реальная причина ждать). Стек студии на L13 работает сегодня:
- Filament v5 ≥ 5.6.6 — L13-совместим (ранние 5.x — нет, поэтому пин по нижней границе);
- spatie/* — весь набор (путь C) композер-native и следует за мажорами Laravel быстро;
- Lunar, Livewire 4, laravel/pennant, laravel/scout — на L13.
4. Дольше окно поддержки без апгрейда. L13: багфиксы ~Q3 2027, секьюрити ~Q1 2028. На старте это +год спокойствия для всего парка против L12.
Минимальная версия PHP
Требуем PHP 8.4 (при формальном минимуме L13 = 8.3).
- PHP 8.4 (релиз ноябрь 2024) — активная поддержка до конца 2026, security до конца 2028;
- property hooks, asymmetric visibility, новый
#[\Override]— чище доменная модель ядра; - образы Docker студии (spec docker) стандартизируем на 8.4 — единая матрица для всего парка проще в сопровождении одним разработчиком.
Формально ядро объявит "php": "^8.3" (чтобы не отсекать клиентов на 8.3), но CI-матрица и эталонный образ — 8.4. PostgreSQL 16+ (JSONB+GIN для типов контента — Q5).
Пины версий в контрактах (следствие для фазы 0)
Эталонные нижние границы, которые фиксируются в composer.json ядра и в контракте модуля:
jsonc
"require": {
"php": "^8.3",
"laravel/framework": "^13.0",
"filament/filament": "^5.6.6", // нижняя граница L13-совместимости — НЕ ^5.0
"spatie/laravel-medialibrary": "^11",
"spatie/laravel-permission": "^7.2",
"laravel/sanctum": "^4",
"laravel/pennant": "^1"
}Грабли, зафиксированные фактом:
filament/filament: ^5.0сломает установку на L13 (composer подтянет 5.0–5.3.5 безilluminate/contracts ^13.0). Нижняя граница — строго^5.6.6. Это ровно тот класс «непонятных ошибок при установке», который ловит preflight из жизненного цикла модулей.
Политика версий Laravel для парка
Продукт живёт дольше одного мажора Laravel — нужна декларируемая политика, а не решение ad-hoc на каждый март.
- Ядро следует за мажором Laravel в течение одного квартала после релиза. Мажор выходит ~Q1 → ядро апгрейдится к Q2, катит парку волной (stable-канал) через центр обновлений.
- Пропуск мажора не копим. Zero-breaking делает ежегодный апгрейд дешёвым; пропущенные мажоры превращают дешёвый шаг в дорогой прыжок через два.
- Один major Laravel = один minor/major ядра с записью в CHANGELOG и upgrade-тестами в CI (условие метрики «зелёные upgrade-тесты»).
- PHP-минимум ядра поднимаем осознанно, отдельным мажором ядра (breaking для клиентов на старом PHP), не тихо вместе с Laravel.
Риски и смягчение
| Риск | Смягчение |
|---|---|
| L13 «слишком свежая», редкий пакет отстаёт | Апгрейд 12↔13 zero-breaking → откат на 12 дёшев, если что-то критичное не готово; но весь наш стек уже на 13 |
| Filament подтянет несовместимую 5.x | Жёсткий пин ^5.6.6; preflight ловит конфликт до установки |
| Ежегодный апгрейд парка — нагрузка | Волны + канареечный гейт автоматизируют; на 1–2 сайтах — CLI; окупается флит-дашбордом (фаза 4) |
| PHP 8.4 в образе, клиент на shared-хостинге 8.3 | Формальный минимум ^8.3; managed-парк на своих Docker-образах 8.4 |
Итог
Строить на Laravel 13 / PHP 8.4 / Filament v5.6.6+, объявить ^8.3/^13.0 в контрактах, пинить Filament по нижней L13-совместимой границе и декларировать политику «следуем за мажором Laravel в течение квартала». Это единственный выбор, не создающий миграционного долга в первый же месяц жизни ядра и дающий максимальное окно поддержки для парка.
Связи
- Выбор пути C — какие пакеты берём готовыми (все на L13).
- Центр обновлений — как парк следует за версиями волнами.
- Жизненный цикл модулей — preflight ловит пины версий.
- Контракт модуля — где эти пины закрепляются.