[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