diff --git a/CHANGELOG.md b/CHANGELOG.md index 0979de5e3c..ba5efad922 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,38 @@ file is the human-readable summary of what changed and why. ### Desktop / Web UI +- **A folder on Work is unmounted from its own menu** — the menu on a **Work** + project offered **Close**, which only took the row out of the sidebar while + the sandbox went on holding the folder: the folder was still mounted, still + listed under **Folders…**, and the row could come back on the next launch. + That entry is now **Unmount**, in red, and it does what it says — the folder + leaves the sandbox, and the row goes with it. Mounting the folder again + brings its project back. The folder the sandbox was created with is fixed for + its life, so its menu offers neither; deleting the sandbox is still the way + to be rid of that one. On macOS and Linux unmounting restarts the sandbox, as + it does from the Folders… dialog. **Code** keeps Close, unchanged. +- **Work stops borrowing Code's sessions before its sandbox is ready** — while + a sandbox is being created or started, the **Work** side has no server of its + own, and the sidebar filled **Pinned** and **Recents** with the local + machine's sessions while the main area kept whatever Code session was open, + composer and all. Both belonged to the side you had just left. The sections + now stay empty next to the message explaining the sandbox is not ready, and + switching to a side with nothing connected lands on its home screen instead + of the other side's session. +- **A restarting sandbox no longer shows you the wrong machine** — mounting or + unmounting a folder restarts the sandbox, and while it was away a **New + session** tab belonging to it quietly rendered the local machine's composer: + the sidebar said Work, the screen was Code, and sending the prompt would have + run it on your own machine. Those tabs now wait, with a spinner, and come back + on their own once the sandbox does — the same screen open sessions already + showed. The sidebar went the same way: **Pinned** and **Recents** switched to + the local machine's sessions for those seconds and then switched back, and the + tab strip briefly widened to every folder of the sandbox. Both now hold still + — the sections stay empty beside "Your sandbox is not running yet", and the + strip keeps the folder you were in. +- **Deleting a sandbox now looks destructive** — **Delete** in a sandbox's menu + (Settings → Servers) sat in the same colour as Reset and Mount project. It is + now red, matching ordinary and WSL servers. - **A new sandbox's project no longer flashes "workspace"** — a sandbox's project folder is mounted inside the guest at a fixed path, and until the app finished renaming the project after your folder — a round trip through diff --git a/DIVERGENCES.md b/DIVERGENCES.md index 7002bb8b8d..a753805352 100644 --- a/DIVERGENCES.md +++ b/DIVERGENCES.md @@ -126,6 +126,7 @@ from the squash message first, or use a plain merge. | `packages/ui/src/theme/context.tsx`, `packages/app/public/oc-theme-preload.js`, `packages/app/src/theme-preload.test.ts`, `packages/app/src/pages/layout.tsx`, `packages/app/src/components/settings-general.tsx`, `packages/app/src/components/settings-v2/general.tsx` | **One theme in the web/desktop UI; light and dark are the only axis.** Upstream ships 36 selectable palettes with a Settings → Appearance **Theme** picker and command-palette entries. The fork exposes none of them: OC-2 is the theme, `colorScheme` (system/light/dark) is the only appearance choice. The lock lives at `normalize()` in `theme/context.tsx`, renamed to the exported `normalizeThemeID()` and returning the exported `SHIPPED_THEME_ID` unconditionally — that one function is already on every path (provider init, the `onMount` migration, `load`, the cross-tab `storage` listener, `setTheme`, `previewTheme`), so a stored id from before the picker was removed, or one written by another tab, resolves to OC-2 without a second guard. It is exported (and the six call sites renamed) so `theme/context.test.ts` can cover the invariant directly instead of only through its call sites — the module imports cleanly under `bun test` because `import.meta.glob` is called lazily inside `getFiles()`. It also gives the migration for free: `onMount` already rewrites `opencode-theme-id` and calls `clear()` when the raw value differs from the normalized one, which now drops the stale `opencode-theme-css-{light,dark}` cache. `ids()` returns `["oc-2"]` and `loadThemes()` loads only OC-2 instead of all 36 (it was `Promise.all(themeIDs().map(load))`). The bundled theme JSON, the `names` map and `registerTheme` are **left alone** — unreferenced data costs nothing and keeps upstream's theme edits applying cleanly. `oc-theme-preload.js` does the same rewrite *before* mount, so the first launch after upgrading does not paint the user's old palette for a frame; with no other theme reachable its cached-CSS `