From 33d400c567a48fc730b2e95f307b9edd99132cc0 Mon Sep 17 00:00:00 2001 From: adamelmore <2363879+adamdottv@users.noreply.github.com> Date: Tue, 27 Jan 2026 15:31:32 -0600 Subject: [PATCH 1/4] fix(app): spinner color --- packages/ui/src/components/spinner.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/spinner.css b/packages/ui/src/components/spinner.css index 6b432d045d..2ca474dc3c 100644 --- a/packages/ui/src/components/spinner.css +++ b/packages/ui/src/components/spinner.css @@ -1,5 +1,5 @@ [data-component="spinner"] { - color: var(--text-base); + color: inherit; flex-shrink: 0; width: 18px; aspect-ratio: 1; From 605e5335588adeb96bc9549553e9976b84338a8d Mon Sep 17 00:00:00 2001 From: adamelmore <2363879+adamdottv@users.noreply.github.com> Date: Tue, 27 Jan 2026 15:55:26 -0600 Subject: [PATCH 2/4] fix(app): file tree not always loading --- packages/app/src/components/file-tree.tsx | 24 ++++++++++++++++++- packages/app/src/pages/session.tsx | 28 ++++++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/packages/app/src/components/file-tree.tsx b/packages/app/src/components/file-tree.tsx index d43310b195..bd989f755d 100644 --- a/packages/app/src/components/file-tree.tsx +++ b/packages/app/src/components/file-tree.tsx @@ -8,6 +8,7 @@ import { createMemo, For, Match, + onCleanup, Show, splitProps, Switch, @@ -123,7 +124,28 @@ export default function FileTree(props: { createEffect(() => { const path = props.path - untrack(() => void file.tree.list(path)) + const state = { cancelled: false, timer: undefined as number | undefined } + + const load = (attempt: number) => { + if (state.cancelled) return + if (file.tree.state(path)?.loaded) return + + void untrack(() => file.tree.list(path)).finally(() => { + if (state.cancelled) return + if (file.tree.state(path)?.loaded) return + if (attempt >= 2) return + + const wait = Math.min(2000, 250 * 2 ** attempt) + state.timer = window.setTimeout(() => load(attempt + 1), wait) + }) + } + + load(0) + + onCleanup(() => { + state.cancelled = true + if (state.timer !== undefined) clearTimeout(state.timer) + }) }) const nodes = createMemo(() => { diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 7257cdc119..a4e6e24b11 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1256,7 +1256,33 @@ export default function Page() { if (!wants) return if (sync.data.session_diff[id] !== undefined) return - sync.session.diff(id) + const state = { + cancelled: false, + attempt: 0, + timer: undefined as number | undefined, + } + + const load = () => { + if (state.cancelled) return + const pending = sync.session.diff(id) + if (!pending) return + pending.catch(() => { + if (state.cancelled) return + const attempt = state.attempt + 1 + state.attempt = attempt + if (attempt > 5) return + if (state.timer !== undefined) clearTimeout(state.timer) + const wait = Math.min(10000, 250 * 2 ** (attempt - 1)) + state.timer = window.setTimeout(load, wait) + }) + } + + load() + + onCleanup(() => { + state.cancelled = true + if (state.timer !== undefined) clearTimeout(state.timer) + }) }) const autoScroll = createAutoScroll({ From 13b2587e96060a95da8396ec2da630d2a02f20dd Mon Sep 17 00:00:00 2001 From: adamelmore <2363879+adamdottv@users.noreply.github.com> Date: Tue, 27 Jan 2026 15:58:57 -0600 Subject: [PATCH 3/4] test(app): fix outdated e2e test --- packages/app/e2e/file-tree.spec.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/app/e2e/file-tree.spec.ts b/packages/app/e2e/file-tree.spec.ts index 12ea7a081f..c22a810f4f 100644 --- a/packages/app/e2e/file-tree.spec.ts +++ b/packages/app/e2e/file-tree.spec.ts @@ -3,9 +3,10 @@ import { test, expect } from "./fixtures" test("file tree can expand folders and open a file", async ({ page, gotoSession }) => { await gotoSession() - await page.getByRole("button", { name: "Toggle file tree" }).click() - + const toggle = page.getByRole("button", { name: "Toggle file tree" }) const treeTabs = page.locator('[data-component="tabs"][data-variant="pill"][data-scope="filetree"]') + + if ((await toggle.getAttribute("aria-expanded")) !== "true") await toggle.click() await expect(treeTabs).toBeVisible() await treeTabs.locator('[data-slot="tabs-trigger"]').nth(1).click() From 5c8580a187d437f2813a9cc315ab04db5acf7ad1 Mon Sep 17 00:00:00 2001 From: adamelmore <2363879+adamdottv@users.noreply.github.com> Date: Tue, 27 Jan 2026 16:11:58 -0600 Subject: [PATCH 4/4] test(app): fix outdated e2e test --- packages/app/e2e/titlebar-history.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/e2e/titlebar-history.spec.ts b/packages/app/e2e/titlebar-history.spec.ts index b8141b9829..d4aa605e6d 100644 --- a/packages/app/e2e/titlebar-history.spec.ts +++ b/packages/app/e2e/titlebar-history.spec.ts @@ -29,8 +29,8 @@ test("titlebar back/forward navigates between sessions", async ({ page, slug, sd await expect(page).toHaveURL(new RegExp(`/${slug}/session/${two.id}(?:\\?|#|$)`)) await expect(page.locator(promptSelector)).toBeVisible() - const back = page.getByRole("button", { name: "Go back" }) - const forward = page.getByRole("button", { name: "Go forward" }) + const back = page.getByRole("button", { name: "Back" }) + const forward = page.getByRole("button", { name: "Forward" }) await expect(back).toBeVisible() await expect(back).toBeEnabled()