Skip to content

Replace Duck.ai onboarding experiment with a feature toggle#8938

Open
lmac012 wants to merge 7 commits into
developfrom
feature/lukasz/duck-ai-onboarding-experiment-cleanup
Open

Replace Duck.ai onboarding experiment with a feature toggle#8938
lmac012 wants to merge 7 commits into
developfrom
feature/lukasz/duck-ai-onboarding-experiment-cleanup

Conversation

@lmac012

@lmac012 lmac012 commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Task/Issue URL: https://app.asana.com/1/137249556945/project/1205648422731273/task/1215861422445747?focus=true
Tech Design URL (if applicable):

Description

The Duck.ai onboarding experiment (onboardingDuckAiExperimentMay26) has concluded and the winning variant (TREATMENT_WITH_SEARCH_DEFAULT) is being promoted to a permanent feature. This PR removes the experiment scaffolding and replaces it with a plain duckAiOnboarding feature toggle (default FALSE). When the toggle is enabled, the input screen preview is always shown with search as the default (matching TREATMENT_WITH_SEARCH_DEFAULT).

Steps to test this PR

Duck.ai onboarding disabled (default)

  • With the extendedOnboarding.duckAiOnboarding toggle off, run a fresh-install onboarding flow.
  • Verify the toggle preview onboarding step is not visible.

Duck.ai onboarding enabled

  • Enable extendedOnboarding.duckAiOnboarding, and ensure Duck.ai is enabled and androidBrowserConfig.singleTabFireDialog is enabled.
  • Verify the toggle preview onboarding step is visible and duck.ai onboarding can be accessed.

No UI changes


Note

Medium Risk
Touches first-run onboarding and Duck Chat native-input behavior for users who were on the old experiment cohorts; rollout now depends on the new toggle and prerequisites instead of experiment enrollment.

Overview
Removes the May 2026 Duck.ai onboarding experiment (onboardingDuckAiExperimentMay26), including enrollment/cohort logic, experiment metrics pixels, and the hook that suppressed the native unified input for enrolled users.

New gating: DuckAiOnboardingAvailability checks Duck Chat enabled, singleTabFireDialog, and the new extendedOnboarding.duckAiOnboarding toggle (default off). Welcome/brand-design onboarding and NewUserOnboardingPlanProvider use this instead of enroll(); when enabled, the input-screen preview always uses search as default (winning treatment behavior).

Cleanup: Deletes DuckAiOnboardingExperimentManager, DuckAiOnboardingExperimentMetrics, OnboardingExperimentNativeInputFieldSuppressor, and the NativeInputFieldSuppressor plugin API; RealDuckChat no longer applies suppressors when caching native-input config. CTA/browser: Removes experiment metric calls from CtaViewModel and stops calling onDuckAiFireButtonCtaPressed() when the Duck AI fire-button CTA is shown (early return unchanged). Tests updated accordingly.

Reviewed by Cursor Bugbot for commit bca8125. Bugbot is set up for automated code reviews on this repo. Configure here.

lmac012 and others added 6 commits June 19, 2026 15:28
The Duck.ai onboarding experiment has concluded and experiment-specific
metrics instrumentation is no longer needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduces the permanent feature toggle (default FALSE) and the
availability interface that will replace the experiment manager.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…bility

Replaces experiment enrollment logic with a plain feature toggle check
throughout WelcomePageViewModel, BrandDesignUpdatePageViewModel, and
NewUserOnboardingPlanProvider. Behavior matches the former
TREATMENT_WITH_SEARCH_DEFAULT variant (isSearchDefault = true).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This suppressor kept the legacy omnibar for experiment enrollees.
Now that enrollment is replaced by a plain feature toggle, it is no
longer needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Deletes the experiment manager and its test, and removes the now-unused
onboardingDuckAiExperimentMay26 toggle and DuckAiOnboardingExperimentCohort
enum from ExtendedOnboardingFeatureToggles. Also fixes test mocks for
the Boolean suspend function to avoid unboxing NPE.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
isDuckAiOnboardingEnabled() now also requires DuckChat.isEnabled() and
AndroidBrowserConfigFeature.singleTabFireDialog().isEnabled(), matching
the gate that existed in the old experiment manager.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@lmac012 lmac012 requested a review from LukasPaczos June 19, 2026 13:50
@lmac012 lmac012 marked this pull request as ready for review June 19, 2026 13:50
This duckchat-api plugin point was added only to suppress the native
input field for Duck.ai onboarding experiment enrollees. With the
experiment and its suppressor removed, the API has no implementers, so
RealDuckChat now reads the nativeInputField toggle directly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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