From a017ddfc29611fe65ffa86920acd18b12689e863 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sat, 11 Jul 2026 18:34:26 +0200 Subject: [PATCH] fix(app): hide header Git actions for non-Git workspaces --- packages/app/e2e/empty-project-persists.spec.ts | 5 +---- packages/app/src/git/policy.test.ts | 8 ++++++-- packages/app/src/git/policy.ts | 8 ++++++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/app/e2e/empty-project-persists.spec.ts b/packages/app/e2e/empty-project-persists.spec.ts index 43433b210..ea6b6e59a 100644 --- a/packages/app/e2e/empty-project-persists.spec.ts +++ b/packages/app/e2e/empty-project-persists.spec.ts @@ -161,10 +161,7 @@ test.describe("Project with no workspaces persists", () => { timeout: 30_000, }); await workspaceRow.click(); - await expect(page.getByTestId("changes-primary-cta")).toHaveAttribute( - "aria-label", - "Archive workspace", - ); + await expect(page.getByTestId("changes-primary-cta")).toHaveCount(0); await archiveWorkspaceFromSidebar(page, workspace.workspaceId); diff --git a/packages/app/src/git/policy.test.ts b/packages/app/src/git/policy.test.ts index 3a71121ec..c5d0a508d 100644 --- a/packages/app/src/git/policy.test.ts +++ b/packages/app/src/git/policy.test.ts @@ -353,14 +353,18 @@ describe("git-actions-policy", () => { ); }); - it("offers archive workspace regardless of its backing", () => { + it("hides Git actions for a non-Git workspace", () => { const directory = buildGitActions(createInput({ isGit: false })); + + expect(directory).toEqual({ primary: null, secondary: [], menu: [] }); + }); + + it("offers archive workspace for Git checkouts and worktrees", () => { const localCheckout = buildGitActions(createInput({ hasUncommittedChanges: true })); const worktree = buildGitActions( createInput({ hasUncommittedChanges: true, isPaseoOwnedWorktree: true }), ); - expect(directory.primary?.id).toBe("archive-workspace"); expect(localCheckout.secondary.some((action) => action.id === "archive-workspace")).toBe(true); expect(worktree.secondary.some((action) => action.id === "archive-workspace")).toBe(true); }); diff --git a/packages/app/src/git/policy.ts b/packages/app/src/git/policy.ts index 50a3c8933..5bc7c0b65 100644 --- a/packages/app/src/git/policy.ts +++ b/packages/app/src/git/policy.ts @@ -189,6 +189,10 @@ export function narrowPullRequestState(state: string | null | undefined): "open" } export function buildGitActions(input: BuildGitActionsInput): GitActions { + if (!input.isGit) { + return { primary: null, secondary: [], menu: [] }; + } + const allActions = new Map(); allActions.set("commit", { @@ -293,8 +297,8 @@ export function buildGitActions(input: BuildGitActionsInput): GitActions { const primaryActionId = getPrimaryActionId(input); const primary = primaryActionId ? (allActions.get(primaryActionId) ?? null) : null; - const secondaryIds = input.isGit ? [...REMOTE_ACTION_IDS] : []; - if (input.isGit && !input.isOnBaseBranch) { + const secondaryIds = [...REMOTE_ACTION_IDS]; + if (!input.isOnBaseBranch) { secondaryIds.push(...getFeatureActionIds(input)); } secondaryIds.push("archive-workspace");