[FF] rapid_diffs_default_on_mr_show -- Rapid Diffs as the default on the MR Changes tab
Summary
Roll out Rapid Diffs as the default on the merge request Changes tab currently behind the rapid_diffs_default_on_mr_show feature flag.
- DRI: @slashmanov
- Team Slack channel:
#g_code-review
Note
Process and guidance live in the docs — this issue is just the commands and a place to track the rollout. "Rolling out" means incrementally enabling the flag on GitLab.com to validate stability — it is not the same as releasing the feature, which happens when the flag is removed. Feature flag controls · Feature flag lifecycle
Introduced by !247629 (merged).
With the flag enabled, the Changes tab renders Rapid Diffs without opt-in; the in-MR toggle becomes an opt-out that sets rapid_diffs_enabled=false. With the flag disabled, today's opt-in behaviour is unchanged. This flag sits behind the existing rapid_diffs_on_mr_show beta flag, so it only takes effect where Rapid Diffs is already available.
What could go wrong?
Blast radius is every merge request Changes tab view on GitLab.com, so this is best rolled out by actor percentage and watched closely.
- Rapid Diffs regressions that were previously only seen by opted-in users now hit everyone. Users can escape via the toggle (opt-out cookie) or the
?rapid_diffs_disabled=trueURL parameter. - The route constraint evaluates the flag without an actor, while the controller re-checks it with
current_user. During a percentage-of-actors rollout the two can disagree; the controller redirects withrapid_diffs_disabled=trueso this degrades to legacy diffs rather than a redirect loop. Watch for a spike in redirects to/diffs?rapid_diffs_disabled=true. - Watch the
Projects::MergeRequestsControllererror rate and latency on dashboards.gitlab.net, plus Sentry forrapid_diffsfrontend errors.
Rollout
Run all production /chatops in #production and cross-post the results to #g_code-review. Background: incremental rollout process, feature actors.
Non-production
/chatops gitlab run feature set rapid_diffs_default_on_mr_show 50 --actors --dev --pre --staging --staging-ref
/chatops gitlab run feature set rapid_diffs_default_on_mr_show true --dev --pre --staging --staging-refProduction — dogfood on the GitLab organisation first:
/chatops gitlab run feature set --group=gitlab-org,gitlab-com rapid_diffs_default_on_mr_show trueThen percentage rollout (wait ≥15 min between steps, watch dashboards):
/chatops gitlab run feature set rapid_diffs_default_on_mr_show 10 --actors
/chatops gitlab run feature set rapid_diffs_default_on_mr_show 25 --actors
/chatops gitlab run feature set rapid_diffs_default_on_mr_show 50 --actors
/chatops gitlab run feature set rapid_diffs_default_on_mr_show 100 --actors- Enabled on
--dev --pre --staging --staging-ref - Enabled for
gitlab-org/gitlab-com - 10% of actors
- 25% of actors
- 50% of actors
- 100% of actors
Before global rollout
Confirm the relevant gotchas before going to 100% — see enabling a feature for GitLab.com:
- Docs + version history updated
- Breaking changes announced, if any
- Change management issue opened, if required
- Merge request spec suite migrated to Rapid Diffs so the suite no longer relies on the global
stub_feature_flags(rapid_diffs_default_on_mr_show: false)guard
Cleanup
Remove the flag once deemed stable — see cleaning up. Removing this flag means making Rapid Diffs the unconditional default in the route constraint and Projects::MergeRequestsController#rapid_diffs_page_enabled?, and dropping the global spec stub.
/chatops gitlab run release check <merge-request-url> <milestone>
/chatops gitlab run feature delete rapid_diffs_default_on_mr_show --dev --pre --staging --staging-ref --production