diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx
index 865ed160..926c5546 100644
--- a/src/components/Sidebar.tsx
+++ b/src/components/Sidebar.tsx
@@ -2983,6 +2983,33 @@ function ProjectFolderView({
+ {inSourceRoot && isDefaultProjectFolder(folder) ? (
+
+
+
+ ) : null}
{
).toContainText("demo-api");
});
+ test("a source folder header creates a worktree session in that source repository", async ({
+ page,
+ tauri,
+ }) => {
+ await tauri.respond("list_projects", [
+ {
+ repo_path: "/tmp/demo",
+ name: "demo",
+ created_at: "2026-01-01T00:00:00Z",
+ position: 0,
+ source_paths: ["/tmp/acorn"],
+ },
+ ]);
+ await tauri.handle("list_sessions", () => {
+ const w = window as unknown as {
+ __sessions?: Array>;
+ };
+ return w.__sessions ?? [];
+ });
+ await tauri.handle("create_session", (args) => {
+ const input = args as {
+ name: string;
+ repoPath: string;
+ isolated: boolean;
+ kind: string;
+ };
+ const w = window as unknown as {
+ __createCalls?: unknown[];
+ __sessions?: Array>;
+ };
+ w.__createCalls = [...(w.__createCalls ?? []), args];
+ const created = {
+ id: "created-worktree-session",
+ name: input.name,
+ repo_path: input.repoPath,
+ worktree_path: `${input.repoPath}/.acorn/worktrees/${input.name}`,
+ branch: "worktree",
+ isolated: input.isolated,
+ project_scoped: true,
+ status: "ready",
+ created_at: "2026-01-01T00:00:00Z",
+ updated_at: "2026-01-01T00:00:00Z",
+ last_message: null,
+ title_source: "default",
+ kind: input.kind,
+ owner: { kind: "user" },
+ position: 0,
+ in_worktree: true,
+ };
+ w.__sessions = [...(w.__sessions ?? []), created];
+ return created;
+ });
+
+ await page.goto("/");
+
+ const sourceFolderHeader = page.locator(
+ 'aside [data-sidebar-workspace-id="/tmp/acorn"]',
+ );
+ await sourceFolderHeader.hover();
+ const createWorktreeSessionButton = sourceFolderHeader.getByRole("button", {
+ name: "New worktree session in this workspace",
+ });
+ await expect(createWorktreeSessionButton).toBeVisible();
+ await createWorktreeSessionButton.click();
+
+ await expect
+ .poll(async () =>
+ page.evaluate(
+ () =>
+ (
+ window as unknown as {
+ __createCalls?: Array>;
+ }
+ ).__createCalls ?? [],
+ ),
+ )
+ .toEqual([
+ expect.objectContaining({
+ repoPath: "/tmp/acorn",
+ isolated: true,
+ kind: "regular",
+ }),
+ ]);
+ });
+
test("each root's row holds the sessions started in that root", async ({
page,
tauri,