From dd4740b10e1fdb6d67f6fe2aa5de089627c30353 Mon Sep 17 00:00:00 2001 From: AviPeltz Date: Tue, 12 May 2026 23:23:35 -0700 Subject: [PATCH 1/5] chore(desktop): default Changes view diff to inline Flip the persisted default for the Changes view diff mode from side-by-side to inline, and bump the persist version so existing users on the old default get migrated. The toolbar toggle still lets users switch back. SUPER-687 --- apps/desktop/src/renderer/stores/changes/store.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/renderer/stores/changes/store.ts b/apps/desktop/src/renderer/stores/changes/store.ts index 1667fbe7c6c..12eed9390ff 100644 --- a/apps/desktop/src/renderer/stores/changes/store.ts +++ b/apps/desktop/src/renderer/stores/changes/store.ts @@ -66,7 +66,7 @@ interface ChangesState { const initialState = { selectedFiles: {} as Record, activeTab: "diffs" as ChangesSidebarTab, - viewMode: "side-by-side" as DiffViewMode, + viewMode: "inline" as DiffViewMode, fileListViewMode: "grouped" as FileListViewMode, expandedSections: { "against-base": true, @@ -231,7 +231,7 @@ export const useChangesStore = create()( }), { name: "changes-store", - version: 5, + version: 6, migrate: (persisted, version) => { const state = persisted as Record; if (version < 2) { @@ -246,6 +246,9 @@ export const useChangesStore = create()( if (version < 5) { state.activeTab = "diffs"; } + if (version < 6) { + state.viewMode = "inline"; + } state.sectionOrder = normalizeChangeSectionOrder( state.sectionOrder as ChangeCategory[] | undefined, ); From f53468c8ac38e3793b711a903c2384b4963cc977 Mon Sep 17 00:00:00 2001 From: AviPeltz Date: Tue, 12 May 2026 23:33:20 -0700 Subject: [PATCH 2/5] chore(desktop): default v2 diff pane to unified The v2 workspace reads diffStyle from the separate `settings` store, which still defaulted to "split". Flip it to "unified" and add a persist migration so existing users get reset. SUPER-687 --- apps/desktop/src/renderer/stores/settings.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/renderer/stores/settings.ts b/apps/desktop/src/renderer/stores/settings.ts index 2b7ae9ecc85..624bcc86f0a 100644 --- a/apps/desktop/src/renderer/stores/settings.ts +++ b/apps/desktop/src/renderer/stores/settings.ts @@ -13,10 +13,20 @@ interface SettingsStore extends Settings { export const useSettings = create()( persist( (set) => ({ - diffStyle: "split", + diffStyle: "unified", showDiffComments: true, update: (key, value) => set({ [key]: value }), }), - { name: "settings" }, + { + name: "settings", + version: 1, + migrate: (persisted, version) => { + const state = (persisted ?? {}) as Record; + if (version < 1) { + state.diffStyle = "unified"; + } + return state as unknown as SettingsStore; + }, + }, ), ); From 777591f56810544420b2f8a77a0a495d5e303ce7 Mon Sep 17 00:00:00 2001 From: AviPeltz Date: Tue, 12 May 2026 23:39:47 -0700 Subject: [PATCH 3/5] chore(desktop): truncate v2 Changes file paths from the start MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a path is too long for the row, ellipsise the directory portion from the left (using the existing `direction: rtl` + pattern) so the deepest folder and filename stay visible — matching FileMentionNode. Basename is now shrink-0 so it never gets clipped in favor of dir text. --- .../ChangesFileList/components/FileRow/FileRow.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx index d35092c147b..aceba2df8ec 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx @@ -108,14 +108,21 @@ export const FileRow = memo(function FileRow({ > - {dir && {dir}} + {dir && ( + + {dir} + + )} {oldBasename && ( {oldBasename} )} - + {basename} From 306cae8d5399241d26d526e1b214237f58ee9be8 Mon Sep 17 00:00:00 2001 From: AviPeltz Date: Tue, 12 May 2026 23:49:33 -0700 Subject: [PATCH 4/5] Revert "chore(desktop): truncate v2 Changes file paths from the start" This reverts commit 777591f56810544420b2f8a77a0a495d5e303ce7. --- .../ChangesFileList/components/FileRow/FileRow.tsx | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx index aceba2df8ec..d35092c147b 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx @@ -108,21 +108,14 @@ export const FileRow = memo(function FileRow({ > - {dir && ( - - {dir} - - )} + {dir && {dir}} {oldBasename && ( {oldBasename} )} - + {basename} From 9491377fdc49aaf099ea3e59f4b3f0576249c4d1 Mon Sep 17 00:00:00 2001 From: AviPeltz Date: Wed, 13 May 2026 00:04:55 -0700 Subject: [PATCH 5/5] chore(desktop): GitHub-style path truncation in Changes view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Render the file path in the sidebar row and the diff-pane header as a single span with direction: rtl + , so when space is tight a single ellipsis appears on the left and the basename stays anchored on the right. Tooltip on hover shows the full path. Previously the sidebar used a CSS rtl trick on a multi-span layout that broke icon/folder alignment, and the diff header used two separately-truncated spans that produced double ellipses ("apps/.../rou… pipelines.…"). --- .../components/FileRow/FileRow.tsx | 18 +++++++++------- .../DiffFileHeader/DiffFileHeader.tsx | 21 ++++++------------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx index d35092c147b..a4e275f0bdc 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/components/WorkspaceSidebar/hooks/useChangesTab/components/ChangesFileList/components/FileRow/FileRow.tsx @@ -63,8 +63,8 @@ export const FileRow = memo(function FileRow({ onOpenFile, onOpenInEditor, }: FileRowProps) { - const { dir: fullDir, basename } = splitPath(file.path); - const dir = hideDir ? "" : fullDir; + const { basename } = splitPath(file.path); + const displayPath = hideDir ? basename : file.path; const oldBasename = file.oldPath && (file.status === "renamed" || file.status === "copied") ? splitPath(file.oldPath).basename @@ -108,15 +108,17 @@ export const FileRow = memo(function FileRow({ > - {dir && {dir}} {oldBasename && ( - + {oldBasename} )} - - {basename} + + {displayPath} @@ -216,7 +218,9 @@ export const FileRow = memo(function FileRow({ {rowButton} - {policy.hint} + + {file.path} + onSelect?.(file.path)}> diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/DiffPane/components/DiffFileHeader/DiffFileHeader.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/DiffPane/components/DiffFileHeader/DiffFileHeader.tsx index d5a60fa0826..1a6c8558c44 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/DiffPane/components/DiffFileHeader/DiffFileHeader.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/DiffPane/components/DiffFileHeader/DiffFileHeader.tsx @@ -44,13 +44,6 @@ export function DiffFileHeader({ const { copyToClipboard, copied } = useCopyToClipboard(); const policy = useSidebarFilePolicy(); - // Split into directory + basename so the basename stays visible when the - // header is narrow — the directory truncates with ellipsis first, and the - // basename truncates only as a fallback (very narrow pane or no directory). - const lastSlash = path.lastIndexOf("/"); - const dir = lastSlash >= 0 ? path.slice(0, lastSlash + 1) : ""; - const name = lastSlash >= 0 ? path.slice(lastSlash + 1) : path; - return (
- {policy.hint} + {path}