Перейти к содержимому

Управление фича-флагами

Панель управления фича-флагами для инженеров, дежурных и продакт-менеджеров. Она показывает, какие флаги существуют, где и на какую долю пользователей включена функциональность, кто отвечает за флаг и когда его пора удалить из кода.

Без панели флаги живут в переменных окружения, конфигах, комментариях в коде и, возможно, в стороннем сервисе, и каноничного состояния нет. Чтобы открыть функцию десяти процентам пользователей, нужен деплой или задача платформенной команде. На вопрос «эта функция включена в ЕС?» три инженера дают три ответа. После запусков копятся забытые флаги и мёртвые ветки кода, а во время инцидента нет быстрого способа выключить флаг сразу везде.

  • Показывает все флаги по окружениям. Для каждого флага видно состояние и долю раскатки в каждом окружении, владельца и дату последнего изменения.
  • Меняет раскатку без деплоя. Процент пользователей, сегменты и включение по окружению меняются в панели, приложение читает новое состояние.
  • Выключает флаг аварийно. Одно действие отключает флаг во всех окружениях; доступно только ролям с правом и попадает в журнал.
  • Находит устаревшие флаги. Флаги без изменений дольше заданного срока попадают в список на удаление с владельцем.
  • Отвечает продукту без инженеров. Продакт-менеджер видит, что где включено, в режиме только для чтения.
  • Готовый сервис часто лучше. LaunchDarkly, Unleash, Flagsmith или GrowthBook дают SDK, сегментацию, эксперименты и отказоустойчивую доставку. Для Laravel есть пакет Laravel Pennant. Если нужны только включение флага и процентная раскатка внутри одного приложения, Pennant с простым экраном управления в Filament закрывает задачу. Собственная панель оправдана, когда флагов много в разных сервисах, а готовый продукт не подходит по цене или требованиям к хранению данных.
  • Панель — это управление, а не вычисление. Приложение хранит состояние флагов и отдаёт его сервисам; решение «включено ли для этого пользователя» принимает сам сервис. Раздача состояния должна переживать недоступность панели: сервис кеширует последнее известное значение и имеет безопасное значение по умолчанию.
  • Окружение — обязательное измерение. Плоский глобальный список флагов вводит в заблуждение. Состояние хранится и показывается отдельно для каждого окружения.
  • Каждое изменение — в журнал. Переключение и смена процента пишутся с автором, временем, прежним и новым значением. Без этого разбор инцидента не ответит, когда именно поменялось поведение.
  • Права различаются по окружениям. Весь коллектив меняет флаги в разработке и на стейдже, продакшен доступен старшим инженерам и дежурным. Ограничение действует на сервере, скрытая кнопка его не заменяет.
  • Удаление флага — задача в коде. Панель находит устаревшие флаги, но убрать ветку из кода может только разработчик. Поэтому у флага есть владелец и срок жизни, а список на удаление видит тимлид.
  • Импорт существующих флагов. Текущие флаги загружают из выгрузки стороннего сервиса, YAML или JSON, а не заводят заново вручную.

Промпты рассчитаны на AI-агента (Claude Code, Cursor и аналоги) в Laravel-проекте с установленным Filament 4.x. Отправляйте их по одному и проверяйте результат перед следующим шагом.

Создай модели и миграции для фича-флагов: Flag (ключ, описание, владелец,
тип, планируемая дата удаления), Environment (название, признак
продакшена), FlagState (флаг, окружение, включён, процент раскатки,
сегменты, время изменения), FlagChange (флаг, окружение, поле, старое
и новое значение, автор, время, причина). Пара флаг и окружение
уникальна. Добавь фабрики и импорт флагов из JSON или YAML.
Сгенерируй Filament-ресурс для Flag. В таблице покажи ключ, владельца,
состояние в каждом окружении компактными значками и дату последнего
изменения; добавь фильтры по окружению, владельцу и «Устаревшие».
В карточке выведи состояния по окружениям с правкой процента раскатки
и журнал FlagChange через relation manager.
Добавь действие «Выключить везде» с подтверждением и обязательной
причиной: оно выключает флаг во всех окружениях одной транзакцией
и пишет изменения в журнал. Любое изменение состояния флага через панель
тоже пиши в FlagChange с прежним и новым значением.

Проверьте, что после аварийного отключения в журнале есть запись по каждому окружению с автором и причиной.

4. Отдача состояния сервисам и устаревшие флаги

Заголовок раздела «4. Отдача состояния сервисам и устаревшие флаги»
Сделай защищённый токеном эндпоинт только для чтения, который отдаёт
состояние флагов окружения с версией и поддерживает кеширование
по ETag. Сделай задачу по расписанию, которая помечает флаги
без изменений дольше срока из конфига (по умолчанию 30 дней)
и уведомляет владельца.
Настрой роли: разработчик меняет флаги в окружениях разработки и стейджа,
старший инженер и дежурный — ещё и в продакшене, продакт-менеджер
видит всё только для чтения. Проверка прав выполняется на сервере
для каждого окружения. Добавь виджет с числом устаревших флагов
по владельцам.