Draft: feat: separate feature flags for SaaS and self-managed

Relates to issue #583821

Changes

This MR implements separate feature flags for Duo Agent Platform GA rollout on SaaS vs self-managed/dedicated instances.

New Feature Flag

  • ai_duo_agent_platform_ga_rollout_self_managed: Beta feature flag for self-managed instances (default: disabled)
  • Located in ee/config/feature_flags/beta/ai_duo_agent_platform_ga_rollout_self_managed.yml

Backend Updates (4 files)

ee/lib/gitlab/llm/utils/ai_features_catalogue.rb

  • Updated instance_should_observe_ga_dap? to check instance-specific flags
  • SaaS: ai_duo_agent_platform_ga_rollout
  • Self-managed: ai_duo_agent_platform_ga_rollout_self_managed

ee/app/models/ee/namespace.rb

  • Updated duo_code_review_dap_available? with conditional logic
  • SaaS: checks ai_duo_agent_platform_ga_rollout → falls back to experiment_features_enabled
  • Self-managed: checks ai_duo_agent_platform_ga_rollout_self_managed → falls back to instance_level_ai_beta_features_enabled

ee/app/services/ai/duo_workflows/code_review/availability_validator.rb

  • Updated ga_rollout_enabled? with instance-type conditional logic
  • Updated experimental_features_enabled? to bypass beta check when self-managed GA flag is enabled

Frontend Controllers (3 files)

  • ee/app/controllers/explore/ai_catalog_controller.rb
  • ee/app/controllers/groups/duo_agents_platform_controller.rb
  • ee/app/controllers/projects/duo_agents_platform_controller.rb
  • All expose both ai_duo_agent_platform_ga_rollout and ai_duo_agent_platform_ga_rollout_self_managed to frontend

Test Coverage (3 spec files)

ee/spec/lib/gitlab/llm/utils/ai_features_catalogue_spec.rb

  • Tests verify SaaS uses ai_duo_agent_platform_ga_rollout
  • Tests verify self-managed uses ai_duo_agent_platform_ga_rollout_self_managed
  • Tests ensure no cross-contamination between instance types

ee/spec/models/ee/namespace_spec.rb

  • Comprehensive tests for duo_code_review_dap_available?
  • Coverage for both SaaS and self-managed scenarios
  • Tests verify correct flag usage and fallback behavior

ee/spec/services/ai/duo_workflows/code_review/availability_validator_spec.rb

  • Tests for GA rollout flag behavior on both instance types
  • Tests verify self-managed GA flag bypasses beta features check
  • Tests ensure instance-type specific flag usage

Key Benefits

  1. Independent Rollout: SaaS and self-managed can transition to GA on different schedules
  2. Clear Separation: Each instance type has dedicated feature flag
  3. Backward Compatible: Existing behavior preserved when flags disabled
  4. Well Tested: Comprehensive test coverage ensures correctness
  5. Consistent Pattern: Uses established ::Gitlab::Saas.feature_available? pattern
Edited by Jessie Young

Merge request reports

Loading