5.4 KiB
iOS: Chat-Path Onboarding — Tracker Blocking Demo
Asana: Ship Review task
Branch stack:demo-tracker-blocking-onboarding→ui-polish→chat-path-dialog-polish→sr-feedback→uti-flow
Due: 2026-05-15
PR Stack
| PR | Branch | Status |
|---|---|---|
| #4544 | demo-tracker-blocking-onboarding |
Open — review required |
| #4591 | demo-tracker-blocking-onboarding-ui-polish |
Approved |
| #4664 | demo-tracker-blocking-onboarding-chat-path-dialog-polish |
Approved |
| #4668 | demo-tracker-blocking-onboarding-uti-flow |
Open — no review yet |
| #4855 | demo-tracker-blocking-onboarding-sr-feedback |
Open — no review yet |
Required Changes
PR #4544
- Danger CI: no
@UserDefaultsWrapperremains - Mock refactor (alessandroboron):
MockDaxDialogsSettings.chatPathPhaseplain stored property - Sync restore exclusion — Alessandro May 7: "if the user selects 'Restore My Stuff' we disable Dax dialogs — we should not enrol those users in the experiment". Fixed: uncommented
guard case .introDialog(isReturningUser: false) = introSteps.firstininsertExperimentStepIfNeeded() return .treatmentAoverride removed fromresolveDuckAIQueryExperimentCohortID()- Pixels:
onboardingChatPathTryVisitSiteUnique/onboardingChatPathTrackersBlockedUniquedefined, no overlap with PR #4687
PR #4664
- Title scope fix (alessandroboron):
createSubsequentDialoguses correct title per chat-path vs standard path
PR #4668
- Dialog position, dismiss, UTI bar, completion path resolved
.unifiedToggleInputfeature flag has no hardcodeddefaultValue: .enabled
PR #4855
setBarsHidden(true/false, animated: false, customAnimationDuration: nil)replacessetNavigationBarHidden+setChatPathVisitSiteControlsLockedin show/dismiss/dismissHostingControllernewTabPageControllerCurrentTabIsLoadingadded toNewTabPageControllerDelegate; all(parent as? MainViewController)?casts gone fromNewTabPageViewController- Loading guard folded into outer
ifvia delegate method searchAndDuckAIOptionreverted to"Toggle between\nSearch and Duck.ai"inUserText.swift+ all 26 lproj files- DuckAIQuery toggle copy — Gary May 6: "change 'Duck.ai' to 'Ask AI' in the toggle screen in onboarding only, not the standard toggle". Fixed:
DuckAIQueryExperiment.toggleAILabel = "Ask AI"(usesNotLocalizedString)
Before Going Live
1. UTI experiment exclusion
Source: Pete Apr 30, ship review: "to avoid impacting any live onboarding experiments we can exclude those experiment participants when we release. Continue coordination in O-J <> O-N Coordination."
Task O-J <> O-N Coordination (owned by Pete) lists O-N experiments the UTI team needs to be aware of for exclusion at UTI rollout. Already lists this iOS experiment under "iOS - O-N will handle".
- Confirm experiment is listed and named correctly in O-J <> O-N Coordination before going live.
2. Privacy config targeting
- Added
"targets": [{ "localeLanguage": "en", "localeCountry": "US" }]toonboardingDuckAIQueryExperimentinprivacy-configuration/overrides/ios-override.json
3. Experiment rename
No explicit Asana comment or PR review requested this — no source found.
- Decide: rename
onboardingDuckAIQueryExperimentbefore production rollout? If yes: requires newAIChatSubfeaturecase in BSK + new privacy config entry + disable old one.
Resolved / Dismissed
- GJ6c — No longer required; address bar hidden for visit-site step; Gary + Costas confirmed search after trackers-blocked is acceptable
- GJ2 — X button removed from chat-path dialogs (PR #4664)
- GJ3 — Address bar + toolbar hidden for visit-site step (chat-path only)
- GJ4 — Copy: "Next, try visiting a site!" after AI
- GJ7 — Returning users excluded from experiment enrollment
- GJ8 — Onboarding toggle shows "Ask AI"; Search Experience screen keeps "Duck.ai"
- Fire tabs flash — Suppressed via
isStillOnboarding()inDaxDialogs
Experiment Config (current)
Entry in privacy-configuration/overrides/ios-override.json under aiChat subfeatures:
"onboardingDuckAIQueryExperiment": {
"state": "enabled",
"targets": [{ "localeLanguage": "en", "localeCountry": "US" }],
"cohorts": [
{ "name": "control", "weight": 1 },
{ "name": "treatmentA", "weight": 1 },
{ "name": "treatmentB", "weight": 1 }
]
}
Feature flag:
FeatureFlag.onboardingDuckAIQueryExperiment
Cohort type:FeatureFlag.DuckAIQueryExperimentCohort