diff --git a/DIVERGENCES.md b/DIVERGENCES.md
index 47e3cdc1d5..d98eab69af 100644
--- a/DIVERGENCES.md
+++ b/DIVERGENCES.md
@@ -46,7 +46,9 @@ upstream maintainers — see README → Syncing with upstream for why and how.
| `packages/tui/src/component/dialog-provider.tsx`, `packages/tui/src/component/dialog-model.tsx`, `packages/opencode/src/cli/cmd/providers.ts` | Filter `opencode`/`opencode-go` out of provider pickers and the `/model` dialog (model list + Favorites/Recent; the model dialog's opencode-first sort became a plain name sort) | Upstream's hosted offerings (Zen/Go) are detours for gateway users. | Keep our filters. |
| `packages/tui/src/component/prompt/index.tsx` | Gated the prompt footer's model/provider indicator on `useConnected()` (the shared "a real provider is configured" predicate) | Don't advertise the free hosted Zen default (e.g. "Big Pickle · OpenCode Zen") in the footer while nothing is configured — same rationale and predicate as `app.tsx`'s startup gate and the provider/model filters. A configured gateway/real provider, or a deliberately-authenticated opencode/opencode-go, still shows its model. | Keep the extra `Show` condition; take upstream's surrounding changes. |
| `packages/app/index.html` | `
` → "CoDev Code" | Web UI tab title. | Keep our title. |
-| `packages/app/src/pages/layout.tsx`, `packages/app/src/pages/layout-new.tsx` | Dropped the ` ` mount and its import from both layouts (added upstream in v1.17.18); `HelpButton` stays. `help-button.tsx` itself is left upstream — `TabsInfoPopup` remains defined/exported there, just unmounted (tree-shaken out of the build). | `TabsInfoPopup` is a dev-channel-only "Introducing Tabs" promo whose `muted autoplay loop` `` mounts on every layout render. The fork's Windows e2e runs on GPU-less GitHub-hosted runners (software GPU — see the runner-swap row), where continuous video decode wedges the GPU command buffer (`kTransientFailure`), making the whole app-e2e suite flaky and ~3–5× slower. It never ships (release builds use a non-`dev` `CODEV_CHANNEL`), so unmounting it costs users nothing. | Keep ours: don't re-add the ` ` mount or restore it to the import. Leave upstream's `help-button.tsx` (incl. the `TabsInfoPopup` definition) untouched so it never conflicts. |
+| `packages/app/src/pages/layout.tsx`, `packages/app/src/pages/layout-new.tsx` | Dropped the ` ` mount and its import from both layouts (added upstream in v1.17.18); `HelpButton` stays. | `TabsInfoPopup` is a dev-channel-only "Introducing Tabs" promo whose `muted autoplay loop` `` mounts on every layout render. The fork's Windows e2e runs on GPU-less GitHub-hosted runners (software GPU — see the runner-swap row), where continuous video decode wedges the GPU command buffer (`kTransientFailure`), making the whole app-e2e suite flaky and ~3–5× slower. It never ships (release builds use a non-`dev` `CODEV_CHANNEL`), so unmounting it costs users nothing. | Keep ours: don't re-add the ` ` mount or restore it to the import. |
+| `packages/app/src/components/help-button.tsx` | Removed the `TabsInfoPopup` component, its `introducing-tabs.mp4` import, and the imports only it used; `HelpButton` stays. (The file's `VITE_OPENCODE_CHANNEL` → `VITE_CODEV_CHANNEL` gates follow the env-var rename row.) | The popup is upstream's temporary, OpenCode-branded "Introducing Tabs" promo (upstream's own comment says it's removable after the rollout), already unmounted per the row above; removing the definition lets the 13 MB video be deleted (row below). | Keep our removal; take upstream's changes to `HelpButton`. If upstream mounts `TabsInfoPopup` somewhere new, drop that mount per the row above. When upstream deletes the popup itself, this row and the two rows around it retire. |
+| `packages/app/src/assets/help/` (introducing-tabs.mp4, placeholder.png — whole directory) | Deleted | The 13 MB promo video's only consumer was the removed `TabsInfoPopup` (row above) and it bloats every clone; `placeholder.png` is referenced by nothing. | Keep deleted (`git rm` the upstream side of modify/delete conflicts). |
| `packages/app/src/desktop-menu.ts`, `packages/app/src/components/windows-app-menu.tsx` | App-menu label "OpenCode" → "CoDev Code" | Visible menu branding. | Keep our labels. |
| `packages/desktop/src/main/index.ts`, `packages/desktop/src/main/windows.ts` | APP_NAMES + window title → "CoDev Code" (Dev/Beta variants too) | Desktop app display name. | Keep our names. |
| `packages/desktop/electron-builder.config.ts` | `productName` ×3 → "CoDev Code…"; artifactName → `codev-code-desktop-…`; protocol display name | Installer/product branding. appId (`ai.opencode.desktop`) and the `opencode://` deep-link scheme stay upstream — identity plumbing wired into main/index.ts and app deep-links; do not rename casually. | Keep our names; take upstream's other config. |
diff --git a/packages/app/src/assets/help/introducing-tabs.mp4 b/packages/app/src/assets/help/introducing-tabs.mp4
deleted file mode 100644
index 2bcc8aeef6..0000000000
Binary files a/packages/app/src/assets/help/introducing-tabs.mp4 and /dev/null differ
diff --git a/packages/app/src/assets/help/placeholder.png b/packages/app/src/assets/help/placeholder.png
deleted file mode 100644
index c651d06cc9..0000000000
Binary files a/packages/app/src/assets/help/placeholder.png and /dev/null differ
diff --git a/packages/app/src/components/help-button.tsx b/packages/app/src/components/help-button.tsx
index b0561b13ce..ce5b2c7d39 100644
--- a/packages/app/src/components/help-button.tsx
+++ b/packages/app/src/components/help-button.tsx
@@ -1,11 +1,4 @@
-import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon"
-import { IconButtonV2 } from "@opencode-ai/ui/v2/icon-button-v2"
-import { createSignal, Show } from "solid-js"
-import { createStore } from "solid-js/store"
-import { Drawer, DrawerClose, DrawerContent } from "@/components/ui/drawer"
import { usePlatform } from "@/context/platform"
-import introducingTabsVideo from "@/assets/help/introducing-tabs.mp4"
-import { Persist, persisted } from "@/utils/persist"
const helpIcon = (
)
}
-
-// can remove this after the tabs rollout has been out for a while
-export function TabsInfoPopup() {
- if (import.meta.env.VITE_CODEV_CHANNEL !== "dev") return null
-
- const [state, setState] = persisted(Persist.global("tabsInfoPopup"), createStore({ dismissed: false }))
- // setState({ dismissed: false }) // for testing
- const [drawerOpen, setDrawerOpen] = createSignal(false)
-
- return (
-
-
-
-
setState("dismissed", true)}
- >
-
-
-
-
-
{
- setState("dismissed", true)
- setDrawerOpen(true)
- }}
- >
- event.preventDefault()}
- />
-
-
- Introducing Tabs
-
-
- A faster, more intuitive way to work.
-
-
-
-
-
-
-
-
-
- Introducing Tabs Navigation.
-
-
- We've introduced tabs as the primary navigation in OpenCode. Your most important session are now pinned at
- the top of your screen at all times. No more hunting through menus or losing your place mid-session. Switch
- contexts instantly, pick up exactly where you left off, and keep your focus where it belongs: on the
- sessions.
-
-
-
-
- )
-}