R-005 — Feature flags para visitantes anônimos

TLDR: Requisições sem usuário identificado (ex.: GET /api/v1/features/anonymous) recebem como enabled: true apenas as flags habilitadas globalmente no Flipper; flags habilitadas só para actors, grupos ou porcentagem de actors ficam enabled: false.

Given / When / Then

Dado um visitante não logado Quando o front chama GET /api/v1/features/:user_id com um user_id que não corresponde a nenhum usuário (por convenção, anonymous) Então FeatureFlag::FlipperAdapter#user_features retorna as flags em que Flipper.enabled?(feature) (sem actor) é verdadeiro, e a resposta lista todas as flags com enabled refletindo esse estado global

Tabela de decisão

Usuário Estado da flag no Flipper enabled
ausente habilitada globalmente (boolean gate) true
ausente habilitada só para actor/grupo/percentual false
ausente desabilitada false
presente qualquer Flipper.enabled?(feature, user)

Restrições

  • O endpoint não exige autenticação; um user_id inexistente é tratado igual a anonymous.
  • Para uma flag valer para visitantes anônimos (ex.: scheduling_suspension), ela precisa ser habilitada globalmente — habilitar por actor não tem efeito para quem não está logado.

Testes vinculados

  • spec/services/feature_flag/flipper_adapter_spec.rb
  • spec/requests/features_index_spec.rb