[FF] in_instance_self_managed_trial_activation rollout - kill switch for in-instance SM trial form
## Summary This issue tracks the rollout of the `in_instance_self_managed_trial_activation` feature flag in `gitlab-org/gitlab`. This flag is a **kill switch** added via patch release in response to DAP credit abuse on the in-product self-managed trial flow (CustomersDot work item gitlab-org/customers-gitlab-com#16943, related to gitlab-org/gitlab#596877). It defaults to `false`, which reverts the "Start free trial" CTAs on SM instances to the legacy `about.gitlab.com/free-trial/?hosted=self-managed` (Marketo) form. - **When disabled (default):** CTAs link to the about.gitlab.com marketing-site trial form. - **When enabled:** CTAs link to the in-product self-managed trial form introduced in !219026 / !223200. The original rollout of the in-product form is tracked in #585747; that flag has been removed. This new flag re-introduces the toggle so the in-product flow can be turned off on already-released SM instances without a code change. ## Owners - Most appropriate Slack channel to reach out to: `#g_activation` - Best individual(s) to reach out to: @davidhampgonsalves ## Expectations ### What are we expecting to happen? On SM instances where this flag is disabled (default), the admin dashboard subscription summary and the projects-dashboard blank-state trial CTA will link out to the about.gitlab.com Marketo trial form instead of the in-product form. No other behavior should change. Once the CustomersDot-side abuse mitigation (gitlab-org/customers-gitlab-com#16943) is in place and verified, the flag will be flipped on (per-instance or globally) to restore the in-product experience. ### What can go wrong and how would we detect it? - The in-product trial activation path (`Trials::SelfManaged::UltimatesController#create`) remains in the codebase; only the CTAs are rerouted. If a user reaches the in-product form directly (e.g. bookmarked URL) while the flag is off, they can still attempt trial activation and hit a server-side error. Detection: SM instance logs / `#g_activation` Slack channel. - Link tracking events (`click_start_trial_cta_sm_admin_dashboard`, `click_start_trial_cta_sm_project_dashboard`) continue to fire on both code paths; any regression will surface in Snowplow dashboards. ## Rollout Steps Note: This is an `ops`-type flag intended as a kill switch. The default (`false`) is the safe, post-abuse-mitigation state. "Rollout" here means flipping the flag **on** (restoring the in-product form) once CDot abuse mitigation is verified. ### Rollout on non-production environments - Verify the MR with the feature flag is merged to `master` and has been deployed to non-production environments with `/chatops run auto_deploy status <merge-commit-of-your-feature>` - [ ] Enable the feature on non-production with `/chatops run feature set in_instance_self_managed_trial_activation true --dev --pre --staging --staging-ref` - [ ] Verify the in-product trial form and CTAs work as expected on `staging-canary`. - [ ] If the flag causes end-to-end test failures, disable it on staging to unblock deploys. ### Specific rollout on production - [ ] Ensure CDot-side abuse mitigation (gitlab-org/customers-gitlab-com#16943) is deployed and verified before re-enabling on production. - [ ] Because this flag is `:instance`-scoped and consumed on SM instances, per-actor targeting is not applicable. Enable globally once ready: - `/chatops run feature set in_instance_self_managed_trial_activation true` ### Preparation before global rollout - [ ] Set a milestone to this rollout issue to signal for enabling and removing the feature flag when it is stable. - [ ] Notify `#support_gitlab-com` and `#g_activation` before flipping on. ### Global rollout on production - [ ] Enable globally: `/chatops run feature set in_instance_self_managed_trial_activation true` - [ ] Monitor trial-creation success rates and `#g_activation` for ~1 day before proceeding to flag removal. ### Release the feature - [ ] Create a merge request to remove the `in_instance_self_managed_trial_activation` feature flag once the CDot abuse mitigation is verified as a long-term fix. The MR should: - Remove all references to the feature flag from the codebase. - Remove the YAML definition from the repository. - [ ] Ensure the cleanup MR has been included in the release package. - [ ] Close the related feature issue(s) to indicate the feature will be released in the current milestone. - [ ] Once the cleanup MR has been deployed to production, clean up the flag from all environments: `/chatops run feature delete in_instance_self_managed_trial_activation --dev --pre --staging --staging-ref --production` - [ ] Close this rollout issue. ## Rollback Steps "Rollback" here means returning to the default (kill-switch engaged, about.gitlab.com CTAs). - [ ] Disable on production: `/chatops run feature set in_instance_self_managed_trial_activation false` - [ ] Disable on non-production: `/chatops run feature set in_instance_self_managed_trial_activation false --dev --pre --staging --staging-ref` - [ ] Delete from all environments: `/chatops run feature delete in_instance_self_managed_trial_activation --dev --pre --staging --staging-ref --production`
issue