Управление фича-флагами
Что это за сервис
Заголовок раздела «Что это за сервис»Панель управления фича-флагами для инженеров, дежурных и продакт-менеджеров. Она показывает, какие флаги существуют, где и на какую долю пользователей включена функциональность, кто отвечает за флаг и когда его пора удалить из кода.
Без панели флаги живут в переменных окружения, конфигах, комментариях в коде и, возможно, в стороннем сервисе, и каноничного состояния нет. Чтобы открыть функцию десяти процентам пользователей, нужен деплой или задача платформенной команде. На вопрос «эта функция включена в ЕС?» три инженера дают три ответа. После запусков копятся забытые флаги и мёртвые ветки кода, а во время инцидента нет быстрого способа выключить флаг сразу везде.
Что он делает
Заголовок раздела «Что он делает»- Показывает все флаги по окружениям. Для каждого флага видно состояние и долю раскатки в каждом окружении, владельца и дату последнего изменения.
- Меняет раскатку без деплоя. Процент пользователей, сегменты и включение по окружению меняются в панели, приложение читает новое состояние.
- Выключает флаг аварийно. Одно действие отключает флаг во всех окружениях; доступно только ролям с правом и попадает в журнал.
- Находит устаревшие флаги. Флаги без изменений дольше заданного срока попадают в список на удаление с владельцем.
- Отвечает продукту без инженеров. Продакт-менеджер видит, что где включено, в режиме только для чтения.
Нюансы и особенности
Заголовок раздела «Нюансы и особенности»- Готовый сервис часто лучше. LaunchDarkly, Unleash, Flagsmith или GrowthBook дают SDK, сегментацию, эксперименты и отказоустойчивую доставку. Для Laravel есть пакет Laravel Pennant. Если нужны только включение флага и процентная раскатка внутри одного приложения, Pennant с простым экраном управления в Filament закрывает задачу. Собственная панель оправдана, когда флагов много в разных сервисах, а готовый продукт не подходит по цене или требованиям к хранению данных.
- Панель — это управление, а не вычисление. Приложение хранит состояние флагов и отдаёт его сервисам; решение «включено ли для этого пользователя» принимает сам сервис. Раздача состояния должна переживать недоступность панели: сервис кеширует последнее известное значение и имеет безопасное значение по умолчанию.
- Окружение — обязательное измерение. Плоский глобальный список флагов вводит в заблуждение. Состояние хранится и показывается отдельно для каждого окружения.
- Каждое изменение — в журнал. Переключение и смена процента пишутся с автором, временем, прежним и новым значением. Без этого разбор инцидента не ответит, когда именно поменялось поведение.
- Права различаются по окружениям. Весь коллектив меняет флаги в разработке и на стейдже, продакшен доступен старшим инженерам и дежурным. Ограничение действует на сервере, скрытая кнопка его не заменяет.
- Удаление флага — задача в коде. Панель находит устаревшие флаги, но убрать ветку из кода может только разработчик. Поэтому у флага есть владелец и срок жизни, а список на удаление видит тимлид.
- Импорт существующих флагов. Текущие флаги загружают из выгрузки стороннего сервиса, YAML или JSON, а не заводят заново вручную.
Как сгенерировать через ИИ-агентов
Заголовок раздела «Как сгенерировать через ИИ-агентов»Промпты рассчитаны на AI-агента (Claude Code, Cursor и аналоги) в Laravel-проекте с установленным Filament 4.x. Отправляйте их по одному и проверяйте результат перед следующим шагом.
1. Данные и модели
Заголовок раздела «1. Данные и модели»Создай модели и миграции для фича-флагов: Flag (ключ, описание, владелец,тип, планируемая дата удаления), Environment (название, признакпродакшена), FlagState (флаг, окружение, включён, процент раскатки,сегменты, время изменения), FlagChange (флаг, окружение, поле, староеи новое значение, автор, время, причина). Пара флаг и окружениеуникальна. Добавь фабрики и импорт флагов из JSON или YAML.2. Список флагов и карточка
Заголовок раздела «2. Список флагов и карточка»Сгенерируй Filament-ресурс для Flag. В таблице покажи ключ, владельца,состояние в каждом окружении компактными значками и дату последнегоизменения; добавь фильтры по окружению, владельцу и «Устаревшие».В карточке выведи состояния по окружениям с правкой процента раскаткии журнал FlagChange через relation manager.3. Аварийное отключение и журнал
Заголовок раздела «3. Аварийное отключение и журнал»Добавь действие «Выключить везде» с подтверждением и обязательнойпричиной: оно выключает флаг во всех окружениях одной транзакциейи пишет изменения в журнал. Любое изменение состояния флага через панельтоже пиши в FlagChange с прежним и новым значением.Проверьте, что после аварийного отключения в журнале есть запись по каждому окружению с автором и причиной.
4. Отдача состояния сервисам и устаревшие флаги
Заголовок раздела «4. Отдача состояния сервисам и устаревшие флаги»Сделай защищённый токеном эндпоинт только для чтения, который отдаётсостояние флагов окружения с версией и поддерживает кешированиепо ETag. Сделай задачу по расписанию, которая помечает флагибез изменений дольше срока из конфига (по умолчанию 30 дней)и уведомляет владельца.5. Роли
Заголовок раздела «5. Роли»Настрой роли: разработчик меняет флаги в окружениях разработки и стейджа,старший инженер и дежурный — ещё и в продакшене, продакт-менеджервидит всё только для чтения. Проверка прав выполняется на сервередля каждого окружения. Добавь виджет с числом устаревших флаговпо владельцам.Похожие сценарии
Заголовок раздела «Похожие сценарии»- Журнал деплоев по окружениям — что выкачено, в отличие от того, что включено.
- Готовность релиза: чек-лист гейтов — флаги как один из гейтов выпуска.
- Штаб управления инцидентом — где нужен аварийный выключатель.