Skip to content

Site Launch: ship semi-gated flow as default after gating experiment#111638

Draft
bogiii wants to merge 1 commit into
trunkfrom
update/site-launch-gating-ship-semi-gated-default
Draft

Site Launch: ship semi-gated flow as default after gating experiment#111638
bogiii wants to merge 1 commit into
trunkfrom
update/site-launch-gating-ship-semi-gated-default

Conversation

@bogiii

@bogiii bogiii commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Proposed Changes

  • Conclude the calypso_standardized_site_launch_gating_202603_v1 experiment by shipping the semi_gated_site_launch variant as the default behavior for everyone.
  • Add a shared useSiteLaunchGatingVariant() hook (client/lib/explat/site-launch-gating.ts) that currently hardcodes the semi-gated variant. It lives under calypso/lib/explat/ so the Dashboard's existing ESLint import exception covers it.
  • Replace the per-call-site useExperiment() calls with the shared hook in:
    • client/layout/masterbar/masterbar-launch-button.tsx
    • client/hosting/performance/site-performance.tsx
    • client/dashboard/sites/site-launch-button/use-site-launch.tsx
    • client/my-sites/customer-home/cards/launchpad/pre-launch.tsx
  • Keep all existing variant branches (ungated, control/immediate-launch) as scaffolding. They are unreachable while the hook hardcodes the semi-gated variant, but they compile, lint, and stay covered by tests, so the expected follow-up experiment only needs a one-line change in the hook.
  • Update the omnibar launch button test to mock the shared hook (instead of useExperiment) so the ungated scaffolding path remains tested.

Why are these changes being made?

  • The site launch gating experiment finished and the decision is to ship the semi-gated flow (redirect to /start/launch-site) as the default.
  • A follow-up experiment is expected soon, so instead of removing the experiment branching, the assignment source is centralized in one hook. Starting the next experiment means swapping the hardcoded return value for a useExperiment() call in a single file, with every launch surface (masterbar, performance page, dashboard launch button, launchpad) enrolled automatically.
  • Calling useExperiment() for a finished experiment would keep firing useless assignment requests; the hardcoded hook avoids that.

Testing Instructions

  • On an unlaunched simple site, click "Launch site" in the masterbar: you should be redirected to /start/launch-site (semi-gated flow) instead of launching directly.
  • Repeat from the Site Performance page launch CTA and from the My Home pre-launch launchpad's "Launch site" task.
  • In the new Dashboard, verify the site launch button (site settings visibility, performance callout, interim omnibar) links to the /start/launch-site flow.
  • Verify A4A dev sites still get their dedicated launch URL/modal.
  • yarn typecheck-client, yarn eslint on the touched files, and yarn test-client client/dashboard/app/interim-omnibar/test/omnibar-launch-button.test.tsx all pass.

Pre-merge Checklist

  • Has the general commit checklist been followed? (PCYsg-hS-p2)
  • Have you written new tests for your changes?
  • Have you tested the feature in Simple (P9HQHe-k8-p2), Atomic (P9HQHe-jW-p2), and self-hosted Jetpack sites (PCYsg-g6b-p2)?
  • Have you checked for TypeScript, React or other console errors?
  • For UI changes, have you tested the affected components in dark mode?
  • Have you tested accessibility for your changes? Ensure the feature remains usable with various user agents (e.g., browsers), interfaces (e.g., keyboard navigation), and assistive technologies (e.g., screen readers) (PCYsg-S3g-p2).
  • Have you used memoizing on expensive computations? More info in Memoizing with create-selector and Using memoizing selectors and Our Approach to Data
  • Have we added the "[Status] String Freeze" label as soon as any new strings were ready for translation (p4TIVU-5Jq-p2)?
    • For UI changes, have we tested the change in various languages (for example, ES, PT, FR, or DE)? The length of text and words vary significantly between languages.
  • For changes affecting Jetpack: Have we added the "[Status] Needs Privacy Updates" label if this pull request changes what data or activity we track or use (p4TIVU-aUh-p2)?

The calypso_standardized_site_launch_gating_202603_v1 experiment concluded
with semi_gated_site_launch as the winning variant. Replace the per-call-site
useExperiment() calls with a shared useSiteLaunchGatingVariant() hook that
hardcodes the semi-gated variant, keeping all existing variant branches as
scaffolding so the expected follow-up experiment only needs a one-line change
in the hook.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@matticbot

Copy link
Copy Markdown
Contributor

This PR modifies the release build for the following Calypso Apps:

For info about this notification, see here: PCYsg-OT6-p2

  • agents-manager
  • blaze-dashboard
  • help-center
  • notifications
  • odyssey-stats
  • wpcom-block-editor
  • wpcom-smart-dictation

To test WordPress.com changes, run install-plugin.sh $pluginSlug update/site-launch-gating-ship-semi-gated-default on your sandbox.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants