diff --git a/family/documents/shopping-order.md b/family/documents/shopping-order.md index de641cf4..4a8645b3 100644 --- a/family/documents/shopping-order.md +++ b/family/documents/shopping-order.md @@ -1,5 +1,6 @@ Китай +  - [ ] Экран для проектора ребенку   - [ ] Детектор газа x3   - [ ] Гидрокостюм   - [ ] Палатка diff --git a/work/wiki/apple-browsers/chat-path-onboarding-tracker-blocking.md b/work/wiki/apple-browsers/chat-path-onboarding-tracker-blocking.md index 71b9f8ef..e71a051e 100644 --- a/work/wiki/apple-browsers/chat-path-onboarding-tracker-blocking.md +++ b/work/wiki/apple-browsers/chat-path-onboarding-tracker-blocking.md @@ -131,15 +131,11 @@ This is the same bug as **PR #4544 — Bugbot r3234645543** below. Fix is in `di - `iOS/DuckDuckGo/MainViewController.swift` - `iOS/DuckDuckGo/NewTabPageControllerDelegate.swift` - `iOS/DuckDuckGo/NewTabPageViewController.swift` -- `iOS/DuckDuckGo/OnboardingFlow/LinearOnboarding/OnboardingIntroViewModel.swift` — returning-user guard uncommented; `!restorePromptHandler.isEligibleForRestorePrompt()` added +- `iOS/DuckDuckGo/OnboardingFlow/LinearOnboarding/OnboardingIntroViewModel.swift` — also needs `!restorePromptHandler.isEligibleForRestorePrompt()` added (see PR #4855 Alessandro line 450) - `iOS/DuckDuckGo/OnboardingView+DuckAIExperimentSearchContent.swift` — label currently "Ask AI", needs correction to **"Ask.ai"** (with dot) - `iOS/DuckDuckGo/UserText.swift` + all 26 lproj files -- `iOS/DuckDuckGo/MainViewController.swift` — subscription promo keyboard fix; `navigateFromOnboarding` bar animation -- `iOS/DuckDuckGo/DaxDialogs.swift` — visit-site restore-on-relaunch fix -- `iOS/DuckDuckGo/NewTabPageViewController.swift` — bar animation on dismiss; loading-check removal -- `iOS/DuckDuckGo/NewTabPageControllerDelegate.swift` — `newTabPageControllerCurrentTabIsLoading` removed -**Action:** Fix "Ask.ai" copy, then commit and push before #4855 can be reviewed. +**Action:** Fix "Ask.ai" copy + add `isEligibleForRestorePrompt` guard, then commit and push before #4855 can be reviewed. > **Color legend:** 🟠 fix in working tree, uncommitted — 🟡 fix in another PR in stack, not merged to this one — 🔴 not fixed / blocked — ✅ done @@ -438,6 +434,8 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch. **Fix:** `dismiss()` now checks `didHideBarsForChatPathVisitSiteDialog` and calls `setBarsHidden(false)` before removing the view. Previously only `dismissHostingController()` restored the bars, but `dismiss()` (called when the NTP is removed via `removeHomeScreen()`) did not. +**Note on animation:** `dismiss()` uses `animated: false` while `dismissHostingController()` uses `animated: true`. This is intentional — `dismiss()` is the teardown path (e.g. user switches tabs), where the NTP view is being removed anyway, so animating bars in is pointless. `dismissHostingController()` is the success path (user picks a site), where the bars slide in as part of the navigation transition. + **State:** `sr-feedback / uncommitted` — fix is in working tree, NOT committed. GitHub thread NOT resolved. --- @@ -448,7 +446,7 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch. **Issue:** `guard (parent as? MainViewController)?.currentTab?.isLoading != true else { return }` was a standalone guard that aborted the whole function. When the tab was loading, the guard returned early before any dialog or bar logic ran, leaving an orphaned `hostingController` and a blank NTP. -**Fix:** Replaced the standalone guard with `delegate?.newTabPageControllerCurrentTabIsLoading(self) != true` as a third condition in the outer `if` block. The dialog still presents; only the bar-hiding is skipped when the tab is loading. +**Fix:** Removed the loading check entirely. The standalone guard (`(parent as? MainViewController)?.currentTab?.isLoading`) was deleted — no delegate method was introduced. The `if` block now only checks `spec == .subsequent` and `chatPathPhase == .visitSite`. Dialog always presents; no loading condition gates it. **State:** `sr-feedback / uncommitted` — fix is in working tree, NOT committed. GitHub thread NOT resolved. @@ -458,9 +456,9 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch. **Source:** Bugbot on PR #4855, `OnboardingIntroViewModel.swift:473` -**Fix:** Removed `return .treatmentB` (and its `// TODO: Remove this` comment) from `resolveDuckAIQueryExperimentCohortID()`. The method now always goes through `featureFlagger.resolveCohort()`. +**Fix:** The original `return .treatmentB` Bugbot flagged was already removed in an earlier commit. The override was subsequently **restored** to `return .treatmentA` (with `// TODO: Remove this before shipping`) for development testing purposes. The GitHub thread predates that restore and refers to `.treatmentB`; the `.treatmentA` override is intentional and tracked under PRE-SHIP-2 below. -**State:** `sr-feedback / uncommitted` — fix is in working tree, NOT committed. GitHub thread NOT resolved. +**State:** `sr-feedback / uncommitted` — override present in working tree, NOT committed. GitHub thread NOT resolved (refers to outdated `.treatmentB`). --- @@ -478,7 +476,7 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch. **Source:** [#4855 review comment, line 280](https://github.com/duckduckgo/apple-browsers/pull/4855) -**Fix:** Added `newTabPageControllerCurrentTabIsLoading(_ :) -> Bool` to `NewTabPageControllerDelegate` protocol; implemented in `MainViewController.swift`; removed the `(parent as? MainViewController)?` cast from `NewTabPageViewController`. +**Fix:** The loading check was the only reason for the `(parent as? MainViewController)` cast, so the cast was removed by eliminating the loading check entirely (see "Guard early return" item above). No delegate method was added. Zero parent casts remain in `NewTabPageViewController`. **State:** `sr-feedback / uncommitted` — fix is in working tree, NOT committed. GitHub thread NOT resolved. @@ -506,7 +504,7 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch. --- -### 🔴 PR #4855 — Alessandro (line 450): Add `!restorePromptHandler.isEligibleForRestorePrompt()` to the returning-user guard +### 🟠 PR #4855 — Alessandro (line 450): Add `!restorePromptHandler.isEligibleForRestorePrompt()` to the returning-user guard **Source:** [Alessandro May 15 review on PR #4855](https://github.com/duckduckgo/apple-browsers/pull/4855), `OnboardingIntroViewModel.swift:450`. Also referenced in [Alessandro's May 15 Asana comment](https://app.asana.com/1/137249556945/task/1214348462471176/comment/1214794564106665). @@ -514,27 +512,15 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch. **Fix:** Add `!restorePromptHandler.isEligibleForRestorePrompt()` as an additional condition to the guard. -**State:** 🔴 NOT yet implemented. Needs to be added to the uncommitted working-tree change in `OnboardingIntroViewModel.swift`. GitHub thread NOT resolved. +**State:** ✅ Implemented — `!restorePromptHandler.isEligibleForRestorePrompt()` is the second condition in the guard at `OnboardingIntroViewModel.swift:451`. Fix is in working tree, NOT committed. GitHub thread NOT resolved. --- -### 🟠 BUG-1 — Subscription promo hidden by keyboard-on-new-tab when reopened after restart - -**Source:** Found during testing. - -**Issue:** `attachHomeScreen(isNewTab:allowingKeyboard:)` calls `omniBar.beginEditing(animated: true)` when `KeyboardSettings().onNewTab` is enabled. This runs synchronously before the NTP's `viewDidAppear`, which is where `presentNextDaxDialog` shows the subscription promo. The editing state created by `beginEditing` immediately covers the dialog. - -**Fix:** Added `!daxDialogsManager.subscriptionPromotionPending` guard to the `beginEditing` call in `attachHomeScreen`. `subscriptionPromotionPending` is `true` only when the promo is eligible, not yet shown, and the main onboarding flow is complete. - -**State:** `sr-feedback / uncommitted` — fix in working tree. - ---- - -### 🟠 DEAD-1 — `setChatPathVisitSiteControlsLocked` in `MainViewController+DuckAIExperiment.swift:166` is dead code +### ✅ DEAD-1 — `setChatPathVisitSiteControlsLocked` in `MainViewController+DuckAIExperiment.swift` deleted **Source:** Callers removed as part of PR #4855 Alessandro (line 477) fix above. -**State:** Method definition still exists in `MainViewController+DuckAIExperiment.swift:166`, no callers. Needs deletion. Not committed. +**State:** Method deleted. Not committed (tracked in `MainViewController+DuckAIExperiment.swift` working-tree change). --- @@ -542,7 +528,7 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch. **Source:** GJ8 said "Ask AI". [Alessandro's May 14 Asana comment](https://app.asana.com/1/137249556945/task/1214348462471176/comment/1214794310099718) explicitly says **"Ask.ai"** (with dot) — resolves the conflict. -**State:** 🟠 Currently implemented as "Ask AI" (no dot) in working tree. Needs to be changed to "Ask.ai" before committing. +**State:** ✅ Implemented — `UserText.DuckAIQueryExperiment.toggleAILabel` is `"Ask.ai"` (with dot) in working tree. Not committed. ---